Skip to content

消息链与构建 (MessageChain) ​

聊天绝不仅仅是白纸黑字的枯燥文字!图文并茂、艾特特定对象、回复引用……为了让消息拼装像搭积木一样自然舒适,Eridanus 也引入了 MessageChain。


1. 什么是 MessageChain? ​

MessageChain 本质上是一个继承自 Python 原生 list 的富文本容器。它封装了一系列 MessageComponent(消息组件),具备像列表一样的 append()、extend() 与切片操作,并能自动将其序列化为符合 OneBot v11 标准的格式字典。

python
from developTools.message.message_chain import MessageChain
from developTools.message.message_components import Text, At, Image

# 自由组装一条包含艾特、文本与图片的富文本消息链
chain = MessageChain([
    At(qq=1840094972),
    Text(" 快看!这是主人新画的插画喵~
"),
    Image(file="data/pictures/cache/sample.jpg")
])

2. 常用操作与实用方法 ​

① 提取纯文本:fetch_text() ​

快速从图文混排的复杂消息链中抽取出所有的文字部分,自动拼接为纯字符串,常用于正则匹配或意图识别:

python
plain_string = chain.fetch_text()
# 返回:" 快看!这是主人新画的插画喵~
"

② 检查是否艾特了某人:is_at_user(user_id) ​

判断这条消息里是否显式艾特了特定的 QQ 号(如当前 Bot 自己的 QQ):

python
if event.message.is_at_user(bot_qq):
    await bot.send(event, "找本猫有什么事嘛?")

③ 提取其中的所有图片:get_images() ​

一键抓取消息中包含的所有 Image 组件列表,方便进行以图识番、AI 改图或保存缓存:

python
images = event.message.get_images()
for img in images:
    print("图片下载 URL 或本地路径:", img.file)

④ 链式拼接与运算 ​

支持像普通列表一样进行相加拼接:

python
greeting = MessageChain([Text("早上好!")])
extra = MessageChain([Image(file="https://example.com/sun.png")])
final_msg = greeting + extra

在日常开发中,建议优先使用 MessageChain 组装返回内容,既能规避 CQ 码转义字符的各种坑,代码可读性也极高!