Цель: Создать изолированный модуль Knot.Modules.Telegram, позволяющий пользователям подключать свои аккаунты Telegram и транслировать сообщения в систему Knot.
Проектирование структуры (Projects)
Создать в решении следующие проекты:
Knot.Modules.Telegram.Contracts: Публичные интерфейсы и Integration Events (например, NewTelegramMessageReceived).
Knot.Modules.Telegram.Infrastructure: Реализация WTelegramClient, работа с базой данных (EF Core) и файловым хранилищем (MinIO для сессий).
Knot.Modules.Telegram.Application: Команды (Connect, VerifyCode, SendMessage) и обработчики (Handlers).
Схема базы данных (PostgreSQL)
Необходимо создать таблицу для хранения данных сессии, чтобы пользователь не проходил авторизацию при каждом перезапуске сервера.
Контракты и События (Contracts)
Определить, как другие модули (например, Messaging) узнают о новых сообщениях.
C# public record TelegramMessageReceived( Guid KnotUserId, long TelegramChatId, string SenderName, string Text, DateTime CreatedAt ) : INotification; // Для MediatR
Реализация Service Layer
Создать менеджер сессий, который управляет жизненным циклом клиентов:
ITelegramManager: Методы LoginAsync(phone), SubmitCodeAsync(code), SendMessageAsync(...).
Реализация: В методе Login конфигурировать WTelegramClient, подписываясь на событие OnUpdate.
Фоновый сервис (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
Blocking a user prevents them from interacting with repositories, such as opening or commenting on pull requests or issues. Learn more about blocking a user.
Цель: Создать изолированный модуль Knot.Modules.Telegram, позволяющий пользователям подключать свои аккаунты Telegram и транслировать сообщения в систему Knot.
Создать в решении следующие проекты:
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).
Необходимо создать таблицу для хранения данных сессии, чтобы пользователь не проходил авторизацию при каждом перезапуске сервера.
UserId (Guid) — привязка к пользователю Knot.
SessionData (byte[]) — сериализованный поток сессии WTelegramClient.
IsActive (bool).
PhoneNumber (string).
Определить, как другие модули (например, Messaging) узнают о новых сообщениях.
C# public record TelegramMessageReceived( Guid KnotUserId, long TelegramChatId, string SenderName, string Text, DateTime CreatedAt ) : INotification; // Для MediatRСоздать менеджер сессий, который управляет жизненным циклом клиентов:
ITelegramManager: Методы LoginAsync(phone), SubmitCodeAsync(code), SendMessageAsync(...).
Реализация: В методе Login конфигурировать WTelegramClient, подписываясь на событие OnUpdate.
Поскольку 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-слой и отправит данные клиенту в браузер.