Skip to content

Бот для отправки реплик deko от лица пользователя через Inline Query

License

Notifications You must be signed in to change notification settings

SecondThundeR/deko-voice-bot

Repository files navigation

Deko Voice Bot

Бот для отправки реплик deko от лица пользователя через Inline Query

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

Note

Ссылка на "боевого" бота: https://t.me/dekoquotes_bot

Используемые технологии

  • Бот построен на Bun с использованием TypeScript
  • В качестве библиотеки для взаимодействия с Telegram Bot API используется grammY
  • Бот и база данных работают на хостинге Railway
  • Данные хранятся в MongoDB Atlas и управляются с помощью официального драйвера

    Базу данных пришлось перенести с кластера Atlas ввиду многочисленных ошибок, связанных с обрывом соединения с БД, из-за чего бот падал в самое неподходящее время суток. База данных теперь находится в том же месте, что и бот

  • Строки сообщений и другого текста бота находятся в Fluent формате и обрабатываются с помощью плагина grammy-i18n
  • Менюшки работают через плагин grammy_menu и интерактивные диалоги через плагин grammy_conversations

Как работает бот

Post-milestone 2.0

В новом обновлении теперь существует возможность совмещения работы из pre-milestone 2.0 эры и сохранение войсов как file_id, так как добавление реплик теперь возможно через диалоги с ботом

Благодаря тому, что реплика может быть отправлена перед отправкой данных в БД, таким образом можно удостовериться, что реплика была сконвертирована корректно, и затем уже получить file_id без необходимости отправлять их в сторонние чаты/каналы (так как чат с ботом это отличное место для такого)

Не смотря на это, функциональность работы с внешними ссылками для реплик никуда не делась и она будет по-прежнему актуальна. Если нужно добавить реплику, которая находится в удаленном хранилище, можно использовать команду /newremotevoices

Note

Стоит заметить, что добавление реплик через URL и через файл слегка отличаются

Реплика в удаленном хранилище должна уже быть заранее конвертирована в .ogg OPUS формат, так как не смотря на то, что бот может вполне скачивать реплики и конвертировать их как при отправке файла в личные сообщения, есть все же риск некорректной работы ввиду возможного получения битого, невалидного или скомпрометированного файла....даже если этой командой будет пользоваться один человек и это админ

Robust security is a must - not an option

Pre-milestone 2.0 (Deprecated)

Warning

В данной секции описана работа бота до обновления с добавлением реплик через личные сообщения

В документации Telegram Bot API описана возможность отправки голосовых сообщений с помощью Inline двумя способами:

  • Передача file_id голосового сообщения (что немного неудобно, так как надо войсы хостить в закрытом канале и получать у каждого его ID)
  • Передача ссылки на .ogg файл в удаленном хранилище (что уже более удобный вариант)

Таким образом, реплики бота находятся на Google Drive, откуда потом получаются ссылки на каждую реплику и в дальнейшем бот скачивает файл с репликой и отправляет в Telegram

Tip

Далее, Telegram кеширует голосовое сообщение и позволяет отправлять без необходимости повторного скачивания с Google Drive

Также у бота предусмотрено кеширование данных о репликах. Это позволяет получать необходимые реплики без необходимости частого обращения к базе данных напрямую

Как использовать исходники бота у себя

Tip

tl;dr скачайте исходники, настройте базу данных, заполните необходимые переменные в .env и запустите удобным образом

Подробная инструкция по полной настройке бота теперь находится здесь

Добавление новых реплик

Реплики в боте можно добавлять с помощью команд /newvoices или /newremotevoices

Если использовать реплики через URL, то необходимо, чтобы они были заранее сконвертированы (см. сноску в разделе выше)

Как контрибьютить

А зачем? Ну ладно, если так хочется, то флоу очень прост: Форк -> Новая ветка от develop -> Пулл реквест

И желательно, использовать названия для коммитов из "Соглашений о коммитах", иначе коммиты будут смержены в один общий

Лицензия

Бот распространяется по лицензии MIT. Больше деталей в файле LICENSE