From f313af75e90275f2cd6f48e69b9358c41049e010 Mon Sep 17 00:00:00 2001 From: Peter Steinberger Date: Sat, 3 Jan 2026 16:50:14 +0000 Subject: [PATCH] fix: avoid duplicate block-stream payloads --- CHANGELOG.md | 1 + src/auto-reply/reply.ts | 4 ++-- 2 files changed, 3 insertions(+), 2 deletions(-) diff --git a/CHANGELOG.md b/CHANGELOG.md index efe9c022a..3391626d8 100644 --- a/CHANGELOG.md +++ b/CHANGELOG.md @@ -14,6 +14,7 @@ - Config: expose schema + UI hints for generic config forms (Web UI + future clients). ### Fixes +- Auto-reply: drop final payloads when block streaming to avoid duplicate Discord sends. - Telegram: chunk block-stream replies to avoid “message is too long” errors (#124) — thanks @mukhtharcm. - Block streaming: default to text_end and suppress duplicate block sends while in-flight. - Block streaming: drop final payloads after soft chunking to keep Discord order intact. diff --git a/src/auto-reply/reply.ts b/src/auto-reply/reply.ts index eb34dacab..6551322d1 100644 --- a/src/auto-reply/reply.ts +++ b/src/auto-reply/reply.ts @@ -2240,13 +2240,13 @@ export async function getReplyFromConfig( return; } pendingStreamedPayloadKeys.add(payloadKey); - didStreamBlockReply = true; const task = (async () => { await startTypingOnText(cleaned); await opts.onBlockReply?.(blockPayload); })() .then(() => { streamedPayloadKeys.add(payloadKey); + didStreamBlockReply = true; }) .catch((err) => { logVerbose(`block reply delivery failed: ${String(err)}`); @@ -2348,7 +2348,7 @@ export async function getReplyFromConfig( ); const shouldDropFinalPayloads = - blockStreamingEnabled && blockReplyChunking && didStreamBlockReply; + blockStreamingEnabled && didStreamBlockReply; const filteredPayloads = shouldDropFinalPayloads ? [] : blockStreamingEnabled