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 config import settings from db.session import async_session from handlers import routers from middlewares import DIMiddleware 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())