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 admin_routers, client_routers, system_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.subscriptions import SubscriptionRepository 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, payer_pays_commission=True) user_repository = UserRepository() bills_repository = BillsRepository() subscriptions_repository = SubscriptionRepository() user_service = UserService(user_repository, subscription_repository=subscriptions_repository) 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, subscriptions_repository=subscriptions_repository, ) 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 r in admin_routers: dp.include_router(r) for r in client_routers: dp.include_router(r) for r in system_routers: dp.include_router(r) await dp.start_polling(bot) if __name__ == "__main__": asyncio.run(main())