当前位置: 首页 > 工具软件 > cq > 使用案例 >

nonebot发送CQ码

许奇
2023-12-01

使用MessageSegment发送CQ码

经常在群里看到有人问nonebot怎么发图片,发语音等等,其实都可以通过CQ码发送,在nonebot第一代的时候可以通过调用MessageSegment下的方法发送图片等。
发送图片的方法如下

MessageSegment.image(...)

那为什么v2反而没有了呢?
我一开始也很疑惑,但后来就发现因为v2集成了更多的adapter,cqhttp也分离出来,一般默认导入的MessageSegment如下所示

from nonebot.adapters import MessageSegment

这个基类是没有封装cqhttp的API的,因此需要如下所示导入

from nonebot.adapters.cqhttp import MessageSegment

这时就可以调用类似MessageSegment.image(…)发送图片或其他类型的消息
进入MessageSegment就可以看到封装的各种消息类型
(有时候源码确实比文档好用)

更一般的方法

如果你使用onebot,那么nonebot更偏向适配onebot的消息类型,但是如果你使用go-cqhttp,有些消息类型并没有被适配,这时我们可以用更一般的方式给go-cqhttp发送数据,给出实例如下

GroupIncrease = on_notice()
"""群成员增加事件"""


@GroupIncrease.handle()
async def handle_first_receive(bot: Bot, event: GroupIncreaseNoticeEvent, state: T_State):
    rely = [
        {
            "type": "text",
            "data": {
                "text": "欢迎"
            }
        },
        {
            "type": "at",
            "data": {
                "qq": f"{event.user_id}"
            }
        },
        {
            "type": "text",
            "data": {
                "text": "进群"
            }
        },
        {
            "type": "image",
            "data": {
                "file": f"https://q4.qlogo.cn/headimg_dl?dst_uin={event.user_id}&spec=640"
            }
        }
    ]
    await bot.send(event=event, message=rely)

基础模板就是

        {
            "type": ,#消息的类型,官方给出了各种类型的CQ码
            "data": {
                #这里对应不同类型消息的参数
            }
        }

go-cqhttp文档给出的CQ码
如果需要将多种消息合并发送只需要用数组封装即可,发送给go-cqhttp的数据也是数组封装的,所以即使只有一种消息类型也需要数组封装。

 类似资料: