import asyncio import logging from aiogram import Bot, Dispatcher from aiogram.client.default import DefaultBotProperties from aiogram.client.session.aiohttp import AiohttpSession from remnawave import RemnawaveSDK from bot.handlers import routers from bot.middlewares import DIMiddleware from config import settings from db.session import async_session from misc.pally import PallyClient from repositories.bills import BillsRepository from repositories.users import UserRepository from schemas.di import DependenciesDTO from services.billing_service import BillingService from services.user_service import UserService logging.basicConfig(level=logging.DEBUG) async def main(): dp = Dispatcher() pally_client = PallyClient(settings.pally_token) user_repository = UserRepository() user_service = UserService(user_repository) bills_repository = BillsRepository() billing_service = BillingService( user_repository=user_repository, bills_repository=bills_repository ) rw_sdk = RemnawaveSDK( base_url=settings.remnawave_url, token=settings.remnawave_token, ) deps = DependenciesDTO( user_repository=user_repository, user_service=user_service, rw_sdk=rw_sdk, pally_client=pally_client, bills_repository=bills_repository, billing_service=billing_service, ) dp.update.middleware.register(DIMiddleware(deps, async_session)) aiohttp_session = AiohttpSession(proxy=settings.proxy) if settings.proxy else None default = DefaultBotProperties(parse_mode="HTML") bot = Bot(token=settings.bot_token, default=default, session=aiohttp_session) for router in routers: dp.include_router(router) await dp.start_polling(bot) if __name__ == "__main__": asyncio.run(main())