Skip to content

Telegram-бот на вебхуках, конвертирующий голосовые сообщения в файлы .mp3 для отправки пользователям Telegram Premium, запретившим отправку себе голосовых сообщений

License

Notifications You must be signed in to change notification settings

taksebe-official/voice4PremiumBot

Folders and files

NameName
Last commit message
Last commit date

Latest commit

 

History

4 Commits
 
 
 
 
 
 
 
 
 
 

Repository files navigation

Что я такое?

Telegram-бот, конвертирующий голосовые сообщения в mp3-файлы для отправки мажору, купившему Premium и запретившему отправку себе голосовых сообщений

Статья на Хабре

Лицензия

Этот проект лицензируется в соответствии с лицензией Apache 2.0

Подробности в файле LICENSE

Попробовать

@Voice4PremiumBot доступен в Telegram

Автор

Сергей Козырев

Контакты для связи

Telegram @taksebe

Создано с помощью

Java™ SE Development Kit 11.0.5

Spring Framework

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

Отдельное спасибо

Владу, который, видимо, всегда будет возиться со мной, неразумным

P.S.

Если вдруг увидите в ответах бота польский, напишите мне, я скажу вам спасибо за найденную ошибку

About

Telegram-бот на вебхуках, конвертирующий голосовые сообщения в файлы .mp3 для отправки пользователям Telegram Premium, запретившим отправку себе голосовых сообщений

Resources

License

Stars

Watchers

Forks

Releases

No releases published

Packages

No packages published

Languages