from __future__ import annotations from yuxi.channels.models import ChannelIdentity from .constants import DM_CHAT_PREFIX, GROUP_CHAT_PREFIX def resolve_thread_key(identity: ChannelIdentity) -> str: chat_id = identity.channel_chat_id if chat_id.startswith(GROUP_CHAT_PREFIX): return f"qqbot:group:{chat_id}" elif chat_id.startswith(DM_CHAT_PREFIX): return f"qqbot:direct:{chat_id}" return f"qqbot:guild:{chat_id}" def resolve_agent_route( identity: ChannelIdentity, default_agent_id: str = "default", groups_config: dict | None = None, guild_channels_config: dict | None = None, ) -> str: chat_id = identity.channel_chat_id if chat_id.startswith(GROUP_CHAT_PREFIX): groups = groups_config or {} chat_cfg = groups.get(chat_id, {}) agent_id = chat_cfg.get("agent_id", default_agent_id) return f"agent:{agent_id}:qqbot:group:{chat_id}" elif chat_id.startswith(DM_CHAT_PREFIX): return f"agent:{default_agent_id}:qqbot:direct:{chat_id}" else: guild_channels = guild_channels_config or {} channel_cfg = guild_channels.get(chat_id, {}) agent_id = channel_cfg.get("agent_id", default_agent_id) return f"agent:{agent_id}:qqbot:guild:{chat_id}" def resolve_chat_type(identity: ChannelIdentity) -> str: chat_id = identity.channel_chat_id if chat_id.startswith(GROUP_CHAT_PREFIX): return "group" elif chat_id.startswith(DM_CHAT_PREFIX): return "direct" return "guild_channel"