summary refs log tree commit diff
path: root/src/api
diff options
context:
space:
mode:
authorRory& <root@rory.gay>2025-10-19 11:00:05 +0200
committerRory& <root@rory.gay>2025-10-19 11:00:05 +0200
commit57dc2074858ec00af632c65267e5a077c4824876 (patch)
treed580e8f6ff1c2a2dbeebd75af289a10a13297f6d /src/api
parentUse message.create (diff)
downloadserver-ts-57dc2074858ec00af632c65267e5a077c4824876.tar.xz
Synchronously save automod message
Diffstat (limited to 'src/api')
-rw-r--r--src/api/routes/channels/#channel_id/messages/index.ts64
1 files changed, 25 insertions, 39 deletions
diff --git a/src/api/routes/channels/#channel_id/messages/index.ts b/src/api/routes/channels/#channel_id/messages/index.ts

index 11982379..120de69e 100644 --- a/src/api/routes/channels/#channel_id/messages/index.ts +++ b/src/api/routes/channels/#channel_id/messages/index.ts
@@ -413,43 +413,29 @@ router.post( } // eslint-disable-next-line @typescript-eslint/ban-ts-comment - //@ts-ignore + // @ts-ignore message.member.roles = message.member.roles.filter((x) => x.id != x.guild_id).map((x) => x.id); - try { - if (message.content) - for (const rule of await AutomodRule.find({ where: { guild_id: message.guild_id, enabled: true, event_type: AutomodRuleEventType.MESSAGE_SEND } })) { + if (message.content) + try { + const matchingRules = await AutomodRule.find({ + where: { guild_id: message.guild_id, enabled: true, event_type: AutomodRuleEventType.MESSAGE_SEND }, + order: { position: "ASC" }, + }); + for (const rule of matchingRules) { if (rule.exempt_channels.includes(channel_id)) continue; if (message.member.roles.some((x) => rule.exempt_roles.includes(x.id))) continue; + if (rule.trigger_type == AutomodTriggerTypes.CUSTOM_WORDS) { const triggerMeta = rule.trigger_metadata as AutomodCustomWordsRule; - const regexes = triggerMeta.regex_patterns - .map((x) => new RegExp(x, "i")) - .concat( - triggerMeta.keyword_filter - .map((k) => - k - // Convert simple wildcard patterns to regex - .replace(".", "\\.") - .replace("?", ".") - .replace("*", ".*"), - ) - .map((k) => new RegExp(k, "i")), - ); - const allowedRegexes = triggerMeta.allow_list - .map((k) => - k - // Convert simple wildcard patterns to regex - .replace(".", "\\.") - .replace("?", ".") - .replace("*", ".*"), - ) - .map((k) => new RegExp(k, "i")); + const regexes = triggerMeta.regex_patterns.map((x) => new RegExp(x, "i")).concat(triggerMeta.keyword_filter.map((k) => k.globToRegexp("i"))); + const allowedRegexes = triggerMeta.allow_list.map((k) => k.globToRegexp("i")); const matches = regexes .map((r) => message.content!.match(r)) .filter((x) => x !== null && x.length > 0) .filter((x) => !allowedRegexes.some((ar) => ar.test(x![0]))); + if (matches.length > 0) { console.log("Automod triggered by message:", message.id, "matches:", matches); if (rule.actions.some((x) => x.type == AutomodRuleActionType.SEND_ALERT_MESSAGE && x.metadata.channel_id)) { @@ -458,32 +444,32 @@ router.post( const alertChannel = await Channel.findOne({ where: { id: action.metadata.channel_id } }); if (!alertChannel) continue; const msg = await Message.createWithDefaults({ - channel_id: alertChannel.id, content: `Automod Alert: Message ${message.id} by <@${message.author_id}> in <#${channel.id}> triggered automod rule "${rule.name}".\nMatched terms: ${matches .map((x) => `\`${x![0]}\``) .join(", ")}`, author: message.author, + channel_id: alertChannel.id, guild_id: message.guild_id, member_id: message.member_id, - author_id: message.author_id + author_id: message.author_id, }); - await Promise.all([ - message.save(), - emitEvent({ - event: "MESSAGE_CREATE", - channel_id: msg.channel_id, - data: msg.toJSON(), - } as MessageCreateEvent), - ]); + await message.save(); + // await Promise.all([ + await emitEvent({ + event: "MESSAGE_CREATE", + channel_id: msg.channel_id, + data: msg.toJSON(), + } as MessageCreateEvent); + // ]); } } } } } - } catch (e) { - console.log("[Automod] failed to process message:", e); - } + } catch (e) { + console.log("[Automod] failed to process message:", e); + } } let read_state = await ReadState.findOne({