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:
parent
70fb0b5baa
commit
82ca94e8c9
6 changed files with 64 additions and 13 deletions
|
@ -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() === "") {
|
||||||
|
|
|
@ -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 === "") {
|
||||||
|
|
|
@ -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, {
|
||||||
|
|
|
@ -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, {
|
||||||
|
|
|
@ -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, {
|
||||||
|
|
|
@ -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>;
|
||||||
>;
|
|
||||||
}
|
}
|
||||||
|
|
Loading…
Add table
Reference in a new issue