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

Limit which changed props are included in update logs

This commit is contained in:
Dragory 2021-09-05 23:46:40 +03:00
parent 70fb0b5baa
commit 82ca94e8c9
No known key found for this signature in database
GPG key ID: 5F387BA66DF8AAC1
6 changed files with 64 additions and 13 deletions

View file

@ -5,6 +5,8 @@ import { logsEvt } from "../types";
import { logChannelCreate } from "../logFunctions/logChannelCreate"; import { logChannelCreate } from "../logFunctions/logChannelCreate";
import { logChannelDelete } from "../logFunctions/logChannelDelete"; import { logChannelDelete } from "../logFunctions/logChannelDelete";
import { logChannelUpdate } from "../logFunctions/logChannelUpdate"; import { logChannelUpdate } from "../logFunctions/logChannelUpdate";
import { TextChannel, VoiceChannel } from "discord.js";
import { filterObject } from "../../../utils/filterObject";
export const LogsChannelCreateEvt = logsEvt({ export const LogsChannelCreateEvt = logsEvt({
event: "channelCreate", event: "channelCreate",
@ -26,6 +28,15 @@ export const LogsChannelDeleteEvt = logsEvt({
}, },
}); });
const validChannelDiffProps: Set<keyof TextChannel | keyof VoiceChannel> = new Set([
"name",
"parentId",
"nsfw",
"rateLimitPerUser",
"topic",
"bitrate",
]);
export const LogsChannelUpdateEvt = logsEvt({ export const LogsChannelUpdateEvt = logsEvt({
event: "channelUpdate", event: "channelUpdate",
@ -34,7 +45,9 @@ export const LogsChannelUpdateEvt = logsEvt({
return; return;
} }
const diff = getScalarDifference(meta.args.oldChannel, meta.args.newChannel); const oldChannelDiffProps = filterObject(meta.args.oldChannel || {}, (v, k) => validChannelDiffProps.has(k));
const newChannelDiffProps = filterObject(meta.args.newChannel, (v, k) => validChannelDiffProps.has(k));
const diff = getScalarDifference(oldChannelDiffProps, newChannelDiffProps);
const differenceString = differenceToString(diff); const differenceString = differenceToString(diff);
if (differenceString.trim() === "") { if (differenceString.trim() === "") {

View file

@ -6,6 +6,8 @@ import { logEmojiUpdate } from "../logFunctions/logEmojiUpdate";
import { logStickerCreate } from "../logFunctions/logStickerCreate"; import { logStickerCreate } from "../logFunctions/logStickerCreate";
import { logStickerDelete } from "../logFunctions/logStickerDelete"; import { logStickerDelete } from "../logFunctions/logStickerDelete";
import { logStickerUpdate } from "../logFunctions/logStickerUpdate"; import { logStickerUpdate } from "../logFunctions/logStickerUpdate";
import { Emoji, GuildEmoji, Sticker, ThreadChannel } from "discord.js";
import { filterObject } from "../../../utils/filterObject";
export const LogsEmojiCreateEvt = logsEvt({ export const LogsEmojiCreateEvt = logsEvt({
event: "emojiCreate", event: "emojiCreate",
@ -27,11 +29,15 @@ export const LogsEmojiDeleteEvt = logsEvt({
}, },
}); });
const validEmojiDiffProps: Set<keyof GuildEmoji> = new Set(["name"]);
export const LogsEmojiUpdateEvt = logsEvt({ export const LogsEmojiUpdateEvt = logsEvt({
event: "emojiUpdate", event: "emojiUpdate",
async listener(meta) { async listener(meta) {
const diff = getScalarDifference(meta.args.oldEmoji, meta.args.newEmoji); const oldEmojiDiffProps = filterObject(meta.args.oldEmoji || {}, (v, k) => validEmojiDiffProps.has(k));
const newEmojiDiffProps = filterObject(meta.args.newEmoji, (v, k) => validEmojiDiffProps.has(k));
const diff = getScalarDifference(oldEmojiDiffProps, newEmojiDiffProps);
const differenceString = differenceToString(diff); const differenceString = differenceToString(diff);
if (differenceString === "") { if (differenceString === "") {
@ -66,11 +72,15 @@ export const LogsStickerDeleteEvt = logsEvt({
}, },
}); });
const validStickerDiffProps: Set<keyof Sticker> = new Set(["name"]);
export const LogsStickerUpdateEvt = logsEvt({ export const LogsStickerUpdateEvt = logsEvt({
event: "stickerUpdate", event: "stickerUpdate",
async listener(meta) { async listener(meta) {
const diff = getScalarDifference(meta.args.oldSticker, meta.args.newSticker); const oldStickerDiffProps = filterObject(meta.args.oldSticker || {}, (v, k) => validStickerDiffProps.has(k));
const newStickerDiffProps = filterObject(meta.args.newSticker, (v, k) => validStickerDiffProps.has(k));
const diff = getScalarDifference(oldStickerDiffProps, newStickerDiffProps);
const differenceString = differenceToString(diff); const differenceString = differenceToString(diff);
if (differenceString === "") { if (differenceString === "") {

View file

@ -5,6 +5,8 @@ import { logsEvt } from "../types";
import { logRoleCreate } from "../logFunctions/logRoleCreate"; import { logRoleCreate } from "../logFunctions/logRoleCreate";
import { logRoleDelete } from "../logFunctions/logRoleDelete"; import { logRoleDelete } from "../logFunctions/logRoleDelete";
import { logRoleUpdate } from "../logFunctions/logRoleUpdate"; import { logRoleUpdate } from "../logFunctions/logRoleUpdate";
import { GuildEmoji, Role } from "discord.js";
import { filterObject } from "../../../utils/filterObject";
export const LogsRoleCreateEvt = logsEvt({ export const LogsRoleCreateEvt = logsEvt({
event: "roleCreate", event: "roleCreate",
@ -26,11 +28,15 @@ export const LogsRoleDeleteEvt = logsEvt({
}, },
}); });
const validRoleDiffProps: Set<keyof Role> = new Set(["name", "hoist", "color", "mentionable"]);
export const LogsRoleUpdateEvt = logsEvt({ export const LogsRoleUpdateEvt = logsEvt({
event: "roleUpdate", event: "roleUpdate",
async listener(meta) { async listener(meta) {
const diff = getScalarDifference(meta.args.oldRole, meta.args.newRole); const oldRoleDiffProps = filterObject(meta.args.oldRole || {}, (v, k) => validRoleDiffProps.has(k));
const newRoleDiffProps = filterObject(meta.args.newRole, (v, k) => validRoleDiffProps.has(k));
const diff = getScalarDifference(oldRoleDiffProps, newRoleDiffProps);
const differenceString = differenceToString(diff); const differenceString = differenceToString(diff);
logRoleUpdate(meta.pluginData, { logRoleUpdate(meta.pluginData, {

View file

@ -3,9 +3,10 @@ import { differenceToString, getScalarDifference } from "../../../utils";
import { channelToTemplateSafeChannel, stageToTemplateSafeStage } from "../../../utils/templateSafeObjects"; import { channelToTemplateSafeChannel, stageToTemplateSafeStage } from "../../../utils/templateSafeObjects";
import { logsEvt } from "../types"; import { logsEvt } from "../types";
import { logStageInstanceCreate } from "../logFunctions/logStageInstanceCreate"; import { logStageInstanceCreate } from "../logFunctions/logStageInstanceCreate";
import { StageChannel } from "discord.js"; import { Role, StageChannel, StageInstance } from "discord.js";
import { logStageInstanceDelete } from "../logFunctions/logStageInstanceDelete"; import { logStageInstanceDelete } from "../logFunctions/logStageInstanceDelete";
import { logStageInstanceUpdate } from "../logFunctions/logStageInstanceUpdate"; import { logStageInstanceUpdate } from "../logFunctions/logStageInstanceUpdate";
import { filterObject } from "../../../utils/filterObject";
export const LogsStageInstanceCreateEvt = logsEvt({ export const LogsStageInstanceCreateEvt = logsEvt({
event: "stageInstanceCreate", event: "stageInstanceCreate",
@ -37,6 +38,12 @@ export const LogsStageInstanceDeleteEvt = logsEvt({
}, },
}); });
const validStageInstanceDiffProps: Set<keyof StageInstance> = new Set([
"topic",
"privacyLevel",
"discoverableDisabled",
]);
export const LogsStageInstanceUpdateEvt = logsEvt({ export const LogsStageInstanceUpdateEvt = logsEvt({
event: "stageInstanceUpdate", event: "stageInstanceUpdate",
@ -45,7 +52,13 @@ export const LogsStageInstanceUpdateEvt = logsEvt({
meta.args.newStageInstance.channel ?? meta.args.newStageInstance.channel ??
((await meta.pluginData.guild.channels.fetch(meta.args.newStageInstance.channelId)) as StageChannel); ((await meta.pluginData.guild.channels.fetch(meta.args.newStageInstance.channelId)) as StageChannel);
const diff = getScalarDifference(meta.args.oldStageInstance, meta.args.newStageInstance); const oldStageInstanceDiffProps = filterObject(meta.args.oldStageInstance || {}, (v, k) =>
validStageInstanceDiffProps.has(k),
);
const newStageInstanceDiffProps = filterObject(meta.args.newStageInstance, (v, k) =>
validStageInstanceDiffProps.has(k),
);
const diff = getScalarDifference(oldStageInstanceDiffProps, newStageInstanceDiffProps);
const differenceString = differenceToString(diff); const differenceString = differenceToString(diff);
logStageInstanceUpdate(meta.pluginData, { logStageInstanceUpdate(meta.pluginData, {

View file

@ -5,6 +5,8 @@ import { logsEvt } from "../types";
import { logThreadCreate } from "../logFunctions/logThreadCreate"; import { logThreadCreate } from "../logFunctions/logThreadCreate";
import { logThreadDelete } from "../logFunctions/logThreadDelete"; import { logThreadDelete } from "../logFunctions/logThreadDelete";
import { logThreadUpdate } from "../logFunctions/logThreadUpdate"; import { logThreadUpdate } from "../logFunctions/logThreadUpdate";
import { TextChannel, ThreadChannel, VoiceChannel } from "discord.js";
import { filterObject } from "../../../utils/filterObject";
export const LogsThreadCreateEvt = logsEvt({ export const LogsThreadCreateEvt = logsEvt({
event: "threadCreate", event: "threadCreate",
@ -26,11 +28,15 @@ export const LogsThreadDeleteEvt = logsEvt({
}, },
}); });
const validThreadDiffProps: Set<keyof ThreadChannel> = new Set(["name", "autoArchiveDuration", "rateLimitPerUser"]);
export const LogsThreadUpdateEvt = logsEvt({ export const LogsThreadUpdateEvt = logsEvt({
event: "threadUpdate", event: "threadUpdate",
async listener(meta) { async listener(meta) {
const diff = getScalarDifference(meta.args.oldThread, meta.args.newThread, ["messageCount", "archiveTimestamp"]); const oldThreadDiffProps = filterObject(meta.args.oldThread || {}, (v, k) => validThreadDiffProps.has(k));
const newThreadDiffProps = filterObject(meta.args.newThread, (v, k) => validThreadDiffProps.has(k));
const diff = getScalarDifference(oldThreadDiffProps, newThreadDiffProps);
const differenceString = differenceToString(diff); const differenceString = differenceToString(diff);
logThreadUpdate(meta.pluginData, { logThreadUpdate(meta.pluginData, {

View file

@ -1,13 +1,16 @@
type FilterResult<T> = {
[K in keyof T]?: T[K];
};
/** /**
* Filter an object's properties based on its values and keys * Filter an object's properties based on its values and keys
* @return New object with filtered properties * @return New object with filtered properties
*/ */
export function filterObject<T extends Record<string | number | symbol, unknown>>( export function filterObject<T>(
object: T, object: T,
filterFn: <K extends keyof T>(value: T[K], key: K) => boolean, filterFn: <K extends keyof T>(value: T[K], key: K) => boolean,
): Record<keyof T, T[keyof T]> { ): FilterResult<T> {
return Object.fromEntries(Object.entries(object).filter(([key, value]) => filterFn(value as any, key))) as Record< return Object.fromEntries(
keyof T, Object.entries(object).filter(([key, value]) => filterFn(value as any, key as keyof T)),
T[keyof T] ) as FilterResult<T>;
>;
} }