69 lines
2.4 KiB
Python
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 |