实现了完整的Nextcloud Talk聊天适配器,包含以下核心功能: 1. 基础客户端通信与认证 2. 会话路由与聊天类型解析 3. 消息分块与格式转换 4. 用户配对与权限校验 5. 轮询式消息监听 6. 配置验证与诊断工具 7. 安全策略与去重缓存 8. 指标统计与状态快照 新增配套的配对用户缓存文件与模块导出入口。
49 lines
1.4 KiB
Python
49 lines
1.4 KiB
Python
from __future__ import annotations
|
|
|
|
import logging
|
|
from typing import Any
|
|
|
|
from yuxi.channels.models import ChatType
|
|
|
|
logger = logging.getLogger(__name__)
|
|
|
|
|
|
def resolve_session_route(
|
|
token: str,
|
|
conversation_info: dict[str, Any] | None,
|
|
default_agent_id: str,
|
|
) -> dict[str, str]:
|
|
room_type = conversation_info.get("type") if conversation_info else None
|
|
|
|
if room_type == 1:
|
|
route = f"agent:{default_agent_id}:nextcloudtalk:dm:{token}"
|
|
else:
|
|
route = f"agent:{default_agent_id}:nextcloudtalk:group:{token}"
|
|
|
|
return {"route": route, "token": token}
|
|
|
|
|
|
def resolve_chat_type(room_type: int | None) -> ChatType:
|
|
if room_type == 1:
|
|
return ChatType.DIRECT
|
|
if room_type in (2, 3):
|
|
return ChatType.GROUP
|
|
return ChatType.GROUP
|
|
|
|
|
|
def make_thread_key(agent_id: str, token: str, room_type: int | None) -> str:
|
|
if room_type == 1:
|
|
return f"agent:{agent_id}:nextcloudtalk:dm:{token}"
|
|
return f"agent:{agent_id}:nextcloudtalk:group:{token}"
|
|
|
|
|
|
def resolve_conversation_label(conv_info: dict[str, Any]) -> str:
|
|
room_type = conv_info.get("type") if conv_info else None
|
|
display_name = conv_info.get("display_name", conv_info.get("displayName", "")) if conv_info else ""
|
|
name = conv_info.get("name", "") if conv_info else ""
|
|
|
|
if room_type == 1:
|
|
return display_name or name or "Direct Message"
|
|
label = display_name or name or "Group"
|
|
return f"room:{label}"
|