From a904c6597580485714c9c6bda6b7ef01b3d68cd0 Mon Sep 17 00:00:00 2001 From: Claude Date: Sun, 1 Feb 2026 18:12:59 +0000 Subject: [PATCH] Fix message loss when processMessage throws Previously, lastTimestamp was advanced before processing messages. If processMessage threw an error, those messages would be skipped on the next tick since the timestamp had already moved past them. Now we advance lastTimestamp after each message is successfully processed (or after catching an error), ensuring no messages are lost on retry. https://claude.ai/code/session_01LgHSAs9XbcvZckCe8xPipj --- src/index.ts | 15 +++++++++++---- 1 file changed, 11 insertions(+), 4 deletions(-) diff --git a/src/index.ts b/src/index.ts index 8167aef..6397311 100644 --- a/src/index.ts +++ b/src/index.ts @@ -358,12 +358,19 @@ async function startMessageLoop(): Promise { while (true) { try { const jids = Object.keys(registeredGroups); - const { messages, newTimestamp } = getNewMessages(jids, lastTimestamp); - lastTimestamp = newTimestamp; + const { messages } = getNewMessages(jids, lastTimestamp); if (messages.length > 0) logger.info({ count: messages.length }, 'New messages'); - for (const msg of messages) await processMessage(msg); - saveState(); + for (const msg of messages) { + try { + await processMessage(msg); + } catch (err) { + logger.error({ err, msg: msg.id }, 'Error processing message'); + } + // Advance timestamp after each message to avoid reprocessing on retry + lastTimestamp = msg.timestamp; + saveState(); + } } catch (err) { logger.error({ err }, 'Error in message loop'); }