first commit
This commit is contained in:
74
core/notifications.py
Normal file
74
core/notifications.py
Normal file
@@ -0,0 +1,74 @@
|
||||
"""
|
||||
notifications.py - Multi-channel notification routing
|
||||
|
||||
Supported channels: Discord webhook, ntfy
|
||||
"""
|
||||
|
||||
import core.postgres as postgres
|
||||
import uuid
|
||||
import requests
|
||||
import time
|
||||
|
||||
|
||||
def _sendToEnabledChannels(notif_settings, message):
|
||||
"""Send message to all enabled channels. Returns True if at least one succeeded."""
|
||||
sent = False
|
||||
|
||||
if notif_settings.get("discord_enabled") and notif_settings.get("discord_webhook"):
|
||||
if discord.send(notif_settings["discord_webhook"], message):
|
||||
sent = True
|
||||
|
||||
if notif_settings.get("ntfy_enabled") and notif_settings.get("ntfy_topic"):
|
||||
if ntfy.send(notif_settings["ntfy_topic"], message):
|
||||
sent = True
|
||||
|
||||
return sent
|
||||
|
||||
|
||||
def getNotificationSettings(userUUID):
|
||||
settings = postgres.select_one("notifications", {"user_uuid": userUUID})
|
||||
if not settings:
|
||||
return False
|
||||
return settings
|
||||
|
||||
|
||||
def setNotificationSettings(userUUID, data_dict):
|
||||
existing = postgres.select_one("notifications", {"user_uuid": userUUID})
|
||||
allowed = [
|
||||
"discord_webhook",
|
||||
"discord_enabled",
|
||||
"ntfy_topic",
|
||||
"ntfy_enabled",
|
||||
]
|
||||
updates = {k: v for k, v in data_dict.items() if k in allowed}
|
||||
if not updates:
|
||||
return False
|
||||
if existing:
|
||||
postgres.update("notifications", updates, {"user_uuid": userUUID})
|
||||
else:
|
||||
updates["id"] = str(uuid.uuid4())
|
||||
updates["user_uuid"] = userUUID
|
||||
postgres.insert("notifications", updates)
|
||||
return True
|
||||
|
||||
|
||||
class discord:
|
||||
@staticmethod
|
||||
def send(webhook_url, message):
|
||||
try:
|
||||
response = requests.post(webhook_url, json={"content": message})
|
||||
return response.status_code == 204
|
||||
except:
|
||||
return False
|
||||
|
||||
|
||||
class ntfy:
|
||||
@staticmethod
|
||||
def send(topic, message):
|
||||
try:
|
||||
response = requests.post(
|
||||
f"https://ntfy.sh/{topic}", data=message.encode("utf-8")
|
||||
)
|
||||
return response.status_code == 200
|
||||
except:
|
||||
return False
|
||||
Reference in New Issue
Block a user