"""Bot and Dispatcher initialization.""" from aiogram import Bot, Dispatcher from aiogram.client.default import DefaultBotProperties from aiogram.enums import ParseMode from aiogram.fsm.storage.memory import MemoryStorage from bot.core.middlewares import DatabaseSessionMiddleware, LoggingMiddleware from bot.handlers import common, reminders_create, reminders_manage, callbacks, errors from bot.logging_config import get_logger logger = get_logger(__name__) def create_bot(token: str) -> Bot: """ Create and configure bot instance. Args: token: Bot token Returns: Bot instance """ bot = Bot( token=token, default=DefaultBotProperties( parse_mode=ParseMode.HTML, ), ) logger.info("Bot instance created") return bot def create_dispatcher() -> Dispatcher: """ Create and configure dispatcher with routers and middlewares. Returns: Dispatcher instance """ # Create dispatcher with memory storage for FSM storage = MemoryStorage() dp = Dispatcher(storage=storage) # Register middlewares dp.message.middleware(DatabaseSessionMiddleware()) dp.callback_query.middleware(DatabaseSessionMiddleware()) dp.message.middleware(LoggingMiddleware()) dp.callback_query.middleware(LoggingMiddleware()) # Register routers (order matters!) dp.include_router(errors.router) # Error handler should be first dp.include_router(common.router) dp.include_router(reminders_create.router) dp.include_router(reminders_manage.router) dp.include_router(callbacks.router) logger.info("Dispatcher configured with routers and middlewares") return dp