Найти в Дзене
Fake programmer

Бот "Таро" для telegram. Описание проекта.

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

1) Разбор функционала

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

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

Бот разработан с использованием языка программирования C# (dotnet 6.0), база данных mongoDb (6.0), для развертывания решения используется docker.

Файлы проекта
Файлы проекта

Решение состоит из двух проектов Shared.csproj (библиотека классов) и Taro-bot.csproj(веб-приложение).

Solution проекта
Solution проекта

Бот написан с прицелом на переиспользование его основы в других проектах и на добавление дополнительных .csproj которые могут использовать общий код который будет находиться в Shared

Настройки проекта Shared
Настройки проекта Shared

В проекте с общим кодом находится логика подключения к базе данных и текстовые данные бота (лейблы кнопок и различные текстовые блоки для использования их в сообщениях).
Описание проекта
Taro-bot.csproj:

Настройки проекта бота
Настройки проекта бота

Program.cs
Код в Program.cs представляет собой стандартную настройку ASP.NET Core приложения, которая включает конфигурацию сервисов, настройку маршрутизации и определение конечных точек для обработки HTTP-запросов. Он также включает поддержку gRPC, HTTP-клиента и проверку статуса приложения.

services.Configure<...> используется для привязки конфигурационных секций из файла конфигурации (например, appsettings.json) к соответствующим классам настроек. Это позволяет легко управлять конфигурацией приложения.

Привязка секций конфигурации из appsettings.json
Привязка секций конфигурации из appsettings.json

Регистрация сервисов:

Регистрация сервисов
Регистрация сервисов

TaroBotCore - представляет собой реализацию сервиса на основе BackgroundService для работы с Telegram Bot API. Он позволяет боту обрабатывать обновления и взаимодействовать с различными сервисами.

MockGptApi - этот класс реализует эмуляцию вызова API, возвращает форматированную строку, которая включает в себя переданный prompt. Это полезно для тестирования и разработки без необходимости подключения к реальному API.

CardDataFromJsonProvider, PromptFromJsonProvider, TgChannelsProvider - сервисы поставщики данных для бота.

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

MongoDbProvider - реализует интерфейс IMongoDbProvider и предоставляет реализацию метода для создания клиента MongoDB. Он поддерживает как создание клиента через строку подключения, так и через явные настройки, а также логирует процесс создания клиента и возможные ошибки.

TaroBotDbService - организует доступ к базе данных MongoDB в приложении, предоставляя интерфейсы и реализацию для управления профилями пользователей и конфигурации базы данных. TaroBotDbService обеспечивает настройку MongoDB и предоставляет доступ к CRUD-операциям через интерфейс IUserProfileDbCrudOperations.

Данные приложения

Файлы данных
Файлы данных

В папке Data находятся различные данные которые бот использует для работы: изображения карт, текстовые данные карт, заготовленные шаблоны промтов для языковых моделей, список каналов наличие подписки на которые мы сможем проверять у пользователя.

Общение с языковыми моделями (ChatGPT, Gigachat)
Кроме
mock-заглушки для тестирования MockGptApi в боте реализованы фасады для общения с chatgpt и gigachat - ChatGptApi и GigaChatApi

Файл конфигурации appsettings.json
Представлен в формате
JSON, содержит различные настройки, используемые приложением. Вот детальное описание каждой секции этого файла:

1. Logging

Настройки логирования
Настройки логирования

Назначение: Настройка уровня логирования для приложения.
Default: Устанавливает уровень логирования по умолчанию на Information, что означает запись информационных сообщений и более серьезных сообщений (ошибки, предупреждения и т.д.).
Microsoft.AspNetCore: Устанавливает уровень логирования для компонентов ASP.NET Core на Warning, что означает запись только предупреждений и ошибок.

2. AllowedHosts

Настройки хостов для отправки запросов
Настройки хостов для отправки запросов

Назначение: Определяет, какие хосты могут отправлять запросы к приложению. Значение "*" означает, что приложение разрешает запросы от любых хостов.

3. Kestrel

Настройки web сервера
Настройки web сервера

Назначение: Конфигурация веб-сервера Kestrel.
Protocols: Устанавливает, что Kestrel будет использовать HTTP/2 для всех конечных точек.

4. TelegramApiSettings

Настройки telegram api
Настройки telegram api

Назначение: Настройки для взаимодействия с Telegram API.Token: Токен для аутентификации и доступа к Telegram API. В текущем состоянии он пустой и должен быть заполнен.

5. ChatGptApiSettings

Настройки chat gpt api
Настройки chat gpt api

Назначение: Настройки для взаимодействия с API ChatGPT.ApiKey: API-ключ для доступа к ChatGPT. В текущем состоянии он пустой и должен быть заполнен.

6. GigaChatApiSettings

Настройки gigachat api
Настройки gigachat api

Назначение: Настройки для взаимодействия с GigaChat API.
ClientSecret: Секрет клиента для аутентификации с GigaChat API. Должен быть заполнен.
AuthData: Данные для аутентификации с GigaChat API. Должны быть заполнены.

7. DataSettings

Настройки расположения данных
Настройки расположения данных

Назначение: Пути к файлам данных, которые используются приложением.
MajorArcanaDataPath: Путь к файлу с данными для карт Старших Арканов.
PentacleDataPath: Путь к файлу с данными для карт Пентаклей.
CupDataPath: Путь к файлу с данными для карт Кубков.
SwordsDataPath: Путь к файлу с данными для карт Мечей.
WandsDataPath: Путь к файлу с данными для карт Жезлов.
PromptsDataPath: Путь к файлу с данными для подсказок.
SubChannelsDataPath: Путь к файлу с данными для проверки подписки на каналы.

8. PermissionsSettings

Настройки разрешений для пользователей
Настройки разрешений для пользователей

Назначение: Настройки разрешений для пользователя.
FreeRequestsPerDay: Количество бесплатных запросов, разрешенных пользователю в день.

9. AdminSettings

Список администраторов бота
Список администраторов бота

Назначение: Настройки для определения администраторов приложения.
Admins: Список идентификаторов пользователей, которые имеют административные права. В текущем состоянии он пустой и должен быть заполнен.

10. MainDbSettings

Настройки подключения к базе данных
Настройки подключения к базе данных

Назначение: Настройки подключения к базе данных MongoDB.
Address: Адрес сервера MongoDB. В текущем состоянии задано как "mongodb", что может быть использовано в Docker-контейнере.
DatabaseName: Имя базы данных, к которой нужно подключиться.
User: Имя пользователя для аутентификации.
Password: Пароль для аутентификации.
MaxConnectionPoolSize: Максимальный размер пула соединений.
MinConnectionPoolSize: Минимальный размер пула соединений.
NeedPassword: Флаг, указывающий, требуется ли пароль для подключения.
Port: Порт MongoDB (по умолчанию 27017).
ConnectionString: Строка подключения, если она используется вместо явных настроек (в текущем состоянии пустая).

В следующей статье рассмотрим принципы работы бота и его функциональность.

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