Files
group-instance-logger/discord_webhook.py
2024-06-14 14:16:57 +00:00

69 lines
2.4 KiB
Python

from discord import Webhook, Embed, Colour
import aiohttp
import os
import logging
import re
from datetime import datetime
async def send_message(**kwargs):
instance_data = {
"start_timestamp": None,
"end_timestamp": None,
"instance_id": None,
"world_name": None,
"member_count": None,
"thumbnail_url": None
}
for key, value in kwargs.items():
if key in instance_data:
instance_data[key] = value
if instance_data["instance_id"] is not None:
# convert full group instance ID to regular digits
match = re.match(r'^\d+(?=~)', instance_data["instance_id"])
if match:
instance_id = match.group(0)
else:
raise ValueError("Invalid instance_id format")
else:
raise ValueError("instance_id is required")
# validate timestamps are datetime and make them strings
if isinstance(instance_data["start_timestamp"], datetime) and isinstance(instance_data["end_timestamp"], datetime):
start_timestamp = instance_data["start_timestamp"].strftime("%Y-%m-%d %H:%M:%S UTC")
end_timestamp = instance_data["end_timestamp"].strftime("%Y-%m-%d %H:%M:%S UTC")
else:
raise ValueError("Timestamps are not in a datetime format")
# other vars are strings and don't need validation
world_name = instance_data["world_name"]
member_count = instance_data["member_count"]
thumbnail_url = instance_data["thumbnail_url"]
embed = Embed(
colour = Colour.blurple(),
description = f"**Started**: {start_timestamp} \n"
f"**Ended**: {end_timestamp} \n"
f"**Member Count (highest)**: {member_count}",
title = f"Group Instance {instance_id} - {world_name}",
)
# Set a thumbnail if it's available
if thumbnail_url is not None:
embed.set_thumbnail(url=thumbnail_url)
async with aiohttp.ClientSession() as session:
webhook_url = os.getenv("DISCORD_WEBHOOK")
if not webhook_url:
raise ValueError("DISCORD_WEBHOOK env variable not found")
webhook = Webhook.from_url(webhook_url, session=session)
try:
await webhook.send(username='Group Instance Logger', embed=embed)
return True
except Exception as e:
logging.error(f"Exception sending webhook message: {e}")
return False