From 99dc6849018846f4a425c59735fa76476ed3b8af Mon Sep 17 00:00:00 2001 From: jslay88 Date: Thu, 11 Dec 2025 20:56:43 -0700 Subject: [PATCH] Update invite_response to parse email from embed format The DMM API now sends support requests as Discord embeds instead of plain text. Updated the bot to extract email from the embed's Email field and the help request from the embed description, with fallback to the legacy plain text format. --- .tool-versions | 1 + am_bot/cogs/invite_response.py | 45 ++++++++++++++++++++++++++++------ 2 files changed, 39 insertions(+), 7 deletions(-) create mode 100644 .tool-versions diff --git a/.tool-versions b/.tool-versions new file mode 100644 index 0000000..a93eee6 --- /dev/null +++ b/.tool-versions @@ -0,0 +1 @@ +python 3.13.11 diff --git a/am_bot/cogs/invite_response.py b/am_bot/cogs/invite_response.py index bf1d5f9..c1181fd 100644 --- a/am_bot/cogs/invite_response.py +++ b/am_bot/cogs/invite_response.py @@ -15,6 +15,17 @@ class InviteResponseCog(commands.Cog): def __init__(self, bot: discord.ext.commands.Bot): self.bot = bot + def _parse_embed_email(self, embed: discord.Embed) -> str | None: + """Extract email from an embed's Email field.""" + for field in embed.fields: + if field.name == "Email": + # Email is wrapped in backticks: `email@example.com` + match = re.match(r"`(.+)`", field.value) + if match: + return match.group(1) + return field.value + return None + @commands.Cog.listener() async def on_message(self, message: discord.Message): logger.debug("Message Received") @@ -41,13 +52,33 @@ async def on_message(self, message: discord.Message): ) ) - logger.warning(referenced.content) - email_pattern = re.compile(r"Email: (.*)") - match = email_pattern.match(referenced.content) - if not match: + # Parse email and help request from embed (new format) + email = None + help_request = None + + if referenced.embeds: + embed = referenced.embeds[0] + email = self._parse_embed_email(embed) + help_request = embed.description + logger.debug(f"Parsed from embed - Email: {email}") + else: + # Fallback to legacy plain text format + logger.warning(referenced.content) + email_pattern = re.compile(r"Email: (.*)") + match = email_pattern.match(referenced.content) + if match: + email = match.group(1) + help_request = "\n".join(referenced.content.split("\n")[7:]) + + if not email: logger.debug("Email not found in referenced message.") - logger.debug(f"Email found for referenced message: {match.group(1)}") - help_request = "\n".join(referenced.content.split("\n")[7:]) + return + + if not help_request: + logger.debug("Help request not found in referenced message.") + return + + logger.debug(f"Email found for referenced message: {email}") body_txt = ( f"Your Message: {help_request}\n\n" f"ARK Modding Discord Staff Response:\n\n" @@ -88,7 +119,7 @@ async def on_message(self, message: discord.Message): """ send_email( - match.group(1), + email, subject="ARK Modding Discord Staff Response", body_txt=body_txt, body_html=body_html,