字符串格式 #
字符串格式是 CKYU 原生所使用的消息格式,在本标准中将继续使用以保持兼容。在字符串格式中,无论纯文本还是图片、表情、链接分享等多媒体内容都放在同一个字符串里,即,一条消息对应一个字符串。以下是一个字符串格式消息的例子:
[CQ:face,id=178]看看我刚拍的照片[CQ:image,file=123.jpg]
在调用 API 发送这段消息时,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 码功能请参考 消息段类型。
WARNING
CQ 码中不应有多余的空格,例如不应该使用 [CQ:face, id=178]
。
CQ 码的参数值可以包含空格、换行、除 [],&
之外的特殊符号等。在解析时,应直接取 [CQ:
后、第一个 ,
或 ]
前的部分为功能名,第一个 ,
之后到 ]
之间的部分为参数,按 ,
分割后,每个部分第一个 =
前的内容为参数名,之后的部分为参数值。例如 [CQ:share,title=标题中有=等号,url=http://baidu.com]
中,功能名为 share
,title
参数值为 标题中有=等号
,url
参数值为 http://baidu.com
。
转义 #
CQ 码中包含一些特殊字符:[
、]
、,
等,而 CQ 码又是可能混杂在纯文本内容之中的,因此消息中的纯文本内容需要对特殊字符进行转义,以避免歧义。具体的转义规则如下:
转义前 | 转义后 |
---|---|
& | & |
[ | [ |
] | ] |
例如,一个纯文本消息转义前内容如下:
- [x] 使用 `&data` 获取地址
转义后如下:
- [x] 使用 `&data` 获取地址
另一方面,CQ 码内部的参数值也可能出现特殊字符,也是需要转义的。由于 ,
(半角逗号)在 CQ 码中用于分隔参数,因此除了上面的转义规则,还需要对 ,
进行转义,如下:
转义前 | 转义后 |
---|---|
& | & |
[ | [ |
] | ] |
, | , |
例如,一个链接分享消息的 CQ 码可能如下:
[CQ:share,title=震惊,小伙睡觉前居然...,url=http://baidu.com/?a=1&b=2]