# CQ码解析
此处简述已经支持解析为mirai`Message`的CQ码类型列表.
参数展示格式为:`[参数1(1)|参数1(2)](参数1含义)[参数2](参数2含义)`
每个中括号(`[]`)中代表一种参数,中括号后面的括号中为对此参数的描述。
参数名可能存在一些重名参数,例如at类型中,参数qq与参数at含义相同(例如`[CQ:at,qq=123456789]`和`[CQ:at,at=123456789]`)
则其中,中括号中第一个出现的参数即为推荐参数,例如at中,推荐使用`qq`作为参数名,其次才是`at`
- **at**
参数:
- \[`qq`|`at`](at的人的QQ号)
- **face**
参数:
- \[`face`|`id`](face表情的数字ID)
- **image**
参数:
- \[`file`|`image`](图片的ID或本地文件或网络文件。)
- \[`destruct`](是否为闪照,参数为true即为闪照,可忽略)
注①:file参数中的值,如果为`http`开头则会认定为网络图片。
注②:file参数中的值,图片ID一般为接收到的图片的ID,接收到的图片ID存在缓存期,默认缓存30分钟,每次获取此图片则会刷新此时间。也就是说当你30分钟内不再发送此图片,则之后也无法发送了。
注③:file参数中的值,在排除了网络图片后,会优先判断缓存,如果缓存中不存在才会去寻找本地文件,并根据本地文件路径将此图片计入缓存。
- **record**
参数:无
注①:暂不支持发送语音,因此语音会变为`\[语音]`字样的文本消息
- **rps**
参数:无
注①:暂不支持发送猜拳,因此语音会变为`\[猜拳]`字样的文本消息
- **dice**
参数:无
注①:暂不支持发送骰子,因此语音会变为`\[骰子]`字样的文本消息
- **shake**
参数:
- \[`type`](互动表情的数字类型,如果此参数忽略则会直接使用戳一戳)
- \[`id`](类型下的数字ID。默认-1)
参考(摘自Mirai源码:`HummerMessage.kt`):
```kotlin
/** 戳一戳 */
@JvmField
val Poke = PokeMessage("戳一戳", 1, -1)
/** 比心 */
@JvmField
val ShowLove = PokeMessage("比心", 2, -1)
/** 点赞 */
@JvmField
val Like = PokeMessage("点赞", 3, -1)
/** 心碎 */
@JvmField
val Heartbroken = PokeMessage("心碎", 4, -1)
/** 666 */
@JvmField
val SixSixSix = PokeMessage("666", 5, -1)
/** 放大招 */
@JvmField
val FangDaZhao = PokeMessage("放大招", 6, -1)
/** 宝贝球 (SVIP) */
@JvmField
val BaoBeiQiu = PokeMessage("宝贝球", 126, 2011)
/** 玫瑰花 (SVIP) */
@JvmField
val Rose = PokeMessage("玫瑰花", 126, 2007)
/** 召唤术 (SVIP) */
@JvmField
val ZhaoHuanShu = PokeMessage("召唤术", 126, 2006)
/** 让你皮 (SVIP) */
@JvmField
val RangNiPi = PokeMessage("让你皮", 126, 2009)
/** 结印 (SVIP) */
@JvmField
val JieYin = PokeMessage("结印", 126, 2005)
/** 手雷 (SVIP) */
@JvmField
val ShouLei = PokeMessage("手雷", 126, 2004)
/** 勾引 */
@JvmField
val GouYin = PokeMessage("勾引", 126, 2003)
/** 抓一下 (SVIP) */
@JvmField
val ZhuaYiXia = PokeMessage("抓一下", 126, 2001)
/** 碎屏 (SVIP) */
@JvmField
val SuiPing = PokeMessage("碎屏", 126, 2002)
/** 敲门 (SVIP) */
@JvmField
val QiaoMen = PokeMessage("敲门", 126, 2002)
```
- **anonymous**
参数:无
注①:匿名消息暂时无效
- **music**
参数:
- \[`type`](音乐类型)
注①:mirai中没有直接进行的music分享解析,可参考下文的XML类型。
注②:后续可能会追加预设解析。
注③:目前阶段music类型CQ码会被解析为文本消息:`[$type音乐]`
- **emoji**
参数:
- \[`id`](emoji的id)
注①:emoji直接发送就行,用不着cq码,所以这个类型的CQ码会被解析为文本消息:`emoji($id)`
- **location**
参数:
- \[`lat`](纬度)
- \[`lon`](经度)
- \[`title`](分享地点的名称)
- \[`content`](分享地点的具体地址)
注①:会被直接解析为文本消息:`位置($lat,$lon)[$title]:$content`
- **sign**
参数:无
注①:不支持解析签到,会被直接解析为文本消息:`\[签到]`
- **show**
参数:无
注①:会被直接解析为空消息,即忽略
- **contact**
参数:
- \[`id`](联系人分享类型)
注①:暂不支持此类型解析,可考虑参考XML消息。会被解析为文本消息:`$typeName: $id`
- **xml**
参数:
- \[`action`](一般为点击这条消息后跳转的链接)
- \[`actionData`]()
- \[`brief`](摘要, 在官方客户端内消息列表中显示)
- \[`flag`](未知, mirai的XmlMessageBuilder中的可选参数)
- \[`url`](//TODO: 2019/12/3 unknown)
- \[`sourceName`](sourceName 好像是名称)
- \[`sourceIconURL`](sourceIconURL 好像是图标)
- \[bg](未知, mirai的XmlMessageBuilder中的可选参数)
- \[layout](未知, mirai的XmlMessageBuilder中的可选参数)
- \[picture_coverUrl](未知, mirai的XmlMessageBuilder中`item{ this.picture(...) }`的可选参数)
- \[summary_text](未知, mirai的XmlMessageBuilder中`item{ this.summary(...) }`的的可选参数)
- \[summary_color](未知, mirai的XmlMessageBuilder中`item{ this.summary(...) }`的的可选参数)
- \[title_text](未知, mirai的XmlMessageBuilder中`item{ this.title(...) }`的的可选参数)
- \[title_size](未知, mirai的XmlMessageBuilder中`item{ this.title(...) }`的的可选参数)
- \[title_color](未知, mirai的XmlMessageBuilder中`item{ this.title(...) }`的的可选参数)
注①:以上参数都是mirai定义的,有注释的我都写上了
注②:以上参数还挺多的,我可能会在cqCodeUtils模组或者此组件中提供模板类
- **app** 与 **json**
参数:
- \[`content`](json内容,默认为`{}`)
注①:因为说json大部分都是小程序类型,因此app与json合并解析,使用的都是`LightApp`类。
- **quote**
参数:
- \[`id`|`quote`](引用回复的消息ID)
注①:使用方法即创建"quote"类型的CQ码放在消息开头即可。参数id为需要回复的消息的id。由于消息存在缓存,因此接收到消息30分钟内有效。例如:`\[CQ:quote,id={msgId}]`
- **其他**
其他未提及的直接做toString处理。但是你可以追加一些额外的解析规则。
你可以通过`CQCodeParsingHandler.registerHandler(type, function)`来注册一个除上述解析以外的任意额外解析。
※ 此类仅存在于Mirai组件中。
- 前言
- 简单介绍
- 我该如何阅读文档
- 视频教程
- 安装与使用
- 开源协议
- 免责&捐助
- 注意事项
- 版本命名规则简介
- 主要功能版本历史
- 功能指引
- 通用API与功能
- 国际化语言
- 异常
- 消息监听
- @Listen
- @OnListen模板
- @Filter
- 消息参数截取
- @Spare
- @Constr
- @Ignore
- @ListenBreak
- @ListenBreakPlugin
- @ListenBody
- 监听响应
- 成功判定与返回值
- 监听上下文
- 动态参数
- 监听消息API
- 异步监听 @Async
- 限流监听 @Limit
- 自定义Http送信器
- 枚举与类型
- 送信器
- SENDER
- SETTER
- GETTER
- 返回值
- 其他位置
- 日志与日志拦截
- 异常处理
- 依赖注入
- 自定义依赖获取
- 批量依赖载入
- 注意事项
- 常量
- 定时任务
- 自定义过滤
- 拦截器
- 拦截器总定义
- 上下文对象总定义
- 监听消息拦截
- 送信器拦截
- 监听函数拦截
- CAT码
- CQ码
- CQCode
- CQ码工具类
- CQ扩展工具类
- AppendList拼接链
- 高级内容
- 阻断机制
- 截断机制
- 自定义枚举类型
- 枚举工厂
- byName注解
- 自定义注解
- 配置
- 文件配置
- 注解配置
- 参数配置
- 多配置
- 多账号
- 自定义账号管理器
- 小心!
- 核心版本与组件如何升级核心
- 核心版本迭代指南
- 核心
- 更新日志
- jar包与依赖
- 监听消息类结构图
- 快速启动
- 模组与扩展
- 模组开发
- 现有模组
- 通用模组-延时任务
- 通用模组-CQ码工具
- 转义器
- CQ码操作工具类
- CQ码模板-CodeTemplate
- CQ码载体-KQCode
- CQ码构建器
- MQ码工具类
- 通用模组-redis-bot管理器
- 通用模组-Debugger
- Debugger-common模块
- Debugger-server模块
- Debugger-client模块
- 通用模组-钉钉机器人
- 组件-Mirai(JVM)
- 快速开始(1.13+)
- springboot-starter
- 注意事项
- 配置
- 额外的内容
- 快速回复
- 额外监听
- CQ码解析
- 组件-酷Q(QQ)-CQ HTTP API(基本失效)
- 快速开始(推荐)
- 快速开始(1.7.x以下,不推荐)
- 快速开始(Springboot启动器)
- 启动器、启动接口与配置类
- 配置
- 文件配置
- 注意事项
- 更新日志
- 额外的内容
- 自定义额外监听
- CQ送信器
- 元事件
- 监听消息类结构图
- 组件-酷Q(QQ)-JCQ(失效)
- 快速开始
- 更新日志
- 额外的内容
- JCQ日志
- 配置
- 注意事项
- 监听消息类结构图
- 组件-酷Q(QQ)-HTTP TO CQ(失效)
- 快速开始(核心1.7.x及以下)
- 启动器、启动接口与配置类
- 配置
- 文件配置
- 注意事项
- 更新日志
- 监听消息类结构图
- 组件-酷Q(QQ)-LEMOC (失效)
- 快速开始(核心1.7.x及以下)
- 配置
- 注意事项
- 更新日志
- 监听消息类结构图
- Springboot快速启动器
- 常见问题汇总
- BUG反馈
- 更新计划总览