From 6ba490ec7b98b92d25519bd7c8793f528d1f040d Mon Sep 17 00:00:00 2001 From: geekhuashan Date: Fri, 3 Apr 2026 23:16:23 +0800 Subject: [PATCH] fix(discord): guard @everyone shortcut against bot-authored messages Preserve the !author.bot || sender.isPluralKit guard when short-circuiting wasMentioned on mentionedEveryone, so bot relay messages don't spuriously trigger mention-gate logic. Add test coverage for the wasMentioned path. --- .../monitor/message-handler.preflight.test.ts | 41 +++++++++++++++++++ .../src/monitor/message-handler.preflight.ts | 2 +- 2 files changed, 42 insertions(+), 1 deletion(-) diff --git a/extensions/discord/src/monitor/message-handler.preflight.test.ts b/extensions/discord/src/monitor/message-handler.preflight.test.ts index 2a31f19154a..171584ab046 100644 --- a/extensions/discord/src/monitor/message-handler.preflight.test.ts +++ b/extensions/discord/src/monitor/message-handler.preflight.test.ts @@ -721,6 +721,47 @@ describe("preflightDiscordMessage", () => { expect(result?.hasAnyMention).toBe(false); }); + it("does not treat bot-sent @everyone as wasMentioned", async () => { + const channelId = "channel-everyone-2"; + const guildId = "guild-everyone-2"; + const client = createGuildTextClient(channelId); + const message = createDiscordMessage({ + id: "m-everyone-2", + channelId, + content: "@everyone relay message", + mentionedEveryone: true, + author: { + id: "relay-bot-2", + bot: true, + username: "RelayBot", + }, + }); + + const result = await preflightDiscordMessage({ + ...createPreflightArgs({ + cfg: DEFAULT_PREFLIGHT_CFG, + discordConfig: { + allowBots: true, + } as DiscordConfig, + data: createGuildEvent({ + channelId, + guildId, + author: message.author, + message, + }), + client, + }), + guildEntries: { + [guildId]: { + requireMention: false, + }, + }, + }); + + expect(result).not.toBeNull(); + expect(result?.wasMentioned).toBe(false); + }); + it("uses attachment content_type for guild audio preflight mention detection", async () => { transcribeFirstAudioMock.mockResolvedValue("hey openclaw"); diff --git a/extensions/discord/src/monitor/message-handler.preflight.ts b/extensions/discord/src/monitor/message-handler.preflight.ts index bd71710c159..db572b5615f 100644 --- a/extensions/discord/src/monitor/message-handler.preflight.ts +++ b/extensions/discord/src/monitor/message-handler.preflight.ts @@ -753,7 +753,7 @@ export async function preflightDiscordMessage( const mentionText = hasTypedText ? baseText : ""; const wasMentioned = !isDirectMessage && - (Boolean(message.mentionedEveryone) || + (((!author.bot || sender.isPluralKit) && Boolean(message.mentionedEveryone)) || matchesMentionWithExplicit({ text: mentionText, mentionRegexes,