From 9812b70568715d7a3224a0ad00442def8a92c9f0 Mon Sep 17 00:00:00 2001 From: TheCodedProf Date: Wed, 18 Jan 2023 21:01:04 -0500 Subject: [PATCH] possible fix for webhook. NOT TESTED --- src/events/webhookUpdate.ts | 77 +++++++++++++++++-------------------- 1 file changed, 35 insertions(+), 42 deletions(-) diff --git a/src/events/webhookUpdate.ts b/src/events/webhookUpdate.ts index 18b6d46..21fec73 100644 --- a/src/events/webhookUpdate.ts +++ b/src/events/webhookUpdate.ts @@ -1,8 +1,13 @@ -import { AuditLogEvent, GuildAuditLogsEntry, Webhook } from "discord.js"; +import { AuditLogEvent, GuildAuditLogsEntry, GuildChannel, Webhook } from "discord.js"; import type Discord from "discord.js"; import type { NucleusClient } from "../utils/client.js"; export const event = "webhookUpdate"; +interface accType { + before: Record; + after: Record; +} + export async function callback(client: NucleusClient, channel: Discord.GuildChannel) { try { const { getAuditLog, log, NucleusColors, entry, renderUser, renderChannel, renderDelta } = client.logger; @@ -18,77 +23,65 @@ export async function callback(client: NucleusClient, channel: Discord.GuildChan let action: "Create" | "Update" | "Delete" = "Create"; let list: Record | string> = {}; if (auditUpdate && auditUpdate.createdTimestamp > audit.createdTimestamp) { - const { before, after } = auditUpdate.changes.reduce( - ( - acc: { before: Record; after: Record }, - change: { key: string; new: string; old: string } - ) => { - acc.before[change.key] = change.old; - acc.after[change.key] = change.new; + const { before, after } = auditUpdate.changes.reduce((acc: accType, change) => { + acc.before[change.key] = change.old?.toString()!; + acc.after[change.key] = change.new?.toString()!; return acc; }, { before: {}, after: {} } ); - if (before.name !== after.name) - list["name"] = entry([before.name, after.name], `${before.name} -> ${after.name}`); - if (before.channel_id !== after.channel_id) + if (before["name"] !== after["name"]) + list["name"] = entry([before["name"]!, after["name"]!], `${before["name"]} -> ${after["name"]}`); + if (before["channel_id"] !== after["channel_id"]) list["channel"] = entry( - [before.channel_id, after.channel_id], - renderChannel(await client.channels.fetch(before.channel_id)) + + [before["channel_id"]!, after["channel_id"]!], + renderChannel(await client.channels.fetch(before["channel_id"]!) as GuildChannel) + " -> " + - renderChannel(await client.channels.fetch(after.channel_id)) + renderChannel(await client.channels.fetch(after["channel_id"]!) as GuildChannel) ); if (!Object.keys(list).length) return; list["created"] = entry( - auditUpdate.target.createdTimestamp, - renderDelta(auditUpdate.target.createdTimestamp) + (auditUpdate.target! as Extract).createdTimestamp, + renderDelta((auditUpdate.target! as Extract).createdTimestamp) ); - list["edited"] = entry(after.editedTimestamp, renderDelta(new Date().getTime())); - list["editedBy"] = entry(auditUpdate.executor.id, renderUser(auditUpdate.executor)); + list["edited"] = entry(after["editedTimestamp"]!, renderDelta(new Date().getTime())); + list["editedBy"] = entry(auditUpdate.executor!.id, renderUser(auditUpdate.executor!)); audit = auditUpdate; action = "Update"; } else if (auditDelete && auditDelete.createdTimestamp > audit.createdTimestamp) { - const { before } = auditDelete.changes.reduce( - ( - acc: { before: Record; after: Record }, - change: { key: string; new: string; old: string } - ) => { - acc.before[change.key] = change.old; - acc.after[change.key] = change.new; + const { before } = auditDelete.changes.reduce((acc: accType, change) => { + acc.before[change.key] = change.old?.toString()!; + acc.after[change.key] = change.new?.toString()!; return acc; }, { before: {}, after: {} } ); list = { - name: entry(before.name, `${before.name}`), - channel: entry(before.channel_id, renderChannel(await client.channels.fetch(before.channel_id))), - created: entry(auditDelete.target.createdTimestamp, renderDelta(auditDelete.target.createdTimestamp)), + name: entry(before["name"]!, `${before["name"]}`), + channel: entry(before["channel_id"]!, renderChannel((await client.channels.fetch(before["channel_id"]!)) as GuildChannel)), + created: entry((auditUpdate.target! as Extract).createdTimestamp, renderDelta((auditUpdate.target! as Extract).createdTimestamp)), deleted: entry(new Date().getTime(), renderDelta(new Date().getTime())), deletedBy: entry( - auditDelete.executor.id, - renderUser((await channel.guild.members.fetch(auditDelete.executor.id)).user) + auditDelete.executor!.id, + renderUser((await channel.guild.members.fetch(auditDelete.executor!.id)).user) ) }; audit = auditDelete; action = "Delete"; } else { - const { before } = auditDelete.changes.reduce( - ( - acc: { before: Record; after: Record }, - change: { key: string; new: string; old: string } - ) => { - acc.before[change.key] = change.old; - acc.after[change.key] = change.new; + const { before } = auditDelete.changes.reduce((acc: accType, change) => { + acc.before[change.key] = change.old?.toString()!; + acc.after[change.key] = change.new?.toString()!; return acc; }, { before: {}, after: {} } ); list = { - name: entry(before.name, `${before.name}`), - channel: entry(before.channel_id, renderChannel(await client.channels.fetch(before.channel_id))), + name: entry(before["name"]!, `${before["name"]}`), + channel: entry(before["channel_id"]!, renderChannel(await client.channels.fetch(before["channel_id"]!) as GuildChannel)), createdBy: entry( - auditCreate.executor.id, - renderUser((await channel.guild.members.fetch(auditCreate.executor.id)).user) + auditCreate.executor!.id, + renderUser((await channel.guild.members.fetch(auditCreate.executor!.id)).user) ), created: entry(new Date().getTime(), renderDelta(new Date().getTime())) }; @@ -103,7 +96,7 @@ export async function callback(client: NucleusClient, channel: Discord.GuildChan type: "webhook" + action, displayName: `Webhook ${action}d`, calculateType: "webhookUpdate", - color: NucleusColors[cols[action]], + color: (NucleusColors as any)[cols[action]], emoji: "WEBHOOK." + action.toUpperCase(), timestamp: new Date().getTime() },