1. 调整导入顺序与补全缺失依赖 2. 新增Zalo目标前缀映射与最大重连延迟配置 3. 优化反应消息ID获取逻辑与桥接URL检查 4. 改进WebSocket重连退避策略与错误处理 5. 重构发送消息逻辑,统一附件处理与音频发送流程 6. 调整类初始化代码位置与导入依赖顺序
90 lines
2.0 KiB
Python
90 lines
2.0 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
|
|
MAX_RECONNECT_DELAY = 120
|
|
|
|
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",
|
|
"zalo:": "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"
|