Send log messages as files if content is too long

This commit is contained in:
Tarrgon
2025-09-11 07:03:08 -04:00
parent 8203ee1d39
commit 8940c3d652
+30 -9
View File
@@ -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 { Database } from '../shared/Database';
import { Message } from '../events'; import { Message } from '../events';
import { deserializeMessagePart, getModifiedAttachments, getModifiedStickers } from './message-utils'; import { deserializeMessagePart, getModifiedAttachments, getModifiedStickers } from './message-utils';
@@ -18,9 +18,11 @@ export async function logEdit(loggedMessage: LoggedMessage, newMessage: Message<
if (!channel) return; if (!channel) return;
const includeContentInEmbed = loggedMessage.content.length <= 1024 && newMessage.content.length <= 1024;
const fields: APIEmbedField[] = []; const fields: APIEmbedField[] = [];
fields.push(...getMainEmbeds(loggedMessage, newMessage)); fields.push(...getMainEmbeds(loggedMessage, newMessage));
fields.push(...getEditEmbeds(loggedMessage, newMessage)); fields.push(...getEditEmbeds(loggedMessage, newMessage, includeContentInEmbed));
const embed = new EmbedBuilder() const embed = new EmbedBuilder()
.setTitle('Edited Message') .setTitle('Edited Message')
@@ -28,7 +30,16 @@ export async function logEdit(loggedMessage: LoggedMessage, newMessage: Message<
.setTimestamp(newMessage.createdTimestamp) .setTimestamp(newMessage.createdTimestamp)
.addFields(...fields); .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<true>) { export async function logDeletion(loggedMessage: LoggedMessage, deletedMessage: Message<true>) {
@@ -36,9 +47,11 @@ export async function logDeletion(loggedMessage: LoggedMessage, deletedMessage:
if (!channel) return; if (!channel) return;
const includeContentInEmbed = loggedMessage.content.length <= 1024;
const fields: APIEmbedField[] = []; const fields: APIEmbedField[] = [];
fields.push(...getMainEmbeds(loggedMessage, deletedMessage)); fields.push(...getMainEmbeds(loggedMessage, deletedMessage));
fields.push(...getDeletedEmbeds(loggedMessage)); fields.push(...getDeletedEmbeds(loggedMessage, includeContentInEmbed));
const embed = new EmbedBuilder() const embed = new EmbedBuilder()
.setTitle('Deleted Message') .setTitle('Deleted Message')
@@ -46,7 +59,15 @@ export async function logDeletion(loggedMessage: LoggedMessage, deletedMessage:
.setTimestamp(deletedMessage.createdTimestamp) .setTimestamp(deletedMessage.createdTimestamp)
.addFields(...fields); .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) { export async function logCustomEvent(guild: Guild, data: CustomEventLogData) {
@@ -111,10 +132,10 @@ function getMainEmbeds(loggedMessage: LoggedMessage, newMessage: Message<true>):
]; ];
} }
function getDeletedEmbeds(loggedMessage: LoggedMessage): APIEmbedField[] { function getDeletedEmbeds(loggedMessage: LoggedMessage, includeContentInEmbed = true): APIEmbedField[] {
const fields: APIEmbedField[] = []; const fields: APIEmbedField[] = [];
if (loggedMessage.content != '') { if (includeContentInEmbed && loggedMessage.content != '') {
fields.push({ fields.push({
name: 'Content', name: 'Content',
value: loggedMessage.content, value: loggedMessage.content,
@@ -141,9 +162,9 @@ function getDeletedEmbeds(loggedMessage: LoggedMessage): APIEmbedField[] {
return fields; return fields;
} }
function getEditEmbeds(loggedMessage: LoggedMessage, newMessage: Message<true>): APIEmbedField[] { function getEditEmbeds(loggedMessage: LoggedMessage, newMessage: Message<true>, includeContentInEmbed = true): APIEmbedField[] {
const fields: APIEmbedField[] = []; const fields: APIEmbedField[] = [];
if (loggedMessage.content != newMessage.content) { if (includeContentInEmbed && loggedMessage.content != newMessage.content) {
fields.push( fields.push(
{ {
name: 'Before', name: 'Before',