Разработка 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;