主要变更: 1. 重构导入顺序,统一模块导入规范 2. 提取通用方法到session模块,减少代码重复 3. 为缓存类添加线程/异步锁,修复并发安全问题 4. 新增入站处理器和发送管理器模块,拆分业务逻辑 5. 优化凭证队列,改为异步实现 6. 移除废弃的SSE_POLLING能力标识 7. 修复轮询投票解析逻辑 8. 优化Markdown转换规则,避免格式冲突 9. 完善连接控制器的异常处理 10. 新增发送静默消息的API支持
70 lines
2.0 KiB
Python
70 lines
2.0 KiB
Python
from __future__ import annotations
|
||
|
||
from dataclasses import dataclass, field
|
||
from enum import StrEnum
|
||
|
||
|
||
class ChannelMode(StrEnum):
|
||
BRIDGE = "bridge"
|
||
CLOUD_API = "cloud_api"
|
||
|
||
|
||
class ChannelCapability(StrEnum):
|
||
TEXT = "text"
|
||
IMAGE = "image"
|
||
VIDEO = "video"
|
||
AUDIO = "audio"
|
||
DOCUMENT = "document"
|
||
STICKER = "sticker"
|
||
LOCATION = "location"
|
||
CONTACT = "contact"
|
||
REACTION = "reaction"
|
||
BUTTONS = "buttons"
|
||
LIST_MESSAGE = "list_message"
|
||
TEMPLATE = "template"
|
||
POLL = "poll"
|
||
GROUP = "group"
|
||
BROADCAST = "broadcast"
|
||
QR_LOGIN = "qr_login"
|
||
PAIRING = "pairing"
|
||
SSE_POLLING = "sse_polling"
|
||
|
||
|
||
@dataclass
|
||
class WhatsAppChannelMeta:
|
||
channel_type: str = "whatsapp"
|
||
display_name: str = "WhatsApp"
|
||
protocol: str = "whatsapp"
|
||
supported_modes: list[ChannelMode] = field(default_factory=lambda: [ChannelMode.BRIDGE, ChannelMode.CLOUD_API])
|
||
capabilities: list[ChannelCapability] = field(
|
||
default_factory=lambda: [
|
||
ChannelCapability.TEXT,
|
||
ChannelCapability.IMAGE,
|
||
ChannelCapability.VIDEO,
|
||
ChannelCapability.AUDIO,
|
||
ChannelCapability.DOCUMENT,
|
||
ChannelCapability.STICKER,
|
||
ChannelCapability.LOCATION,
|
||
ChannelCapability.CONTACT,
|
||
ChannelCapability.REACTION,
|
||
ChannelCapability.BUTTONS,
|
||
ChannelCapability.LIST_MESSAGE,
|
||
ChannelCapability.POLL,
|
||
ChannelCapability.GROUP,
|
||
ChannelCapability.QR_LOGIN,
|
||
ChannelCapability.PAIRING,
|
||
]
|
||
)
|
||
inbound_rate_limit: int = 60
|
||
outbound_rate_limit: int = 30
|
||
description: str = "WhatsApp Bridge适配器,通过Baileys协议连接WhatsApp"
|
||
|
||
def has_capability(self, capability: ChannelCapability) -> bool:
|
||
return capability in self.capabilities
|
||
|
||
def supports_mode(self, mode: ChannelMode) -> bool:
|
||
return mode in self.supported_modes
|
||
|
||
|
||
ChannelMeta = WhatsAppChannelMeta
|