WechatOnCloud/bridge/woc_bridge/models/send.py
Kris 102b98adea refactor: 完成项目包结构重构与基础模块搭建
本次提交将woc-bridge项目重构为模块化包结构,按职责拆分多个子域:
1. 新增models层定义所有Pydantic数据模型与统一错误体系
2. 拆分db/ui/messaging/routes等业务域模块
3. 实现基础API路由:状态查询、截图、登录、媒体获取等
4. 重构tools脚本的模块导入路径
5. 补充版本号与能力清单定义
6. 完善全局配置与依赖管理

整体完成项目从单文件脚本到可维护的包结构迁移,为后续功能开发打下基础。
2026-07-08 23:25:58 +08:00

95 lines
3.6 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.

"""发送域模型:发送文本 / 发送文件 / 发送响应。"""
from __future__ import annotations
from typing import Optional
from pydantic import BaseModel, Field
# ---------------------------------------------------------------------------
# 发送接口
# ---------------------------------------------------------------------------
class SendTextRequest(BaseModel):
"""发送文本消息请求。"""
to_wxid: str = Field(description="目标 wxid")
content: str = Field(description="文本内容")
display_name: Optional[str] = Field(
default=None,
description="可选:用于微信搜索框定位会话的显示名。不传时 bridge 自动按备注->昵称->wxid 查找",
)
class SendFileRequest(BaseModel):
"""发送图片/文件请求。"""
to_wxid: str = Field(description="目标 wxid")
file_path: str = Field(description="容器内文件绝对路径")
display_name: Optional[str] = Field(
default=None,
description="可选:用于微信搜索框定位会话的显示名。不传时 bridge 自动按备注->昵称->wxid 查找",
)
class SendResponse(BaseModel):
"""发送消息响应。
字段说明:
- local_send_idbridge 本地生成的发送 ID格式 local_<unix秒>_<随机>。
仅用于客户端幂等去重,**不对应微信原生 msg_id**,禁止用于
/api/media/{msg_id} 查媒体。
- placeholder是否为占位实现true 表示真实文件/图片内容未传输,
仅发了提示文本;客户端应走降级处理)。
"""
success: bool = Field(default=False)
local_send_id: str = Field(default="", description="本地生成的发送 ID非微信原生 msg_id")
placeholder: bool = Field(default=False, description="是否为占位实现(真实内容未传输)")
error: Optional[str] = Field(default=None, description="失败时的错误描述")
# ---------------------------------------------------------------------------
# 消息撤回experimental
# ---------------------------------------------------------------------------
class RevokeMessageRequest(BaseModel):
"""撤回消息请求experimental"""
talker: str = Field(description="会话对方 wxid")
create_time: int = Field(description="消息发送时间戳Unix 秒),用于校验撤回时限,必须 > 0")
display_name: Optional[str] = Field(
default=None,
description="会话显示名(备注/昵称),用于微信搜索框定位会话;"
"不传则从 contact.db 解析(优先 remark其次 nickname回退 wxid",
)
class RevokeMessageResponse(BaseModel):
"""撤回消息响应。"""
success: bool = Field(default=False)
error: Optional[str] = Field(default=None, description="失败时的错误描述")
# ---------------------------------------------------------------------------
# 消息转发experimental
# ---------------------------------------------------------------------------
class ForwardMessageRequest(BaseModel):
"""转发消息请求experimental"""
talker: str = Field(description="源会话对方 wxid")
target_display_name: str = Field(
description="转发目标联系人的显示名(备注/昵称)"
)
source_display_name: Optional[str] = Field(
default=None,
description="源会话显示名,用于搜索框定位源会话;不传则从 contact.db 解析",
)
class ForwardMessageResponse(BaseModel):
"""转发消息响应。"""
success: bool = Field(default=False)
error: Optional[str] = Field(default=None, description="失败时的错误描述")