Skip to content

Commit d8fb471

Browse files
committed
fix: bandaid fix for regex override merging
1 parent dd93989 commit d8fb471

5 files changed

Lines changed: 15 additions & 15 deletions

File tree

backend/src/plugins/Automod/triggers/matchLinks.ts

Lines changed: 3 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -2,7 +2,7 @@ import { escapeInlineCode } from "discord.js";
22
import z from "zod/v4";
33
import { allowTimeout } from "../../../RegExpRunner.js";
44
import { getFishFishDomain } from "../../../data/FishFish.js";
5-
import { getUrlsInString, zRegex } from "../../../utils.js";
5+
import { getUrlsInString, inputPatternToRegExp, zRegex } from "../../../utils.js";
66
import { mergeRegexes } from "../../../utils/mergeRegexes.js";
77
import { mergeWordsIntoRegex } from "../../../utils/mergeWordsIntoRegex.js";
88
import { getTextMatchPartialSummary } from "../functions/getTextMatchPartialSummary.js";
@@ -73,7 +73,7 @@ export const MatchLinksTrigger = automodTrigger<MatchResultType>()({
7373

7474
if (trigger.exclude_regex) {
7575
if (!regexCache.has(trigger.exclude_regex)) {
76-
const toCache = mergeRegexes(trigger.exclude_regex, "i");
76+
const toCache = mergeRegexes(trigger.exclude_regex.map(pattern => inputPatternToRegExp(pattern)), "i");
7777
regexCache.set(trigger.exclude_regex, toCache);
7878
}
7979
const regexes = regexCache.get(trigger.exclude_regex)!;
@@ -88,7 +88,7 @@ export const MatchLinksTrigger = automodTrigger<MatchResultType>()({
8888

8989
if (trigger.include_regex) {
9090
if (!regexCache.has(trigger.include_regex)) {
91-
const toCache = mergeRegexes(trigger.include_regex, "i");
91+
const toCache = mergeRegexes(trigger.include_regex.map(pattern => inputPatternToRegExp(pattern)), "i");
9292
regexCache.set(trigger.include_regex, toCache);
9393
}
9494
const regexes = regexCache.get(trigger.include_regex)!;

backend/src/plugins/Automod/triggers/matchRegex.ts

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -1,6 +1,6 @@
11
import z from "zod/v4";
22
import { allowTimeout } from "../../../RegExpRunner.js";
3-
import { zRegex } from "../../../utils.js";
3+
import { inputPatternToRegExp, zRegex } from "../../../utils.js";
44
import { mergeRegexes } from "../../../utils/mergeRegexes.js";
55
import { normalizeText } from "../../../utils/normalizeText.js";
66
import { stripMarkdown } from "../../../utils/stripMarkdown.js";
@@ -38,7 +38,7 @@ export const MatchRegexTrigger = automodTrigger<MatchResultType>()({
3838

3939
if (!regexCache.has(trigger)) {
4040
const flags = trigger.case_sensitive ? "" : "i";
41-
const toCache = mergeRegexes(trigger.patterns, flags);
41+
const toCache = mergeRegexes(trigger.patterns.map(pattern => inputPatternToRegExp(pattern)), flags);
4242
regexCache.set(trigger, toCache);
4343
}
4444
const regexes = regexCache.get(trigger)!;

backend/src/plugins/Censor/util/applyFiltersToMsg.ts

Lines changed: 3 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -7,6 +7,7 @@ import { ISavedMessageEmbedData, SavedMessage } from "../../../data/entities/Sav
77
import {
88
getInviteCodesInString,
99
getUrlsInString,
10+
inputPatternToRegExp,
1011
isGuildInvite,
1112
resolveInvite,
1213
resolveMember,
@@ -146,7 +147,8 @@ export async function applyFiltersToMsg(
146147
}
147148

148149
// Filter regex
149-
for (const regex of config.blocked_regex || []) {
150+
for (const pattern of config.blocked_regex || []) {
151+
const regex = inputPatternToRegExp(pattern);
150152
// We're testing both the original content and content + attachments/embeds here so regexes that use ^ and $ still match the regular content properly
151153
const matches =
152154
(await pluginData.state.regexRunner.exec(regex, savedMessage.data.content).catch(allowTimeout)) ||

backend/src/plugins/Logs/util/log.ts

Lines changed: 3 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -3,7 +3,7 @@ import { GuildPluginData } from "knub";
33
import { allowTimeout } from "../../../RegExpRunner.js";
44
import { LogType } from "../../../data/LogType.js";
55
import { TypedTemplateSafeValueContainer } from "../../../templateFormatter.js";
6-
import { MINUTES, isDiscordAPIError } from "../../../utils.js";
6+
import { MINUTES, inputPatternToRegExp, isDiscordAPIError } from "../../../utils.js";
77
import { MessageBuffer } from "../../../utils/MessageBuffer.js";
88
import { InternalPosterPlugin } from "../../InternalPoster/InternalPosterPlugin.js";
99
import { ILogTypeData, LogsPluginType, TLogChannel, TLogChannelMap } from "../types.js";
@@ -57,7 +57,8 @@ async function shouldExclude(
5757
}
5858

5959
if (opts.excluded_message_regexes && exclusionData.messageTextContent) {
60-
for (const regex of opts.excluded_message_regexes) {
60+
for (const pattern of opts.excluded_message_regexes) {
61+
const regex = inputPatternToRegExp(pattern);
6162
const matches = await pluginData.state.regexRunner
6263
.exec(regex, exclusionData.messageTextContent)
6364
.catch(allowTimeout);

backend/src/utils.ts

Lines changed: 4 additions & 7 deletions
Original file line numberDiff line numberDiff line change
@@ -184,16 +184,13 @@ export function inputPatternToRegExp(pattern: string) {
184184
}
185185

186186
export function zRegex<T extends ZodString>(zStr: T) {
187-
return zStr.transform((str, ctx) => {
187+
return zStr.refine((str) => {
188188
try {
189-
return inputPatternToRegExp(str);
189+
inputPatternToRegExp(str);
190+
return true;
190191
} catch (err) {
191192
if (err instanceof InvalidRegexError) {
192-
ctx.addIssue({
193-
code: z.ZodIssueCode.custom,
194-
message: "Invalid regex",
195-
});
196-
return z.NEVER;
193+
return false;
197194
}
198195
throw err;
199196
}

0 commit comments

Comments
 (0)