Skip to content

字符串格式

字符串格式是 CKYU 原生所使用的消息格式,在本标准中将继续使用以保持兼容。在字符串格式中,无论纯文本还是图片、表情、链接分享等多媒体内容都放在同一个字符串里,即,一条消息对应一个字符串。以下是一个字符串格式消息的例子:

[CQ:face,id=178]看看我刚拍的照片[CQ:image,file=123.jpg]

在调用 API 发送这段消息时,JSON 如下:

json
{
    "user_id": 10001000,
    "message": "[CQ:face,id=178]看看我刚拍的照片[CQ:image,file=123.jpg]"
}

CQ 码格式

消息中的多媒体内容使用 CQ 码来表示,形如 [CQ:face,id=178]。其中,[CQ:] 是固定格式;face 是「功能名」,除了 face 还有许多不同的功能名;id=178 是「参数」,某些功能不需要参数,而另一些需要多个参数,当有多个参数时,参数间使用逗号分隔。

一些 CQ 码的例子如下:

[CQ:shake]
[CQ:face,id=178]
[CQ:share,title=标题,url=http://baidu.com]

更多 CQ 码功能请参考 消息段类型

注意

CQ 码中不应有多余的空格,例如不应该使用 [CQ:face, id=178]

CQ 码的参数值可以包含空格、换行、除 [],& 之外的特殊符号等。在解析时,应直接取 [CQ: 后、第一个 ,] 前的部分为功能名,第一个 , 之后到 ] 之间的部分为参数,按 , 分割后,每个部分第一个 = 前的内容为参数名,之后的部分为参数值。例如 [CQ:share,title=标题中有=等号,url=http://baidu.com] 中,功能名为 sharetitle 参数值为 标题中有=等号url 参数值为 http://baidu.com

转义

CQ 码中包含一些特殊字符:[], 等,而 CQ 码又是可能混杂在纯文本内容之中的,因此消息中的纯文本内容需要对特殊字符进行转义,以避免歧义。具体的转义规则如下:

转义前转义后
&&
[[
]]

例如,一个纯文本消息转义前内容如下:

- [x] 使用 `&data` 获取地址

转义后如下:

- [x] 使用 `&data` 获取地址

另一方面,CQ 码内部的参数值也可能出现特殊字符,也是需要转义的。由于 ,(半角逗号)在 CQ 码中用于分隔参数,因此除了上面的转义规则,还需要对 , 进行转义,如下:

转义前转义后
&&
[[
]]
,,

例如,一个链接分享消息的 CQ 码可能如下:

[CQ:share,title=震惊,小伙睡觉前居然...,url=http://baidu.com/?a=1&b=2]

上一节下一节
消息概述数组格式