Files
malenia/bot/main.py
hexdev 049f31118d feat: Implement payment notification system and API structure
- Added notifications for successful payments in `api/core/notifications.py`.
- Created main API entry point in `api/main.py` with FastAPI integration.
- Established routing structure in `api/routes/__init__.py` and `api/routes/pally.py` for handling payment callbacks.
- Developed billing handlers in `bot/handlers/billing.py` and `bot/handlers/buy.py` for subscription management.
- Introduced state management for user interactions in `bot/states/`.
- Created user interface elements in `bot/keyboards/` for navigation and payment processing.
- Set up middleware for dependency injection in `bot/middlewares/di.py`.
- Added support for user commands and interactions in `bot/handlers/common.py` and `bot/handlers/support.py`.
- Implemented logging and error handling throughout the bot's functionality.
- Created entry point script for API server in `entrypoints/api.sh`.
2026-04-24 17:41:42 +07:00

63 lines
1.8 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.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()
user_service = UserService(user_repository)
bills_repository = BillsRepository()
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,
)
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())