From 3886d2d1dd33b09f19f46cf3f86cc740505333da Mon Sep 17 00:00:00 2001 From: Dark <7890309+DarkView@users.noreply.github.com> Date: Thu, 29 Jul 2021 01:02:29 +0200 Subject: [PATCH] Include Sticker and Emoji events in Logs --- backend/src/data/DefaultLogMessages.json | 8 ++ backend/src/data/LogType.ts | 8 ++ backend/src/plugins/Logs/LogsPlugin.ts | 14 ++++ .../Logs/events/LogsStickerEmojiModifyEvts.ts | 82 +++++++++++++++++++ backend/src/utils.ts | 2 +- backend/src/utils/configAccessibleObjects.ts | 50 +++++++++++ presetup-configurator/src/LogChannels.tsx | 6 ++ 7 files changed, 169 insertions(+), 1 deletion(-) create mode 100644 backend/src/plugins/Logs/events/LogsStickerEmojiModifyEvts.ts diff --git a/backend/src/data/DefaultLogMessages.json b/backend/src/data/DefaultLogMessages.json index af22228f..c666ff43 100644 --- a/backend/src/data/DefaultLogMessages.json +++ b/backend/src/data/DefaultLogMessages.json @@ -50,6 +50,14 @@ "STAGE_INSTANCE_DELETE": "📣 Stage Instance `{stageInstance.topic}` was deleted in Stage Channel <#{stageChannel.id}>", "STAGE_INSTANCE_UPDATE": "📣 Stage Instance `{newStageInstance.topic}` was edited in Stage Channel <#{stageChannel.id}>. Changes:\n{differenceString}", + "EMOJI_CREATE": "<{emoji.identifier}> Emoji `{emoji.name} ({emoji.id})` was created", + "EMOJI_DELETE": "👋 Emoji `{emoji.name} ({emoji.id})` was deleted", + "EMOJI_UPDATE": "<{newEmoji.identifier}> Emoji `{newEmoji.name} ({newEmoji.id})` was updated. Changes:\n{differenceString}", + + "STICKER_CREATE": "🖼️ Sticker `{sticker.name} ({sticker.id})` was created. Description: `{sticker.description}` Format: {emoji.format}", + "STICKER_DELETE": "🖼️ Sticker `{sticker.name} ({sticker.id})` was deleted.", + "STICKER_UPDATE": "🖼️ Sticker `{newSticker.name} ({sticker.id})` was updated. Changes:\n{differenceString}", + "COMMAND": "🤖 {userMention(member)} used command in {channelMention(channel)}:\n`{command}`", "MESSAGE_SPAM_DETECTED": "🛑 {userMention(member)} spam detected in {channelMention(channel)}: {description} (more than {limit} in {interval}s)\n{archiveUrl}", diff --git a/backend/src/data/LogType.ts b/backend/src/data/LogType.ts index eb6e66e5..90c81173 100644 --- a/backend/src/data/LogType.ts +++ b/backend/src/data/LogType.ts @@ -41,6 +41,14 @@ export enum LogType { STAGE_INSTANCE_DELETE, STAGE_INSTANCE_UPDATE, + EMOJI_CREATE, + EMOJI_DELETE, + EMOJI_UPDATE, + + STICKER_CREATE, + STICKER_DELETE, + STICKER_UPDATE, + COMMAND, MESSAGE_SPAM_DETECTED, diff --git a/backend/src/plugins/Logs/LogsPlugin.ts b/backend/src/plugins/Logs/LogsPlugin.ts index 64c62444..3f65e9bc 100644 --- a/backend/src/plugins/Logs/LogsPlugin.ts +++ b/backend/src/plugins/Logs/LogsPlugin.ts @@ -20,6 +20,14 @@ import { LogsStageInstanceDeleteEvt, LogsStageInstanceUpdateEvt, } from "./events/LogsStageInstanceModifyEvts"; +import { + LogsEmojiCreateEvt, + LogsEmojiDeleteEvt, + LogsEmojiUpdateEvt, + LogsStickerCreateEvt, + LogsStickerDeleteEvt, + LogsStickerUpdateEvt, +} from "./events/LogsStickerEmojiModifyEvts"; import { LogsThreadCreateEvt, LogsThreadDeleteEvt, LogsThreadUpdateEvt } from "./events/LogsThreadModifyEvts"; import { LogsGuildMemberUpdateEvt } from "./events/LogsUserUpdateEvts"; import { LogsVoiceStateUpdateEvt } from "./events/LogsVoiceChannelEvts"; @@ -81,6 +89,12 @@ export const LogsPlugin = zeppelinGuildPlugin()({ LogsThreadCreateEvt, LogsThreadDeleteEvt, LogsThreadUpdateEvt, + LogsEmojiCreateEvt, + LogsEmojiDeleteEvt, + LogsEmojiUpdateEvt, + LogsStickerCreateEvt, + LogsStickerDeleteEvt, + LogsStickerUpdateEvt, ], public: { diff --git a/backend/src/plugins/Logs/events/LogsStickerEmojiModifyEvts.ts b/backend/src/plugins/Logs/events/LogsStickerEmojiModifyEvts.ts new file mode 100644 index 00000000..3535174c --- /dev/null +++ b/backend/src/plugins/Logs/events/LogsStickerEmojiModifyEvts.ts @@ -0,0 +1,82 @@ +import { LogType } from "../../../data/LogType"; +import { differenceToString, getScalarDifference } from "../../../utils"; +import { + channelToConfigAccessibleChannel, + emojiToConfigAccessibleEmoji, + stickerToConfigAccessibleSticker, +} from "../../../utils/configAccessibleObjects"; +import { logsEvt } from "../types"; + +export const LogsEmojiCreateEvt = logsEvt({ + event: "emojiCreate", + + async listener(meta) { + meta.pluginData.state.guildLogs.log(LogType.EMOJI_CREATE, { + emoji: emojiToConfigAccessibleEmoji(meta.args.emoji), + }); + }, +}); + +export const LogsEmojiDeleteEvt = logsEvt({ + event: "emojiDelete", + + async listener(meta) { + meta.pluginData.state.guildLogs.log(LogType.EMOJI_DELETE, { + emoji: emojiToConfigAccessibleEmoji(meta.args.emoji), + }); + }, +}); + +export const LogsEmojiUpdateEvt = logsEvt({ + event: "emojiUpdate", + + async listener(meta) { + const diff = getScalarDifference(meta.args.oldEmoji, meta.args.newEmoji); + const differenceString = differenceToString(diff); + + meta.pluginData.state.guildLogs.log(LogType.EMOJI_UPDATE, { + oldEmoji: emojiToConfigAccessibleEmoji(meta.args.oldEmoji), + newEmoji: emojiToConfigAccessibleEmoji(meta.args.newEmoji), + differenceString, + }); + }, +}); + +export const LogsStickerCreateEvt = logsEvt({ + event: "stickerCreate", + + async listener(meta) { + meta.pluginData.state.guildLogs.log(LogType.STICKER_CREATE, { + thread: stickerToConfigAccessibleSticker(meta.args.sticker), + }); + }, +}); + +export const LogsStickerDeleteEvt = logsEvt({ + event: "stickerDelete", + + async listener(meta) { + meta.pluginData.state.guildLogs.log(LogType.STICKER_DELETE, { + thread: stickerToConfigAccessibleSticker(meta.args.sticker), + }); + }, +}); + +export const LogsStickerUpdateEvt = logsEvt({ + event: "stickerUpdate", + + async listener(meta) { + const diff = getScalarDifference(meta.args.oldSticker, meta.args.newSticker); + const differenceString = differenceToString(diff); + + meta.pluginData.state.guildLogs.log( + LogType.STICKER_UPDATE, + { + oldThread: stickerToConfigAccessibleSticker(meta.args.oldSticker), + newThread: stickerToConfigAccessibleSticker(meta.args.newSticker), + differenceString, + }, + meta.args.newSticker.id, + ); + }, +}); diff --git a/backend/src/utils.ts b/backend/src/utils.ts index c4464f97..a1e10430 100644 --- a/backend/src/utils.ts +++ b/backend/src/utils.ts @@ -212,7 +212,7 @@ export function differenceToString(diff: Map): st let toReturn = ""; diff = prettyDifference(diff); for (const [key, difference] of diff) { - toReturn += `${key[0].toUpperCase() + key.slice(1)}: \`${difference.was}\` ➜ \`${difference.is}\`\n`; + toReturn += `**${key[0].toUpperCase() + key.slice(1)}**: \`${difference.was}\` ➜ \`${difference.is}\`\n`; } return toReturn; } diff --git a/backend/src/utils/configAccessibleObjects.ts b/backend/src/utils/configAccessibleObjects.ts index 1c281ed6..e28c61a5 100644 --- a/backend/src/utils/configAccessibleObjects.ts +++ b/backend/src/utils/configAccessibleObjects.ts @@ -1,10 +1,12 @@ import { + Emoji, GuildChannel, GuildMember, PartialGuildMember, Role, Snowflake, StageInstance, + Sticker, ThreadChannel, User, } from "discord.js"; @@ -127,3 +129,51 @@ export function stageToConfigAccessibleStage(stage: StageInstance): IConfigAcces return toReturn; } + +export interface IConfigAccessibleEmoji { + id: Snowflake; + name: string; + createdAt?: number; + animated: boolean; + identifier: string; +} + +export function emojiToConfigAccessibleEmoji(emoji: Emoji): IConfigAccessibleEmoji { + const toReturn: IConfigAccessibleEmoji = { + id: emoji.id!, + name: emoji.name!, + createdAt: emoji.createdTimestamp ?? undefined, + animated: emoji.animated ?? false, + identifier: emoji.identifier, + }; + + return toReturn; +} + +export interface IConfigAccessibleSticker { + id: Snowflake; + guildId?: Snowflake; + packId?: Snowflake; + name: string; + description: string; + tags: string; + format: string; + animated: boolean; + url: string; +} + +export function stickerToConfigAccessibleSticker(sticker: Sticker): IConfigAccessibleSticker { + const toReturn: IConfigAccessibleSticker = { + id: sticker.id, + guildId: sticker.guildId ?? undefined, + packId: sticker.packId ?? undefined, + name: sticker.name, + description: sticker.description ?? "", + tags: sticker.tags?.join(", ") ?? "", + format: sticker.format, + animated: sticker.format === "PNG" ? false : true, + url: sticker.url, + }; + + return toReturn; +} diff --git a/presetup-configurator/src/LogChannels.tsx b/presetup-configurator/src/LogChannels.tsx index 928d4c99..85300d37 100644 --- a/presetup-configurator/src/LogChannels.tsx +++ b/presetup-configurator/src/LogChannels.tsx @@ -37,6 +37,12 @@ const LOG_TYPES = { "STAGE_INSTANCE_CREATE": "Stage created", "STAGE_INSTANCE_DELETE": "Stage deleted", "STAGE_INSTANCE_UPDATE": "Stage updated", + "EMOJI_CREATE": "Emoji created", + "EMOJI_DELETE": "Emoji deleted", + "EMOJI_UPDATE": "Emoji updated", + "STICKER_CREATE": "Sticker created", + "STICKER_DELETE": "Sticker deleted", + "STICKER_UPDATE": "Sticker updated", "COMMAND": "Command used", "MESSAGE_SPAM_DETECTED": "Message spam detected", "CENSOR": "Message censored",