处理消息
在不同平台中,一条消息可能会有承载有各种不同的表现形式,它可能是一段纯文本、一张图片、一段语音、一篇富文本文章,也有可能是多种类型的组合等等。
在 NoneBot 中,为确保消息的正常处理与跨平台兼容性,采用了扁平化的消息序列形式,即 Message
对象。消息序列是 NoneBot 中的消息载体,无论是接收还是发送的消息,都采用消息序列的形式进行处理。
认识消息类型
消息序列 Message
在 NoneBot 中,消息序列 Message
的主要作用是用于表达“一串消息”。由于消息序列继承自 List[MessageSegment]
,所以 Message
的本质是由若干消息段所组成的序列。因此,消息序列的使用方法与 List
有很多相似之处,例如切片、索引、拼接等。
在上一节的使用依赖注入中,我们已经通过依赖注入 CommandArg()
获取了命令的参数,它的类型即是消息序列。我们使用了消息序列的 extract_plain_text()
方法来获取消息序列中的纯文本内容。
消息段 MessageSegment
顾名思义,消息段 MessageSegment
是一段消息。由于消息序列的本质是由若干消息段所组成的序列,消息段可以被认为是构成消息序列的最小单位。简单来说,消息序列类似于一个自然段,而消息段则是组成自然段的一句话。同时,作为特殊消息载体的存在,绝大多数的平台都有着独特的消息类型,这些独特的内容均需要由对应的协议适配器所提供,以适应不同平台中的消息模式。这也意味着,你需要导入对应的协议适配器中的消息序列和消息段后才能使用其特殊的工厂方法。
消息段的类型是由协议适配器提供的,因此你需要参考协议适配器的文档并导入对应的消息段后才能使用其特殊的消息类型。
在上一节的使用依赖注入中,我们导入的为 nonebot.adapters.Message
抽象基类,因此我们无法使用平台特有的消息类型。仅能使用 str
作为纯文本消息回复。