Telegram-бот, конвертирующий голосовые сообщения в mp3-файлы для отправки мажору, купившему Premium и запретившему отправку себе голосовых сообщений
Этот проект лицензируется в соответствии с лицензией Apache 2.0
Подробности в файле LICENSE
@Voice4PremiumBot доступен в Telegram
Сергей Козырев
Telegram @taksebe
Java™ SE Development Kit 11.0.5
Git - управление версиями
GitHub - репозиторий
Telegram Bots - взаимодействие с Telegram
Apache Maven - сборка, управление зависимостями
Lombok - упрощение кода, замена стандартных java-методов аннотациями
ffmpeg - конвертирование аудио-файлов
Полный список зависимостей и используемые версии компонентов можно найти в pom.xml
Перед сборкой необходимо создать бота с помощью BotFather и сохранить его имя и токен (они понадобятся для запуска)
Далее
git clone https://github.com/taksebe-official/voice4PremiumBot
Создать в проекте файл 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:
- скачать и запустить ngrok
- отправить команду
ngrok http 5000
, вместо 5000 можно использовать другой порт - главное, чтобы тот же, что прописан в настройкеserver.port
- скопировать ссылку вида https://73c8-80-250-84-162.ngrok.io, вставить её в настройку
telegram.webhook-path
Далее нужно скорректировать (если это необходимо) внутренние настройки работы приложения:
files.incoming: "<префикс наименования временных файлов голосовых сообщений, поступающих от пользователя. Нужен для последующего удаления по шедулеру>"
files.outgoing: "<префикс наименования временных файлов .mp3, отправляемых пользователю. Нужен для последующего удаления по шедулеру>"
schedule.cron.delete-temp-files: <расписание удаления временных файлов - например, для удаления раз в 10 минут 0 */10 * ? * *>
Наконец, можно изменить (опять же, если это необходимо) параметры сообщений, отправляемых пользователю:
message.start.picture-file-id: "<Telegram-идентификатор картинки, отправлямой в ответ на команду /start, см ниже>"
message.start.picture-file-path: "<Путь до картинки (начиная от resources), отправлямой в ответ на команду /start в случае, если отправка с использованием fileId не сработала>"
message.start.text: "<текст, отправлямый пользователю в ответ на команду /start>"
message.too-big-voice.text: "<текст, отправлямой пользователю при попытке конвертировать голосовое сообщение длительностью более максимально допустимой (10 минут)>"
message.illegal-message.text: "<текст, отправлямой пользователю в ответ на любые сообщения, кроме голосовых и /start>"
message.wtf.text: "<текст, отправлямой пользователю в случае ошибки>"
Получить Telegram-идентификатор нужной картинки проще всего после первого локального запуска бота, направив ему нужное изображение и изучив под дебагом объект message
- во вложенном списке photo
в любом из трёх объектов нужно скопировать поле fileId
. При использовании идентификатора отправка производится быстрее, однако стоит помнить, что Telegram умеет его со временем забывать, поэтому отдельно реализована отправка картинки из проекта
Далее:
mvn clean install
java $JAVA_OPTS -jar target/premium-audio-1.0-SNAPSHOT.jar
Для проверки работоспособности приложения можно использовать специальный метод для тестирования (код в классе TestController
) - введите в браузере http://localhost:5000/premium/test и получите в ответ текст "I believe I can fly" (если при создании вебхука в ngrok вы использовали другой порт, не 5000, поменяйте его и в этом url)
Далее необходимо зарегистрировать webhook в Telegram - для этого нужно отправить в любом браузере ссылку вида:
https://api.telegram.org/bot<токен бота от Botfather>/setWebhook?url=<URL вебхука, полученного от ngrok>/premium
Теперь можно проверять бота непосредственно в Telegram
Владу, который, видимо, всегда будет возиться со мной, неразумным
Если вдруг увидите в ответах бота польский, напишите мне, я скажу вам спасибо за найденную ошибку