import asyncio import logging from aiogram import Bot, Dispatcher from aiogram.client.default import DefaultBotProperties from aiogram.enums import ParseMode from aiogram_dialog import setup_dialogs from dishka import make_async_container from dishka.integrations.aiogram import setup_dishka from dutylog.application.bot.user_handlers import router as user_router from dutylog.application.bot.user_dialogs import main_menu_dialog from dutylog.application.bot.admin_dialogs import admin_menu_dialog from dutylog.application.bot.creator_dialogs import creator_menu_dialog from dutylog.application.bot.user_dialogs.registration_dialog import registration_dialog from dutylog.infrastructure.ioc import ( ConfigProvider, DatabaseProvider, DAOProvider, RepositoryProvider, ServiceProvider, ) from dutylog.infrastructure.utils.config import load_config async def main(): logging.basicConfig(level=logging.INFO) config = load_config() bot = Bot( token=config.bot.token, default=DefaultBotProperties(parse_mode=ParseMode.HTML) ) await bot.delete_webhook(drop_pending_updates=True) dp = Dispatcher() container = make_async_container( ConfigProvider(), DatabaseProvider(), DAOProvider(), RepositoryProvider(), ServiceProvider(), ) dp.include_router(user_router) dp.include_router(main_menu_dialog) dp.include_router(admin_menu_dialog) dp.include_router(creator_menu_dialog) dp.include_router(registration_dialog) setup_dialogs(dp) setup_dishka(container, dp, auto_inject=True) await dp.start_polling(bot) if __name__ == "__main__": asyncio.run(main())