新增 Tlon 渠道扩展,支持在 Yuxi 平台中集成 Tlon/Urbit 去中心化通讯平台。 包含以下功能模块: - tlon_api: Tlon API 客户端封装 - config: 渠道配置管理 - gateway: SSE/WebSocket 网关接入 - sse_client: SSE 客户端 - outbound: 外发消息管理 - send: 消息发送 - security: 安全校验 - auth: 认证管理 - monitor: 渠道状态监控 - status: 会话状态管理 - session: 会话管理 - approval: 审批流程 - channel_mgmt: 频道管理 - channel_ops: 频道操作 - contacts: 联系人管理 - discovery: 服务发现 - doctor: 健康诊断 - expose: 服务暴露 - gallery: 图库管理 - history: 历史记录 - hooks: 钩子管理 - media: 媒体资源处理 - notebook: 笔记本功能 - settings_store: 设置存储 - setup: 初始化设置 - story: 故事功能 - targets: 目标管理 - cite_parser: 引用解析 - utils: 工具函数 - types: 类型定义
46 lines
1.4 KiB
Python
46 lines
1.4 KiB
Python
from dataclasses import dataclass
|
|
|
|
from yuxi.channel.extensions.tlon.types import TlonTarget, TlonTargetKind
|
|
from yuxi.channel.extensions.tlon.utils import normalize_ship
|
|
|
|
|
|
def parse_tlon_target(raw: str) -> TlonTarget | None:
|
|
raw = raw.strip()
|
|
|
|
if raw.startswith("tlon:"):
|
|
raw = raw[5:]
|
|
|
|
if raw.startswith("dm/") or raw.startswith("dm:"):
|
|
ship = raw[3:]
|
|
return TlonTarget(kind=TlonTargetKind.DM, ship=normalize_ship(ship))
|
|
|
|
if raw.startswith("~") and "/" not in raw:
|
|
return TlonTarget(kind=TlonTargetKind.DM, ship=normalize_ship(raw))
|
|
|
|
if raw.startswith("chat/"):
|
|
parts = raw.split("/")
|
|
if len(parts) >= 3:
|
|
return TlonTarget(
|
|
kind=TlonTargetKind.GROUP,
|
|
nest=raw,
|
|
host_ship=parts[1],
|
|
channel_name="/".join(parts[2:]),
|
|
)
|
|
|
|
if raw.startswith("group:") or raw.startswith("group/"):
|
|
inner = raw[6:]
|
|
if inner.startswith("/chat/"):
|
|
inner = inner[1:]
|
|
elif inner.startswith("chat/"):
|
|
pass
|
|
else:
|
|
inner = f"chat/{inner}"
|
|
parts = inner.split("/")
|
|
return TlonTarget(
|
|
kind=TlonTargetKind.GROUP,
|
|
nest=inner,
|
|
host_ship=parts[1] if len(parts) > 1 else "",
|
|
channel_name="/".join(parts[2:]) if len(parts) > 2 else "",
|
|
)
|
|
|
|
return None |