import asyncio import logging from datetime import datetime from aiogram import Bot, Dispatcher from aiogram.enums import ParseMode from aiogram.fsm.storage.memory import MemoryStorage from aiogram.client.default import DefaultBotProperties from config import ADMIN_ID, BOT_TOKEN, LOG_BOT_TOKEN, SHOP_NAME from db.storage import load_config, load_stats from handlers import admin, start, upload, user from runtime import set_bots from utils.logging import log_admin async def main() -> None: defaults = DefaultBotProperties(parse_mode=ParseMode.HTML) bot = Bot(token=BOT_TOKEN, default=defaults) log_bot = Bot(token=LOG_BOT_TOKEN, default=defaults) if LOG_BOT_TOKEN else None set_bots(bot, log_bot) dispatcher = Dispatcher(storage=MemoryStorage()) dispatcher.include_router(start.router) dispatcher.include_router(user.router) dispatcher.include_router(admin.router) dispatcher.include_router(upload.router) load_config() load_stats() await log_admin( bot, ADMIN_ID, f"{SHOP_NAME} started\n{datetime.now().strftime('%Y-%m-%d %H:%M:%S')}", log_bot, ) try: await dispatcher.start_polling(bot) finally: if log_bot: await log_bot.session.close() await bot.session.close() if __name__ == "__main__": logging.basicConfig( level=logging.INFO, format="%(asctime)s - %(levelname)s - %(message)s", handlers=[ logging.FileHandler("bot.log", encoding="utf-8"), logging.StreamHandler(), ], ) asyncio.run(main())