Telegram-бот для генерации готового для печати Word-файла, содержащего задания для запоминания правописания словарных слов русского языка
Пользователь может использовать встроенные словари для 1-4 классов и формировать собственный, используя инструменты бота
Бот принесёт пользу родителям, которые хотят подтянуть грамотность своих детей
Этот проект лицензируется в соответствии с лицензией Apache 2.0
Подробности в файле LICENSE
@WriteReadRightBot доступен в Telegram
Сергей Козырев
Telegram @taksebe
Java™ SE Development Kit 11.0.5
Git - управление версиями
GitHub - репозиторий
Redis - СУБД
Telegram Bots - взаимодействие с Telegram
Apache Maven - сборка, управление зависимостями
Apache POI - создание файлов Word и Excel
Lombok - упрощение кода, замена стандартных java-методов аннотациями
Heroku - деплой, хостинг
Полный список зависимостей и используемые версии компонентов можно найти в pom.xml
Перед сборкой необходимо создать бота с помощью BotFather и сохранить его имя и токен (они понадобятся для запуска)
Далее
git clone https://github.com/taksebe-official/writeReadRightBot
Создать в проекте файл src/main/resources/application.yaml
(или .properties
, если Вам так привычнее)
Добавить в него настройки Telegram:
telegram.api-url: "https://api.telegram.org/"
telegram.user: <имя бота, полученное от BotFather>
telegram.token: <токен бота, полученный от BotFather>
telegram.webhook-path: <см чуть ниже>
server.port: <см чуть ниже>
Для получения настроек telegram.webhook-path
и server.port
при локальной отладке можно использовать прекрасную утилиту ngrok, здесь инструкция конкретно для вебхуков Telegram
Далее нужно добавить в тот же файл настройки подключения к БД Redis:
spring.redis.database: 0
spring.redis.host: <хост БД Redis>
spring.redis.port: <порт БД Redis>
spring.redis.password: <пароль БД Redis>
spring.redis.ssl: true
Можно уже на этом этапе использовать Heroku Redis. Для создания БД необходимо:
- Зарегистрироваться на Heroku
- Создать проект - New/Create new app в правой части экрана
- Перейти на вкладку Resources
- В разделе Add-ons ввести в поисковую строку "Heroku Redis", выбрать её в результатах поиска
- Подтвердить подключение БД к проекту
- В правом верхнем углу нажать на иконку в виде квадрата из синих точек, выбрать пункт Data, в открывшемся списке баз нажать на только что созданную. Первые несколько минут после подключения может тормозить и показывать ошибку
- Перейти на вкладку Settings
- Нажать на кнопку View credentials в правой части экрана
- Вуаля, перед Вами настройки подключения к БД. Скопируйте их в Ваш файл application
Далее:
mvn clean install
java $JAVA_OPTS -jar target/write-read-1.0-SNAPSHOT.jar
Проект писался для релиза на Heroku и содержит специфический для этой площадки файл system.properties
, в котором нужно указать версию Java, если она отлична от 8. Ещё один специфический для Heroku файл Procfile
в данном случае можно не добавлять, он будет сгенерирован автоматичеки на основе pom.xml
Сначала нужно обязательно удалить/закомментировать в файле src/main/resources/application.yaml
(или .properties
) настройки подключения к БД - она подцепится автоматически, поскольку подключена к проекту на Heroku. Если оставить эти настройки, ничего не заведётся, они нужны только для внешнего подключения к этой БД
Погнали:
//предварительно зарегистрироваться на Heroku
heroku login
heroku create <имя приложения>
Далее зайти на Heroku и добавить в созданный проект БД Heroku Redis (инструкция выше в этом ReadMe, в разделе "Сборка и запуск")
Далее:
mvn clean install
git push heroku master
//установить количество контейнеров (dynos) для типа процесса web
heroku ps:scale web=1
В интерфейсе управления приложением в личном кабинете на Heroku можно перейти к логам (прячутся под кнопкой More в правом верхнем углу) и убедиться, что приложение запущено
Далее необходимо зарегистрировать webhook в Telegram - для этого нужно отправить в любом браузере ссылку вида:
https://api.telegram.org/bot<токен бота от Botfather>/setWebhook?url=<URL веб-приложения на Heroku>
URL веб-приложения можно получить, нажав на кноку Open app (в правом верхнем углу) - приложение откроется в новой вкладке, необходимо скопировать URL в адресной строке
Теперь можно проверять бота непосредственно в Telegram
При необходимости в интерфейсе управления приложением на вкладке Deploy можно переключить деплой на GitHub-репозиторий (по запросу или автоматически)
Как известно, Heroku гасит веб-приложения, которые не используются какое-то время, поэтому на первое сообщение бот может отвечать порядка 8-10 секунд - он ждёт, когда приложение развернётся с нуля. Это позволяет на бесплатном тарифе хостить много редко используемых веб-приложений - в тарифе учитывается только время аптайма
Чтобы заставить приложение работать постоянно, можно добавить в проект пинг по расписанию условного Google, но нужно понимать, что в этом случае бот будет съедать львиную долю бесплатного тарифа. Я жадный, я так делать не буду:)
Владу, который всё ещё возится со мной, неразумным, хотя, казалось бы, я уже давно должен был повзрослеть