ForcePilot/backend/package/yuxi/channels/policy/group_chat_policy.py
Kris 7a972055b7 feat: 新增渠道服务基础框架与核心工具类
新增大量渠道适配器相关的协议、策略、工具类与基础设施代码,包括:
1.  多协议定义:认证、消息、配置、网关等核心接口
2.  策略模块:上下文、群聊、去重、防抖等业务策略
3.  工具集:重试、去重、文本分块、消息格式化等SDK工具
4.  基础设施:外部进程管理、事件广播、熔断机制等
5.  账户与管道系统:账户管理、消息处理管道实现
6.  运行时服务:状态收集、维护任务、日志等后台服务
2026-05-12 00:53:57 +08:00

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