from __future__ import annotations import asyncio from collections import defaultdict from typing import TYPE_CHECKING from yuxi.utils.logging_config import logger if TYPE_CHECKING: from yuxi.channels.manager import ChannelManager class WebhookRegistry: def __init__(self, channel_manager: ChannelManager): self._manager = channel_manager self._registered: dict[str, list[str]] = defaultdict(list) async def run(self, interval: float = 3600) -> None: logger.info("WebhookRegistry started") while True: await asyncio.sleep(interval) try: await self._check_webhooks() except asyncio.CancelledError: break except Exception: logger.exception("WebhookRegistry error") async def register_webhook(self, channel_id: str, url: str) -> None: self._registered[channel_id].append(url) logger.info(f"Webhook registered for {channel_id}: {url}") async def _check_webhooks(self) -> None: for channel_id in self._registered: logger.debug(f"Webhook check for {channel_id}: {len(self._registered[channel_id])} registered")