BotBuilder (Factory) — Сборка и Жизненный цикл
BotBuilder — это высокоуровневый инструмент, который превращает разрозненные компоненты фреймворка в единый работающий организм. Он инкапсулирует в себе все сложности настройки Aiogram и гарантирует соблюдение архитектурных стандартов.
🏗 Концепция "Железобетонного Ядра"
Порядок регистрации Middlewares критически важен. Если поменять их местами, система может потерять доступ к БД или не распознать админа. BotBuilder берет эту ответственность на себя через метод setup_core.
Стандартная цепочка обработки:
- Database Middleware: Если включено, открывает транзакцию и кладет сессию в контекст.
- Container Middleware: Прокидывает ваш DI-контейнер во все хендлеры.
- Throttling Middleware: Отсекает спам на раннем этапе (требует Redis).
- Director Middleware: Инициализирует Директора для текущего запроса.
- 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()