diff --git a/.github/workflows/ci.yml b/.github/workflows/ci.yml
index 7365a7f..7c7a90c 100644
--- a/.github/workflows/ci.yml
+++ b/.github/workflows/ci.yml
@@ -28,7 +28,7 @@ jobs:
- uses: actions/checkout@v2
- name: Setup Go environment
- uses: actions/setup-go@v2.1.1
+ uses: actions/setup-go@v2.1.3
with:
go-version: 1.15
diff --git a/Dockerfile b/Dockerfile
index 478327d..938abb2 100644
--- a/Dockerfile
+++ b/Dockerfile
@@ -1,4 +1,4 @@
-FROM golang:1.14.7-alpine AS builder
+FROM golang:1.15.5-alpine AS builder
RUN go env -w GO111MODULE=auto \
&& go env -w CGO_ENABLED=0 \
diff --git a/README.md b/README.md
index d6b5f59..a2a9b24 100644
--- a/README.md
+++ b/README.md
@@ -46,33 +46,34 @@
已实现API
##### 注意: 部分API实现与CQHTTP原版略有差异,请参考文档
-| API | 功能 |
-| ------------------------ | ------------------------------------------------------------ |
-| /get_login_info | [获取登录号信息](https://cqhttp.cc/docs/4.15/#/API?id=get_login_info-获取登录号信息) |
-| /get_friend_list | [获取好友列表](https://cqhttp.cc/docs/4.15/#/API?id=get_friend_list-获取好友列表) |
-| /get_group_list | [获取群列表](https://cqhttp.cc/docs/4.15/#/API?id=get_group_list-获取群列表) |
-| /get_group_info | [获取群信息](https://cqhttp.cc/docs/4.15/#/API?id=get_group_info-获取群信息) |
-| /get_group_member_list | [获取群成员列表](https://cqhttp.cc/docs/4.15/#/API?id=get_group_member_list-获取群成员列表) |
-| /get_group_member_info | [获取群成员信息](https://cqhttp.cc/docs/4.15/#/API?id=get_group_member_info-获取群成员信息) |
-| /send_msg | [发送消息](https://cqhttp.cc/docs/4.15/#/API?id=send_msg-发送消息) |
-| /send_group_msg | [发送群消息](https://cqhttp.cc/docs/4.15/#/API?id=send_group_msg-发送群消息) |
-| /send_private_msg | [发送私聊消息](https://cqhttp.cc/docs/4.15/#/API?id=send_private_msg-发送私聊消息) |
-| /delete_msg | [撤回信息](https://cqhttp.cc/docs/4.15/#/API?id=delete_msg-撤回消息) |
-| /set_friend_add_request | [处理加好友请求](https://cqhttp.cc/docs/4.15/#/API?id=set_friend_add_request-处理加好友请求) |
-| /set_group_add_request | [处理加群请求/邀请](https://cqhttp.cc/docs/4.15/#/API?id=set_group_add_request-处理加群请求/邀请) |
-| /set_group_card | [设置群名片(群备注)](https://cqhttp.cc/docs/4.15/#/API?id=set_group_card-设置群名片(群备注)) |
-| /set_group_special_title | [设置群组专属头衔](https://cqhttp.cc/docs/4.15/#/API?id=set_group_special_title-设置群组专属头衔) |
-| /set_group_kick | [群组T人](https://cqhttp.cc/docs/4.15/#/API?id=set_group_kick-群组踢人) |
-| /set_group_ban | [群组单人禁言](https://cqhttp.cc/docs/4.15/#/API?id=set_group_ban-群组单人禁言) |
-| /set_group_whole_ban | [群组全员禁言](https://cqhttp.cc/docs/4.15/#/API?id=set_group_whole_ban-群组全员禁言) |
-| /set_group_leave | [退出群组](https://cqhttp.cc/docs/4.15/#/API?id=set_group_leave-退出群组) |
-| /set_group_name | 设置群组名(拓展API) |
-| /get_image | 获取图片信息(拓展API) |
-| /get_msg | [获取消息]() |
-| /can_send_image | [检查是否可以发送图片](https://cqhttp.cc/docs/4.15/#/API?id=can_send_image-检查是否可以发送图片) |
-| /can_send_record | [检查是否可以发送语音](https://cqhttp.cc/docs/4.15/#/API?id=can_send_record-检查是否可以发送语音) |
-| /get_status | [获取插件运行状态](https://cqhttp.cc/docs/4.15/#/API?id=get_status-获取插件运行状态) |
-| /get_version_info | [获取 酷Q 及 CQHTTP插件的版本信息](https://cqhttp.cc/docs/4.15/#/API?id=get_version_info-获取-酷q-及-cqhttp-插件的版本信息) |
+| API | 功能 |
+| ------------------------ | ------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------ |
+| /get_login_info | [获取登录号信息](https://github.com/howmanybots/onebot/blob/master/v11/specs/api/public.md#get_login_info-%E8%8E%B7%E5%8F%96%E7%99%BB%E5%BD%95%E5%8F%B7%E4%BF%A1%E6%81%AF) |
+| /get_friend_list | [获取好友列表](https://github.com/howmanybots/onebot/blob/master/v11/specs/api/public.md#get_friend_list-%E8%8E%B7%E5%8F%96%E5%A5%BD%E5%8F%8B%E5%88%97%E8%A1%A8) |
+| /get_group_list | [获取群列表](https://github.com/howmanybots/onebot/blob/master/v11/specs/api/public.md#get_group_list-%E8%8E%B7%E5%8F%96%E7%BE%A4%E5%88%97%E8%A1%A8) |
+| /get_group_info | [获取群信息](https://github.com/howmanybots/onebot/blob/master/v11/specs/api/public.md#get_group_info-%E8%8E%B7%E5%8F%96%E7%BE%A4%E4%BF%A1%E6%81%AF) |
+| /get_group_member_list | [获取群成员列表](https://github.com/howmanybots/onebot/blob/master/v11/specs/api/public.md#get_group_member_list-%E8%8E%B7%E5%8F%96%E7%BE%A4%E6%88%90%E5%91%98%E5%88%97%E8%A1%A8) |
+| /get_group_member_info | [获取群成员信息](https://github.com/howmanybots/onebot/blob/master/v11/specs/api/public.md#get_group_member_info-%E8%8E%B7%E5%8F%96%E7%BE%A4%E6%88%90%E5%91%98%E4%BF%A1%E6%81%AF) |
+| /send_msg | [发送消息](https://github.com/howmanybots/onebot/blob/master/v11/specs/api/public.md#send_msg-%E5%8F%91%E9%80%81%E6%B6%88%E6%81%AF) |
+| /send_group_msg | [发送群消息](https://github.com/howmanybots/onebot/blob/master/v11/specs/api/public.md#send_group_msg-%E5%8F%91%E9%80%81%E7%BE%A4%E6%B6%88%E6%81%AF) |
+| /send_private_msg | [发送私聊消息](https://github.com/howmanybots/onebot/blob/master/v11/specs/api/public.md#send_private_msg-%E5%8F%91%E9%80%81%E7%A7%81%E8%81%8A%E6%B6%88%E6%81%AF) |
+| /delete_msg | [撤回信息](https://github.com/howmanybots/onebot/blob/master/v11/specs/api/public.md#delete_msg-%E6%92%A4%E5%9B%9E%E6%B6%88%E6%81%AF) |
+| /set_friend_add_request | [处理加好友请求](https://github.com/howmanybots/onebot/blob/master/v11/specs/api/public.md#set_friend_add_request-%E5%A4%84%E7%90%86%E5%8A%A0%E5%A5%BD%E5%8F%8B%E8%AF%B7%E6%B1%82) |
+| /set_group_add_request | [处理加群请求/邀请](https://github.com/howmanybots/onebot/blob/master/v11/specs/api/public.md#set_group_add_request-%E5%A4%84%E7%90%86%E5%8A%A0%E7%BE%A4%E8%AF%B7%E6%B1%82%E9%82%80%E8%AF%B7) |
+| /set_group_card | [设置群名片(群备注)](https://github.com/howmanybots/onebot/blob/master/v11/specs/api/public.md#set_group_card-%E8%AE%BE%E7%BD%AE%E7%BE%A4%E5%90%8D%E7%89%87%E7%BE%A4%E5%A4%87%E6%B3%A8) |
+| /set_group_special_title | [设置群组专属头衔](https://github.com/howmanybots/onebot/blob/master/v11/specs/api/public.md#set_group_special_title-%E8%AE%BE%E7%BD%AE%E7%BE%A4%E7%BB%84%E4%B8%93%E5%B1%9E%E5%A4%B4%E8%A1%94) |
+| /set_group_kick | [群组T人](https://github.com/howmanybots/onebot/blob/master/v11/specs/api/public.md#set_group_kick-%E7%BE%A4%E7%BB%84%E8%B8%A2%E4%BA%BA) |
+| /set_group_ban | [群组单人禁言](https://github.com/howmanybots/onebot/blob/master/v11/specs/api/public.md#set_group_ban-%E7%BE%A4%E7%BB%84%E5%8D%95%E4%BA%BA%E7%A6%81%E8%A8%80) |
+| /set_group_whole_ban | [群组全员禁言](https://github.com/howmanybots/onebot/blob/master/v11/specs/api/public.md#set_group_whole_ban-%E7%BE%A4%E7%BB%84%E5%85%A8%E5%91%98%E7%A6%81%E8%A8%80) |
+| /set_group_leave | [退出群组](https://github.com/howmanybots/onebot/blob/master/v11/specs/api/public.md#set_group_leave-%E9%80%80%E5%87%BA%E7%BE%A4%E7%BB%84) |
+| /set_group_name | [设置群组名](https://github.com/howmanybots/onebot/blob/master/v11/specs/api/public.md#set_group_name-%E8%AE%BE%E7%BD%AE%E7%BE%A4%E5%90%8D) |
+| /set_restart | [重启go-cqhttp](https://github.com/howmanybots/onebot/blob/master/v11/specs/api/public.md#set_restart-%E9%87%8D%E5%90%AF-onebot-%E5%AE%9E%E7%8E%B0) |
+| /get_image | [获取图片信息](https://github.com/howmanybots/onebot/blob/master/v11/specs/api/public.md#get_image-%E8%8E%B7%E5%8F%96%E5%9B%BE%E7%89%87) |
+| /get_msg | [获取消息](https://github.com/howmanybots/onebot/blob/master/v11/specs/api/public.md#get_msg-%E8%8E%B7%E5%8F%96%E6%B6%88%E6%81%AF) |
+| /can_send_image | [检查是否可以发送图片](https://github.com/howmanybots/onebot/blob/master/v11/specs/api/public.md#can_send_image-%E6%A3%80%E6%9F%A5%E6%98%AF%E5%90%A6%E5%8F%AF%E4%BB%A5%E5%8F%91%E9%80%81%E5%9B%BE%E7%89%87) |
+| /can_send_record | [检查是否可以发送语音](https://github.com/howmanybots/onebot/blob/master/v11/specs/api/public.md#can_send_record-%E6%A3%80%E6%9F%A5%E6%98%AF%E5%90%A6%E5%8F%AF%E4%BB%A5%E5%8F%91%E9%80%81%E8%AF%AD%E9%9F%B3) |
+| /get_status | [获取插件运行状态](https://github.com/howmanybots/onebot/blob/master/v11/specs/api/public.md#get_status-%E8%8E%B7%E5%8F%96%E8%BF%90%E8%A1%8C%E7%8A%B6%E6%80%81) |
+| /get_version_info | [获取 酷Q 及 CQHTTP插件的版本信息](https://github.com/howmanybots/onebot/blob/master/v11/specs/api/public.md#get_version_info-%E8%8E%B7%E5%8F%96%E7%89%88%E6%9C%AC%E4%BF%A1%E6%81%AF) |
@@ -80,20 +81,20 @@
已实现Event
##### 注意: 部分Event数据与CQHTTP原版略有差异,请参考文档
-| Event |
-| ------------------------------------------------------------ |
-| [私聊信息](https://cqhttp.cc/docs/4.15/#/Post?id=私聊消息) |
-| [群消息](https://cqhttp.cc/docs/4.15/#/Post?id=群消息) |
-| [群消息撤回(拓展Event)](docs/cqhttp.md#群消息撤回) |
-| [好友消息撤回(拓展Event)](docs/cqhttp.md#好友消息撤回) |
-| [群内提示事件(拓展Event)(龙王等事件)](docs/cqhttp.md#群内戳一戳) |
-| [群管理员变动](https://cqhttp.cc/docs/4.15/#/Post?id=群管理员变动) |
-| [群成员减少](https://cqhttp.cc/docs/4.15/#/Post?id=群成员减少) |
-| [群成员增加](https://cqhttp.cc/docs/4.15/#/Post?id=群成员增加) |
-| [群禁言](https://cqhttp.cc/docs/4.15/#/Post?id=群禁言) |
-| [群文件上传](https://cqhttp.cc/docs/4.15/#/Post?id=群文件上传) |
-| [加好友请求](https://cqhttp.cc/docs/4.15/#/Post?id=加好友请求) |
-| [加群请求/邀请](https://cqhttp.cc/docs/4.15/#/Post?id=加群请求/邀请) |
+| Event |
+| ---------------------------------------------------------------------------------------------------------------------------------------------------- |
+| [私聊信息](https://github.com/howmanybots/onebot/blob/master/v11/specs/event/message.md#%E7%A7%81%E8%81%8A%E6%B6%88%E6%81%AF) |
+| [群消息](https://github.com/howmanybots/onebot/blob/master/v11/specs/event/message.md#%E7%BE%A4%E6%B6%88%E6%81%AF) |
+| [群消息撤回(拓展Event)](docs/cqhttp.md#群消息撤回) |
+| [好友消息撤回(拓展Event)](docs/cqhttp.md#好友消息撤回) |
+| [群内提示事件(拓展Event)(龙王等事件)](docs/cqhttp.md#群内戳一戳) |
+| [群管理员变动](https://github.com/howmanybots/onebot/blob/master/v11/specs/event/notice.md#%E7%BE%A4%E7%AE%A1%E7%90%86%E5%91%98%E5%8F%98%E5%8A%A8) |
+| [群成员减少](https://github.com/howmanybots/onebot/blob/master/v11/specs/event/notice.md#%E7%BE%A4%E6%88%90%E5%91%98%E5%87%8F%E5%B0%91) |
+| [群成员增加](https://github.com/howmanybots/onebot/blob/master/v11/specs/event/notice.md#%E7%BE%A4%E6%88%90%E5%91%98%E5%A2%9E%E5%8A%A0) |
+| [群禁言](https://github.com/howmanybots/onebot/blob/master/v11/specs/event/notice.md#%E7%BE%A4%E7%A6%81%E8%A8%80) |
+| [群文件上传](https://github.com/howmanybots/onebot/blob/master/v11/specs/event/notice.md#%E7%BE%A4%E6%96%87%E4%BB%B6%E4%B8%8A%E4%BC%A0) |
+| [加好友请求](https://github.com/howmanybots/onebot/blob/master/v11/specs/event/request.md#%E5%8A%A0%E5%A5%BD%E5%8F%8B%E8%AF%B7%E6%B1%82) |
+| [加群请求/邀请](https://github.com/howmanybots/onebot/blob/master/v11/specs/event/request.md#%E5%8A%A0%E7%BE%A4%E8%AF%B7%E6%B1%82%E9%82%80%E8%AF%B7) |
diff --git a/coolq/api.go b/coolq/api.go
index ffb9f82..f175050 100644
--- a/coolq/api.go
+++ b/coolq/api.go
@@ -516,12 +516,11 @@ func (bot *CQBot) CQSetGroupAdmin(groupId, userId int64, enable bool) MSG {
}
func (bot *CQBot) CQGetVipInfo(userId int64) MSG {
- msg := MSG{}
vip, err := bot.Client.GetVipInfo(userId)
if err != nil {
return Failed(100)
}
- msg = MSG{
+ msg := MSG{
"user_id": vip.Uin,
"nickname": vip.Name,
"level": vip.Level,
diff --git a/coolq/bot.go b/coolq/bot.go
index 1262b07..6ea59f6 100644
--- a/coolq/bot.go
+++ b/coolq/bot.go
@@ -5,12 +5,13 @@ import (
"encoding/gob"
"encoding/json"
"fmt"
- "github.com/syndtr/goleveldb/leveldb"
"hash/crc32"
"path"
"sync"
"time"
+ "github.com/syndtr/goleveldb/leveldb"
+
"github.com/Mrs4s/MiraiGo/binary"
"github.com/Mrs4s/MiraiGo/client"
"github.com/Mrs4s/MiraiGo/message"
diff --git a/coolq/cqcode.go b/coolq/cqcode.go
index b78b9c8..3f864bb 100644
--- a/coolq/cqcode.go
+++ b/coolq/cqcode.go
@@ -8,11 +8,6 @@ import (
xml2 "encoding/xml"
"errors"
"fmt"
- "github.com/Mrs4s/MiraiGo/binary"
- "github.com/Mrs4s/MiraiGo/message"
- "github.com/Mrs4s/go-cqhttp/global"
- log "github.com/sirupsen/logrus"
- "github.com/tidwall/gjson"
"io/ioutil"
"net/url"
"path"
@@ -20,6 +15,12 @@ import (
"runtime"
"strconv"
"strings"
+
+ "github.com/Mrs4s/MiraiGo/binary"
+ "github.com/Mrs4s/MiraiGo/message"
+ "github.com/Mrs4s/go-cqhttp/global"
+ log "github.com/sirupsen/logrus"
+ "github.com/tidwall/gjson"
)
var matchReg = regexp.MustCompile(`\[CQ:\w+?.*?]`)
@@ -195,7 +196,7 @@ func ToArrayMessage(e []message.IMessageElement, code int64, raw ...bool) (r []M
}
}
default:
- continue
+ return
}
r = append(r, m)
}
diff --git a/coolq/event.go b/coolq/event.go
index 9d2e300..bbfa09f 100644
--- a/coolq/event.go
+++ b/coolq/event.go
@@ -2,16 +2,17 @@ package coolq
import (
"encoding/hex"
- "github.com/Mrs4s/MiraiGo/binary"
- "github.com/Mrs4s/MiraiGo/client"
- "github.com/Mrs4s/MiraiGo/message"
- "github.com/Mrs4s/go-cqhttp/global"
- log "github.com/sirupsen/logrus"
"io/ioutil"
"path"
"strconv"
"strings"
"time"
+
+ "github.com/Mrs4s/MiraiGo/binary"
+ "github.com/Mrs4s/MiraiGo/client"
+ "github.com/Mrs4s/MiraiGo/message"
+ "github.com/Mrs4s/go-cqhttp/global"
+ log "github.com/sirupsen/logrus"
)
var format = "string"
diff --git a/docs/EventFilter.md b/docs/EventFilter.md
index c9ccf05..2eb5f38 100644
--- a/docs/EventFilter.md
+++ b/docs/EventFilter.md
@@ -110,16 +110,16 @@
下面列出所有运算符(「要求的参数类型」是指运算符的键所对应的值的类型,「可作用于的类型」是指在过滤时事件对象相应值的类型):
-| 运算符 | 要求的参数类型 | 可作用于的类型 |
-| ----- | ------------ | ----------- |
-| `.not` | object | 任何 |
-| `.and` | object | 若参数中全为运算符,则任何;若不全为运算符,则 object |
-| `.or` | array(数组元素为 object) | 任何 |
-| `.eq` | 任何 | 任何 |
-| `.neq` | 任何 | 任何 |
-| `.in` | string/array | 若参数为 string,则 string;若参数为 array,则任何 |
-| `.contains` | string | string |
-| `.regex` | string | string |
+| 运算符 | 要求的参数类型 | 可作用于的类型 |
+| ----------- | -------------------------- | ----------------------------------------------------- |
+| `.not` | object | 任何 |
+| `.and` | object | 若参数中全为运算符,则任何;若不全为运算符,则 object |
+| `.or` | array(数组元素为 object) | 任何 |
+| `.eq` | 任何 | 任何 |
+| `.neq` | 任何 | 任何 |
+| `.in` | string/array | 若参数为 string,则 string;若参数为 array,则任何 |
+| `.contains` | string | string |
+| `.regex` | string | string |
## 过滤时的事件数据对象
diff --git a/docs/adminApi.md b/docs/adminApi.md
index def91f8..374bfd1 100644
--- a/docs/adminApi.md
+++ b/docs/adminApi.md
@@ -6,9 +6,9 @@
参数:
-| 参数名 | 类型 | 说明 |
-| ------ | ------ | ----------- |
-| access_token | string | 校验口令,config.json中配置 |
+| 参数名 | 类型 | 说明 |
+| ------------ | ------ | --------------------------- |
+| access_token | string | 校验口令,config.json中配置 |
@@ -24,9 +24,9 @@ method:`POST/GET`
参数:
-| 参数名 | 类型 | 说明 |
-| ------ | ---- | ------------------------------------- |
-| 无|||
+| 参数名 | 类型 | 说明 |
+| ------ | ---- | ---- |
+| 无 | | |
返回:
@@ -44,19 +44,19 @@ method: `GET`
参数:
-| 参数名 | 类型 | 说明 |
-| ------ | ------ | ----------- |
-| 无|||
+| 参数名 | 类型 | 说明 |
+| ------ | ---- | ---- |
+| 无 | | |
返回:
```json
{"data": {"ispic": true,"picbase64":"xxxxx"}, "retcode": 0, "status": "ok"}
```
-| 参数名 | 类型 | 说明 |
-| ------ | ------ | ----------- |
-| ispic| bool| 是否是验证码类型 true是,false为不是(比如设备锁|
-|picbas64| string| 验证码的base64编码内容,加上头,放入img标签即可显示|
+| 参数名 | 类型 | 说明 |
+| -------- | ------ | --------------------------------------------------- |
+| ispic | bool | 是否是验证码类型 true是,false为不是(比如设备锁 |
+| picbas64 | string | 验证码的base64编码内容,加上头,放入img标签即可显示 |
### admin/do_web_write
@@ -67,9 +67,9 @@ method: `POST` formdata
参数:
-| 参数名 | 类型 | 说明 |
-| ------ | ------ | ----------- |
-| input | string | 输入的内容 |
+| 参数名 | 类型 | 说明 |
+| ------ | ------ | ---------- |
+| input | string | 输入的内容 |
返回:
@@ -89,9 +89,28 @@ method: `POST`
参数:
-| 参数名 |类型 | 说明 |
-| ------ | ------ | -----------|
-| 无 | | |
+| 参数名 | 类型 | 说明 |
+| ------ | ---- | ---- |
+| 无 | | |
+
+返回:
+
+```json
+{"data": {}, "retcode": 0, "status": "ok"}
+```
+
+### admin/do_process_restart
+
+> 冷重启
+
+method: `POST`
+
+
+参数:
+
+| 参数名 | 类型 | 说明 |
+| ------ | ---- | ---- |
+| 无 | | |
返回:
@@ -108,12 +127,12 @@ method: `POST` formdata
参数:
-| 参数名 | 类型 | 说明 |
-| ------ | ------ | ------------------------------------------------------------ |
-| uin | string | qq号 |
-| password | string | qq密码 |
-| enable_db | string | 是否启动数据库,填 'true' 或者 'false' |
-| access_token | string | 授权 token |
+| 参数名 | 类型 | 说明 |
+| ------------ | ------ | ------------------------------------- |
+| uin | string | qq号 |
+| password | string | qq密码 |
+| enable_db | string | 是否启动数据库,填 'true' 或者 'false' |
+| access_token | string | 授权 token |
返回:
@@ -130,14 +149,14 @@ method: `POST` formdata
参数:
-| 参数名 | 类型 | 说明 |
-| ------ | ------ | ------------------------------------------------------------ |
-| port | string | 服务端口 |
-| host | string | 服务监听地址 |
-| enable | string | 是否启用 ,填 'true' 或者 'false' |
-| timeout | string | http请求超时时间 |
-| post_url | string | post上报地址 不需要就填空字符串,或者不填|
-| post_secret | string | post上报的secret 不需要就填空字符串,或者不填 |
+| 参数名 | 类型 | 说明 |
+| ----------- | ------ | --------------------------------------------- |
+| port | string | 服务端口 |
+| host | string | 服务监听地址 |
+| enable | string | 是否启用 ,填 'true' 或者 'false' |
+| timeout | string | http请求超时时间 |
+| post_url | string | post上报地址 不需要就填空字符串,或者不填 |
+| post_secret | string | post上报的secret 不需要就填空字符串,或者不填 |
返回:
@@ -154,11 +173,11 @@ method: `POST` formdata
参数:
-| 参数名 | 类型 | 说明 |
-| ------ | ------ | ------------------------------------------------------------ |
-| port | string | 服务端口 |
-| host | string | 服务监听地址 |
-| enable | string | 是否启用 ,填 'true' 或者 'false' |
+| 参数名 | 类型 | 说明 |
+| ------ | ------ | -------------------------------- |
+| port | string | 服务端口 |
+| host | string | 服务监听地址 |
+| enable | string | 是否启用 ,填 'true' 或者 'false' |
返回:
@@ -175,11 +194,11 @@ method: `POST` formdata
参数:
-| 参数名 | 类型 | 说明 |
-| ------ | ------ | ------------------------------------------------------------ |
-| port | string | 服务端口 |
-| host | string | 服务监听地址 |
-| enable | string | 是否启用 ,填 'true' 或者 'false' |
+| 参数名 | 类型 | 说明 |
+| ------ | ------ | -------------------------------- |
+| port | string | 服务端口 |
+| host | string | 服务监听地址 |
+| enable | string | 是否启用 ,填 'true' 或者 'false' |
返回:
@@ -196,9 +215,9 @@ method: `POST` formdata
参数:
-| 参数名 | 类型 | 说明 |
-| ------ | ------ | ------------------------------------------------------------ |
-| json | string | 完整的config.json的配合,json字符串 |
+| 参数名 | 类型 | 说明 |
+| ------ | ------ | ----------------------------------- |
+| json | string | 完整的config.json的配合,json字符串 |
返回:
@@ -215,9 +234,9 @@ method: `GET`
参数:
-| 参数名 | 类型 | 说明 |
-| ------ | ------ | ------------------------------------------------------------ |
-| 无 | | |
+| 参数名 | 类型 | 说明 |
+| ------ | ---- | ---- |
+| 无 | | |
返回:
@@ -226,7 +245,7 @@ method: `GET`
{"data": {"config":"xxxx"}, "retcode": 0, "status": "ok"}
```
-| 参数名 | 类型 | 说明 |
-| ------ | ------ | ------------------------------------------------------------ |
-| config | string | 完整的config.json的配合,json字符串 |
+| 参数名 | 类型 | 说明 |
+| ------ | ------ | ----------------------------------- |
+| config | string | 完整的config.json的配合,json字符串 |
diff --git a/docs/config.md b/docs/config.md
index 3f4a94d..4201ef0 100644
--- a/docs/config.md
+++ b/docs/config.md
@@ -61,29 +61,29 @@ go-cqhttp 支持导入CQHTTP的配置文件, 具体步骤为:
}
````
-| 字段 | 类型 | 说明 |
-| ------------------ | -------- | ------------------------------------------------------------------- |
-| uin | int64 | 登录用QQ号 |
-| password | string | 登录用密码 |
-| encrypt_password | bool | 是否对密码进行加密. |
-| password_encrypted | string | 加密后的密码(请勿修改) |
-| enable_db | bool | 是否开启内置数据库, 关闭后将无法使用 **回复/撤回** 等上下文相关接口 |
-| access_token | string | 同CQHTTP的 `access_token` 用于身份验证 |
-| relogin | bool | 是否自动重新登录 |
-| relogin_delay | int | 重登录延时(秒) |
-| max_relogin_times | uint | 最大重登录次数,若0则不设置上限 |
-| _rate_limit | bool | 是否启用API调用限速 |
-| frequency | float64 | 1s内能调用API的次数 |
-| bucket_size | int | 令牌桶的大小,默认为1,修改此值可允许一定程度内连续调用api |
-| post_message_format | string | 上报信息类型 |
-| ignore_invalid_cqcode| bool | 是否忽略错误的CQ码 |
-| force_fragmented | bool | 是否强制分片发送群长消息 |
-| use_sso_address | bool | 是否使用服务器下发的地址 |
-| heartbeat_interval | int64 | 心跳间隔时间,单位秒。小于0则关闭心跳,等于0使用默认值(5秒) |
-| http_config | object | HTTP API配置 |
-| ws_config | object | Websocket API 配置 |
-| ws_reverse_servers | object[] | 反向 Websocket API 配置 |
-| log_level | string | 指定日志收集级别,将收集的日志单独存放到固定文件中,便于查看日志线索 当前支持 warn,error|
+| 字段 | 类型 | 说明 |
+| --------------------- | -------- | ---------------------------------------------------------------------------------------- |
+| uin | int64 | 登录用QQ号 |
+| password | string | 登录用密码 |
+| encrypt_password | bool | 是否对密码进行加密. |
+| password_encrypted | string | 加密后的密码(请勿修改) |
+| enable_db | bool | 是否开启内置数据库, 关闭后将无法使用 **回复/撤回** 等上下文相关接口 |
+| access_token | string | 同CQHTTP的 `access_token` 用于身份验证 |
+| relogin | bool | 是否自动重新登录 |
+| relogin_delay | int | 重登录延时(秒) |
+| max_relogin_times | uint | 最大重登录次数,若0则不设置上限 |
+| _rate_limit | bool | 是否启用API调用限速 |
+| frequency | float64 | 1s内能调用API的次数 |
+| bucket_size | int | 令牌桶的大小,默认为1,修改此值可允许一定程度内连续调用api |
+| post_message_format | string | 上报信息类型 |
+| ignore_invalid_cqcode | bool | 是否忽略错误的CQ码 |
+| force_fragmented | bool | 是否强制分片发送群长消息 |
+| use_sso_address | bool | 是否使用服务器下发的地址 |
+| heartbeat_interval | int64 | 心跳间隔时间,单位秒。小于0则关闭心跳,等于0使用默认值(5秒) |
+| http_config | object | HTTP API配置 |
+| ws_config | object | Websocket API 配置 |
+| ws_reverse_servers | object[] | 反向 Websocket API 配置 |
+| log_level | string | 指定日志收集级别,将收集的日志单独存放到固定文件中,便于查看日志线索 当前支持 warn,error |
> 注: 开启密码加密后程序将在每次启动时要求输入解密密钥, 密钥错误会导致登录时提示密码错误.
> 解密后密码将储存在内存中,用于自动重连等功能. 所以此加密并不能防止内存读取.
@@ -110,12 +110,12 @@ go-cqhttp 支持导入CQHTTP的配置文件, 具体步骤为:
在大部分情况下 我们只需要关心 `protocol` 字段:
-| 值 | 类型 | 限制 |
-| ---- | ------------- | ----------------------------------------------------- |
-| 0 | iPad | 无 |
-| 1 | Android Phone | 无 |
-| 2 | Android Watch | 无法接收 `group_notify` 事件、无法接收口令红包、无法接收撤回消息 |
-| 3 | MacOS | 无 |
+| 值 | 类型 | 限制 |
+| --- | ------------- | ---------------------------------------------------------------- |
+| 0 | iPad | 无 |
+| 1 | Android Phone | 无 |
+| 2 | Android Watch | 无法接收 `group_notify` 事件、无法接收口令红包、无法接收撤回消息 |
+| 3 | MacOS | 无 |
> 注意, 根据协议的不同, 各类消息有所限制
diff --git a/docs/cqhttp.md b/docs/cqhttp.md
index 396bd05..bfa3206 100644
--- a/docs/cqhttp.md
+++ b/docs/cqhttp.md
@@ -6,24 +6,24 @@
### 图片
-| 参数名 | 可能的值 | 说明 |
-| --- | --- | --- |
-| `file` | - | 图片文件名 |
-| `type` | `flash`,`show` | 图片类型,`flash` 表示闪照,`show` 表示秀图,默认普通图片 |
-| `url` | - | 图片 URL |
-| `cache` | `0` `1` | 只在通过网络 URL 发送时有效,表示是否使用已缓存的文件,默认 `1` |
-| `id` | - | 发送秀图时的特效id,默认为40000 |
+| 参数名 | 可能的值 | 说明 |
+| ------- | --------------- | --------------------------------------------------------------- |
+| `file` | - | 图片文件名 |
+| `type` | `flash`,`show` | 图片类型,`flash` 表示闪照,`show` 表示秀图,默认普通图片 |
+| `url` | - | 图片 URL |
+| `cache` | `0` `1` | 只在通过网络 URL 发送时有效,表示是否使用已缓存的文件,默认 `1` |
+| `id` | - | 发送秀图时的特效id,默认为40000 |
可用的特效ID:
-| id |类型 |
-| --- |-------|
-| 40000 | 普通 |
-| 40001 | 幻影 |
-| 40002 | 抖动 |
-| 40003 | 生日 |
-| 40004 | 爱你 |
-| 40005 | 征友 |
+| id | 类型 |
+| ----- | ---- |
+| 40000 | 普通 |
+| 40001 | 幻影 |
+| 40002 | 抖动 |
+| 40003 | 生日 |
+| 40004 | 爱你 |
+| 40005 | 征友 |
### 回复
@@ -64,9 +64,9 @@ Type: `poke`
参数:
-| 参数名 | 类型 | 说明 |
-| ------ | ------ | ----------- |
-| qq | int64 | 需要戳的成员 |
+| 参数名 | 类型 | 说明 |
+| ------ | ----- | ------------ |
+| qq | int64 | 需要戳的成员 |
示例: `[CQ:poke,qq=123456]`
@@ -80,29 +80,29 @@ Type: `gift`
参数:
-| 参数名 |类型 | 说明 |
-| ------ | ------ | -----------|
-| qq | int64 | 接收礼物的成员 |
-| id | int | 礼物的类型 |
+| 参数名 | 类型 | 说明 |
+| ------ | ----- | -------------- |
+| qq | int64 | 接收礼物的成员 |
+| id | int | 礼物的类型 |
目前支持的礼物ID:
-| id |类型 |
-| ---| ---------|
-| 0 | 甜Wink |
-| 1 | 快乐肥宅水|
-| 2 | 幸运手链 |
-| 3 | 卡布奇诺 |
-| 4 | 猫咪手表 |
-| 5 | 绒绒手套 |
-| 6 | 彩虹糖果 |
-| 7 | 坚强 |
-| 8 | 告白话筒 |
-| 9 | 牵你的手 |
-| 10 | 可爱猫咪 |
-| 11 | 神秘面具 |
-| 12 | 我超忙的 |
-| 13 | 爱心口罩 |
+| id | 类型 |
+| --- | ---------- |
+| 0 | 甜Wink |
+| 1 | 快乐肥宅水 |
+| 2 | 幸运手链 |
+| 3 | 卡布奇诺 |
+| 4 | 猫咪手表 |
+| 5 | 绒绒手套 |
+| 6 | 彩虹糖果 |
+| 7 | 坚强 |
+| 8 | 告白话筒 |
+| 9 | 牵你的手 |
+| 10 | 可爱猫咪 |
+| 11 | 神秘面具 |
+| 12 | 我超忙的 |
+| 13 | 爱心口罩 |
@@ -116,8 +116,8 @@ Type: `forward`
参数:
-| 参数名 | 类型 | 说明 |
-| ------ | ------ | ------------------------------------------------------------ |
+| 参数名 | 类型 | 说明 |
+| ------ | ------ | ------------------------------------------------------------- |
| id | string | 合并转发ID, 需要通过 `/get_forward_msg` API获取转发的具体内容 |
示例: `[CQ:forward,id=xxxx]`
@@ -130,12 +130,12 @@ Type: `node`
参数:
-| 参数名 | 类型 | 说明 | 特殊说明 |
-| ------- | ------- | -------------- | ------------------------------------------------------------ |
+| 参数名 | 类型 | 说明 | 特殊说明 |
+| ------- | ------- | -------------- | -------------------------------------------------------------------------------------- |
| id | int32 | 转发消息id | 直接引用他人的消息合并转发, 实际查看顺序为原消息发送顺序 **与下面的自定义消息二选一** |
-| name | string | 发送者显示名字 | 用于自定义消息 (自定义消息并合并转发,实际查看顺序为自定义消息段顺序) |
-| uin | int64 | 发送者QQ号 | 用于自定义消息 |
-| content | message | 具体消息 | 用于自定义消息 **不支持转发套娃,不支持引用回复** |
+| name | string | 发送者显示名字 | 用于自定义消息 (自定义消息并合并转发,实际查看顺序为自定义消息段顺序) |
+| uin | int64 | 发送者QQ号 | 用于自定义消息 |
+| content | message | 具体消息 | 用于自定义消息 **不支持转发套娃,不支持引用回复** |
特殊说明: **需要使用单独的API `/send_group_forward_msg` 发送,并且由于消息段较为复杂,仅支持Array形式入参。 如果引用消息和自定义消息同时出现,实际查看顺序将取消息段顺序. 另外按 [CQHTTP](https://cqhttp.cc/docs/4.15/#/Message?id=格式) 文档说明, `data` 应全为字符串, 但由于需要接收`message` 类型的消息, 所以 *仅限此Type的content字段* 支持Array套娃**
@@ -217,10 +217,10 @@ Type: `xml`
参数:
-| 参数名 | 类型 | 说明 |
-| ------ | ------ | ------------------------------------------------------------ |
-| data | string | xml内容,xml中的value部分,记得实体化处理|
-| resid | int32 | 可以不填|
+| 参数名 | 类型 | 说明 |
+| ------ | ------ | ----------------------------------------- |
+| data | string | xml内容,xml中的value部分,记得实体化处理 |
+| resid | int32 | 可以不填 |
示例: `[CQ:xml,data=xxxx]`
@@ -266,10 +266,10 @@ Type: `json`
参数:
-| 参数名 | 类型 | 说明 |
-| ------ | ------ | ------------------------------------------------------------ |
-| data | string | json内容,json的所有字符串记得实体化处理|
-| resid | int32 | 默认不填为0,走小程序通道,填了走富文本通道发送|
+| 参数名 | 类型 | 说明 |
+| ------ | ------ | ----------------------------------------------- |
+| data | string | json内容,json的所有字符串记得实体化处理 |
+| resid | int32 | 默认不填为0,走小程序通道,填了走富文本通道发送 |
json中的字符串需要进行转义:
@@ -299,15 +299,15 @@ Type: `cardimage`
参数:
-| 参数名 | 类型 | 说明 |
-| ------ | ------ | ------------------------------------------------------------ |
-| file | string | 和image的file字段对齐,支持也是一样的|
-| minwidth | int64 | 默认不填为400,最小width|
-| minheight | int64 | 默认不填为400,最小height|
-| maxwidth | int64 | 默认不填为500,最大width|
-| maxheight | int64 | 默认不填为1000,最大height|
-| source | string | 分享来源的名称,可以留空|
-| icon | string | 分享来源的icon图标url,可以留空|
+| 参数名 | 类型 | 说明 |
+| --------- | ------ | ------------------------------------- |
+| file | string | 和image的file字段对齐,支持也是一样的 |
+| minwidth | int64 | 默认不填为400,最小width |
+| minheight | int64 | 默认不填为400,最小height |
+| maxwidth | int64 | 默认不填为500,最大width |
+| maxheight | int64 | 默认不填为1000,最大height |
+| source | string | 分享来源的名称,可以留空 |
+| icon | string | 分享来源的icon图标url,可以留空 |
示例cardimage 的cq码:
@@ -325,9 +325,9 @@ Type: `tts`
参数:
-| 参数名 | 类型 | 说明 |
-| ------ | ------ | ----------- |
-| text | string | 内容 |
+| 参数名 | 类型 | 说明 |
+| ------ | ------ | ---- |
+| text | string | 内容 |
示例: `[CQ:tts,text=这是一条测试消息]`
@@ -339,10 +339,10 @@ Type: `tts`
**参数**
-| 字段 | 类型 | 说明 |
-| -------- | ------ | ---- |
-| group_id | int64 | 群号 |
-| group_name | string | 新名 |
+| 字段 | 类型 | 说明 |
+| ---------- | ------ | ---- |
+| group_id | int64 | 群号 |
+| group_name | string | 新名 |
### 设置群头像
@@ -350,11 +350,11 @@ Type: `tts`
**参数**
-| 字段 | 类型 | 说明 |
-| -------- | ------ | ---- |
-| group_id | int64 | 群号 |
-| file | string | 图片文件名 |
-| cache | int | 表示是否使用已缓存的文件 |
+| 字段 | 类型 | 说明 |
+| -------- | ------ | ------------------------ |
+| group_id | int64 | 群号 |
+| file | string | 图片文件名 |
+| cache | int | 表示是否使用已缓存的文件 |
[1]`file` 参数支持以下几种格式:
@@ -468,15 +468,15 @@ Type: `tts`
**参数**
-| 字段 | 类型 | 说明 |
-| ------------ | ------ | ------ |
+| 字段 | 类型 | 说明 |
+| --------- | ------ | ---- |
| `content` | string | 内容 |
**响应数据**
-| 字段 | 类型 | 说明 |
-| ---------- | ----------------- | -------- |
-| `slices` | string[] | 词组 |
+| 字段 | 类型 | 说明 |
+| -------- | -------- | ---- |
+| `slices` | string[] | 词组 |
### 图片OCR
@@ -486,24 +486,24 @@ Type: `tts`
**参数**
- | 字段 | 类型 | 说明 |
- | ------------ | ------ | ------ |
+ | 字段 | 类型 | 说明 |
+ | ------- | ------ | ------ |
| `image` | string | 图片ID |
**响应数据**
- | 字段 | 类型 | 说明 |
- | ---------- | ----------------- | -------- |
- | `texts` | TextDetection[] | OCR结果 |
- | `language` | string | 语言 |
+ | 字段 | 类型 | 说明 |
+ | ---------- | --------------- | ------- |
+ | `texts` | TextDetection[] | OCR结果 |
+ | `language` | string | 语言 |
**TextDetection**
- | 字段 | 类型 | 说明 |
- | ---------- | ----------------- | -------- |
- | `text` | string | 文本 |
- | `confidence`| int32 | 置信度 |
- | `coordinates` | vector2 | 坐标 |
+ | 字段 | 类型 | 说明 |
+ | ------------- | ------- | ------ |
+ | `text` | string | 文本 |
+ | `confidence` | int32 | 置信度 |
+ | `coordinates` | vector2 | 坐标 |
### 获取群系统消息
@@ -512,37 +512,37 @@ Type: `tts`
**响应数据**
- | 字段 | 类型 | 说明 |
- | ---------- | ----------------- | -------- |
- | `invited_requests` | InvitedRequest[] | 邀请消息列表 |
- | `join_requests` | JoinRequest[] | 进群消息列表 |
+ | 字段 | 类型 | 说明 |
+ | ------------------ | ---------------- | ------------ |
+ | `invited_requests` | InvitedRequest[] | 邀请消息列表 |
+ | `join_requests` | JoinRequest[] | 进群消息列表 |
> 注意: 如果列表不存在任何消息, 将返回 `null`
**InvitedRequest**
- | 字段 | 类型 | 说明 |
- | ---------- | ----------------- | -------- |
- | `request_id` | int64 | 请求ID |
- | `invitor_uin` | int64 | 邀请者 |
- | `invitor_nick` | string | 邀请者昵称 |
- | `group_id` | int64 | 群号 |
- | `group_name` | string | 群名 |
- | `checked` | bool | 是否已被处理|
- | `actor` | int64 | 处理者, 未处理为0 |
+ | 字段 | 类型 | 说明 |
+ | -------------- | ------ | ----------------- |
+ | `request_id` | int64 | 请求ID |
+ | `invitor_uin` | int64 | 邀请者 |
+ | `invitor_nick` | string | 邀请者昵称 |
+ | `group_id` | int64 | 群号 |
+ | `group_name` | string | 群名 |
+ | `checked` | bool | 是否已被处理 |
+ | `actor` | int64 | 处理者, 未处理为0 |
**JoinRequest**
- | 字段 | 类型 | 说明 |
- | ---------- | ----------------- | -------- |
- | `request_id` | int64 | 请求ID |
- | `requester_uin` | int64 | 请求者ID |
- | `requester_nick` | string | 请求者昵称 |
- | `message` | string | 验证消息 |
- | `group_id` | int64 | 群号 |
- | `group_name` | string | 群名 |
- | `checked` | bool | 是否已被处理|
- | `actor` | int64 | 处理者, 未处理为0 |
+ | 字段 | 类型 | 说明 |
+ | ---------------- | ------ | ----------------- |
+ | `request_id` | int64 | 请求ID |
+ | `requester_uin` | int64 | 请求者ID |
+ | `requester_nick` | string | 请求者昵称 |
+ | `message` | string | 验证消息 |
+ | `group_id` | int64 | 群号 |
+ | `group_name` | string | 群名 |
+ | `checked` | bool | 是否已被处理 |
+ | `actor` | int64 | 处理者, 未处理为0 |
### 获取群文件系统信息
@@ -550,18 +550,18 @@ Type: `tts`
**参数**
- | 字段 | 类型 | 说明 |
- | ------------ | ------ | ------ |
+ | 字段 | 类型 | 说明 |
+ | ---------- | ----- | ---- |
| `group_id` | int64 | 群号 |
**响应数据**
- | 字段 | 类型 | 说明 |
- | ---------- | ----------------- | -------- |
- | `file_count` | int32 | 文件总数 |
- | `limit_count` | int32 | 文件上限 |
- | `used_space` | int64 | 已使用空间 |
- | `total_space` | int64 | 空间上限 |
+ | 字段 | 类型 | 说明 |
+ | ------------- | ----- | ---------- |
+ | `file_count` | int32 | 文件总数 |
+ | `limit_count` | int32 | 文件上限 |
+ | `used_space` | int64 | 已使用空间 |
+ | `total_space` | int64 | 空间上限 |
### 获取群根目录文件列表
@@ -571,16 +571,16 @@ Type: `tts`
**参数**
- | 字段 | 类型 | 说明 |
- | ------------ | ------ | ------ |
+ | 字段 | 类型 | 说明 |
+ | ---------- | ----- | ---- |
| `group_id` | int64 | 群号 |
**响应数据**
- | 字段 | 类型 | 说明 |
- | ---------- | ----------------- | -------- |
- | `files` | File[] | 文件列表 |
- | `folders` | Folder[] | 文件夹列表 |
+ | 字段 | 类型 | 说明 |
+ | --------- | -------- | ---------- |
+ | `files` | File[] | 文件列表 |
+ | `folders` | Folder[] | 文件夹列表 |
### 获取群子目录文件列表
@@ -590,17 +590,17 @@ Type: `tts`
**参数**
- | 字段 | 类型 | 说明 |
- | ------------ | ------ | ------ |
- | `group_id` | int64 | 群号 |
+ | 字段 | 类型 | 说明 |
+ | ----------- | ------ | --------------------------- |
+ | `group_id` | int64 | 群号 |
| `folder_id` | string | 文件夹ID 参考 `Folder` 对象 |
**响应数据**
- | 字段 | 类型 | 说明 |
- | ---------- | ----------------- | -------- |
- | `files` | File[] | 文件列表 |
- | `folders` | Folder[] | 文件夹列表 |
+ | 字段 | 类型 | 说明 |
+ | --------- | -------- | ---------- |
+ | `files` | File[] | 文件列表 |
+ | `folders` | Folder[] | 文件夹列表 |
### 获取群文件资源链接
@@ -610,43 +610,43 @@ Type: `tts`
**参数**
- | 字段 | 类型 | 说明 |
- | ------------ | ------ | ------ |
- | `group_id` | int64 | 群号 |
- | `file_id` | string | 文件ID 参考 `File` 对象 |
- | `busid` | int32 | 文件类型 参考 `File` 对象 |
+ | 字段 | 类型 | 说明 |
+ | ---------- | ------ | ------------------------- |
+ | `group_id` | int64 | 群号 |
+ | `file_id` | string | 文件ID 参考 `File` 对象 |
+ | `busid` | int32 | 文件类型 参考 `File` 对象 |
**响应数据**
- | 字段 | 类型 | 说明 |
- | ---------- | ----------------- | -------- |
- | `url` | string | 文件下载链接 |
+ | 字段 | 类型 | 说明 |
+ | ----- | ------ | ------------ |
+ | `url` | string | 文件下载链接 |
**File**
- | 字段 | 类型 | 说明 |
- | ---------- | ----------------- | -------- |
- | `file_id` | string | 文件ID |
- | `file_name` | string | 文件名 |
- | `busid` | int32 | 文件类型 |
- | `file_size` | int64 | 文件大小 |
- | `upload_time` | int64 | 上传时间 |
- | `dead_time` | int64 | 过期时间,永久文件恒为0 |
- | `modify_time` | int64 | 最后修改时间 |
- | `download_times` | int32 | 下载次数 |
- | `uploader` | int64 | 上传者ID |
- | `uploader_name` | string | 上传者名字 |
+ | 字段 | 类型 | 说明 |
+ | ---------------- | ------ | ---------------------- |
+ | `file_id` | string | 文件ID |
+ | `file_name` | string | 文件名 |
+ | `busid` | int32 | 文件类型 |
+ | `file_size` | int64 | 文件大小 |
+ | `upload_time` | int64 | 上传时间 |
+ | `dead_time` | int64 | 过期时间,永久文件恒为0 |
+ | `modify_time` | int64 | 最后修改时间 |
+ | `download_times` | int32 | 下载次数 |
+ | `uploader` | int64 | 上传者ID |
+ | `uploader_name` | string | 上传者名字 |
**Folder**
- | 字段 | 类型 | 说明 |
- | ---------- | ----------------- | -------- |
- | `folder_id` | string | 文件夹ID |
- | `folder_name` | string | 文件名 |
- | `create_time` | int64 | 创建时间 |
- | `creator` | int64 | 创建者 |
- | `creator_name` | string | 创建者名字 |
- | `total_file_count` | int32 | 子文件数量 |
+ | 字段 | 类型 | 说明 |
+ | ------------------ | ------ | ---------- |
+ | `folder_id` | string | 文件夹ID |
+ | `folder_name` | string | 文件名 |
+ | `create_time` | int64 | 创建时间 |
+ | `creator` | int64 | 创建者 |
+ | `creator_name` | string | 创建者名字 |
+ | `total_file_count` | int32 | 子文件数量 |
## 事件
@@ -667,12 +667,12 @@ Type: `tts`
**上报数据**
-| 字段 | 类型 | 可能的值 | 说明 |
-| ------------- | ------ | -------------- | -------------- |
-| `post_type` | string | `notice` | 上报类型 |
-| `notice_type` | string | `friend_recall`| 消息类型 |
-| `user_id` | int64 | | 好友id |
-| `message_id` | int64 | | 被撤回的消息id |
+| 字段 | 类型 | 可能的值 | 说明 |
+| ------------- | ------ | --------------- | -------------- |
+| `post_type` | string | `notice` | 上报类型 |
+| `notice_type` | string | `friend_recall` | 消息类型 |
+| `user_id` | int64 | | 好友id |
+| `message_id` | int64 | | 被撤回的消息id |
#### 群内戳一戳
@@ -680,14 +680,14 @@ Type: `tts`
**上报数据**
-| 字段 | 类型 | 可能的值 | 说明 |
-| ------------- | ------ | -------------- | -------------- |
-| `post_type` | string | `notice` | 上报类型 |
-| `notice_type` | string | `notify` | 消息类型 |
-| `group_id` | int64 | | 群号 |
-| `sub_type` | string | `poke` | 提示类型 |
-| `user_id` | int64 | | 发送者id |
-| `target_id` | int64 | | 被戳者id |
+| 字段 | 类型 | 可能的值 | 说明 |
+| ------------- | ------ | -------- | -------- |
+| `post_type` | string | `notice` | 上报类型 |
+| `notice_type` | string | `notify` | 消息类型 |
+| `group_id` | int64 | | 群号 |
+| `sub_type` | string | `poke` | 提示类型 |
+| `user_id` | int64 | | 发送者id |
+| `target_id` | int64 | | 被戳者id |
#### 群红包运气王提示
@@ -695,14 +695,14 @@ Type: `tts`
**上报数据**
-| 字段 | 类型 | 可能的值 | 说明 |
-| ------------- | ------ | -------------- | -------------- |
-| `post_type` | string | `notice` | 上报类型 |
-| `notice_type` | string | `notify` | 消息类型 |
-| `group_id` | int64 | | 群号 |
-| `sub_type` | string | `lucky_king` | 提示类型 |
-| `user_id` | int64 | | 红包发送者id |
-| `target_id` | int64 | | 运气王id |
+| 字段 | 类型 | 可能的值 | 说明 |
+| ------------- | ------ | ------------ | ------------ |
+| `post_type` | string | `notice` | 上报类型 |
+| `notice_type` | string | `notify` | 消息类型 |
+| `group_id` | int64 | | 群号 |
+| `sub_type` | string | `lucky_king` | 提示类型 |
+| `user_id` | int64 | | 红包发送者id |
+| `target_id` | int64 | | 运气王id |
#### 群成员荣誉变更提示
@@ -710,14 +710,14 @@ Type: `tts`
**上报数据**
-| 字段 | 类型 | 可能的值 | 说明 |
-| ------------- | ------ | -------------- | -------------- |
-| `post_type` | string | `notice` | 上报类型 |
-| `notice_type` | string | `notify` | 消息类型 |
-| `group_id` | int64 | | 群号 |
-| `sub_type` | string | `honor` | 提示类型 |
-| `user_id` | int64 | | 成员id |
-| `honor_type` | string | `talkative:龙王` `performer:群聊之火` `emotion:快乐源泉` | 荣誉类型 |
+| 字段 | 类型 | 可能的值 | 说明 |
+| ------------- | ------ | -------------------------------------------------------- | -------- |
+| `post_type` | string | `notice` | 上报类型 |
+| `notice_type` | string | `notify` | 消息类型 |
+| `group_id` | int64 | | 群号 |
+| `sub_type` | string | `honor` | 提示类型 |
+| `user_id` | int64 | | 成员id |
+| `honor_type` | string | `talkative:龙王` `performer:群聊之火` `emotion:快乐源泉` | 荣誉类型 |
#### 群成员名片更新
@@ -725,14 +725,14 @@ Type: `tts`
**上报数据**
-| 字段 | 类型 | 可能的值 | 说明 |
-| ------------- | ------ | -------------- | -------------- |
-| `post_type` | string | `notice` | 上报类型 |
-| `notice_type` | string | `group_card` | 消息类型 |
-| `group_id` | int64 | | 群号 |
-| `user_id` | int64 | | 成员id |
-| `card_new` | int64 | | 新名片 |
-| `card_old` | int64 | | 旧名片 |
+| 字段 | 类型 | 可能的值 | 说明 |
+| ------------- | ------ | ------------ | -------- |
+| `post_type` | string | `notice` | 上报类型 |
+| `notice_type` | string | `group_card` | 消息类型 |
+| `group_id` | int64 | | 群号 |
+| `user_id` | int64 | | 成员id |
+| `card_new` | int64 | | 新名片 |
+| `card_old` | int64 | | 旧名片 |
> PS: 当名片为空时 `card_xx` 字段为空字符串, 并不是昵称
@@ -740,17 +740,17 @@ Type: `tts`
**上报数据**
-| 字段 | 类型 | 可能的值 | 说明 |
-| ------------- | ------ | -------------- | -------------- |
-| `post_type` | string | `notice` | 上报类型 |
-| `notice_type` | string | `offline_file` | 消息类型 |
-| `user_id` | int64 | | 发送者id |
-| `file` | object | | 文件数据 |
+| 字段 | 类型 | 可能的值 | 说明 |
+| ------------- | ------ | -------------- | -------- |
+| `post_type` | string | `notice` | 上报类型 |
+| `notice_type` | string | `offline_file` | 消息类型 |
+| `user_id` | int64 | | 发送者id |
+| `file` | object | | 文件数据 |
**file object**
-| 字段 | 类型 | 可能的值 | 说明 |
-| ------------- | ------ | -------------- | -------------- |
-| `name` | string | | 文件名 |
-| `size` | int64 | | 文件大小 |
-| `url` | string | | 下载链接 |
\ No newline at end of file
+| 字段 | 类型 | 可能的值 | 说明 |
+| ------ | ------ | -------- | -------- |
+| `name` | string | | 文件名 |
+| `size` | int64 | | 文件大小 |
+| `url` | string | | 下载链接 |
\ No newline at end of file
diff --git a/docs/quick_start.md b/docs/quick_start.md
index 67fcbab..778a533 100644
--- a/docs/quick_start.md
+++ b/docs/quick_start.md
@@ -117,7 +117,7 @@ enable ws?(Y/n)
*注:可以使用*`go env -w GOPROXY=https://goproxy.cn,direct`*来加速国内依赖安装速度*
-*注:此时构建后的文件名为*`main`(Linux)或`main.exe`(Windows)
+*注:此时构建后的文件名为*`go-cqhttp`(Linux)或`go-cqhttp.exe`(Windows)
## 更新
diff --git a/global/codec.go b/global/codec.go
index b519b68..bc9b9e0 100644
--- a/global/codec.go
+++ b/global/codec.go
@@ -4,11 +4,12 @@ import (
"crypto/md5"
"errors"
"fmt"
- log "github.com/sirupsen/logrus"
- "github.com/wdvxdr1123/go-silk/silk"
"io/ioutil"
"path"
"sync"
+
+ log "github.com/sirupsen/logrus"
+ "github.com/wdvxdr1123/go-silk/silk"
)
var codec silk.Encoder
diff --git a/global/filter.go b/global/filter.go
index b2ac4cb..f47f62e 100644
--- a/global/filter.go
+++ b/global/filter.go
@@ -1,11 +1,12 @@
package global
import (
- log "github.com/sirupsen/logrus"
- "github.com/tidwall/gjson"
"io/ioutil"
"regexp"
"strings"
+
+ log "github.com/sirupsen/logrus"
+ "github.com/tidwall/gjson"
)
type Filter interface {
diff --git a/global/fs.go b/global/fs.go
index d8bccaf..10dc7a2 100644
--- a/global/fs.go
+++ b/global/fs.go
@@ -7,8 +7,6 @@ import (
"encoding/hex"
"errors"
"fmt"
- "github.com/dustin/go-humanize"
- log "github.com/sirupsen/logrus"
"io/ioutil"
"net"
"net/url"
@@ -17,6 +15,9 @@ import (
"runtime"
"strconv"
"strings"
+
+ "github.com/dustin/go-humanize"
+ log "github.com/sirupsen/logrus"
)
var (
diff --git a/global/net.go b/global/net.go
index d30d796..1495fb1 100644
--- a/global/net.go
+++ b/global/net.go
@@ -4,11 +4,12 @@ import (
"bytes"
"compress/gzip"
"fmt"
- "github.com/tidwall/gjson"
"io/ioutil"
"net/http"
"strings"
"time"
+
+ "github.com/tidwall/gjson"
)
var client = &http.Client{
diff --git a/global/param.go b/global/param.go
index 5f01bea..7acd5eb 100644
--- a/global/param.go
+++ b/global/param.go
@@ -1,11 +1,12 @@
package global
import (
- "github.com/tidwall/gjson"
"math"
"regexp"
"strconv"
"strings"
+
+ "github.com/tidwall/gjson"
)
var trueSet = map[string]struct{}{
diff --git a/global/ratelimit.go b/global/ratelimit.go
index 79594be..b8bfb2a 100644
--- a/global/ratelimit.go
+++ b/global/ratelimit.go
@@ -2,6 +2,7 @@ package global
import (
"context"
+
"golang.org/x/time/rate"
)
diff --git a/go.mod b/go.mod
index f5e3726..6f2fbe4 100644
--- a/go.mod
+++ b/go.mod
@@ -3,13 +3,16 @@ module github.com/Mrs4s/go-cqhttp
go 1.14
require (
- github.com/Mrs4s/MiraiGo v0.0.0-20201114110437-3d349df7362e
+ github.com/Mrs4s/MiraiGo v0.0.0-20201114160242-6b9dd7feaa20
github.com/dustin/go-humanize v1.0.0
+ github.com/fastly/go-utils v0.0.0-20180712184237-d95a45783239 // indirect
github.com/getlantern/go-update v0.0.0-20190510022740-79c495ab728c
github.com/getlantern/golog v0.0.0-20201105130739-9586b8bde3a9 // indirect
github.com/gin-gonic/gin v1.6.3
github.com/gorilla/websocket v1.4.2
github.com/guonaihong/gout v0.1.3
+ github.com/jehiah/go-strftime v0.0.0-20171201141054-1d33003b3869 // indirect
+ github.com/jonboulle/clockwork v0.2.2 // indirect
github.com/kardianos/osext v0.0.0-20190222173326-2bc1f35cddc0 // indirect
github.com/kr/binarydist v0.1.0 // indirect
github.com/lestrrat-go/file-rotatelogs v2.4.0+incompatible
@@ -19,6 +22,7 @@ require (
github.com/sirupsen/logrus v1.7.0
github.com/syndtr/goleveldb v1.0.0
github.com/t-tomalak/logrus-easy-formatter v0.0.0-20190827215021-c074f06c5816
+ github.com/tebeka/strftime v0.1.5 // indirect
github.com/tidwall/gjson v1.6.3
github.com/wdvxdr1123/go-silk v0.0.0-20201007123416-b982fd3d91d6
github.com/yinghau76/go-ascii-art v0.0.0-20190517192627-e7f465a30189
diff --git a/go.sum b/go.sum
index c984143..f240eb0 100644
--- a/go.sum
+++ b/go.sum
@@ -6,6 +6,8 @@ github.com/Mrs4s/MiraiGo v0.0.0-20201114105600-231b2d89dbb9 h1:evnR9D9rXcBTUzioF
github.com/Mrs4s/MiraiGo v0.0.0-20201114105600-231b2d89dbb9/go.mod h1:pAsWtMIwqkBXr5DkUpTIHoWQJNduVnX9WSBPmPvkuCs=
github.com/Mrs4s/MiraiGo v0.0.0-20201114110437-3d349df7362e h1:cE3YcEtd9LWqtR4nyxciRg/qLaJ6jW9eO8I6ZW7oNDw=
github.com/Mrs4s/MiraiGo v0.0.0-20201114110437-3d349df7362e/go.mod h1:pAsWtMIwqkBXr5DkUpTIHoWQJNduVnX9WSBPmPvkuCs=
+github.com/Mrs4s/MiraiGo v0.0.0-20201114160242-6b9dd7feaa20 h1:/9ewpT69zkqTuHvWiFKPZ7LiDflpbSuaFiUKloVBxYQ=
+github.com/Mrs4s/MiraiGo v0.0.0-20201114160242-6b9dd7feaa20/go.mod h1:pAsWtMIwqkBXr5DkUpTIHoWQJNduVnX9WSBPmPvkuCs=
github.com/census-instrumentation/opencensus-proto v0.2.1/go.mod h1:f6KPmirojxKA12rnyqOA5BBL4O983OfeGPqjHWSTneU=
github.com/client9/misspell v0.3.4/go.mod h1:qj6jICC3Q7zFZvVWo7KLAzC3yx5G7kyvSDkc90ppPyw=
github.com/davecgh/go-spew v1.1.0/go.mod h1:J7Y8YcW2NihsgmVo/mv3lAwl/skON4iLHjSsI+c5H38=
@@ -14,6 +16,8 @@ github.com/dustin/go-humanize v1.0.0 h1:VSnTsYCnlFHaM2/igO1h6X3HA71jcobQuxemgkq4
github.com/dustin/go-humanize v1.0.0/go.mod h1:HtrtbFcZ19U5GC7JDqmcUSB87Iq5E25KnS6fMYU6eOk=
github.com/envoyproxy/go-control-plane v0.9.1-0.20191026205805-5f8ba28d4473/go.mod h1:YTl/9mNaCwkRvm6d1a2C3ymFceY/DCBVvsKhRF0iEA4=
github.com/envoyproxy/protoc-gen-validate v0.1.0/go.mod h1:iSmxcyjqTsJpI2R4NaDN7+kN2VEUnK/pcBlmesArF7c=
+github.com/fastly/go-utils v0.0.0-20180712184237-d95a45783239 h1:Ghm4eQYC0nEPnSJdVkTrXpu9KtoVCSo1hg7mtI7G9KU=
+github.com/fastly/go-utils v0.0.0-20180712184237-d95a45783239/go.mod h1:Gdwt2ce0yfBxPvZrHkprdPPTTS3N5rwmLE8T22KBXlw=
github.com/fsnotify/fsnotify v1.4.7/go.mod h1:jwhsz4b93w/PPRr/qN1Yymfu8t87LnFCMoQvtojpjFo=
github.com/getlantern/context v0.0.0-20190109183933-c447772a6520 h1:NRUJuo3v3WGC/g5YiyF790gut6oQr5f3FBI88Wv0dx4=
github.com/getlantern/context v0.0.0-20190109183933-c447772a6520/go.mod h1:L+mq6/vvYHKjCX2oez0CgEAJmbq1fbb/oNJIWQkBybY=
@@ -72,6 +76,10 @@ github.com/gorilla/websocket v1.4.2/go.mod h1:YR8l580nyteQvAITg2hZ9XVh4b55+EU/ad
github.com/guonaihong/gout v0.1.3 h1:BIiV6nnsA+R6dIB1P33uhCM8+TVAG3zHrXGZad7hDc8=
github.com/guonaihong/gout v0.1.3/go.mod h1:vXvv5Kxr70eM5wrp4F0+t9lnLWmq+YPW2GByll2f/EA=
github.com/hpcloud/tail v1.0.0/go.mod h1:ab1qPbhIpdTxEkNHXyeSf5vhxWSCs/tWer42PpOxQnU=
+github.com/jehiah/go-strftime v0.0.0-20171201141054-1d33003b3869 h1:IPJ3dvxmJ4uczJe5YQdrYB16oTJlGSC/OyZDqUk9xX4=
+github.com/jehiah/go-strftime v0.0.0-20171201141054-1d33003b3869/go.mod h1:cJ6Cj7dQo+O6GJNiMx+Pa94qKj+TG8ONdKHgMNIyyag=
+github.com/jonboulle/clockwork v0.2.2 h1:UOGuzwb1PwsrDAObMuhUnj0p5ULPj8V/xJ7Kx9qUBdQ=
+github.com/jonboulle/clockwork v0.2.2/go.mod h1:Pkfl5aHPm1nk2H9h0bjmnJD/BcgbGXUBGnn1kMkgxc8=
github.com/json-iterator/go v1.1.7/go.mod h1:KdQUCv79m/52Kvf8AW2vK1V8akMuk1QjK/uOdHXbAo4=
github.com/json-iterator/go v1.1.9/go.mod h1:KdQUCv79m/52Kvf8AW2vK1V8akMuk1QjK/uOdHXbAo4=
github.com/kardianos/osext v0.0.0-20190222173326-2bc1f35cddc0 h1:iQTw/8FWTuc7uiaSepXwyf3o52HaUYcV+Tu66S3F5GA=
@@ -118,6 +126,8 @@ github.com/syndtr/goleveldb v1.0.0 h1:fBdIW9lB4Iz0n9khmH8w27SJ3QEJ7+IgjPEwGSZiFd
github.com/syndtr/goleveldb v1.0.0/go.mod h1:ZVVdQEZoIme9iO1Ch2Jdy24qqXrMMOU6lpPAyBWyWuQ=
github.com/t-tomalak/logrus-easy-formatter v0.0.0-20190827215021-c074f06c5816 h1:J6v8awz+me+xeb/cUTotKgceAYouhIB3pjzgRd6IlGk=
github.com/t-tomalak/logrus-easy-formatter v0.0.0-20190827215021-c074f06c5816/go.mod h1:tzym/CEb5jnFI+Q0k4Qq3+LvRF4gO3E2pxS8fHP8jcA=
+github.com/tebeka/strftime v0.1.5 h1:1NQKN1NiQgkqd/2moD6ySP/5CoZQsKa1d3ZhJ44Jpmg=
+github.com/tebeka/strftime v0.1.5/go.mod h1:29/OidkoWHdEKZqzyDLUyC+LmgDgdHo4WAFCDT7D/Ig=
github.com/tidwall/gjson v1.6.1/go.mod h1:BaHyNc5bjzYkPqgLq7mdVzeiRtULKULXLgZFKsxEHI0=
github.com/tidwall/gjson v1.6.3 h1:aHoiiem0dr7GHkW001T1SMTJ7X5PvyekH5WX0whWGnI=
github.com/tidwall/gjson v1.6.3/go.mod h1:BaHyNc5bjzYkPqgLq7mdVzeiRtULKULXLgZFKsxEHI0=
diff --git a/main.go b/main.go
index 926f65b..b09ece5 100644
--- a/main.go
+++ b/main.go
@@ -2,33 +2,37 @@ package main
import (
"bufio"
+ "context"
"crypto/md5"
"encoding/base64"
"encoding/json"
"fmt"
- "github.com/Mrs4s/go-cqhttp/server"
- "github.com/guonaihong/gout"
- "github.com/tidwall/gjson"
"io"
"io/ioutil"
"net/http"
"os"
+ "os/exec"
"os/signal"
"path"
+ "path/filepath"
"runtime"
"strconv"
"strings"
"time"
+ "github.com/Mrs4s/go-cqhttp/server"
+ "github.com/guonaihong/gout"
+ "github.com/tidwall/gjson"
+
"github.com/Mrs4s/MiraiGo/binary"
"github.com/Mrs4s/MiraiGo/client"
"github.com/Mrs4s/go-cqhttp/coolq"
"github.com/Mrs4s/go-cqhttp/global"
"github.com/getlantern/go-update"
- "github.com/lestrrat-go/file-rotatelogs"
+ rotatelogs "github.com/lestrrat-go/file-rotatelogs"
"github.com/rifflock/lfshook"
log "github.com/sirupsen/logrus"
- "github.com/t-tomalak/logrus-easy-formatter"
+ easy "github.com/t-tomalak/logrus-easy-formatter"
)
func init() {
@@ -93,13 +97,27 @@ func init() {
func main() {
console := bufio.NewReader(os.Stdin)
-
+ var strKey string
+ var isFastStart bool = false
arg := os.Args
- if len(arg) > 1 && arg[1] == "update" {
- if len(arg) > 2 {
- selfUpdate(arg[2])
- } else {
- selfUpdate("")
+ if len(arg) > 1 {
+ for i := range arg {
+ switch arg[i] {
+ case "update":
+ if len(arg) > i+1 {
+ selfUpdate(arg[i+1])
+ } else {
+ selfUpdate("")
+ }
+ case "key":
+ if len(arg) > i+1 {
+ b := []byte(arg[i+1])
+ b = append(b, 13, 10)
+ strKey = string(b[:])
+ }
+ case "faststart":
+ isFastStart = true
+ }
}
}
@@ -216,13 +234,31 @@ func main() {
}
}
if conf.PasswordEncrypted != "" {
- log.Infof("密码加密已启用, 请输入Key对密码进行解密以继续: (Enter 提交)")
- strKey, _ := console.ReadString('\n')
+ if strKey == "" {
+ log.Infof("密码加密已启用, 请输入Key对密码进行解密以继续: (Enter 提交)")
+ ctx := context.Background()
+ go func(ctx context.Context) {
+ select {
+ case <-ctx.Done():
+ return
+ case <-time.After(time.Second * 45):
+ log.Infof("解密key输入超时")
+ time.Sleep(3 * time.Second)
+ os.Exit(0)
+ }
+ }(ctx)
+ strKey, _ = console.ReadString('\n')
+ ctx.Done()
+ } else {
+ log.Infof("密码加密已启用, 使用运行时传递的参数进行解密,按 Ctrl+C 取消.")
+ }
key := md5.Sum([]byte(strKey))
conf.Password = DecryptPwd(conf.PasswordEncrypted, key[:])
}
- log.Info("Bot将在5秒后登录并开始信息处理, 按 Ctrl+C 取消.")
- time.Sleep(time.Second * 5)
+ if !isFastStart {
+ log.Info("Bot将在5秒后登录并开始信息处理, 按 Ctrl+C 取消.")
+ time.Sleep(time.Second * 5)
+ }
log.Info("开始尝试登录并同步消息...")
log.Infof("使用协议: %v", func() string {
switch client.SystemDeviceInfo.Protocol {
@@ -284,10 +320,18 @@ func main() {
}
b := server.WebServer.Run(fmt.Sprintf("%s:%d", conf.WebUi.Host, conf.WebUi.WebUiPort), cli)
c := server.Console
+ r := server.Restart
go checkUpdate()
signal.Notify(c, os.Interrupt, os.Kill)
- <-c
- b.Release()
+ select {
+ case <-c:
+ b.Release()
+ case <-r:
+ log.Info("正在重启中...")
+ server.HttpServer.ShutDown()
+ defer b.Release()
+ restart(arg)
+ }
}
func EncryptPwd(pwd string, key []byte) string {
@@ -406,3 +450,34 @@ func selfUpdate(imageUrl string) {
readLine()
os.Exit(0)
}
+
+func restart(Args []string) {
+ cmd := &exec.Cmd{}
+ if runtime.GOOS == "windows" {
+ file, err := exec.LookPath(Args[0])
+ if err != nil {
+ log.Errorf("重启失败:%s", err.Error())
+ return
+ }
+ path, err := filepath.Abs(file)
+ if err != nil {
+ log.Errorf("重启失败:%s", err.Error())
+ }
+ Args = append([]string{"/c", "start ", path, "faststart"}, Args[1:]...)
+ cmd = &exec.Cmd{
+ Path: "cmd.exe",
+ Args: Args,
+ Stderr: os.Stderr,
+ Stdout: os.Stdout,
+ }
+ } else {
+ Args = append(Args, "faststart")
+ cmd = &exec.Cmd{
+ Path: Args[0],
+ Args: Args,
+ Stderr: os.Stderr,
+ Stdout: os.Stdout,
+ }
+ }
+ cmd.Start()
+}
diff --git a/server/apiAdmin.go b/server/apiAdmin.go
index 3454273..6c14120 100644
--- a/server/apiAdmin.go
+++ b/server/apiAdmin.go
@@ -6,13 +6,6 @@ import (
"encoding/base64"
"encoding/json"
"fmt"
- "github.com/Mrs4s/MiraiGo/client"
- "github.com/Mrs4s/go-cqhttp/coolq"
- "github.com/Mrs4s/go-cqhttp/global"
- "github.com/gin-gonic/gin"
- log "github.com/sirupsen/logrus"
- "github.com/tidwall/gjson"
- "github.com/yinghau76/go-ascii-art"
"image"
"io/ioutil"
"net/http"
@@ -21,12 +14,22 @@ import (
"strconv"
"strings"
"time"
+
+ "github.com/Mrs4s/MiraiGo/client"
+ "github.com/Mrs4s/go-cqhttp/coolq"
+ "github.com/Mrs4s/go-cqhttp/global"
+ "github.com/gin-gonic/gin"
+ log "github.com/sirupsen/logrus"
+ "github.com/tidwall/gjson"
+ asciiart "github.com/yinghau76/go-ascii-art"
)
var WebInput = make(chan string, 1) //长度1,用于阻塞
var Console = make(chan os.Signal, 1)
+var Restart = make(chan struct{}, 1)
+
var JsonConfig *global.JsonConfig
type webServer struct {
@@ -41,16 +44,17 @@ var WebServer = &webServer{}
// admin 子站的 路由映射
var HttpuriAdmin = map[string]func(s *webServer, c *gin.Context){
- "do_restart": AdminDoRestart, //热重启
- "get_web_write": AdminWebWrite, //获取是否验证码输入
- "do_web_write": AdminDoWebWrite, //web上进行输入操作
- "do_restart_docker": AdminDoRestartDocker, //直接停止(依赖supervisord/docker)重新拉起
- "do_config_base": AdminDoConfigBase, //修改config.json中的基础部分
- "do_config_http": AdminDoConfigHttp, //修改config.json的http部分
- "do_config_ws": AdminDoConfigWs, //修改config.json的正向ws部分
- "do_config_reverse": AdminDoConfigReverse, //修改config.json 中的反向ws部分
- "do_config_json": AdminDoConfigJson, //直接修改 config.json配置
- "get_config_json": AdminGetConfigJson, //拉取 当前的config.json配置
+ "do_restart": AdminDoRestart, //热重启
+ "do_process_restart": AdminProcessRestart, //进程重启
+ "get_web_write": AdminWebWrite, //获取是否验证码输入
+ "do_web_write": AdminDoWebWrite, //web上进行输入操作
+ "do_restart_docker": AdminDoRestartDocker, //直接停止(依赖supervisord/docker)重新拉起
+ "do_config_base": AdminDoConfigBase, //修改config.json中的基础部分
+ "do_config_http": AdminDoConfigHttp, //修改config.json的http部分
+ "do_config_ws": AdminDoConfigWs, //修改config.json的正向ws部分
+ "do_config_reverse": AdminDoConfigReverse, //修改config.json 中的反向ws部分
+ "do_config_json": AdminDoConfigJson, //直接修改 config.json配置
+ "get_config_json": AdminGetConfigJson, //拉取 当前的config.json配置
}
func Failed(code int, msg string) coolq.MSG {
@@ -423,6 +427,12 @@ func AdminDoRestart(s *webServer, c *gin.Context) {
return
}
+// 进程重启
+func AdminProcessRestart(s *webServer, c *gin.Context) {
+ Restart <- struct{}{}
+ c.JSON(200, coolq.OK(coolq.MSG{}))
+}
+
// 冷重启
func AdminDoRestartDocker(s *webServer, c *gin.Context) {
Console <- os.Kill
diff --git a/server/http.go b/server/http.go
index 8c12e43..f79d443 100644
--- a/server/http.go
+++ b/server/http.go
@@ -5,13 +5,14 @@ import (
"crypto/hmac"
"crypto/sha1"
"encoding/hex"
- "github.com/guonaihong/gout/dataflow"
"net/http"
"os"
"strconv"
"strings"
"time"
+ "github.com/guonaihong/gout/dataflow"
+
"github.com/Mrs4s/go-cqhttp/coolq"
"github.com/Mrs4s/go-cqhttp/global"
"github.com/gin-gonic/gin"
@@ -343,6 +344,16 @@ func SetGroupLeave(s *httpServer, c *gin.Context) {
c.JSON(200, s.bot.CQSetGroupLeave(gid))
}
+func SetRestart(s *httpServer, c *gin.Context) {
+ delay, _ := strconv.ParseInt(getParam(c, "delay"), 10, 64)
+ c.JSON(200, coolq.MSG{"data": nil, "retcode": 0, "status": "async"})
+ go func(delay int64) {
+ time.Sleep(time.Duration(delay) * time.Millisecond)
+ Restart <- struct{}{}
+ }(delay)
+
+}
+
func GetForwardMessage(s *httpServer, c *gin.Context) {
resId := getParam(c, "message_id")
c.JSON(200, s.bot.CQGetForwardMessage(resId))
@@ -488,6 +499,7 @@ var httpApi = map[string]func(s *httpServer, c *gin.Context){
"set_group_whole_ban": SetWholeBan,
"set_group_name": SetGroupName,
"set_group_admin": SetGroupAdmin,
+ "set_restart": SetRestart,
"_send_group_notice": SendGroupNotice,
"set_group_leave": SetGroupLeave,
"get_image": GetImage,
diff --git a/server/websocket.go b/server/websocket.go
index 668ea00..5de0e49 100644
--- a/server/websocket.go
+++ b/server/websocket.go
@@ -480,6 +480,19 @@ var wsApi = map[string]func(*coolq.CQBot, gjson.Result) coolq.MSG{
"get_group_honor_info": func(bot *coolq.CQBot, p gjson.Result) coolq.MSG {
return bot.CQGetGroupHonorInfo(p.Get("group_id").Int(), p.Get("type").Str)
},
+ "set_restart": func(c *coolq.CQBot, p gjson.Result) coolq.MSG {
+ var delay int64 = 0
+ delay = p.Get("delay").Int()
+ if delay < 0 {
+ delay = 0
+ }
+ defer func(delay int64) {
+ time.Sleep(time.Duration(delay) * time.Millisecond)
+ Restart <- struct{}{}
+ }(delay)
+ return coolq.MSG{"data": nil, "retcode": 0, "status": "async"}
+
+ },
"can_send_image": func(bot *coolq.CQBot, p gjson.Result) coolq.MSG {
return bot.CQCanSendImage()
},