Skip to content

BotBuilder (Factory) — Сборка и Жизненный цикл

BotBuilder — это высокоуровневый инструмент, который превращает разрозненные компоненты фреймворка в единый работающий организм. Он инкапсулирует в себе все сложности настройки Aiogram и гарантирует соблюдение архитектурных стандартов.


🏗 Концепция "Железобетонного Ядра"

Порядок регистрации Middlewares критически важен. Если поменять их местами, система может потерять доступ к БД или не распознать админа. BotBuilder берет эту ответственность на себя через метод setup_core.

Стандартная цепочка обработки:

  1. Database Middleware: Если включено, открывает транзакцию и кладет сессию в контекст.
  2. Container Middleware: Прокидывает ваш DI-контейнер во все хендлеры.
  3. Throttling Middleware: Отсекает спам на раннем этапе (требует Redis).
  4. Director Middleware: Инициализирует Директора для текущего запроса.
  5. User Validation: Проверяет права пользователя (is_admin) и подготавливает объект User.

⚡️ Полная Авто-интеграция

Главная задача Билдера — избавить вас от «Синдрома забытого бота». В обычном коде вам пришлось бы вручную связывать Бот-инстанс с Контейнером, чтобы заработал ViewSender.

В codex-bot это происходит автоматически: 1. Вы вызываете builder.setup_core(container). 2. Вы вызываете builder.build(). 3. Внутри build() бильдер сам вызывает container.set_bot(bot).

Это гарантирует, что к моменту прихода первого сообщения все внутренние связи в системе уже установлены.


🧩 Гибкость и Кастомизация

Несмотря на строгое ядро, фреймворк остается открытым для расширения:

1. Опциональные модули

Вы передаете флаги в setup_core (например, use_database=True), и бильдер сам находит нужные зависимости в контейнере и подключает их в правильное место цепочки.

2. Пользовательские мидлвари

Добавьте ваши собственные инстансы мидлварей в список CUSTOM_MIDDLEWARES в settings.py. Фабрика зарегистрирует их в самом конце системной цепочки, обеспечивая им доступ ко всем сервисам (БД, Директор, Контейнер).

# settings.py
CUSTOM_MIDDLEWARES = [
    MyAnalyticsMiddleware(), # Получит доступ к уже готовому контексту
]

🚀 Как это выглядит в итоге (factory.py)

Благодаря Билдеру, файл сборки вашего бота превращается в чистую декларацию намерений:

def build_bot(settings, redis_client, container):
    builder = BotBuilder(bot_token=settings.bot_token)

    # Всё ядро настраивается одной строчкой
    builder.setup_core(container=container, redis_client=redis_client)

    # Добавляем кастомную логику (например, локализацию)
    builder.add_project_middleware(I18nMiddleware(...))

    return builder.build()