feat(autorenewal): implement automatic subscription renewal system
This commit is contained in:
29
bot/main.py
29
bot/main.py
@@ -8,6 +8,7 @@ from remnawave import RemnawaveSDK
|
||||
|
||||
from bot.handlers import admin_routers, client_routers, system_routers
|
||||
from bot.middlewares import DIMiddleware
|
||||
from bot.scheduler import start_scheduler
|
||||
from config import settings
|
||||
from db.session import async_session
|
||||
from misc.pally import PallyClient
|
||||
@@ -16,6 +17,7 @@ from repositories.subscriptions import SubscriptionRepository
|
||||
from repositories.users import UserRepository
|
||||
from schemas.di import DependenciesDTO
|
||||
from services.billing_service import BillingService
|
||||
from services.renewal_service import RenewalService
|
||||
from services.user_service import UserService
|
||||
|
||||
logging.basicConfig(level=logging.DEBUG)
|
||||
@@ -40,6 +42,17 @@ async def main():
|
||||
token=settings.remnawave_token,
|
||||
)
|
||||
|
||||
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)
|
||||
|
||||
renewal_service = RenewalService(
|
||||
subscription_repository=subscriptions_repository,
|
||||
user_repository=user_repository,
|
||||
rw_sdk=rw_sdk,
|
||||
bot=bot,
|
||||
)
|
||||
|
||||
deps = DependenciesDTO(
|
||||
user_repository=user_repository,
|
||||
user_service=user_service,
|
||||
@@ -48,13 +61,10 @@ async def main():
|
||||
bills_repository=bills_repository,
|
||||
billing_service=billing_service,
|
||||
subscriptions_repository=subscriptions_repository,
|
||||
renewal_service=renewal_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 r in admin_routers:
|
||||
dp.include_router(r)
|
||||
for r in client_routers:
|
||||
@@ -62,7 +72,16 @@ async def main():
|
||||
for r in system_routers:
|
||||
dp.include_router(r)
|
||||
|
||||
await dp.start_polling(bot)
|
||||
scheduler_task = asyncio.create_task(start_scheduler(renewal_service, async_session))
|
||||
|
||||
try:
|
||||
await dp.start_polling(bot)
|
||||
finally:
|
||||
scheduler_task.cancel()
|
||||
try:
|
||||
await scheduler_task
|
||||
except asyncio.CancelledError:
|
||||
pass
|
||||
|
||||
|
||||
if __name__ == "__main__":
|
||||
|
||||
Reference in New Issue
Block a user