Skip to content

📤 Sender

⬅️ Back | 🏠 Docs Root

Модуль sender предоставляет stateless-сервис для отправки и синхронизации UI Telegram-бота в фреймворке codex-bot.


🧠 Почему так?

Постоянство UI (UI Persistence)

В типичном боте каждое взаимодействие отправляет новое сообщение, создавая длинную и грязную историю чата. ViewSender решает это, управляя двумя постоянными сообщениями (Menu и Content). Вместо отправки новых сообщений он редактирует существующие, когда это возможно, сохраняя чат чистым и сфокусированным.

Stateless-отправка

Поскольку ViewSender — это Stateless Singleton, он не хранит данные пользователя в self. Он использует SenderManager для получения текущих ID сообщений (координат) из постоянного хранилища (например, Redis) для каждого запроса. Это гарантирует консистентность UI даже при работе нескольких экземпляров бота.


🔄 Поток данных (The Flow)

  1. Вход: Director вызывает оркестратор, который возвращает UnifiedViewDTO.
  2. Координация: ViewSender получает UnifiedViewDTO и запрашивает текущие menu_msg_id и content_msg_id у SenderManager.
  3. Синхронизация:
    • Удаление: Если присутствует trigger_message_id (например, /start), оно удаляется.
    • Редактирование: Если сообщения существуют, ViewSender редактирует их с новым контентом и клавиатурой.
    • Создание: Если их нет — отправляются новые сообщения.
  4. Сохранение: SenderManager обновляет ID сообщений в хранилище для следующего запроса.

🗺️ Карта модуля

Компонент Описание
📄 API Reference Технические детали ViewSender и SenderManager.
📄 Sender Keys Фабрика ключей для хранилища координат UI.
📄 Protocols SenderStateStorageProtocol для хранилища координат UI.

Последнее обновление: 2025-02-07