新增了Zalo用户频道的完整适配器实现,包括: - 基础的适配器初始化与导出结构 - 群组同步与成员获取功能 - 请求限流与退避重试机制 - 健康检查与状态探针 - 消息反应/表情处理工具 - 贴纸缓存与消息去重功能 - 消息ID格式化与追踪 - TTS语音合成支持 - 消息发送权限校验 - 长文本分块发送 - 操作审批流程 - 常量配置与国际化支持 - 图像视觉分析功能 - 贴纸消息处理 - 登录与配置向导 - 群组上下文缓存 - 网关连接管理 - 配置Schema校验 - 状态问题与安全审计 - 内联按钮与交互组件 - 交互式回调分发 - 联系人与群组目录管理 - 富媒体卡片消息支持
48 lines
1.1 KiB
Python
48 lines
1.1 KiB
Python
from __future__ import annotations
|
|
|
|
from .constants import REACTION_ALIAS_MAP, ZALO_REACTION_EMOJIS
|
|
|
|
REACTION_DELETE_ICON = ""
|
|
|
|
|
|
def normalize_reaction_icon(emoji: str) -> str:
|
|
if not emoji:
|
|
return REACTION_DELETE_ICON
|
|
|
|
normalized = emoji.strip()
|
|
if normalized.lower() in REACTION_ALIAS_MAP:
|
|
return REACTION_ALIAS_MAP[normalized.lower()]
|
|
|
|
if normalized in ZALO_REACTION_EMOJIS:
|
|
return normalized
|
|
|
|
return normalized
|
|
|
|
|
|
def is_valid_reaction(emoji: str) -> bool:
|
|
normalized = emoji.strip()
|
|
if normalized.lower() in REACTION_ALIAS_MAP:
|
|
return True
|
|
if normalized in ZALO_REACTION_EMOJIS:
|
|
return True
|
|
return False
|
|
|
|
|
|
def is_delete_reaction(emoji: str) -> bool:
|
|
return not emoji or emoji.strip() == REACTION_DELETE_ICON
|
|
|
|
|
|
def resolve_message_ids_for_reaction(msg_id: str) -> tuple[str, str | None]:
|
|
if ":" in msg_id:
|
|
parts = msg_id.split(":", 1)
|
|
return parts[0], parts[1]
|
|
return msg_id, None
|
|
|
|
|
|
def list_supported_reactions() -> list[str]:
|
|
return sorted(ZALO_REACTION_EMOJIS)
|
|
|
|
|
|
def list_reaction_aliases() -> dict[str, str]:
|
|
return dict(REACTION_ALIAS_MAP)
|