Skip to content

Latest commit

 

History

History
77 lines (53 loc) · 6.17 KB

README.md

File metadata and controls

77 lines (53 loc) · 6.17 KB

Обзор Telegram-бота

Этот проект включает Telegram-бота, реализованного с использованием фреймворка NestJS. Бот имеет различные функциональные возможности, включая обработку пользовательских команд, взаимодействие с Redis для потоковой передачи событий и управление несколькими рабочими процессами для потребления и создания событий.

Структура проекта

Класс TelegramUpdate

Класс 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

Класс EventProducer отвечает за создание событий, которые будет потреблять бот. Он периодически проверяет наличие новых событий и отправляет их в поток Redis.

Основные методы:

  • onModuleInit: Инициализирует создание событий при запуске модуля.
  • onModuleDestroy: Очищает ресурсы при уничтожении модуля.
  • produceEvents: Извлекает события из Redis и обрабатывает их.
  • populateEvents: Настраивает интервал для периодического создания событий.

Класс EventConsumer

Класс 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