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.
This commit is contained in:
committed by
Peter Steinberger
parent
410b8f223e
commit
80bb6b712c
31
src/telegram/inline-buttons.test.ts
Normal file
31
src/telegram/inline-buttons.test.ts
Normal file
@@ -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");
|
||||||
|
});
|
||||||
|
});
|
||||||
@@ -61,8 +61,12 @@ export function isTelegramInlineButtonsEnabled(params: {
|
|||||||
}
|
}
|
||||||
|
|
||||||
export function resolveTelegramTargetChatType(target: string): "direct" | "group" | "unknown" {
|
export function resolveTelegramTargetChatType(target: string): "direct" | "group" | "unknown" {
|
||||||
const trimmed = target.trim();
|
let trimmed = target.trim();
|
||||||
if (!trimmed) return "unknown";
|
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)) {
|
if (/^-?\d+$/.test(trimmed)) {
|
||||||
return trimmed.startsWith("-") ? "group" : "direct";
|
return trimmed.startsWith("-") ? "group" : "direct";
|
||||||
}
|
}
|
||||||
|
|||||||
Reference in New Issue
Block a user