Найти тему
Fake programmer

Разбор функционала бота "Таро" для telegram

Другие статьи серии:

1) Описание проекта

2) Запуск проекта

3) Исходный код

Основной точкой входа всей логики бота является сервис TaroBotCore, он выполняет следующие основные функции:

Инициализация и конфигурация бота

Здесь происходит инициализация различных сервисов, необходимых для работы бота, а также загрузка конфигурации из внешних настроек, таких как токен Telegram API.

Запуск обработки обновлений

Метод ExecuteAsync запускает процесс получения обновлений от Telegram с помощью метода StartReceiving. Бот постоянно получает обновления (сообщения, запросы нажатий на кнопки и т.д.) и передает их для обработки.

Метод HandleUpdateAsync отвечает за обработку каждого обновления. Он извлекает информацию о чате и пользователе, после чего передает ее в сервис UserService, который проверяет профиль пользователя и его подписку на каналы (если в настройках заданы каналы, на которые пользователь должен быть подписан, чтобы пользоваться ботом). Если пользователь не подписан на требуемые каналы, бот отправляет ему предупреждение.

Метод HandleUpdateAsync
Метод HandleUpdateAsync

Обработка сообщений

Для обработки различных типов сообщений и взаимодействий используется механизм процессоров, которые выбираются на основе типа обновления (Update). Сообщения могут обрабатываться с использованием различных сервисов, таких как ICardDataProvider, IPromptProvider, и GPT API, предоставленного через IGptModelApi.

Обработка ошибок

Метод HandleErrorAsync обрабатывает любые ошибки, возникающие в процессе обработки обновлений. Логгер фиксирует ошибки, а пользователю может быть отправлено сообщение с их описанием.

UpdateProcessorProvider

UpdateProcessorProvider
UpdateProcessorProvider

Код UpdateProcessorProvider отвечает за маршрутизацию обновлений (сообщений и нажатий кнопок) к соответствующим процессорам, которые затем выполняют конкретные действия, соответствующие полученной команде. Этот подход позволяет боту быть более модульным и расширяемым, поскольку для добавления новой команды нужно всего лишь добавить новый процессор и обновить логику выбора процессора в этом коде.

Обработчики команд бота
Обработчики команд бота

UserService — важная часть бота.

UserService отвечает за управление профилями пользователей, проверку их прав и подписок на каналы, а также за ведение учета запросов к боту.
Основные функции, которые выполняет этот сервис:

Инициализация и зависимости
В конструкторе UserService происходит инициализация необходимых зависимостей, таких как служба базы данных ITaroBotDbService, провайдер каналов ITgChannelsProvider, настройки администраторов AdminSettings и настройки прав доступа PermissionsSettings. Также инициализируется логгер для записи ошибок и событий.

Конструктор UserService
Конструктор UserService

Проверка возможности отправки запроса пользователем. 
Метод CheckRequestPossibility проверяет, может ли пользователь отправить запрос к боту. Если во время проверки возникает ошибка, она логируется. Метод Check выполняет более детальную проверку, включая:

- Является ли пользователь администратором. Администраторы всегда имеют право на отправку запросов.

- Проверку даты последнего запроса пользователя. Если с последнего запроса прошло более одного дня, то счетчик запросов обнуляется.

- Проверку количества бесплатных запросов, отправленных пользователем за последний день, на основе настроек. Если пользователь не превысил лимит, запрос разрешается.

Метод Check
Метод Check

Проверка, является ли пользователь администратором:
Метод IsAdmin проверяет, входит ли ID пользователя в список администраторов, указанный в настройках. Если да, то возвращается true, иначе — false.

Метод IsAdmin
Метод IsAdmin

Проверка подписки на каналы:
Метод CheckSubChannels проверяет, подписан ли пользователь на необходимые Telegram-каналы. Это делается для каждого канала из списка, предоставленного ITgChannelsProvider. Если пользователь не подписан или был удален/ограничен в канале, метод возвращает false.

Метод CheckSubChannels
Метод CheckSubChannels

Обработка профиля пользователя.
Метод ProcessUserProfile обрабатывает профиль пользователя при каждом взаимодействии с ботом. Он проверяет, существует ли пользователь в базе данных. Если нет, создается новый профиль с информацией о пользователе (ID, дата регистрации, имя, фамилия и т.д.). Если пользователь уже существует, обновляется дата последнего запроса.

Метод ProcessUserProfile
Метод ProcessUserProfile

UserService управляет профилями пользователей, контролирует их права и лимиты, а также проверяет подписки на каналы. Это позволяет боту эффективно работать с пользовательскими данными, проверять, может ли пользователь отправить запрос, и отслеживать активность каждого пользователя.

В следующей части мы рассмотрим использование docker для быстрого запуска бота, а в последнем посте серии я поделюсь с вами
исходниками бота, чтоб вы могли сами его запустить и использовать.

Больше статей на boosty

Удачи 😎