import requests from monitor import Event, SubscriberABC from loguru import logger from monitor import Filter class DiscordSubscriber(SubscriberABC): def __init__(self, event_filter: Filter): super().__init__(event_filter) self.webhook_url: str | None = None self.enabled: bool = True def set_url(self, webhook_url: str) -> None: self.webhook_url = webhook_url def set_enabled(self, value: bool) -> None: self.enabled = value def consume_event(self, event: Event) -> None: if not self.enabled: return if not self.filter.filter_event(event): return try: r = requests.post( self.webhook_url, json={"content": event.to_str(include_ts=False, rich_text=True)}, ) r.raise_for_status() except Exception: logger.opt(exception=True).warning(f"Error sending to Discord: {event}")