From a6d47fb79cb28652e505acfc4b0cb01ec4336ffd Mon Sep 17 00:00:00 2001 From: scriptease <1190368+scriptease@users.noreply.github.com> Date: Sat, 20 Jun 2026 15:55:22 +0200 Subject: [PATCH] fix(discord): ignore system messages so thread renames don't reach the agent A thread rename emits a messageCreate system message whose content is the new thread name. With no system-message guard it was enqueued to the agent as a bare message. Filter message.system early (also drops pins, joins, etc). Co-Authored-By: Claude Opus 4.8 --- src/__tests__/messageCreate.test.ts | 13 +++++++++++++ src/providers/discord/messageCreate.ts | 1 + 2 files changed, 14 insertions(+) diff --git a/src/__tests__/messageCreate.test.ts b/src/__tests__/messageCreate.test.ts index 0651014..c36f500 100644 --- a/src/__tests__/messageCreate.test.ts +++ b/src/__tests__/messageCreate.test.ts @@ -58,6 +58,19 @@ test('handleMessageCreate ignores bot messages', async () => { assert.equal(enqueued, 0); }); +test('handleMessageCreate ignores system messages (e.g. thread rename)', async () => { + let enqueued = 0; + const handler = createMessageCreateHandler( + createDeps(() => { + enqueued += 1; + }), + ); + + // A thread rename arrives as a system message whose content is the new name. + await handler(makeMessage({ system: true, content: 'renamed-thread' }) as any); + assert.equal(enqueued, 0); +}); + test('handleMessageCreate ignores DMs', async () => { let enqueued = 0; const handler = createMessageCreateHandler( diff --git a/src/providers/discord/messageCreate.ts b/src/providers/discord/messageCreate.ts index 015aeab..30af786 100644 --- a/src/providers/discord/messageCreate.ts +++ b/src/providers/discord/messageCreate.ts @@ -49,6 +49,7 @@ function toIncoming(message: Message, attachmentSource?: IncomingAttachment[]): export function createMessageCreateHandler(deps: MessageCreateDeps) { return async function handleMessageCreate(message: Message): Promise { if (message.author.bot) return; + if (message.system) return; if (!message.guild) return; if (!message.content.trim() && message.attachments.size === 0) return;