import asyncio import logging import sys from aiogram import Bot, Dispatcher from aiogram.enums import ParseMode from aiogram.client.default import DefaultBotProperties from bot.handlers import start, game, stats, text from bot.middlewares.auth_middleware import AuthMiddleware, load_initial_users from bot.database.db import init_db from bot.config import settings async def main() -> None: await init_db() logging.info("Database initialized.") await load_initial_users() bot = Bot( token=settings.bot_token.get_secret_value(), default=DefaultBotProperties(parse_mode=ParseMode.HTML) ) dp = Dispatcher() dp.message.middleware(AuthMiddleware()) dp.callback_query.middleware(AuthMiddleware()) dp.include_router(start.router) dp.include_router(game.router) dp.include_router(stats.router) dp.include_router(text.router) logging.info("Starting bot...") await bot.delete_webhook(drop_pending_updates=True) await dp.start_polling(bot) if __name__ == "__main__": logging.basicConfig(level=logging.INFO, stream=sys.stdout) try: asyncio.run(main()) except (KeyboardInterrupt, SystemExit): logging.info("Bot stopped.") except Exception as e: logging.exception("Bot encountered an error:")