diff --git a/backend/src/plugins/Automod/functions/getTextMatchPartialSummary.ts b/backend/src/plugins/Automod/functions/getTextMatchPartialSummary.ts new file mode 100644 index 00000000..425baa15 --- /dev/null +++ b/backend/src/plugins/Automod/functions/getTextMatchPartialSummary.ts @@ -0,0 +1,32 @@ +import { MatchableTextType } from "./matchMultipleTextTypesOnMessage"; +import { AutomodContext, AutomodPluginType } from "../types"; +import { messageSummary, verboseChannelMention } from "../../../utils"; +import { PluginData } from "knub"; +import { User } from "eris"; + +export function getTextMatchPartialSummary( + pluginData: PluginData, + type: MatchableTextType, + context: AutomodContext, +) { + if (type === "message") { + const channel = pluginData.guild.channels.get(context.message.channel_id); + const channelMention = channel ? verboseChannelMention(channel) : `\`#${context.message.channel_id}\``; + + return `message in ${channelMention}:\n${messageSummary(context.message)}`; + } else if (type === "embed") { + const channel = pluginData.guild.channels.get(context.message.channel_id); + const channelMention = channel ? verboseChannelMention(channel) : `\`#${context.message.channel_id}\``; + + return `message embed in ${channelMention}:\n${messageSummary(context.message)}`; + } else if (type === "username") { + return `username: ${context.user.username}`; + } else if (type === "nickname") { + return `nickname: ${context.member.nick}`; + } else if (type === "visiblename") { + const visibleName = context.member?.nick || context.user.username; + return `visible name: ${visibleName}`; + } else if (type === "customstatus") { + return `custom status: ${context.member.game.state}`; + } +} diff --git a/backend/src/plugins/Automod/triggers/matchAttachmentType.ts b/backend/src/plugins/Automod/triggers/matchAttachmentType.ts index 4fdf8887..37bb2053 100644 --- a/backend/src/plugins/Automod/triggers/matchAttachmentType.ts +++ b/backend/src/plugins/Automod/triggers/matchAttachmentType.ts @@ -1,6 +1,12 @@ import * as t from "io-ts"; import { automodTrigger } from "../helpers"; -import { asSingleLine, disableCodeBlocks, disableInlineCode, verboseChannelMention } from "../../../utils"; +import { + asSingleLine, + disableCodeBlocks, + disableInlineCode, + messageSummary, + verboseChannelMention, +} from "../../../utils"; interface MatchResultType { matchedType: string; @@ -64,10 +70,7 @@ export const MatchAttachmentTypeTrigger = automodTrigger()({ Matched attachment type \`${disableInlineCode(matchResult.extra.matchedType)}\` (${matchResult.extra.mode === "blacklist" ? "(blacklisted)" : "(not in whitelist)"}) in message (\`${contexts[0].message.id}\`) in ${prettyChannel}: - `) + - "\n```" + - disableCodeBlocks(contexts[0].message.data.content) + - "```" + `) + messageSummary(contexts[0].message) ); }, }); diff --git a/backend/src/plugins/Automod/triggers/matchInvites.ts b/backend/src/plugins/Automod/triggers/matchInvites.ts index 0f1d3d94..aa720a7a 100644 --- a/backend/src/plugins/Automod/triggers/matchInvites.ts +++ b/backend/src/plugins/Automod/triggers/matchInvites.ts @@ -3,6 +3,7 @@ import { GuildInvite } from "eris"; import { automodTrigger } from "../helpers"; import { disableCodeBlocks, + disableInlineCode, getInviteCodesInString, isGuildInvite, resolveInvite, @@ -10,6 +11,7 @@ import { verboseChannelMention, } from "../../../utils"; import { MatchableTextType, matchMultipleTextTypesOnMessage } from "../functions/matchMultipleTextTypesOnMessage"; +import { getTextMatchPartialSummary } from "../functions/getTextMatchPartialSummary"; interface MatchResultType { type: MatchableTextType; @@ -79,9 +81,6 @@ export const MatchInvitesTrigger = automodTrigger()({ }, renderMatchInformation({ pluginData, contexts, matchResult }) { - const channel = pluginData.guild.channels.get(contexts[0].message.channel_id); - const prettyChannel = verboseChannelMention(channel); - let matchedText; if (matchResult.extra.invite) { @@ -91,11 +90,7 @@ export const MatchInvitesTrigger = automodTrigger()({ matchedText = `invite code \`${matchResult.extra.code}\``; } - return ( - `${matchedText} in message (\`${contexts[0].message.id}\`) in ${prettyChannel}:\n` + - "```" + - disableCodeBlocks(contexts[0].message.data.content) + - "```" - ); + const partialSummary = getTextMatchPartialSummary(pluginData, matchResult.extra.type, contexts[0]); + return `Matched ${matchedText} in ${partialSummary}`; }, }); diff --git a/backend/src/plugins/Automod/triggers/matchLinks.ts b/backend/src/plugins/Automod/triggers/matchLinks.ts index c5235e3e..a7e62359 100644 --- a/backend/src/plugins/Automod/triggers/matchLinks.ts +++ b/backend/src/plugins/Automod/triggers/matchLinks.ts @@ -11,6 +11,7 @@ import { } from "../../../utils"; import { MatchableTextType, matchMultipleTextTypesOnMessage } from "../functions/matchMultipleTextTypesOnMessage"; import { TSafeRegex } from "../../../validatorUtils"; +import { getTextMatchPartialSummary } from "../functions/getTextMatchPartialSummary"; interface MatchResultType { type: MatchableTextType; @@ -131,17 +132,7 @@ export const MatchLinksTrigger = automodTrigger()({ }, renderMatchInformation({ pluginData, contexts, matchResult }) { - const channel = pluginData.guild.channels.get(contexts[0].message.channel_id); - const prettyChannel = verboseChannelMention(channel); - - return ( - asSingleLine(` - Matched link \`${disableInlineCode(matchResult.extra.link)}\` - in message (\`${contexts[0].message.id}\`) in ${prettyChannel}: - `) + - "\n```" + - disableCodeBlocks(contexts[0].message.data.content) + - "```" - ); + const partialSummary = getTextMatchPartialSummary(pluginData, matchResult.extra.type, contexts[0]); + return `Matched link \`${disableInlineCode(matchResult.extra.link)}\` in ${partialSummary}`; }, }); diff --git a/backend/src/plugins/Automod/triggers/matchRegex.ts b/backend/src/plugins/Automod/triggers/matchRegex.ts index fdfd3f06..810dd737 100644 --- a/backend/src/plugins/Automod/triggers/matchRegex.ts +++ b/backend/src/plugins/Automod/triggers/matchRegex.ts @@ -4,6 +4,7 @@ import { automodTrigger } from "../helpers"; import { disableInlineCode, verboseChannelMention } from "../../../utils"; import { MatchableTextType, matchMultipleTextTypesOnMessage } from "../functions/matchMultipleTextTypesOnMessage"; import { TSafeRegex } from "../../../validatorUtils"; +import { getTextMatchPartialSummary } from "../functions/getTextMatchPartialSummary"; interface MatchResultType { pattern: string; @@ -62,11 +63,7 @@ export const MatchRegexTrigger = automodTrigger()({ }, renderMatchInformation({ pluginData, contexts, matchResult }) { - const channel = pluginData.guild.channels.get(contexts[0].message.channel_id); - const prettyChannel = verboseChannelMention(channel); - - return `Matched regex \`${disableInlineCode(matchResult.extra.pattern)}\` in message (\`${ - contexts[0].message.id - }\`) in ${prettyChannel}:`; + const partialSummary = getTextMatchPartialSummary(pluginData, matchResult.extra.type, contexts[0]); + return `Matched regex \`${disableInlineCode(matchResult.extra.pattern)}\` in ${partialSummary}`; }, }); diff --git a/backend/src/plugins/Automod/triggers/matchWords.ts b/backend/src/plugins/Automod/triggers/matchWords.ts index 581d3362..acff9dc9 100644 --- a/backend/src/plugins/Automod/triggers/matchWords.ts +++ b/backend/src/plugins/Automod/triggers/matchWords.ts @@ -4,6 +4,7 @@ import escapeStringRegexp from "escape-string-regexp"; import { automodTrigger } from "../helpers"; import { disableInlineCode, verboseChannelMention } from "../../../utils"; import { MatchableTextType, matchMultipleTextTypesOnMessage } from "../functions/matchMultipleTextTypesOnMessage"; +import { getTextMatchPartialSummary } from "../functions/getTextMatchPartialSummary"; interface MatchResultType { word: string; @@ -80,11 +81,7 @@ export const MatchWordsTrigger = automodTrigger()({ }, renderMatchInformation({ pluginData, contexts, matchResult }) { - const channel = pluginData.guild.channels.get(contexts[0].message.channel_id); - const prettyChannel = verboseChannelMention(channel); - - return `Matched word \`${disableInlineCode(matchResult.extra.word)}\` in message (\`${ - contexts[0].message.id - }\`) in ${prettyChannel}:`; + const partialSummary = getTextMatchPartialSummary(pluginData, matchResult.extra.type, contexts[0]); + return `Matched word \`${disableInlineCode(matchResult.extra.word)}\` in ${partialSummary}`; }, });