46 lines
1.5 KiB
Python
46 lines
1.5 KiB
Python
|
|
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"
|