fix(telegram): prevent duplicate messages with slow LLM providers (#41932)

Merged via squash.

Prepared head SHA: 2f50c51d5a
Co-authored-by: hougangdev <105773686+hougangdev@users.noreply.github.com>
Co-authored-by: obviyus <22031114+obviyus@users.noreply.github.com>
Reviewed-by: @obviyus
This commit is contained in:
Wayne
2026-03-11 13:49:55 +08:00
committed by GitHub
parent 7761e7626f
commit e37e1ed24e
10 changed files with 299 additions and 20 deletions

View File

@@ -123,6 +123,29 @@ export function isSafeToRetrySendError(err: unknown): boolean {
return false;
}
function hasTelegramErrorCode(err: unknown, matches: (code: number) => boolean): boolean {
for (const candidate of collectTelegramErrorCandidates(err)) {
if (!candidate || typeof candidate !== "object" || !("error_code" in candidate)) {
continue;
}
const code = (candidate as { error_code: unknown }).error_code;
if (typeof code === "number" && matches(code)) {
return true;
}
}
return false;
}
/** Returns true for HTTP 5xx server errors (error may have been processed). */
export function isTelegramServerError(err: unknown): boolean {
return hasTelegramErrorCode(err, (code) => code >= 500);
}
/** Returns true for HTTP 4xx client errors (Telegram explicitly rejected, not applied). */
export function isTelegramClientRejection(err: unknown): boolean {
return hasTelegramErrorCode(err, (code) => code >= 400 && code < 500);
}
export function isRecoverableTelegramNetworkError(
err: unknown,
options: { context?: TelegramNetworkErrorContext; allowMessageMatch?: boolean } = {},