新增 Nextcloud Talk 渠道扩展,支持在 Yuxi 平台中集成 Nextcloud Talk 即时通讯渠道。 包含以下功能模块: - accounts: 账户管理 - bot_admin: Bot 管理 - chat_api: 聊天 API 封装 - config_schema: 配置模式 - conversation: 会话管理 - gateway: SSE/WebSocket 网关接入 - inbound: 入站消息处理 - send: 消息发送 - webhook_server: Webhook 服务 - format: 消息格式转换 - normalize: 消息规范化 - poll_api: 投票 API - reaction_api: 表情反应 API - policy: 安全策略 - probe: 健康探测 - replay_guard: 重放防护 - signature: 签名验证 - room_info: 房间信息 - types: 类型定义
55 lines
1.4 KiB
Python
55 lines
1.4 KiB
Python
from __future__ import annotations
|
|
|
|
import logging
|
|
|
|
from yuxi.channel.extensions.nextcloud_talk.config_schema import NextcloudTalkConfig, NextcloudTalkRoomConfig
|
|
|
|
logger = logging.getLogger(__name__)
|
|
|
|
|
|
def resolve_nextcloud_talk_room_match(
|
|
rooms: dict[str, NextcloudTalkRoomConfig],
|
|
room_token: str,
|
|
) -> NextcloudTalkRoomConfig | None:
|
|
if room_token in rooms:
|
|
return rooms[room_token]
|
|
|
|
lower_token = room_token.lower()
|
|
for key, config in rooms.items():
|
|
if key.lower() == lower_token:
|
|
return config
|
|
|
|
if "*" in rooms:
|
|
return rooms["*"]
|
|
|
|
return None
|
|
|
|
|
|
def check_nextcloud_talk_sender_allowlist(
|
|
sender_id: str,
|
|
cfg: NextcloudTalkConfig,
|
|
) -> bool:
|
|
if not cfg.allow_from:
|
|
return True
|
|
normalized_sender = _normalize_sender_id(sender_id)
|
|
return normalized_sender in [_normalize_sender_id(s) for s in cfg.allow_from]
|
|
|
|
|
|
def check_nextcloud_talk_group_sender_allowlist(
|
|
sender_id: str,
|
|
cfg: NextcloudTalkConfig,
|
|
) -> bool:
|
|
if not cfg.group_allow_from:
|
|
return True
|
|
normalized_sender = _normalize_sender_id(sender_id)
|
|
return normalized_sender in [_normalize_sender_id(s) for s in cfg.group_allow_from]
|
|
|
|
|
|
def _normalize_sender_id(sender_id: str) -> str:
|
|
sid = sender_id.strip().lower()
|
|
for prefix in ("nextcloud-talk:", "nc-talk:", "nc:"):
|
|
if sid.startswith(prefix):
|
|
sid = sid[len(prefix) :]
|
|
break
|
|
return sid
|