Files
payphone/payphone/cogs/calls/embeds.py
T

67 lines
1.9 KiB
Python

import discord
from tortoise import expressions
from payphone.db import models
from payphone.core import constants, formatting
async def ReplyEmbed(
reference: discord.MessageReference, call_id: int
) -> (discord.Embed | None, models.Message | None):
"""Generates the embed sent on calls to represent replies.
Args:
reference (discord.MessageReference): The message reference.
call_id (int): The ID of the call the message was sent in.
Returns:
(discord.Embed | None, models.Message | None): The generated embed and the replied message.
"""
message = (
await models.Message.get_or_none(
expressions.Q(id=reference.message_id)
| expressions.Q(propagation_id=reference.message_id),
call_id=call_id,
)
.prefetch_related("contents")
.select_related("profile", "channel", "propagation_channel")
)
if message is None:
return None, None
is_this_channel = message.id == reference.message_id
last_content: models.MessageContent | None = None
for content in message.contents:
if last_content is None:
last_content = content
continue
if last_content.message_id < content.message_id:
last_content = content
author_name = message.display_name if is_this_channel else message.profile.name
author_avatar_url = (
message.display_avatar if is_this_channel else message.profile.avatar_url
)
embed = discord.Embed(
color=constants.EMBED_COLOR,
description=(
formatting.trim(last_content.content)
if last_content.was_propagated or is_this_channel
else "*This message was censored.*"
),
author=discord.EmbedAuthor(
name=f"Replied to {author_name}",
icon_url=author_avatar_url,
url=message.jump_url(is_this_channel),
),
)
return embed, message