38 lines
1.3 KiB
Python
38 lines
1.3 KiB
Python
from datetime import datetime, timezone
|
|
import discord
|
|
|
|
MODALITY_LABELS = {
|
|
"bh_email": "BH Email",
|
|
"personal_email": "Personal Email",
|
|
"bh_text": "BH Text",
|
|
"personal_text": "Personal Text",
|
|
"voice": "Voice",
|
|
"fb_messenger": "FB Messenger",
|
|
"nd_messenger": "ND Messenger",
|
|
}
|
|
|
|
|
|
def build_ping_embed(
|
|
*, modality: str, sender_id: str | None, snippet: str, raw_content: str,
|
|
captured_at: datetime,
|
|
) -> discord.Embed:
|
|
label = MODALITY_LABELS.get(modality, modality)
|
|
embed = discord.Embed(
|
|
title=f"{label}" + (f" — {sender_id}" if sender_id else ""),
|
|
description=snippet,
|
|
)
|
|
embed.add_field(name="modality", value=modality, inline=True)
|
|
embed.add_field(name="sender_id", value=sender_id or "", inline=True)
|
|
embed.add_field(name="captured_at", value=captured_at.isoformat(), inline=True)
|
|
embed.add_field(name="raw_content", value=raw_content or "(empty)", inline=False)
|
|
return embed
|
|
|
|
|
|
def parse_ping_embed(embed: discord.Embed) -> dict:
|
|
values = {field.name: field.value for field in embed.fields}
|
|
return {
|
|
"modality": values.get("modality"),
|
|
"sender_id": values.get("sender_id") or None,
|
|
"raw_content": values.get("raw_content"),
|
|
"captured_at": datetime.fromisoformat(values["captured_at"]),
|
|
}
|