Files
malenia/bot/main.py
hexdev 287f8eebda feat: add subscription and transaction repositories
- Implemented SubscriptionRepository with methods to get, create, and update subscriptions.
- Added BalanceTXRepository for creating and retrieving balance transactions.
- Introduced a test script for simulating Pally webhook for local testing.
2026-04-27 21:33:25 +07:00

66 lines
2.0 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 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)
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 router in routers:
dp.include_router(router)
await dp.start_polling(bot)
if __name__ == "__main__":
asyncio.run(main())