# 快速开始
## 一、**安装**
### 1\. **下载并安装 酷Q**
前往酷Q[官方下载地址](https://cqp.cc/t/23253)下载酷Q应用,并安装(启动一次),然后关闭。
<br>
### 2\. **下载并安装 JCQ插件**
关于JCQ的安装、使用与配置,请参考JCQ的官方社区贴 [https://cqp.cc/t/37318](https://cqp.cc/t/37318)
### 3\. **创建Java项目**
(此教程为核心1.11.x以上版本。如何判断核心版本参考[核心版本系与升级](.组件如何升级核心.md/))
你可以使用一切支持的方式来自动构建项目,以下将会举几个例子:
>[danger] 在你创建Java项目之前,我要先替前提JCQ声明:JCQ仅支持1.6以上的、32位的JDK(jre),而simple-robot主要基于java1.8编写,因此请准备好一个32位的、1.8或以上版本的JDK(jre)
>[info]maven仓库地址参考:
> ①. [https://search.maven.org/artifact/io.github.fortescarlet.simple-robot-component/component-jcq](https://search.maven.org/artifact/io.github.fortescarlet.simple-robot-component/component-jcq)
> ②. [https://mvnrepository.com/artifact/io.github.ForteScarlet.simple-robot-component/component-jcq](https://mvnrepository.com/artifact/io.github.ForteScarlet.simple-robot-component/component-jcq)
#### **①. Maven**
```xml
<dependency>
<groupId>io.github.fortescarlet.simple-robot-component</groupId>
<artifactId>component-jcq</artifactId>
<version>${version}</version>
</dependency>
```
#### **②. Gradle**
```
compile group: 'io.github.fortescarlet.simple-robot-component', name: 'component-jcq', version: '${version}'
```
#### **③. Grape**
```
@Grapes(
@Grab(group='io.github.fortescarlet.simple-robot-component', module='component-jcq', version='${version}')
)
```
<br>
#### 以maven为例
根据JCQ所提供的maven-demo稍作修改,将pom.xml修改成大致如下:
```xml
<?xml version="1.0" encoding="UTF-8"?>
<project xmlns="http://maven.apache.org/POM/4.0.0"
xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/xsd/maven-4.0.0.xsd">
<modelVersion>4.0.0</modelVersion>
<groupId>com.test</groupId>
<artifactId>demo</artifactId>
<version>1.0</version>
<properties>
<component-jcq.version>0.1-1.11</component-jcq.version>
</properties>
<dependencies>
<!-- component-JCQ组件坐标 -->
<dependency>
<groupId>io.github.fortescarlet.simple-robot-component</groupId>
<artifactId>component-jcq</artifactId>
<version>${component-jcq.version}</version>
</dependency>
</dependencies>
<build>
<!-- 此处填写打包后的jar文件名,默认为当前项目的坐标名称 -->
<finalName>${groupId}.${artifactId}</finalName>
<plugins>
<plugin>
<groupId>org.apache.maven.plugins</groupId>
<artifactId>maven-dependency-plugin</artifactId>
<executions>
<execution>
<id>copy-dependencies</id>
<phase>prepare-package</phase>
<goals>
<goal>copy-dependencies</goal>
</goals>
<configuration>
<outputDirectory>${project.build.directory}/lib</outputDirectory>
<overWriteReleases>false</overWriteReleases>
<overWriteSnapshots>false</overWriteSnapshots>
<overWriteIfNewer>true</overWriteIfNewer>
</configuration>
</execution>
</executions>
</plugin>
</plugins>
</build>
</project>
```
创建与最终导出的文件名相对应的包路径与主类,以上述例子的话即`com.test.Demo`,并继承一个抽象类`com.simplerobot.component.jcq.JCQMainApplication`
```java
public class Demo extends JCQMainApplication {
// 啥也不用写
}
```
一般来讲,如果没有什么需要进行额外操作或配置的东西,则无需再编写其他内容。如果想要进行本地测试,可以参照官方Demo中的测试方式:
```java
public class Demo extends JCQMainApplication {
/**
* 用main方法调试可以最大化的加快开发效率,检测和定位错误位置<br/>
* 以下就是使用Main方法进行测试的一个简易案例
*
* @param args 系统参数
*/
public static void main(String[] args) {
// CQ此变量为特殊变量,在JCQ启动时实例化赋值给每个插件,而在测试中可以用CQDebug类来代替他
CQ = new CQDebug();//new CQDebug("应用目录","应用名称") 可以用此构造器初始化应用的目录
CQ.logInfo("[JCQ] TEST Demo", "测试启动");// 现在就可以用CQ变量来执行任何想要的操作了
// 要测试主类就先实例化一个主类对象
Demo demo = new Demo();
// 下面对主类进行各方法测试,按照JCQ运行过程,模拟实际情况
demo.startup();// 程序运行开始 调用应用初始化方法
demo.enable();// 程序初始化完成后,启用应用,让应用正常工作
// 开始模拟发送消息
// 模拟私聊消息
// 开始模拟QQ用户发送消息,以下QQ全部编造,请勿添加
demo.privateMsg(0, 10001, 2234567819L, "小姐姐约吗", 0);
demo.privateMsg(0, 10002, 2222222224L, "喵呜喵呜喵呜", 0);
demo.privateMsg(0, 10003, 2111111334L, "可以给我你的微信吗", 0);
demo.privateMsg(0, 10004, 3111111114L, "今天天气真好", 0);
demo.privateMsg(0, 10005, 3333333334L, "你好坏,都不理我QAQ", 0);
// 模拟群聊消息
// 开始模拟群聊消息
demo.groupMsg(0, 10006, 3456789012L, 3333333334L, "", "菜单", 0);
demo.groupMsg(0, 10008, 3456789012L, 11111111114L, "", "小喵呢,出来玩玩呀", 0);
demo.groupMsg(0, 10009, 427984429L, 3333333334L, "", "[CQ:at,qq=2222222224] 来一起玩游戏,开车开车", 0);
demo.groupMsg(0, 10010, 427984429L, 3333333334L, "", "好久不见啦 [CQ:at,qq=11111111114]", 0);
demo.groupMsg(0, 10011, 427984429L, 11111111114L, "", "qwq 有没有一起开的\n[CQ:at,qq=3333333334]你玩嘛", 0);
// ......
// 依次类推,可以根据实际情况修改参数,和方法测试效果
// 以下是收尾触发函数
demo.disable();// 实际过程中程序结束不会触发disable,只有用户关闭了此插件才会触发
demo.exit();// 最后程序运行结束,调用exit方法
}
}
```
然后在此`Demo`类旁边创建一个`listener`包,新建一个`TestListener`类,来写一个监听器:
> 就像使用`simple-robot`的其他组件一样
```java
/**
* Demo监听器类
* @author <a href="https://github.com/ForteScarlet"> ForteScarlet </a>
*/
@Beans
public class TestListener {
/**
* Demo监听器,监听开头为'hello'的私信消息并复读
*/
// 监听私信消息
@Listen(MsgGetTypes.privateMsg)
// 监听消息开头为"hello"的消息
@Filter(value = "hello", keywordMatchType = KeywordMatchType.STARTS_WITH)
public void priTest(PrivateMsg pmsg, MsgSender sender){
// 复读私信消息
sender.SENDER.sendPrivateMsg(pmsg, pmsg.getMsg());
}
}
```
然后使用Maven的package进行打包。由于添加了`maven-dependency-plugin`插件,打包后的结果大致为:
![](https://i.vgy.me/xDHORy.png)
可以看到,`com.test.demo.jar`即为项目jar包,而`lib/`文件夹下的内容便是maven中所导入的依赖。
此时,先**删除**`lib/`目录下的`jcq-coolq-x.x.x.jar`文件。
#### JCQ Json配置
JCQ需要有一个`.json`格式的配置文件,具体格式可以参考JCQ的官方介绍:[https://gitee.com/meowy/JCQ-CoolQ#json-%E6%96%87%E4%BB%B6%E4%BB%8B%E7%BB%8D](https://gitee.com/meowy/JCQ-CoolQ#json-%E6%96%87%E4%BB%B6%E4%BB%8B%E7%BB%8D)
根据上述示例,创建一个`com.test.demo.json`文件(根据个人经验,此配置文件似乎需要使用`GBK`编码)
内容如下:
```json
// 酷Q 的Json文件支持以 // 开头的注释。
// 打包前,应用的 .jar, .json 的文件名须以appid命名,应用AppInfo返回的内容须改为appid
// 如 appid=com.example.demo, 则jar及json文件需分别命名为 com.example.demo.jar、com.example.demo.json
{
"ret": 1, // 返回码,固定为1
"apiver": 9, // Api版本,本SDK为9
"name": "demo", // 应用名称
"version": "1.0.0", // 应用版本
"version_id": 1, // 应用顺序版本(每次发布时至少+1)
"author": "ForteScarlet", // 应用作者
//"path": "lib",// 应用lib加载处,默认插件同名文件夹目录下lib文件夹,此目录可以填相对路径和绝对路径,相对:应用同名文件夹
//"class": "com.test.demo", // 应用加载主类,默认使用appid加载,如需使用则删除前面注释
"description": "这是个JavaDemo插件",
"event": [ // 事件列表,同一事件类型可重复定义(发布前请删除无用事件)
{
"id": 1, // 事件ID
"type": 21, // 事件类型
"name": "私聊消息处理", // 事件名称
"function": "privateMsg", // 事件对应函数
// 事件优先级(参见 cq.im/deveventpriority)
"priority": 30000
},
{
"id": 2,
"type": 2,
"name": "群消息处理",
"function": "groupMsg",
"priority": 30000
},
{
"id": 3,
"type": 4,
"name": "讨论组消息处理",
"function": "discussMsg",
"priority": 30000
},
{
"id": 4,
"type": 11,
"name": "群文件上传事件处理",
"function": "groupUpload",
"priority": 30000
},
{
"id": 5,
"type": 101,
"name": "群管理变动事件处理",
"function": "groupAdmin",
"priority": 30000
},
{
"id": 6,
"type": 102,
"name": "群成员减少事件处理",
"function": "groupMemberDecrease",
"priority": 30000
},
{
"id": 7,
"type": 103,
"name": "群成员增加事件处理",
"function": "groupMemberIncrease",
"priority": 30000
},
{
"id": 10,
"type": 201,
"name": "好友已添加事件处理",
"function": "friendAdd",
"priority": 30000
},
{
"id": 8,
"type": 301,
"name": "好友添加请求处理",
"function": "requestAddFriend",
"priority": 30000
},
{
"id": 9,
"type": 302,
"name": "群添加请求处理",
"function": "requestAddGroup",
"priority": 30000
},
{
"id": 1001,
"type": 1001,
"name": "酷Q启动事件",
"priority": 30000,
"function": "startup"
},
{
"id": 1002,
"type": 1002,
"name": "酷Q关闭事件",
"priority": 30000,
"function": "exit"
},
{
"id": 1003,
"type": 1003,
"name": "应用已被启用",
"priority": 30000,
"function": "enable"
},
{
"id": 1004,
"type": 1004,
"name": "应用将被停用",
"priority": 30000,
"function": "disable"
}
],
"status": [
// 悬浮窗状态(见 com.example.status 样例)
],
"auth": [ // 应用权限(发布前请删除无用权限)
20, //[敏感]取Cookies getCookies / getCsrfToken
30, //接收语音 getRecord
101, //发送群消息 sendGroupMsg
103, //发送讨论组消息 sendDiscussMsg
106, //发送私聊消息 sendPrivateMsg
110, //发送赞 sendLike
120, //置群员移除 setGroupKick
121, //置群员禁言 setGroupBan
122, //置群管理员 setGroupAdmin
123, //置全群禁言 setGroupWholeBan
124, //置匿名群员禁言 setGroupAnonymousBan
125, //置群匿名设置 setGroupAnonymous
126, //置群成员名片 setGroupCard
//127, //[敏感]置群退出 setGroupLeave
128, //置群成员专属头衔 setGroupSpecialTitle
130, //取群成员信息 getGroupMemberInfoV2 / getGroupMemberInfo
131, //取陌生人信息 getStrangerInfo
140, //置讨论组退出 setDiscussLeave
150, //置好友添加请求 setFriendAddRequest
151, //置群添加请求 setGroupAddRequest
160, //取群成员列表 getGroupMemberList
161, //取群列表 getGroupList
180 //撤回消息 deleteMsg
]
}
```
需要注意的是,上述文件中的`event`(事件列表)参数中的各个`function`(事件函数名)请不要随意修改,否则可能会导致监听失效。
### **4\. 使用**
前往路径:`${酷Q根路径}\data\app\com.sobte.cqp.jcq\app`,即JCQ插件的目录下,将上述的`com.test.demo.jar` 与 `com.test.demo.json`文件粘贴进来,并创建一个文件夹`com.test.demo`,如图所示:
![](https://i.vgy.me/JPKSko.png)
其中,`com.test.demo`文件夹中,再创建一个`lib`文件夹,并将之前打包后得到的lib文件夹中的所有`.jar`依赖拷贝至此路径下。(**记得删除`jcq-coolq-x.x.x.jar`文件**),结果大致如图所示:
![](https://i.vgy.me/ZsePxi.png)
结束后,启动酷Q,并启用插件:
![](https://i.vgy.me/QpgBpK.png)
![](https://i.vgy.me/yKBZju.png)
如果启动过程没有出现异常,且控制台中的日志正常,则说明启动成功了,可以进行功能测试与进一步的开发了。
## **5\. 失败了?**
如果跟着上述流程完整无误的操作却无法成功,也不要气馁,尝试根据[JCQ社区贴](https://cqp.cc/t/37318) 与 [常见问题汇总](./%E5%B8%B8%E8%A7%81%E9%97%AE%E9%A2%98%E6%B1%87%E6%80%BB.md)进行排查或者加入QQ群`782930037`进行咨询。
- 前言
- 简单介绍
- 我该如何阅读文档
- 视频教程
- 安装与使用
- 开源协议
- 免责&捐助
- 注意事项
- 版本命名规则简介
- 主要功能版本历史
- 功能指引
- 通用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反馈
- 更新计划总览