3
0
Fork 0
mirror of https://github.com/ZeppelinBot/Zeppelin.git synced 2025-03-14 21:31:50 +00:00

Include Sticker and Emoji events in Logs

This commit is contained in:
Dark 2021-07-29 01:02:29 +02:00
parent 1e69da7cbc
commit 3886d2d1dd
No known key found for this signature in database
GPG key ID: 384C4B4F5B1E25A8
7 changed files with 169 additions and 1 deletions

View file

@ -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}",

View file

@ -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,

View file

@ -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<LogsPluginType>()({
LogsThreadCreateEvt,
LogsThreadDeleteEvt,
LogsThreadUpdateEvt,
LogsEmojiCreateEvt,
LogsEmojiDeleteEvt,
LogsEmojiUpdateEvt,
LogsStickerCreateEvt,
LogsStickerDeleteEvt,
LogsStickerUpdateEvt,
],
public: {

View file

@ -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,
);
},
});

View file

@ -212,7 +212,7 @@ export function differenceToString(diff: Map<string, { was: any; is: any }>): 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;
}

View file

@ -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;
}

View file

@ -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",