From ddff5219e5ceb402947e7ae0bc7e86b7a8dd0a42 Mon Sep 17 00:00:00 2001 From: Egor Date: Thu, 14 Aug 2025 04:38:58 +0300 Subject: [PATCH] Create webhook_server.py --- webhook_server.py | 70 +++++++++++++++++++++++++++++++++++++++++++++++ 1 file changed, 70 insertions(+) create mode 100644 webhook_server.py diff --git a/webhook_server.py b/webhook_server.py new file mode 100644 index 00000000..f2aee662 --- /dev/null +++ b/webhook_server.py @@ -0,0 +1,70 @@ +import logging +from aiohttp import web, ClientSession +from aiogram import Bot +from database import Database +from config import Config +from tribute_service import TributeService, tribute_webhook_route + +logger = logging.getLogger(__name__) + +class WebhookServer: + def __init__(self, bot: Bot, db: Database, config: Config): + self.bot = bot + self.db = db + self.config = config + self.app = None + self.runner = None + self.site = None + + async def create_app(self): + self.app = web.Application() + + tribute_service = TributeService(self.bot, self.config, self.db) + + self.app['tribute_service'] = tribute_service + + self.app.router.add_post(self.config.TRIBUTE_WEBHOOK_PATH, tribute_webhook_route) + + async def health_check(request): + return web.json_response({"status": "ok", "service": "tribute-webhooks"}) + + self.app.router.add_get('/health', health_check) + + logger.info(f"Webhook server configured with route: {self.config.TRIBUTE_WEBHOOK_PATH}") + return self.app + + async def start(self): + try: + if not self.app: + await self.create_app() + + self.runner = web.AppRunner(self.app) + await self.runner.setup() + + self.site = web.TCPSite( + self.runner, + host='0.0.0.0', + port=self.config.TRIBUTE_WEBHOOK_PORT + ) + + await self.site.start() + + logger.info(f"✅ Webhook server started on port {self.config.TRIBUTE_WEBHOOK_PORT}") + logger.info(f"🎯 Tribute webhook URL: http://your-server:{self.config.TRIBUTE_WEBHOOK_PORT}{self.config.TRIBUTE_WEBHOOK_PATH}") + + except Exception as e: + logger.error(f"❌ Failed to start webhook server: {e}") + raise + + async def stop(self): + try: + if self.site: + await self.site.stop() + logger.info("Webhook site stopped") + + if self.runner: + await self.runner.cleanup() + logger.info("Webhook runner cleaned up") + + except Exception as e: + logger.error(f"Error stopping webhook server: {e}")