新增大量渠道适配器相关的协议、策略、工具类与基础设施代码,包括: 1. 多协议定义:认证、消息、配置、网关等核心接口 2. 策略模块:上下文、群聊、去重、防抖等业务策略 3. 工具集:重试、去重、文本分块、消息格式化等SDK工具 4. 基础设施:外部进程管理、事件广播、熔断机制等 5. 账户与管道系统:账户管理、消息处理管道实现 6. 运行时服务:状态收集、维护任务、日志等后台服务
43 lines
1.3 KiB
Python
43 lines
1.3 KiB
Python
from enum import StrEnum
|
|
|
|
from yuxi.channels.models import ChannelMessage, ChatType
|
|
|
|
|
|
class GroupChatMode(StrEnum):
|
|
MENTION_ONLY = "mention_only"
|
|
ALL = "all"
|
|
WHITELIST = "whitelist"
|
|
BLACKLIST = "blacklist"
|
|
|
|
|
|
class GroupChatPolicy:
|
|
DEFAULT_MODE = GroupChatMode.MENTION_ONLY
|
|
|
|
def __init__(self):
|
|
self._whitelist: set[str] = set()
|
|
self._blacklist: set[str] = set()
|
|
self._mode = self.DEFAULT_MODE
|
|
|
|
def configure(self, mode: GroupChatMode, whitelist=None, blacklist=None) -> None:
|
|
self._mode = mode
|
|
if whitelist is not None:
|
|
self._whitelist = set(whitelist)
|
|
if blacklist is not None:
|
|
self._blacklist = set(blacklist)
|
|
|
|
def should_respond(self, message: ChannelMessage, is_at_bot: bool) -> bool:
|
|
if message.chat_type == ChatType.DIRECT:
|
|
return True
|
|
|
|
chat_id = message.identity.channel_chat_id
|
|
|
|
if self._mode == GroupChatMode.MENTION_ONLY:
|
|
return is_at_bot
|
|
if self._mode == GroupChatMode.ALL:
|
|
return True
|
|
if self._mode == GroupChatMode.WHITELIST:
|
|
return chat_id in self._whitelist
|
|
if self._mode == GroupChatMode.BLACKLIST:
|
|
return chat_id not in self._blacklist
|
|
return True
|