From e59856fbece89e9638f8a66a0ff4231ac4677c0d Mon Sep 17 00:00:00 2001 From: Daniel M <163998153+Koshkoshinsk@users.noreply.github.com> Date: Mon, 23 Feb 2026 00:06:08 +0200 Subject: [PATCH] Fix: filter empty messages from polling queries (#383) * fix: filter empty messages from polling queries WhatsApp history sync writes empty protocol artifacts (delivery receipts, status updates) to the database. On fresh installs, the main channel (no trigger required) picks these up and spawns a container agent unnecessarily, causing a message loop on first startup. Co-Authored-By: Claude Opus 4.6 * fix: update test to match empty-content filtering in queries The getMessagesSince query now filters out empty messages, so the test should expect 0 results instead of 1. Co-Authored-By: Claude Opus 4.6 --------- Co-authored-by: Claude Opus 4.6 --- src/db.test.ts | 5 ++--- src/db.ts | 2 ++ 2 files changed, 4 insertions(+), 3 deletions(-) diff --git a/src/db.test.ts b/src/db.test.ts index 32cde1e..1389c27 100644 --- a/src/db.test.ts +++ b/src/db.test.ts @@ -61,7 +61,7 @@ describe('storeMessage', () => { expect(messages[0].content).toBe('hello world'); }); - it('stores empty content', () => { + it('filters out empty content', () => { storeChatMetadata('group@g.us', '2024-01-01T00:00:00.000Z'); store({ @@ -74,8 +74,7 @@ describe('storeMessage', () => { }); const messages = getMessagesSince('group@g.us', '2024-01-01T00:00:00.000Z', 'Andy'); - expect(messages).toHaveLength(1); - expect(messages[0].content).toBe(''); + expect(messages).toHaveLength(0); }); it('stores is_from_me flag', () => { diff --git a/src/db.ts b/src/db.ts index f140fec..92e2d14 100644 --- a/src/db.ts +++ b/src/db.ts @@ -295,6 +295,7 @@ export function getNewMessages( FROM messages WHERE timestamp > ? AND chat_jid IN (${placeholders}) AND is_bot_message = 0 AND content NOT LIKE ? + AND content != '' AND content IS NOT NULL ORDER BY timestamp `; @@ -322,6 +323,7 @@ export function getMessagesSince( FROM messages WHERE chat_jid = ? AND timestamp > ? AND is_bot_message = 0 AND content NOT LIKE ? + AND content != '' AND content IS NOT NULL ORDER BY timestamp `; return db