From d24ae43654364cd9abad2e948981c202571e2d00 Mon Sep 17 00:00:00 2001 From: Simon Kim Date: Sat, 21 Mar 2026 03:27:52 +0900 Subject: [PATCH] Normalize Telegram allowed reaction emoji forms --- .../src/status-reaction-variants.test.ts | 19 ++++++++++++++++++- .../telegram/src/status-reaction-variants.ts | 7 +++++-- 2 files changed, 23 insertions(+), 3 deletions(-) diff --git a/extensions/telegram/src/status-reaction-variants.test.ts b/extensions/telegram/src/status-reaction-variants.test.ts index 123334fcaad..be1c3ed0c3a 100644 --- a/extensions/telegram/src/status-reaction-variants.test.ts +++ b/extensions/telegram/src/status-reaction-variants.test.ts @@ -45,7 +45,7 @@ describe("buildTelegramStatusReactionVariants", () => { coding: "🛠️", }); - expect(variants.get("🛠️")).toEqual(["🛠️", "👨‍💻", "🔥", "⚡"]); + expect(variants.get("🛠")).toEqual(["🛠", "👨‍💻", "🔥", "⚡"]); }); }); @@ -81,6 +81,13 @@ describe("extractTelegramAllowedEmojiReactions", () => { }); expect(result ? Array.from(result).toSorted() : null).toEqual(["👍", "🔥"]); }); + + it("normalizes variation-selector emoji forms", () => { + const result = extractTelegramAllowedEmojiReactions({ + available_reactions: [{ type: "emoji", emoji: "❤️" }], + }); + expect(result ? Array.from(result) : null).toEqual(["❤"]); + }); }); describe("resolveTelegramAllowedEmojiReactions", () => { @@ -166,6 +173,16 @@ describe("resolveTelegramReactionVariant", () => { expect(result).toBe("👍"); }); + it("matches equivalent allowed emoji forms after normalization", () => { + const result = resolveTelegramReactionVariant({ + requestedEmoji: "❤️", + variantsByRequestedEmoji: new Map([["❤", ["❤"]]]), + allowedEmojiReactions: new Set(["❤"]), + }); + + expect(result).toBe("❤"); + }); + it("returns undefined when no candidate is chat-allowed", () => { const variantsByEmoji = buildTelegramStatusReactionVariants({ ...DEFAULT_EMOJIS, diff --git a/extensions/telegram/src/status-reaction-variants.ts b/extensions/telegram/src/status-reaction-variants.ts index 8c04a87554e..0eb658dafbf 100644 --- a/extensions/telegram/src/status-reaction-variants.ts +++ b/extensions/telegram/src/status-reaction-variants.ts @@ -108,7 +108,10 @@ const STATUS_REACTION_EMOJI_KEYS: StatusReactionEmojiKey[] = [ function normalizeEmoji(value: string | undefined): string | undefined { const trimmed = value?.trim(); - return trimmed ? trimmed : undefined; + if (!trimmed) { + return undefined; + } + return trimmed.normalize("NFKD").replace(/[\uFE0E\uFE0F]/g, ""); } function toUniqueNonEmpty(values: string[]): string[] { @@ -184,7 +187,7 @@ export function extractTelegramAllowedEmojiReactions( if (typedReaction.type !== "emoji" || typeof typedReaction.emoji !== "string") { continue; } - const emoji = typedReaction.emoji.trim(); + const emoji = normalizeEmoji(typedReaction.emoji); if (emoji) { allowed.add(emoji); }