From ffb06b512c4d9f08a24737a46605211b0496e328 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'); }