From 39d9eb4589dc76291383cfcce84701bcfc57b86c Mon Sep 17 00:00:00 2001 From: Muhammed Mukhthar CM Date: Fri, 23 Jan 2026 11:25:27 +0000 Subject: [PATCH] Telegram-user: ignore sends after client destroy --- extensions/telegram-user/src/send.ts | 47 ++++++++++++++++++++++------ 1 file changed, 38 insertions(+), 9 deletions(-) diff --git a/extensions/telegram-user/src/send.ts b/extensions/telegram-user/src/send.ts index a80491e71..5572f69c8 100644 --- a/extensions/telegram-user/src/send.ts +++ b/extensions/telegram-user/src/send.ts @@ -20,6 +20,11 @@ type NormalizedPollInput = { maxSelections: number; }; +function isDestroyedClientError(err: unknown): boolean { + const message = err instanceof Error ? err.message : String(err); + return /client is destroyed/i.test(message); +} + export type TelegramUserSendOpts = { client?: TelegramClient; accountId?: string; @@ -121,9 +126,17 @@ export async function sendMessageTelegramUser( }); try { const target = resolveTelegramUserPeer(normalizeTarget(to)); - const message = await client.sendText(target, text, { - ...(opts.replyToId ? { replyTo: opts.replyToId } : {}), - }); + let message: Awaited> | null = null; + try { + message = await client.sendText(target, text, { + ...(opts.replyToId ? { replyTo: opts.replyToId } : {}), + }); + } catch (err) { + if (!isDestroyedClientError(err)) throw err; + } + if (!message) { + return { messageId: "", chatId: String(target) }; + } return { messageId: String(message.id), chatId: String(target) }; } finally { if (stopOnDone) { @@ -151,9 +164,17 @@ export async function sendMediaTelegramUser( fileMime: media.contentType, caption: text, }); - const message = await client.sendMedia(target, input, { - ...(opts.replyToId ? { replyTo: opts.replyToId } : {}), - }); + let message: Awaited> | null = null; + try { + message = await client.sendMedia(target, input, { + ...(opts.replyToId ? { replyTo: opts.replyToId } : {}), + }); + } catch (err) { + if (!isDestroyedClientError(err)) throw err; + } + if (!message) { + return { messageId: "", chatId: String(target) }; + } return { messageId: String(message.id), chatId: String(target) }; } finally { if (stopOnDone) { @@ -181,9 +202,17 @@ export async function sendPollTelegramUser( answers: normalized.options, multiple: normalized.maxSelections > 1, }); - const message = await client.sendMedia(target, input, { - ...(opts.replyToId ? { replyTo: opts.replyToId } : {}), - }); + let message: Awaited> | null = null; + try { + message = await client.sendMedia(target, input, { + ...(opts.replyToId ? { replyTo: opts.replyToId } : {}), + }); + } catch (err) { + if (!isDestroyedClientError(err)) throw err; + } + if (!message) { + return { messageId: "", chatId: String(target) }; + } return { messageId: String(message.id), chatId: String(target) }; } finally { if (stopOnDone) {