logging: thread create/delete, try catch

This commit is contained in:
Cynthia Foxwell 2025-04-23 22:52:31 -06:00
parent b124f2b0f2
commit 926d062d9e
Signed by: Cynosphere
SSH key fingerprint: SHA256:H3SM8ufP/uxqLwKSH7xY89TDnbR9uOHzjLoBr0tlajk

View file

@ -1,5 +1,6 @@
const {Member} = require("@projectdysnomia/dysnomia"); const {Member, PrivateThreadChannel} = require("@projectdysnomia/dysnomia");
const logger = require("#lib/logger.js");
const {getGuildData} = require("#lib/guildData.js"); const {getGuildData} = require("#lib/guildData.js");
const events = require("#lib/events.js"); const events = require("#lib/events.js");
@ -17,10 +18,52 @@ async function getLoggingChannel(guild) {
return guild.channels.get(channelId) ?? guild.threads.get(channelId); return guild.channels.get(channelId) ?? guild.threads.get(channelId);
} }
const WHITELISTED_EVENTS = new Set([
"GUILD_UPDATE",
"CHANNEL_CREATE",
"CHANNEL_UPDATE",
"CHANNEL_DELETE",
"CHANNEL_OVERWRITE_CREATE",
"CHANNEL_OVERWRITE_UPDATE",
"CHANNEL_OVERWRITE_DELETE",
"MEMBER_KICK",
"MEMBER_BAN_ADD",
"MEMBER_BAN_REMOVE",
"MEMBER_UPDATE",
"BOT_ADD",
"ROLE_CREATE",
"ROLE_UPDATE",
"ROLE_DELETE",
"INVITE_CREATE",
"INVITE_UPDATE",
"INVITE_DELETE",
"EMOJI_CREATE",
"EMOJI_UPDATE",
"EMOJI_DELETE",
"INTEGRATION_CREATE",
"INTEGRATION_UPDATE",
"INTEGRATION_DELETE",
"STICKER_CREATE",
"STICKER_UPDATE",
"STICKER_DELETE",
"GUILD_SCHEDULED_EVENT_CREATE",
"GUILD_SCHEDULED_EVENT_UPDATE",
"GUILD_SCHEDULED_EVENT_DELETE",
"APPLICATION_COMMAND_PERMISSION_UPDATE",
"ONBOARDING_PROMPT_CREATE",
"ONBOARDING_PROMPT_UPDATE",
"ONBOARDING_PROMPT_DELETE",
"MEMBER_ROLE_UPDATE",
"THREAD_CREATE",
"THREAD_UPDATE",
"THREAD_DELETE",
]);
events.add("guildAuditLogEntryCreate", "logging", async function (entry) { events.add("guildAuditLogEntryCreate", "logging", async function (entry) {
const channel = await getLoggingChannel(entry.guild); const channel = await getLoggingChannel(entry.guild);
if (!channel) return; if (!channel) return;
try {
switch (entry.actionType) { switch (entry.actionType) {
case AuditLogActions.GUILD_UPDATE: case AuditLogActions.GUILD_UPDATE:
case AuditLogActions.CHANNEL_CREATE: case AuditLogActions.CHANNEL_CREATE:
@ -52,8 +95,6 @@ events.add("guildAuditLogEntryCreate", "logging", async function (entry) {
case AuditLogActions.GUILD_SCHEDULED_EVENT_CREATE: case AuditLogActions.GUILD_SCHEDULED_EVENT_CREATE:
case AuditLogActions.GUILD_SCHEDULED_EVENT_UPDATE: case AuditLogActions.GUILD_SCHEDULED_EVENT_UPDATE:
case AuditLogActions.GUILD_SCHEDULED_EVENT_DELETE: case AuditLogActions.GUILD_SCHEDULED_EVENT_DELETE:
case AuditLogActions.THREAD_CREATE:
case AuditLogActions.THREAD_DELETE:
case AuditLogActions.APPLICATION_COMMAND_PERMISSION_UPDATE: case AuditLogActions.APPLICATION_COMMAND_PERMISSION_UPDATE:
case AuditLogActions.ONBOARDING_PROMPT_CREATE: case AuditLogActions.ONBOARDING_PROMPT_CREATE:
case AuditLogActions.ONBOARDING_PROMPT_UPDATE: case AuditLogActions.ONBOARDING_PROMPT_UPDATE:
@ -101,13 +142,40 @@ events.add("guildAuditLogEntryCreate", "logging", async function (entry) {
.catch(() => {}); .catch(() => {});
break; break;
} }
case AuditLogActions.THREAD_CREATE: {
channel
.createMessage({
embeds: [
{
color: COLOR_ADDED,
title: `${entry.after.invitable != null ? "Private " : ""}Thread Created`,
description: `<#${entry.targetID}> (${entry.after.name})`,
timestamp: new Date().toISOString(),
fields: [
{
name: "Created by",
value: `<@${entry.user.id}> (${formatUsername(entry.user)})`,
inline: true,
},
],
footer: {
text: `Thread ID: ${entry.targetID}`,
},
},
],
})
.catch(() => {});
break;
}
case AuditLogActions.THREAD_UPDATE: { case AuditLogActions.THREAD_UPDATE: {
channel channel
.createMessage({ .createMessage({
embeds: [ embeds: [
{ {
color: COLOR_CHANGED, color: COLOR_CHANGED,
title: "Thread Updated", title: `${
entry.target != null && entry.target instanceof PrivateThreadChannel ? "Private " : ""
}Thread Updated`,
description: `<#${entry.targetID}>${entry.target?.name != null ? ` (${entry.target.name})` : ""} ${ description: `<#${entry.targetID}>${entry.target?.name != null ? ` (${entry.target.name})` : ""} ${
entry.before.locked === true && entry.after.locked === false entry.before.locked === true && entry.after.locked === false
? "unlocked" ? "unlocked"
@ -117,6 +185,10 @@ events.add("guildAuditLogEntryCreate", "logging", async function (entry) {
? "unarchived" ? "unarchived"
: entry.before.archived === false && entry.after.archived === true : entry.before.archived === false && entry.after.archived === true
? "archived" ? "archived"
: entry.before.invitable === false && entry.after.invitable === true
? "mention inviting enabled"
: entry.before.invitable === true && entry.after.invitable === false
? "mention inviting disabled"
: "updated" : "updated"
} by <@${entry.user.id}> (${formatUsername(entry.user)})`, } by <@${entry.user.id}> (${formatUsername(entry.user)})`,
timestamp: new Date().toISOString(), timestamp: new Date().toISOString(),
@ -141,6 +213,49 @@ events.add("guildAuditLogEntryCreate", "logging", async function (entry) {
], ],
}) })
.catch(() => {}); .catch(() => {});
break;
}
case AuditLogActions.THREAD_DELETE: {
channel
.createMessage({
embeds: [
{
color: COLOR_ADDED,
title: `${entry.before.invitable != null ? "Private " : ""}Thread Deleted`,
description: `<#${entry.targetID}> (${entry.before.name})`,
timestamp: new Date().toISOString(),
fields: [
{
name: "Deleted by",
value: `<@${entry.user.id}> (${formatUsername(entry.user)})`,
inline: true,
},
],
footer: {
text: `Thread ID: ${entry.targetID}`,
},
},
],
})
.catch(() => {});
break;
}
}
} catch (err) {
const eventName = Object.entries(AuditLogActions).find(([name, val]) => val === entry.actionType)[0];
if (WHITELISTED_EVENTS.has(eventName)) {
logger.error("logging", `Failed to create log entry in ${entry.guild.id} for ${eventName}: ${err}`);
channel
.createMessage({
content: `Failed to create pretty embed for ${eventName}`,
attachments: [
{
filename: entry.id + ".json",
file: JSON.stringify(entry, null, 4),
},
],
})
.catch(() => {});
} }
} }
}); });