Другие статьи серии:
3) Исходный код
Основной точкой входа всей логики бота является сервис TaroBotCore, он выполняет следующие основные функции:
Инициализация и конфигурация бота
Здесь происходит инициализация различных сервисов, необходимых для работы бота, а также загрузка конфигурации из внешних настроек, таких как токен Telegram API.
Запуск обработки обновлений
Метод ExecuteAsync запускает процесс получения обновлений от Telegram с помощью метода StartReceiving. Бот постоянно получает обновления (сообщения, запросы нажатий на кнопки и т.д.) и передает их для обработки.
Метод HandleUpdateAsync отвечает за обработку каждого обновления. Он извлекает информацию о чате и пользователе, после чего передает ее в сервис UserService, который проверяет профиль пользователя и его подписку на каналы (если в настройках заданы каналы, на которые пользователь должен быть подписан, чтобы пользоваться ботом). Если пользователь не подписан на требуемые каналы, бот отправляет ему предупреждение.
Обработка сообщений
Для обработки различных типов сообщений и взаимодействий используется механизм процессоров, которые выбираются на основе типа обновления (Update). Сообщения могут обрабатываться с использованием различных сервисов, таких как ICardDataProvider, IPromptProvider, и GPT API, предоставленного через IGptModelApi.
Обработка ошибок
Метод HandleErrorAsync обрабатывает любые ошибки, возникающие в процессе обработки обновлений. Логгер фиксирует ошибки, а пользователю может быть отправлено сообщение с их описанием.
UpdateProcessorProvider
Код UpdateProcessorProvider отвечает за маршрутизацию обновлений (сообщений и нажатий кнопок) к соответствующим процессорам, которые затем выполняют конкретные действия, соответствующие полученной команде. Этот подход позволяет боту быть более модульным и расширяемым, поскольку для добавления новой команды нужно всего лишь добавить новый процессор и обновить логику выбора процессора в этом коде.
UserService — важная часть бота.
UserService отвечает за управление профилями пользователей, проверку их прав и подписок на каналы, а также за ведение учета запросов к боту.
Основные функции, которые выполняет этот сервис:
Инициализация и зависимости
В конструкторе UserService происходит инициализация необходимых зависимостей, таких как служба базы данных ITaroBotDbService, провайдер каналов ITgChannelsProvider, настройки администраторов AdminSettings и настройки прав доступа PermissionsSettings. Также инициализируется логгер для записи ошибок и событий.
Проверка возможности отправки запроса пользователем.
Метод CheckRequestPossibility проверяет, может ли пользователь отправить запрос к боту. Если во время проверки возникает ошибка, она логируется. Метод Check выполняет более детальную проверку, включая:
- Является ли пользователь администратором. Администраторы всегда имеют право на отправку запросов.
- Проверку даты последнего запроса пользователя. Если с последнего запроса прошло более одного дня, то счетчик запросов обнуляется.
- Проверку количества бесплатных запросов, отправленных пользователем за последний день, на основе настроек. Если пользователь не превысил лимит, запрос разрешается.
Проверка, является ли пользователь администратором:
Метод IsAdmin проверяет, входит ли ID пользователя в список администраторов, указанный в настройках. Если да, то возвращается true, иначе — false.
Проверка подписки на каналы:
Метод CheckSubChannels проверяет, подписан ли пользователь на необходимые Telegram-каналы. Это делается для каждого канала из списка, предоставленного ITgChannelsProvider. Если пользователь не подписан или был удален/ограничен в канале, метод возвращает false.
Обработка профиля пользователя.
Метод ProcessUserProfile обрабатывает профиль пользователя при каждом взаимодействии с ботом. Он проверяет, существует ли пользователь в базе данных. Если нет, создается новый профиль с информацией о пользователе (ID, дата регистрации, имя, фамилия и т.д.). Если пользователь уже существует, обновляется дата последнего запроса.
UserService управляет профилями пользователей, контролирует их права и лимиты, а также проверяет подписки на каналы. Это позволяет боту эффективно работать с пользовательскими данными, проверять, может ли пользователь отправить запрос, и отслеживать активность каждого пользователя.
В следующей части мы рассмотрим использование docker для быстрого запуска бота, а в последнем посте серии я поделюсь с вами исходниками бота, чтоб вы могли сами его запустить и использовать.
Больше статей на boosty
Удачи 😎