Телеграм бот для отправки инвайтов в Deadlock

Добавлено 24 окт 2024 в 21:18
Разработка MVP телеграм бота для отправки инвайтов на закрытое бета тестирование игры Deadlock. Проект состоит из 2-х приложений:

Телеграм бот + Web API (точка входа для пользователей).
  • фреймворк NestJS;
  • swagger для генерации документации к api;
  • закрытые Web API с доступом по токенам;
  • бот написан с помощью Telegraf;
  • в боте реализованы сессии и локализация;
  • подобие реферальной системы.

В целом это типовое приложение для телеграм бота. Однако хочу подробней рассказать про несколько интересных решений:
  • Web API с доступом по токенам - позволяет в перспективе подключиться к проекту со сторонних сайтов/сервисов или создать web-админку. А также это очень удобно для тестирования микросервиса и управления Steam ботами. Делать все это через телеграм было-бы не так удобно.
  • Подобие реферельной системы в боте - любой пользователь может создать специальную ссылку для приглашения в бота. Все пользователи перешедшие по ней, для получения доступа к основному функционалу бота, должны будут подписаться на канал который указал пригласивший их.
Приложение для работы с Steam и Deadlock (делает основную работу).
  • Микросервис на NestJS;
  • Имитация клиента steam для обхода сильно ограниченного API;
  • Имитация клиента deadlock для выполнения действий доступных только в игре;

Хоть в целом функционал приложения очень небольшой (управление ботами, добавление в друзья, отправка инвайтов и т.д.) и в рамках MVP можно было обойтись "монолитом". Но было решено сразу выносить этот функционал в микросервис чтобы в случае чего можно было быстро отмасштабировать его, т.к. именно эта часть является узким горлышком всего проекта.

Сама по себе задача работы со Steam уже является очень интересной и не простой. У стима очень ограниченный публичный api, поэтому приходится все делать через имитирование их приложений.

Технические особенности:
  • Использование TypeScript во всех приложениях;
  • Синхронизация типизации общих сущностей и тела запроса/ответа к микросервису;
  • Автоматическая доставка обновлений с помощью Github Actions;
0fae5a8658