paginate embed notifications

This commit is contained in:
Infinidoge 2025-08-04 19:15:32 -04:00
parent a0afb916e7
commit 9cd672e382
Signed by: Infinidoge
SSH key fingerprint: SHA256:EMoPe5e2dO0gEvtBb2xkZTz5dkyL0rBmuiGTKG5s96E

View file

@ -74,30 +74,45 @@ async def handle_notification(db_updates, ctx, message, keyword, user_id, use_em
footer = f"<t:{int(message.created_at.timestamp())}:R> | [Show]({message.jump_url}) | <#{ctx.channel.id}>" footer = f"<t:{int(message.created_at.timestamp())}:R> | [Show]({message.jump_url}) | <#{ctx.channel.id}>"
content = message.content or "(*Keyword in embed*)" content = message.content or "(*Keyword in embed*)"
if use_embed:
paginator = Paginator(prefix="", suffix="", max_size=4000)
else:
paginator = Paginator(prefix="", suffix="")
paginator.add_line(header)
paginator.add_line()
content = indent(content, "> ", lambda line: True)
for line in content.strip().split("\n"):
if len(line) < 1990:
paginator.add_line(line)
else:
paginator.add_line(line[:1975] + " (... Line too long)")
paginator.add_line()
paginator.add_line(footer)
if use_embed: if use_embed:
log.debug("Sending embed") log.debug("Sending embed")
embed = Embed(description=content + "\n\n" + footer) embeds = []
embed = Embed(description=paginator.pages[0])
embed.set_author( embed.set_author(
name=f"{message.author.display_name} ({message.author})", name=f"{message.author.display_name} ({message.author})",
icon_url=message.author.display_avatar, icon_url=message.author.display_avatar,
) )
embeds.append(embed)
for page in paginator.pages[1:]:
embeds.append(description=page)
embeds.extend(message.embeds)
try: try:
await member.send(header, embeds=[embed] + message.embeds[:9]) await member.send(header, embeds=embeds[:10])
except Forbidden: except Forbidden:
log.warning("Cannot send messages to this user") log.warning("Cannot send messages to this user")
else: else:
log.debug("Sending plain message") log.debug("Sending plain message")
paginator = Paginator(prefix="", suffix="")
paginator.add_line(header)
paginator.add_line()
for line in indent(content, "> ", lambda line: True).strip().split("\n"):
if len(line) < 1990:
paginator.add_line(line)
else:
paginator.add_line(line[:1975] + " (... Line too long)")
paginator.add_line()
paginator.add_line(footer)
try: try:
for page in paginator.pages[:-1]: for page in paginator.pages[:-1]:
await member.send(page) await member.send(page)