"""消息域模型:单条消息 / 消息拉取响应。""" from __future__ import annotations from pydantic import BaseModel, Field # --------------------------------------------------------------------------- # 消息接口(GET /api/messages/since) # --------------------------------------------------------------------------- class Message(BaseModel): """单条微信消息。""" msg_id: str = Field(description="消息 ID") talker: str = Field(description="会话对方 wxid(群消息为 chatroom id)") sender: str = Field(default="", description="实际发送者 wxid(群消息中为成员 wxid)") is_sender: bool = Field(default=False, description="是否为本机发送") type: int = Field(description="微信原始消息类型") render_type: str = Field(description="渲染类型:text/image/voice/video/file/system") content: str = Field(default="", description="消息内容文本") create_time: int = Field(description="消息时间戳(Unix 秒)") session_type: str = Field(description="会话类型:p2p / group") class MessagesResponse(BaseModel): """消息拉取响应。""" messages: list[Message] = Field(default_factory=list) next_cursor: int = Field(description="下次拉取应使用的 cursor") has_more: bool = Field(default=False, description="是否可能还有更多消息") # --------------------------------------------------------------------------- # 按会话拉取(GET /api/messages/by_session) # --------------------------------------------------------------------------- class MessagesBySessionResponse(BaseModel): """按会话拉取历史消息响应。""" messages: list[Message] = Field(default_factory=list) next_cursor: int = Field(description="下次拉取应使用的 cursor") has_more: bool = Field(default=False, description="是否可能还有更多消息") talker: str = Field(description="本次查询的会话对方 wxid") # --------------------------------------------------------------------------- # 消息搜索(GET /api/messages/search) # --------------------------------------------------------------------------- class MessageSearchResponse(BaseModel): """消息搜索响应。""" messages: list[Message] = Field(default_factory=list) total: int = Field(default=0, description="命中总数(可能大于返回条数)")