Skip to content
This repository has been archived by the owner on Nov 4, 2020. It is now read-only.

Commit

Permalink
1.修改了很多
Browse files Browse the repository at this point in the history
  • Loading branch information
CaoMeiYouRen committed Jul 15, 2019
1 parent 5fed980 commit b88e47a
Show file tree
Hide file tree
Showing 20 changed files with 118 additions and 585 deletions.
3 changes: 2 additions & 1 deletion .gitignore
Original file line number Diff line number Diff line change
Expand Up @@ -31,4 +31,5 @@ ssl
*.key
*.pem
sessions
/test
/test
*.assets
75 changes: 68 additions & 7 deletions Readme.md
Original file line number Diff line number Diff line change
Expand Up @@ -7,30 +7,91 @@
## 项目特色

1. 仿官方SDK风格,熟悉易语言版的很快就可以上手。
3. 仿酷Q目录设计,可以像原生酷Q插件那样载入插件,也便于插件的开发

2. 仿酷Q目录设计,可以像原生酷Q插件那样载入插件,也便于插件的开发

3. 可以使用JavaScript和TypeScript进行开发,具有一定的跨平台性

## 项目目录

- /src 源代码
- /app 插件存放的位置
- /com.example.demo 应用根目录
- /data 应用数据存放目录
- index.json/index.jsonc 插件配置项
- index.ts/index.ts 插件入口文件
- /conf
- setting.json/setting.jsonc CQWebSocket 连接配置,用于和coolq-http-api建立连接
- /utils 一些工具类
- index.ts 项目运行入口
- /dist 最终需要运行的文件


## 快速开始

1. clone本项目

2. 修改src/conf/setting.jsonc中的accessToken等,若不需要修改可以默认
2. 修改src/conf/setting.jsonc中的**accessToken**【重要】,其他参数可以默认

3. 酷Q安装coolq-http-api,修改 酷Q Pro\data\app\io.github.richardchien.coolqhttpapi\config 下的相关配置,其中access_token与上方accessToken保持一致
4. 执行 npm run build 生成dist文件
5. 执行dist/index.js,开发环境下可以使用nodemon,生产环境可以使用pm2
6. 在控制台查看效果

4. 酷Q启动coolq-http-api,注意,如果修改access_token时插件已启用,请重载应用或重启酷Q

5. 执行 npm run build 生成dist文件

6. 执行dist/index.js,开发环境下可以使用nodemon,生产环境可以使用pm2等

7. 在控制台查看效果(如果出现 [WebSocket] 连接成功 即为成功)

8. 控制台效果

![image](https://wx3.sinaimg.cn/mw690/006W7JQLly1g50s3grxlrj314d09pn0r.jpg)

![image](https://wx2.sinaimg.cn/mw690/006W7JQLly1g50s3xkx9tj30kj05lwey.jpg)

## 安装插件

1. 所有插件放在src/app目录下,新建一个由appId命名的文件夹(下称为应用根目录),入口文件必须为index.js/index.ts(编译后均为index.js),配置项为index.json或index.jsonc【关于jsonc需要特别解释下,就是支持注释的json,在VScode中为JSON with Comments格式】
1. 所有插件放在src/app目录下,新建一个由appId命名的文件夹(下称为应用根目录),入口文件必须为index.js/index.ts(编译后均为index.js),配置项为index.json或index.jsonc【关于jsonc需要特别解释下,就是支持注释的json,即VScode中的JSON with Comments格式】

2. 应用所有数据需存放在 [appId]/data/ 目录下,以免给用户造成困扰
3. 考虑到插件可能会有自己的node_modules依赖,将依赖也装在 项目根目录 下即可(注意,如果安装在项目根目录有问题,也可安装在 应用根目录 ,只不过src和dist目录下均需安装)
4. 注意:最终执行的文件为dist目录下的内容,因此如果有除了json/jsonc格式以外的文件需要从src目录下复制,请修改gulpfile.js文件

## 插件开发

对于开发者,本人也提供了demo,
对于开发者,本人也提供了demo,建议使用TypeScript进行开发,当然也支持用JavaScript开发

以下是一个空的demo示例,更详细内容请查看本项目的src/app/下面的demo

```typescript
class App extends CQApp {
constructor() {
super('com.example.demo', __dirname)
//每一个CQApp对象身上都挂载着一个属性:CQ,里面封装了所有api相关操作,是核心操作类,更多内容请直接查看注释
this.CQ.setDebug(false)//为了方便调试,本人提供了CQ.setDebug()方法来设置插件的运行环境,在debug模式下将不会执行具体的api操作,可以在不影响其他插件的情况下进行逻辑调试;同时也提供了CQ.getDebug()来获取当前的运行环境,开发者可以针对此做一些操作
this.isEnable = true//注意,只有isEnable为true的插件才会载入,可以将isEnable置为false不载入某插件
}
}
const app = new App()//类名可以随意
export { app }//导出模块的名称必须为app
/**
*仅在debug模式下执行,若不需要也可注释掉
*请注意,因为debug的内容在此处就会执行,因此是最先执行的内容!
*/
if (app.CQ.getDebug()) {
app.debug()
}
```

1. 关于应用加载:符合以下条件之一的应用不会载入
1. AppID与其根文件夹名称不同
2. CQ_API版本不为9
3. HTTP_API版本不为4
4. 应用未启用(isEnable=false)

2. api权限:在应用根目录的index.json中配置,对于没有权限的api调用不会执行
3. 插件事件优先级:在应用根目录的index.json中配置,数值越低优先级越高,高优先级的可以截断消息。注意:本项目中并未对插件事件优先级做限制,而且也不限制优先级为10000时就不能截断消息,但为了与官方要求一致,建议不要使用10000、20000、30000、40000、50000以外的优先级,并且不得在优先级为10000时截断消息
4. 日志:日志文件会在同级运行目录生成log文件夹。在log文件夹下有app和debug两个文件夹,分别是生产环境和开发环境的日志,会记录下api的调用和应用接收到的事件信息。当插件处于debug模式时,所有日志都在debug文件夹下;生产环境下,所有日志都在app目录下

## 项目依赖

Expand Down
22 changes: 7 additions & 15 deletions dist/app/com.example.demo/index.js
Original file line number Diff line number Diff line change
Expand Up @@ -8,7 +8,6 @@ var __awaiter = (this && this.__awaiter) || function (thisArg, _arguments, P, ge
});
};
Object.defineProperty(exports, "__esModule", { value: true });
// import * as CQ from '../../bin/CQ.old'
const cq_robot_1 = require("cq-robot");
class App extends cq_robot_1.CQApp {
constructor() {
Expand All @@ -17,10 +16,9 @@ class App extends cq_robot_1.CQApp {
this.isEnable = true; //注意,只有isEnable为true的插件才会载入,可以将isEnable置为false不载入某插件
}
debug() {
// console.log('debug()方法只会在debug模式下执行')
this.privateMsg('test', 1, 996881204, '这是一条私聊消息', 1);
this.groupMsg('test', 1, 947983200, 996881204, '', '这是一条群消息', 1);
this.discussMsg('test', 1, 580771123, 996881204, '这是一条讨论组消息', 1);
this.privateMsg('test', 1, 10001, '这是一条私聊消息', 1);
this.groupMsg('test', 1, 10001, 10001, '', '这是一条群消息', 1);
this.discussMsg('test', 1, 10001, 10001, '这是一条讨论组消息', 1);
}
/**
* 本函数会在连接建立前执行,可以在此执行初始化代码
Expand Down Expand Up @@ -81,10 +79,8 @@ class App extends cq_robot_1.CQApp {
*/
privateMsg(subType, msgId, fromQQ, msg, font) {
return __awaiter(this, void 0, void 0, function* () {
if (fromQQ === 996881204) {
this.CQ.sendPrivateMsg(fromQQ, `这是${this.APP_ID},你发送了:${msg}`);
}
return cq_robot_1.CQMsg.MSG_INTERCEPT;
this.CQ.sendPrivateMsg(fromQQ, `这是${this.APP_ID},你发送了:${msg}`);
return cq_robot_1.CQMsg.MSG_IGNORE;
});
}
/**
Expand All @@ -102,9 +98,7 @@ class App extends cq_robot_1.CQApp {
*/
groupMsg(subType, msgId, fromGroup, fromQQ, fromAnonymous, msg, font) {
return __awaiter(this, void 0, void 0, function* () {
if (fromQQ === 996881204) {
this.CQ.sendGroupMsg(fromGroup, `这是${this.APP_ID},你发送了:${msg}`);
}
//this.CQ.sendGroupMsg(fromGroup, `这是${this.APP_ID},你发送了:${msg}`)
return cq_robot_1.CQMsg.MSG_IGNORE;
});
}
Expand All @@ -122,9 +116,7 @@ class App extends cq_robot_1.CQApp {
*/
discussMsg(subType, msgId, fromDiscuss, fromQQ, msg, font) {
return __awaiter(this, void 0, void 0, function* () {
if (fromQQ === 996881204) {
this.CQ.sendDiscussMsg(fromDiscuss, `这是${this.APP_ID},你发送了:${msg}`);
}
// this.CQ.sendDiscussMsg(fromDiscuss, `这是${this.APP_ID},你发送了:${msg}`)
return cq_robot_1.CQMsg.MSG_IGNORE;
});
}
Expand Down
Original file line number Diff line number Diff line change
@@ -1,6 +1,5 @@
// 酷Q 的Json文件支持以 // 开头的注释。
// 打包前,应用的 .dll, .json 的文件名须以appid命名,应用appInfo返回的内容须改为appid
// 如 appid=com.example.demo, 则dll及json文件需分别命名为 com.example.demo.dll、com.example.demo.json
// 如 appid=com.example.demo 具体规则见规则见https://d.cqp.me/Pro/%E5%BC%80%E5%8F%91/%E5%9F%BA%E7%A1%80%E4%BF%A1%E6%81%AF
{
"ret": 1, // 返回码,固定为1
"apiver": 9, // Api版本本sdk为9
Expand All @@ -15,7 +14,7 @@
"type": 21, // 事件类型
"name": "私聊消息处理", // 事件名称
"function": "privateMsg", // 事件对应函数
"priority": 20000 // 事件优先级(参见 cq.im/deveventpriority)
"priority": 30000 // 事件优先级(参见 cq.im/deveventpriority)
},
{
"id": 2,
Expand Down
11 changes: 6 additions & 5 deletions dist/app/com.example.js.demo/index.js
Original file line number Diff line number Diff line change
Expand Up @@ -13,12 +13,13 @@ class App extends cq_robot_1.CQApp {
constructor() {
super('com.example.js.demo', __dirname);
this.CQ.setDebug(false);
this.isEnable = true;
}
debug() {
//本函数里面的内容仅会在debug模式下执行
this.privateMsg('test', 1, 996881204, '这是一条私聊消息', 1);
this.groupMsg('test', 1, 947983200, 996881204, '', '这是一条群消息', 1);
this.discussMsg('test', 1, 580771123, 996881204, '这是一条讨论组消息', 1);
this.privateMsg('test', 1, 10001, '这是一条私聊消息', 1);
this.groupMsg('test', 1, 10001, 10001, '', '这是一条群消息', 1);
this.discussMsg('test', 1, 10001, 10001, '这是一条讨论组消息', 1);
}
startup() {
return 0;
Expand All @@ -45,13 +46,13 @@ class App extends cq_robot_1.CQApp {
}
groupMsg(subType, msgId, fromGroup, fromQQ, fromAnonymous, msg, font) {
return __awaiter(this, void 0, void 0, function* () {
this.CQ.sendGroupMsg(fromGroup, `这是${this.APP_ID},你发送了:${msg}`);
//this.CQ.sendGroupMsg(fromGroup, `这是${this.APP_ID},你发送了:${msg}`)
return cq_robot_1.CQMsg.MSG_IGNORE;
});
}
discussMsg(subType, msgId, fromDiscuss, fromQQ, msg, font) {
return __awaiter(this, void 0, void 0, function* () {
this.CQ.send_discuss_msg(fromDiscuss, `这是${this.APP_ID},你发送了:${msg}`);
//this.CQ.send_discuss_msg(fromDiscuss, `这是${this.APP_ID},你发送了:${msg}`)
return cq_robot_1.CQMsg.MSG_IGNORE;
});
}
Expand Down
Original file line number Diff line number Diff line change
@@ -1,6 +1,5 @@
// 酷Q 的Json文件支持以 // 开头的注释。
// 打包前,应用的 .dll, .json 的文件名须以appid命名,应用appInfo返回的内容须改为appid
// 如 appid=com.example.demo, 则dll及json文件需分别命名为 com.example.demo.dll、com.example.demo.json
// 如 appid=com.example.demo 具体规则见规则见https://d.cqp.me/Pro/%E5%BC%80%E5%8F%91/%E5%9F%BA%E7%A1%80%E4%BF%A1%E6%81%AF
{
"ret": 1, // 返回码,固定为1
"apiver": 9, // Api版本本sdk为9
Expand All @@ -22,7 +21,7 @@
"type": 2,
"name": "群消息处理",
"function": "groupMsg",
"priority": 20000
"priority": 30000
},
{
"id": 3,
Expand Down
Loading

0 comments on commit b88e47a

Please sign in to comment.