SMW-Upload/quotes/discord_utils.py

90 lines
2.6 KiB
Python

"""
Discord webhook utilities for sending submission notifications.
"""
import os
import json
import requests
from django.conf import settings
def send_discord_webhook(submission):
"""
Sends a discord webhook notification if DISCORD_WEBHOOK is configured.
Joe wrote this!
"""
webhook_url = os.environ.get("DISCORD_WEBHOOK")
if not webhook_url:
return False
try:
files = submission.files.all()
file_urls = []
# Get file URLs
from .email_utils import get_file_urls_with_base_url
file_url_data = get_file_urls_with_base_url(files)
for item in file_url_data:
file_urls.append(
{
"name": item["file"].original_filename,
"url": item["url"],
}
)
# Build description with file links
description_parts = []
if submission.description:
description_parts.append(f"**Description:** {submission.description}")
if file_urls:
description_parts.append("\n**Uploaded Files:**")
for file_info in file_urls:
description_parts.append(f"- [{file_info['name']}]({file_info['url']})")
description = (
"\n".join(description_parts)
if description_parts
else "No description or files provided."
)
# Discord webhook payload
payload = {
"content": "Somebody submitted a quote!",
"embeds": [
{
"title": f"New Quote Request - Submission #{submission.id}",
"color": 3447003, # Blue color
"fields": [
{
"name": "Email",
"value": submission.email,
"inline": True,
},
{
"name": "Submitted At",
"value": submission.submitted_at.strftime(
"%Y-%m-%d %H:%M:%S"
),
"inline": True,
},
],
"description": description,
"footer": {
"text": f"Submission ID: #{submission.id}",
},
}
],
}
response = requests.post(webhook_url, json=payload, timeout=10)
response.raise_for_status()
return True
except Exception as e:
print(f"Error sending Discord webhook: {e}")
return False