From 80bb6b712c2cc5972198417155b1cb3dae2c997a Mon Sep 17 00:00:00 2001 From: danielz1z Date: Sat, 17 Jan 2026 05:33:59 +0000 Subject: [PATCH] fix: handle telegram: prefix in resolveTelegramTargetChatType When using inlineButtons="dm" or "group" scope, the validation check resolveTelegramTargetChatType() failed for numeric chat IDs because normalizeTelegramMessagingTarget() adds a "telegram:" prefix during target resolution. For example, target "5232990709" becomes "telegram:5232990709" after normalization, but the regex /^-?\d+$/ expects a pure numeric string. The fix strips the telegram: prefix before checking the numeric pattern. Adds tests for resolveTelegramTargetChatType with various input formats. --- src/telegram/inline-buttons.test.ts | 31 +++++++++++++++++++++++++++++ src/telegram/inline-buttons.ts | 6 +++++- 2 files changed, 36 insertions(+), 1 deletion(-) create mode 100644 src/telegram/inline-buttons.test.ts diff --git a/src/telegram/inline-buttons.test.ts b/src/telegram/inline-buttons.test.ts new file mode 100644 index 000000000..c7b4ec9b5 --- /dev/null +++ b/src/telegram/inline-buttons.test.ts @@ -0,0 +1,31 @@ +import { describe, expect, it } from "vitest"; + +import { resolveTelegramTargetChatType } from "./inline-buttons.js"; + +describe("resolveTelegramTargetChatType", () => { + it("returns 'direct' for positive numeric IDs", () => { + expect(resolveTelegramTargetChatType("5232990709")).toBe("direct"); + expect(resolveTelegramTargetChatType("123456789")).toBe("direct"); + }); + + it("returns 'group' for negative numeric IDs", () => { + expect(resolveTelegramTargetChatType("-123456789")).toBe("group"); + expect(resolveTelegramTargetChatType("-1001234567890")).toBe("group"); + }); + + it("handles telegram: prefix from normalizeTelegramMessagingTarget", () => { + expect(resolveTelegramTargetChatType("telegram:5232990709")).toBe("direct"); + expect(resolveTelegramTargetChatType("telegram:-123456789")).toBe("group"); + expect(resolveTelegramTargetChatType("TELEGRAM:5232990709")).toBe("direct"); + }); + + it("returns 'unknown' for usernames", () => { + expect(resolveTelegramTargetChatType("@username")).toBe("unknown"); + expect(resolveTelegramTargetChatType("telegram:@username")).toBe("unknown"); + }); + + it("returns 'unknown' for empty strings", () => { + expect(resolveTelegramTargetChatType("")).toBe("unknown"); + expect(resolveTelegramTargetChatType(" ")).toBe("unknown"); + }); +}); diff --git a/src/telegram/inline-buttons.ts b/src/telegram/inline-buttons.ts index d9d334729..1a6c75301 100644 --- a/src/telegram/inline-buttons.ts +++ b/src/telegram/inline-buttons.ts @@ -61,8 +61,12 @@ export function isTelegramInlineButtonsEnabled(params: { } export function resolveTelegramTargetChatType(target: string): "direct" | "group" | "unknown" { - const trimmed = target.trim(); + let trimmed = target.trim(); if (!trimmed) return "unknown"; + // Strip telegram: prefix added by normalizeTelegramMessagingTarget + if (trimmed.toLowerCase().startsWith("telegram:")) { + trimmed = trimmed.slice("telegram:".length).trim(); + } if (/^-?\d+$/.test(trimmed)) { return trimmed.startsWith("-") ? "group" : "direct"; }