ForcePilot/backend/package/yuxi/channels/contract/dtos/shared/command.py
Kris 08617091dc refactor: 整理项目包结构与导入路径
- 新增多个业务域的__init__.py模块文件,规范包导出结构
- 调整多个DTO文件的导入路径,统一模块组织方式
- 移除测试文件中多余的空行与导入语句
- 优化部分业务模块的包层级划分
2026-07-18 02:04:03 +08:00

115 lines
3.2 KiB
Python
Raw Blame History

This file contains ambiguous Unicode characters

This file contains Unicode characters that might be confused with other characters. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.

"""命令 DTO。
定义渠道命令注册与执行的不可变值对象,包括命令权限、命令 ID、渠道命令、
命令响应与命令结果。所有 DTO 均为 ``dataclass(frozen=True)``,依赖
标准库与契约层 ``ValidationError``,用于命令插件注册与命令执行结果回传。
"""
from __future__ import annotations
from dataclasses import dataclass
from enum import StrEnum
from typing import Literal
from yuxi.channels.contract.errors 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:
"""渠道命令FR-15
描述渠道命令的元信息,由命令插件声明,用于命令注册、权限校验与帮助
文档生成。
字段:
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: Literal["text", "markdown", "rich"] = "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