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 { logChannelDelete } from "../logFunctions/logChannelDelete";
|
||||
import { logChannelUpdate } from "../logFunctions/logChannelUpdate";
|
||||
import { TextChannel, VoiceChannel } from "discord.js";
|
||||
import { filterObject } from "../../../utils/filterObject";
|
||||
|
||||
export const LogsChannelCreateEvt = logsEvt({
|
||||
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({
|
||||
event: "channelUpdate",
|
||||
|
||||
|
@ -34,7 +45,9 @@ export const LogsChannelUpdateEvt = logsEvt({
|
|||
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);
|
||||
|
||||
if (differenceString.trim() === "") {
|
||||
|
|
|
@ -6,6 +6,8 @@ import { logEmojiUpdate } from "../logFunctions/logEmojiUpdate";
|
|||
import { logStickerCreate } from "../logFunctions/logStickerCreate";
|
||||
import { logStickerDelete } from "../logFunctions/logStickerDelete";
|
||||
import { logStickerUpdate } from "../logFunctions/logStickerUpdate";
|
||||
import { Emoji, GuildEmoji, Sticker, ThreadChannel } from "discord.js";
|
||||
import { filterObject } from "../../../utils/filterObject";
|
||||
|
||||
export const LogsEmojiCreateEvt = logsEvt({
|
||||
event: "emojiCreate",
|
||||
|
@ -27,11 +29,15 @@ export const LogsEmojiDeleteEvt = logsEvt({
|
|||
},
|
||||
});
|
||||
|
||||
const validEmojiDiffProps: Set<keyof GuildEmoji> = new Set(["name"]);
|
||||
|
||||
export const LogsEmojiUpdateEvt = logsEvt({
|
||||
event: "emojiUpdate",
|
||||
|
||||
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);
|
||||
|
||||
if (differenceString === "") {
|
||||
|
@ -66,11 +72,15 @@ export const LogsStickerDeleteEvt = logsEvt({
|
|||
},
|
||||
});
|
||||
|
||||
const validStickerDiffProps: Set<keyof Sticker> = new Set(["name"]);
|
||||
|
||||
export const LogsStickerUpdateEvt = logsEvt({
|
||||
event: "stickerUpdate",
|
||||
|
||||
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);
|
||||
|
||||
if (differenceString === "") {
|
||||
|
|
|
@ -5,6 +5,8 @@ import { logsEvt } from "../types";
|
|||
import { logRoleCreate } from "../logFunctions/logRoleCreate";
|
||||
import { logRoleDelete } from "../logFunctions/logRoleDelete";
|
||||
import { logRoleUpdate } from "../logFunctions/logRoleUpdate";
|
||||
import { GuildEmoji, Role } from "discord.js";
|
||||
import { filterObject } from "../../../utils/filterObject";
|
||||
|
||||
export const LogsRoleCreateEvt = logsEvt({
|
||||
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({
|
||||
event: "roleUpdate",
|
||||
|
||||
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);
|
||||
|
||||
logRoleUpdate(meta.pluginData, {
|
||||
|
|
|
@ -3,9 +3,10 @@ import { differenceToString, getScalarDifference } from "../../../utils";
|
|||
import { channelToTemplateSafeChannel, stageToTemplateSafeStage } from "../../../utils/templateSafeObjects";
|
||||
import { logsEvt } from "../types";
|
||||
import { logStageInstanceCreate } from "../logFunctions/logStageInstanceCreate";
|
||||
import { StageChannel } from "discord.js";
|
||||
import { Role, StageChannel, StageInstance } from "discord.js";
|
||||
import { logStageInstanceDelete } from "../logFunctions/logStageInstanceDelete";
|
||||
import { logStageInstanceUpdate } from "../logFunctions/logStageInstanceUpdate";
|
||||
import { filterObject } from "../../../utils/filterObject";
|
||||
|
||||
export const LogsStageInstanceCreateEvt = logsEvt({
|
||||
event: "stageInstanceCreate",
|
||||
|
@ -37,6 +38,12 @@ export const LogsStageInstanceDeleteEvt = logsEvt({
|
|||
},
|
||||
});
|
||||
|
||||
const validStageInstanceDiffProps: Set<keyof StageInstance> = new Set([
|
||||
"topic",
|
||||
"privacyLevel",
|
||||
"discoverableDisabled",
|
||||
]);
|
||||
|
||||
export const LogsStageInstanceUpdateEvt = logsEvt({
|
||||
event: "stageInstanceUpdate",
|
||||
|
||||
|
@ -45,7 +52,13 @@ export const LogsStageInstanceUpdateEvt = logsEvt({
|
|||
meta.args.newStageInstance.channel ??
|
||||
((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);
|
||||
|
||||
logStageInstanceUpdate(meta.pluginData, {
|
||||
|
|
|
@ -5,6 +5,8 @@ import { logsEvt } from "../types";
|
|||
import { logThreadCreate } from "../logFunctions/logThreadCreate";
|
||||
import { logThreadDelete } from "../logFunctions/logThreadDelete";
|
||||
import { logThreadUpdate } from "../logFunctions/logThreadUpdate";
|
||||
import { TextChannel, ThreadChannel, VoiceChannel } from "discord.js";
|
||||
import { filterObject } from "../../../utils/filterObject";
|
||||
|
||||
export const LogsThreadCreateEvt = logsEvt({
|
||||
event: "threadCreate",
|
||||
|
@ -26,11 +28,15 @@ export const LogsThreadDeleteEvt = logsEvt({
|
|||
},
|
||||
});
|
||||
|
||||
const validThreadDiffProps: Set<keyof ThreadChannel> = new Set(["name", "autoArchiveDuration", "rateLimitPerUser"]);
|
||||
|
||||
export const LogsThreadUpdateEvt = logsEvt({
|
||||
event: "threadUpdate",
|
||||
|
||||
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);
|
||||
|
||||
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
|
||||
* @return New object with filtered properties
|
||||
*/
|
||||
export function filterObject<T extends Record<string | number | symbol, unknown>>(
|
||||
export function filterObject<T>(
|
||||
object: T,
|
||||
filterFn: <K extends keyof T>(value: T[K], key: K) => boolean,
|
||||
): Record<keyof T, T[keyof T]> {
|
||||
return Object.fromEntries(Object.entries(object).filter(([key, value]) => filterFn(value as any, key))) as Record<
|
||||
keyof T,
|
||||
T[keyof T]
|
||||
>;
|
||||
): FilterResult<T> {
|
||||
return Object.fromEntries(
|
||||
Object.entries(object).filter(([key, value]) => filterFn(value as any, key as keyof T)),
|
||||
) as FilterResult<T>;
|
||||
}
|
||||
|
|
Loading…
Add table
Reference in a new issue