Реализация модуля Telegram Bridge (WTelegramClient) #1

Open
opened 2026-04-06 23:56:14 +03:00 by rust · 0 comments
Owner

Цель: Создать изолированный модуль Knot.Modules.Telegram, позволяющий пользователям подключать свои аккаунты Telegram и транслировать сообщения в систему Knot.

  1. Проектирование структуры (Projects)
    Создать в решении следующие проекты:

Knot.Modules.Telegram.Domain: Сущности (TelegramSession, UserConfig).

Knot.Modules.Telegram.Contracts: Публичные интерфейсы и Integration Events (например, NewTelegramMessageReceived).

Knot.Modules.Telegram.Infrastructure: Реализация WTelegramClient, работа с базой данных (EF Core) и файловым хранилищем (MinIO для сессий).

Knot.Modules.Telegram.Application: Команды (Connect, VerifyCode, SendMessage) и обработчики (Handlers).

  1. Схема базы данных (PostgreSQL)
    Необходимо создать таблицу для хранения данных сессии, чтобы пользователь не проходил авторизацию при каждом перезапуске сервера.

UserId (Guid) — привязка к пользователю Knot.

SessionData (byte[]) — сериализованный поток сессии WTelegramClient.

IsActive (bool).

PhoneNumber (string).

  1. Контракты и События (Contracts)
    Определить, как другие модули (например, Messaging) узнают о новых сообщениях.

C# public record TelegramMessageReceived( Guid KnotUserId, long TelegramChatId, string SenderName, string Text, DateTime CreatedAt ) : INotification; // Для MediatR

  1. Реализация Service Layer
    Создать менеджер сессий, который управляет жизненным циклом клиентов:

ITelegramManager: Методы LoginAsync(phone), SubmitCodeAsync(code), SendMessageAsync(...).

Реализация: В методе Login конфигурировать WTelegramClient, подписываясь на событие OnUpdate.

  1. Фоновый сервис (BackgroundWorker)
    Поскольку Web-приложение должно постоянно «слушать» Telegram:

Создать TelegramWorker : BackgroundService.

При старте (ExecuteAsync) вычитывать из БД все активные сессии и инициализировать для каждой инстанс WTelegramClient.

Обрабатывать входящие обновления (Updates) и пробрасывать их в шину событий (MediatR/MassTransit).

Технические детали (Acceptance Criteria)
Конфигурация: api_id и api_hash должны считываться из IConfiguration (User Secrets или Environment Variables).

Потокобезопасность: Использовать ConcurrentDictionary<Guid, WTelegramClient> для хранения активных подключений в памяти сервера.

Логирование: Настроить детальный лог событий подключения (особенно ошибки FloodWait и PhoneCodeInvalid).

Интеграция с SignalR: Модуль Telegram не должен напрямую дергать хабы. Он должен кидать IntegrationEvent, на который подпишется API-слой и отправит данные клиенту в браузер.

Цель: Создать изолированный модуль Knot.Modules.Telegram, позволяющий пользователям подключать свои аккаунты Telegram и транслировать сообщения в систему Knot. 1. Проектирование структуры (Projects) Создать в решении следующие проекты: Knot.Modules.Telegram.Domain: Сущности (TelegramSession, UserConfig). Knot.Modules.Telegram.Contracts: Публичные интерфейсы и Integration Events (например, NewTelegramMessageReceived). Knot.Modules.Telegram.Infrastructure: Реализация WTelegramClient, работа с базой данных (EF Core) и файловым хранилищем (MinIO для сессий). Knot.Modules.Telegram.Application: Команды (Connect, VerifyCode, SendMessage) и обработчики (Handlers). 2. Схема базы данных (PostgreSQL) Необходимо создать таблицу для хранения данных сессии, чтобы пользователь не проходил авторизацию при каждом перезапуске сервера. UserId (Guid) — привязка к пользователю Knot. SessionData (byte[]) — сериализованный поток сессии WTelegramClient. IsActive (bool). PhoneNumber (string). 3. Контракты и События (Contracts) Определить, как другие модули (например, Messaging) узнают о новых сообщениях. `C# public record TelegramMessageReceived( Guid KnotUserId, long TelegramChatId, string SenderName, string Text, DateTime CreatedAt ) : INotification; // Для MediatR` 4. Реализация Service Layer Создать менеджер сессий, который управляет жизненным циклом клиентов: ITelegramManager: Методы LoginAsync(phone), SubmitCodeAsync(code), SendMessageAsync(...). Реализация: В методе Login конфигурировать WTelegramClient, подписываясь на событие OnUpdate. 5. Фоновый сервис (BackgroundWorker) Поскольку Web-приложение должно постоянно «слушать» Telegram: Создать TelegramWorker : BackgroundService. При старте (ExecuteAsync) вычитывать из БД все активные сессии и инициализировать для каждой инстанс WTelegramClient. Обрабатывать входящие обновления (Updates) и пробрасывать их в шину событий (MediatR/MassTransit). Технические детали (Acceptance Criteria) Конфигурация: api_id и api_hash должны считываться из IConfiguration (User Secrets или Environment Variables). Потокобезопасность: Использовать ConcurrentDictionary<Guid, WTelegramClient> для хранения активных подключений в памяти сервера. Логирование: Настроить детальный лог событий подключения (особенно ошибки FloodWait и PhoneCodeInvalid). Интеграция с SignalR: Модуль Telegram не должен напрямую дергать хабы. Он должен кидать IntegrationEvent, на который подпишется API-слой и отправит данные клиенту в браузер.
rust added this to the Backend project 2026-04-18 22:24:02 +03:00
Sign in to join this conversation.