Стек:- 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