REACTION_ALIASES: dict[str, str] = { "love": "love", "\u2764\ufe0f": "love", "\u2764": "love", "fire": "love", "\U0001f525": "love", "heart_eyes": "love", "like": "like", "thumbsup": "like", "thumb": "like", "ok": "like", "dislike": "dislike", "thumbsdown": "dislike", "boo": "dislike", "no": "dislike", "laugh": "laugh", "haha": "laugh", "lol": "laugh", "lmao": "laugh", "rofl": "laugh", "\U0001f602": "laugh", "\U0001f923": "laugh", "xd": "laugh", "emphasize": "emphasize", "!!": "emphasize", "\u203c\ufe0f": "emphasize", "\u2757": "emphasize", "important": "emphasize", "bang": "emphasize", "wow": "emphasize", "question": "question", "?": "question", "\u2753": "question", "\u2754": "question", "ask": "question", } SUPPORTED_REACTIONS = frozenset({"love", "like", "dislike", "laugh", "emphasize", "question"}) def normalize_reaction_loose(raw: str) -> str: return REACTION_ALIASES.get(raw.strip().lower(), "love") def normalize_reaction_strict(raw: str) -> str: key = raw.strip().lower() if key not in REACTION_ALIASES: raise ValueError(f"Unsupported reaction: {raw}") return REACTION_ALIASES[key] def is_supported_reaction(name: str) -> bool: return name in SUPPORTED_REACTIONS