Files
mai-bot/src/common/data_models/message_data_model_ref.md
2025-09-09 22:34:10 +08:00

1.8 KiB
Raw Blame History

对于message_data_model.pyclass ReplyContent的规划解读

分类讨论如下:

  • ReplyContent.TEXT: 单独的文本,_level = 0contentstr类型。
  • ReplyContent.IMAGE: 单独的图片,_level = 0contentstr类型图片base64
  • ReplyContent.EMOJI: 单独的表情包,_level = 0contentstr类型图片base64
  • ReplyContent.VOICE: 单独的语音,_level = 0contentstr类型语音base64
  • ReplyContent.HYBRID: 混合内容,_level = 0
    • 其应该是一个列表,列表内应该只接受str类型的内容(图片和文本混合体)
  • ReplyContent.FORWARD: 转发消息,_level = n
    • 其应该是一个列表,列表接受str类型(图片/文本),ReplyContent类型(嵌套转发,嵌套有最高层数限制)
  • ReplyContent.COMMAND: 指令消息,_level = 0
    • 其应该是一个列表,列表内应该只接受Dict类型的内容

未来规划:

  • ReplyContent.AT 单独的艾特,_level = 0contentstr类型用户ID

内容构造方式:

  • 对于TEXT, IMAGE, EMOJI, VOICE,直接传入对应类型的内容,且content应该为str
  • 对于COMMAND,传入一个字典,字典内的内容类型应符合上述规定。
  • 对于HYBRID, FORWARD,传入一个列表,列表内的内容类型应符合上述规定。

因此,我们的类型注解应该是:

from typing import Union, List, Dict

ReplyContentType = Union[
    str,  # TEXT, IMAGE, EMOJI, VOICE
    List[Union[str, 'ReplyContent']],  # HYBRID, FORWARD
    Dict  # COMMAND
]

现在_level被移除了,在解析的时候显式地检查内容的类型和结构即可。

send_api的custom_reply_set_to_stream仅在特定的类型下提供reply)message