Этот проект включает Telegram-бота, реализованного с использованием фреймворка NestJS. Бот имеет различные функциональные возможности, включая обработку пользовательских команд, взаимодействие с Redis для потоковой передачи событий и управление несколькими рабочими процессами для потребления и создания событий.
Класс TelegramUpdate
обрабатывает основные взаимодействия с ботом Telegram. Он слушает различные команды и сообщения и передает соответствующие действия другим сервисам.
- start: Вызывается при запуске бота.
- startCommand: Обрабатывает команду
/start
. - restartCommand: Обрабатывает команду
/restart
. - poolOnCommand: Обрабатывает команду
/poolon
. - poolOffCommand: Обрабатывает команду
/pooloff
. - enableCommand: Обрабатывает команду
/enable
. - disableCommand: Обрабатывает команду
/disable
. - logoutCommand: Обрабатывает команду
/logout
. - selectStatusCommand: Обрабатывает команду
/select
. - selectStatusAction: Обрабатывает выбор статуса.
- callbackQuery: Обрабатывает callback-запросы.
- onText: Обрабатывает текстовые сообщения.
- authorization: Обрабатывает контактную информацию для авторизации.
Бот использует такие сервисы, как UserService
, CommandHandler
, LoginScene
и InteractionScene
, чтобы управлять различными аспектами своей функциональности, такими как управление пользователями, обработка команд и переходы между сценами.
Класс EventProducer
отвечает за создание событий, которые будет потреблять бот. Он периодически проверяет наличие новых событий и отправляет их в поток Redis.
- onModuleInit: Инициализирует создание событий при запуске модуля.
- onModuleDestroy: Очищает ресурсы при уничтожении модуля.
- produceEvents: Извлекает события из Redis и обрабатывает их.
- populateEvents: Настраивает интервал для периодического создания событий.
Класс EventConsumer
предназначен для потребления событий из потока Redis и их обработки, включая отправку сообщений пользователям Telegram.
- onModuleInit: Инициализирует потребление событий при запуске модуля.
- onModuleDestroy: Очищает ресурсы при уничтожении модуля.
- sendTelegramMessage: Отправляет сообщение в чат Telegram.
- consumeEvents: Извлекает сообщения из потока Redis и обрабатывает их.
- processMessageQueue: Обрабатывает очередь сообщений и обрабатывает сообщения последовательно.
- getMessagesFromStream: Получает сообщения из потока Redis.
- createConsumerGroupIfNeeded: Обеспечивает создание группы потребителей Redis, если она не существует.
- startConsumer: Запускает процесс потребления.
- deleteExistingConsumers: Удаляет существующих потребителей из потока Redis.
Приложение использует кластеризацию для использования многоядерных процессоров, улучшая производительность и надежность.
- bootstrap: Инициализирует приложение и настраивает кластер. Если работает как главный процесс, настраивает группу потребителей Redis и форкает рабочие процессы. Также обрабатывает периодические обновления и очистку данных, если это необходимо.
- bootstrapWorker: Инициализирует отдельные рабочие процессы.
MICROSERVICE_BOT_NAME
: Имя микросервисного бота.TELEGRAM_BOT_TOKEN
: Токен для доступа к API Telegram-бота.FLUSH_CONSUMERS
: Флаг для определения необходимости очистки существующих потребителей.FLUSH_AREAS
: Флаг для определения необходимости очистки областей.FLUSH_RANGEIPS
: Флаг для определения необходимости очистки диапазонов IP.consumerName
: Имя экземпляра потребителя.
Для запуска приложения просто выполните npm install && npm run start:dev
и в другом терминале npm run cli:consumer
или npm run cli:consumers