35 lines
970 B
Python
35 lines
970 B
Python
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}")
|