ForcePilot/backend/package/yuxi/channels/policy/group_chat_policy.py

43 lines
1.3 KiB
Python
Raw Normal View History

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