Мы с важной новостью: с 28 февраля 2025 года сервис Хабр Фриланс прекратит свою работу.

Купить услуги можно до 28 февраля 2025, но пополнить баланс уже нельзя. Если на вашем счете остались средства, вы можете потратить их на небольшие услуги — служба поддержки готова поделиться бонусами, на случай, если средств немного не хватает.
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