本次提交包含多类代码优化与修复: 1. 重命名适配器协议类:WebhookTestable→WebhookTestAdapter、AttachmentUploadable→AttachmentUploadAdapter,并同步更新所有引用 2. 为飞书/企业微信插件添加凭证克隆能力开关配置 3. 修复飞书入站适配器URL解析错误,使用hostname替代host属性 4. 新增批量发送消息DTO与已读状态DTO 5. 新增插件目录列表接口与插件能力校验规则 6. 修复权限阶段配置,添加analytics权限映射 7. 优化健康检查、限流模块的环境变量配置支持 8. 修复配对过期扫描器参数名不匹配问题 9. 优化日志调用、文档注释与代码可读性 10. 移除废弃的AuditExportTask聚合根与相关导入
114 lines
3.1 KiB
Python
114 lines
3.1 KiB
Python
"""命令 DTO。
|
||
|
||
定义渠道命令注册与执行的不可变值对象,包括命令权限、命令 ID、渠道命令、
|
||
命令响应与命令结果。所有 DTO 均为 ``dataclass(frozen=True)``,依赖
|
||
标准库与契约层 ``ValidationError``,用于命令插件注册与命令执行结果回传。
|
||
"""
|
||
|
||
from __future__ import annotations
|
||
|
||
from dataclasses import dataclass
|
||
from enum import StrEnum
|
||
|
||
from yuxi.channels.errors.client import ValidationError
|
||
|
||
|
||
class CommandPermission(StrEnum):
|
||
"""命令权限。
|
||
|
||
标识渠道命令的可见性与执行权限层级,用于命令注册时声明与执行时校验。
|
||
继承 ``str, Enum`` 以支持 JSON 序列化与字符串比较。
|
||
|
||
取值:
|
||
PRIVATE: 仅私聊可用。
|
||
GROUP: 仅群聊可用。
|
||
ADMIN: 仅管理员可用。
|
||
ALL: 所有场景可用。
|
||
"""
|
||
|
||
PRIVATE = "private"
|
||
GROUP = "group"
|
||
ADMIN = "admin"
|
||
ALL = "all"
|
||
|
||
|
||
@dataclass(frozen=True)
|
||
class CommandId:
|
||
"""命令 ID。
|
||
|
||
标识一条已注册的渠道命令的全局唯一 ID,用于命令路由与审计关联。
|
||
|
||
字段:
|
||
value: 命令 ID 字符串。
|
||
"""
|
||
|
||
value: str
|
||
|
||
|
||
@dataclass(frozen=True)
|
||
class ChannelCommand:
|
||
"""渠道命令。
|
||
|
||
描述渠道命令的元信息,由命令插件声明,用于命令注册、权限校验与帮助
|
||
文档生成。
|
||
|
||
字段:
|
||
name: 命令名称。
|
||
description: 命令描述。
|
||
permission: 命令权限(默认 ALL)。
|
||
is_silent: 是否静默执行(不回显响应,默认 False)。
|
||
"""
|
||
|
||
name: str
|
||
description: str
|
||
permission: CommandPermission = CommandPermission.ALL
|
||
is_silent: bool = False
|
||
|
||
def __post_init__(self) -> None:
|
||
"""校验必填字段非空。
|
||
|
||
``name`` 与 ``description`` 必须非空,在构造时即抛出
|
||
``ValidationError``,adapter 不再做该校验(INV-8)。
|
||
"""
|
||
if not self.name:
|
||
raise ValidationError("name", "must not be empty")
|
||
if not self.description:
|
||
raise ValidationError("description", "must not be empty")
|
||
|
||
|
||
@dataclass(frozen=True)
|
||
class CommandResponse:
|
||
"""命令响应。
|
||
|
||
描述命令执行后返回给渠道的内容,支持指定内容类型与回复目标。
|
||
|
||
字段:
|
||
content: 响应内容。
|
||
content_type: 内容类型(text | markdown | rich,默认 text)。
|
||
target: 回复目标,None 表示原会话。
|
||
is_silent: 是否静默(不回显,默认 False)。
|
||
"""
|
||
|
||
content: str
|
||
content_type: str = "text"
|
||
target: str | None = None
|
||
is_silent: bool = False
|
||
|
||
|
||
@dataclass(frozen=True)
|
||
class CommandResult:
|
||
"""命令结果。
|
||
|
||
描述命令执行的最终结果,携带命令名、是否静默与可选的响应内容,用于
|
||
管道下游决策是否回显与审计记录。
|
||
|
||
字段:
|
||
command: 命令名。
|
||
is_silent: 是否静默执行(默认 False)。
|
||
response: 命令响应(无响应时为 None)。
|
||
"""
|
||
|
||
command: str
|
||
is_silent: bool = False
|
||
response: CommandResponse | None = None
|