90 lines
2.6 KiB
Python
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
|