- Removed unused prehandling, referrals, support, and states files. - Updated admin and client handlers to improve structure and functionality. - Introduced admin filters and routers for better access control. - Added new billing and deposit functionalities for client interactions. - Enhanced keyboard layouts for admin and client menus. - Implemented promotion handling for admin users. - Updated configuration to include admin settings. - Improved utility functions for quote fetching and menu text building. - Added common handlers for undefined commands and message deletions.
70 lines
2.2 KiB
Python
70 lines
2.2 KiB
Python
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())
|