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