From dfb2b8227238ba82ffe646cd925dc0047b081aa1 Mon Sep 17 00:00:00 2001 From: Ruby Date: Sun, 12 May 2024 14:55:21 +0200 Subject: [PATCH] feat: pretty_name for automod --- backend/src/data/DefaultLogMessages.json | 2 +- backend/src/plugins/Automod/actions/alert.ts | 4 +++- backend/src/plugins/Automod/actions/log.ts | 3 ++- backend/src/plugins/Automod/functions/runAutomod.ts | 8 +++++++- backend/src/plugins/Automod/helpers.ts | 1 + backend/src/plugins/Automod/types.ts | 1 + backend/src/plugins/Logs/logFunctions/logAutomodAction.ts | 2 ++ 7 files changed, 17 insertions(+), 4 deletions(-) diff --git a/backend/src/data/DefaultLogMessages.json b/backend/src/data/DefaultLogMessages.json index 53534132..ff0d12ca 100644 --- a/backend/src/data/DefaultLogMessages.json +++ b/backend/src/data/DefaultLogMessages.json @@ -86,7 +86,7 @@ "BOT_ALERT": "{timestamp} ⚠ **BOT ALERT:** {tmplEval(body)}", "DM_FAILED": "{timestamp} \uD83D\uDEA7 Failed to send DM ({source}) to {userMention(user)}", - "AUTOMOD_ACTION": "{timestamp} \uD83E\uDD16 Automod rule **{rule}** triggered by {userMention(users)}\n{matchSummary}\nActions taken: **{actionsTaken}**", + "AUTOMOD_ACTION": "{timestamp} \uD83E\uDD16 Automod rule **{if(not(prettyName), rule, prettyName)}** triggered by {userMention(users)}\n{matchSummary}\nActions taken: **{actionsTaken}**", "SET_ANTIRAID_USER": "{timestamp} ⚔ {userMention(user)} set anti-raid to **{level}**", "SET_ANTIRAID_AUTO": "{timestamp} ⚔ Anti-raid automatically set to **{level}**" } diff --git a/backend/src/plugins/Automod/actions/alert.ts b/backend/src/plugins/Automod/actions/alert.ts index d21fb4d5..28be6ff4 100644 --- a/backend/src/plugins/Automod/actions/alert.ts +++ b/backend/src/plugins/Automod/actions/alert.ts @@ -34,7 +34,7 @@ const configSchema = z.object({ export const AlertAction = automodAction({ configSchema, - async apply({ pluginData, contexts, actionConfig, ruleName, matchResult }) { + async apply({ pluginData, contexts, actionConfig, ruleName, matchResult, prettyName }) { const channel = pluginData.guild.channels.cache.get(actionConfig.channel as Snowflake); const logs = pluginData.getPlugin(LogsPlugin); @@ -55,6 +55,7 @@ export const AlertAction = automodAction({ users: safeUsers, actionsTaken, matchSummary: matchResult.summary ?? "", + prettyName, }), ); @@ -69,6 +70,7 @@ export const AlertAction = automodAction({ text, actionsTaken, matchSummary: matchResult.summary, + prettyName, messageLink: theMessageLink, logMessage: validateAndParseMessageContent(logMessage)?.content, }), diff --git a/backend/src/plugins/Automod/actions/log.ts b/backend/src/plugins/Automod/actions/log.ts index dace25f1..f026b487 100644 --- a/backend/src/plugins/Automod/actions/log.ts +++ b/backend/src/plugins/Automod/actions/log.ts @@ -6,13 +6,14 @@ import { automodAction } from "../helpers"; export const LogAction = automodAction({ configSchema: z.boolean().default(true), - async apply({ pluginData, contexts, ruleName, matchResult }) { + async apply({ pluginData, contexts, ruleName, matchResult, prettyName }) { const users = unique(contexts.map((c) => c.user)).filter(isTruthy); const user = users[0]; const actionsTaken = Object.keys(pluginData.config.get().rules[ruleName].actions).join(", "); pluginData.getPlugin(LogsPlugin).logAutomodAction({ rule: ruleName, + prettyName, user, users, actionsTaken, diff --git a/backend/src/plugins/Automod/functions/runAutomod.ts b/backend/src/plugins/Automod/functions/runAutomod.ts index 4ccc38de..a0b185f7 100644 --- a/backend/src/plugins/Automod/functions/runAutomod.ts +++ b/backend/src/plugins/Automod/functions/runAutomod.ts @@ -35,6 +35,8 @@ export async function runAutomod(pluginData: GuildPluginData, }); for (const [ruleName, rule] of Object.entries(config.rules)) { + const prettyName = rule.pretty_name; + if (rule.enabled === false) continue; if ( !rule.affects_bots && @@ -100,6 +102,7 @@ export async function runAutomod(pluginData: GuildPluginData, contexts, actionConfig: true, matchResult, + prettyName, }); return; } @@ -113,7 +116,9 @@ export async function runAutomod(pluginData: GuildPluginData, triggerConfig, })) ?? ""; - matchResult.fullSummary = `Triggered automod rule **${ruleName}**\n${matchResult.summary}`.trim(); + matchResult.fullSummary = `Triggered automod rule **${prettyName ?? ruleName}**\n${ + matchResult.summary + }`.trim(); } if (profilingEnabled()) { @@ -147,6 +152,7 @@ export async function runAutomod(pluginData: GuildPluginData, contexts, actionConfig, matchResult, + prettyName, }); if (profilingEnabled()) { diff --git a/backend/src/plugins/Automod/helpers.ts b/backend/src/plugins/Automod/helpers.ts index b4b9f764..f377a0b3 100644 --- a/backend/src/plugins/Automod/helpers.ts +++ b/backend/src/plugins/Automod/helpers.ts @@ -59,6 +59,7 @@ type AutomodActionApplyFn = (meta: { contexts: AutomodContext[]; actionConfig: TConfigType; matchResult: AutomodTriggerMatchResult; + prettyName: string | undefined; }) => Awaitable; export interface AutomodActionBlueprint { diff --git a/backend/src/plugins/Automod/types.ts b/backend/src/plugins/Automod/types.ts index 6cf88ad6..1d58e140 100644 --- a/backend/src/plugins/Automod/types.ts +++ b/backend/src/plugins/Automod/types.ts @@ -61,6 +61,7 @@ const zRule = z.strictObject({ } return ruleName; }), + pretty_name: z.string().optional(), presets: z.array(z.string().max(100)).max(25).default([]), affects_bots: z.boolean().default(false), affects_self: z.boolean().default(false), diff --git a/backend/src/plugins/Logs/logFunctions/logAutomodAction.ts b/backend/src/plugins/Logs/logFunctions/logAutomodAction.ts index 2a2fd69c..f0a20f21 100644 --- a/backend/src/plugins/Logs/logFunctions/logAutomodAction.ts +++ b/backend/src/plugins/Logs/logFunctions/logAutomodAction.ts @@ -8,6 +8,7 @@ import { log } from "../util/log"; interface LogAutomodActionData { rule: string; + prettyName: string | undefined; user?: User | null; users: User[]; actionsTaken: string; @@ -20,6 +21,7 @@ export function logAutomodAction(pluginData: GuildPluginData, da LogType.AUTOMOD_ACTION, createTypedTemplateSafeValueContainer({ rule: data.rule, + prettyName: data.prettyName, user: data.user ? userToTemplateSafeUser(data.user) : null, users: data.users.map((user) => userToTemplateSafeUser(user)), actionsTaken: data.actionsTaken,