ForcePilot/backend/package/yuxi/channel/extensions/nextcloud_talk/policy.py
Kris 6fc9a4a94c feat(channel): 添加 Nextcloud Talk 渠道扩展
新增 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: 类型定义
2026-05-21 11:29:56 +08:00

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