Add custom event logs

This commit is contained in:
Tarrgon
2025-06-07 08:57:06 -04:00
parent 920477b8b7
commit d64a29b55b
9 changed files with 184 additions and 22 deletions
@@ -1,17 +1,21 @@
import { APIEmbedField, Channel, EmbedBuilder, GuildTextBasedChannel, messageLink } from 'discord.js';
import { APIEmbedField, Channel, EmbedBuilder, Guild, GuildTextBasedChannel, messageLink, TextBasedChannel } from 'discord.js';
import { Database } from '../shared/Database';
import { Message } from '../events';
import { deserializeMessagePart, getModifiedAttachments, getModifiedStickers } from './message-utils';
import { LoggedMessage } from '../types';
type CustomEventLogData = {
title: string
description: string | null
color: number | null
timestamp: Date | number | null
fields: APIEmbedField[] | null
}
export async function logEdit(loggedMessage: LoggedMessage, newMessage: Message<true>) {
const settings = await Database.getGuildSettings(newMessage.guildId);
const channel = await getEventLogChannel(newMessage.guild);
if (!settings || !settings.event_logs_channel_id) return;
const channel = await newMessage.guild.channels.fetch(settings.event_logs_channel_id);
if (!channel || !channel.isSendable()) return;
if (!channel) return;
const fields: APIEmbedField[] = [];
fields.push(...getMainEmbeds(loggedMessage, newMessage));
@@ -27,13 +31,9 @@ export async function logEdit(loggedMessage: LoggedMessage, newMessage: Message<
}
export async function logDeletion(loggedMessage: LoggedMessage, deletedMessage: Message<true>) {
const settings = await Database.getGuildSettings(deletedMessage.guildId);
const channel = await getEventLogChannel(deletedMessage.guild);
if (!settings || !settings.event_logs_channel_id) return;
const channel = await deletedMessage.guild.channels.fetch(settings.event_logs_channel_id);
if (!channel || !channel.isSendable()) return;
if (!channel) return;
const fields: APIEmbedField[] = [];
fields.push(...getMainEmbeds(loggedMessage, deletedMessage));
@@ -48,6 +48,33 @@ export async function logDeletion(loggedMessage: LoggedMessage, deletedMessage:
channel.send({ embeds: [embed] });
}
export async function logCustomEvent(guild: Guild, data: CustomEventLogData) {
const channel = await getEventLogChannel(guild);
if (!channel) return;
const embed = new EmbedBuilder()
.setTitle(data.title)
.setColor(data.color)
.setTimestamp(data.timestamp);
if (data.fields) embed.addFields(...data.fields);
channel.send({ embeds: [embed] });
}
async function getEventLogChannel(guild: Guild): Promise<GuildTextBasedChannel | null> {
const settings = await Database.getGuildSettings(guild.id);
if (!settings || !settings.event_logs_channel_id) return null;
const channel = await guild.channels.fetch(settings.event_logs_channel_id);
if (!channel || !channel.isSendable()) return null;
return channel;
}
function getMainEmbeds(loggedMessage: LoggedMessage, newMessage: Message<true>): APIEmbedField[] {
const channelString = `${newMessage.channel.toString()}\n${newMessage.channel.name}`;
const userString = `<@${loggedMessage.author_id}>\n${loggedMessage.author_name}`;
+1 -1
View File
@@ -7,7 +7,7 @@ export * from './commands';
export * from './e621-utils';
export * from './file-utils';
export * from './interaction-utils';
export * from './message-logger';
export * from './event-log-utils';
export * from './message-utils';
export * from './ms-to-human';
export * from './note-utils';