import asyncio import traceback from aiogram import Bot, Dispatcher from src.core.logger import setup_logger from src.core.modules_system import ModulesManager from src.core.modules_system.loaders import FSLoader from src.core.modules_system.loaders.unsafe_fs_loader import UnsafeFSLoader from src.core.singleton import Singleton from src.modules.standard.config.config import get_telegram_token from src.modules.standard.database.db_api import connect_database, create_tables from src.service import paths bot_modules = [ UnsafeFSLoader(f"{paths.modules_standard}/config"), UnsafeFSLoader(f"{paths.modules_standard}/database"), UnsafeFSLoader(f"{paths.modules_standard}/roles"), FSLoader(f"{paths.modules_standard}/info"), ] async def main(): bot = None database = None setup_logger() app = Singleton() try: bot = Bot(token=get_telegram_token()) database, path = connect_database() database.connect() create_tables(database) app.dp = Dispatcher() app.modules_manager = ModulesManager() for module_loader in bot_modules: app.modules_manager.load(module_loader) await app.dp.start_polling(bot) except Exception: traceback.print_exc() finally: if bot is not None: await bot.session.close() if database is not None: database.close() if __name__ == "__main__": asyncio.run(main())