R50 61b420b0dc8588e388405e8c218f3936
Web-разработчик

AtmosSeriesBot — Бот Telegram с проверкой подписки, рассылкой и админ

Добавлено 14 окт 2022 в 23:21
Стек:
  • TypeScript
  • NodeJS
  • Redis + bee-queue
  • Telegram API
  • MongoDB
AtmosSeriesBot — бот для канала MonkeFilm (бывший AtmosSeries), размещающий реферальную ссылку для трафика из ТикТока. Он умеет проверять подписку пользователя на заданные каналы и дает администраторам огромный функционал через админ-панель. На момент написания текста имеет больше 200 тысяч пользователей и отвечает за <0.1 секунду.

Задачи:
  • Создание бота в Telegram с проверкой на подписки на каналы
  • После проверки подписки бот должен отдавать задаваемую через админ-панель реферальную ссылку на другой канал/бота, куда будет переходить пользователь
  • Написание воркера на Redis
    • Предусмотреть возможность очереди задач
      • Рассылка рекламы пользователям
      • Стирание рекламы у пользователей (для защиты от блокировки бота после жалоб)
      • Удаление задачи
    • Оптимизировать отправку запросов к Telegram API путем создания асинхронных параллельных потоков, сократить время
    • Предусмотреть возможность вылетов процесса, даунтайма сервера. Создание команды для продолжения рассылки после непредусмотренной остановки, чистку испорченной базы данных внутри бота
  • Настройка сервера на Ubuntu, принятие всех ключевых решений для оптимизации скорости работы
  • Установка базы данных MongoDB
  • Создание админ-панели
    • Раздел "Статистика"
      • Должен иметь три подраздела, в каждом из которых указывается статистика по боту
      • Например, в подразделе основная статистика указаны "живые" (не остановившие бота) и "активные" пользователи за определенный интервал
      • В каждом сообщении пишется дата, чтобы админ бота мог быстро переслать статистику рекламодателю
    • Раздел "Рассылка"
      • Создание рассылок при помощи удобного интерфейса в Telegram (кнопки и сообщения)
      • Предусмотрены все возможные сценарии поведения пользователя-администратора
      • Предусмотрены все возможные ошибки в синтаксисе отправляемых сообщений
      • В задачах отображается текущий прогресс, сообщаемый воркером через базу данных Redis
    • Раздел "Каналы"
      • Добавление, удаление каналов, обязательных для подписки пользователям
      • Создание обработчиков ошибок, когда администратор забывает добавить бота в подписчики, а тот не может проверить, есть ли в подписках у канала тот или иной пользователь
        • Во время проверки подписки эта ошибка тоже учитывается
    • Раздел "Рефералы"
      • Написание модуля пагинации для вывода рефералов постранично в кнопках
      • Написание модуля инвайтов для удобной выдачи ролей пользователям
        • Достаточно создать инвайт вида /claim 6tabsbdanjsdkmxc:tjhsdnbasdnl и отослать пользователю, бот примет от него эту команду и выдаст роль реферала. Защитные меры в виде истечения срока действия инвайта также есть, см. видео
      • Отслеживание пользователей от рефералов и добавление в их статистику по команде ?start= в аргументе бота
    • Раздел "Основной канал"
      • Это та ссылка, которая выдается после подписки на обязательные каналы
      • Все ошибки во время процесса ее смены предусмотрены
      • Для безопасности пишется дата последней смены ссылки
    • Раздел "Админы"
      • Добавление и удаление с модулем инвайтов (см. Раздел "Рефералы)

Выполнено за:
30 дней (150 часов)

Разрабатывалось в феврале 2022 года

Работу бота можно посмотреть здесь: https://t.me/AtmosSeriesBot
Демонстрацию работы админки можно посмотреть здесь: https://www.youtube.com/watch?v=FAoSuad2fEM
A52d9921c6