Telegram-user: skip typing when client destroyed
This commit is contained in:
parent
d65ac6af1d
commit
62873a11b7
@ -78,6 +78,28 @@ function isDestroyedClientError(err: unknown): boolean {
|
|||||||
return /client is destroyed/i.test(message);
|
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<TelegramClient["sendTyping"]>[1];
|
||||||
|
typingParams?: Parameters<TelegramClient["sendTyping"]>[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<T>(...values: Array<T | undefined>): T | undefined {
|
function firstDefined<T>(...values: Array<T | undefined>): T | undefined {
|
||||||
for (const value of values) {
|
for (const value of values) {
|
||||||
if (typeof value !== "undefined") return value;
|
if (typeof value !== "undefined") return value;
|
||||||
@ -625,12 +647,14 @@ export function createTelegramUserMessageHandler(params: TelegramUserHandlerPara
|
|||||||
const mediaUrl = payload.mediaUrl;
|
const mediaUrl = payload.mediaUrl;
|
||||||
if (mediaUrl) {
|
if (mediaUrl) {
|
||||||
if (payload.audioAsVoice) {
|
if (payload.audioAsVoice) {
|
||||||
try {
|
await safeSendTyping({
|
||||||
await client.sendTyping(typingTarget, "record_voice", typingParams);
|
client,
|
||||||
} catch (err) {
|
target: typingTarget,
|
||||||
if (isDestroyedClientError(err)) return;
|
status: "record_voice",
|
||||||
runtime.error?.(`telegram-user voice typing failed: ${String(err)}`);
|
typingParams,
|
||||||
}
|
runtime,
|
||||||
|
logLabel: "voice typing",
|
||||||
|
});
|
||||||
}
|
}
|
||||||
try {
|
try {
|
||||||
await sendMediaTelegramUser(replyTarget, replyText, {
|
await sendMediaTelegramUser(replyTarget, replyText, {
|
||||||
@ -676,12 +700,14 @@ export function createTelegramUserMessageHandler(params: TelegramUserHandlerPara
|
|||||||
}
|
}
|
||||||
},
|
},
|
||||||
onReplyStart: async () => {
|
onReplyStart: async () => {
|
||||||
try {
|
await safeSendTyping({
|
||||||
await client.sendTyping(typingTarget, "typing", typingParams);
|
client,
|
||||||
} catch (err) {
|
target: typingTarget,
|
||||||
if (isDestroyedClientError(err)) return;
|
status: "typing",
|
||||||
runtime.error?.(`telegram-user typing failed: ${String(err)}`);
|
typingParams,
|
||||||
}
|
runtime,
|
||||||
|
logLabel: "typing",
|
||||||
|
});
|
||||||
},
|
},
|
||||||
onError: (err) => {
|
onError: (err) => {
|
||||||
runtime.error?.(`telegram-user reply failed: ${String(err)}`);
|
runtime.error?.(`telegram-user reply failed: ${String(err)}`);
|
||||||
|
|||||||
Loading…
Reference in New Issue
Block a user