From 62873a11b757a0d59c487334ce151e62214b3892 Mon Sep 17 00:00:00 2001 From: Muhammed Mukhthar CM Date: Fri, 23 Jan 2026 11:17:58 +0000 Subject: [PATCH] Telegram-user: skip typing when client destroyed --- .../telegram-user/src/monitor/handler.ts | 50 ++++++++++++++----- 1 file changed, 38 insertions(+), 12 deletions(-) diff --git a/extensions/telegram-user/src/monitor/handler.ts b/extensions/telegram-user/src/monitor/handler.ts index ef2378a74..c66cd9f10 100644 --- a/extensions/telegram-user/src/monitor/handler.ts +++ b/extensions/telegram-user/src/monitor/handler.ts @@ -78,6 +78,28 @@ function isDestroyedClientError(err: unknown): boolean { return /client is destroyed/i.test(message); } +function isClientDestroyed(client: TelegramClient): boolean { + const candidate = client as TelegramClient & { destroyed?: boolean }; + return candidate.destroyed === true; +} + +async function safeSendTyping(params: { + client: TelegramClient; + target: number | string; + status: Parameters[1]; + typingParams?: Parameters[2]; + runtime: TelegramUserHandlerParams["runtime"]; + logLabel: string; +}) { + if (isClientDestroyed(params.client)) return; + try { + await params.client.sendTyping(params.target, params.status, params.typingParams); + } catch (err) { + if (isDestroyedClientError(err)) return; + params.runtime.error?.(`telegram-user ${params.logLabel} failed: ${String(err)}`); + } +} + function firstDefined(...values: Array): T | undefined { for (const value of values) { if (typeof value !== "undefined") return value; @@ -625,12 +647,14 @@ export function createTelegramUserMessageHandler(params: TelegramUserHandlerPara const mediaUrl = payload.mediaUrl; if (mediaUrl) { if (payload.audioAsVoice) { - try { - await client.sendTyping(typingTarget, "record_voice", typingParams); - } catch (err) { - if (isDestroyedClientError(err)) return; - runtime.error?.(`telegram-user voice typing failed: ${String(err)}`); - } + await safeSendTyping({ + client, + target: typingTarget, + status: "record_voice", + typingParams, + runtime, + logLabel: "voice typing", + }); } try { await sendMediaTelegramUser(replyTarget, replyText, { @@ -676,12 +700,14 @@ export function createTelegramUserMessageHandler(params: TelegramUserHandlerPara } }, onReplyStart: async () => { - try { - await client.sendTyping(typingTarget, "typing", typingParams); - } catch (err) { - if (isDestroyedClientError(err)) return; - runtime.error?.(`telegram-user typing failed: ${String(err)}`); - } + await safeSendTyping({ + client, + target: typingTarget, + status: "typing", + typingParams, + runtime, + logLabel: "typing", + }); }, onError: (err) => { runtime.error?.(`telegram-user reply failed: ${String(err)}`);