From af88af01fea2976edc5920351229711b7ef029bc Mon Sep 17 00:00:00 2001 From: Muhammed Mukhthar CM Date: Fri, 23 Jan 2026 10:46:45 +0000 Subject: [PATCH] Telegram-user: ignore sends after shutdown --- .../telegram-user/src/monitor/handler.ts | 39 +++++++++++++------ 1 file changed, 27 insertions(+), 12 deletions(-) diff --git a/extensions/telegram-user/src/monitor/handler.ts b/extensions/telegram-user/src/monitor/handler.ts index c79babc55..d127a03d3 100644 --- a/extensions/telegram-user/src/monitor/handler.ts +++ b/extensions/telegram-user/src/monitor/handler.ts @@ -73,6 +73,11 @@ function resolveTelegramUserPeer(target: string): number | string { return target; } +function isDestroyedClientError(err: unknown): boolean { + const message = err instanceof Error ? err.message : String(err); + return /client is destroyed/i.test(message); +} + function firstDefined(...values: Array): T | undefined { for (const value of values) { if (typeof value !== "undefined") return value; @@ -626,13 +631,18 @@ export function createTelegramUserMessageHandler(params: TelegramUserHandlerPara runtime.error?.(`telegram-user voice typing failed: ${String(err)}`); }); } - await sendMediaTelegramUser(replyTarget, replyText, { - client, - accountId, - replyToId, - mediaUrl, - maxBytes: mediaMaxMb * 1024 * 1024, - }); + try { + await sendMediaTelegramUser(replyTarget, replyText, { + client, + accountId, + replyToId, + mediaUrl, + maxBytes: mediaMaxMb * 1024 * 1024, + }); + } catch (err) { + if (isDestroyedClientError(err)) return; + throw err; + } hasReplied = true; core.channel.activity.record({ channel: "telegram-user", @@ -645,11 +655,16 @@ export function createTelegramUserMessageHandler(params: TelegramUserHandlerPara for (const chunk of core.channel.text.chunkMarkdownText(replyText, textLimit)) { const trimmed = chunk.trim(); if (!trimmed) continue; - await sendMessageTelegramUser(replyTarget, trimmed, { - client, - accountId, - replyToId, - }); + try { + await sendMessageTelegramUser(replyTarget, trimmed, { + client, + accountId, + replyToId, + }); + } catch (err) { + if (isDestroyedClientError(err)) return; + throw err; + } hasReplied = true; core.channel.activity.record({ channel: "telegram-user",