新增元宝(Yuanbao)渠道的完整适配器实现,包含以下核心模块: - 基础适配器与导出入口 - 协议编解码与WebSocket帧处理 - 会话管理与路由逻辑 - 事件队列与出站消息队列 - 消息格式转换与发送重试 - 安全审计与权限校验 - 配置映射与账户管理 - 视觉分析与工具函数 - 文档生成与设置向导
45 lines
1.4 KiB
Python
45 lines
1.4 KiB
Python
from __future__ import annotations
|
|
|
|
from yuxi.channels.models import ChannelIdentity
|
|
|
|
|
|
def resolve_thread_key(identity: ChannelIdentity, chat_type: str = "direct") -> str:
|
|
chat_id = identity.channel_chat_id
|
|
|
|
if chat_type == "channel":
|
|
return f"yuanbao:channel:{chat_id}"
|
|
elif chat_type == "group":
|
|
return f"yuanbao:group:{chat_id}"
|
|
return f"yuanbao:direct:{chat_id}"
|
|
|
|
|
|
def resolve_agent_route(
|
|
identity: ChannelIdentity,
|
|
chat_type: str = "direct",
|
|
default_agent_id: str = "default",
|
|
groups_config: dict | None = None,
|
|
channels_config: dict | None = None,
|
|
) -> str:
|
|
chat_id = identity.channel_chat_id
|
|
|
|
if chat_type == "channel":
|
|
channels = channels_config or {}
|
|
channel_cfg = channels.get(chat_id, {})
|
|
agent_id = channel_cfg.get("agent_id", default_agent_id)
|
|
return f"agent:{agent_id}:yuanbao:channel:{chat_id}"
|
|
elif chat_type == "group":
|
|
groups = groups_config or {}
|
|
group_cfg = groups.get(chat_id, {})
|
|
agent_id = group_cfg.get("agent_id", default_agent_id)
|
|
return f"agent:{agent_id}:yuanbao:group:{chat_id}"
|
|
else:
|
|
return f"agent:{default_agent_id}:yuanbao:direct:{chat_id}"
|
|
|
|
|
|
def resolve_chat_type_str(chat_type: str) -> str:
|
|
if chat_type == "channel":
|
|
return "guild_channel"
|
|
elif chat_type == "group":
|
|
return "group"
|
|
return "direct"
|