From 8940c3d6525b81417ee3452cb2712192f6a01a91 Mon Sep 17 00:00:00 2001 From: Tarrgon <61888458+Tarrgon@users.noreply.github.com> Date: Thu, 11 Sep 2025 07:03:08 -0400 Subject: [PATCH] Send log messages as files if content is too long --- src/utils/event-log-utils.ts | 39 +++++++++++++++++++++++++++--------- 1 file changed, 30 insertions(+), 9 deletions(-) diff --git a/src/utils/event-log-utils.ts b/src/utils/event-log-utils.ts index de08f7e..5f1f424 100644 --- a/src/utils/event-log-utils.ts +++ b/src/utils/event-log-utils.ts @@ -1,4 +1,4 @@ -import { APIEmbedField, Channel, EmbedBuilder, Guild, GuildBasedChannel, GuildTextBasedChannel, messageLink, TextBasedChannel } from 'discord.js'; +import { APIEmbedField, AttachmentBuilder, Channel, EmbedBuilder, Guild, GuildBasedChannel, GuildTextBasedChannel, MessageCreateOptions, messageLink, TextBasedChannel } from 'discord.js'; import { Database } from '../shared/Database'; import { Message } from '../events'; import { deserializeMessagePart, getModifiedAttachments, getModifiedStickers } from './message-utils'; @@ -18,9 +18,11 @@ export async function logEdit(loggedMessage: LoggedMessage, newMessage: Message< if (!channel) return; + const includeContentInEmbed = loggedMessage.content.length <= 1024 && newMessage.content.length <= 1024; + const fields: APIEmbedField[] = []; fields.push(...getMainEmbeds(loggedMessage, newMessage)); - fields.push(...getEditEmbeds(loggedMessage, newMessage)); + fields.push(...getEditEmbeds(loggedMessage, newMessage, includeContentInEmbed)); const embed = new EmbedBuilder() .setTitle('Edited Message') @@ -28,7 +30,16 @@ export async function logEdit(loggedMessage: LoggedMessage, newMessage: Message< .setTimestamp(newMessage.createdTimestamp) .addFields(...fields); - channel.send({ embeds: [embed] }); + const messagePayload: MessageCreateOptions = { embeds: [embed] }; + + if (!includeContentInEmbed) { + const before = new AttachmentBuilder(Buffer.from(loggedMessage.content), { name: 'before.txt' }); + const after = new AttachmentBuilder(Buffer.from(newMessage.content), { name: 'after.txt' }); + + messagePayload.files = [before, after]; + } + + channel.send(messagePayload); } export async function logDeletion(loggedMessage: LoggedMessage, deletedMessage: Message) { @@ -36,9 +47,11 @@ export async function logDeletion(loggedMessage: LoggedMessage, deletedMessage: if (!channel) return; + const includeContentInEmbed = loggedMessage.content.length <= 1024; + const fields: APIEmbedField[] = []; fields.push(...getMainEmbeds(loggedMessage, deletedMessage)); - fields.push(...getDeletedEmbeds(loggedMessage)); + fields.push(...getDeletedEmbeds(loggedMessage, includeContentInEmbed)); const embed = new EmbedBuilder() .setTitle('Deleted Message') @@ -46,7 +59,15 @@ export async function logDeletion(loggedMessage: LoggedMessage, deletedMessage: .setTimestamp(deletedMessage.createdTimestamp) .addFields(...fields); - channel.send({ embeds: [embed] }); + const messagePayload: MessageCreateOptions = { embeds: [embed] }; + + if (!includeContentInEmbed) { + const before = new AttachmentBuilder(Buffer.from(loggedMessage.content), { name: 'content.txt' }); + + messagePayload.files = [before]; + } + + channel.send(messagePayload); } export async function logCustomEvent(guild: Guild, data: CustomEventLogData) { @@ -111,10 +132,10 @@ function getMainEmbeds(loggedMessage: LoggedMessage, newMessage: Message): ]; } -function getDeletedEmbeds(loggedMessage: LoggedMessage): APIEmbedField[] { +function getDeletedEmbeds(loggedMessage: LoggedMessage, includeContentInEmbed = true): APIEmbedField[] { const fields: APIEmbedField[] = []; - if (loggedMessage.content != '') { + if (includeContentInEmbed && loggedMessage.content != '') { fields.push({ name: 'Content', value: loggedMessage.content, @@ -141,9 +162,9 @@ function getDeletedEmbeds(loggedMessage: LoggedMessage): APIEmbedField[] { return fields; } -function getEditEmbeds(loggedMessage: LoggedMessage, newMessage: Message): APIEmbedField[] { +function getEditEmbeds(loggedMessage: LoggedMessage, newMessage: Message, includeContentInEmbed = true): APIEmbedField[] { const fields: APIEmbedField[] = []; - if (loggedMessage.content != newMessage.content) { + if (includeContentInEmbed && loggedMessage.content != newMessage.content) { fields.push( { name: 'Before',