mirror of
https://github.com/Mrs4s/go-cqhttp.git
synced 2025-05-05 03:23:49 +08:00
Merge branch 'dev' of https://github.com/Mrs4s/go-cqhttp into dev
This commit is contained in:
commit
7ae9c2d220
232
docs/adminApi.md
Normal file
232
docs/adminApi.md
Normal file
@ -0,0 +1,232 @@
|
|||||||
|
# 管理 API
|
||||||
|
|
||||||
|
> 支持跨域
|
||||||
|
|
||||||
|
## 公共参数
|
||||||
|
|
||||||
|
参数:
|
||||||
|
|
||||||
|
| 参数名 | 类型 | 说明 |
|
||||||
|
| ------ | ------ | ----------- |
|
||||||
|
| access_token | string | 校验口令,config.json中配置 |
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
## admin/do_restart
|
||||||
|
|
||||||
|
### 热重启
|
||||||
|
|
||||||
|
> 热重启
|
||||||
|
|
||||||
|
> ps: 目前不支持ws部分的修改生效
|
||||||
|
|
||||||
|
method:`POST/GET`
|
||||||
|
|
||||||
|
参数:
|
||||||
|
|
||||||
|
| 参数名 | 类型 | 说明 |
|
||||||
|
| ------ | ---- | ------------------------------------- |
|
||||||
|
| 无|||
|
||||||
|
|
||||||
|
返回:
|
||||||
|
|
||||||
|
```json
|
||||||
|
{"data": {}, "retcode": 0, "status": "ok"}
|
||||||
|
```
|
||||||
|
|
||||||
|
|
||||||
|
### admin/get_web_write
|
||||||
|
|
||||||
|
> 拉取验证码/设备锁
|
||||||
|
|
||||||
|
method: `GET`
|
||||||
|
|
||||||
|
|
||||||
|
参数:
|
||||||
|
|
||||||
|
| 参数名 | 类型 | 说明 |
|
||||||
|
| ------ | ------ | ----------- |
|
||||||
|
| 无|||
|
||||||
|
|
||||||
|
返回:
|
||||||
|
|
||||||
|
```json
|
||||||
|
{"data": {"ispic": true,"picbase64":"xxxxx"}, "retcode": 0, "status": "ok"}
|
||||||
|
```
|
||||||
|
| 参数名 | 类型 | 说明 |
|
||||||
|
| ------ | ------ | ----------- |
|
||||||
|
| ispic| bool| 是否是验证码类型 true是,false为不是(比如设备锁|
|
||||||
|
|picbas64| string| 验证码的base64编码内容,加上头,放入img标签即可显示|
|
||||||
|
|
||||||
|
### admin/do_web_write
|
||||||
|
|
||||||
|
> web输入验证码/设备锁确认
|
||||||
|
|
||||||
|
method: `POST` formdata
|
||||||
|
|
||||||
|
|
||||||
|
参数:
|
||||||
|
|
||||||
|
| 参数名 | 类型 | 说明 |
|
||||||
|
| ------ | ------ | ----------- |
|
||||||
|
| input | string | 输入的类容 |
|
||||||
|
|
||||||
|
返回:
|
||||||
|
|
||||||
|
```json
|
||||||
|
{"data": {}, "retcode": 0, "status": "ok"}
|
||||||
|
```
|
||||||
|
|
||||||
|
|
||||||
|
### admin/do_restart_docker
|
||||||
|
|
||||||
|
> 冷重启
|
||||||
|
|
||||||
|
> 注意:此api 会直接结束掉进程,需要依赖docker/supervisor等进程管理工具来自动拉起
|
||||||
|
|
||||||
|
method: `POST`
|
||||||
|
|
||||||
|
|
||||||
|
参数:
|
||||||
|
|
||||||
|
| 参数名 |类型 | 说明 |
|
||||||
|
| ------ | ------ | -----------|
|
||||||
|
| 无 | | |
|
||||||
|
|
||||||
|
返回:
|
||||||
|
|
||||||
|
```json
|
||||||
|
{"data": {}, "retcode": 0, "status": "ok"}
|
||||||
|
```
|
||||||
|
|
||||||
|
### admin/do_config_base
|
||||||
|
|
||||||
|
> 基础配置
|
||||||
|
|
||||||
|
method: `POST` formdata
|
||||||
|
|
||||||
|
|
||||||
|
参数:
|
||||||
|
|
||||||
|
| 参数名 | 类型 | 说明 |
|
||||||
|
| ------ | ------ | ------------------------------------------------------------ |
|
||||||
|
| uin | string | qq号 |
|
||||||
|
| password | string | qq密码 |
|
||||||
|
| enable_db | string | 是否启动数据库,填 'true' 或者 'false' |
|
||||||
|
| access_token | string | 授权 token |
|
||||||
|
|
||||||
|
返回:
|
||||||
|
|
||||||
|
```json
|
||||||
|
{"data": {}, "retcode": 0, "status": "ok"}
|
||||||
|
```
|
||||||
|
|
||||||
|
|
||||||
|
### admin/do_config_http
|
||||||
|
|
||||||
|
> http服务配置
|
||||||
|
|
||||||
|
method: `POST` formdata
|
||||||
|
|
||||||
|
参数:
|
||||||
|
|
||||||
|
| 参数名 | 类型 | 说明 |
|
||||||
|
| ------ | ------ | ------------------------------------------------------------ |
|
||||||
|
| port | string | 服务端口 |
|
||||||
|
| host | string | 服务监听地址 |
|
||||||
|
| enable | string | 是否启用 ,填 'true' 或者 'false' |
|
||||||
|
| timeout | string | http请求超时时间 |
|
||||||
|
| post_url | string | post上报地址 不需要就填空字符串,或者不填|
|
||||||
|
| post_secret | string | post上报的secret 不需要就填空字符串,或者不填 |
|
||||||
|
|
||||||
|
返回:
|
||||||
|
|
||||||
|
```json
|
||||||
|
{"data": {}, "retcode": 0, "status": "ok"}
|
||||||
|
```
|
||||||
|
|
||||||
|
|
||||||
|
### admin/do_config_ws
|
||||||
|
|
||||||
|
> 正向ws设置
|
||||||
|
|
||||||
|
method: `POST` formdata
|
||||||
|
|
||||||
|
参数:
|
||||||
|
|
||||||
|
| 参数名 | 类型 | 说明 |
|
||||||
|
| ------ | ------ | ------------------------------------------------------------ |
|
||||||
|
| port | string | 服务端口 |
|
||||||
|
| host | string | 服务监听地址 |
|
||||||
|
| enable | string | 是否启用 ,填 'true' 或者 'false' |
|
||||||
|
|
||||||
|
|
||||||
|
返回:
|
||||||
|
|
||||||
|
```json
|
||||||
|
{"data": {}, "retcode": 0, "status": "ok"}
|
||||||
|
```
|
||||||
|
|
||||||
|
### admin/do_config_reverse
|
||||||
|
|
||||||
|
> 反向ws配置
|
||||||
|
|
||||||
|
method: `POST` formdata
|
||||||
|
|
||||||
|
参数:
|
||||||
|
|
||||||
|
| 参数名 | 类型 | 说明 |
|
||||||
|
| ------ | ------ | ------------------------------------------------------------ |
|
||||||
|
| port | string | 服务端口 |
|
||||||
|
| host | string | 服务监听地址 |
|
||||||
|
| enable | string | 是否启用 ,填 'true' 或者 'false' |
|
||||||
|
|
||||||
|
|
||||||
|
返回:
|
||||||
|
|
||||||
|
```json
|
||||||
|
{"data": {}, "retcode": 0, "status": "ok"}
|
||||||
|
```
|
||||||
|
|
||||||
|
### admin/do_config_json
|
||||||
|
|
||||||
|
> 直接修改 config.json配置
|
||||||
|
|
||||||
|
method: `POST` formdata
|
||||||
|
|
||||||
|
参数:
|
||||||
|
|
||||||
|
| 参数名 | 类型 | 说明 |
|
||||||
|
| ------ | ------ | ------------------------------------------------------------ |
|
||||||
|
| json | string | 完整的config.json的配合,json字符串 |
|
||||||
|
|
||||||
|
|
||||||
|
返回:
|
||||||
|
|
||||||
|
```json
|
||||||
|
{"data": {}, "retcode": 0, "status": "ok"}
|
||||||
|
```
|
||||||
|
|
||||||
|
### admin/get_config_json
|
||||||
|
|
||||||
|
> 获取当前 config.json配置
|
||||||
|
|
||||||
|
method: `GET`
|
||||||
|
|
||||||
|
参数:
|
||||||
|
|
||||||
|
| 参数名 | 类型 | 说明 |
|
||||||
|
| ------ | ------ | ------------------------------------------------------------ |
|
||||||
|
| 无 | | |
|
||||||
|
|
||||||
|
|
||||||
|
返回:
|
||||||
|
|
||||||
|
```json
|
||||||
|
{"data": {"config":"xxxx"}, "retcode": 0, "status": "ok"}
|
||||||
|
```
|
||||||
|
|
||||||
|
| 参数名 | 类型 | 说明 |
|
||||||
|
| ------ | ------ | ------------------------------------------------------------ |
|
||||||
|
| config | string | 完整的config.json的配合,json字符串 |
|
||||||
|
|
@ -81,6 +81,7 @@ type GoCQReverseWebsocketConfig struct {
|
|||||||
|
|
||||||
type GoCqWebUi struct {
|
type GoCqWebUi struct {
|
||||||
Enabled bool `json:"enabled"`
|
Enabled bool `json:"enabled"`
|
||||||
|
Host string `json:"host"`
|
||||||
WebUiPort uint64 `json:"web_ui_port"`
|
WebUiPort uint64 `json:"web_ui_port"`
|
||||||
WebInput bool `json:"web_input"`
|
WebInput bool `json:"web_input"`
|
||||||
}
|
}
|
||||||
@ -130,6 +131,7 @@ func DefaultConfig() *JsonConfig {
|
|||||||
},
|
},
|
||||||
WebUi: &GoCqWebUi{
|
WebUi: &GoCqWebUi{
|
||||||
Enabled: true,
|
Enabled: true,
|
||||||
|
Host: "0.0.0.0",
|
||||||
WebInput: false,
|
WebInput: false,
|
||||||
WebUiPort: 9999,
|
WebUiPort: 9999,
|
||||||
},
|
},
|
||||||
|
6
main.go
6
main.go
@ -237,17 +237,21 @@ func main() {
|
|||||||
conf.WebUi = &global.GoCqWebUi{
|
conf.WebUi = &global.GoCqWebUi{
|
||||||
Enabled: true,
|
Enabled: true,
|
||||||
WebInput: false,
|
WebInput: false,
|
||||||
|
Host: "0.0.0.0",
|
||||||
WebUiPort: 9999,
|
WebUiPort: 9999,
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
if conf.WebUi.WebUiPort <= 0 {
|
if conf.WebUi.WebUiPort <= 0 {
|
||||||
conf.WebUi.WebUiPort = 9999
|
conf.WebUi.WebUiPort = 9999
|
||||||
}
|
}
|
||||||
|
if conf.WebUi.Host == "" {
|
||||||
|
conf.WebUi.Host = "0.0.0.0"
|
||||||
|
}
|
||||||
confErr := conf.Save("config.json")
|
confErr := conf.Save("config.json")
|
||||||
if confErr != nil {
|
if confErr != nil {
|
||||||
log.Error("保存配置文件失败")
|
log.Error("保存配置文件失败")
|
||||||
}
|
}
|
||||||
b := server.WebServer.Run(fmt.Sprintf("%s:%d", "0.0.0.0", conf.WebUi.WebUiPort), cli)
|
b := server.WebServer.Run(fmt.Sprintf("%s:%d", conf.WebUi.Host, conf.WebUi.WebUiPort), cli)
|
||||||
c := server.Console
|
c := server.Console
|
||||||
signal.Notify(c, os.Interrupt, os.Kill)
|
signal.Notify(c, os.Interrupt, os.Kill)
|
||||||
<-c
|
<-c
|
||||||
|
@ -17,6 +17,7 @@ import (
|
|||||||
"io/ioutil"
|
"io/ioutil"
|
||||||
"net/http"
|
"net/http"
|
||||||
"os"
|
"os"
|
||||||
|
"os/signal"
|
||||||
"strconv"
|
"strconv"
|
||||||
"strings"
|
"strings"
|
||||||
"time"
|
"time"
|
||||||
@ -49,7 +50,7 @@ var HttpuriAdmin = map[string]func(s *webServer, c *gin.Context){
|
|||||||
"do_config_ws": AdminDoConfigWs, //修改config.json的正向ws部分
|
"do_config_ws": AdminDoConfigWs, //修改config.json的正向ws部分
|
||||||
"do_config_reverse": AdminDoConfigReverse, //修改config.json 中的反向ws部分
|
"do_config_reverse": AdminDoConfigReverse, //修改config.json 中的反向ws部分
|
||||||
"do_config_json": AdminDoConfigJson, //直接修改 config.json配置
|
"do_config_json": AdminDoConfigJson, //直接修改 config.json配置
|
||||||
"get_config_json": AdminDoConfigJson, //拉取 当前的config.json配置
|
"get_config_json": AdminGetConfigJson, //拉取 当前的config.json配置
|
||||||
}
|
}
|
||||||
|
|
||||||
func Failed(code int, msg string) coolq.MSG {
|
func Failed(code int, msg string) coolq.MSG {
|
||||||
@ -69,12 +70,21 @@ func (s *webServer) Run(addr string, cli *client.QQClient) *coolq.CQBot {
|
|||||||
s.engine.Any("/admin/:action", s.admin)
|
s.engine.Any("/admin/:action", s.admin)
|
||||||
|
|
||||||
go func() {
|
go func() {
|
||||||
log.Infof("Admin API 服务器已启动: %v", addr)
|
//开启端口监听
|
||||||
err := s.engine.Run(addr)
|
if s.Conf.WebUi.Enabled {
|
||||||
if err != nil {
|
log.Infof("Admin API 服务器已启动: %v", addr)
|
||||||
log.Error(err)
|
err := s.engine.Run(addr)
|
||||||
log.Infof("请检查端口是否被占用.")
|
if err != nil {
|
||||||
time.Sleep(time.Second * 5)
|
log.Error(err)
|
||||||
|
log.Infof("请检查端口是否被占用.")
|
||||||
|
time.Sleep(time.Second * 5)
|
||||||
|
os.Exit(1)
|
||||||
|
}
|
||||||
|
} else {
|
||||||
|
//关闭端口监听
|
||||||
|
c := make(chan os.Signal, 1)
|
||||||
|
signal.Notify(c, os.Interrupt, os.Kill)
|
||||||
|
<-c
|
||||||
os.Exit(1)
|
os.Exit(1)
|
||||||
}
|
}
|
||||||
}()
|
}()
|
||||||
@ -99,7 +109,7 @@ func (s *webServer) Dologin() {
|
|||||||
img, _, _ := image.Decode(bytes.NewReader(rsp.CaptchaImage))
|
img, _, _ := image.Decode(bytes.NewReader(rsp.CaptchaImage))
|
||||||
fmt.Println(asciiart.New("image", img).Art)
|
fmt.Println(asciiart.New("image", img).Art)
|
||||||
if conf.WebUi.WebInput {
|
if conf.WebUi.WebInput {
|
||||||
log.Warn("请输入验证码 (captcha.jpg): (http://127.0.0.1/admin/web_write 输入)")
|
log.Warnf("请输入验证码 (captcha.jpg): (http://%s:%d/admin/do_web_write 输入)", conf.WebUi.Host, conf.WebUi.WebUiPort)
|
||||||
text = <-WebInput
|
text = <-WebInput
|
||||||
} else {
|
} else {
|
||||||
log.Warn("请输入验证码 (captcha.jpg): (Enter 提交)")
|
log.Warn("请输入验证码 (captcha.jpg): (Enter 提交)")
|
||||||
@ -111,7 +121,7 @@ func (s *webServer) Dologin() {
|
|||||||
case client.UnsafeDeviceError:
|
case client.UnsafeDeviceError:
|
||||||
log.Warnf("账号已开启设备锁,请前往 -> %v <- 验证并重启Bot.", rsp.VerifyUrl)
|
log.Warnf("账号已开启设备锁,请前往 -> %v <- 验证并重启Bot.", rsp.VerifyUrl)
|
||||||
if conf.WebUi.WebInput {
|
if conf.WebUi.WebInput {
|
||||||
log.Infof(" (http://127.0.0.1/admin/web_write 确认后继续)....")
|
log.Infof(" (http://%s:%d/admin/do_web_write 确认后继续)....", conf.WebUi.Host, conf.WebUi.WebUiPort)
|
||||||
text = <-WebInput
|
text = <-WebInput
|
||||||
} else {
|
} else {
|
||||||
log.Infof(" 按 Enter 继续....")
|
log.Infof(" 按 Enter 继续....")
|
||||||
|
Loading…
x
Reference in New Issue
Block a user