新增了Zalo用户频道的完整适配器实现,包括: - 基础的适配器初始化与导出结构 - 群组同步与成员获取功能 - 请求限流与退避重试机制 - 健康检查与状态探针 - 消息反应/表情处理工具 - 贴纸缓存与消息去重功能 - 消息ID格式化与追踪 - TTS语音合成支持 - 消息发送权限校验 - 长文本分块发送 - 操作审批流程 - 常量配置与国际化支持 - 图像视觉分析功能 - 贴纸消息处理 - 登录与配置向导 - 群组上下文缓存 - 网关连接管理 - 配置Schema校验 - 状态问题与安全审计 - 内联按钮与交互组件 - 交互式回调分发 - 联系人与群组目录管理 - 富媒体卡片消息支持
88 lines
1.9 KiB
Python
88 lines
1.9 KiB
Python
from __future__ import annotations
|
|
|
|
from enum import StrEnum
|
|
|
|
ZALO_TEXT_LIMIT = 2000
|
|
ZALO_MAX_STYLED_MESSAGE_LENGTH = 2000
|
|
|
|
WS_MAX_MESSAGE_SIZE = 10 * 1024 * 1024
|
|
WS_PING_INTERVAL = 30
|
|
WS_PING_TIMEOUT = 10
|
|
WS_RECONNECT_DELAY = 5
|
|
|
|
WATCHDOG_INTERVAL = 30
|
|
WATCHDOG_MAX_IDLE = 35
|
|
|
|
GROUP_CONTEXT_CACHE_TTL = 300
|
|
GROUP_CONTEXT_CACHE_MAX_ENTRIES = 500
|
|
|
|
DEFAULT_BRIDGE_URL = "http://localhost:5556"
|
|
DEFAULT_TIMEOUT = 30.0
|
|
DEFAULT_CONNECT_TIMEOUT = 10
|
|
DEFAULT_LOGIN_POLL_INTERVAL = 2.0
|
|
DEFAULT_LOGIN_TIMEOUT = 120.0
|
|
DEFAULT_QR_START_TIMEOUT = 30.0
|
|
DEFAULT_MAX_SEND_PER_MINUTE = 30
|
|
|
|
DEFAULT_RETRY_ATTEMPTS = 3
|
|
DEFAULT_RETRY_MIN_DELAY_MS = 500
|
|
DEFAULT_RETRY_MAX_DELAY_MS = 10000
|
|
|
|
DEFAULT_CIRCUIT_BREAKER_THRESHOLD = 5
|
|
DEFAULT_CIRCUIT_BREAKER_RECOVERY = 60
|
|
|
|
ZALO_REACTION_EMOJIS = frozenset(
|
|
{
|
|
"\U0001f44d",
|
|
"\u2764\ufe0f",
|
|
"\U0001f602",
|
|
"\U0001f62e",
|
|
"\U0001f622",
|
|
"\U0001f621",
|
|
}
|
|
)
|
|
|
|
REACTION_ALIAS_MAP: dict[str, str] = {
|
|
"like": "\U0001f44d",
|
|
"+1": "\U0001f44d",
|
|
":+1:": "\U0001f44d",
|
|
"love": "\u2764\ufe0f",
|
|
"heart": "\u2764\ufe0f",
|
|
":heart:": "\u2764\ufe0f",
|
|
"laugh": "\U0001f602",
|
|
"haha": "\U0001f602",
|
|
":laughing:": "\U0001f602",
|
|
"wow": "\U0001f62e",
|
|
"surprised": "\U0001f62e",
|
|
":open_mouth:": "\U0001f62e",
|
|
"sad": "\U0001f622",
|
|
"cry": "\U0001f622",
|
|
":cry:": "\U0001f622",
|
|
"angry": "\U0001f621",
|
|
"mad": "\U0001f621",
|
|
":rage:": "\U0001f621",
|
|
}
|
|
|
|
TARGET_PREFIXES: dict[str, str] = {
|
|
"zalouser:": "user",
|
|
"zlu:": "user",
|
|
"user:": "user",
|
|
"dm:": "user",
|
|
"u:": "user",
|
|
"u-": "user",
|
|
"group:": "group",
|
|
"g:": "group",
|
|
"g-": "group",
|
|
}
|
|
|
|
|
|
class ZaloCredentialStage(StrEnum):
|
|
UNINITIALIZED = "uninitialized"
|
|
QR_PENDING = "qr_pending"
|
|
QR_SCANNED = "qr_scanned"
|
|
QR_DECLINED = "qr_declined"
|
|
QR_EXPIRED = "qr_expired"
|
|
CONNECTED = "connected"
|
|
LOGGED_OUT = "logged_out"
|
|
ERROR = "error"
|