Move DTO definitions from dto/ to schemas/ and update imports. Add buy handler with FSM state management for device selection, whitelist toggling, and duration choice. Include pricing logic, inline keyboards, and new configuration fields.
53 lines
1.4 KiB
Python
53 lines
1.4 KiB
Python
import logging
|
|
import asyncio
|
|
|
|
from remnawave import RemnawaveSDK
|
|
from aiogram import Bot, Dispatcher
|
|
from aiogram.client.default import DefaultBotProperties
|
|
from aiogram.client.session.aiohttp import AiohttpSession
|
|
|
|
from schemas.di import DependenciesDTO
|
|
from handlers import routers
|
|
from middlewares import DIMiddleware
|
|
from config import settings
|
|
from repositories.tickets import TicketRepository
|
|
from repositories.users import UserRepository
|
|
from services.user_service import UserService
|
|
from db.session import async_session
|
|
|
|
logging.basicConfig(level=logging.DEBUG)
|
|
|
|
|
|
async def main():
|
|
dp = Dispatcher()
|
|
|
|
user_repository = UserRepository()
|
|
ticket_repository = TicketRepository()
|
|
user_service = UserService(user_repository, ticket_repository)
|
|
|
|
rw_sdk = RemnawaveSDK(
|
|
base_url=settings.remnawave_url,
|
|
token=settings.remnawave_token,
|
|
)
|
|
|
|
deps = DependenciesDTO(
|
|
ticket_repository=ticket_repository,
|
|
user_repository=user_repository,
|
|
user_service=user_service,
|
|
rw_sdk=rw_sdk,
|
|
)
|
|
dp.update.middleware.register(DIMiddleware(deps, async_session))
|
|
|
|
aiohttp_session = AiohttpSession(proxy=settings.proxy)
|
|
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())
|