From b0e00fe052ff9899019362c305477cabc23752f5 Mon Sep 17 00:00:00 2001
From: Mrs4s <1844812067@qq.com>
Date: Fri, 11 Sep 2020 18:25:45 +0800
Subject: [PATCH 001/367] fix #266.
---
go.mod | 2 +-
go.sum | 2 ++
main.go | 23 +++++++++++++++++++++++
3 files changed, 26 insertions(+), 1 deletion(-)
diff --git a/go.mod b/go.mod
index 5a5723f..d5d97aa 100644
--- a/go.mod
+++ b/go.mod
@@ -3,7 +3,7 @@ module github.com/Mrs4s/go-cqhttp
go 1.14
require (
- github.com/Mrs4s/MiraiGo v0.0.0-20200910013944-236c0f629099
+ github.com/Mrs4s/MiraiGo v0.0.0-20200911100852-71bc19cd42eb
github.com/fastly/go-utils v0.0.0-20180712184237-d95a45783239 // indirect
github.com/gin-gonic/gin v1.6.3
github.com/go-playground/validator/v10 v10.3.0 // indirect
diff --git a/go.sum b/go.sum
index 7d5ff26..4accc77 100644
--- a/go.sum
+++ b/go.sum
@@ -8,6 +8,8 @@ github.com/Mrs4s/MiraiGo v0.0.0-20200910010455-37409b1f6b9c h1:bhVr3W0+WTVN+vgZG
github.com/Mrs4s/MiraiGo v0.0.0-20200910010455-37409b1f6b9c/go.mod h1:cwYPI2uq6nxNbx0nA6YuAKF1V5szSs6FPlGVLQvRUlo=
github.com/Mrs4s/MiraiGo v0.0.0-20200910013944-236c0f629099 h1:b+Tmo9h5leZmQokdUu8c2xSIRkkSYoP1z8G+zcwwyRY=
github.com/Mrs4s/MiraiGo v0.0.0-20200910013944-236c0f629099/go.mod h1:cwYPI2uq6nxNbx0nA6YuAKF1V5szSs6FPlGVLQvRUlo=
+github.com/Mrs4s/MiraiGo v0.0.0-20200911100852-71bc19cd42eb h1:WRj/3obehfAMTNKfNo+X3NVqXjeNurMk2yy6haNl/Yk=
+github.com/Mrs4s/MiraiGo v0.0.0-20200911100852-71bc19cd42eb/go.mod h1:cwYPI2uq6nxNbx0nA6YuAKF1V5szSs6FPlGVLQvRUlo=
github.com/bwmarrin/snowflake v0.3.0 h1:xm67bEhkKh6ij1790JB83OujPR5CzNe8QuQqAgISZN0=
github.com/bwmarrin/snowflake v0.3.0/go.mod h1:NdZxfVWX+oR6y2K0o6qAYv6gIOP9rjG0/E9WsDpxqwE=
github.com/census-instrumentation/opencensus-proto v0.2.1/go.mod h1:f6KPmirojxKA12rnyqOA5BBL4O983OfeGPqjHWSTneU=
diff --git a/main.go b/main.go
index b8a8271..b46fbcf 100644
--- a/main.go
+++ b/main.go
@@ -10,6 +10,7 @@ import (
"image"
"io"
"io/ioutil"
+ "net"
"os"
"os/signal"
"path"
@@ -224,6 +225,16 @@ func main() {
log.Debug("Protocol -> " + e.Message)
}
})
+ if global.PathExists("servers.bin") {
+ if data, err := ioutil.ReadFile("servers.bin"); err == nil {
+ r := binary.NewReader(data)
+ r.ReadUInt16()
+ cli.CustomServer = &net.TCPAddr{
+ IP: r.ReadBytes(4),
+ Port: int(r.ReadUInt16()),
+ }
+ }
+ }
rsp, err := cli.Login()
for {
global.Check(err)
@@ -284,6 +295,18 @@ func main() {
}
log.Info("资源初始化完成, 开始处理信息.")
log.Info("アトリは、高性能ですから!")
+ cli.OnServerUpdated(func(bot *client.QQClient, e *client.ServerUpdatedEvent) {
+ log.Infof("收到服务器地址更新通知, 将在下一次重连时应用. 服务器地址: %v:%v 服务器位置: %v", e.Servers[0].Server, e.Servers[0].Port, e.Servers[0].Location)
+ _ = ioutil.WriteFile("servers.bin", binary.NewWriterF(func(w *binary.Writer) {
+ w.WriteUInt16(uint16(len(e.Servers)))
+ for _, s := range e.Servers {
+ if !strings.Contains(s.Server, "com") {
+ w.Write(net.ParseIP(s.Server))
+ w.WriteUInt16(uint16(s.Port))
+ }
+ }
+ }), 0644)
+ })
cli.OnDisconnected(func(bot *client.QQClient, e *client.ClientDisconnectedEvent) {
if conf.ReLogin.Enabled {
var times uint = 1
From 30c4d508bcf3934d2a2be18547a4d1d95f1b3fb2 Mon Sep 17 00:00:00 2001
From: Mrs4s <1844812067@qq.com>
Date: Fri, 11 Sep 2020 18:44:22 +0800
Subject: [PATCH 002/367] fix panic.
---
main.go | 26 +++++++++++++-------------
1 file changed, 13 insertions(+), 13 deletions(-)
diff --git a/main.go b/main.go
index b46fbcf..8bb79cd 100644
--- a/main.go
+++ b/main.go
@@ -225,12 +225,24 @@ func main() {
log.Debug("Protocol -> " + e.Message)
}
})
+ cli.OnServerUpdated(func(bot *client.QQClient, e *client.ServerUpdatedEvent) {
+ log.Infof("收到服务器地址更新通知, 将在下一次重连时应用. 服务器地址: %v:%v 服务器位置: %v", e.Servers[0].Server, e.Servers[0].Port, e.Servers[0].Location)
+ _ = ioutil.WriteFile("servers.bin", binary.NewWriterF(func(w *binary.Writer) {
+ w.WriteUInt16(uint16(len(e.Servers)))
+ for _, s := range e.Servers {
+ if !strings.Contains(s.Server, "com") {
+ w.WriteString(s.Server)
+ w.WriteUInt16(uint16(s.Port))
+ }
+ }
+ }), 0644)
+ })
if global.PathExists("servers.bin") {
if data, err := ioutil.ReadFile("servers.bin"); err == nil {
r := binary.NewReader(data)
r.ReadUInt16()
cli.CustomServer = &net.TCPAddr{
- IP: r.ReadBytes(4),
+ IP: net.ParseIP(r.ReadString()),
Port: int(r.ReadUInt16()),
}
}
@@ -295,18 +307,6 @@ func main() {
}
log.Info("资源初始化完成, 开始处理信息.")
log.Info("アトリは、高性能ですから!")
- cli.OnServerUpdated(func(bot *client.QQClient, e *client.ServerUpdatedEvent) {
- log.Infof("收到服务器地址更新通知, 将在下一次重连时应用. 服务器地址: %v:%v 服务器位置: %v", e.Servers[0].Server, e.Servers[0].Port, e.Servers[0].Location)
- _ = ioutil.WriteFile("servers.bin", binary.NewWriterF(func(w *binary.Writer) {
- w.WriteUInt16(uint16(len(e.Servers)))
- for _, s := range e.Servers {
- if !strings.Contains(s.Server, "com") {
- w.Write(net.ParseIP(s.Server))
- w.WriteUInt16(uint16(s.Port))
- }
- }
- }), 0644)
- })
cli.OnDisconnected(func(bot *client.QQClient, e *client.ClientDisconnectedEvent) {
if conf.ReLogin.Enabled {
var times uint = 1
From c691aa70eae505a3c35533f68a99175490d655ff Mon Sep 17 00:00:00 2001
From: ivanallen <1007729991@qq.com>
Date: Fri, 11 Sep 2020 19:23:19 +0800
Subject: [PATCH 003/367] fix docs
---
docs/config.md | 2 +-
1 file changed, 1 insertion(+), 1 deletion(-)
diff --git a/docs/config.md b/docs/config.md
index ccdff7c..3ba218a 100644
--- a/docs/config.md
+++ b/docs/config.md
@@ -77,7 +77,7 @@ go-cqhttp 支持导入CQHTTP的配置文件, 具体步骤为:
| post_message_format | string | 上报信息类型 |
| ignore_invalid_cqcode| bool | 是否忽略错误的CQ码 |
| force_fragmented | bool | 是否强制分片发送群长消息 |
-| heartbeat_interval | int64 | 心跳间隔时间,单位秒,若0则关闭心跳 |
+| heartbeat_interval | int64 | 心跳间隔时间,单位秒。小于0则关闭心跳,等于0使用默认值(5秒) |
| http_config | object | HTTP API配置 |
| ws_config | object | Websocket API 配置 |
| ws_reverse_servers | object[] | 反向 Websocket API 配置 |
From a1a3e26b0ba7deafc38e99fb3606d0fe25b2766b Mon Sep 17 00:00:00 2001
From: Mrs4s <1844812067@qq.com>
Date: Sat, 12 Sep 2020 18:59:13 +0800
Subject: [PATCH 004/367] add: protocol switch & group notify & redbag info.
---
coolq/bot.go | 1 +
coolq/cqcode.go | 7 +++++++
coolq/event.go | 36 ++++++++++++++++++++++++++++++++++++
go.mod | 2 +-
go.sum | 16 ++--------------
main.go | 11 +++++++++++
6 files changed, 58 insertions(+), 15 deletions(-)
diff --git a/coolq/bot.go b/coolq/bot.go
index 063b94d..3083d13 100644
--- a/coolq/bot.go
+++ b/coolq/bot.go
@@ -59,6 +59,7 @@ func NewQQBot(cli *client.QQClient, conf *global.JsonConfig) *CQBot {
bot.Client.OnTempMessage(bot.tempMessageEvent)
bot.Client.OnGroupMuted(bot.groupMutedEvent)
bot.Client.OnGroupMessageRecalled(bot.groupRecallEvent)
+ bot.Client.OnGroupNotify(bot.groupNotifyEvent)
bot.Client.OnFriendMessageRecalled(bot.friendRecallEvent)
bot.Client.OnJoinGroup(bot.joinGroupEvent)
bot.Client.OnLeaveGroup(bot.leaveGroupEvent)
diff --git a/coolq/cqcode.go b/coolq/cqcode.go
index 76929d5..670a5df 100644
--- a/coolq/cqcode.go
+++ b/coolq/cqcode.go
@@ -71,6 +71,11 @@ func ToArrayMessage(e []message.IMessageElement, code int64, raw ...bool) (r []M
"data": map[string]string{"qq": fmt.Sprint(o.Target)},
}
}
+ case *message.RedBagElement:
+ m = MSG{
+ "type": "redbag",
+ "data": map[string]string{"title": o.Title},
+ }
case *message.ForwardElement:
m = MSG{
"type": "forward",
@@ -159,6 +164,8 @@ func ToStringMessage(e []message.IMessageElement, code int64, raw ...bool) (r st
continue
}
r += fmt.Sprintf("[CQ:at,qq=%d]", o.Target)
+ case *message.RedBagElement:
+ r += fmt.Sprintf("[CQ:redbag,title=%s]", o.Title)
case *message.ForwardElement:
r += fmt.Sprintf("[CQ:forward,id=%s]", o.ResId)
case *message.FaceElement:
diff --git a/coolq/event.go b/coolq/event.go
index e91a0ed..a7fa0fa 100644
--- a/coolq/event.go
+++ b/coolq/event.go
@@ -205,6 +205,42 @@ func (bot *CQBot) groupRecallEvent(c *client.QQClient, e *client.GroupMessageRec
})
}
+func (bot *CQBot) groupNotifyEvent(c *client.QQClient, e client.IGroupNotifyEvent) {
+ group := c.FindGroup(e.From())
+ switch notify := e.(type) {
+ case *client.GroupPokeNotifyEvent:
+ sender := group.FindMember(notify.Sender)
+ receiver := group.FindMember(notify.Receiver)
+ log.Infof("群 %v 内 %v 戳了戳 %v", formatGroupName(group), formatMemberName(sender), formatMemberName(receiver))
+ bot.dispatchEventMessage(MSG{
+ "post_type": "notice",
+ "group_id": group.Code,
+ "notice_type": "notify",
+ "notify_type": "poke",
+ "self_id": c.Uin,
+ "user_id": notify.Sender,
+ "sender_id": notify.Sender,
+ "receiver_id": notify.Receiver,
+ "time": time.Now().Unix(),
+ })
+ case *client.GroupRedBagLuckyKingNotifyEvent:
+ sender := group.FindMember(notify.Sender)
+ luckyKing := group.FindMember(notify.LuckyKing)
+ log.Infof("群 %v 内 %v 的红包被抢完, %v 是运气王", formatGroupName(group), formatMemberName(sender), formatMemberName(luckyKing))
+ bot.dispatchEventMessage(MSG{
+ "post_type": "notice",
+ "group_id": group.Code,
+ "notice_type": "notify",
+ "notify_type": "lucky_king",
+ "self_id": c.Uin,
+ "user_id": notify.Sender,
+ "sender_id": notify.Sender,
+ "lucky_king_id": notify.LuckyKing,
+ "time": time.Now().Unix(),
+ })
+ }
+}
+
func (bot *CQBot) friendRecallEvent(c *client.QQClient, e *client.FriendMessageRecalledEvent) {
f := c.FindFriend(e.FriendUin)
gid := ToGlobalId(e.FriendUin, e.MessageId)
diff --git a/go.mod b/go.mod
index d5d97aa..a83d409 100644
--- a/go.mod
+++ b/go.mod
@@ -3,7 +3,7 @@ module github.com/Mrs4s/go-cqhttp
go 1.14
require (
- github.com/Mrs4s/MiraiGo v0.0.0-20200911100852-71bc19cd42eb
+ github.com/Mrs4s/MiraiGo v0.0.0-20200912102543-d8eaf11f598b
github.com/fastly/go-utils v0.0.0-20180712184237-d95a45783239 // indirect
github.com/gin-gonic/gin v1.6.3
github.com/go-playground/validator/v10 v10.3.0 // indirect
diff --git a/go.sum b/go.sum
index 4accc77..db88753 100644
--- a/go.sum
+++ b/go.sum
@@ -1,15 +1,7 @@
cloud.google.com/go v0.26.0/go.mod h1:aQUYkXzVsufM+DwF1aE+0xfcU+56JwCaLick0ClmMTw=
github.com/BurntSushi/toml v0.3.1/go.mod h1:xHWCNGjB5oqiDr8zfno3MHue2Ht5sIBksp03qcyfWMU=
-github.com/Mrs4s/MiraiGo v0.0.0-20200909095006-dde8bded28d1 h1:3cmUqA5RaikLx+59SODlBA7tjORQoh4t1w5CzH5bIH8=
-github.com/Mrs4s/MiraiGo v0.0.0-20200909095006-dde8bded28d1/go.mod h1:cwYPI2uq6nxNbx0nA6YuAKF1V5szSs6FPlGVLQvRUlo=
-github.com/Mrs4s/MiraiGo v0.0.0-20200909103204-808a63a78efe h1:O2BW87BwpwZDsn7YFHLfRGFGvTS4OUZsG2UiA13OxcQ=
-github.com/Mrs4s/MiraiGo v0.0.0-20200909103204-808a63a78efe/go.mod h1:cwYPI2uq6nxNbx0nA6YuAKF1V5szSs6FPlGVLQvRUlo=
-github.com/Mrs4s/MiraiGo v0.0.0-20200910010455-37409b1f6b9c h1:bhVr3W0+WTVN+vgZGlxD4iFSV9L3CmUg/lt91h+Ll18=
-github.com/Mrs4s/MiraiGo v0.0.0-20200910010455-37409b1f6b9c/go.mod h1:cwYPI2uq6nxNbx0nA6YuAKF1V5szSs6FPlGVLQvRUlo=
-github.com/Mrs4s/MiraiGo v0.0.0-20200910013944-236c0f629099 h1:b+Tmo9h5leZmQokdUu8c2xSIRkkSYoP1z8G+zcwwyRY=
-github.com/Mrs4s/MiraiGo v0.0.0-20200910013944-236c0f629099/go.mod h1:cwYPI2uq6nxNbx0nA6YuAKF1V5szSs6FPlGVLQvRUlo=
-github.com/Mrs4s/MiraiGo v0.0.0-20200911100852-71bc19cd42eb h1:WRj/3obehfAMTNKfNo+X3NVqXjeNurMk2yy6haNl/Yk=
-github.com/Mrs4s/MiraiGo v0.0.0-20200911100852-71bc19cd42eb/go.mod h1:cwYPI2uq6nxNbx0nA6YuAKF1V5szSs6FPlGVLQvRUlo=
+github.com/Mrs4s/MiraiGo v0.0.0-20200912102543-d8eaf11f598b h1:3uUSB/3FzPrcUmp4m+QO+F/U/oNf3n82KQqp+468fvs=
+github.com/Mrs4s/MiraiGo v0.0.0-20200912102543-d8eaf11f598b/go.mod h1:cwYPI2uq6nxNbx0nA6YuAKF1V5szSs6FPlGVLQvRUlo=
github.com/bwmarrin/snowflake v0.3.0 h1:xm67bEhkKh6ij1790JB83OujPR5CzNe8QuQqAgISZN0=
github.com/bwmarrin/snowflake v0.3.0/go.mod h1:NdZxfVWX+oR6y2K0o6qAYv6gIOP9rjG0/E9WsDpxqwE=
github.com/census-instrumentation/opencensus-proto v0.2.1/go.mod h1:f6KPmirojxKA12rnyqOA5BBL4O983OfeGPqjHWSTneU=
@@ -70,8 +62,6 @@ github.com/leodido/go-urn v1.1.0/go.mod h1:+cyI34gQWZcE1eQU7NVgKkkzdXDQHr1dBMtdA
github.com/leodido/go-urn v1.2.0 h1:hpXL4XnriNwQ/ABnpepYM/1vCLWNDfUNts8dX3xTG6Y=
github.com/leodido/go-urn v1.2.0/go.mod h1:+8+nEpDfqqsY+g338gtMEUOtuK+4dEMhiQEgxpxOKII=
github.com/lestrrat-go/envload v0.0.0-20180220234015-a3eb8ddeffcc/go.mod h1:kopuH9ugFRkIXf3YoqHKyrJ9YfUFsckUU9S7B+XP+is=
-github.com/lestrrat-go/file-rotatelogs v2.3.0+incompatible h1:4mNlp+/SvALIPFpbXV3kxNJJno9iKFWGxSDE13Kl66Q=
-github.com/lestrrat-go/file-rotatelogs v2.3.0+incompatible/go.mod h1:ZQnN8lSECaebrkQytbHj4xNgtg8CR7RYXnPok8e0EHA=
github.com/lestrrat-go/file-rotatelogs v2.4.0+incompatible h1:Y6sqxHMyB1D2YSzWkLibYKgg+SwmyFU9dF2hn6MdTj4=
github.com/lestrrat-go/file-rotatelogs v2.4.0+incompatible/go.mod h1:ZQnN8lSECaebrkQytbHj4xNgtg8CR7RYXnPok8e0EHA=
github.com/lestrrat-go/strftime v1.0.3 h1:qqOPU7y+TM8Y803I8fG9c/DyKG3xH/xkng6keC1015Q=
@@ -148,8 +138,6 @@ golang.org/x/sys v0.0.0-20190422165155-953cdadca894/go.mod h1:h1NjWce9XRLGQEsW7w
golang.org/x/sys v0.0.0-20190813064441-fde4db37ae7a/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs=
golang.org/x/sys v0.0.0-20200116001909-b77594299b42/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs=
golang.org/x/sys v0.0.0-20200323222414-85ca7c5b95cd/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs=
-golang.org/x/sys v0.0.0-20200905004654-be1d3432aa8f h1:Fqb3ao1hUmOR3GkUOg/Y+BadLwykBIzs5q8Ez2SbHyc=
-golang.org/x/sys v0.0.0-20200905004654-be1d3432aa8f/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs=
golang.org/x/sys v0.0.0-20200909081042-eff7692f9009 h1:W0lCpv29Hv0UaM1LXb9QlBHLNP8UFfcKjblhVCWftOM=
golang.org/x/sys v0.0.0-20200909081042-eff7692f9009/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs=
golang.org/x/text v0.3.0/go.mod h1:NqM8EUOU14njkJ3fqMW+pc6Ldnwhi/IjpwHt7yyuwOQ=
diff --git a/main.go b/main.go
index 8bb79cd..71344e7 100644
--- a/main.go
+++ b/main.go
@@ -214,6 +214,17 @@ func main() {
log.Info("Bot将在5秒后登录并开始信息处理, 按 Ctrl+C 取消.")
time.Sleep(time.Second * 5)
log.Info("开始尝试登录并同步消息...")
+ log.Infof("使用协议: %v", func() string {
+ switch client.SystemDeviceInfo.Protocol {
+ case client.AndroidPad:
+ return "Android Pad"
+ case client.AndroidPhone:
+ return "Android Phone"
+ case client.AndroidWatch:
+ return "Android Watch"
+ }
+ return "未知"
+ }())
cli := client.NewClient(conf.Uin, conf.Password)
cli.OnLog(func(c *client.QQClient, e *client.LogEvent) {
switch e.Type {
From e87de2f6b3853880605afc20970fbeda44422d0c Mon Sep 17 00:00:00 2001
From: Mrs4s <1844812067@qq.com>
Date: Sat, 12 Sep 2020 19:44:14 +0800
Subject: [PATCH 005/367] doc update.
---
README.md | 7 ++++---
docs/config.md | 25 +++++++++++++++++++++++++
docs/cqhttp.md | 41 +++++++++++++++++++++++++++++++++++++++++
docs/file.md | 2 ++
go.mod | 2 +-
go.sum | 2 ++
6 files changed, 75 insertions(+), 4 deletions(-)
diff --git a/README.md b/README.md
index 4cd982b..ea9e87c 100644
--- a/README.md
+++ b/README.md
@@ -80,13 +80,14 @@
| ------------------------------------------------------------ |
| [私聊信息](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#群消息撤回) |
+| [好友消息撤回(拓展Event)](docs/cqhttp.md#好友消息撤回) |
+| 群内提示事件(拓展Event) |
| [群管理员变动](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=加好友请求) |
| [加群请求/邀请](https://cqhttp.cc/docs/4.15/#/Post?id=加群请求/邀请) |
diff --git a/docs/config.md b/docs/config.md
index 3ba218a..cedef08 100644
--- a/docs/config.md
+++ b/docs/config.md
@@ -90,3 +90,28 @@ go-cqhttp 支持导入CQHTTP的配置文件, 具体步骤为:
> 注2: 分片发送为原酷Q发送长消息的老方案, 发送速度更优/兼容性更好,但在有发言频率限制的群里,可能无法发送。关闭后将优先使用新方案, 能发送更长的消息, 但发送速度更慢,在部分老客户端将无法解析.
> 注3:关闭心跳服务可能引起断线,请谨慎关闭
+
+## 设备信息
+
+默认生成的设备信息如下所示:
+
+``` json
+{
+ "protocol": 0,
+ "display": "xxx",
+ "finger_print": "xxx",
+ "boot_id": "xxx",
+ "proc_version": "xxx",
+ "imei": "xxx"
+}
+```
+
+在大部分情况下 我们只需要关心 `protocol` 字段:
+
+| 值 | 类型 | 限制 |
+| ---- | ------------- | ----------------------------------------------------- |
+| 0 | Android Pad | 无法接收 `group_notify` 事件、无法接收口令红包 |
+| 1 | Android Phone | 无 |
+| 2 | Android Watch | 除了 `Android Pad` 有的限制外还包括: 无法接收撤回消息 |
+
+> 注意, 根据协议的不同, 各类消息有所限制
\ No newline at end of file
diff --git a/docs/cqhttp.md b/docs/cqhttp.md
index 6c13a80..3ef1681 100644
--- a/docs/cqhttp.md
+++ b/docs/cqhttp.md
@@ -18,6 +18,20 @@ Type : `reply`
示例: `[CQ:reply,id=123456]`
+### 红包
+
+Type: `redbag`
+
+范围: **接收**
+
+参数:
+
+| 参数名 | 类型 | 说明 |
+| ------ | ------ | ----------- |
+| title | string | 祝福语/口令 |
+
+示例: `[CQ:redbag,title=恭喜发财]`
+
### 合并转发
Type: `forward`
@@ -362,3 +376,30 @@ Type: `cardimage`
| `user_id` | int64 | | 好友id |
| `message_id` | int64 | | 被撤回的消息id |
+#### 群内戳一戳
+
+> 注意:此事件无法在平板和手表协议上触发
+
+**上报数据**
+
+| 字段 | 类型 | 可能的值 | 说明 |
+| ------------- | ------ | -------------- | -------------- |
+| `post_type` | string | `notice` | 上报类型 |
+| `notice_type` | string | `notify` | 消息类型 |
+| `notify_type` | string | `poke` | 提示类型 |
+| `user_id` | int64 | | 发送者id |
+| `receiver_id` | int64 | | 被戳者id |
+
+#### 群红包运气王提示
+
+> 注意:此事件无法在平板和手表协议上触发
+
+**上报数据**
+
+| 字段 | 类型 | 可能的值 | 说明 |
+| ------------- | ------ | -------------- | -------------- |
+| `post_type` | string | `notice` | 上报类型 |
+| `notice_type` | string | `notify` | 消息类型 |
+| `notify_type` | string | `lucky_king` | 提示类型 |
+| `user_id` | int64 | | 红包发送者id |
+| `lucky_king_id` | int64 | | 运气王id |
diff --git a/docs/file.md b/docs/file.md
index 4fe926e..8ab82d0 100644
--- a/docs/file.md
+++ b/docs/file.md
@@ -7,6 +7,7 @@ go-cqhttp 默认生成的文件树如下所示:
├── go-cqhttp
├── config.json
├── device.json
+├── servers.bin
├── logs
│ └── xx-xx-xx.log
└── data
@@ -20,6 +21,7 @@ go-cqhttp 默认生成的文件树如下所示:
| go-cqhttp | go-cqhttp可执行文件 |
| config.json | 运行配置文件 |
| device.json | 虚拟设备配置文件 |
+| servers.bin | 储存QQ服务器地址 |
| logs | 日志存放目录 |
| data | 数据目录 |
| data/images | 图片缓存目录 |
diff --git a/go.mod b/go.mod
index a83d409..1599353 100644
--- a/go.mod
+++ b/go.mod
@@ -3,7 +3,7 @@ module github.com/Mrs4s/go-cqhttp
go 1.14
require (
- github.com/Mrs4s/MiraiGo v0.0.0-20200912102543-d8eaf11f598b
+ github.com/Mrs4s/MiraiGo v0.0.0-20200912113251-498ec93183e0
github.com/fastly/go-utils v0.0.0-20180712184237-d95a45783239 // indirect
github.com/gin-gonic/gin v1.6.3
github.com/go-playground/validator/v10 v10.3.0 // indirect
diff --git a/go.sum b/go.sum
index db88753..3f7e308 100644
--- a/go.sum
+++ b/go.sum
@@ -2,6 +2,8 @@ cloud.google.com/go v0.26.0/go.mod h1:aQUYkXzVsufM+DwF1aE+0xfcU+56JwCaLick0ClmMT
github.com/BurntSushi/toml v0.3.1/go.mod h1:xHWCNGjB5oqiDr8zfno3MHue2Ht5sIBksp03qcyfWMU=
github.com/Mrs4s/MiraiGo v0.0.0-20200912102543-d8eaf11f598b h1:3uUSB/3FzPrcUmp4m+QO+F/U/oNf3n82KQqp+468fvs=
github.com/Mrs4s/MiraiGo v0.0.0-20200912102543-d8eaf11f598b/go.mod h1:cwYPI2uq6nxNbx0nA6YuAKF1V5szSs6FPlGVLQvRUlo=
+github.com/Mrs4s/MiraiGo v0.0.0-20200912113251-498ec93183e0 h1:c6LzgaZJRRLSnCTwOGwcPHJTzDHjIxRrVcV3NL+G4f0=
+github.com/Mrs4s/MiraiGo v0.0.0-20200912113251-498ec93183e0/go.mod h1:cwYPI2uq6nxNbx0nA6YuAKF1V5szSs6FPlGVLQvRUlo=
github.com/bwmarrin/snowflake v0.3.0 h1:xm67bEhkKh6ij1790JB83OujPR5CzNe8QuQqAgISZN0=
github.com/bwmarrin/snowflake v0.3.0/go.mod h1:NdZxfVWX+oR6y2K0o6qAYv6gIOP9rjG0/E9WsDpxqwE=
github.com/census-instrumentation/opencensus-proto v0.2.1/go.mod h1:f6KPmirojxKA12rnyqOA5BBL4O983OfeGPqjHWSTneU=
From e9db10c9b73a0066c2e9dd31b8ef5811ca553405 Mon Sep 17 00:00:00 2001
From: Mrs4s <1844812067@qq.com>
Date: Sat, 12 Sep 2020 20:51:34 +0800
Subject: [PATCH 006/367] update MiraiGo. fix #270
---
README.md | 2 +-
go.mod | 2 +-
go.sum | 6 ++----
3 files changed, 4 insertions(+), 6 deletions(-)
diff --git a/README.md b/README.md
index ea9e87c..0f39931 100644
--- a/README.md
+++ b/README.md
@@ -82,7 +82,7 @@
| [群消息](https://cqhttp.cc/docs/4.15/#/Post?id=群消息) |
| [群消息撤回(拓展Event)](docs/cqhttp.md#群消息撤回) |
| [好友消息撤回(拓展Event)](docs/cqhttp.md#好友消息撤回) |
-| 群内提示事件(拓展Event) |
+| 群内提示事件(拓展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=群成员增加) |
diff --git a/go.mod b/go.mod
index 1599353..56ddcdf 100644
--- a/go.mod
+++ b/go.mod
@@ -3,7 +3,7 @@ module github.com/Mrs4s/go-cqhttp
go 1.14
require (
- github.com/Mrs4s/MiraiGo v0.0.0-20200912113251-498ec93183e0
+ github.com/Mrs4s/MiraiGo v0.0.0-20200912123655-d92d61c5998e
github.com/fastly/go-utils v0.0.0-20180712184237-d95a45783239 // indirect
github.com/gin-gonic/gin v1.6.3
github.com/go-playground/validator/v10 v10.3.0 // indirect
diff --git a/go.sum b/go.sum
index 3f7e308..cb98193 100644
--- a/go.sum
+++ b/go.sum
@@ -1,9 +1,7 @@
cloud.google.com/go v0.26.0/go.mod h1:aQUYkXzVsufM+DwF1aE+0xfcU+56JwCaLick0ClmMTw=
github.com/BurntSushi/toml v0.3.1/go.mod h1:xHWCNGjB5oqiDr8zfno3MHue2Ht5sIBksp03qcyfWMU=
-github.com/Mrs4s/MiraiGo v0.0.0-20200912102543-d8eaf11f598b h1:3uUSB/3FzPrcUmp4m+QO+F/U/oNf3n82KQqp+468fvs=
-github.com/Mrs4s/MiraiGo v0.0.0-20200912102543-d8eaf11f598b/go.mod h1:cwYPI2uq6nxNbx0nA6YuAKF1V5szSs6FPlGVLQvRUlo=
-github.com/Mrs4s/MiraiGo v0.0.0-20200912113251-498ec93183e0 h1:c6LzgaZJRRLSnCTwOGwcPHJTzDHjIxRrVcV3NL+G4f0=
-github.com/Mrs4s/MiraiGo v0.0.0-20200912113251-498ec93183e0/go.mod h1:cwYPI2uq6nxNbx0nA6YuAKF1V5szSs6FPlGVLQvRUlo=
+github.com/Mrs4s/MiraiGo v0.0.0-20200912123655-d92d61c5998e h1:wiaXXMPnYCfA+rX1wy9SNrDyW3O43wfun5dIYKKK3BI=
+github.com/Mrs4s/MiraiGo v0.0.0-20200912123655-d92d61c5998e/go.mod h1:cwYPI2uq6nxNbx0nA6YuAKF1V5szSs6FPlGVLQvRUlo=
github.com/bwmarrin/snowflake v0.3.0 h1:xm67bEhkKh6ij1790JB83OujPR5CzNe8QuQqAgISZN0=
github.com/bwmarrin/snowflake v0.3.0/go.mod h1:NdZxfVWX+oR6y2K0o6qAYv6gIOP9rjG0/E9WsDpxqwE=
github.com/census-instrumentation/opencensus-proto v0.2.1/go.mod h1:f6KPmirojxKA12rnyqOA5BBL4O983OfeGPqjHWSTneU=
From 6101c4d8a95ce6ca424203918f2b1ca7e5e4fbc0 Mon Sep 17 00:00:00 2001
From: Mrs4s <1844812067@qq.com>
Date: Sun, 13 Sep 2020 20:16:01 +0800
Subject: [PATCH 007/367] add: honor changed event.
---
coolq/event.go | 23 +++++++++++++++++++++++
go.mod | 2 +-
go.sum | 4 ++--
3 files changed, 26 insertions(+), 3 deletions(-)
diff --git a/coolq/event.go b/coolq/event.go
index a7fa0fa..63b1f07 100644
--- a/coolq/event.go
+++ b/coolq/event.go
@@ -238,6 +238,29 @@ func (bot *CQBot) groupNotifyEvent(c *client.QQClient, e client.IGroupNotifyEven
"lucky_king_id": notify.LuckyKing,
"time": time.Now().Unix(),
})
+ case *client.MemberHonorChangedNotifyEvent:
+ log.Info(notify.Content())
+ bot.dispatchEventMessage(MSG{
+ "post_type": "notice",
+ "group_id": group.Code,
+ "notice_type": "notify",
+ "notify_type": "honor",
+ "self_id": c.Uin,
+ "user_id": notify.Uin,
+ "time": time.Now().Unix(),
+ "honor_type": func() string {
+ switch notify.Honor {
+ case client.Talkative:
+ return "talkative"
+ case client.Performer:
+ return "performer"
+ case client.Emotion:
+ return "emotion"
+ default:
+ return "ERROR"
+ }
+ }(),
+ })
}
}
diff --git a/go.mod b/go.mod
index 56ddcdf..8fa039b 100644
--- a/go.mod
+++ b/go.mod
@@ -3,7 +3,7 @@ module github.com/Mrs4s/go-cqhttp
go 1.14
require (
- github.com/Mrs4s/MiraiGo v0.0.0-20200912123655-d92d61c5998e
+ github.com/Mrs4s/MiraiGo v0.0.0-20200913112343-ad5531c3db09
github.com/fastly/go-utils v0.0.0-20180712184237-d95a45783239 // indirect
github.com/gin-gonic/gin v1.6.3
github.com/go-playground/validator/v10 v10.3.0 // indirect
diff --git a/go.sum b/go.sum
index cb98193..2e7ce8b 100644
--- a/go.sum
+++ b/go.sum
@@ -1,7 +1,7 @@
cloud.google.com/go v0.26.0/go.mod h1:aQUYkXzVsufM+DwF1aE+0xfcU+56JwCaLick0ClmMTw=
github.com/BurntSushi/toml v0.3.1/go.mod h1:xHWCNGjB5oqiDr8zfno3MHue2Ht5sIBksp03qcyfWMU=
-github.com/Mrs4s/MiraiGo v0.0.0-20200912123655-d92d61c5998e h1:wiaXXMPnYCfA+rX1wy9SNrDyW3O43wfun5dIYKKK3BI=
-github.com/Mrs4s/MiraiGo v0.0.0-20200912123655-d92d61c5998e/go.mod h1:cwYPI2uq6nxNbx0nA6YuAKF1V5szSs6FPlGVLQvRUlo=
+github.com/Mrs4s/MiraiGo v0.0.0-20200913112343-ad5531c3db09 h1:zTe9IBmO+z6icSwjT2PgI9aMIIwlfWc00cFEz2+j9rc=
+github.com/Mrs4s/MiraiGo v0.0.0-20200913112343-ad5531c3db09/go.mod h1:cwYPI2uq6nxNbx0nA6YuAKF1V5szSs6FPlGVLQvRUlo=
github.com/bwmarrin/snowflake v0.3.0 h1:xm67bEhkKh6ij1790JB83OujPR5CzNe8QuQqAgISZN0=
github.com/bwmarrin/snowflake v0.3.0/go.mod h1:NdZxfVWX+oR6y2K0o6qAYv6gIOP9rjG0/E9WsDpxqwE=
github.com/census-instrumentation/opencensus-proto v0.2.1/go.mod h1:f6KPmirojxKA12rnyqOA5BBL4O983OfeGPqjHWSTneU=
From 6f251e3decabafa6c23a69ec28a7434af3c85706 Mon Sep 17 00:00:00 2001
From: Mrs4s <1844812067@qq.com>
Date: Sun, 13 Sep 2020 20:51:57 +0800
Subject: [PATCH 008/367] fix typo.
---
coolq/api.go | 12 ++++++++++++
coolq/event.go | 24 ++++++++++++------------
docs/cqhttp.md | 22 ++++++++++++++++++----
3 files changed, 42 insertions(+), 16 deletions(-)
diff --git a/coolq/api.go b/coolq/api.go
index 486c069..258d923 100644
--- a/coolq/api.go
+++ b/coolq/api.go
@@ -655,6 +655,18 @@ func (bot *CQBot) CQGetVersionInfo() MSG {
"runtime_version": runtime.Version(),
"runtime_os": runtime.GOOS,
"version": Version,
+ "protocol": func() int {
+ switch client.SystemDeviceInfo.Protocol {
+ case client.AndroidPad:
+ return 0
+ case client.AndroidPhone:
+ return 1
+ case client.AndroidWatch:
+ return 2
+ default:
+ return -1
+ }
+ }(),
})
}
diff --git a/coolq/event.go b/coolq/event.go
index 63b1f07..d03a8a4 100644
--- a/coolq/event.go
+++ b/coolq/event.go
@@ -216,11 +216,11 @@ func (bot *CQBot) groupNotifyEvent(c *client.QQClient, e client.IGroupNotifyEven
"post_type": "notice",
"group_id": group.Code,
"notice_type": "notify",
- "notify_type": "poke",
+ "sub_type": "poke",
"self_id": c.Uin,
"user_id": notify.Sender,
"sender_id": notify.Sender,
- "receiver_id": notify.Receiver,
+ "target_id": notify.Receiver,
"time": time.Now().Unix(),
})
case *client.GroupRedBagLuckyKingNotifyEvent:
@@ -228,15 +228,15 @@ func (bot *CQBot) groupNotifyEvent(c *client.QQClient, e client.IGroupNotifyEven
luckyKing := group.FindMember(notify.LuckyKing)
log.Infof("群 %v 内 %v 的红包被抢完, %v 是运气王", formatGroupName(group), formatMemberName(sender), formatMemberName(luckyKing))
bot.dispatchEventMessage(MSG{
- "post_type": "notice",
- "group_id": group.Code,
- "notice_type": "notify",
- "notify_type": "lucky_king",
- "self_id": c.Uin,
- "user_id": notify.Sender,
- "sender_id": notify.Sender,
- "lucky_king_id": notify.LuckyKing,
- "time": time.Now().Unix(),
+ "post_type": "notice",
+ "group_id": group.Code,
+ "notice_type": "notify",
+ "sub_type": "lucky_king",
+ "self_id": c.Uin,
+ "user_id": notify.Sender,
+ "sender_id": notify.Sender,
+ "target_id": notify.LuckyKing,
+ "time": time.Now().Unix(),
})
case *client.MemberHonorChangedNotifyEvent:
log.Info(notify.Content())
@@ -244,7 +244,7 @@ func (bot *CQBot) groupNotifyEvent(c *client.QQClient, e client.IGroupNotifyEven
"post_type": "notice",
"group_id": group.Code,
"notice_type": "notify",
- "notify_type": "honor",
+ "sub_type": "honor",
"self_id": c.Uin,
"user_id": notify.Uin,
"time": time.Now().Unix(),
diff --git a/docs/cqhttp.md b/docs/cqhttp.md
index 3ef1681..7ce7a33 100644
--- a/docs/cqhttp.md
+++ b/docs/cqhttp.md
@@ -386,9 +386,9 @@ Type: `cardimage`
| ------------- | ------ | -------------- | -------------- |
| `post_type` | string | `notice` | 上报类型 |
| `notice_type` | string | `notify` | 消息类型 |
-| `notify_type` | string | `poke` | 提示类型 |
+| `sub_type` | string | `poke` | 提示类型 |
| `user_id` | int64 | | 发送者id |
-| `receiver_id` | int64 | | 被戳者id |
+| `target_id` | int64 | | 被戳者id |
#### 群红包运气王提示
@@ -400,6 +400,20 @@ Type: `cardimage`
| ------------- | ------ | -------------- | -------------- |
| `post_type` | string | `notice` | 上报类型 |
| `notice_type` | string | `notify` | 消息类型 |
-| `notify_type` | string | `lucky_king` | 提示类型 |
+| `sub_type` | string | `lucky_king` | 提示类型 |
| `user_id` | int64 | | 红包发送者id |
-| `lucky_king_id` | int64 | | 运气王id |
+| `target_id` | int64 | | 运气王id |
+
+#### 群成员荣誉变更提示
+
+> 注意:此事件无法在平板和手表协议上触发
+
+**上报数据**
+
+| 字段 | 类型 | 可能的值 | 说明 |
+| ------------- | ------ | -------------- | -------------- |
+| `post_type` | string | `notice` | 上报类型 |
+| `notice_type` | string | `notify` | 消息类型 |
+| `sub_type` | string | `honor` | 提示类型 |
+| `user_id` | int64 | | 成员id |
+| `honor_type` | int64 | `talkative:龙王` `performer:群聊之火` `emotion:快乐源泉` | 荣誉类型 |
\ No newline at end of file
From a4c6c6d7f31b36cc2b0f2b7672e8111ba3dba002 Mon Sep 17 00:00:00 2001
From: Mrs4s <1844812067@qq.com>
Date: Sun, 13 Sep 2020 20:53:44 +0800
Subject: [PATCH 009/367] fix typo.
---
docs/cqhttp.md | 2 +-
1 file changed, 1 insertion(+), 1 deletion(-)
diff --git a/docs/cqhttp.md b/docs/cqhttp.md
index 7ce7a33..2ca2809 100644
--- a/docs/cqhttp.md
+++ b/docs/cqhttp.md
@@ -416,4 +416,4 @@ Type: `cardimage`
| `notice_type` | string | `notify` | 消息类型 |
| `sub_type` | string | `honor` | 提示类型 |
| `user_id` | int64 | | 成员id |
-| `honor_type` | int64 | `talkative:龙王` `performer:群聊之火` `emotion:快乐源泉` | 荣誉类型 |
\ No newline at end of file
+| `honor_type` | string | `talkative:龙王` `performer:群聊之火` `emotion:快乐源泉` | 荣誉类型 |
\ No newline at end of file
From 69cadad155ae97e52fb95ed91e636ce8d3f28b53 Mon Sep 17 00:00:00 2001
From: Mrs4s <1844812067@qq.com>
Date: Sun, 13 Sep 2020 20:56:15 +0800
Subject: [PATCH 010/367] update README.md
---
README.md | 2 +-
1 file changed, 1 insertion(+), 1 deletion(-)
diff --git a/README.md b/README.md
index 0f39931..f7aef0b 100644
--- a/README.md
+++ b/README.md
@@ -82,7 +82,7 @@
| [群消息](https://cqhttp.cc/docs/4.15/#/Post?id=群消息) |
| [群消息撤回(拓展Event)](docs/cqhttp.md#群消息撤回) |
| [好友消息撤回(拓展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=群成员增加) |
From 2005cbccb07684631a3a951d0ed010a376becf3c Mon Sep 17 00:00:00 2001
From: Mrs4s <1844812067@qq.com>
Date: Sun, 13 Sep 2020 20:58:41 +0800
Subject: [PATCH 011/367] fix #276.
---
coolq/cqcode.go | 2 ++
1 file changed, 2 insertions(+)
diff --git a/coolq/cqcode.go b/coolq/cqcode.go
index 670a5df..b67674a 100644
--- a/coolq/cqcode.go
+++ b/coolq/cqcode.go
@@ -50,6 +50,8 @@ func ToArrayMessage(e []message.IMessageElement, code int64, raw ...bool) (r []M
"type": "text",
"data": map[string]string{"text": o.Content},
}
+ case *message.ReplyElement:
+ continue
case *message.LightAppElement:
//m = MSG{
// "type": "text",
From 50bfc08974e43ef3762ed0aa347702f18f425a8a Mon Sep 17 00:00:00 2001
From: Mrs4s <1844812067@qq.com>
Date: Sun, 13 Sep 2020 21:02:04 +0800
Subject: [PATCH 012/367] fix typo.
---
docs/cqhttp.md | 3 +++
1 file changed, 3 insertions(+)
diff --git a/docs/cqhttp.md b/docs/cqhttp.md
index 2ca2809..56bef0b 100644
--- a/docs/cqhttp.md
+++ b/docs/cqhttp.md
@@ -386,6 +386,7 @@ Type: `cardimage`
| ------------- | ------ | -------------- | -------------- |
| `post_type` | string | `notice` | 上报类型 |
| `notice_type` | string | `notify` | 消息类型 |
+| `group_id` | int64 | | 群号 |
| `sub_type` | string | `poke` | 提示类型 |
| `user_id` | int64 | | 发送者id |
| `target_id` | int64 | | 被戳者id |
@@ -400,6 +401,7 @@ Type: `cardimage`
| ------------- | ------ | -------------- | -------------- |
| `post_type` | string | `notice` | 上报类型 |
| `notice_type` | string | `notify` | 消息类型 |
+| `group_id` | int64 | | 群号 |
| `sub_type` | string | `lucky_king` | 提示类型 |
| `user_id` | int64 | | 红包发送者id |
| `target_id` | int64 | | 运气王id |
@@ -414,6 +416,7 @@ Type: `cardimage`
| ------------- | ------ | -------------- | -------------- |
| `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:快乐源泉` | 荣誉类型 |
\ No newline at end of file
From fef9395890653c1a655969dc5fd3a492523b8855 Mon Sep 17 00:00:00 2001
From: Mrs4s <1844812067@qq.com>
Date: Sun, 13 Sep 2020 21:33:01 +0800
Subject: [PATCH 013/367] update MiraiGo.
---
go.mod | 2 +-
go.sum | 2 ++
2 files changed, 3 insertions(+), 1 deletion(-)
diff --git a/go.mod b/go.mod
index 8fa039b..4586aed 100644
--- a/go.mod
+++ b/go.mod
@@ -3,7 +3,7 @@ module github.com/Mrs4s/go-cqhttp
go 1.14
require (
- github.com/Mrs4s/MiraiGo v0.0.0-20200913112343-ad5531c3db09
+ github.com/Mrs4s/MiraiGo v0.0.0-20200913133024-ad43b3f471e2
github.com/fastly/go-utils v0.0.0-20180712184237-d95a45783239 // indirect
github.com/gin-gonic/gin v1.6.3
github.com/go-playground/validator/v10 v10.3.0 // indirect
diff --git a/go.sum b/go.sum
index 2e7ce8b..5120903 100644
--- a/go.sum
+++ b/go.sum
@@ -2,6 +2,8 @@ cloud.google.com/go v0.26.0/go.mod h1:aQUYkXzVsufM+DwF1aE+0xfcU+56JwCaLick0ClmMT
github.com/BurntSushi/toml v0.3.1/go.mod h1:xHWCNGjB5oqiDr8zfno3MHue2Ht5sIBksp03qcyfWMU=
github.com/Mrs4s/MiraiGo v0.0.0-20200913112343-ad5531c3db09 h1:zTe9IBmO+z6icSwjT2PgI9aMIIwlfWc00cFEz2+j9rc=
github.com/Mrs4s/MiraiGo v0.0.0-20200913112343-ad5531c3db09/go.mod h1:cwYPI2uq6nxNbx0nA6YuAKF1V5szSs6FPlGVLQvRUlo=
+github.com/Mrs4s/MiraiGo v0.0.0-20200913133024-ad43b3f471e2 h1:otRnJmFOuRfK2ts5x6eOqc/vTIhUN4IYKcldjhN/IQY=
+github.com/Mrs4s/MiraiGo v0.0.0-20200913133024-ad43b3f471e2/go.mod h1:cwYPI2uq6nxNbx0nA6YuAKF1V5szSs6FPlGVLQvRUlo=
github.com/bwmarrin/snowflake v0.3.0 h1:xm67bEhkKh6ij1790JB83OujPR5CzNe8QuQqAgISZN0=
github.com/bwmarrin/snowflake v0.3.0/go.mod h1:NdZxfVWX+oR6y2K0o6qAYv6gIOP9rjG0/E9WsDpxqwE=
github.com/census-instrumentation/opencensus-proto v0.2.1/go.mod h1:f6KPmirojxKA12rnyqOA5BBL4O983OfeGPqjHWSTneU=
From 741a91cf7065f4456aab2c7a539c244ad2d8995b Mon Sep 17 00:00:00 2001
From: Mrs4s <1844812067@qq.com>
Date: Sun, 13 Sep 2020 22:07:45 +0800
Subject: [PATCH 014/367] add: poke sending.
---
coolq/bot.go | 8 ++++++++
coolq/cqcode.go | 14 ++++++++++++++
docs/cqhttp.md | 14 ++++++++++++++
3 files changed, 36 insertions(+)
diff --git a/coolq/bot.go b/coolq/bot.go
index 3083d13..dda64e9 100644
--- a/coolq/bot.go
+++ b/coolq/bot.go
@@ -139,6 +139,14 @@ func (bot *CQBot) SendGroupMessage(groupId int64, m *message.SendingMessage) int
newElem = append(newElem, gv)
continue
}
+ if i, ok := elem.(*PokeElement); ok {
+ if group := bot.Client.FindGroup(groupId); group != nil {
+ if mem := group.FindMember(i.Target); mem != nil {
+ mem.Poke()
+ return 0
+ }
+ }
+ }
newElem = append(newElem, elem)
}
m.Elements = newElem
diff --git a/coolq/cqcode.go b/coolq/cqcode.go
index b67674a..c5a74f2 100644
--- a/coolq/cqcode.go
+++ b/coolq/cqcode.go
@@ -26,6 +26,14 @@ var paramReg = regexp.MustCompile(`,([\w\-.]+?)=([^,\]]+)`)
var IgnoreInvalidCQCode = false
+type PokeElement struct {
+ Target int64
+}
+
+func (e *PokeElement) Type() message.ElementType {
+ return message.At
+}
+
func ToArrayMessage(e []message.IMessageElement, code int64, raw ...bool) (r []MSG) {
ur := false
if len(raw) != 0 {
@@ -319,6 +327,12 @@ func (bot *CQBot) ToElement(t string, d map[string]string, group bool) (message.
return message.NewText(d["text"]), nil
case "image":
return bot.makeImageElem(t, d, group)
+ case "poke":
+ if !group {
+ return nil, errors.New("todo") // TODO: private poke
+ }
+ t, _ := strconv.ParseInt(d["qq"], 10, 64)
+ return &PokeElement{Target: t}, nil
case "record":
if !group {
return nil, errors.New("private voice unsupported now")
diff --git a/docs/cqhttp.md b/docs/cqhttp.md
index 56bef0b..3b5a995 100644
--- a/docs/cqhttp.md
+++ b/docs/cqhttp.md
@@ -32,6 +32,20 @@ Type: `redbag`
示例: `[CQ:redbag,title=恭喜发财]`
+### 戳一戳
+
+Type: `poke`
+
+范围: **发送(仅群聊)**
+
+参数:
+
+| 参数名 | 类型 | 说明 |
+| ------ | ------ | ----------- |
+| qq | int64 | 需要戳的成员 |
+
+示例: `[CQ:poke,qq=123456]`
+
### 合并转发
Type: `forward`
From 1d1925208b9e9668f83a87232e068b46c32a6e8c Mon Sep 17 00:00:00 2001
From: Mrs4s <1844812067@qq.com>
Date: Sun, 13 Sep 2020 22:11:28 +0800
Subject: [PATCH 015/367] update doc.
---
docs/cqhttp.md | 2 ++
1 file changed, 2 insertions(+)
diff --git a/docs/cqhttp.md b/docs/cqhttp.md
index 3b5a995..3b8fec4 100644
--- a/docs/cqhttp.md
+++ b/docs/cqhttp.md
@@ -34,6 +34,8 @@ Type: `redbag`
### 戳一戳
+> 注意:发送戳一戳消息无法撤回,返回的 `message id` 恒定为 `0`
+
Type: `poke`
范围: **发送(仅群聊)**
From c4e54446c5746b9665eccb7a8da6ed646a4a6f75 Mon Sep 17 00:00:00 2001
From: Mrs4s
Date: Thu, 17 Sep 2020 08:48:09 +0800
Subject: [PATCH 016/367] update MiraiGo. fix #283
---
go.mod | 2 +-
go.sum | 2 ++
2 files changed, 3 insertions(+), 1 deletion(-)
diff --git a/go.mod b/go.mod
index 4586aed..8030313 100644
--- a/go.mod
+++ b/go.mod
@@ -3,7 +3,7 @@ module github.com/Mrs4s/go-cqhttp
go 1.14
require (
- github.com/Mrs4s/MiraiGo v0.0.0-20200913133024-ad43b3f471e2
+ github.com/Mrs4s/MiraiGo v0.0.0-20200915071055-1607cdf2bff8
github.com/fastly/go-utils v0.0.0-20180712184237-d95a45783239 // indirect
github.com/gin-gonic/gin v1.6.3
github.com/go-playground/validator/v10 v10.3.0 // indirect
diff --git a/go.sum b/go.sum
index 5120903..8d71051 100644
--- a/go.sum
+++ b/go.sum
@@ -4,6 +4,8 @@ github.com/Mrs4s/MiraiGo v0.0.0-20200913112343-ad5531c3db09 h1:zTe9IBmO+z6icSwjT
github.com/Mrs4s/MiraiGo v0.0.0-20200913112343-ad5531c3db09/go.mod h1:cwYPI2uq6nxNbx0nA6YuAKF1V5szSs6FPlGVLQvRUlo=
github.com/Mrs4s/MiraiGo v0.0.0-20200913133024-ad43b3f471e2 h1:otRnJmFOuRfK2ts5x6eOqc/vTIhUN4IYKcldjhN/IQY=
github.com/Mrs4s/MiraiGo v0.0.0-20200913133024-ad43b3f471e2/go.mod h1:cwYPI2uq6nxNbx0nA6YuAKF1V5szSs6FPlGVLQvRUlo=
+github.com/Mrs4s/MiraiGo v0.0.0-20200915071055-1607cdf2bff8 h1:plwKkvIVzntjTS5tz96Hf+46Hxaf0Bv/Pp9nIADD/i4=
+github.com/Mrs4s/MiraiGo v0.0.0-20200915071055-1607cdf2bff8/go.mod h1:cwYPI2uq6nxNbx0nA6YuAKF1V5szSs6FPlGVLQvRUlo=
github.com/bwmarrin/snowflake v0.3.0 h1:xm67bEhkKh6ij1790JB83OujPR5CzNe8QuQqAgISZN0=
github.com/bwmarrin/snowflake v0.3.0/go.mod h1:NdZxfVWX+oR6y2K0o6qAYv6gIOP9rjG0/E9WsDpxqwE=
github.com/census-instrumentation/opencensus-proto v0.2.1/go.mod h1:f6KPmirojxKA12rnyqOA5BBL4O983OfeGPqjHWSTneU=
From d67621487d25e17735746c51bf88f297f107a97e Mon Sep 17 00:00:00 2001
From: Mrs4s <1844812067@qq.com>
Date: Sat, 19 Sep 2020 16:46:19 +0800
Subject: [PATCH 017/367] update MiraiGo. fix #278
---
go.mod | 2 +-
go.sum | 8 ++------
main.go | 12 +++++++-----
3 files changed, 10 insertions(+), 12 deletions(-)
diff --git a/go.mod b/go.mod
index 8030313..024148e 100644
--- a/go.mod
+++ b/go.mod
@@ -3,7 +3,7 @@ module github.com/Mrs4s/go-cqhttp
go 1.14
require (
- github.com/Mrs4s/MiraiGo v0.0.0-20200915071055-1607cdf2bff8
+ github.com/Mrs4s/MiraiGo v0.0.0-20200919083021-4013c077186d
github.com/fastly/go-utils v0.0.0-20180712184237-d95a45783239 // indirect
github.com/gin-gonic/gin v1.6.3
github.com/go-playground/validator/v10 v10.3.0 // indirect
diff --git a/go.sum b/go.sum
index 8d71051..6776956 100644
--- a/go.sum
+++ b/go.sum
@@ -1,11 +1,7 @@
cloud.google.com/go v0.26.0/go.mod h1:aQUYkXzVsufM+DwF1aE+0xfcU+56JwCaLick0ClmMTw=
github.com/BurntSushi/toml v0.3.1/go.mod h1:xHWCNGjB5oqiDr8zfno3MHue2Ht5sIBksp03qcyfWMU=
-github.com/Mrs4s/MiraiGo v0.0.0-20200913112343-ad5531c3db09 h1:zTe9IBmO+z6icSwjT2PgI9aMIIwlfWc00cFEz2+j9rc=
-github.com/Mrs4s/MiraiGo v0.0.0-20200913112343-ad5531c3db09/go.mod h1:cwYPI2uq6nxNbx0nA6YuAKF1V5szSs6FPlGVLQvRUlo=
-github.com/Mrs4s/MiraiGo v0.0.0-20200913133024-ad43b3f471e2 h1:otRnJmFOuRfK2ts5x6eOqc/vTIhUN4IYKcldjhN/IQY=
-github.com/Mrs4s/MiraiGo v0.0.0-20200913133024-ad43b3f471e2/go.mod h1:cwYPI2uq6nxNbx0nA6YuAKF1V5szSs6FPlGVLQvRUlo=
-github.com/Mrs4s/MiraiGo v0.0.0-20200915071055-1607cdf2bff8 h1:plwKkvIVzntjTS5tz96Hf+46Hxaf0Bv/Pp9nIADD/i4=
-github.com/Mrs4s/MiraiGo v0.0.0-20200915071055-1607cdf2bff8/go.mod h1:cwYPI2uq6nxNbx0nA6YuAKF1V5szSs6FPlGVLQvRUlo=
+github.com/Mrs4s/MiraiGo v0.0.0-20200919083021-4013c077186d h1:LZ1pjJJ7sD/AOL8tvkTB9bPc0DiOErCNN+wWXUMyvX0=
+github.com/Mrs4s/MiraiGo v0.0.0-20200919083021-4013c077186d/go.mod h1:cwYPI2uq6nxNbx0nA6YuAKF1V5szSs6FPlGVLQvRUlo=
github.com/bwmarrin/snowflake v0.3.0 h1:xm67bEhkKh6ij1790JB83OujPR5CzNe8QuQqAgISZN0=
github.com/bwmarrin/snowflake v0.3.0/go.mod h1:NdZxfVWX+oR6y2K0o6qAYv6gIOP9rjG0/E9WsDpxqwE=
github.com/census-instrumentation/opencensus-proto v0.2.1/go.mod h1:f6KPmirojxKA12rnyqOA5BBL4O983OfeGPqjHWSTneU=
diff --git a/main.go b/main.go
index 71344e7..b116fef 100644
--- a/main.go
+++ b/main.go
@@ -237,7 +237,7 @@ func main() {
}
})
cli.OnServerUpdated(func(bot *client.QQClient, e *client.ServerUpdatedEvent) {
- log.Infof("收到服务器地址更新通知, 将在下一次重连时应用. 服务器地址: %v:%v 服务器位置: %v", e.Servers[0].Server, e.Servers[0].Port, e.Servers[0].Location)
+ log.Infof("收到服务器地址更新通知, 将在下一次重连时应用. 地址信息已储存到 servers.bin 文件")
_ = ioutil.WriteFile("servers.bin", binary.NewWriterF(func(w *binary.Writer) {
w.WriteUInt16(uint16(len(e.Servers)))
for _, s := range e.Servers {
@@ -251,10 +251,12 @@ func main() {
if global.PathExists("servers.bin") {
if data, err := ioutil.ReadFile("servers.bin"); err == nil {
r := binary.NewReader(data)
- r.ReadUInt16()
- cli.CustomServer = &net.TCPAddr{
- IP: net.ParseIP(r.ReadString()),
- Port: int(r.ReadUInt16()),
+ var addr []*net.TCPAddr
+ for i := 0; i < int(r.ReadUInt16()); i++ {
+ addr = append(addr, &net.TCPAddr{
+ IP: net.ParseIP(r.ReadString()),
+ Port: int(r.ReadUInt16()),
+ })
}
}
}
From ea65e545add6e6a46eff4d8dcff99285b9ebca39 Mon Sep 17 00:00:00 2001
From: Mrs4s <1844812067@qq.com>
Date: Sat, 19 Sep 2020 17:02:21 +0800
Subject: [PATCH 018/367] supported: get_stranger_info.
---
coolq/api.go | 21 +++++++++++++++++++++
server/http.go | 8 ++++++++
server/websocket.go | 3 +++
3 files changed, 32 insertions(+)
diff --git a/coolq/api.go b/coolq/api.go
index 258d923..83bfc97 100644
--- a/coolq/api.go
+++ b/coolq/api.go
@@ -497,6 +497,27 @@ func (bot *CQBot) CQGetGroupHonorInfo(groupId int64, t string) MSG {
return OK(msg)
}
+// https://github.com/howmanybots/onebot/blob/master/v11/specs/api/public.md#get_stranger_info-%E8%8E%B7%E5%8F%96%E9%99%8C%E7%94%9F%E4%BA%BA%E4%BF%A1%E6%81%AF
+func (bot *CQBot) CQGetStrangerInfo(userId int64) MSG {
+ info, err := bot.Client.GetSummaryInfo(userId)
+ if err != nil {
+ return Failed(100)
+ }
+ return OK(MSG{
+ "user_id": info.Uin,
+ "nickname": info.Nickname,
+ "sex": func() string {
+ if info.Sex == 1 {
+ return "female"
+ }
+ return "male"
+ }(),
+ "age": info.Age,
+ "level": info.Level,
+ "login_days": info.LoginDays,
+ })
+}
+
// https://cqhttp.cc/docs/4.15/#/API?id=-handle_quick_operation-%E5%AF%B9%E4%BA%8B%E4%BB%B6%E6%89%A7%E8%A1%8C%E5%BF%AB%E9%80%9F%E6%93%8D%E4%BD%9C
// https://github.com/richardchien/coolq-http-api/blob/master/src/cqhttp/plugins/web/http.cpp#L376
func (bot *CQBot) CQHandleQuickOperation(context, operation gjson.Result) MSG {
diff --git a/server/http.go b/server/http.go
index 9b10904..afd2685 100644
--- a/server/http.go
+++ b/server/http.go
@@ -333,6 +333,11 @@ func (s *httpServer) GetVipInfo(c *gin.Context) {
c.JSON(200, s.bot.CQGetVipInfo(uid))
}
+func (s *httpServer) GetStrangerInfo(c *gin.Context) {
+ uid, _ := strconv.ParseInt(getParam(c, "user_id"), 10, 64)
+ c.JSON(200, s.bot.CQGetStrangerInfo(uid))
+}
+
func (s *httpServer) HandleQuickOperation(c *gin.Context) {
if c.Request.Method != "POST" {
c.AbortWithStatus(404)
@@ -486,6 +491,9 @@ var httpApi = map[string]func(s *httpServer, c *gin.Context){
"_get_vip_info": func(s *httpServer, c *gin.Context) {
s.GetVipInfo(c)
},
+ "get_stranger_info": func(s *httpServer, c *gin.Context) {
+ s.GetStrangerInfo(c)
+ },
"reload_event_filter": func(s *httpServer, c *gin.Context) {
s.ReloadEventFilter(c)
},
diff --git a/server/websocket.go b/server/websocket.go
index ecad98a..5b43395 100644
--- a/server/websocket.go
+++ b/server/websocket.go
@@ -486,6 +486,9 @@ var wsApi = map[string]func(*coolq.CQBot, gjson.Result) coolq.MSG{
"can_send_record": func(bot *coolq.CQBot, p gjson.Result) coolq.MSG {
return bot.CQCanSendRecord()
},
+ "get_stranger_info": func(bot *coolq.CQBot, p gjson.Result) coolq.MSG {
+ return bot.CQGetStrangerInfo(p.Get("user_id").Int())
+ },
"get_status": func(bot *coolq.CQBot, p gjson.Result) coolq.MSG {
return bot.CQGetStatus()
},
From 4662f1e1709bf4c2ba2419869d27fd6922587eea Mon Sep 17 00:00:00 2001
From: Mrs4s <1844812067@qq.com>
Date: Sat, 19 Sep 2020 23:37:40 +0800
Subject: [PATCH 019/367] update MiraiGo. fix #288
---
go.mod | 2 +-
go.sum | 2 ++
2 files changed, 3 insertions(+), 1 deletion(-)
diff --git a/go.mod b/go.mod
index 024148e..cdc0925 100644
--- a/go.mod
+++ b/go.mod
@@ -3,7 +3,7 @@ module github.com/Mrs4s/go-cqhttp
go 1.14
require (
- github.com/Mrs4s/MiraiGo v0.0.0-20200919083021-4013c077186d
+ github.com/Mrs4s/MiraiGo v0.0.0-20200919153352-249af274638d
github.com/fastly/go-utils v0.0.0-20180712184237-d95a45783239 // indirect
github.com/gin-gonic/gin v1.6.3
github.com/go-playground/validator/v10 v10.3.0 // indirect
diff --git a/go.sum b/go.sum
index 6776956..17e3745 100644
--- a/go.sum
+++ b/go.sum
@@ -2,6 +2,8 @@ cloud.google.com/go v0.26.0/go.mod h1:aQUYkXzVsufM+DwF1aE+0xfcU+56JwCaLick0ClmMT
github.com/BurntSushi/toml v0.3.1/go.mod h1:xHWCNGjB5oqiDr8zfno3MHue2Ht5sIBksp03qcyfWMU=
github.com/Mrs4s/MiraiGo v0.0.0-20200919083021-4013c077186d h1:LZ1pjJJ7sD/AOL8tvkTB9bPc0DiOErCNN+wWXUMyvX0=
github.com/Mrs4s/MiraiGo v0.0.0-20200919083021-4013c077186d/go.mod h1:cwYPI2uq6nxNbx0nA6YuAKF1V5szSs6FPlGVLQvRUlo=
+github.com/Mrs4s/MiraiGo v0.0.0-20200919153352-249af274638d h1:nGJSE9xQBeDiugBKKX0vUOq51MqlUEm/y2FMfZFH/w4=
+github.com/Mrs4s/MiraiGo v0.0.0-20200919153352-249af274638d/go.mod h1:cwYPI2uq6nxNbx0nA6YuAKF1V5szSs6FPlGVLQvRUlo=
github.com/bwmarrin/snowflake v0.3.0 h1:xm67bEhkKh6ij1790JB83OujPR5CzNe8QuQqAgISZN0=
github.com/bwmarrin/snowflake v0.3.0/go.mod h1:NdZxfVWX+oR6y2K0o6qAYv6gIOP9rjG0/E9WsDpxqwE=
github.com/census-instrumentation/opencensus-proto v0.2.1/go.mod h1:f6KPmirojxKA12rnyqOA5BBL4O983OfeGPqjHWSTneU=
From b5b6117487bf8dfebd6316cd260f109a034097f0 Mon Sep 17 00:00:00 2001
From: Mrs4s <1844812067@qq.com>
Date: Sun, 20 Sep 2020 00:00:53 +0800
Subject: [PATCH 020/367] fix server.
---
main.go | 6 +++++-
1 file changed, 5 insertions(+), 1 deletion(-)
diff --git a/main.go b/main.go
index b116fef..09a790e 100644
--- a/main.go
+++ b/main.go
@@ -252,12 +252,16 @@ func main() {
if data, err := ioutil.ReadFile("servers.bin"); err == nil {
r := binary.NewReader(data)
var addr []*net.TCPAddr
- for i := 0; i < int(r.ReadUInt16()); i++ {
+ l := r.ReadUInt16()
+ for i := 0; i < int(l); i++ {
addr = append(addr, &net.TCPAddr{
IP: net.ParseIP(r.ReadString()),
Port: int(r.ReadUInt16()),
})
}
+ if len(addr) > 0 {
+ cli.SetCustomServer(addr)
+ }
}
}
rsp, err := cli.Login()
From c31169b99b310b229e719969844a1fb6e85b809e Mon Sep 17 00:00:00 2001
From: Mrs4s <1844812067@qq.com>
Date: Sun, 20 Sep 2020 00:29:50 +0800
Subject: [PATCH 021/367] fix #298.
---
main.go | 40 +++++++++++++++++++++++++++-------------
1 file changed, 27 insertions(+), 13 deletions(-)
diff --git a/main.go b/main.go
index 09a790e..75207f6 100644
--- a/main.go
+++ b/main.go
@@ -239,7 +239,14 @@ func main() {
cli.OnServerUpdated(func(bot *client.QQClient, e *client.ServerUpdatedEvent) {
log.Infof("收到服务器地址更新通知, 将在下一次重连时应用. 地址信息已储存到 servers.bin 文件")
_ = ioutil.WriteFile("servers.bin", binary.NewWriterF(func(w *binary.Writer) {
- w.WriteUInt16(uint16(len(e.Servers)))
+ w.WriteUInt16(func() (c uint16) {
+ for _, s := range e.Servers {
+ if !strings.Contains(s.Server, "com") {
+ c++
+ }
+ }
+ return
+ }())
for _, s := range e.Servers {
if !strings.Contains(s.Server, "com") {
w.WriteString(s.Server)
@@ -250,18 +257,25 @@ func main() {
})
if global.PathExists("servers.bin") {
if data, err := ioutil.ReadFile("servers.bin"); err == nil {
- r := binary.NewReader(data)
- var addr []*net.TCPAddr
- l := r.ReadUInt16()
- for i := 0; i < int(l); i++ {
- addr = append(addr, &net.TCPAddr{
- IP: net.ParseIP(r.ReadString()),
- Port: int(r.ReadUInt16()),
- })
- }
- if len(addr) > 0 {
- cli.SetCustomServer(addr)
- }
+ func() {
+ defer func() {
+ if pan := recover(); pan != nil {
+ log.Error("读取服务器地址时出现错误: %v", pan)
+ }
+ }()
+ r := binary.NewReader(data)
+ var addr []*net.TCPAddr
+ l := r.ReadUInt16()
+ for i := 0; i < int(l); i++ {
+ addr = append(addr, &net.TCPAddr{
+ IP: net.ParseIP(r.ReadString()),
+ Port: int(r.ReadUInt16()),
+ })
+ }
+ if len(addr) > 0 {
+ cli.SetCustomServer(addr)
+ }
+ }()
}
}
rsp, err := cli.Login()
From 01dd760b5c9b4445793a9f75244b183c3357b956 Mon Sep 17 00:00:00 2001
From: NovaNoir <68760718+the-25th-Nova@users.noreply.github.com>
Date: Sun, 20 Sep 2020 11:58:37 +0800
Subject: [PATCH 022/367] Fix Markdown
---
docs/cqhttp.md | 6 +++---
1 file changed, 3 insertions(+), 3 deletions(-)
diff --git a/docs/cqhttp.md b/docs/cqhttp.md
index 3b8fec4..5614553 100644
--- a/docs/cqhttp.md
+++ b/docs/cqhttp.md
@@ -164,9 +164,9 @@ Type: `xml`
示例: `[CQ:xml,data=xxxx]`
-####一些xml样例
+#### 一些xml样例
-####ps:重要:xml中的value部分,记得html实体化处理后,再打加入到cq码中
+#### ps:重要:xml中的value部分,记得html实体化处理后,再打加入到cq码中
#### qq音乐
@@ -435,4 +435,4 @@ Type: `cardimage`
| `group_id` | int64 | | 群号 |
| `sub_type` | string | `honor` | 提示类型 |
| `user_id` | int64 | | 成员id |
-| `honor_type` | string | `talkative:龙王` `performer:群聊之火` `emotion:快乐源泉` | 荣誉类型 |
\ No newline at end of file
+| `honor_type` | string | `talkative:龙王` `performer:群聊之火` `emotion:快乐源泉` | 荣誉类型 |
From 387d33a01b4d7727b0e55188986c06dc03429767 Mon Sep 17 00:00:00 2001
From: Mrs4s <1844812067@qq.com>
Date: Mon, 21 Sep 2020 21:55:54 +0800
Subject: [PATCH 023/367] update MiraiGo. fix #307 #306
---
go.mod | 2 +-
go.sum | 2 ++
2 files changed, 3 insertions(+), 1 deletion(-)
diff --git a/go.mod b/go.mod
index cdc0925..92b5dd3 100644
--- a/go.mod
+++ b/go.mod
@@ -3,7 +3,7 @@ module github.com/Mrs4s/go-cqhttp
go 1.14
require (
- github.com/Mrs4s/MiraiGo v0.0.0-20200919153352-249af274638d
+ github.com/Mrs4s/MiraiGo v0.0.0-20200921134646-b16719557421
github.com/fastly/go-utils v0.0.0-20180712184237-d95a45783239 // indirect
github.com/gin-gonic/gin v1.6.3
github.com/go-playground/validator/v10 v10.3.0 // indirect
diff --git a/go.sum b/go.sum
index 17e3745..65fbc4c 100644
--- a/go.sum
+++ b/go.sum
@@ -4,6 +4,8 @@ github.com/Mrs4s/MiraiGo v0.0.0-20200919083021-4013c077186d h1:LZ1pjJJ7sD/AOL8tv
github.com/Mrs4s/MiraiGo v0.0.0-20200919083021-4013c077186d/go.mod h1:cwYPI2uq6nxNbx0nA6YuAKF1V5szSs6FPlGVLQvRUlo=
github.com/Mrs4s/MiraiGo v0.0.0-20200919153352-249af274638d h1:nGJSE9xQBeDiugBKKX0vUOq51MqlUEm/y2FMfZFH/w4=
github.com/Mrs4s/MiraiGo v0.0.0-20200919153352-249af274638d/go.mod h1:cwYPI2uq6nxNbx0nA6YuAKF1V5szSs6FPlGVLQvRUlo=
+github.com/Mrs4s/MiraiGo v0.0.0-20200921134646-b16719557421 h1:64KSlIHas2kUc6wc1N5QnkBrUAQpW78f++sqZOe1zAk=
+github.com/Mrs4s/MiraiGo v0.0.0-20200921134646-b16719557421/go.mod h1:cwYPI2uq6nxNbx0nA6YuAKF1V5szSs6FPlGVLQvRUlo=
github.com/bwmarrin/snowflake v0.3.0 h1:xm67bEhkKh6ij1790JB83OujPR5CzNe8QuQqAgISZN0=
github.com/bwmarrin/snowflake v0.3.0/go.mod h1:NdZxfVWX+oR6y2K0o6qAYv6gIOP9rjG0/E9WsDpxqwE=
github.com/census-instrumentation/opencensus-proto v0.2.1/go.mod h1:f6KPmirojxKA12rnyqOA5BBL4O983OfeGPqjHWSTneU=
From 72d62ad7c33102bb68156b775cdca60b1abb28aa Mon Sep 17 00:00:00 2001
From: Mrs4s <1844812067@qq.com>
Date: Mon, 21 Sep 2020 22:28:34 +0800
Subject: [PATCH 024/367] update MiraiGo.
---
coolq/api.go | 14 ++++++++++++++
go.mod | 2 +-
go.sum | 8 ++------
server/http.go | 8 ++++++++
server/websocket.go | 3 +++
5 files changed, 28 insertions(+), 7 deletions(-)
diff --git a/coolq/api.go b/coolq/api.go
index 83bfc97..dedaadd 100644
--- a/coolq/api.go
+++ b/coolq/api.go
@@ -648,6 +648,20 @@ func (bot *CQBot) CQCanSendRecord() MSG {
return OK(MSG{"yes": true})
}
+func (bot *CQBot) CQOcrImage(imageId string) MSG {
+ img, err := bot.makeImageElem("image", map[string]string{"file": imageId}, true)
+ if err != nil {
+ log.Warnf("load image error: %v", err)
+ return Failed(100)
+ }
+ rsp, err := bot.Client.ImageOcr(img)
+ if err != nil {
+ log.Warnf("ocr image error: %v", err)
+ return Failed(100)
+ }
+ return OK(rsp)
+}
+
func (bot *CQBot) CQReloadEventFilter() MSG {
global.BootFilter()
return OK(nil)
diff --git a/go.mod b/go.mod
index 92b5dd3..8a9524b 100644
--- a/go.mod
+++ b/go.mod
@@ -3,7 +3,7 @@ module github.com/Mrs4s/go-cqhttp
go 1.14
require (
- github.com/Mrs4s/MiraiGo v0.0.0-20200921134646-b16719557421
+ github.com/Mrs4s/MiraiGo v0.0.0-20200921142226-9a449519db5c
github.com/fastly/go-utils v0.0.0-20180712184237-d95a45783239 // indirect
github.com/gin-gonic/gin v1.6.3
github.com/go-playground/validator/v10 v10.3.0 // indirect
diff --git a/go.sum b/go.sum
index 65fbc4c..37daeee 100644
--- a/go.sum
+++ b/go.sum
@@ -1,11 +1,7 @@
cloud.google.com/go v0.26.0/go.mod h1:aQUYkXzVsufM+DwF1aE+0xfcU+56JwCaLick0ClmMTw=
github.com/BurntSushi/toml v0.3.1/go.mod h1:xHWCNGjB5oqiDr8zfno3MHue2Ht5sIBksp03qcyfWMU=
-github.com/Mrs4s/MiraiGo v0.0.0-20200919083021-4013c077186d h1:LZ1pjJJ7sD/AOL8tvkTB9bPc0DiOErCNN+wWXUMyvX0=
-github.com/Mrs4s/MiraiGo v0.0.0-20200919083021-4013c077186d/go.mod h1:cwYPI2uq6nxNbx0nA6YuAKF1V5szSs6FPlGVLQvRUlo=
-github.com/Mrs4s/MiraiGo v0.0.0-20200919153352-249af274638d h1:nGJSE9xQBeDiugBKKX0vUOq51MqlUEm/y2FMfZFH/w4=
-github.com/Mrs4s/MiraiGo v0.0.0-20200919153352-249af274638d/go.mod h1:cwYPI2uq6nxNbx0nA6YuAKF1V5szSs6FPlGVLQvRUlo=
-github.com/Mrs4s/MiraiGo v0.0.0-20200921134646-b16719557421 h1:64KSlIHas2kUc6wc1N5QnkBrUAQpW78f++sqZOe1zAk=
-github.com/Mrs4s/MiraiGo v0.0.0-20200921134646-b16719557421/go.mod h1:cwYPI2uq6nxNbx0nA6YuAKF1V5szSs6FPlGVLQvRUlo=
+github.com/Mrs4s/MiraiGo v0.0.0-20200921142226-9a449519db5c h1:TpGiSjI8Pe0YLEQPAVkOV37OFLeJnQ6jxvcDSb/LESY=
+github.com/Mrs4s/MiraiGo v0.0.0-20200921142226-9a449519db5c/go.mod h1:cwYPI2uq6nxNbx0nA6YuAKF1V5szSs6FPlGVLQvRUlo=
github.com/bwmarrin/snowflake v0.3.0 h1:xm67bEhkKh6ij1790JB83OujPR5CzNe8QuQqAgISZN0=
github.com/bwmarrin/snowflake v0.3.0/go.mod h1:NdZxfVWX+oR6y2K0o6qAYv6gIOP9rjG0/E9WsDpxqwE=
github.com/census-instrumentation/opencensus-proto v0.2.1/go.mod h1:f6KPmirojxKA12rnyqOA5BBL4O983OfeGPqjHWSTneU=
diff --git a/server/http.go b/server/http.go
index afd2685..743c040 100644
--- a/server/http.go
+++ b/server/http.go
@@ -349,6 +349,11 @@ func (s *httpServer) HandleQuickOperation(c *gin.Context) {
}
}
+func (s *httpServer) OcrImage(c *gin.Context) {
+ img := getParam(c, "image")
+ c.JSON(200, s.bot.CQOcrImage(img))
+}
+
func getParamOrDefault(c *gin.Context, k, def string) string {
r := getParam(c, k)
if r != "" {
@@ -500,4 +505,7 @@ var httpApi = map[string]func(s *httpServer, c *gin.Context){
".handle_quick_operation": func(s *httpServer, c *gin.Context) {
s.HandleQuickOperation(c)
},
+ ".ocr_image": func(s *httpServer, c *gin.Context) {
+ s.OcrImage(c)
+ },
}
diff --git a/server/websocket.go b/server/websocket.go
index 5b43395..3a28559 100644
--- a/server/websocket.go
+++ b/server/websocket.go
@@ -501,6 +501,9 @@ var wsApi = map[string]func(*coolq.CQBot, gjson.Result) coolq.MSG{
"reload_event_filter": func(bot *coolq.CQBot, p gjson.Result) coolq.MSG {
return bot.CQReloadEventFilter()
},
+ ".ocr_image": func(bot *coolq.CQBot, p gjson.Result) coolq.MSG {
+ return bot.CQOcrImage(p.Get("image").Str)
+ },
".handle_quick_operation": func(bot *coolq.CQBot, p gjson.Result) coolq.MSG {
return bot.CQHandleQuickOperation(p.Get("context"), p.Get("operation"))
},
From d2d408a8e9d7a573f7f92a435c01549e112960cf Mon Sep 17 00:00:00 2001
From: wdvxdr
Date: Tue, 22 Sep 2020 11:17:53 +0800
Subject: [PATCH 025/367] feature set_group_portrait
MIME-Version: 1.0
Content-Type: text/plain; charset=UTF-8
Content-Transfer-Encoding: 8bit
[2020-09-22 10:50:46] [ERROR]: 读取服务器地址时出现错误: %vEOF
---
coolq/api.go | 13 ++++++++++++
global/fs.go | 52 +++++++++++++++++++++++++++++++++++++++++++--
go.mod | 2 +-
main.go | 2 +-
server/http.go | 10 +++++++++
server/websocket.go | 3 +++
6 files changed, 78 insertions(+), 4 deletions(-)
diff --git a/coolq/api.go b/coolq/api.go
index dedaadd..132a52f 100644
--- a/coolq/api.go
+++ b/coolq/api.go
@@ -667,6 +667,19 @@ func (bot *CQBot) CQReloadEventFilter() MSG {
return OK(nil)
}
+func (bot *CQBot) CQSetGroupPortrait(groupId int64, file, cache string) MSG {
+ if g := bot.Client.FindGroup(groupId); g != nil {
+ img, err := global.FindFile(file, cache, global.IMAGE_PATH)
+ if err != nil {
+ log.Warnf("set group portrait error: %v", err)
+ return Failed(100)
+ }
+ g.UpdateGroupHeadPortrait(img)
+ return OK(nil)
+ }
+ return Failed(100)
+}
+
func (bot *CQBot) CQGetStatus() MSG {
return OK(MSG{
"app_initialized": true,
diff --git a/global/fs.go b/global/fs.go
index f3dc6b0..9aa164d 100644
--- a/global/fs.go
+++ b/global/fs.go
@@ -2,11 +2,17 @@ package global
import (
"bytes"
+ "crypto/md5"
+ "encoding/base64"
+ "encoding/hex"
+ "errors"
+ log "github.com/sirupsen/logrus"
"io/ioutil"
+ "net/url"
"os"
"path"
-
- log "github.com/sirupsen/logrus"
+ "runtime"
+ "strings"
)
var (
@@ -45,3 +51,45 @@ func Check(err error) {
func IsAMRorSILK(b []byte) bool {
return bytes.HasPrefix(b, HEADER_AMR) || bytes.HasPrefix(b, HEADER_SILK)
}
+
+func FindFile(f, cache, PATH string) (data []byte, err error) {
+ data, err = nil, errors.New("can't find the file: "+f)
+ if strings.HasPrefix(f, "http") || strings.HasPrefix(f, "https") {
+ if cache == "" {
+ cache = "1"
+ }
+ hash := md5.Sum([]byte(f))
+ cacheFile := path.Join(CACHE_PATH, hex.EncodeToString(hash[:])+".cache")
+ if PathExists(cacheFile) && cache == "1" {
+ return ioutil.ReadFile(cacheFile)
+ }
+ data, err = GetBytes(f)
+ _ = ioutil.WriteFile(cacheFile, data, 0644)
+ if err != nil {
+ return nil, err
+ }
+ } else if strings.HasPrefix(f, "base64") {
+ data, err = base64.StdEncoding.DecodeString(strings.ReplaceAll(f, "base64://", ""))
+ if err != nil {
+ return nil, err
+ }
+ } else if strings.HasPrefix(f, "file") {
+ fu, err := url.Parse(f)
+ if err != nil {
+ return nil, err
+ }
+ if strings.HasPrefix(fu.Path, "/") && runtime.GOOS == `windows` {
+ fu.Path = fu.Path[1:]
+ }
+ data, err = ioutil.ReadFile(fu.Path)
+ if err != nil {
+ return nil, err
+ }
+ } else if PathExists(path.Join(PATH, f)) {
+ data, err = ioutil.ReadFile(path.Join(PATH, f))
+ if err != nil {
+ return nil, err
+ }
+ }
+ return
+}
diff --git a/go.mod b/go.mod
index 8a9524b..c943e5f 100644
--- a/go.mod
+++ b/go.mod
@@ -25,7 +25,7 @@ require (
github.com/xujiajun/nutsdb v0.5.0
github.com/yinghau76/go-ascii-art v0.0.0-20190517192627-e7f465a30189
golang.org/x/net v0.0.0-20200904194848-62affa334b73 // indirect
- golang.org/x/sys v0.0.0-20200909081042-eff7692f9009 // indirect
+ golang.org/x/sys v0.0.0-20200916084744-dbad9cb7cb7a // indirect
golang.org/x/time v0.0.0-20200630173020-3af7569d3a1e
gopkg.in/yaml.v2 v2.3.0 // indirect
)
diff --git a/main.go b/main.go
index 75207f6..919849e 100644
--- a/main.go
+++ b/main.go
@@ -260,7 +260,7 @@ func main() {
func() {
defer func() {
if pan := recover(); pan != nil {
- log.Error("读取服务器地址时出现错误: %v", pan)
+ log.Error("读取服务器地址时出现错误: ", pan)
}
}()
r := binary.NewReader(data)
diff --git a/server/http.go b/server/http.go
index 743c040..5d61c76 100644
--- a/server/http.go
+++ b/server/http.go
@@ -354,6 +354,13 @@ func (s *httpServer) OcrImage(c *gin.Context) {
c.JSON(200, s.bot.CQOcrImage(img))
}
+func (s *httpServer) SetGroupPortrait(c *gin.Context) {
+ gid, _ := strconv.ParseInt(getParam(c, "group_id"), 10, 64)
+ file := getParam(c, "file")
+ cache := getParam(c, "cache")
+ c.JSON(200, s.bot.CQSetGroupPortrait(gid, file, cache))
+}
+
func getParamOrDefault(c *gin.Context, k, def string) string {
r := getParam(c, k)
if r != "" {
@@ -502,6 +509,9 @@ var httpApi = map[string]func(s *httpServer, c *gin.Context){
"reload_event_filter": func(s *httpServer, c *gin.Context) {
s.ReloadEventFilter(c)
},
+ "set_group_portrait": func(s *httpServer, c *gin.Context) {
+ s.SetGroupPortrait(c)
+ },
".handle_quick_operation": func(s *httpServer, c *gin.Context) {
s.HandleQuickOperation(c)
},
diff --git a/server/websocket.go b/server/websocket.go
index 3a28559..40ba112 100644
--- a/server/websocket.go
+++ b/server/websocket.go
@@ -504,6 +504,9 @@ var wsApi = map[string]func(*coolq.CQBot, gjson.Result) coolq.MSG{
".ocr_image": func(bot *coolq.CQBot, p gjson.Result) coolq.MSG {
return bot.CQOcrImage(p.Get("image").Str)
},
+ "set_group_portrait": func(bot *coolq.CQBot, p gjson.Result) coolq.MSG {
+ return bot.CQSetGroupPortrait(p.Get("group_id").Int(), p.Get("file").String(), p.Get("cache").String())
+ },
".handle_quick_operation": func(bot *coolq.CQBot, p gjson.Result) coolq.MSG {
return bot.CQHandleQuickOperation(p.Get("context"), p.Get("operation"))
},
From cd09a68e0dab1e7d77e206d5fc695117813f4b04 Mon Sep 17 00:00:00 2001
From: wdvxdr
Date: Tue, 22 Sep 2020 11:39:14 +0800
Subject: [PATCH 026/367] simplify
---
coolq/cqcode.go | 38 +++-----------------------------------
1 file changed, 3 insertions(+), 35 deletions(-)
diff --git a/coolq/cqcode.go b/coolq/cqcode.go
index c5a74f2..915ba43 100644
--- a/coolq/cqcode.go
+++ b/coolq/cqcode.go
@@ -338,41 +338,9 @@ func (bot *CQBot) ToElement(t string, d map[string]string, group bool) (message.
return nil, errors.New("private voice unsupported now")
}
f := d["file"]
- var data []byte
- if strings.HasPrefix(f, "http") || strings.HasPrefix(f, "https") {
- b, err := global.GetBytes(f)
- if err != nil {
- return nil, err
- }
- data = b
- }
- if strings.HasPrefix(f, "base64") {
- b, err := base64.StdEncoding.DecodeString(strings.ReplaceAll(f, "base64://", ""))
- if err != nil {
- return nil, err
- }
- data = b
- }
- if strings.HasPrefix(f, "file") {
- fu, err := url.Parse(f)
- if err != nil {
- return nil, err
- }
- if strings.HasPrefix(fu.Path, "/") && runtime.GOOS == `windows` {
- fu.Path = fu.Path[1:]
- }
- b, err := ioutil.ReadFile(fu.Path)
- if err != nil {
- return nil, err
- }
- data = b
- }
- if global.PathExists(path.Join(global.VOICE_PATH, f)) {
- b, err := ioutil.ReadFile(path.Join(global.VOICE_PATH, f))
- if err != nil {
- return nil, err
- }
- data = b
+ data, err := global.FindFile(f, d["cache"], global.VOICE_PATH)
+ if err != nil {
+ return nil, err
}
if !global.IsAMRorSILK(data) {
return nil, errors.New("unsupported voice file format (please use AMR file for now)")
From d390dd539bb35db3c631872a08fb2eb7a89c61b4 Mon Sep 17 00:00:00 2001
From: Mrs4s <1844812067@qq.com>
Date: Tue, 22 Sep 2020 21:59:12 +0800
Subject: [PATCH 027/367] update doc.
---
docs/quick_start.md | 2 +-
1 file changed, 1 insertion(+), 1 deletion(-)
diff --git a/docs/quick_start.md b/docs/quick_start.md
index ebd81f6..a217299 100644
--- a/docs/quick_start.md
+++ b/docs/quick_start.md
@@ -1,3 +1,3 @@
# 开始
-欢迎来到 go-cqhttp 文档
\ No newline at end of file
+欢迎来到 go-cqhttp 文档 目前还在咕
\ No newline at end of file
From aca6a3cf28af8b360be96d8661cb67ba80ed8c99 Mon Sep 17 00:00:00 2001
From: scjtqs
Date: Tue, 22 Sep 2020 22:47:01 +0800
Subject: [PATCH 028/367] =?UTF-8?q?=E6=B7=BB=E5=8A=A0=EF=BC=8C=E5=A5=BD?=
=?UTF-8?q?=E5=8F=8B=E6=B6=88=E6=81=AF=E5=92=8C=E7=BE=A4=E6=B6=88=E6=81=AF?=
=?UTF-8?q?=E5=8F=91=E9=80=81=E6=88=90=E5=8A=9F=E6=97=A5=E5=BF=97=E3=80=82?=
=?UTF-8?q?=E5=8F=AF=E7=94=A8=E4=BA=8E=E6=AD=A3=E5=88=99=E5=8C=B9=E9=85=8D?=
=?UTF-8?q?=EF=BC=88=E5=8E=86=E5=8F=B2=E8=81=8A=E5=A4=A9=E8=AE=B0=E5=BD=95?=
MIME-Version: 1.0
Content-Type: text/plain; charset=UTF-8
Content-Transfer-Encoding: 8bit
---
coolq/api.go | 2 ++
1 file changed, 2 insertions(+)
diff --git a/coolq/api.go b/coolq/api.go
index 83bfc97..9ef7dbf 100644
--- a/coolq/api.go
+++ b/coolq/api.go
@@ -151,6 +151,7 @@ func (bot *CQBot) CQSendGroupMessage(groupId int64, i interface{}, autoEscape bo
if mid == -1 {
return Failed(100)
}
+ log.Infof("发送群 %v(%v) 的消息: %v (%v)", groupId, groupId, str, mid)
return OK(MSG{"message_id": mid})
}
@@ -271,6 +272,7 @@ func (bot *CQBot) CQSendPrivateMessage(userId int64, i interface{}, autoEscape b
if mid == -1 {
return Failed(100)
}
+ log.Infof("发送好友 %v(%v) 的消息: %v (%v)", userId, userId, str, mid)
return OK(MSG{"message_id": mid})
}
From f6d37d460c05549a3d3cdf95566d12f8c261f765 Mon Sep 17 00:00:00 2001
From: scjtqs
Date: Wed, 23 Sep 2020 01:07:50 +0800
Subject: [PATCH 029/367] =?UTF-8?q?=E4=BF=AE=E6=AD=A3=20array=20message=20?=
=?UTF-8?q?=E9=81=97=E6=BC=8F=E9=97=AE=E9=A2=98?=
MIME-Version: 1.0
Content-Type: text/plain; charset=UTF-8
Content-Transfer-Encoding: 8bit
---
coolq/api.go | 2 ++
1 file changed, 2 insertions(+)
diff --git a/coolq/api.go b/coolq/api.go
index 9ef7dbf..bdf0963 100644
--- a/coolq/api.go
+++ b/coolq/api.go
@@ -125,6 +125,7 @@ func (bot *CQBot) CQSendGroupMessage(groupId int64, i interface{}, autoEscape bo
if mid == -1 {
return Failed(100)
}
+ log.Infof("发送群 %v(%v) 的消息: %v (%v)", groupId, groupId, m.String(), mid)
return OK(MSG{"message_id": mid})
}
str = func() string {
@@ -248,6 +249,7 @@ func (bot *CQBot) CQSendPrivateMessage(userId int64, i interface{}, autoEscape b
if mid == -1 {
return Failed(100)
}
+ log.Infof("发送好友 %v(%v) 的消息: %v (%v)", userId, userId, m.String(), mid)
return OK(MSG{"message_id": mid})
}
str = func() string {
From cec81b7ad87b2257b826e252635a3d95f7bb918a Mon Sep 17 00:00:00 2001
From: XYenon
Date: Wed, 23 Sep 2020 23:08:11 +0800
Subject: [PATCH 030/367] Update cqcode.go
---
coolq/cqcode.go | 4 ++--
1 file changed, 2 insertions(+), 2 deletions(-)
diff --git a/coolq/cqcode.go b/coolq/cqcode.go
index c5a74f2..7ee8c8b 100644
--- a/coolq/cqcode.go
+++ b/coolq/cqcode.go
@@ -58,8 +58,6 @@ func ToArrayMessage(e []message.IMessageElement, code int64, raw ...bool) (r []M
"type": "text",
"data": map[string]string{"text": o.Content},
}
- case *message.ReplyElement:
- continue
case *message.LightAppElement:
//m = MSG{
// "type": "text",
@@ -144,6 +142,8 @@ func ToArrayMessage(e []message.IMessageElement, code int64, raw ...bool) (r []M
"data": map[string]string{"data": o.Content, "resid": fmt.Sprintf("%d", o.Id)},
}
}
+ default:
+ continue
}
r = append(r, m)
}
From 9049018d2f0f29f20a578392d956bea8ad6d8011 Mon Sep 17 00:00:00 2001
From: Mrs4s
Date: Fri, 25 Sep 2020 11:26:55 +0800
Subject: [PATCH 031/367] update MiraiGo.
---
go.mod | 2 +-
go.sum | 9 ++++-----
2 files changed, 5 insertions(+), 6 deletions(-)
diff --git a/go.mod b/go.mod
index c943e5f..81b4d25 100644
--- a/go.mod
+++ b/go.mod
@@ -3,7 +3,7 @@ module github.com/Mrs4s/go-cqhttp
go 1.14
require (
- github.com/Mrs4s/MiraiGo v0.0.0-20200921142226-9a449519db5c
+ github.com/Mrs4s/MiraiGo v0.0.0-20200925013534-86346d199351
github.com/fastly/go-utils v0.0.0-20180712184237-d95a45783239 // indirect
github.com/gin-gonic/gin v1.6.3
github.com/go-playground/validator/v10 v10.3.0 // indirect
diff --git a/go.sum b/go.sum
index 37daeee..554eb46 100644
--- a/go.sum
+++ b/go.sum
@@ -1,7 +1,7 @@
cloud.google.com/go v0.26.0/go.mod h1:aQUYkXzVsufM+DwF1aE+0xfcU+56JwCaLick0ClmMTw=
github.com/BurntSushi/toml v0.3.1/go.mod h1:xHWCNGjB5oqiDr8zfno3MHue2Ht5sIBksp03qcyfWMU=
-github.com/Mrs4s/MiraiGo v0.0.0-20200921142226-9a449519db5c h1:TpGiSjI8Pe0YLEQPAVkOV37OFLeJnQ6jxvcDSb/LESY=
-github.com/Mrs4s/MiraiGo v0.0.0-20200921142226-9a449519db5c/go.mod h1:cwYPI2uq6nxNbx0nA6YuAKF1V5szSs6FPlGVLQvRUlo=
+github.com/Mrs4s/MiraiGo v0.0.0-20200925013534-86346d199351 h1:CKIl/DbF4sM4NEKX/tVpKF3lOfpfodVYItuSr73pDNE=
+github.com/Mrs4s/MiraiGo v0.0.0-20200925013534-86346d199351/go.mod h1:cwYPI2uq6nxNbx0nA6YuAKF1V5szSs6FPlGVLQvRUlo=
github.com/bwmarrin/snowflake v0.3.0 h1:xm67bEhkKh6ij1790JB83OujPR5CzNe8QuQqAgISZN0=
github.com/bwmarrin/snowflake v0.3.0/go.mod h1:NdZxfVWX+oR6y2K0o6qAYv6gIOP9rjG0/E9WsDpxqwE=
github.com/census-instrumentation/opencensus-proto v0.2.1/go.mod h1:f6KPmirojxKA12rnyqOA5BBL4O983OfeGPqjHWSTneU=
@@ -56,7 +56,6 @@ github.com/json-iterator/go v1.1.7/go.mod h1:KdQUCv79m/52Kvf8AW2vK1V8akMuk1QjK/u
github.com/json-iterator/go v1.1.9/go.mod h1:KdQUCv79m/52Kvf8AW2vK1V8akMuk1QjK/uOdHXbAo4=
github.com/json-iterator/go v1.1.10/go.mod h1:KdQUCv79m/52Kvf8AW2vK1V8akMuk1QjK/uOdHXbAo4=
github.com/konsorten/go-windows-terminal-sequences v1.0.1/go.mod h1:T0+1ngSBFLxvqU3pZ+m/2kptfBszLMUkC4ZK/EgS/cQ=
-github.com/konsorten/go-windows-terminal-sequences v1.0.3 h1:CE8S1cTafDpPvMhIxNJKvHsGVBgn1xWYf1NbHQhywc8=
github.com/konsorten/go-windows-terminal-sequences v1.0.3/go.mod h1:T0+1ngSBFLxvqU3pZ+m/2kptfBszLMUkC4ZK/EgS/cQ=
github.com/leodido/go-urn v1.1.0/go.mod h1:+cyI34gQWZcE1eQU7NVgKkkzdXDQHr1dBMtdAPozLkw=
github.com/leodido/go-urn v1.2.0 h1:hpXL4XnriNwQ/ABnpepYM/1vCLWNDfUNts8dX3xTG6Y=
@@ -138,8 +137,8 @@ golang.org/x/sys v0.0.0-20190422165155-953cdadca894/go.mod h1:h1NjWce9XRLGQEsW7w
golang.org/x/sys v0.0.0-20190813064441-fde4db37ae7a/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs=
golang.org/x/sys v0.0.0-20200116001909-b77594299b42/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs=
golang.org/x/sys v0.0.0-20200323222414-85ca7c5b95cd/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs=
-golang.org/x/sys v0.0.0-20200909081042-eff7692f9009 h1:W0lCpv29Hv0UaM1LXb9QlBHLNP8UFfcKjblhVCWftOM=
-golang.org/x/sys v0.0.0-20200909081042-eff7692f9009/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs=
+golang.org/x/sys v0.0.0-20200916084744-dbad9cb7cb7a h1:chkwkn8HYWVtTE5DCQNKYlkyptadXYY0+PuyaVdyMo4=
+golang.org/x/sys v0.0.0-20200916084744-dbad9cb7cb7a/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs=
golang.org/x/text v0.3.0/go.mod h1:NqM8EUOU14njkJ3fqMW+pc6Ldnwhi/IjpwHt7yyuwOQ=
golang.org/x/text v0.3.2/go.mod h1:bEr9sfX3Q8Zfm5fL9x+3itogRgK3+ptLWKqgva+5dAk=
golang.org/x/time v0.0.0-20200630173020-3af7569d3a1e h1:EHBhcS0mlXEAVwNyO2dLfjToGsyY4j24pTs2ScHnX7s=
From 8f5b8375a77311c7e44ace4dd8aeda5b78ba136a Mon Sep 17 00:00:00 2001
From: Mrs4s
Date: Fri, 25 Sep 2020 11:27:49 +0800
Subject: [PATCH 032/367] remove 'servers.bin'
---
docs/file.md | 2 --
main.go | 42 +-----------------------------------------
2 files changed, 1 insertion(+), 43 deletions(-)
diff --git a/docs/file.md b/docs/file.md
index 8ab82d0..4fe926e 100644
--- a/docs/file.md
+++ b/docs/file.md
@@ -7,7 +7,6 @@ go-cqhttp 默认生成的文件树如下所示:
├── go-cqhttp
├── config.json
├── device.json
-├── servers.bin
├── logs
│ └── xx-xx-xx.log
└── data
@@ -21,7 +20,6 @@ go-cqhttp 默认生成的文件树如下所示:
| go-cqhttp | go-cqhttp可执行文件 |
| config.json | 运行配置文件 |
| device.json | 虚拟设备配置文件 |
-| servers.bin | 储存QQ服务器地址 |
| logs | 日志存放目录 |
| data | 数据目录 |
| data/images | 图片缓存目录 |
diff --git a/main.go b/main.go
index 919849e..4e8d99b 100644
--- a/main.go
+++ b/main.go
@@ -10,7 +10,6 @@ import (
"image"
"io"
"io/ioutil"
- "net"
"os"
"os/signal"
"path"
@@ -237,47 +236,8 @@ func main() {
}
})
cli.OnServerUpdated(func(bot *client.QQClient, e *client.ServerUpdatedEvent) {
- log.Infof("收到服务器地址更新通知, 将在下一次重连时应用. 地址信息已储存到 servers.bin 文件")
- _ = ioutil.WriteFile("servers.bin", binary.NewWriterF(func(w *binary.Writer) {
- w.WriteUInt16(func() (c uint16) {
- for _, s := range e.Servers {
- if !strings.Contains(s.Server, "com") {
- c++
- }
- }
- return
- }())
- for _, s := range e.Servers {
- if !strings.Contains(s.Server, "com") {
- w.WriteString(s.Server)
- w.WriteUInt16(uint16(s.Port))
- }
- }
- }), 0644)
+ log.Infof("收到服务器地址更新通知, 将在下一次重连时应用. ")
})
- if global.PathExists("servers.bin") {
- if data, err := ioutil.ReadFile("servers.bin"); err == nil {
- func() {
- defer func() {
- if pan := recover(); pan != nil {
- log.Error("读取服务器地址时出现错误: ", pan)
- }
- }()
- r := binary.NewReader(data)
- var addr []*net.TCPAddr
- l := r.ReadUInt16()
- for i := 0; i < int(l); i++ {
- addr = append(addr, &net.TCPAddr{
- IP: net.ParseIP(r.ReadString()),
- Port: int(r.ReadUInt16()),
- })
- }
- if len(addr) > 0 {
- cli.SetCustomServer(addr)
- }
- }()
- }
- }
rsp, err := cli.Login()
for {
global.Check(err)
From c7ab32feaddf55e6996a521007a199e3b7a9820b Mon Sep 17 00:00:00 2001
From: Mrs4s
Date: Fri, 25 Sep 2020 13:06:50 +0800
Subject: [PATCH 033/367] update MiraiGo. fix #304
---
go.mod | 2 +-
go.sum | 4 ++--
2 files changed, 3 insertions(+), 3 deletions(-)
diff --git a/go.mod b/go.mod
index 81b4d25..94f166c 100644
--- a/go.mod
+++ b/go.mod
@@ -3,7 +3,7 @@ module github.com/Mrs4s/go-cqhttp
go 1.14
require (
- github.com/Mrs4s/MiraiGo v0.0.0-20200925013534-86346d199351
+ github.com/Mrs4s/MiraiGo v0.0.0-20200925050302-c11ba8f647e2
github.com/fastly/go-utils v0.0.0-20180712184237-d95a45783239 // indirect
github.com/gin-gonic/gin v1.6.3
github.com/go-playground/validator/v10 v10.3.0 // indirect
diff --git a/go.sum b/go.sum
index 554eb46..b7b91a5 100644
--- a/go.sum
+++ b/go.sum
@@ -1,7 +1,7 @@
cloud.google.com/go v0.26.0/go.mod h1:aQUYkXzVsufM+DwF1aE+0xfcU+56JwCaLick0ClmMTw=
github.com/BurntSushi/toml v0.3.1/go.mod h1:xHWCNGjB5oqiDr8zfno3MHue2Ht5sIBksp03qcyfWMU=
-github.com/Mrs4s/MiraiGo v0.0.0-20200925013534-86346d199351 h1:CKIl/DbF4sM4NEKX/tVpKF3lOfpfodVYItuSr73pDNE=
-github.com/Mrs4s/MiraiGo v0.0.0-20200925013534-86346d199351/go.mod h1:cwYPI2uq6nxNbx0nA6YuAKF1V5szSs6FPlGVLQvRUlo=
+github.com/Mrs4s/MiraiGo v0.0.0-20200925050302-c11ba8f647e2 h1:xFGY3FActBRR/bAiF3q7cegKUTcpxazxdnz4X9Nt+5I=
+github.com/Mrs4s/MiraiGo v0.0.0-20200925050302-c11ba8f647e2/go.mod h1:cwYPI2uq6nxNbx0nA6YuAKF1V5szSs6FPlGVLQvRUlo=
github.com/bwmarrin/snowflake v0.3.0 h1:xm67bEhkKh6ij1790JB83OujPR5CzNe8QuQqAgISZN0=
github.com/bwmarrin/snowflake v0.3.0/go.mod h1:NdZxfVWX+oR6y2K0o6qAYv6gIOP9rjG0/E9WsDpxqwE=
github.com/census-instrumentation/opencensus-proto v0.2.1/go.mod h1:f6KPmirojxKA12rnyqOA5BBL4O983OfeGPqjHWSTneU=
From e0ab2417c46e1f0cb725175a848da6cbc63bfae1 Mon Sep 17 00:00:00 2001
From: Mrs4s <1844812067@qq.com>
Date: Sat, 26 Sep 2020 21:43:21 +0800
Subject: [PATCH 034/367] update MiraiGo.
---
go.mod | 2 +-
go.sum | 4 ++++
2 files changed, 5 insertions(+), 1 deletion(-)
diff --git a/go.mod b/go.mod
index c943e5f..27e1a34 100644
--- a/go.mod
+++ b/go.mod
@@ -3,7 +3,7 @@ module github.com/Mrs4s/go-cqhttp
go 1.14
require (
- github.com/Mrs4s/MiraiGo v0.0.0-20200921142226-9a449519db5c
+ github.com/Mrs4s/MiraiGo v0.0.0-20200926101830-afb0ed6368ad
github.com/fastly/go-utils v0.0.0-20180712184237-d95a45783239 // indirect
github.com/gin-gonic/gin v1.6.3
github.com/go-playground/validator/v10 v10.3.0 // indirect
diff --git a/go.sum b/go.sum
index 37daeee..1fc7551 100644
--- a/go.sum
+++ b/go.sum
@@ -2,6 +2,8 @@ cloud.google.com/go v0.26.0/go.mod h1:aQUYkXzVsufM+DwF1aE+0xfcU+56JwCaLick0ClmMT
github.com/BurntSushi/toml v0.3.1/go.mod h1:xHWCNGjB5oqiDr8zfno3MHue2Ht5sIBksp03qcyfWMU=
github.com/Mrs4s/MiraiGo v0.0.0-20200921142226-9a449519db5c h1:TpGiSjI8Pe0YLEQPAVkOV37OFLeJnQ6jxvcDSb/LESY=
github.com/Mrs4s/MiraiGo v0.0.0-20200921142226-9a449519db5c/go.mod h1:cwYPI2uq6nxNbx0nA6YuAKF1V5szSs6FPlGVLQvRUlo=
+github.com/Mrs4s/MiraiGo v0.0.0-20200926101830-afb0ed6368ad h1:m4KU2n3desxr1L3Idk7qRlf71+77rm0JEMWqd4gmrlQ=
+github.com/Mrs4s/MiraiGo v0.0.0-20200926101830-afb0ed6368ad/go.mod h1:cwYPI2uq6nxNbx0nA6YuAKF1V5szSs6FPlGVLQvRUlo=
github.com/bwmarrin/snowflake v0.3.0 h1:xm67bEhkKh6ij1790JB83OujPR5CzNe8QuQqAgISZN0=
github.com/bwmarrin/snowflake v0.3.0/go.mod h1:NdZxfVWX+oR6y2K0o6qAYv6gIOP9rjG0/E9WsDpxqwE=
github.com/census-instrumentation/opencensus-proto v0.2.1/go.mod h1:f6KPmirojxKA12rnyqOA5BBL4O983OfeGPqjHWSTneU=
@@ -140,6 +142,8 @@ golang.org/x/sys v0.0.0-20200116001909-b77594299b42/go.mod h1:h1NjWce9XRLGQEsW7w
golang.org/x/sys v0.0.0-20200323222414-85ca7c5b95cd/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs=
golang.org/x/sys v0.0.0-20200909081042-eff7692f9009 h1:W0lCpv29Hv0UaM1LXb9QlBHLNP8UFfcKjblhVCWftOM=
golang.org/x/sys v0.0.0-20200909081042-eff7692f9009/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs=
+golang.org/x/sys v0.0.0-20200916084744-dbad9cb7cb7a h1:chkwkn8HYWVtTE5DCQNKYlkyptadXYY0+PuyaVdyMo4=
+golang.org/x/sys v0.0.0-20200916084744-dbad9cb7cb7a/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs=
golang.org/x/text v0.3.0/go.mod h1:NqM8EUOU14njkJ3fqMW+pc6Ldnwhi/IjpwHt7yyuwOQ=
golang.org/x/text v0.3.2/go.mod h1:bEr9sfX3Q8Zfm5fL9x+3itogRgK3+ptLWKqgva+5dAk=
golang.org/x/time v0.0.0-20200630173020-3af7569d3a1e h1:EHBhcS0mlXEAVwNyO2dLfjToGsyY4j24pTs2ScHnX7s=
From 43ecc259897705f9de567f263530246a29c6f044 Mon Sep 17 00:00:00 2001
From: Mrs4s <1844812067@qq.com>
Date: Sun, 27 Sep 2020 19:29:34 +0800
Subject: [PATCH 035/367] upload QA.md
---
docs/QA.md | 9 +++++++++
1 file changed, 9 insertions(+)
create mode 100644 docs/QA.md
diff --git a/docs/QA.md b/docs/QA.md
new file mode 100644
index 0000000..90fef58
--- /dev/null
+++ b/docs/QA.md
@@ -0,0 +1,9 @@
+# 常见问题
+
+### Q: 为什么登录的时候出现 `客户端版本过低 请升级客户端`?
+
+### A: 此问题是因为密码输入错误导致的, 信息为服务器返回, 很可能是TX相关的错误, 请检查密码
+
+### Q: 为什么挂一段时间后就会出现 `消息发送失败,账号可能被风控`?
+
+### A: 如果你刚开始使用 go-cqhttp 建议挂机3-7天,即可解除风控
\ No newline at end of file
From 9ecef96205e864d7d055736c17a2aa2a0dc76bb0 Mon Sep 17 00:00:00 2001
From: Mrs4s
Date: Mon, 28 Sep 2020 16:04:34 +0800
Subject: [PATCH 036/367] update MiraiGo.
---
go.mod | 2 +-
go.sum | 2 ++
2 files changed, 3 insertions(+), 1 deletion(-)
diff --git a/go.mod b/go.mod
index 27e1a34..b8ae630 100644
--- a/go.mod
+++ b/go.mod
@@ -3,7 +3,7 @@ module github.com/Mrs4s/go-cqhttp
go 1.14
require (
- github.com/Mrs4s/MiraiGo v0.0.0-20200926101830-afb0ed6368ad
+ github.com/Mrs4s/MiraiGo v0.0.0-20200928022552-1a81a97597d7
github.com/fastly/go-utils v0.0.0-20180712184237-d95a45783239 // indirect
github.com/gin-gonic/gin v1.6.3
github.com/go-playground/validator/v10 v10.3.0 // indirect
diff --git a/go.sum b/go.sum
index 1fc7551..710bcad 100644
--- a/go.sum
+++ b/go.sum
@@ -4,6 +4,8 @@ github.com/Mrs4s/MiraiGo v0.0.0-20200921142226-9a449519db5c h1:TpGiSjI8Pe0YLEQPA
github.com/Mrs4s/MiraiGo v0.0.0-20200921142226-9a449519db5c/go.mod h1:cwYPI2uq6nxNbx0nA6YuAKF1V5szSs6FPlGVLQvRUlo=
github.com/Mrs4s/MiraiGo v0.0.0-20200926101830-afb0ed6368ad h1:m4KU2n3desxr1L3Idk7qRlf71+77rm0JEMWqd4gmrlQ=
github.com/Mrs4s/MiraiGo v0.0.0-20200926101830-afb0ed6368ad/go.mod h1:cwYPI2uq6nxNbx0nA6YuAKF1V5szSs6FPlGVLQvRUlo=
+github.com/Mrs4s/MiraiGo v0.0.0-20200928022552-1a81a97597d7 h1:xRZdiVfVepgmLOYZFXAU0KrSd55fY0OmhqZElHNs93w=
+github.com/Mrs4s/MiraiGo v0.0.0-20200928022552-1a81a97597d7/go.mod h1:cwYPI2uq6nxNbx0nA6YuAKF1V5szSs6FPlGVLQvRUlo=
github.com/bwmarrin/snowflake v0.3.0 h1:xm67bEhkKh6ij1790JB83OujPR5CzNe8QuQqAgISZN0=
github.com/bwmarrin/snowflake v0.3.0/go.mod h1:NdZxfVWX+oR6y2K0o6qAYv6gIOP9rjG0/E9WsDpxqwE=
github.com/census-instrumentation/opencensus-proto v0.2.1/go.mod h1:f6KPmirojxKA12rnyqOA5BBL4O983OfeGPqjHWSTneU=
From 1a3cba54254d00a78831d9254a00a52715c44bc1 Mon Sep 17 00:00:00 2001
From: Mrs4s
Date: Mon, 28 Sep 2020 16:13:37 +0800
Subject: [PATCH 037/367] add sending log limit.
---
coolq/api.go | 18 ++++++++++++++----
1 file changed, 14 insertions(+), 4 deletions(-)
diff --git a/coolq/api.go b/coolq/api.go
index 160f96c..eaea5fa 100644
--- a/coolq/api.go
+++ b/coolq/api.go
@@ -6,6 +6,7 @@ import (
"path"
"runtime"
"strconv"
+ "strings"
"time"
"github.com/Mrs4s/MiraiGo/binary"
@@ -125,7 +126,7 @@ func (bot *CQBot) CQSendGroupMessage(groupId int64, i interface{}, autoEscape bo
if mid == -1 {
return Failed(100)
}
- log.Infof("发送群 %v(%v) 的消息: %v (%v)", groupId, groupId, m.String(), mid)
+ log.Infof("发送群 %v(%v) 的消息: %v (%v)", groupId, groupId, limitedString(m.String()), mid)
return OK(MSG{"message_id": mid})
}
str = func() string {
@@ -152,7 +153,7 @@ func (bot *CQBot) CQSendGroupMessage(groupId int64, i interface{}, autoEscape bo
if mid == -1 {
return Failed(100)
}
- log.Infof("发送群 %v(%v) 的消息: %v (%v)", groupId, groupId, str, mid)
+ log.Infof("发送群 %v(%v) 的消息: %v (%v)", groupId, groupId, limitedString(str), mid)
return OK(MSG{"message_id": mid})
}
@@ -249,7 +250,7 @@ func (bot *CQBot) CQSendPrivateMessage(userId int64, i interface{}, autoEscape b
if mid == -1 {
return Failed(100)
}
- log.Infof("发送好友 %v(%v) 的消息: %v (%v)", userId, userId, m.String(), mid)
+ log.Infof("发送好友 %v(%v) 的消息: %v (%v)", userId, userId, limitedString(m.String()), mid)
return OK(MSG{"message_id": mid})
}
str = func() string {
@@ -274,7 +275,7 @@ func (bot *CQBot) CQSendPrivateMessage(userId int64, i interface{}, autoEscape b
if mid == -1 {
return Failed(100)
}
- log.Infof("发送好友 %v(%v) 的消息: %v (%v)", userId, userId, str, mid)
+ log.Infof("发送好友 %v(%v) 的消息: %v (%v)", userId, userId, limitedString(str), mid)
return OK(MSG{"message_id": mid})
}
@@ -758,3 +759,12 @@ func convertGroupMemberInfo(groupId int64, m *client.GroupMemberInfo) MSG {
"card_changeable": false,
}
}
+
+func limitedString(str string) string {
+ if strings.Count(str, "") <= 10 {
+ return str
+ }
+ limited := []rune(str)
+ limited = limited[:10]
+ return string(limited) + " ..."
+}
From b73162238fe5095b100c1b7ba24e7d946819af90 Mon Sep 17 00:00:00 2001
From: Mrs4s
Date: Mon, 28 Sep 2020 16:26:21 +0800
Subject: [PATCH 038/367] update MiraiGo. fix #320
---
go.mod | 2 +-
go.sum | 11 ++---------
2 files changed, 3 insertions(+), 10 deletions(-)
diff --git a/go.mod b/go.mod
index b8ae630..0527bd8 100644
--- a/go.mod
+++ b/go.mod
@@ -3,7 +3,7 @@ module github.com/Mrs4s/go-cqhttp
go 1.14
require (
- github.com/Mrs4s/MiraiGo v0.0.0-20200928022552-1a81a97597d7
+ github.com/Mrs4s/MiraiGo v0.0.0-20200928082341-65c1709f5eec
github.com/fastly/go-utils v0.0.0-20180712184237-d95a45783239 // indirect
github.com/gin-gonic/gin v1.6.3
github.com/go-playground/validator/v10 v10.3.0 // indirect
diff --git a/go.sum b/go.sum
index 710bcad..122ba3e 100644
--- a/go.sum
+++ b/go.sum
@@ -1,11 +1,7 @@
cloud.google.com/go v0.26.0/go.mod h1:aQUYkXzVsufM+DwF1aE+0xfcU+56JwCaLick0ClmMTw=
github.com/BurntSushi/toml v0.3.1/go.mod h1:xHWCNGjB5oqiDr8zfno3MHue2Ht5sIBksp03qcyfWMU=
-github.com/Mrs4s/MiraiGo v0.0.0-20200921142226-9a449519db5c h1:TpGiSjI8Pe0YLEQPAVkOV37OFLeJnQ6jxvcDSb/LESY=
-github.com/Mrs4s/MiraiGo v0.0.0-20200921142226-9a449519db5c/go.mod h1:cwYPI2uq6nxNbx0nA6YuAKF1V5szSs6FPlGVLQvRUlo=
-github.com/Mrs4s/MiraiGo v0.0.0-20200926101830-afb0ed6368ad h1:m4KU2n3desxr1L3Idk7qRlf71+77rm0JEMWqd4gmrlQ=
-github.com/Mrs4s/MiraiGo v0.0.0-20200926101830-afb0ed6368ad/go.mod h1:cwYPI2uq6nxNbx0nA6YuAKF1V5szSs6FPlGVLQvRUlo=
-github.com/Mrs4s/MiraiGo v0.0.0-20200928022552-1a81a97597d7 h1:xRZdiVfVepgmLOYZFXAU0KrSd55fY0OmhqZElHNs93w=
-github.com/Mrs4s/MiraiGo v0.0.0-20200928022552-1a81a97597d7/go.mod h1:cwYPI2uq6nxNbx0nA6YuAKF1V5szSs6FPlGVLQvRUlo=
+github.com/Mrs4s/MiraiGo v0.0.0-20200928082341-65c1709f5eec h1:lzFAr6b1yO6JIzfse0VIsPq71E0KfdsoS3VnyOLurS4=
+github.com/Mrs4s/MiraiGo v0.0.0-20200928082341-65c1709f5eec/go.mod h1:cwYPI2uq6nxNbx0nA6YuAKF1V5szSs6FPlGVLQvRUlo=
github.com/bwmarrin/snowflake v0.3.0 h1:xm67bEhkKh6ij1790JB83OujPR5CzNe8QuQqAgISZN0=
github.com/bwmarrin/snowflake v0.3.0/go.mod h1:NdZxfVWX+oR6y2K0o6qAYv6gIOP9rjG0/E9WsDpxqwE=
github.com/census-instrumentation/opencensus-proto v0.2.1/go.mod h1:f6KPmirojxKA12rnyqOA5BBL4O983OfeGPqjHWSTneU=
@@ -60,7 +56,6 @@ github.com/json-iterator/go v1.1.7/go.mod h1:KdQUCv79m/52Kvf8AW2vK1V8akMuk1QjK/u
github.com/json-iterator/go v1.1.9/go.mod h1:KdQUCv79m/52Kvf8AW2vK1V8akMuk1QjK/uOdHXbAo4=
github.com/json-iterator/go v1.1.10/go.mod h1:KdQUCv79m/52Kvf8AW2vK1V8akMuk1QjK/uOdHXbAo4=
github.com/konsorten/go-windows-terminal-sequences v1.0.1/go.mod h1:T0+1ngSBFLxvqU3pZ+m/2kptfBszLMUkC4ZK/EgS/cQ=
-github.com/konsorten/go-windows-terminal-sequences v1.0.3 h1:CE8S1cTafDpPvMhIxNJKvHsGVBgn1xWYf1NbHQhywc8=
github.com/konsorten/go-windows-terminal-sequences v1.0.3/go.mod h1:T0+1ngSBFLxvqU3pZ+m/2kptfBszLMUkC4ZK/EgS/cQ=
github.com/leodido/go-urn v1.1.0/go.mod h1:+cyI34gQWZcE1eQU7NVgKkkzdXDQHr1dBMtdAPozLkw=
github.com/leodido/go-urn v1.2.0 h1:hpXL4XnriNwQ/ABnpepYM/1vCLWNDfUNts8dX3xTG6Y=
@@ -142,8 +137,6 @@ golang.org/x/sys v0.0.0-20190422165155-953cdadca894/go.mod h1:h1NjWce9XRLGQEsW7w
golang.org/x/sys v0.0.0-20190813064441-fde4db37ae7a/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs=
golang.org/x/sys v0.0.0-20200116001909-b77594299b42/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs=
golang.org/x/sys v0.0.0-20200323222414-85ca7c5b95cd/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs=
-golang.org/x/sys v0.0.0-20200909081042-eff7692f9009 h1:W0lCpv29Hv0UaM1LXb9QlBHLNP8UFfcKjblhVCWftOM=
-golang.org/x/sys v0.0.0-20200909081042-eff7692f9009/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs=
golang.org/x/sys v0.0.0-20200916084744-dbad9cb7cb7a h1:chkwkn8HYWVtTE5DCQNKYlkyptadXYY0+PuyaVdyMo4=
golang.org/x/sys v0.0.0-20200916084744-dbad9cb7cb7a/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs=
golang.org/x/text v0.3.0/go.mod h1:NqM8EUOU14njkJ3fqMW+pc6Ldnwhi/IjpwHt7yyuwOQ=
From 6581394ae1bcc4e4e437c0481e50f24e10b8df5a Mon Sep 17 00:00:00 2001
From: wdvxdr
Date: Mon, 28 Sep 2020 18:45:34 +0800
Subject: [PATCH 039/367] fix [CQ:record] & docs set_group_portrait
---
docs/cqhttp.md | 22 ++++++++++++++++++++++
global/fs.go | 5 +++--
2 files changed, 25 insertions(+), 2 deletions(-)
diff --git a/docs/cqhttp.md b/docs/cqhttp.md
index 5614553..38c212e 100644
--- a/docs/cqhttp.md
+++ b/docs/cqhttp.md
@@ -268,6 +268,28 @@ Type: `cardimage`
| group_id | int64 | 群号 |
| group_name | string | 新名 |
+### 设置群头像
+
+终结点: `/set_group_portrait`
+
+**参数**
+
+| 字段 | 类型 | 说明 |
+| -------- | ------ | ---- |
+| group_id | int64 | 群号 |
+| file | string | 图片文件名 |
+| cache | int | 表示是否使用已缓存的文件 |
+
+[1]`file` 参数支持以下几种格式:
+
+- 绝对路径,例如 `file:///C:\\Users\Richard\Pictures\1.png`,格式使用 [`file` URI](https://tools.ietf.org/html/rfc8089)
+- 网络 URL,例如 `http://i1.piimg.com/567571/fdd6e7b6d93f1ef0.jpg`
+- Base64 编码,例如 `base64://iVBORw0KGgoAAAANSUhEUgAAABQAAAAVCAIAAADJt1n/AAAAKElEQVQ4EWPk5+RmIBcwkasRpG9UM4mhNxpgowFGMARGEwnBIEJVAAAdBgBNAZf+QAAAAABJRU5ErkJggg==`
+
+[2]`cache`参数: 通过网络 URL 发送时有效,`1`表示使用缓存,`0`关闭关闭缓存,默认 为`1`
+
+[3] 目前这个API在登录一段时间后因cookie失效而失效,请考虑后使用
+
### 获取图片信息
终结点: `/get_image`
diff --git a/global/fs.go b/global/fs.go
index 9aa164d..4939952 100644
--- a/global/fs.go
+++ b/global/fs.go
@@ -53,7 +53,7 @@ func IsAMRorSILK(b []byte) bool {
}
func FindFile(f, cache, PATH string) (data []byte, err error) {
- data, err = nil, errors.New("can't find the file: "+f)
+ data, err = nil, errors.New("syntax error")
if strings.HasPrefix(f, "http") || strings.HasPrefix(f, "https") {
if cache == "" {
cache = "1"
@@ -74,7 +74,8 @@ func FindFile(f, cache, PATH string) (data []byte, err error) {
return nil, err
}
} else if strings.HasPrefix(f, "file") {
- fu, err := url.Parse(f)
+ var fu *url.URL
+ fu, err = url.Parse(f)
if err != nil {
return nil, err
}
From 83ce4e58a54bfee8267303bcfe428b726dcec175 Mon Sep 17 00:00:00 2001
From: Mrs4s
Date: Tue, 29 Sep 2020 19:15:30 +0800
Subject: [PATCH 040/367] update MiraiGo. fix #329
---
go.mod | 2 +-
go.sum | 2 ++
2 files changed, 3 insertions(+), 1 deletion(-)
diff --git a/go.mod b/go.mod
index 0527bd8..c353b67 100644
--- a/go.mod
+++ b/go.mod
@@ -3,7 +3,7 @@ module github.com/Mrs4s/go-cqhttp
go 1.14
require (
- github.com/Mrs4s/MiraiGo v0.0.0-20200928082341-65c1709f5eec
+ github.com/Mrs4s/MiraiGo v0.0.0-20200929101232-fbb53eba9b5a
github.com/fastly/go-utils v0.0.0-20180712184237-d95a45783239 // indirect
github.com/gin-gonic/gin v1.6.3
github.com/go-playground/validator/v10 v10.3.0 // indirect
diff --git a/go.sum b/go.sum
index 122ba3e..7b78a60 100644
--- a/go.sum
+++ b/go.sum
@@ -2,6 +2,8 @@ cloud.google.com/go v0.26.0/go.mod h1:aQUYkXzVsufM+DwF1aE+0xfcU+56JwCaLick0ClmMT
github.com/BurntSushi/toml v0.3.1/go.mod h1:xHWCNGjB5oqiDr8zfno3MHue2Ht5sIBksp03qcyfWMU=
github.com/Mrs4s/MiraiGo v0.0.0-20200928082341-65c1709f5eec h1:lzFAr6b1yO6JIzfse0VIsPq71E0KfdsoS3VnyOLurS4=
github.com/Mrs4s/MiraiGo v0.0.0-20200928082341-65c1709f5eec/go.mod h1:cwYPI2uq6nxNbx0nA6YuAKF1V5szSs6FPlGVLQvRUlo=
+github.com/Mrs4s/MiraiGo v0.0.0-20200929101232-fbb53eba9b5a h1:MaKFlcVI0aW7PFMrxpv2UBmvMGqKsiQP3O9j5wtVYYg=
+github.com/Mrs4s/MiraiGo v0.0.0-20200929101232-fbb53eba9b5a/go.mod h1:cwYPI2uq6nxNbx0nA6YuAKF1V5szSs6FPlGVLQvRUlo=
github.com/bwmarrin/snowflake v0.3.0 h1:xm67bEhkKh6ij1790JB83OujPR5CzNe8QuQqAgISZN0=
github.com/bwmarrin/snowflake v0.3.0/go.mod h1:NdZxfVWX+oR6y2K0o6qAYv6gIOP9rjG0/E9WsDpxqwE=
github.com/census-instrumentation/opencensus-proto v0.2.1/go.mod h1:f6KPmirojxKA12rnyqOA5BBL4O983OfeGPqjHWSTneU=
From a6a1de0a00b62101430864f4ecbeaea179d94fe3 Mon Sep 17 00:00:00 2001
From: scjtqs
Date: Wed, 30 Sep 2020 20:10:59 +0800
Subject: [PATCH 041/367] =?UTF-8?q?admin=20api=20=E5=88=9D=E7=89=88?=
MIME-Version: 1.0
Content-Type: text/plain; charset=UTF-8
Content-Transfer-Encoding: 8bit
---
global/config.go | 12 ++
global/fs.go | 13 ++
global/net.go | 1 -
main.go | 118 ++---------
server/apiAdmin.go | 485 +++++++++++++++++++++++++++++++++++++++++++++
server/http.go | 29 ++-
6 files changed, 552 insertions(+), 106 deletions(-)
create mode 100644 server/apiAdmin.go
diff --git a/global/config.go b/global/config.go
index 31ed776..4277433 100644
--- a/global/config.go
+++ b/global/config.go
@@ -35,6 +35,7 @@ type JsonConfig struct {
PostMessageFormat string `json:"post_message_format"`
Debug bool `json:"debug"`
LogLevel string `json:"log_level"`
+ WebUi *GoCqWebUi `json:"web_ui"`
}
type CQHttpApiConfig struct {
@@ -78,6 +79,12 @@ type GoCQReverseWebsocketConfig struct {
ReverseReconnectInterval uint16 `json:"reverse_reconnect_interval"`
}
+type GoCqWebUi struct {
+ Enabled bool `json:"enabled"`
+ WebUiPort uint64 `json:"web_ui_port"`
+ WebInput bool `json:"webinput"`
+}
+
func DefaultConfig() *JsonConfig {
return &JsonConfig{
EnableDB: true,
@@ -121,6 +128,11 @@ func DefaultConfig() *JsonConfig {
ReverseReconnectInterval: 3000,
},
},
+ WebUi: &GoCqWebUi{
+ Enabled: true,
+ WebInput: false,
+ WebUiPort: 9999,
+ },
}
}
diff --git a/global/fs.go b/global/fs.go
index 9aa164d..5af0e07 100644
--- a/global/fs.go
+++ b/global/fs.go
@@ -93,3 +93,16 @@ func FindFile(f, cache, PATH string) (data []byte, err error) {
}
return
}
+
+func DelFile(path string) bool {
+ err := os.Remove(path)
+ if err != nil {
+ // 删除失败
+ log.Error(err)
+ return false
+ } else {
+ // 删除成功
+ log.Info(path + "删除成功")
+ return true
+ }
+}
diff --git a/global/net.go b/global/net.go
index 55f27de..7691e89 100644
--- a/global/net.go
+++ b/global/net.go
@@ -50,4 +50,3 @@ func NeteaseMusicSongInfo(id string) (gjson.Result, error) {
}
return gjson.ParseBytes(d).Get("songs.0"), nil
}
-
diff --git a/main.go b/main.go
index 4e8d99b..15f10ab 100644
--- a/main.go
+++ b/main.go
@@ -2,32 +2,27 @@ package main
import (
"bufio"
- "bytes"
"crypto/md5"
"encoding/base64"
"encoding/json"
"fmt"
- "image"
+ "github.com/Mrs4s/go-cqhttp/server"
"io"
"io/ioutil"
"os"
"os/signal"
"path"
"strconv"
- "strings"
"time"
"github.com/Mrs4s/MiraiGo/binary"
"github.com/Mrs4s/MiraiGo/client"
"github.com/Mrs4s/go-cqhttp/coolq"
"github.com/Mrs4s/go-cqhttp/global"
- "github.com/Mrs4s/go-cqhttp/server"
-
- rotatelogs "github.com/lestrrat-go/file-rotatelogs"
+ "github.com/lestrrat-go/file-rotatelogs"
"github.com/rifflock/lfshook"
log "github.com/sirupsen/logrus"
- easy "github.com/t-tomalak/logrus-easy-formatter"
- asciiart "github.com/yinghau76/go-ascii-art"
+ "github.com/t-tomalak/logrus-easy-formatter"
)
func init() {
@@ -238,105 +233,22 @@ func main() {
cli.OnServerUpdated(func(bot *client.QQClient, e *client.ServerUpdatedEvent) {
log.Infof("收到服务器地址更新通知, 将在下一次重连时应用. ")
})
- rsp, err := cli.Login()
- for {
- global.Check(err)
- if !rsp.Success {
- switch rsp.Error {
- case client.NeedCaptcha:
- _ = ioutil.WriteFile("captcha.jpg", rsp.CaptchaImage, 0644)
- img, _, _ := image.Decode(bytes.NewReader(rsp.CaptchaImage))
- fmt.Println(asciiart.New("image", img).Art)
- log.Warn("请输入验证码 (captcha.jpg): (Enter 提交)")
- text, _ := console.ReadString('\n')
- rsp, err = cli.SubmitCaptcha(strings.ReplaceAll(text, "\n", ""), rsp.CaptchaSign)
- continue
- case client.UnsafeDeviceError:
- log.Warnf("账号已开启设备锁,请前往 -> %v <- 验证并重启Bot.", rsp.VerifyUrl)
- log.Infof(" 按 Enter 继续....")
- _, _ = console.ReadString('\n')
- return
- case client.OtherLoginError, client.UnknownLoginError:
- log.Fatalf("登录失败: %v", rsp.ErrorMessage)
- }
- }
- break
- }
- log.Infof("登录成功 欢迎使用: %v", cli.Nickname)
- time.Sleep(time.Second)
- log.Info("开始加载好友列表...")
- global.Check(cli.ReloadFriendList())
- log.Infof("共加载 %v 个好友.", len(cli.FriendList))
- log.Infof("开始加载群列表...")
- global.Check(cli.ReloadGroupList())
- log.Infof("共加载 %v 个群.", len(cli.GroupList))
- b := coolq.NewQQBot(cli, conf)
- if conf.PostMessageFormat != "string" && conf.PostMessageFormat != "array" {
- log.Warnf("post_message_format 配置错误, 将自动使用 string")
- coolq.SetMessageFormat("string")
- } else {
- coolq.SetMessageFormat(conf.PostMessageFormat)
- }
- if conf.RateLimit.Enabled {
- global.InitLimiter(conf.RateLimit.Frequency, conf.RateLimit.BucketSize)
- }
- log.Info("正在加载事件过滤器.")
- global.BootFilter()
- coolq.IgnoreInvalidCQCode = conf.IgnoreInvalidCQCode
- coolq.ForceFragmented = conf.ForceFragmented
- if conf.HttpConfig != nil && conf.HttpConfig.Enabled {
- server.HttpServer.Run(fmt.Sprintf("%s:%d", conf.HttpConfig.Host, conf.HttpConfig.Port), conf.AccessToken, b)
- for k, v := range conf.HttpConfig.PostUrls {
- server.NewHttpClient().Run(k, v, conf.HttpConfig.Timeout, b)
+ if conf.WebUi == nil {
+ conf.WebUi = &global.GoCqWebUi{
+ Enabled: true,
+ WebInput: false,
+ WebUiPort: 9999,
}
}
- if conf.WSConfig != nil && conf.WSConfig.Enabled {
- server.WebsocketServer.Run(fmt.Sprintf("%s:%d", conf.WSConfig.Host, conf.WSConfig.Port), conf.AccessToken, b)
+ if conf.WebUi.WebUiPort <= 0 {
+ conf.WebUi.WebUiPort = 9999
}
- for _, rc := range conf.ReverseServers {
- server.NewWebsocketClient(rc, conf.AccessToken, b).Run()
+ confErr := conf.Save("config.json")
+ if confErr != nil {
+ log.Error("保存配置文件失败")
}
- log.Info("资源初始化完成, 开始处理信息.")
- log.Info("アトリは、高性能ですから!")
- cli.OnDisconnected(func(bot *client.QQClient, e *client.ClientDisconnectedEvent) {
- if conf.ReLogin.Enabled {
- var times uint = 1
- for {
-
- if conf.ReLogin.MaxReloginTimes == 0 {
- } else if times > conf.ReLogin.MaxReloginTimes {
- break
- }
- log.Warnf("Bot已离线 (%v),将在 %v 秒后尝试重连. 重连次数:%v",
- e.Message, conf.ReLogin.ReLoginDelay, times)
- times++
- time.Sleep(time.Second * time.Duration(conf.ReLogin.ReLoginDelay))
- rsp, err := cli.Login()
- if err != nil {
- log.Errorf("重连失败: %v", err)
- continue
- }
- if !rsp.Success {
- switch rsp.Error {
- case client.NeedCaptcha:
- log.Fatalf("重连失败: 需要验证码. (验证码处理正在开发中)")
- case client.UnsafeDeviceError:
- log.Fatalf("重连失败: 设备锁")
- default:
- log.Errorf("重连失败: %v", rsp.ErrorMessage)
- continue
- }
- }
- log.Info("重连成功")
- return
-
- }
- log.Fatal("重连失败: 重连次数达到设置的上限值")
- }
- b.Release()
- log.Fatalf("Bot已离线:%v", e.Message)
- })
- c := make(chan os.Signal, 1)
+ b := server.WebServer.Run(fmt.Sprintf("%s:%d", "0.0.0.0", conf.WebUi.WebUiPort), cli)
+ c := server.Console
signal.Notify(c, os.Interrupt, os.Kill)
<-c
b.Release()
diff --git a/server/apiAdmin.go b/server/apiAdmin.go
new file mode 100644
index 0000000..221517c
--- /dev/null
+++ b/server/apiAdmin.go
@@ -0,0 +1,485 @@
+package server
+
+import (
+ "bufio"
+ "bytes"
+ "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"
+ "os"
+ "strconv"
+ "strings"
+ "time"
+)
+
+var WebInput = make(chan string, 1) //长度1,用于阻塞
+
+var Console = make(chan os.Signal, 1)
+
+var Jsonconfig *global.JsonConfig
+
+type webServer struct {
+ engine *gin.Engine
+ bot *coolq.CQBot
+ Cli *client.QQClient
+ Conf *global.JsonConfig //old config
+ Console *bufio.Reader
+}
+
+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": AdminDoConfigJson, //拉取 当前的config.json配置
+}
+
+func Failed(code int, msg string) coolq.MSG {
+ return coolq.MSG{"data": nil, "retcode": code, "status": "failed", "msg": msg}
+}
+
+func (s *webServer) Run(addr string, cli *client.QQClient) *coolq.CQBot {
+ s.Cli = cli
+ s.Conf = GetConf()
+ Jsonconfig = s.Conf
+ gin.SetMode(gin.ReleaseMode)
+ s.engine = gin.New()
+
+ s.engine.Use(AuthMiddleWare())
+
+ //通用路由
+ s.engine.Any("/admin/:action", s.admin)
+
+ go func() {
+ log.Infof("miraigo adminapi 服务器已启动: %v", addr)
+ err := s.engine.Run(addr)
+ if err != nil {
+ log.Error(err)
+ log.Infof("请检查端口是否被占用.")
+ time.Sleep(time.Second * 5)
+ os.Exit(1)
+ }
+ }()
+ s.Dologin()
+ s.UpServer()
+ b := s.bot //外部引入 bot对象,用于操作bot
+ return b
+}
+
+func (s *webServer) Dologin() {
+ s.Console = bufio.NewReader(os.Stdin)
+ conf := GetConf()
+ cli := s.Cli
+ rsp, err := cli.Login()
+ for {
+ global.Check(err)
+ var text string
+ if !rsp.Success {
+ switch rsp.Error {
+ case client.NeedCaptcha:
+ _ = ioutil.WriteFile("captcha.jpg", rsp.CaptchaImage, 0644)
+ img, _, _ := image.Decode(bytes.NewReader(rsp.CaptchaImage))
+ fmt.Println(asciiart.New("image", img).Art)
+ if conf.WebUi.WebInput {
+ log.Warn("请输入验证码 (captcha.jpg): (http://127.0.0.1/admin/web_write 输入)")
+ text = <-WebInput
+ } else {
+ log.Warn("请输入验证码 (captcha.jpg): (Enter 提交)")
+ text, _ = s.Console.ReadString('\n')
+ }
+ rsp, err = cli.SubmitCaptcha(strings.ReplaceAll(text, "\n", ""), rsp.CaptchaSign)
+ global.DelFile("captcha.jpg")
+ continue
+ case client.UnsafeDeviceError:
+ log.Warnf("账号已开启设备锁,请前往 -> %v <- 验证并重启Bot.", rsp.VerifyUrl)
+ if conf.WebUi.WebInput {
+ log.Infof(" (http://127.0.0.1/admin/web_write 确认后继续)....")
+ text = <-WebInput
+ } else {
+ log.Infof(" 按 Enter 继续....")
+ _, _ = s.Console.ReadString('\n')
+ }
+ log.Info(text)
+ return
+ case client.OtherLoginError, client.UnknownLoginError:
+ log.Fatalf("登录失败: %v", rsp.ErrorMessage)
+ return
+ }
+ }
+ break
+ }
+ log.Infof("登录成功 欢迎使用: %v", cli.Nickname)
+ time.Sleep(time.Second)
+ log.Info("开始加载好友列表...")
+ global.Check(cli.ReloadFriendList())
+ log.Infof("共加载 %v 个好友.", len(cli.FriendList))
+ log.Infof("开始加载群列表...")
+ global.Check(cli.ReloadGroupList())
+ log.Infof("共加载 %v 个群.", len(cli.GroupList))
+ s.bot = coolq.NewQQBot(cli, conf)
+ if conf.PostMessageFormat != "string" && conf.PostMessageFormat != "array" {
+ log.Warnf("post_message_format 配置错误, 将自动使用 string")
+ coolq.SetMessageFormat("string")
+ return
+ } else {
+ coolq.SetMessageFormat(conf.PostMessageFormat)
+ }
+ if conf.RateLimit.Enabled {
+ global.InitLimiter(conf.RateLimit.Frequency, conf.RateLimit.BucketSize)
+ }
+ log.Info("正在加载事件过滤器.")
+ global.BootFilter()
+ coolq.IgnoreInvalidCQCode = conf.IgnoreInvalidCQCode
+ coolq.ForceFragmented = conf.ForceFragmented
+ log.Info("资源初始化完成, 开始处理信息.")
+ log.Info("アトリは、高性能ですから!")
+ cli.OnDisconnected(func(bot *client.QQClient, e *client.ClientDisconnectedEvent) {
+ if conf.ReLogin.Enabled {
+ var times uint = 1
+ for {
+ if conf.ReLogin.MaxReloginTimes == 0 {
+ } else if times > conf.ReLogin.MaxReloginTimes {
+ break
+ }
+ log.Warnf("Bot已离线 (%v),将在 %v 秒后尝试重连. 重连次数:%v",
+ e.Message, conf.ReLogin.ReLoginDelay, times)
+ times++
+ time.Sleep(time.Second * time.Duration(conf.ReLogin.ReLoginDelay))
+ rsp, err := cli.Login()
+ if err != nil {
+ log.Errorf("重连失败: %v", err)
+ continue
+ }
+ if !rsp.Success {
+ switch rsp.Error {
+ case client.NeedCaptcha:
+ log.Fatalf("重连失败: 需要验证码. (验证码处理正在开发中)")
+ case client.UnsafeDeviceError:
+ log.Fatalf("重连失败: 设备锁")
+ default:
+ log.Errorf("重连失败: %v", rsp.ErrorMessage)
+ continue
+ }
+ }
+ log.Info("重连成功")
+ return
+ }
+ log.Fatal("重连失败: 重连次数达到设置的上限值")
+ }
+ s.bot.Release()
+ log.Fatalf("Bot已离线:%v", e.Message)
+ })
+}
+
+func (s *webServer) admin(c *gin.Context) {
+ action := c.Param("action")
+ log.Debugf("WebServer接收到cgi调用: %v", action)
+ if f, ok := HttpuriAdmin[action]; ok {
+ f(s, c)
+ } else {
+ c.JSON(200, coolq.Failed(404))
+ }
+}
+
+// 获取当前配置文件信息
+func GetConf() *global.JsonConfig {
+ if Jsonconfig != nil {
+ return Jsonconfig
+ }
+ conf := global.Load("config.json")
+ return conf
+}
+
+// admin 控制器 登录验证
+func AuthMiddleWare() gin.HandlerFunc {
+ return func(c *gin.Context) {
+ conf := GetConf()
+ //处理跨域问题
+ c.Header("Access-Control-Allow-Origin", "*")
+ c.Header("Access-Control-Allow-Headers", "Content-Type,AccessToken,X-CSRF-Token, Authorization, Token")
+ c.Header("Access-Control-Allow-Methods", "POST, GET, OPTIONS, PUT, PATCH, DELETE")
+ c.Header("Access-Control-Expose-Headers", "Content-Length, Access-Control-Allow-Origin, Access-Control-Allow-Headers, Content-Type")
+ c.Header("Access-Control-Allow-Credentials", "true")
+ // 放行所有OPTIONS方法,因为有的模板是要请求两次的
+ if c.Request.Method == "OPTIONS" {
+ c.AbortWithStatus(http.StatusNoContent)
+ }
+ // 处理请求
+ if c.Request.Method != "GET" && c.Request.Method != "POST" {
+ log.Warnf("已拒绝客户端 %v 的请求: 方法错误", c.Request.RemoteAddr)
+ c.Status(404)
+ c.Abort()
+ }
+ if c.Request.Method == "POST" && strings.Contains(c.Request.Header.Get("Content-Type"), "application/json") {
+ d, err := c.GetRawData()
+ if err != nil {
+ log.Warnf("获取请求 %v 的Body时出现错误: %v", c.Request.RequestURI, err)
+ c.Status(400)
+ c.Abort()
+ }
+ if !gjson.ValidBytes(d) {
+ log.Warnf("已拒绝客户端 %v 的请求: 非法Json", c.Request.RemoteAddr)
+ c.Status(400)
+ c.Abort()
+ }
+ c.Set("json_body", gjson.ParseBytes(d))
+ }
+ authToken := conf.AccessToken
+ if auth := c.Request.Header.Get("Authorization"); auth != "" {
+ if strings.SplitN(auth, " ", 2)[1] != authToken {
+ c.AbortWithStatus(401)
+ return
+ }
+ } else if c.Query("access_token") != authToken {
+ c.AbortWithStatus(401)
+ return
+ } else {
+ c.Next()
+ }
+ }
+}
+
+func (s *webServer) DoRelogin() {
+ Jsonconfig = nil
+ conf := GetConf()
+ OldConf := s.Conf
+ cli := client.NewClient(conf.Uin, conf.Password)
+ log.Info("开始尝试登录并同步消息...")
+ log.Infof("使用协议: %v", func() string {
+ switch client.SystemDeviceInfo.Protocol {
+ case client.AndroidPad:
+ return "Android Pad"
+ case client.AndroidPhone:
+ return "Android Phone"
+ case client.AndroidWatch:
+ return "Android Watch"
+ }
+ return "未知"
+ }())
+ cli.OnLog(func(c *client.QQClient, e *client.LogEvent) {
+ switch e.Type {
+ case "INFO":
+ log.Info("Protocol -> " + e.Message)
+ case "ERROR":
+ log.Error("Protocol -> " + e.Message)
+ case "DEBUG":
+ log.Debug("Protocol -> " + e.Message)
+ }
+ })
+ cli.OnServerUpdated(func(bot *client.QQClient, e *client.ServerUpdatedEvent) {
+ log.Infof("收到服务器地址更新通知, 将在下一次重连时应用. ")
+ })
+ s.Cli = cli
+ s.Dologin()
+ //关闭之前的 server
+ if OldConf.HttpConfig != nil && OldConf.HttpConfig.Enabled {
+ HttpServer.ShutDown()
+ }
+ //if OldConf.WSConfig != nil && OldConf.WSConfig.Enabled {
+ // server.WsShutdown()
+ //}
+ //s.UpServer()
+ s.ReloadServer()
+ s.Conf = conf
+}
+
+func (s *webServer) UpServer() {
+ conf := GetConf()
+ if conf.HttpConfig != nil && conf.HttpConfig.Enabled {
+ go HttpServer.Run(fmt.Sprintf("%s:%d", conf.HttpConfig.Host, conf.HttpConfig.Port), conf.AccessToken, s.bot)
+ for k, v := range conf.HttpConfig.PostUrls {
+ NewHttpClient().Run(k, v, conf.HttpConfig.Timeout, s.bot)
+ }
+ }
+ if conf.WSConfig != nil && conf.WSConfig.Enabled {
+ go WebsocketServer.Run(fmt.Sprintf("%s:%d", conf.WSConfig.Host, conf.WSConfig.Port), conf.AccessToken, s.bot)
+ }
+ for _, rc := range conf.ReverseServers {
+ go NewWebsocketClient(rc, conf.AccessToken, s.bot).Run()
+ }
+}
+
+// 暂不支持ws服务的重启
+func (s *webServer) ReloadServer() {
+ conf := GetConf()
+ if conf.HttpConfig != nil && conf.HttpConfig.Enabled {
+ go HttpServer.Run(fmt.Sprintf("%s:%d", conf.HttpConfig.Host, conf.HttpConfig.Port), conf.AccessToken, s.bot)
+ for k, v := range conf.HttpConfig.PostUrls {
+ NewHttpClient().Run(k, v, conf.HttpConfig.Timeout, s.bot)
+ }
+ }
+ for _, rc := range conf.ReverseServers {
+ go NewWebsocketClient(rc, conf.AccessToken, s.bot).Run()
+ }
+}
+
+// 热重启
+func AdminDoRestart(s *webServer, c *gin.Context) {
+ s.bot = nil
+ s.Cli = nil
+ s.DoRelogin()
+ c.JSON(200, coolq.OK(coolq.MSG{}))
+ return
+}
+
+// 冷重启
+func AdminDoRestartDocker(s *webServer, c *gin.Context) {
+ Console <- os.Kill
+ c.JSON(200, coolq.OK(coolq.MSG{}))
+ return
+}
+
+// web输入 html 页面
+func AdminWebWrite(s *webServer, c *gin.Context) {
+ pic := global.ReadAllText("captcha.jpg")
+ var picbase64 string
+ var ispic = false
+ if pic != "" {
+ input := []byte(pic)
+ // base64编码
+ picbase64 = base64.StdEncoding.EncodeToString(input)
+ ispic = true
+ }
+ c.JSON(200, coolq.OK(coolq.MSG{
+ "ispic": ispic, //为空则为 设备锁 或者没有需要输入
+ "picbase64": picbase64, //web上显示图片
+ }))
+}
+
+// web输入 处理
+func AdminDoWebWrite(s *webServer, c *gin.Context) {
+ input := c.PostForm("input")
+ WebInput <- input
+ c.JSON(200, coolq.OK(coolq.MSG{}))
+}
+
+// 普通配置修改
+func AdminDoConfigBase(s *webServer, c *gin.Context) {
+ conf := GetConf()
+ conf.Uin, _ = strconv.ParseInt(c.PostForm("uin"), 10, 64)
+ conf.Password = c.PostForm("password")
+ if c.PostForm("enable_db") == "true" {
+ conf.EnableDB = true
+ } else {
+ conf.EnableDB = false
+ }
+ conf.AccessToken = c.PostForm("access_token")
+ if err := conf.Save("config.json"); err != nil {
+ log.Fatalf("保存 config.json 时出现错误: %v", err)
+ c.JSON(200, Failed(502, "保存 config.json 时出现错误:"+fmt.Sprintf("%v", err)))
+ } else {
+ Jsonconfig = nil
+ c.JSON(200, coolq.OK(coolq.MSG{}))
+ }
+}
+
+// http配置修改
+func AdminDoConfigHttp(s *webServer, c *gin.Context) {
+ conf := GetConf()
+ p, _ := strconv.ParseUint(c.PostForm("port"), 10, 16)
+ conf.HttpConfig.Port = uint16(p)
+ conf.HttpConfig.Host = c.PostForm("host")
+ if c.PostForm("enable") == "true" {
+ conf.HttpConfig.Enabled = true
+ } else {
+ conf.HttpConfig.Enabled = false
+ }
+ t, _ := strconv.ParseInt(c.PostForm("timeout"), 10, 32)
+ conf.HttpConfig.Timeout = int32(t)
+ if c.PostForm("post_url") != "" {
+ conf.HttpConfig.PostUrls[c.PostForm("post_url")] = c.PostForm("post_secret")
+ }
+ if err := conf.Save("config.json"); err != nil {
+ log.Fatalf("保存 config.json 时出现错误: %v", err)
+ c.JSON(200, Failed(502, "保存 config.json 时出现错误:"+fmt.Sprintf("%v", err)))
+ } else {
+ Jsonconfig = nil
+ c.JSON(200, coolq.OK(coolq.MSG{}))
+ }
+}
+
+// ws配置修改
+func AdminDoConfigWs(s *webServer, c *gin.Context) {
+ conf := GetConf()
+ p, _ := strconv.ParseUint(c.PostForm("port"), 10, 16)
+ conf.WSConfig.Port = uint16(p)
+ conf.WSConfig.Host = c.PostForm("host")
+ if c.PostForm("enable") == "true" {
+ conf.WSConfig.Enabled = true
+ } else {
+ conf.WSConfig.Enabled = false
+ }
+ if err := conf.Save("config.json"); err != nil {
+ log.Fatalf("保存 config.json 时出现错误: %v", err)
+ c.JSON(200, Failed(502, "保存 config.json 时出现错误:"+fmt.Sprintf("%v", err)))
+ } else {
+ Jsonconfig = nil
+ c.JSON(200, coolq.OK(coolq.MSG{}))
+ }
+}
+
+// 反向ws配置修改
+func AdminDoConfigReverse(s *webServer, c *gin.Context) {
+ conf := GetConf()
+ conf.ReverseServers[0].ReverseApiUrl = c.PostForm("reverse_api_url")
+ conf.ReverseServers[0].ReverseUrl = c.PostForm("reverse_url")
+ conf.ReverseServers[0].ReverseEventUrl = c.PostForm("reverse_event_url")
+ t, _ := strconv.ParseUint(c.PostForm("reverse_reconnect_interval"), 10, 16)
+ conf.ReverseServers[0].ReverseReconnectInterval = uint16(t)
+ if c.PostForm("enable") == "true" {
+ conf.ReverseServers[0].Enabled = true
+ } else {
+ conf.ReverseServers[0].Enabled = false
+ }
+ if err := conf.Save("config.json"); err != nil {
+ log.Fatalf("保存 config.json 时出现错误: %v", err)
+ c.JSON(200, Failed(502, "保存 config.json 时出现错误:"+fmt.Sprintf("%v", err)))
+ } else {
+ Jsonconfig = nil
+ c.JSON(200, coolq.OK(coolq.MSG{}))
+ }
+}
+
+// config.json配置修改
+func AdminDoConfigJson(s *webServer, c *gin.Context) {
+ conf := GetConf()
+ Json := c.PostForm("json")
+ err := json.Unmarshal([]byte(Json), &conf)
+ if err != nil {
+ log.Warnf("尝试加载配置文件 %v 时出现错误: %v", "config.json", err)
+ c.JSON(200, Failed(502, "保存 config.json 时出现错误:"+fmt.Sprintf("%v", err)))
+ return
+ }
+ if err := conf.Save("config.json"); err != nil {
+ log.Fatalf("保存 config.json 时出现错误: %v", err)
+ c.JSON(200, Failed(502, "保存 config.json 时出现错误:"+fmt.Sprintf("%v", err)))
+ } else {
+ Jsonconfig = nil
+ c.JSON(200, coolq.OK(coolq.MSG{}))
+ }
+}
+
+// 拉取config.json配置
+func AdminGetConfigJson(s *webServer, c *gin.Context) {
+ conf := GetConf()
+ c.JSON(200, coolq.OK(coolq.MSG{"config": conf}))
+
+}
diff --git a/server/http.go b/server/http.go
index 5d61c76..d3aed47 100644
--- a/server/http.go
+++ b/server/http.go
@@ -5,6 +5,7 @@ import (
"crypto/hmac"
"crypto/sha1"
"encoding/hex"
+ "net/http"
"os"
"strconv"
"strings"
@@ -21,6 +22,7 @@ import (
type httpServer struct {
engine *gin.Engine
bot *coolq.CQBot
+ Http *http.Server
}
type httpClient struct {
@@ -79,13 +81,23 @@ func (s *httpServer) Run(addr, authToken string, bot *coolq.CQBot) {
go func() {
log.Infof("CQ HTTP 服务器已启动: %v", addr)
- err := s.engine.Run(addr)
- if err != nil {
+ s.Http=&http.Server{
+ Addr:addr,
+ Handler:s.engine,
+ }
+ if err := s.Http.ListenAndServe(); err != nil && err != http.ErrServerClosed {
log.Error(err)
log.Infof("请检查端口是否被占用.")
time.Sleep(time.Second * 5)
os.Exit(1)
}
+ //err := s.engine.Run(addr)
+ //if err != nil {
+ // log.Error(err)
+ // log.Infof("请检查端口是否被占用.")
+ // time.Sleep(time.Second * 5)
+ // os.Exit(1)
+ //}
}()
}
@@ -519,3 +531,16 @@ var httpApi = map[string]func(s *httpServer, c *gin.Context){
s.OcrImage(c)
},
}
+
+func (s *httpServer) ShutDown() {
+ ctx, cancel := context.WithTimeout(context.Background(), 5*time.Second)
+ defer cancel()
+ if err := s.Http.Shutdown(ctx); err != nil {
+ log.Fatal("http Server Shutdown:", err)
+ }
+ select {
+ case <-ctx.Done():
+ log.Println("timeout of 5 seconds.")
+ }
+ log.Println("http Server exiting")
+}
\ No newline at end of file
From de234c772194c5f07c30fdad1356b1482d395ace Mon Sep 17 00:00:00 2001
From: takayama-lily
Date: Thu, 1 Oct 2020 08:38:11 +0900
Subject: [PATCH 042/367] Update QA.md
---
docs/QA.md | 6 +++++-
1 file changed, 5 insertions(+), 1 deletion(-)
diff --git a/docs/QA.md b/docs/QA.md
index 90fef58..670722c 100644
--- a/docs/QA.md
+++ b/docs/QA.md
@@ -4,6 +4,10 @@
### A: 此问题是因为密码输入错误导致的, 信息为服务器返回, 很可能是TX相关的错误, 请检查密码
+### Q: 为什么登录的时候出现 `为了您的帐号安全,请使用QQ一键登录`?
+
+### A: 因为目前手机协议不支持图片验证码,切换成平板协议登录成功后,再切换回手机协议即可
+
### Q: 为什么挂一段时间后就会出现 `消息发送失败,账号可能被风控`?
-### A: 如果你刚开始使用 go-cqhttp 建议挂机3-7天,即可解除风控
\ No newline at end of file
+### A: 如果你刚开始使用 go-cqhttp 建议挂机3-7天,即可解除风控
From f5f3a314ebd2d50caae67dcab0fe29a0e956468a Mon Sep 17 00:00:00 2001
From: =?UTF-8?q?=E5=8D=83=E6=A9=98=E9=9B=AB=E9=9C=9E?=
Date: Thu, 1 Oct 2020 09:23:55 +0800
Subject: [PATCH 043/367] =?UTF-8?q?=E4=BF=AE=E5=A4=8D=E6=9C=BA=E5=99=A8?=
=?UTF-8?q?=E4=BA=BA=E5=B7=B2=E7=99=BB=E5=BD=95=E4=BD=86=E7=BB=A7=E7=BB=AD?=
=?UTF-8?q?=E5=B0=9D=E8=AF=95=E7=99=BB=E5=BD=95=E7=9A=84=E7=BC=BA=E9=99=B7?=
MIME-Version: 1.0
Content-Type: text/plain; charset=UTF-8
Content-Transfer-Encoding: 8bit
---
main.go | 8 ++++++--
1 file changed, 6 insertions(+), 2 deletions(-)
diff --git a/main.go b/main.go
index 4e8d99b..72d44cd 100644
--- a/main.go
+++ b/main.go
@@ -303,10 +303,14 @@ func main() {
var times uint = 1
for {
- if conf.ReLogin.MaxReloginTimes == 0 {
- } else if times > conf.ReLogin.MaxReloginTimes {
+ if cli.Online {
+ log.Warn("Bot已登录")
+ return
+ }
+ if conf.ReLogin.MaxReloginTimes != 0 && times > conf.ReLogin.MaxReloginTimes {
break
}
+
log.Warnf("Bot已离线 (%v),将在 %v 秒后尝试重连. 重连次数:%v",
e.Message, conf.ReLogin.ReLoginDelay, times)
times++
From add9d3fc20ee86268f77bbeee3df84a4651916a7 Mon Sep 17 00:00:00 2001
From: wdvxdr
Date: Thu, 1 Oct 2020 18:11:28 +0800
Subject: [PATCH 044/367] feature [CQ:gift]
---
coolq/bot.go | 4 ++++
coolq/cqcode.go | 31 ++++++++++++++++++++++++++++
docs/cqhttp.md | 54 +++++++++++++++++++++++++++++++++++++++++++++++++
go.mod | 10 ++++-----
go.sum | 22 ++++++++++++++++++++
5 files changed, 116 insertions(+), 5 deletions(-)
diff --git a/coolq/bot.go b/coolq/bot.go
index dda64e9..7e75080 100644
--- a/coolq/bot.go
+++ b/coolq/bot.go
@@ -147,6 +147,10 @@ func (bot *CQBot) SendGroupMessage(groupId int64, m *message.SendingMessage) int
}
}
}
+ if i, ok := elem.(*GiftElement); ok {
+ bot.Client.SendGroupGift(uint64(groupId), uint64(i.Target), i.GiftId)
+ return 0
+ }
newElem = append(newElem, elem)
}
m.Elements = newElem
diff --git a/coolq/cqcode.go b/coolq/cqcode.go
index f7102b7..060fcbb 100644
--- a/coolq/cqcode.go
+++ b/coolq/cqcode.go
@@ -30,6 +30,27 @@ type PokeElement struct {
Target int64
}
+type GiftElement struct {
+ Target int64
+ GiftId message.GroupGift
+}
+
+func (e *GiftElement) Type() message.ElementType {
+ return message.At
+}
+
+var GiftId = []message.GroupGift{
+ message.SweetWink,
+ message.HappyCola,
+ message.LuckyBracelet,
+ message.Cappuccino,
+ message.CatWatch,
+ message.FleeceGloves,
+ message.RainbowCandy,
+ message.Stronger,
+ message.LoveMicrophone,
+}
+
func (e *PokeElement) Type() message.ElementType {
return message.At
}
@@ -333,6 +354,16 @@ func (bot *CQBot) ToElement(t string, d map[string]string, group bool) (message.
}
t, _ := strconv.ParseInt(d["qq"], 10, 64)
return &PokeElement{Target: t}, nil
+ case "gift":
+ if !group {
+ return nil, errors.New("private gift unsupported") // no free private gift
+ }
+ t, _ := strconv.ParseInt(d["qq"], 10, 64)
+ id, _ := strconv.Atoi(d["id"])
+ if id < 0 || id >= 9 {
+ return nil,errors.New("invalid gift id")
+ }
+ return &GiftElement{Target: t,GiftId: GiftId[id]}, nil
case "record":
if !group {
return nil, errors.New("private voice unsupported now")
diff --git a/docs/cqhttp.md b/docs/cqhttp.md
index 5614553..4c4b268 100644
--- a/docs/cqhttp.md
+++ b/docs/cqhttp.md
@@ -48,6 +48,38 @@ Type: `poke`
示例: `[CQ:poke,qq=123456]`
+### 礼物
+
+> 注意:仅支持免费礼物,发送群礼物消息无法撤回,返回的 `message id` 恒定为 `0`
+
+Type: `gift`
+
+范围: **发送(仅群聊,接收的时候不是CQ码)**
+
+参数:
+
+| 参数名 |类型 | 说明 |
+| ------ | ------ | -----------|
+| qq | int64 | 接收礼物的成员 |
+| id | int | 礼物的类型 |
+
+目前支持的礼物ID:
+
+| id |类型 |
+| ---| ---------|
+| 0 | 甜Wink |
+| 1 | 快乐肥宅水|
+| 2 | 幸运手链 |
+| 3 | 卡布奇诺 |
+| 4 | 猫咪手表 |
+| 5 | 绒绒手套 |
+| 6 | 彩虹糖果 |
+| 7 | 坚强 |
+| 8 | 告白话筒 |
+
+
+示例: `[CQ:gift,qq=123456,id=8]`
+
### 合并转发
Type: `forward`
@@ -268,6 +300,28 @@ Type: `cardimage`
| group_id | int64 | 群号 |
| group_name | string | 新名 |
+### 设置群头像
+
+终结点: `/set_group_portrait`
+
+**参数**
+
+| 字段 | 类型 | 说明 |
+| -------- | ------ | ---- |
+| group_id | int64 | 群号 |
+| file | string | 图片文件名 |
+| cache | int | 表示是否使用已缓存的文件 |
+
+[1]`file` 参数支持以下几种格式:
+
+- 绝对路径,例如 `file:///C:\\Users\Richard\Pictures\1.png`,格式使用 [`file` URI](https://tools.ietf.org/html/rfc8089)
+- 网络 URL,例如 `http://i1.piimg.com/567571/fdd6e7b6d93f1ef0.jpg`
+- Base64 编码,例如 `base64://iVBORw0KGgoAAAANSUhEUgAAABQAAAAVCAIAAADJt1n/AAAAKElEQVQ4EWPk5+RmIBcwkasRpG9UM4mhNxpgowFGMARGEwnBIEJVAAAdBgBNAZf+QAAAAABJRU5ErkJggg==`
+
+[2]`cache`参数: 通过网络 URL 发送时有效,`1`表示使用缓存,`0`关闭关闭缓存,默认 为`1`
+
+[3] 目前这个API在登录一段时间后因cookie失效而失效,请考虑后使用
+
### 获取图片信息
终结点: `/get_image`
diff --git a/go.mod b/go.mod
index 0527bd8..e514a4c 100644
--- a/go.mod
+++ b/go.mod
@@ -3,10 +3,10 @@ module github.com/Mrs4s/go-cqhttp
go 1.14
require (
- github.com/Mrs4s/MiraiGo v0.0.0-20200928082341-65c1709f5eec
+ github.com/Mrs4s/MiraiGo v0.0.0-20201001034410-f70beb77a307
github.com/fastly/go-utils v0.0.0-20180712184237-d95a45783239 // indirect
github.com/gin-gonic/gin v1.6.3
- github.com/go-playground/validator/v10 v10.3.0 // indirect
+ github.com/go-playground/validator/v10 v10.4.0 // indirect
github.com/gorilla/websocket v1.4.2
github.com/guonaihong/gout v0.1.2
github.com/jehiah/go-strftime v0.0.0-20171201141054-1d33003b3869 // indirect
@@ -18,14 +18,14 @@ require (
github.com/modern-go/reflect2 v1.0.1 // indirect
github.com/pkg/errors v0.9.1 // indirect
github.com/rifflock/lfshook v0.0.0-20180920164130-b9218ef580f5
- github.com/sirupsen/logrus v1.6.0
+ github.com/sirupsen/logrus v1.7.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.1
github.com/xujiajun/nutsdb v0.5.0
github.com/yinghau76/go-ascii-art v0.0.0-20190517192627-e7f465a30189
- golang.org/x/net v0.0.0-20200904194848-62affa334b73 // indirect
- golang.org/x/sys v0.0.0-20200916084744-dbad9cb7cb7a // indirect
+ golang.org/x/net v0.0.0-20200930145003-4acb6c075d10 // indirect
+ golang.org/x/sys v0.0.0-20200930185726-fdedc70b468f // indirect
golang.org/x/time v0.0.0-20200630173020-3af7569d3a1e
gopkg.in/yaml.v2 v2.3.0 // indirect
)
diff --git a/go.sum b/go.sum
index 122ba3e..2de3a13 100644
--- a/go.sum
+++ b/go.sum
@@ -2,6 +2,8 @@ cloud.google.com/go v0.26.0/go.mod h1:aQUYkXzVsufM+DwF1aE+0xfcU+56JwCaLick0ClmMT
github.com/BurntSushi/toml v0.3.1/go.mod h1:xHWCNGjB5oqiDr8zfno3MHue2Ht5sIBksp03qcyfWMU=
github.com/Mrs4s/MiraiGo v0.0.0-20200928082341-65c1709f5eec h1:lzFAr6b1yO6JIzfse0VIsPq71E0KfdsoS3VnyOLurS4=
github.com/Mrs4s/MiraiGo v0.0.0-20200928082341-65c1709f5eec/go.mod h1:cwYPI2uq6nxNbx0nA6YuAKF1V5szSs6FPlGVLQvRUlo=
+github.com/Mrs4s/MiraiGo v0.0.0-20201001034410-f70beb77a307 h1:8euFOKawVBh2k75goSgtvGBgSY3kILnGr+hp9TY2oKY=
+github.com/Mrs4s/MiraiGo v0.0.0-20201001034410-f70beb77a307/go.mod h1:cwYPI2uq6nxNbx0nA6YuAKF1V5szSs6FPlGVLQvRUlo=
github.com/bwmarrin/snowflake v0.3.0 h1:xm67bEhkKh6ij1790JB83OujPR5CzNe8QuQqAgISZN0=
github.com/bwmarrin/snowflake v0.3.0/go.mod h1:NdZxfVWX+oR6y2K0o6qAYv6gIOP9rjG0/E9WsDpxqwE=
github.com/census-instrumentation/opencensus-proto v0.2.1/go.mod h1:f6KPmirojxKA12rnyqOA5BBL4O983OfeGPqjHWSTneU=
@@ -26,6 +28,8 @@ github.com/go-playground/universal-translator v0.17.0/go.mod h1:UkSxE5sNxxRwHyU+
github.com/go-playground/validator/v10 v10.2.0/go.mod h1:uOYAAleCW8F/7oMFd6aG0GOhaH6EGOAJShg8Id5JGkI=
github.com/go-playground/validator/v10 v10.3.0 h1:nZU+7q+yJoFmwvNgv/LnPUkwPal62+b2xXj0AU1Es7o=
github.com/go-playground/validator/v10 v10.3.0/go.mod h1:uOYAAleCW8F/7oMFd6aG0GOhaH6EGOAJShg8Id5JGkI=
+github.com/go-playground/validator/v10 v10.4.0 h1:72qIR/m8ybvL8L5TIyfgrigqkrw7kVYAvjEvpT85l70=
+github.com/go-playground/validator/v10 v10.4.0/go.mod h1:nlOn6nFhuKACm19sB/8EGNn9GlaMV7XkbRSipzJ0Ii4=
github.com/golang/glog v0.0.0-20160126235308-23def4e6c14b/go.mod h1:SBH7ygxi8pfUlaOkMMuAQtPIUF8ecWP5IEl/CR7VP2Q=
github.com/golang/mock v1.1.1/go.mod h1:oTYuIxOrZwtPieC+H1uAHpcLFnEyAGVDL/k47Jfbm0A=
github.com/golang/protobuf v1.2.0/go.mod h1:6lQm79b+lXiMfvg/cZm0SGofjICqVBUtrP5yJMmIC1U=
@@ -54,8 +58,10 @@ github.com/jehiah/go-strftime v0.0.0-20171201141054-1d33003b3869/go.mod h1:cJ6Cj
github.com/jonboulle/clockwork v0.2.0/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/json-iterator/go v1.1.10 h1:Kz6Cvnvv2wGdaG/V8yMvfkmNiXq9Ya2KUv4rouJJr68=
github.com/json-iterator/go v1.1.10/go.mod h1:KdQUCv79m/52Kvf8AW2vK1V8akMuk1QjK/uOdHXbAo4=
github.com/konsorten/go-windows-terminal-sequences v1.0.1/go.mod h1:T0+1ngSBFLxvqU3pZ+m/2kptfBszLMUkC4ZK/EgS/cQ=
+github.com/konsorten/go-windows-terminal-sequences v1.0.3 h1:CE8S1cTafDpPvMhIxNJKvHsGVBgn1xWYf1NbHQhywc8=
github.com/konsorten/go-windows-terminal-sequences v1.0.3/go.mod h1:T0+1ngSBFLxvqU3pZ+m/2kptfBszLMUkC4ZK/EgS/cQ=
github.com/leodido/go-urn v1.1.0/go.mod h1:+cyI34gQWZcE1eQU7NVgKkkzdXDQHr1dBMtdAPozLkw=
github.com/leodido/go-urn v1.2.0 h1:hpXL4XnriNwQ/ABnpepYM/1vCLWNDfUNts8dX3xTG6Y=
@@ -69,8 +75,10 @@ github.com/mattn/go-isatty v0.0.9/go.mod h1:YNRxwqDuOph6SZLI9vUUz6OYw3QyUt7WiY2y
github.com/mattn/go-isatty v0.0.12 h1:wuysRhFDzyxgEmMf5xjvJ2M9dZoWAXNNr5LSBS7uHXY=
github.com/mattn/go-isatty v0.0.12/go.mod h1:cbi8OIDigv2wuxKPP5vlRcQ1OAZbq2CE4Kysco4FUpU=
github.com/modern-go/concurrent v0.0.0-20180228061459-e0a39a4cb421/go.mod h1:6dJC0mAP4ikYIbvyc7fijjWJddQyLn8Ig3JB5CqoB9Q=
+github.com/modern-go/concurrent v0.0.0-20180306012644-bacd9c7ef1dd h1:TRLaZ9cD/w8PVh93nsPXa1VrQ6jlwL5oN8l14QlcNfg=
github.com/modern-go/concurrent v0.0.0-20180306012644-bacd9c7ef1dd/go.mod h1:6dJC0mAP4ikYIbvyc7fijjWJddQyLn8Ig3JB5CqoB9Q=
github.com/modern-go/reflect2 v0.0.0-20180701023420-4b7aa43c6742/go.mod h1:bx2lNnkwVCuqBIxFjflWJWanXIb3RllmbCylyMrvgv0=
+github.com/modern-go/reflect2 v1.0.1 h1:9f412s+6RmYXLWZSEzVVgPGK7C2PphHj5RJrvfx9AWI=
github.com/modern-go/reflect2 v1.0.1/go.mod h1:bx2lNnkwVCuqBIxFjflWJWanXIb3RllmbCylyMrvgv0=
github.com/nfnt/resize v0.0.0-20180221191011-83c6a9932646 h1:zYyBkD/k9seD2A7fsi6Oo2LfFZAehjjQMERAvZLEDnQ=
github.com/nfnt/resize v0.0.0-20180221191011-83c6a9932646/go.mod h1:jpp1/29i3P1S/RLdc7JQKbRpFeM1dOBd8T9ki5s+AY8=
@@ -84,6 +92,8 @@ github.com/rifflock/lfshook v0.0.0-20180920164130-b9218ef580f5/go.mod h1:GEXHk5H
github.com/sirupsen/logrus v1.4.2/go.mod h1:tLMulIdttU9McNUspp0xgXVQah82FyeX6MwdIuYE2rE=
github.com/sirupsen/logrus v1.6.0 h1:UBcNElsrwanuuMsnGSlYmtmgbb23qDR5dG+6X6Oo89I=
github.com/sirupsen/logrus v1.6.0/go.mod h1:7uNnSEd1DgxDLC74fIahvMZmmYsHGZGEOFrfsX/uA88=
+github.com/sirupsen/logrus v1.7.0 h1:ShrD1U9pZB12TX0cVy0DtePoCH97K8EtX+mg7ZARUtM=
+github.com/sirupsen/logrus v1.7.0/go.mod h1:yWOB1SBYBC5VeMP7gHvWumXLIWorT60ONWic61uBYv0=
github.com/stretchr/objx v0.1.0/go.mod h1:HFkY916IF+rwdDfMAkV7OtwuqBVzrE8GR6GFx+wExME=
github.com/stretchr/objx v0.1.1/go.mod h1:HFkY916IF+rwdDfMAkV7OtwuqBVzrE8GR6GFx+wExME=
github.com/stretchr/testify v1.2.2/go.mod h1:a8OnRcib4nhh0OaRAV+Yts87kKdq0PP7pXfy6kDkUVs=
@@ -100,8 +110,12 @@ github.com/tidwall/pretty v1.0.2 h1:Z7S3cePv9Jwm1KwS0513MRaoUe3S01WPbLNV40pwWZU=
github.com/tidwall/pretty v1.0.2/go.mod h1:XNkn88O1ChpSDQmQeStsy+sBenx6DDtFZJxhVysOjyk=
github.com/ugorji/go v1.1.7 h1:/68gy2h+1mWMrwZFeD1kQialdSzAb432dtpeJ42ovdo=
github.com/ugorji/go v1.1.7/go.mod h1:kZn38zHttfInRq0xu/PH0az30d+z6vm202qpg1oXVMw=
+github.com/ugorji/go v1.1.9 h1:SObrQTaSuP8WOv2WNCj8gECiNSJIUvk3Q7N26c96Gws=
+github.com/ugorji/go v1.1.9/go.mod h1:chLrngdsg43geAaeId+nXO57YsDdl5OZqd/QtBiD19g=
github.com/ugorji/go/codec v1.1.7 h1:2SvQaVZ1ouYrrKKwoSk2pzd4A9evlKJb9oTL+OaLUSs=
github.com/ugorji/go/codec v1.1.7/go.mod h1:Ax+UKWsSmolVDwsd+7N3ZtXu+yMGCf907BLYF3GoBXY=
+github.com/ugorji/go/codec v1.1.9 h1:J/7hhpkQwgypRNvaeh/T5gzJ2gEI/l8S3qyRrdEa1fA=
+github.com/ugorji/go/codec v1.1.9/go.mod h1:+SWgpdqOgdW5sBaiDfkHilQ1SxQ1hBkq/R+kHfL7Suo=
github.com/xujiajun/gorouter v1.2.0/go.mod h1:yJrIta+bTNpBM/2UT8hLOaEAFckO+m/qmR3luMIQygM=
github.com/xujiajun/mmap-go v1.0.1 h1:7Se7ss1fLPPRW+ePgqGpCkfGIZzJV6JPq9Wq9iv/WHc=
github.com/xujiajun/mmap-go v1.0.1/go.mod h1:CNN6Sw4SL69Sui00p0zEzcZKbt+5HtEnYUsc6BKKRMg=
@@ -112,7 +126,10 @@ github.com/xujiajun/utils v0.0.0-20190123093513-8bf096c4f53b/go.mod h1:AZd87GYJl
github.com/yinghau76/go-ascii-art v0.0.0-20190517192627-e7f465a30189 h1:4UJw9if55Fu3HOwbfcaQlJ27p3oeJU2JZqoeT3ITJQk=
github.com/yinghau76/go-ascii-art v0.0.0-20190517192627-e7f465a30189/go.mod h1:rIrm5geMiBhPQkdfUm8gDFi/WiHneOp1i9KjmJqc+9I=
golang.org/x/crypto v0.0.0-20190308221718-c2843e01d9a2/go.mod h1:djNgcEr1/C05ACkg1iLfiJU5Ep61QUkGW8qpdssI0+w=
+golang.org/x/crypto v0.0.0-20200622213623-75b288015ac9 h1:psW17arqaxU48Z5kZ0CQnkZWQJsqcURM6tKiBApRjXI=
golang.org/x/crypto v0.0.0-20200622213623-75b288015ac9/go.mod h1:LzIPMQfyMNhhGPhUkYOs5KpL4U8rLKemX1yGLhDgUto=
+golang.org/x/crypto v0.0.0-20200930160638-afb6bcd081ae h1:duLSQW+DZ5MsXKX7kc4rXlq6/mmxz4G6ewJuBPlhRe0=
+golang.org/x/crypto v0.0.0-20200930160638-afb6bcd081ae/go.mod h1:LzIPMQfyMNhhGPhUkYOs5KpL4U8rLKemX1yGLhDgUto=
golang.org/x/exp v0.0.0-20190121172915-509febef88a4/go.mod h1:CJ0aWSM057203Lf6IL+f9T1iT9GByDxfZKAQTCR3kQA=
golang.org/x/lint v0.0.0-20181026193005-c67002cb31c3/go.mod h1:UVdnD1Gm6xHRNCYTkRU2/jEulfH38KcIWyp/GAMgvoE=
golang.org/x/lint v0.0.0-20190227174305-5b3e6a55c961/go.mod h1:wehouNa3lNwaWXcvxsM5YxQ5yQlVC4a0KAMCusXpPoU=
@@ -125,6 +142,8 @@ golang.org/x/net v0.0.0-20190404232315-eb5bcb51f2a3/go.mod h1:t9HGtf8HONx5eT2rtn
golang.org/x/net v0.0.0-20200114155413-6afb5195e5aa/go.mod h1:z5CRVTTTmAJ677TzLLGU+0bjPO0LkuOLi4/5GtJWs/s=
golang.org/x/net v0.0.0-20200904194848-62affa334b73 h1:MXfv8rhZWmFeqX3GNZRsd6vOLoaCHjYEX3qkRo3YBUA=
golang.org/x/net v0.0.0-20200904194848-62affa334b73/go.mod h1:/O7V0waA8r7cgGh81Ro3o1hOxt32SMVPicZroKQ2sZA=
+golang.org/x/net v0.0.0-20200930145003-4acb6c075d10 h1:YfxMZzv3PjGonQYNUaeU2+DhAdqOxerQ30JFB6WgAXo=
+golang.org/x/net v0.0.0-20200930145003-4acb6c075d10/go.mod h1:/O7V0waA8r7cgGh81Ro3o1hOxt32SMVPicZroKQ2sZA=
golang.org/x/oauth2 v0.0.0-20180821212333-d2e6202438be/go.mod h1:N/0e6XlmueqKjAGxoOufVs8QHGRruUQn6yWY3a++T0U=
golang.org/x/sync v0.0.0-20180314180146-1d60e4601c6f/go.mod h1:RxMgew5VJxzue5/jJTE5uejpjVlOe/izrB70Jof72aM=
golang.org/x/sync v0.0.0-20181108010431-42b317875d0f/go.mod h1:RxMgew5VJxzue5/jJTE5uejpjVlOe/izrB70Jof72aM=
@@ -135,10 +154,13 @@ golang.org/x/sys v0.0.0-20190215142949-d0b11bdaac8a/go.mod h1:STP8DvDyc/dI5b8T5h
golang.org/x/sys v0.0.0-20190412213103-97732733099d/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs=
golang.org/x/sys v0.0.0-20190422165155-953cdadca894/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs=
golang.org/x/sys v0.0.0-20190813064441-fde4db37ae7a/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs=
+golang.org/x/sys v0.0.0-20191026070338-33540a1f6037/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs=
golang.org/x/sys v0.0.0-20200116001909-b77594299b42/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs=
golang.org/x/sys v0.0.0-20200323222414-85ca7c5b95cd/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs=
golang.org/x/sys v0.0.0-20200916084744-dbad9cb7cb7a h1:chkwkn8HYWVtTE5DCQNKYlkyptadXYY0+PuyaVdyMo4=
golang.org/x/sys v0.0.0-20200916084744-dbad9cb7cb7a/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs=
+golang.org/x/sys v0.0.0-20200930185726-fdedc70b468f h1:+Nyd8tzPX9R7BWHguqsrbFdRx3WQ/1ib8I44HXV5yTA=
+golang.org/x/sys v0.0.0-20200930185726-fdedc70b468f/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs=
golang.org/x/text v0.3.0/go.mod h1:NqM8EUOU14njkJ3fqMW+pc6Ldnwhi/IjpwHt7yyuwOQ=
golang.org/x/text v0.3.2/go.mod h1:bEr9sfX3Q8Zfm5fL9x+3itogRgK3+ptLWKqgva+5dAk=
golang.org/x/time v0.0.0-20200630173020-3af7569d3a1e h1:EHBhcS0mlXEAVwNyO2dLfjToGsyY4j24pTs2ScHnX7s=
From 5c1ad4ad8e295372dc47395cb8c1c6b30ec3d2e0 Mon Sep 17 00:00:00 2001
From: fkx4-p <42882359+fkx4-p@users.noreply.github.com>
Date: Thu, 1 Oct 2020 19:41:14 +0800
Subject: [PATCH 045/367] Update quick_start.md
---
docs/quick_start.md | 122 +++++++++++++++++++++++++++++++++++++++++++-
1 file changed, 121 insertions(+), 1 deletion(-)
diff --git a/docs/quick_start.md b/docs/quick_start.md
index a217299..cc56ffc 100644
--- a/docs/quick_start.md
+++ b/docs/quick_start.md
@@ -1,3 +1,123 @@
# 开始
-欢迎来到 go-cqhttp 文档 目前还在咕
\ No newline at end of file
+欢迎来到 go-cqhttp 文档 目前还在咕
+
+# 基础教程
+## 下载
+从[release](https://github.com/Mrs4s/go-cqhttp/releases)界面下载最新版本的go-cqhttp
+
+- Windows下32位文件为 `go-cqhttp-v*-windows-386.zip`
+- Windows下64位文件为 `go-cqhttp-v*-windows-amd64.zip`
+- Windows下arm用(如使用高通CPU的笔记本)文件为 `go-cqhttp-v*-linux-arm.zip`
+- Linux下32位文件为 `go-cqhttp-v*-linux-386.tar.gz`
+- Linux下64位文件为 `go-cqhttp-v*-linux-amd64.tar.gz`
+- Linux下arm用(如树莓派)文件为 `go-cqhttp-v*-linux-arm.tar.gz`
+- MD5文件为 `*.md5` ,用于校验文件完整性
+- 如果没有你所使用的系统版本或者希望自己构建,请移步[进阶指南-如何自己构建](#如何自己构建)
+
+## 解压
+
+- Windows下请使用自己熟悉的解压软件自行解压
+- Linux下在命令行中输入 `tar -xzvf [文件名]`
+
+## 使用
+
+### Windows
+
+#### 标准方法
+
+1. 双击`go-cqhttp.exe`此时将提示
+```
+[WARNING]: 尝试加载配置文件 config.json 失败: 文件不存在
+[INFO]: 默认配置文件已生成,请编辑 config.json 后重启程序.
+```
+2. 参照[config.md](https://github.com/Mrs4s/go-cqhttp/blob/master/docs/config.md)和你所用到的插件的 `README` 填入参数
+3. 再次双击`go-cqhttp.exe`
+```
+[INFO]: 登录成功 欢迎使用: balabala
+```
+
+如出现需要认证的信息,请自行认证设备。
+
+此时,基础配置完成
+
+#### 懒人法
+
+1. [下载包含Windows.bat的zip](https://github.com/fkx4-p/go-cqhttp-lazy/archive/master.zip)
+2. 解压
+3. 将`Windows.bat`复制/剪切到**go-cqhttp**文件夹
+4. 双击运行
+
+效果如下
+
+```
+QQ account:
+[QQ账号]
+QQ password:
+[QQ密码]
+enable http?(Y/n)
+[是否开启http(y/n),默认开启]
+enable ws?(Y/n)
+[是否开启websocket(y/n),默认开启]
+请按任意键继续. . .
+```
+
+5. 双击`go-cqhttp.exe`
+```
+[INFO]: 登录成功 欢迎使用: balabala
+```
+
+如出现需要认证的信息,请自行认证设备。
+
+此时,基础配置完成
+
+### Linux
+
+#### 标准方法
+
+1. 打开一个命令行/ssh
+2. `cd`到解压目录
+3. 输入 `./go-cqhttp`,`Enter`运行 ,此时将提示
+```
+[WARNING]: 尝试加载配置文件 config.json 失败: 文件不存在
+[INFO]: 默认配置文件已生成,请编辑 config.json 后重启程序.
+```
+
+4. 参照[config.md](https://github.com/Mrs4s/go-cqhttp/blob/master/docs/config.md)和你所用到的插件的 `README` 填入参数
+5. 再次输入 `./go-cqhttp`,`Enter`运行
+```
+[INFO]: 登录成功 欢迎使用: balabala
+```
+
+如出现需要认证的信息,请自行认证设备。
+
+此时,基础配置完成
+
+#### 懒人法
+
+暂时咕咕咕了
+
+## 验证http是否成功配置
+
+此时,如果在本地开启的服务器,可以在浏览器输入`http://127.0.0.1:5700/send_private_msg?user_id=[接收者qq号]&message=[发送的信息]`来发送一条测试信息
+
+如果出现`{"data":{"message_id":balabala},"retcode":0,"status":"ok"}`则证明已经成功配置HTTP
+
+# 进阶指南
+
+## 如何自己构建
+
+1. [下载源码](https://github.com/Mrs4s/go-cqhttp/archive/master.zip)并解压
+
+2. [下载golang binary release](https://golang.google.cn/dl/)并安装或者[自己构建golang](https://golang.google.cn/doc/install/source)
+
+3. 在`cmd`或Linux命令行中,`cd`到目录中
+
+4. 输入`go build main.go`,`Enter`运行
+
+*注:可以使用*`go env -w GOPROXY=https://goproxy.cn,direct`*来加速国内依赖安装速度*
+
+*注:此时构建后的文件名为*`main`(Linux)或`main.exe`(Windows)
+
+
+
From e59d0a1bfd49557ace53c8c799486ff18000d02f Mon Sep 17 00:00:00 2001
From: fkx4-p <42882359+fkx4-p@users.noreply.github.com>
Date: Thu, 1 Oct 2020 19:54:54 +0800
Subject: [PATCH 046/367] Update quick_start.md
---
docs/quick_start.md | 2 +-
1 file changed, 1 insertion(+), 1 deletion(-)
diff --git a/docs/quick_start.md b/docs/quick_start.md
index cc56ffc..273c4d3 100644
--- a/docs/quick_start.md
+++ b/docs/quick_start.md
@@ -8,7 +8,7 @@
- Windows下32位文件为 `go-cqhttp-v*-windows-386.zip`
- Windows下64位文件为 `go-cqhttp-v*-windows-amd64.zip`
-- Windows下arm用(如使用高通CPU的笔记本)文件为 `go-cqhttp-v*-linux-arm.zip`
+- Windows下arm用(如使用高通CPU的笔记本)文件为 `go-cqhttp-v*-windows-arm.zip`
- Linux下32位文件为 `go-cqhttp-v*-linux-386.tar.gz`
- Linux下64位文件为 `go-cqhttp-v*-linux-amd64.tar.gz`
- Linux下arm用(如树莓派)文件为 `go-cqhttp-v*-linux-arm.tar.gz`
From 93f3786059ef294b936627ee49590866477bc195 Mon Sep 17 00:00:00 2001
From: fkx4-p <42882359+fkx4-p@users.noreply.github.com>
Date: Thu, 1 Oct 2020 20:25:09 +0800
Subject: [PATCH 047/367] Update quick_start.md
---
docs/quick_start.md | 4 ++--
1 file changed, 2 insertions(+), 2 deletions(-)
diff --git a/docs/quick_start.md b/docs/quick_start.md
index 273c4d3..d95c2b2 100644
--- a/docs/quick_start.md
+++ b/docs/quick_start.md
@@ -107,13 +107,13 @@ enable ws?(Y/n)
## 如何自己构建
-1. [下载源码](https://github.com/Mrs4s/go-cqhttp/archive/master.zip)并解压
+1. [下载源码](https://github.com/Mrs4s/go-cqhttp/archive/master.zip)并解压 || 使用`git clone https://github.com/Mrs4s/go-cqhttp.git`来拉取
2. [下载golang binary release](https://golang.google.cn/dl/)并安装或者[自己构建golang](https://golang.google.cn/doc/install/source)
3. 在`cmd`或Linux命令行中,`cd`到目录中
-4. 输入`go build main.go`,`Enter`运行
+4. 输入`go build -ldflags "-s -w -extldflags '-static'"`,`Enter`运行
*注:可以使用*`go env -w GOPROXY=https://goproxy.cn,direct`*来加速国内依赖安装速度*
From c2fae1e6f54fbd890c55a4e3e243b9776808cbc3 Mon Sep 17 00:00:00 2001
From: Mrs4s <1844812067@qq.com>
Date: Fri, 2 Oct 2020 16:42:38 +0800
Subject: [PATCH 048/367] update MiraiGo. fix #327 #258
---
go.mod | 2 +-
go.sum | 25 ++-----------------------
2 files changed, 3 insertions(+), 24 deletions(-)
diff --git a/go.mod b/go.mod
index e514a4c..e9d9f9c 100644
--- a/go.mod
+++ b/go.mod
@@ -3,7 +3,7 @@ module github.com/Mrs4s/go-cqhttp
go 1.14
require (
- github.com/Mrs4s/MiraiGo v0.0.0-20201001034410-f70beb77a307
+ github.com/Mrs4s/MiraiGo v0.0.0-20201002083653-383954dc11e2
github.com/fastly/go-utils v0.0.0-20180712184237-d95a45783239 // indirect
github.com/gin-gonic/gin v1.6.3
github.com/go-playground/validator/v10 v10.4.0 // indirect
diff --git a/go.sum b/go.sum
index 2de3a13..a5a7bac 100644
--- a/go.sum
+++ b/go.sum
@@ -1,9 +1,7 @@
cloud.google.com/go v0.26.0/go.mod h1:aQUYkXzVsufM+DwF1aE+0xfcU+56JwCaLick0ClmMTw=
github.com/BurntSushi/toml v0.3.1/go.mod h1:xHWCNGjB5oqiDr8zfno3MHue2Ht5sIBksp03qcyfWMU=
-github.com/Mrs4s/MiraiGo v0.0.0-20200928082341-65c1709f5eec h1:lzFAr6b1yO6JIzfse0VIsPq71E0KfdsoS3VnyOLurS4=
-github.com/Mrs4s/MiraiGo v0.0.0-20200928082341-65c1709f5eec/go.mod h1:cwYPI2uq6nxNbx0nA6YuAKF1V5szSs6FPlGVLQvRUlo=
-github.com/Mrs4s/MiraiGo v0.0.0-20201001034410-f70beb77a307 h1:8euFOKawVBh2k75goSgtvGBgSY3kILnGr+hp9TY2oKY=
-github.com/Mrs4s/MiraiGo v0.0.0-20201001034410-f70beb77a307/go.mod h1:cwYPI2uq6nxNbx0nA6YuAKF1V5szSs6FPlGVLQvRUlo=
+github.com/Mrs4s/MiraiGo v0.0.0-20201002083653-383954dc11e2 h1:Pjs3pQKXDxvaWf3zTLmedRl+F1gvcJl+bp3XaYFg4Yw=
+github.com/Mrs4s/MiraiGo v0.0.0-20201002083653-383954dc11e2/go.mod h1:cwYPI2uq6nxNbx0nA6YuAKF1V5szSs6FPlGVLQvRUlo=
github.com/bwmarrin/snowflake v0.3.0 h1:xm67bEhkKh6ij1790JB83OujPR5CzNe8QuQqAgISZN0=
github.com/bwmarrin/snowflake v0.3.0/go.mod h1:NdZxfVWX+oR6y2K0o6qAYv6gIOP9rjG0/E9WsDpxqwE=
github.com/census-instrumentation/opencensus-proto v0.2.1/go.mod h1:f6KPmirojxKA12rnyqOA5BBL4O983OfeGPqjHWSTneU=
@@ -26,8 +24,6 @@ github.com/go-playground/universal-translator v0.16.0/go.mod h1:1AnU7NaIRDWWzGEK
github.com/go-playground/universal-translator v0.17.0 h1:icxd5fm+REJzpZx7ZfpaD876Lmtgy7VtROAbHHXk8no=
github.com/go-playground/universal-translator v0.17.0/go.mod h1:UkSxE5sNxxRwHyU+Scu5vgOQjsIJAF8j9muTVoKLVtA=
github.com/go-playground/validator/v10 v10.2.0/go.mod h1:uOYAAleCW8F/7oMFd6aG0GOhaH6EGOAJShg8Id5JGkI=
-github.com/go-playground/validator/v10 v10.3.0 h1:nZU+7q+yJoFmwvNgv/LnPUkwPal62+b2xXj0AU1Es7o=
-github.com/go-playground/validator/v10 v10.3.0/go.mod h1:uOYAAleCW8F/7oMFd6aG0GOhaH6EGOAJShg8Id5JGkI=
github.com/go-playground/validator/v10 v10.4.0 h1:72qIR/m8ybvL8L5TIyfgrigqkrw7kVYAvjEvpT85l70=
github.com/go-playground/validator/v10 v10.4.0/go.mod h1:nlOn6nFhuKACm19sB/8EGNn9GlaMV7XkbRSipzJ0Ii4=
github.com/golang/glog v0.0.0-20160126235308-23def4e6c14b/go.mod h1:SBH7ygxi8pfUlaOkMMuAQtPIUF8ecWP5IEl/CR7VP2Q=
@@ -58,11 +54,8 @@ github.com/jehiah/go-strftime v0.0.0-20171201141054-1d33003b3869/go.mod h1:cJ6Cj
github.com/jonboulle/clockwork v0.2.0/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/json-iterator/go v1.1.10 h1:Kz6Cvnvv2wGdaG/V8yMvfkmNiXq9Ya2KUv4rouJJr68=
github.com/json-iterator/go v1.1.10/go.mod h1:KdQUCv79m/52Kvf8AW2vK1V8akMuk1QjK/uOdHXbAo4=
github.com/konsorten/go-windows-terminal-sequences v1.0.1/go.mod h1:T0+1ngSBFLxvqU3pZ+m/2kptfBszLMUkC4ZK/EgS/cQ=
-github.com/konsorten/go-windows-terminal-sequences v1.0.3 h1:CE8S1cTafDpPvMhIxNJKvHsGVBgn1xWYf1NbHQhywc8=
-github.com/konsorten/go-windows-terminal-sequences v1.0.3/go.mod h1:T0+1ngSBFLxvqU3pZ+m/2kptfBszLMUkC4ZK/EgS/cQ=
github.com/leodido/go-urn v1.1.0/go.mod h1:+cyI34gQWZcE1eQU7NVgKkkzdXDQHr1dBMtdAPozLkw=
github.com/leodido/go-urn v1.2.0 h1:hpXL4XnriNwQ/ABnpepYM/1vCLWNDfUNts8dX3xTG6Y=
github.com/leodido/go-urn v1.2.0/go.mod h1:+8+nEpDfqqsY+g338gtMEUOtuK+4dEMhiQEgxpxOKII=
@@ -75,10 +68,8 @@ github.com/mattn/go-isatty v0.0.9/go.mod h1:YNRxwqDuOph6SZLI9vUUz6OYw3QyUt7WiY2y
github.com/mattn/go-isatty v0.0.12 h1:wuysRhFDzyxgEmMf5xjvJ2M9dZoWAXNNr5LSBS7uHXY=
github.com/mattn/go-isatty v0.0.12/go.mod h1:cbi8OIDigv2wuxKPP5vlRcQ1OAZbq2CE4Kysco4FUpU=
github.com/modern-go/concurrent v0.0.0-20180228061459-e0a39a4cb421/go.mod h1:6dJC0mAP4ikYIbvyc7fijjWJddQyLn8Ig3JB5CqoB9Q=
-github.com/modern-go/concurrent v0.0.0-20180306012644-bacd9c7ef1dd h1:TRLaZ9cD/w8PVh93nsPXa1VrQ6jlwL5oN8l14QlcNfg=
github.com/modern-go/concurrent v0.0.0-20180306012644-bacd9c7ef1dd/go.mod h1:6dJC0mAP4ikYIbvyc7fijjWJddQyLn8Ig3JB5CqoB9Q=
github.com/modern-go/reflect2 v0.0.0-20180701023420-4b7aa43c6742/go.mod h1:bx2lNnkwVCuqBIxFjflWJWanXIb3RllmbCylyMrvgv0=
-github.com/modern-go/reflect2 v1.0.1 h1:9f412s+6RmYXLWZSEzVVgPGK7C2PphHj5RJrvfx9AWI=
github.com/modern-go/reflect2 v1.0.1/go.mod h1:bx2lNnkwVCuqBIxFjflWJWanXIb3RllmbCylyMrvgv0=
github.com/nfnt/resize v0.0.0-20180221191011-83c6a9932646 h1:zYyBkD/k9seD2A7fsi6Oo2LfFZAehjjQMERAvZLEDnQ=
github.com/nfnt/resize v0.0.0-20180221191011-83c6a9932646/go.mod h1:jpp1/29i3P1S/RLdc7JQKbRpFeM1dOBd8T9ki5s+AY8=
@@ -90,8 +81,6 @@ github.com/prometheus/client_model v0.0.0-20190812154241-14fe0d1b01d4/go.mod h1:
github.com/rifflock/lfshook v0.0.0-20180920164130-b9218ef580f5 h1:mZHayPoR0lNmnHyvtYjDeq0zlVHn9K/ZXoy17ylucdo=
github.com/rifflock/lfshook v0.0.0-20180920164130-b9218ef580f5/go.mod h1:GEXHk5HgEKCvEIIrSpFI3ozzG5xOKA2DVlEX/gGnewM=
github.com/sirupsen/logrus v1.4.2/go.mod h1:tLMulIdttU9McNUspp0xgXVQah82FyeX6MwdIuYE2rE=
-github.com/sirupsen/logrus v1.6.0 h1:UBcNElsrwanuuMsnGSlYmtmgbb23qDR5dG+6X6Oo89I=
-github.com/sirupsen/logrus v1.6.0/go.mod h1:7uNnSEd1DgxDLC74fIahvMZmmYsHGZGEOFrfsX/uA88=
github.com/sirupsen/logrus v1.7.0 h1:ShrD1U9pZB12TX0cVy0DtePoCH97K8EtX+mg7ZARUtM=
github.com/sirupsen/logrus v1.7.0/go.mod h1:yWOB1SBYBC5VeMP7gHvWumXLIWorT60ONWic61uBYv0=
github.com/stretchr/objx v0.1.0/go.mod h1:HFkY916IF+rwdDfMAkV7OtwuqBVzrE8GR6GFx+wExME=
@@ -110,12 +99,8 @@ github.com/tidwall/pretty v1.0.2 h1:Z7S3cePv9Jwm1KwS0513MRaoUe3S01WPbLNV40pwWZU=
github.com/tidwall/pretty v1.0.2/go.mod h1:XNkn88O1ChpSDQmQeStsy+sBenx6DDtFZJxhVysOjyk=
github.com/ugorji/go v1.1.7 h1:/68gy2h+1mWMrwZFeD1kQialdSzAb432dtpeJ42ovdo=
github.com/ugorji/go v1.1.7/go.mod h1:kZn38zHttfInRq0xu/PH0az30d+z6vm202qpg1oXVMw=
-github.com/ugorji/go v1.1.9 h1:SObrQTaSuP8WOv2WNCj8gECiNSJIUvk3Q7N26c96Gws=
-github.com/ugorji/go v1.1.9/go.mod h1:chLrngdsg43geAaeId+nXO57YsDdl5OZqd/QtBiD19g=
github.com/ugorji/go/codec v1.1.7 h1:2SvQaVZ1ouYrrKKwoSk2pzd4A9evlKJb9oTL+OaLUSs=
github.com/ugorji/go/codec v1.1.7/go.mod h1:Ax+UKWsSmolVDwsd+7N3ZtXu+yMGCf907BLYF3GoBXY=
-github.com/ugorji/go/codec v1.1.9 h1:J/7hhpkQwgypRNvaeh/T5gzJ2gEI/l8S3qyRrdEa1fA=
-github.com/ugorji/go/codec v1.1.9/go.mod h1:+SWgpdqOgdW5sBaiDfkHilQ1SxQ1hBkq/R+kHfL7Suo=
github.com/xujiajun/gorouter v1.2.0/go.mod h1:yJrIta+bTNpBM/2UT8hLOaEAFckO+m/qmR3luMIQygM=
github.com/xujiajun/mmap-go v1.0.1 h1:7Se7ss1fLPPRW+ePgqGpCkfGIZzJV6JPq9Wq9iv/WHc=
github.com/xujiajun/mmap-go v1.0.1/go.mod h1:CNN6Sw4SL69Sui00p0zEzcZKbt+5HtEnYUsc6BKKRMg=
@@ -128,8 +113,6 @@ github.com/yinghau76/go-ascii-art v0.0.0-20190517192627-e7f465a30189/go.mod h1:r
golang.org/x/crypto v0.0.0-20190308221718-c2843e01d9a2/go.mod h1:djNgcEr1/C05ACkg1iLfiJU5Ep61QUkGW8qpdssI0+w=
golang.org/x/crypto v0.0.0-20200622213623-75b288015ac9 h1:psW17arqaxU48Z5kZ0CQnkZWQJsqcURM6tKiBApRjXI=
golang.org/x/crypto v0.0.0-20200622213623-75b288015ac9/go.mod h1:LzIPMQfyMNhhGPhUkYOs5KpL4U8rLKemX1yGLhDgUto=
-golang.org/x/crypto v0.0.0-20200930160638-afb6bcd081ae h1:duLSQW+DZ5MsXKX7kc4rXlq6/mmxz4G6ewJuBPlhRe0=
-golang.org/x/crypto v0.0.0-20200930160638-afb6bcd081ae/go.mod h1:LzIPMQfyMNhhGPhUkYOs5KpL4U8rLKemX1yGLhDgUto=
golang.org/x/exp v0.0.0-20190121172915-509febef88a4/go.mod h1:CJ0aWSM057203Lf6IL+f9T1iT9GByDxfZKAQTCR3kQA=
golang.org/x/lint v0.0.0-20181026193005-c67002cb31c3/go.mod h1:UVdnD1Gm6xHRNCYTkRU2/jEulfH38KcIWyp/GAMgvoE=
golang.org/x/lint v0.0.0-20190227174305-5b3e6a55c961/go.mod h1:wehouNa3lNwaWXcvxsM5YxQ5yQlVC4a0KAMCusXpPoU=
@@ -140,8 +123,6 @@ golang.org/x/net v0.0.0-20190213061140-3a22650c66bd/go.mod h1:mL1N/T3taQHkDXs73r
golang.org/x/net v0.0.0-20190311183353-d8887717615a/go.mod h1:t9HGtf8HONx5eT2rtn7q6eTqICYqUVnKs3thJo3Qplg=
golang.org/x/net v0.0.0-20190404232315-eb5bcb51f2a3/go.mod h1:t9HGtf8HONx5eT2rtn7q6eTqICYqUVnKs3thJo3Qplg=
golang.org/x/net v0.0.0-20200114155413-6afb5195e5aa/go.mod h1:z5CRVTTTmAJ677TzLLGU+0bjPO0LkuOLi4/5GtJWs/s=
-golang.org/x/net v0.0.0-20200904194848-62affa334b73 h1:MXfv8rhZWmFeqX3GNZRsd6vOLoaCHjYEX3qkRo3YBUA=
-golang.org/x/net v0.0.0-20200904194848-62affa334b73/go.mod h1:/O7V0waA8r7cgGh81Ro3o1hOxt32SMVPicZroKQ2sZA=
golang.org/x/net v0.0.0-20200930145003-4acb6c075d10 h1:YfxMZzv3PjGonQYNUaeU2+DhAdqOxerQ30JFB6WgAXo=
golang.org/x/net v0.0.0-20200930145003-4acb6c075d10/go.mod h1:/O7V0waA8r7cgGh81Ro3o1hOxt32SMVPicZroKQ2sZA=
golang.org/x/oauth2 v0.0.0-20180821212333-d2e6202438be/go.mod h1:N/0e6XlmueqKjAGxoOufVs8QHGRruUQn6yWY3a++T0U=
@@ -157,8 +138,6 @@ golang.org/x/sys v0.0.0-20190813064441-fde4db37ae7a/go.mod h1:h1NjWce9XRLGQEsW7w
golang.org/x/sys v0.0.0-20191026070338-33540a1f6037/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs=
golang.org/x/sys v0.0.0-20200116001909-b77594299b42/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs=
golang.org/x/sys v0.0.0-20200323222414-85ca7c5b95cd/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs=
-golang.org/x/sys v0.0.0-20200916084744-dbad9cb7cb7a h1:chkwkn8HYWVtTE5DCQNKYlkyptadXYY0+PuyaVdyMo4=
-golang.org/x/sys v0.0.0-20200916084744-dbad9cb7cb7a/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs=
golang.org/x/sys v0.0.0-20200930185726-fdedc70b468f h1:+Nyd8tzPX9R7BWHguqsrbFdRx3WQ/1ib8I44HXV5yTA=
golang.org/x/sys v0.0.0-20200930185726-fdedc70b468f/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs=
golang.org/x/text v0.3.0/go.mod h1:NqM8EUOU14njkJ3fqMW+pc6Ldnwhi/IjpwHt7yyuwOQ=
From d70e5d91b3e6795eb82b113418f7fcb66c467a9e Mon Sep 17 00:00:00 2001
From: Mrs4s <1844812067@qq.com>
Date: Fri, 2 Oct 2020 17:42:15 +0800
Subject: [PATCH 049/367] update config.
---
global/config.go | 2 +-
go.mod | 2 +-
go.sum | 2 ++
3 files changed, 4 insertions(+), 2 deletions(-)
diff --git a/global/config.go b/global/config.go
index 31ed776..dee9282 100644
--- a/global/config.go
+++ b/global/config.go
@@ -100,7 +100,7 @@ func DefaultConfig() *JsonConfig {
BucketSize: 1,
},
PostMessageFormat: "string",
- ForceFragmented: true,
+ ForceFragmented: false,
HttpConfig: &GoCQHttpConfig{
Enabled: true,
Host: "0.0.0.0",
diff --git a/go.mod b/go.mod
index e9d9f9c..4c72aa5 100644
--- a/go.mod
+++ b/go.mod
@@ -3,7 +3,7 @@ module github.com/Mrs4s/go-cqhttp
go 1.14
require (
- github.com/Mrs4s/MiraiGo v0.0.0-20201002083653-383954dc11e2
+ github.com/Mrs4s/MiraiGo v0.0.0-20201002092940-afe4132a38d5
github.com/fastly/go-utils v0.0.0-20180712184237-d95a45783239 // indirect
github.com/gin-gonic/gin v1.6.3
github.com/go-playground/validator/v10 v10.4.0 // indirect
diff --git a/go.sum b/go.sum
index a5a7bac..a183748 100644
--- a/go.sum
+++ b/go.sum
@@ -2,6 +2,8 @@ cloud.google.com/go v0.26.0/go.mod h1:aQUYkXzVsufM+DwF1aE+0xfcU+56JwCaLick0ClmMT
github.com/BurntSushi/toml v0.3.1/go.mod h1:xHWCNGjB5oqiDr8zfno3MHue2Ht5sIBksp03qcyfWMU=
github.com/Mrs4s/MiraiGo v0.0.0-20201002083653-383954dc11e2 h1:Pjs3pQKXDxvaWf3zTLmedRl+F1gvcJl+bp3XaYFg4Yw=
github.com/Mrs4s/MiraiGo v0.0.0-20201002083653-383954dc11e2/go.mod h1:cwYPI2uq6nxNbx0nA6YuAKF1V5szSs6FPlGVLQvRUlo=
+github.com/Mrs4s/MiraiGo v0.0.0-20201002092940-afe4132a38d5 h1:NVXpGL7tssdjYBAsPRvCIL8f8V9e8n9YO8sSsOwdy44=
+github.com/Mrs4s/MiraiGo v0.0.0-20201002092940-afe4132a38d5/go.mod h1:cwYPI2uq6nxNbx0nA6YuAKF1V5szSs6FPlGVLQvRUlo=
github.com/bwmarrin/snowflake v0.3.0 h1:xm67bEhkKh6ij1790JB83OujPR5CzNe8QuQqAgISZN0=
github.com/bwmarrin/snowflake v0.3.0/go.mod h1:NdZxfVWX+oR6y2K0o6qAYv6gIOP9rjG0/E9WsDpxqwE=
github.com/census-instrumentation/opencensus-proto v0.2.1/go.mod h1:f6KPmirojxKA12rnyqOA5BBL4O983OfeGPqjHWSTneU=
From 4c8ae2f08b3a41e38818dba3e556661b56c043fe Mon Sep 17 00:00:00 2001
From: Mrs4s <1844812067@qq.com>
Date: Fri, 2 Oct 2020 17:46:02 +0800
Subject: [PATCH 050/367] fix #239
---
server/http.go | 4 +++-
1 file changed, 3 insertions(+), 1 deletion(-)
diff --git a/server/http.go b/server/http.go
index 5d61c76..25c4a70 100644
--- a/server/http.go
+++ b/server/http.go
@@ -118,7 +118,9 @@ func (c *httpClient) onBotPushEvent(m coolq.MSG) {
h["X-Signature"] = "sha1=" + hex.EncodeToString(mac.Sum(nil))
}
return h
- }()).SetTimeout(time.Second * time.Duration(c.timeout)).Do()
+ }()).SetTimeout(time.Second * time.Duration(c.timeout)).F().Retry().Attempt(5).
+ WaitTime(time.Millisecond * 500).MaxWaitTime(time.Second * 5).
+ Do()
if err != nil {
log.Warnf("上报Event数据 %v 到 %v 失败: %v", m.ToJson(), c.addr, err)
return
From bbf20253500caef2c9d64d0b626c16990b65154d Mon Sep 17 00:00:00 2001
From: wdvxdr
Date: Fri, 2 Oct 2020 23:41:02 +0800
Subject: [PATCH 051/367] feature support .get_word_slices
---
coolq/api.go | 11 +++++++++++
coolq/cqcode.go | 4 ++--
docs/cqhttp.md | 16 +++++++++++++++-
global/net.go | 1 -
server/http.go | 8 ++++++++
server/websocket.go | 3 +++
6 files changed, 39 insertions(+), 4 deletions(-)
diff --git a/coolq/api.go b/coolq/api.go
index eaea5fa..50ab320 100644
--- a/coolq/api.go
+++ b/coolq/api.go
@@ -102,6 +102,17 @@ func (bot *CQBot) CQGetGroupMemberInfo(groupId, userId int64) MSG {
return OK(convertGroupMemberInfo(groupId, member))
}
+func (bot *CQBot) CQGetWordSlices(content string) MSG {
+ slices, err := bot.Client.GetWordSegmentation(content)
+ if err != nil {
+ return Failed(100)
+ }
+ for i := 0; i < len(slices); i++ {
+ slices[i] = strings.ReplaceAll(slices[i], "\u0000", "")
+ }
+ return OK(MSG{"slices": slices})
+}
+
// https://cqhttp.cc/docs/4.15/#/API?id=send_group_msg-%E5%8F%91%E9%80%81%E7%BE%A4%E6%B6%88%E6%81%AF
func (bot *CQBot) CQSendGroupMessage(groupId int64, i interface{}, autoEscape bool) MSG {
var str string
diff --git a/coolq/cqcode.go b/coolq/cqcode.go
index 060fcbb..1a4790f 100644
--- a/coolq/cqcode.go
+++ b/coolq/cqcode.go
@@ -361,9 +361,9 @@ func (bot *CQBot) ToElement(t string, d map[string]string, group bool) (message.
t, _ := strconv.ParseInt(d["qq"], 10, 64)
id, _ := strconv.Atoi(d["id"])
if id < 0 || id >= 9 {
- return nil,errors.New("invalid gift id")
+ return nil, errors.New("invalid gift id")
}
- return &GiftElement{Target: t,GiftId: GiftId[id]}, nil
+ return &GiftElement{Target: t, GiftId: GiftId[id]}, nil
case "record":
if !group {
return nil, errors.New("private voice unsupported now")
diff --git a/docs/cqhttp.md b/docs/cqhttp.md
index 4c4b268..0297faf 100644
--- a/docs/cqhttp.md
+++ b/docs/cqhttp.md
@@ -418,7 +418,21 @@ Type: `cardimage`
| `group_id` | int64 | 群号 |
| `messages` | forward node[] | 自定义转发消息, 具体看CQCode |
-###
+### 获取中文分词
+
+终结点: `/.get_word_slices`
+
+**参数**
+
+| 字段 | 类型 | 说明 |
+| ------------ | ------ | ------ |
+| `content` | string | 内容 |
+
+**响应数据**
+
+| 字段 | 类型 | 说明 |
+| ---------- | ----------------- | -------- |
+| `slices` | string[] | 词组 |
## 事件
diff --git a/global/net.go b/global/net.go
index 55f27de..7691e89 100644
--- a/global/net.go
+++ b/global/net.go
@@ -50,4 +50,3 @@ func NeteaseMusicSongInfo(id string) (gjson.Result, error) {
}
return gjson.ParseBytes(d).Get("songs.0"), nil
}
-
diff --git a/server/http.go b/server/http.go
index 5d61c76..80fdcba 100644
--- a/server/http.go
+++ b/server/http.go
@@ -354,6 +354,11 @@ func (s *httpServer) OcrImage(c *gin.Context) {
c.JSON(200, s.bot.CQOcrImage(img))
}
+func (s *httpServer) GetWordSlices(c *gin.Context) {
+ content := getParam(c, "content")
+ c.JSON(200, s.bot.CQGetWordSlices(content))
+}
+
func (s *httpServer) SetGroupPortrait(c *gin.Context) {
gid, _ := strconv.ParseInt(getParam(c, "group_id"), 10, 64)
file := getParam(c, "file")
@@ -518,4 +523,7 @@ var httpApi = map[string]func(s *httpServer, c *gin.Context){
".ocr_image": func(s *httpServer, c *gin.Context) {
s.OcrImage(c)
},
+ ".get_word_slices": func(s *httpServer, c *gin.Context) {
+ s.GetWordSlices(c)
+ },
}
diff --git a/server/websocket.go b/server/websocket.go
index 40ba112..8e5d821 100644
--- a/server/websocket.go
+++ b/server/websocket.go
@@ -504,6 +504,9 @@ var wsApi = map[string]func(*coolq.CQBot, gjson.Result) coolq.MSG{
".ocr_image": func(bot *coolq.CQBot, p gjson.Result) coolq.MSG {
return bot.CQOcrImage(p.Get("image").Str)
},
+ ".get_word_slices": func(bot *coolq.CQBot, p gjson.Result) coolq.MSG {
+ return bot.CQGetWordSlices(p.Get("content").Str)
+ },
"set_group_portrait": func(bot *coolq.CQBot, p gjson.Result) coolq.MSG {
return bot.CQSetGroupPortrait(p.Get("group_id").Int(), p.Get("file").String(), p.Get("cache").String())
},
From 030eb6b7c4bbc2c0a2915209dfe7209bd1ccc541 Mon Sep 17 00:00:00 2001
From: wdvxdr
Date: Sat, 3 Oct 2020 09:59:21 +0800
Subject: [PATCH 052/367] feature support [CQ:tts]
---
coolq/cqcode.go | 9 +++++++++
docs/cqhttp.md | 16 ++++++++++++++++
2 files changed, 25 insertions(+)
diff --git a/coolq/cqcode.go b/coolq/cqcode.go
index 1a4790f..99e9b94 100644
--- a/coolq/cqcode.go
+++ b/coolq/cqcode.go
@@ -364,6 +364,15 @@ func (bot *CQBot) ToElement(t string, d map[string]string, group bool) (message.
return nil, errors.New("invalid gift id")
}
return &GiftElement{Target: t, GiftId: GiftId[id]}, nil
+ case "tts":
+ if !group {
+ return nil, errors.New("private voice unsupported now")
+ }
+ data, err := bot.Client.GetTts(d["text"])
+ if err != nil {
+ return nil, err
+ }
+ return &message.VoiceElement{Data: data}, nil
case "record":
if !group {
return nil, errors.New("private voice unsupported now")
diff --git a/docs/cqhttp.md b/docs/cqhttp.md
index 0297faf..62e3440 100644
--- a/docs/cqhttp.md
+++ b/docs/cqhttp.md
@@ -287,6 +287,22 @@ Type: `cardimage`
[CQ:cardimage,file=https://i.pixiv.cat/img-master/img/2020/03/25/00/00/08/80334602_p0_master1200.jpg]
```
+### 文本转语音
+
+> 注意:通过TX的TTS接口,采用的音源与登录账号的性别有关
+
+Type: `tts`
+
+范围: **发送(仅群聊)**
+
+参数:
+
+| 参数名 | 类型 | 说明 |
+| ------ | ------ | ----------- |
+| text | string | 内容 |
+
+示例: `[CQ:tts,text=这是一条测试消息]`
+
## API
### 设置群名
From a5958e087784933887618931a081b47224a397df Mon Sep 17 00:00:00 2001
From: Mrs4s <1844812067@qq.com>
Date: Sat, 3 Oct 2020 13:05:17 +0800
Subject: [PATCH 053/367] fix typo.
---
global/config.go | 2 +-
server/apiAdmin.go | 24 ++++++++++++------------
2 files changed, 13 insertions(+), 13 deletions(-)
diff --git a/global/config.go b/global/config.go
index 302bfa9..71ecaaf 100644
--- a/global/config.go
+++ b/global/config.go
@@ -82,7 +82,7 @@ type GoCQReverseWebsocketConfig struct {
type GoCqWebUi struct {
Enabled bool `json:"enabled"`
WebUiPort uint64 `json:"web_ui_port"`
- WebInput bool `json:"webinput"`
+ WebInput bool `json:"web_input"`
}
func DefaultConfig() *JsonConfig {
diff --git a/server/apiAdmin.go b/server/apiAdmin.go
index 376f79f..9fa7c68 100644
--- a/server/apiAdmin.go
+++ b/server/apiAdmin.go
@@ -26,7 +26,7 @@ var WebInput = make(chan string, 1) //长度1,用于阻塞
var Console = make(chan os.Signal, 1)
-var Jsonconfig *global.JsonConfig
+var JsonConfig *global.JsonConfig
type webServer struct {
engine *gin.Engine
@@ -59,7 +59,7 @@ func Failed(code int, msg string) coolq.MSG {
func (s *webServer) Run(addr string, cli *client.QQClient) *coolq.CQBot {
s.Cli = cli
s.Conf = GetConf()
- Jsonconfig = s.Conf
+ JsonConfig = s.Conf
gin.SetMode(gin.ReleaseMode)
s.engine = gin.New()
@@ -205,8 +205,8 @@ func (s *webServer) admin(c *gin.Context) {
// 获取当前配置文件信息
func GetConf() *global.JsonConfig {
- if Jsonconfig != nil {
- return Jsonconfig
+ if JsonConfig != nil {
+ return JsonConfig
}
conf := global.Load("config.json")
return conf
@@ -261,8 +261,8 @@ func AuthMiddleWare() gin.HandlerFunc {
}
}
-func (s *webServer) DoRelogin() {
- Jsonconfig = nil
+func (s *webServer) DoReLogin() { // TODO: 协议层的 ReLogin
+ JsonConfig = nil
conf := GetConf()
OldConf := s.Conf
cli := client.NewClient(conf.Uin, conf.Password)
@@ -339,7 +339,7 @@ func (s *webServer) ReloadServer() {
func AdminDoRestart(s *webServer, c *gin.Context) {
s.bot = nil
s.Cli = nil
- s.DoRelogin()
+ s.DoReLogin()
c.JSON(200, coolq.OK(coolq.MSG{}))
return
}
@@ -390,7 +390,7 @@ func AdminDoConfigBase(s *webServer, c *gin.Context) {
log.Fatalf("保存 config.json 时出现错误: %v", err)
c.JSON(200, Failed(502, "保存 config.json 时出现错误:"+fmt.Sprintf("%v", err)))
} else {
- Jsonconfig = nil
+ JsonConfig = nil
c.JSON(200, coolq.OK(coolq.MSG{}))
}
}
@@ -415,7 +415,7 @@ func AdminDoConfigHttp(s *webServer, c *gin.Context) {
log.Fatalf("保存 config.json 时出现错误: %v", err)
c.JSON(200, Failed(502, "保存 config.json 时出现错误:"+fmt.Sprintf("%v", err)))
} else {
- Jsonconfig = nil
+ JsonConfig = nil
c.JSON(200, coolq.OK(coolq.MSG{}))
}
}
@@ -435,7 +435,7 @@ func AdminDoConfigWs(s *webServer, c *gin.Context) {
log.Fatalf("保存 config.json 时出现错误: %v", err)
c.JSON(200, Failed(502, "保存 config.json 时出现错误:"+fmt.Sprintf("%v", err)))
} else {
- Jsonconfig = nil
+ JsonConfig = nil
c.JSON(200, coolq.OK(coolq.MSG{}))
}
}
@@ -457,7 +457,7 @@ func AdminDoConfigReverse(s *webServer, c *gin.Context) {
log.Fatalf("保存 config.json 时出现错误: %v", err)
c.JSON(200, Failed(502, "保存 config.json 时出现错误:"+fmt.Sprintf("%v", err)))
} else {
- Jsonconfig = nil
+ JsonConfig = nil
c.JSON(200, coolq.OK(coolq.MSG{}))
}
}
@@ -476,7 +476,7 @@ func AdminDoConfigJson(s *webServer, c *gin.Context) {
log.Fatalf("保存 config.json 时出现错误: %v", err)
c.JSON(200, Failed(502, "保存 config.json 时出现错误:"+fmt.Sprintf("%v", err)))
} else {
- Jsonconfig = nil
+ JsonConfig = nil
c.JSON(200, coolq.OK(coolq.MSG{}))
}
}
From b4d29e270ae41c4886bf683187ca4a2f759dc6ca Mon Sep 17 00:00:00 2001
From: Mrs4s <1844812067@qq.com>
Date: Sat, 3 Oct 2020 13:13:13 +0800
Subject: [PATCH 054/367] fix typo.
---
server/apiAdmin.go | 3 ++-
1 file changed, 2 insertions(+), 1 deletion(-)
diff --git a/server/apiAdmin.go b/server/apiAdmin.go
index 9fa7c68..ad83d97 100644
--- a/server/apiAdmin.go
+++ b/server/apiAdmin.go
@@ -69,7 +69,7 @@ func (s *webServer) Run(addr string, cli *client.QQClient) *coolq.CQBot {
s.engine.Any("/admin/:action", s.admin)
go func() {
- log.Infof("miraigo adminapi 服务器已启动: %v", addr)
+ log.Infof("Admin API 服务器已启动: %v", addr)
err := s.engine.Run(addr)
if err != nil {
log.Error(err)
@@ -118,6 +118,7 @@ func (s *webServer) Dologin() {
_, _ = s.Console.ReadString('\n')
}
log.Info(text)
+ os.Exit(0)
return
case client.OtherLoginError, client.UnknownLoginError:
log.Fatalf("登录失败: %v", rsp.ErrorMessage)
From b0d5589dcdf61f09e7b241347a5bffd5e6357248 Mon Sep 17 00:00:00 2001
From: Mrs4s <1844812067@qq.com>
Date: Sat, 3 Oct 2020 13:23:50 +0800
Subject: [PATCH 055/367] update MiraiGo.
---
go.mod | 2 +-
go.sum | 2 ++
2 files changed, 3 insertions(+), 1 deletion(-)
diff --git a/go.mod b/go.mod
index 4c72aa5..9db7483 100644
--- a/go.mod
+++ b/go.mod
@@ -3,7 +3,7 @@ module github.com/Mrs4s/go-cqhttp
go 1.14
require (
- github.com/Mrs4s/MiraiGo v0.0.0-20201002092940-afe4132a38d5
+ github.com/Mrs4s/MiraiGo v0.0.0-20201003051902-8a968656c116
github.com/fastly/go-utils v0.0.0-20180712184237-d95a45783239 // indirect
github.com/gin-gonic/gin v1.6.3
github.com/go-playground/validator/v10 v10.4.0 // indirect
diff --git a/go.sum b/go.sum
index a183748..fe885d2 100644
--- a/go.sum
+++ b/go.sum
@@ -4,6 +4,8 @@ github.com/Mrs4s/MiraiGo v0.0.0-20201002083653-383954dc11e2 h1:Pjs3pQKXDxvaWf3zT
github.com/Mrs4s/MiraiGo v0.0.0-20201002083653-383954dc11e2/go.mod h1:cwYPI2uq6nxNbx0nA6YuAKF1V5szSs6FPlGVLQvRUlo=
github.com/Mrs4s/MiraiGo v0.0.0-20201002092940-afe4132a38d5 h1:NVXpGL7tssdjYBAsPRvCIL8f8V9e8n9YO8sSsOwdy44=
github.com/Mrs4s/MiraiGo v0.0.0-20201002092940-afe4132a38d5/go.mod h1:cwYPI2uq6nxNbx0nA6YuAKF1V5szSs6FPlGVLQvRUlo=
+github.com/Mrs4s/MiraiGo v0.0.0-20201003051902-8a968656c116 h1:GQHsohWh9LxaWmHIVS2tKzZZSysJBrnS+Sh5jXZ+5zk=
+github.com/Mrs4s/MiraiGo v0.0.0-20201003051902-8a968656c116/go.mod h1:cwYPI2uq6nxNbx0nA6YuAKF1V5szSs6FPlGVLQvRUlo=
github.com/bwmarrin/snowflake v0.3.0 h1:xm67bEhkKh6ij1790JB83OujPR5CzNe8QuQqAgISZN0=
github.com/bwmarrin/snowflake v0.3.0/go.mod h1:NdZxfVWX+oR6y2K0o6qAYv6gIOP9rjG0/E9WsDpxqwE=
github.com/census-instrumentation/opencensus-proto v0.2.1/go.mod h1:f6KPmirojxKA12rnyqOA5BBL4O983OfeGPqjHWSTneU=
From e3f0dbc4acd0f0fc00675042dd51d687e9a8a3c6 Mon Sep 17 00:00:00 2001
From: scjtqs
Date: Sat, 3 Oct 2020 17:28:21 +0800
Subject: [PATCH 056/367] =?UTF-8?q?fix:=20=E4=BF=AE=E5=A4=8D=20=E6=97=A0?=
=?UTF-8?q?=E6=B3=95=E5=85=B3=E9=97=AD=20web=20admin=E7=9B=91=E5=90=AC?=
=?UTF-8?q?=E7=9A=84=E9=97=AE=E9=A2=98?=
MIME-Version: 1.0
Content-Type: text/plain; charset=UTF-8
Content-Transfer-Encoding: 8bit
---
server/apiAdmin.go | 22 ++++++++++++++++------
1 file changed, 16 insertions(+), 6 deletions(-)
diff --git a/server/apiAdmin.go b/server/apiAdmin.go
index ad83d97..7ede328 100644
--- a/server/apiAdmin.go
+++ b/server/apiAdmin.go
@@ -17,6 +17,7 @@ import (
"io/ioutil"
"net/http"
"os"
+ "os/signal"
"strconv"
"strings"
"time"
@@ -69,12 +70,21 @@ func (s *webServer) Run(addr string, cli *client.QQClient) *coolq.CQBot {
s.engine.Any("/admin/:action", s.admin)
go func() {
- log.Infof("Admin API 服务器已启动: %v", addr)
- err := s.engine.Run(addr)
- if err != nil {
- log.Error(err)
- log.Infof("请检查端口是否被占用.")
- time.Sleep(time.Second * 5)
+ //开启端口监听
+ if s.Conf.WebUi.Enabled{
+ log.Infof("Admin API 服务器已启动: %v", addr)
+ err := s.engine.Run(addr)
+ if err != nil {
+ 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)
}
}()
From 95c399a00338e07a8be666d2209fa1a9ef5963b5 Mon Sep 17 00:00:00 2001
From: scjtqs
Date: Sat, 3 Oct 2020 17:43:03 +0800
Subject: [PATCH 057/367] =?UTF-8?q?=E6=B7=BB=E5=8A=A0=E4=BA=86=20admin=20a?=
=?UTF-8?q?pi=20=E7=9A=84=E7=9B=91=E5=90=AC=20host=E6=94=AF=E6=8C=81?=
=?UTF-8?q?=EF=BC=8C=E9=AA=8C=E8=AF=81=E7=A0=81=E6=8F=90=E7=A4=BA=E5=A2=9E?=
=?UTF-8?q?=E5=8A=A0=20host+port?=
MIME-Version: 1.0
Content-Type: text/plain; charset=UTF-8
Content-Transfer-Encoding: 8bit
---
global/config.go | 2 ++
main.go | 6 +++++-
server/apiAdmin.go | 8 ++++----
3 files changed, 11 insertions(+), 5 deletions(-)
diff --git a/global/config.go b/global/config.go
index 71ecaaf..e380e99 100644
--- a/global/config.go
+++ b/global/config.go
@@ -81,6 +81,7 @@ type GoCQReverseWebsocketConfig struct {
type GoCqWebUi struct {
Enabled bool `json:"enabled"`
+ Host string `json:"host"`
WebUiPort uint64 `json:"web_ui_port"`
WebInput bool `json:"web_input"`
}
@@ -130,6 +131,7 @@ func DefaultConfig() *JsonConfig {
},
WebUi: &GoCqWebUi{
Enabled: true,
+ Host: "0.0.0.0",
WebInput: false,
WebUiPort: 9999,
},
diff --git a/main.go b/main.go
index 15f10ab..46ce32d 100644
--- a/main.go
+++ b/main.go
@@ -237,17 +237,21 @@ func main() {
conf.WebUi = &global.GoCqWebUi{
Enabled: true,
WebInput: false,
+ Host: "0.0.0.0",
WebUiPort: 9999,
}
}
if conf.WebUi.WebUiPort <= 0 {
conf.WebUi.WebUiPort = 9999
}
+ if conf.WebUi.Host == "" {
+ conf.WebUi.Host = "0.0.0.0"
+ }
confErr := conf.Save("config.json")
if confErr != nil {
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
signal.Notify(c, os.Interrupt, os.Kill)
<-c
diff --git a/server/apiAdmin.go b/server/apiAdmin.go
index 7ede328..c136391 100644
--- a/server/apiAdmin.go
+++ b/server/apiAdmin.go
@@ -71,7 +71,7 @@ func (s *webServer) Run(addr string, cli *client.QQClient) *coolq.CQBot {
go func() {
//开启端口监听
- if s.Conf.WebUi.Enabled{
+ if s.Conf.WebUi.Enabled {
log.Infof("Admin API 服务器已启动: %v", addr)
err := s.engine.Run(addr)
if err != nil {
@@ -80,7 +80,7 @@ func (s *webServer) Run(addr string, cli *client.QQClient) *coolq.CQBot {
time.Sleep(time.Second * 5)
os.Exit(1)
}
- }else{
+ } else {
//关闭端口监听
c := make(chan os.Signal, 1)
signal.Notify(c, os.Interrupt, os.Kill)
@@ -109,7 +109,7 @@ func (s *webServer) Dologin() {
img, _, _ := image.Decode(bytes.NewReader(rsp.CaptchaImage))
fmt.Println(asciiart.New("image", img).Art)
if conf.WebUi.WebInput {
- log.Warn("请输入验证码 (captcha.jpg): (http://127.0.0.1/admin/web_write 输入)")
+ log.Warnf("请输入验证码 (captcha.jpg): (http://%s:%d/admin/web_write 输入)", conf.WebUi.Host, conf.WebUi.WebUiPort)
text = <-WebInput
} else {
log.Warn("请输入验证码 (captcha.jpg): (Enter 提交)")
@@ -121,7 +121,7 @@ func (s *webServer) Dologin() {
case client.UnsafeDeviceError:
log.Warnf("账号已开启设备锁,请前往 -> %v <- 验证并重启Bot.", rsp.VerifyUrl)
if conf.WebUi.WebInput {
- log.Infof(" (http://127.0.0.1/admin/web_write 确认后继续)....")
+ log.Infof(" (http://%s:%d/admin/web_write 确认后继续)....", conf.WebUi.Host, conf.WebUi.WebUiPort)
text = <-WebInput
} else {
log.Infof(" 按 Enter 继续....")
From b19b114d3a6d3dfb211c07e1fc568dd2030c7d31 Mon Sep 17 00:00:00 2001
From: scjtqs
Date: Sat, 3 Oct 2020 17:54:15 +0800
Subject: [PATCH 058/367] =?UTF-8?q?fix=20web=E8=BE=93=E5=85=A5api=E6=98=BE?=
=?UTF-8?q?=E7=A4=BA?=
MIME-Version: 1.0
Content-Type: text/plain; charset=UTF-8
Content-Transfer-Encoding: 8bit
---
server/apiAdmin.go | 4 ++--
1 file changed, 2 insertions(+), 2 deletions(-)
diff --git a/server/apiAdmin.go b/server/apiAdmin.go
index c136391..6d44638 100644
--- a/server/apiAdmin.go
+++ b/server/apiAdmin.go
@@ -109,7 +109,7 @@ func (s *webServer) Dologin() {
img, _, _ := image.Decode(bytes.NewReader(rsp.CaptchaImage))
fmt.Println(asciiart.New("image", img).Art)
if conf.WebUi.WebInput {
- log.Warnf("请输入验证码 (captcha.jpg): (http://%s:%d/admin/web_write 输入)", conf.WebUi.Host, conf.WebUi.WebUiPort)
+ log.Warnf("请输入验证码 (captcha.jpg): (http://%s:%d/admin/do_web_write 输入)", conf.WebUi.Host, conf.WebUi.WebUiPort)
text = <-WebInput
} else {
log.Warn("请输入验证码 (captcha.jpg): (Enter 提交)")
@@ -121,7 +121,7 @@ func (s *webServer) Dologin() {
case client.UnsafeDeviceError:
log.Warnf("账号已开启设备锁,请前往 -> %v <- 验证并重启Bot.", rsp.VerifyUrl)
if conf.WebUi.WebInput {
- log.Infof(" (http://%s:%d/admin/web_write 确认后继续)....", conf.WebUi.Host, conf.WebUi.WebUiPort)
+ log.Infof(" (http://%s:%d/admin/do_web_write 确认后继续)....", conf.WebUi.Host, conf.WebUi.WebUiPort)
text = <-WebInput
} else {
log.Infof(" 按 Enter 继续....")
From 4d404eacd9f4a3fc38dc68ddb2fd483ed279a60b Mon Sep 17 00:00:00 2001
From: scjtqs
Date: Sun, 4 Oct 2020 20:01:59 +0800
Subject: [PATCH 059/367] =?UTF-8?q?=E4=BF=AE=E5=A4=8D=20=E8=8E=B7=E5=8F=96?=
=?UTF-8?q?=20=E5=BD=93=E5=89=8D=E5=8F=82=E6=95=B0=E7=9A=84=E6=96=B9?=
=?UTF-8?q?=E6=B3=95=E5=90=8D=E9=94=99=E8=AF=AF=E9=97=AE=E9=A2=98=EF=BC=8C?=
=?UTF-8?q?=E5=A2=9E=E5=8A=A0=E5=BD=93=E5=89=8Dadmin=20api=E7=9A=84=20doc?=
MIME-Version: 1.0
Content-Type: text/plain; charset=UTF-8
Content-Transfer-Encoding: 8bit
---
docs/adminApi.md | 232 +++++++++++++++++++++++++++++++++++++++++++++
server/apiAdmin.go | 2 +-
2 files changed, 233 insertions(+), 1 deletion(-)
create mode 100644 docs/adminApi.md
diff --git a/docs/adminApi.md b/docs/adminApi.md
new file mode 100644
index 0000000..68dde26
--- /dev/null
+++ b/docs/adminApi.md
@@ -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字符串 |
+
diff --git a/server/apiAdmin.go b/server/apiAdmin.go
index 6d44638..f80ae8f 100644
--- a/server/apiAdmin.go
+++ b/server/apiAdmin.go
@@ -50,7 +50,7 @@ var HttpuriAdmin = map[string]func(s *webServer, c *gin.Context){
"do_config_ws": AdminDoConfigWs, //修改config.json的正向ws部分
"do_config_reverse": AdminDoConfigReverse, //修改config.json 中的反向ws部分
"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 {
From 31f24525f077cfe75b71b127932fe4ec7ca65e8b Mon Sep 17 00:00:00 2001
From: Mrs4s <1844812067@qq.com>
Date: Mon, 5 Oct 2020 16:42:13 +0800
Subject: [PATCH 060/367] fix filter panic.
---
server/apiAdmin.go | 1 -
1 file changed, 1 deletion(-)
diff --git a/server/apiAdmin.go b/server/apiAdmin.go
index ad83d97..fd57f86 100644
--- a/server/apiAdmin.go
+++ b/server/apiAdmin.go
@@ -139,7 +139,6 @@ func (s *webServer) Dologin() {
if conf.PostMessageFormat != "string" && conf.PostMessageFormat != "array" {
log.Warnf("post_message_format 配置错误, 将自动使用 string")
coolq.SetMessageFormat("string")
- return
} else {
coolq.SetMessageFormat(conf.PostMessageFormat)
}
From 2a5f78499b5942e9c1e6060f1627e21537544dcc Mon Sep 17 00:00:00 2001
From: wdvxdr
Date: Tue, 6 Oct 2020 10:30:52 +0800
Subject: [PATCH 061/367] feature support silk encoder
---
coolq/cqcode.go | 6 +++++-
global/codec.go | 44 ++++++++++++++++++++++++++++++++++++++++++++
go.mod | 9 ++++++---
go.sum | 41 ++++++++++++++++++++++++++++++++---------
server/apiAdmin.go | 1 +
server/http.go | 10 +++++-----
6 files changed, 93 insertions(+), 18 deletions(-)
create mode 100644 global/codec.go
diff --git a/coolq/cqcode.go b/coolq/cqcode.go
index 99e9b94..a927cdb 100644
--- a/coolq/cqcode.go
+++ b/coolq/cqcode.go
@@ -369,6 +369,7 @@ func (bot *CQBot) ToElement(t string, d map[string]string, group bool) (message.
return nil, errors.New("private voice unsupported now")
}
data, err := bot.Client.GetTts(d["text"])
+ ioutil.WriteFile("tts.silk", data, 777)
if err != nil {
return nil, err
}
@@ -383,7 +384,10 @@ func (bot *CQBot) ToElement(t string, d map[string]string, group bool) (message.
return nil, err
}
if !global.IsAMRorSILK(data) {
- return nil, errors.New("unsupported voice file format (please use AMR file for now)")
+ data, err = global.Encoder(data)
+ if err != nil {
+ return nil, err
+ }
}
return &message.VoiceElement{Data: data}, nil
case "face":
diff --git a/global/codec.go b/global/codec.go
new file mode 100644
index 0000000..b519b68
--- /dev/null
+++ b/global/codec.go
@@ -0,0 +1,44 @@
+package global
+
+import (
+ "crypto/md5"
+ "errors"
+ "fmt"
+ log "github.com/sirupsen/logrus"
+ "github.com/wdvxdr1123/go-silk/silk"
+ "io/ioutil"
+ "path"
+ "sync"
+)
+
+var codec silk.Encoder
+var useCodec = true
+var once sync.Once
+
+func InitCodec() {
+ once.Do(func() {
+ log.Info("正在加载silk编码器...")
+ err := codec.Init("data/cache", "codec")
+ if err != nil {
+ log.Error(err)
+ useCodec = false
+ }
+ })
+}
+
+func Encoder(data []byte) ([]byte, error) {
+ if useCodec == false {
+ return nil, errors.New("no silk encoder")
+ }
+ h := md5.New()
+ h.Write(data)
+ tempName := fmt.Sprintf("%x", h.Sum(nil))
+ if silkPath := path.Join("data/cache", tempName+".silk"); PathExists(silkPath) {
+ return ioutil.ReadFile(silkPath)
+ }
+ slk, err := codec.EncodeToSilk(data, tempName, true)
+ if err != nil {
+ return nil, err
+ }
+ return slk, nil
+}
diff --git a/go.mod b/go.mod
index 9db7483..7d2fe61 100644
--- a/go.mod
+++ b/go.mod
@@ -3,7 +3,7 @@ module github.com/Mrs4s/go-cqhttp
go 1.14
require (
- github.com/Mrs4s/MiraiGo v0.0.0-20201003051902-8a968656c116
+ github.com/Mrs4s/MiraiGo v0.0.0-20201005155759-f9b3c399e5e0
github.com/fastly/go-utils v0.0.0-20180712184237-d95a45783239 // indirect
github.com/gin-gonic/gin v1.6.3
github.com/go-playground/validator/v10 v10.4.0 // indirect
@@ -22,10 +22,13 @@ require (
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.1
+ github.com/ugorji/go v1.1.10 // indirect
+ github.com/wdvxdr1123/go-silk v0.0.0-20201006020916-0398076200ea
github.com/xujiajun/nutsdb v0.5.0
github.com/yinghau76/go-ascii-art v0.0.0-20190517192627-e7f465a30189
- golang.org/x/net v0.0.0-20200930145003-4acb6c075d10 // indirect
- golang.org/x/sys v0.0.0-20200930185726-fdedc70b468f // indirect
+ golang.org/x/crypto v0.0.0-20201002170205-7f63de1d35b0 // indirect
+ golang.org/x/net v0.0.0-20201002202402-0a1ea396d57c // indirect
+ golang.org/x/sys v0.0.0-20201005172224-997123666555 // indirect
golang.org/x/time v0.0.0-20200630173020-3af7569d3a1e
gopkg.in/yaml.v2 v2.3.0 // indirect
)
diff --git a/go.sum b/go.sum
index fe885d2..cd68cf0 100644
--- a/go.sum
+++ b/go.sum
@@ -1,25 +1,22 @@
cloud.google.com/go v0.26.0/go.mod h1:aQUYkXzVsufM+DwF1aE+0xfcU+56JwCaLick0ClmMTw=
github.com/BurntSushi/toml v0.3.1/go.mod h1:xHWCNGjB5oqiDr8zfno3MHue2Ht5sIBksp03qcyfWMU=
-github.com/Mrs4s/MiraiGo v0.0.0-20201002083653-383954dc11e2 h1:Pjs3pQKXDxvaWf3zTLmedRl+F1gvcJl+bp3XaYFg4Yw=
-github.com/Mrs4s/MiraiGo v0.0.0-20201002083653-383954dc11e2/go.mod h1:cwYPI2uq6nxNbx0nA6YuAKF1V5szSs6FPlGVLQvRUlo=
-github.com/Mrs4s/MiraiGo v0.0.0-20201002092940-afe4132a38d5 h1:NVXpGL7tssdjYBAsPRvCIL8f8V9e8n9YO8sSsOwdy44=
-github.com/Mrs4s/MiraiGo v0.0.0-20201002092940-afe4132a38d5/go.mod h1:cwYPI2uq6nxNbx0nA6YuAKF1V5szSs6FPlGVLQvRUlo=
-github.com/Mrs4s/MiraiGo v0.0.0-20201003051902-8a968656c116 h1:GQHsohWh9LxaWmHIVS2tKzZZSysJBrnS+Sh5jXZ+5zk=
-github.com/Mrs4s/MiraiGo v0.0.0-20201003051902-8a968656c116/go.mod h1:cwYPI2uq6nxNbx0nA6YuAKF1V5szSs6FPlGVLQvRUlo=
github.com/bwmarrin/snowflake v0.3.0 h1:xm67bEhkKh6ij1790JB83OujPR5CzNe8QuQqAgISZN0=
github.com/bwmarrin/snowflake v0.3.0/go.mod h1:NdZxfVWX+oR6y2K0o6qAYv6gIOP9rjG0/E9WsDpxqwE=
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=
+github.com/davecgh/go-spew v1.1.1 h1:vj9j/u1bqnvCEfJOwUhtlOARqs3+rkHYY13jYWTU97c=
github.com/davecgh/go-spew v1.1.1/go.mod h1:J7Y8YcW2NihsgmVo/mv3lAwl/skON4iLHjSsI+c5H38=
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/gin-contrib/sse v0.1.0 h1:Y/yl/+YNO8GZSjAhjMsSuLt29uWRFHdHYUb5lYOV9qE=
github.com/gin-contrib/sse v0.1.0/go.mod h1:RHrZQHXnP2xjPF+u1gW/2HnVO7nvIa9PG3Gm+fLHvGI=
github.com/gin-gonic/gin v1.5.0/go.mod h1:Nd6IXA8m5kNZdNEHMBd93KT+mdY3+bewLgRvmCsR2Do=
github.com/gin-gonic/gin v1.6.3 h1:ahKqKTFpO5KTPHxWZjEdPScmYaGtLo8Y4DMHoEsnp14=
github.com/gin-gonic/gin v1.6.3/go.mod h1:75u5sXoLsGZoRN5Sgbi1eraJ4GU3++wFwWzhwvtwp4M=
+github.com/go-playground/assert/v2 v2.0.1 h1:MsBgLAaY856+nPRTKrp3/OZK38U/wa0CcBYNjji3q3A=
github.com/go-playground/assert/v2 v2.0.1/go.mod h1:VDjEfimB/XKnb+ZQfWdccd7VUvScMdVu0Titje2rxJ4=
github.com/go-playground/locales v0.12.1/go.mod h1:IUMDtCfWo/w/mtMfIE/IG2K+Ey3ygWanZIBtBW0W2TM=
github.com/go-playground/locales v0.13.0 h1:HyWk6mgj5qFqCT5fjGBuRArbVDfE4hi8+e8ceBS/t7Q=
@@ -47,22 +44,28 @@ github.com/google/go-cmp v0.2.0/go.mod h1:oXzfMopK8JAjlY9xF4vHSVASa0yLyX7SntLO5a
github.com/google/go-cmp v0.3.0/go.mod h1:8QqcDgzrUqlUb/G2PQTWiueGozuR1884gddMywk6iLU=
github.com/google/go-cmp v0.3.1/go.mod h1:8QqcDgzrUqlUb/G2PQTWiueGozuR1884gddMywk6iLU=
github.com/google/go-cmp v0.4.0/go.mod h1:v8dTdLbMG2kIc/vJvl+f65V22dbkXbowE6jgT/gNBxE=
+github.com/google/go-cmp v0.5.0 h1:/QaMHBdZ26BB3SSst0Iwl10Epc+xhTquomWX0oZEB6w=
github.com/google/go-cmp v0.5.0/go.mod h1:v8dTdLbMG2kIc/vJvl+f65V22dbkXbowE6jgT/gNBxE=
github.com/google/gofuzz v1.0.0/go.mod h1:dBl0BpW6vV/+mYPU4Po3pmUjxk6FQPldtuIdl/M65Eg=
+github.com/google/uuid v1.1.1 h1:Gkbcsh/GbpXz7lPftLA3P6TYMwjCLYm83jiFQZF/3gY=
github.com/google/uuid v1.1.1/go.mod h1:TIyPZe4MgqvfeYDBFedMoGGpEw/LqOeaOT+nhxU+yHo=
github.com/gorilla/websocket v1.4.2 h1:+/TMaTYc4QFitKJxsQ7Yye35DkWvkdLcvGKqM+x0Ufc=
github.com/gorilla/websocket v1.4.2/go.mod h1:YR8l580nyteQvAITg2hZ9XVh4b55+EU/adAjf1fMHhE=
github.com/guonaihong/gout v0.1.2 h1:TR2XCRopGgJdj231IayEoeavgbznFXzzzcZVdT/hG10=
github.com/guonaihong/gout v0.1.2/go.mod h1:vXvv5Kxr70eM5wrp4F0+t9lnLWmq+YPW2GByll2f/EA=
+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.0 h1:J2SLSdy7HgElq8ekSl2Mxh6vrRNFxqbXGenYH2I02Vs=
github.com/jonboulle/clockwork v0.2.0/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/json-iterator/go v1.1.10 h1:Kz6Cvnvv2wGdaG/V8yMvfkmNiXq9Ya2KUv4rouJJr68=
github.com/json-iterator/go v1.1.10/go.mod h1:KdQUCv79m/52Kvf8AW2vK1V8akMuk1QjK/uOdHXbAo4=
github.com/konsorten/go-windows-terminal-sequences v1.0.1/go.mod h1:T0+1ngSBFLxvqU3pZ+m/2kptfBszLMUkC4ZK/EgS/cQ=
github.com/leodido/go-urn v1.1.0/go.mod h1:+cyI34gQWZcE1eQU7NVgKkkzdXDQHr1dBMtdAPozLkw=
github.com/leodido/go-urn v1.2.0 h1:hpXL4XnriNwQ/ABnpepYM/1vCLWNDfUNts8dX3xTG6Y=
github.com/leodido/go-urn v1.2.0/go.mod h1:+8+nEpDfqqsY+g338gtMEUOtuK+4dEMhiQEgxpxOKII=
+github.com/lestrrat-go/envload v0.0.0-20180220234015-a3eb8ddeffcc h1:RKf14vYWi2ttpEmkA4aQ3j4u9dStX2t4M8UM6qqNsG8=
github.com/lestrrat-go/envload v0.0.0-20180220234015-a3eb8ddeffcc/go.mod h1:kopuH9ugFRkIXf3YoqHKyrJ9YfUFsckUU9S7B+XP+is=
github.com/lestrrat-go/file-rotatelogs v2.4.0+incompatible h1:Y6sqxHMyB1D2YSzWkLibYKgg+SwmyFU9dF2hn6MdTj4=
github.com/lestrrat-go/file-rotatelogs v2.4.0+incompatible/go.mod h1:ZQnN8lSECaebrkQytbHj4xNgtg8CR7RYXnPok8e0EHA=
@@ -72,14 +75,17 @@ github.com/mattn/go-isatty v0.0.9/go.mod h1:YNRxwqDuOph6SZLI9vUUz6OYw3QyUt7WiY2y
github.com/mattn/go-isatty v0.0.12 h1:wuysRhFDzyxgEmMf5xjvJ2M9dZoWAXNNr5LSBS7uHXY=
github.com/mattn/go-isatty v0.0.12/go.mod h1:cbi8OIDigv2wuxKPP5vlRcQ1OAZbq2CE4Kysco4FUpU=
github.com/modern-go/concurrent v0.0.0-20180228061459-e0a39a4cb421/go.mod h1:6dJC0mAP4ikYIbvyc7fijjWJddQyLn8Ig3JB5CqoB9Q=
+github.com/modern-go/concurrent v0.0.0-20180306012644-bacd9c7ef1dd h1:TRLaZ9cD/w8PVh93nsPXa1VrQ6jlwL5oN8l14QlcNfg=
github.com/modern-go/concurrent v0.0.0-20180306012644-bacd9c7ef1dd/go.mod h1:6dJC0mAP4ikYIbvyc7fijjWJddQyLn8Ig3JB5CqoB9Q=
github.com/modern-go/reflect2 v0.0.0-20180701023420-4b7aa43c6742/go.mod h1:bx2lNnkwVCuqBIxFjflWJWanXIb3RllmbCylyMrvgv0=
+github.com/modern-go/reflect2 v1.0.1 h1:9f412s+6RmYXLWZSEzVVgPGK7C2PphHj5RJrvfx9AWI=
github.com/modern-go/reflect2 v1.0.1/go.mod h1:bx2lNnkwVCuqBIxFjflWJWanXIb3RllmbCylyMrvgv0=
github.com/nfnt/resize v0.0.0-20180221191011-83c6a9932646 h1:zYyBkD/k9seD2A7fsi6Oo2LfFZAehjjQMERAvZLEDnQ=
github.com/nfnt/resize v0.0.0-20180221191011-83c6a9932646/go.mod h1:jpp1/29i3P1S/RLdc7JQKbRpFeM1dOBd8T9ki5s+AY8=
github.com/pkg/errors v0.8.1/go.mod h1:bwawxfHBFNV+L2hUp1rHADufV3IMtnDRdf1r5NINEl0=
github.com/pkg/errors v0.9.1 h1:FEBLx1zS214owpjy7qsBeixbURkuhQAwrK5UwLGTwt4=
github.com/pkg/errors v0.9.1/go.mod h1:bwawxfHBFNV+L2hUp1rHADufV3IMtnDRdf1r5NINEl0=
+github.com/pmezard/go-difflib v1.0.0 h1:4DBwDE0NGyQoBHbLQYPwSUPoCMWR5BEzIk/f1lZbAQM=
github.com/pmezard/go-difflib v1.0.0/go.mod h1:iKH77koFhYxTK1pcRnkKkqfTogsbg7gZNVY4sRDYZ/4=
github.com/prometheus/client_model v0.0.0-20190812154241-14fe0d1b01d4/go.mod h1:xMI15A0UPsDsEKsMN9yxemIoYk6Tm2C1GtYGdfGttqA=
github.com/rifflock/lfshook v0.0.0-20180920164130-b9218ef580f5 h1:mZHayPoR0lNmnHyvtYjDeq0zlVHn9K/ZXoy17ylucdo=
@@ -91,9 +97,11 @@ github.com/stretchr/objx v0.1.0/go.mod h1:HFkY916IF+rwdDfMAkV7OtwuqBVzrE8GR6GFx+
github.com/stretchr/objx v0.1.1/go.mod h1:HFkY916IF+rwdDfMAkV7OtwuqBVzrE8GR6GFx+wExME=
github.com/stretchr/testify v1.2.2/go.mod h1:a8OnRcib4nhh0OaRAV+Yts87kKdq0PP7pXfy6kDkUVs=
github.com/stretchr/testify v1.3.0/go.mod h1:M5WIy9Dh21IEIfnGCwXGc5bZfKNJtfHm1UVUgZn+9EI=
+github.com/stretchr/testify v1.4.0 h1:2E4SXV/wtOkTonXsotYi4li6zVWxYlZuYNCXe9XRJyk=
github.com/stretchr/testify v1.4.0/go.mod h1:j7eGeouHqKxXV5pUuKE4zz7dFj8WfuZ+81PSLYec5m4=
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 h1:LRbvNuNuvAiISWg6gxLEFuCe72UKy5hDqhxW/8183ws=
github.com/tidwall/gjson v1.6.1/go.mod h1:BaHyNc5bjzYkPqgLq7mdVzeiRtULKULXLgZFKsxEHI0=
@@ -103,8 +111,18 @@ github.com/tidwall/pretty v1.0.2 h1:Z7S3cePv9Jwm1KwS0513MRaoUe3S01WPbLNV40pwWZU=
github.com/tidwall/pretty v1.0.2/go.mod h1:XNkn88O1ChpSDQmQeStsy+sBenx6DDtFZJxhVysOjyk=
github.com/ugorji/go v1.1.7 h1:/68gy2h+1mWMrwZFeD1kQialdSzAb432dtpeJ42ovdo=
github.com/ugorji/go v1.1.7/go.mod h1:kZn38zHttfInRq0xu/PH0az30d+z6vm202qpg1oXVMw=
+github.com/ugorji/go v1.1.10 h1:Mh7W3N/hGJJ8fRQNHIgomNTa0CgZc0aKDFvbgHl+U7A=
+github.com/ugorji/go v1.1.10/go.mod h1:/tC+H0R6N4Lcv4DoSdphIa9y/RAs4QFHDtN9W2oQcHw=
github.com/ugorji/go/codec v1.1.7 h1:2SvQaVZ1ouYrrKKwoSk2pzd4A9evlKJb9oTL+OaLUSs=
github.com/ugorji/go/codec v1.1.7/go.mod h1:Ax+UKWsSmolVDwsd+7N3ZtXu+yMGCf907BLYF3GoBXY=
+github.com/ugorji/go/codec v1.1.10 h1:otofY/FAoRTMVqlVeDv/Kpm04D13lfJdrDqPbc3axg4=
+github.com/ugorji/go/codec v1.1.10/go.mod h1:jdPQoxvTq1mb8XV6RmofOz5UgNKV2czR6xvxXGwy1Bo=
+github.com/wdvxdr1123/go-silk v0.0.0-20201005163614-f79330a7d135 h1:UQlCEjbkMjL2sX5ruLdl1VjArsUqzUdZoXOC8DQM/o8=
+github.com/wdvxdr1123/go-silk v0.0.0-20201005163614-f79330a7d135/go.mod h1:5q9LFlBr+yX/J8Jd/9wHdXwkkjFkNyQIS7kX2Lgx/Zs=
+github.com/wdvxdr1123/go-silk v0.0.0-20201006012916-b6a6e0f00915 h1:OkqbIcMb6lT9xfyLvONscMJPzRsUC3zlLxLxiJxYzhg=
+github.com/wdvxdr1123/go-silk v0.0.0-20201006012916-b6a6e0f00915/go.mod h1:5q9LFlBr+yX/J8Jd/9wHdXwkkjFkNyQIS7kX2Lgx/Zs=
+github.com/wdvxdr1123/go-silk v0.0.0-20201006020916-0398076200ea h1:OqkIV1VL5xm88jhXLaPHRJroeRknxN3EApcAVlNIIOw=
+github.com/wdvxdr1123/go-silk v0.0.0-20201006020916-0398076200ea/go.mod h1:5q9LFlBr+yX/J8Jd/9wHdXwkkjFkNyQIS7kX2Lgx/Zs=
github.com/xujiajun/gorouter v1.2.0/go.mod h1:yJrIta+bTNpBM/2UT8hLOaEAFckO+m/qmR3luMIQygM=
github.com/xujiajun/mmap-go v1.0.1 h1:7Se7ss1fLPPRW+ePgqGpCkfGIZzJV6JPq9Wq9iv/WHc=
github.com/xujiajun/mmap-go v1.0.1/go.mod h1:CNN6Sw4SL69Sui00p0zEzcZKbt+5HtEnYUsc6BKKRMg=
@@ -117,6 +135,8 @@ github.com/yinghau76/go-ascii-art v0.0.0-20190517192627-e7f465a30189/go.mod h1:r
golang.org/x/crypto v0.0.0-20190308221718-c2843e01d9a2/go.mod h1:djNgcEr1/C05ACkg1iLfiJU5Ep61QUkGW8qpdssI0+w=
golang.org/x/crypto v0.0.0-20200622213623-75b288015ac9 h1:psW17arqaxU48Z5kZ0CQnkZWQJsqcURM6tKiBApRjXI=
golang.org/x/crypto v0.0.0-20200622213623-75b288015ac9/go.mod h1:LzIPMQfyMNhhGPhUkYOs5KpL4U8rLKemX1yGLhDgUto=
+golang.org/x/crypto v0.0.0-20201002170205-7f63de1d35b0 h1:hb9wdF1z5waM+dSIICn1l0DkLVDT3hqhhQsDNUmHPRE=
+golang.org/x/crypto v0.0.0-20201002170205-7f63de1d35b0/go.mod h1:LzIPMQfyMNhhGPhUkYOs5KpL4U8rLKemX1yGLhDgUto=
golang.org/x/exp v0.0.0-20190121172915-509febef88a4/go.mod h1:CJ0aWSM057203Lf6IL+f9T1iT9GByDxfZKAQTCR3kQA=
golang.org/x/lint v0.0.0-20181026193005-c67002cb31c3/go.mod h1:UVdnD1Gm6xHRNCYTkRU2/jEulfH38KcIWyp/GAMgvoE=
golang.org/x/lint v0.0.0-20190227174305-5b3e6a55c961/go.mod h1:wehouNa3lNwaWXcvxsM5YxQ5yQlVC4a0KAMCusXpPoU=
@@ -127,8 +147,8 @@ golang.org/x/net v0.0.0-20190213061140-3a22650c66bd/go.mod h1:mL1N/T3taQHkDXs73r
golang.org/x/net v0.0.0-20190311183353-d8887717615a/go.mod h1:t9HGtf8HONx5eT2rtn7q6eTqICYqUVnKs3thJo3Qplg=
golang.org/x/net v0.0.0-20190404232315-eb5bcb51f2a3/go.mod h1:t9HGtf8HONx5eT2rtn7q6eTqICYqUVnKs3thJo3Qplg=
golang.org/x/net v0.0.0-20200114155413-6afb5195e5aa/go.mod h1:z5CRVTTTmAJ677TzLLGU+0bjPO0LkuOLi4/5GtJWs/s=
-golang.org/x/net v0.0.0-20200930145003-4acb6c075d10 h1:YfxMZzv3PjGonQYNUaeU2+DhAdqOxerQ30JFB6WgAXo=
-golang.org/x/net v0.0.0-20200930145003-4acb6c075d10/go.mod h1:/O7V0waA8r7cgGh81Ro3o1hOxt32SMVPicZroKQ2sZA=
+golang.org/x/net v0.0.0-20201002202402-0a1ea396d57c h1:dk0ukUIHmGHqASjP0iue2261isepFCC6XRCSd1nHgDw=
+golang.org/x/net v0.0.0-20201002202402-0a1ea396d57c/go.mod h1:iQL9McJNjoIa5mjH6nYTCTZXUN6RP+XW3eib7Ya3XcI=
golang.org/x/oauth2 v0.0.0-20180821212333-d2e6202438be/go.mod h1:N/0e6XlmueqKjAGxoOufVs8QHGRruUQn6yWY3a++T0U=
golang.org/x/sync v0.0.0-20180314180146-1d60e4601c6f/go.mod h1:RxMgew5VJxzue5/jJTE5uejpjVlOe/izrB70Jof72aM=
golang.org/x/sync v0.0.0-20181108010431-42b317875d0f/go.mod h1:RxMgew5VJxzue5/jJTE5uejpjVlOe/izrB70Jof72aM=
@@ -141,9 +161,10 @@ golang.org/x/sys v0.0.0-20190422165155-953cdadca894/go.mod h1:h1NjWce9XRLGQEsW7w
golang.org/x/sys v0.0.0-20190813064441-fde4db37ae7a/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs=
golang.org/x/sys v0.0.0-20191026070338-33540a1f6037/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs=
golang.org/x/sys v0.0.0-20200116001909-b77594299b42/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs=
-golang.org/x/sys v0.0.0-20200323222414-85ca7c5b95cd/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs=
golang.org/x/sys v0.0.0-20200930185726-fdedc70b468f h1:+Nyd8tzPX9R7BWHguqsrbFdRx3WQ/1ib8I44HXV5yTA=
golang.org/x/sys v0.0.0-20200930185726-fdedc70b468f/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs=
+golang.org/x/sys v0.0.0-20201005172224-997123666555 h1:fihtqzYxy4E31W1yUlyRGveTZT1JIP0bmKaDZ2ceKAw=
+golang.org/x/sys v0.0.0-20201005172224-997123666555/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs=
golang.org/x/text v0.3.0/go.mod h1:NqM8EUOU14njkJ3fqMW+pc6Ldnwhi/IjpwHt7yyuwOQ=
golang.org/x/text v0.3.2/go.mod h1:bEr9sfX3Q8Zfm5fL9x+3itogRgK3+ptLWKqgva+5dAk=
golang.org/x/time v0.0.0-20200630173020-3af7569d3a1e h1:EHBhcS0mlXEAVwNyO2dLfjToGsyY4j24pTs2ScHnX7s=
@@ -153,6 +174,7 @@ golang.org/x/tools v0.0.0-20190114222345-bf090417da8b/go.mod h1:n7NCudcB/nEzxVGm
golang.org/x/tools v0.0.0-20190226205152-f727befe758c/go.mod h1:9Yl7xja0Znq3iFh3HoIrodX9oNMXvdceNzlUR8zjMvY=
golang.org/x/tools v0.0.0-20190311212946-11955173bddd/go.mod h1:LCzVGOaR6xXOjkQ3onu1FJEFr0SW1gC7cKk1uF8kGRs=
golang.org/x/tools v0.0.0-20190524140312-2c0ae7006135/go.mod h1:RgjU9mgBXZiqYHBnxXauZ1Gv1EHHAz9KjViQ78xBX0Q=
+golang.org/x/xerrors v0.0.0-20191204190536-9bdfabe68543 h1:E7g+9GITq07hpfrRu66IVDexMakfv52eLZ2CXBWiKr4=
golang.org/x/xerrors v0.0.0-20191204190536-9bdfabe68543/go.mod h1:I/5z698sn9Ka8TeJc9MKroUUfqBBauWjQqLJ2OPfmY0=
google.golang.org/appengine v1.1.0/go.mod h1:EbEs0AVv82hx2wNQdGPgUI5lhzA/G0D9YwlJXL52JkM=
google.golang.org/appengine v1.4.0/go.mod h1:xpcJRLb0r/rnEns0DIKYYv+WjYCduHsrkT7/EB5XEv4=
@@ -172,6 +194,7 @@ google.golang.org/protobuf v1.23.0/go.mod h1:EGpADcykh3NcUnDUJcl1+ZksZNG86OlYog2
google.golang.org/protobuf v1.23.1-0.20200526195155-81db48ad09cc/go.mod h1:EGpADcykh3NcUnDUJcl1+ZksZNG86OlYog2l/sGQquU=
google.golang.org/protobuf v1.25.0 h1:Ejskq+SyPohKW+1uil0JJMtmHCgJPJ/qWTxr8qp+R4c=
google.golang.org/protobuf v1.25.0/go.mod h1:9JNX74DMeImyA3h4bdi1ymwjUzf21/xIlbajtzgsN7c=
+gopkg.in/check.v1 v0.0.0-20161208181325-20d25e280405 h1:yhCVgyC4o1eVCa2tZl7eS0r+SDo693bJlVdllGtEeKM=
gopkg.in/check.v1 v0.0.0-20161208181325-20d25e280405/go.mod h1:Co6ibVJAznAaIkqp8huTwlJQCZ016jof/cbN4VW5Yz0=
gopkg.in/go-playground/assert.v1 v1.2.1/go.mod h1:9RXL0bg/zibRAgZUYszZSwO/z8Y/a8bDuhia5mkpMnE=
gopkg.in/go-playground/validator.v9 v9.29.1/go.mod h1:+c9/zcJMFNgbLvly1L1V+PpxWdVbfP1avr/N00E2vyQ=
diff --git a/server/apiAdmin.go b/server/apiAdmin.go
index 97b8d79..0767920 100644
--- a/server/apiAdmin.go
+++ b/server/apiAdmin.go
@@ -157,6 +157,7 @@ func (s *webServer) Dologin() {
}
log.Info("正在加载事件过滤器.")
global.BootFilter()
+ global.InitCodec()
coolq.IgnoreInvalidCQCode = conf.IgnoreInvalidCQCode
coolq.ForceFragmented = conf.ForceFragmented
log.Info("资源初始化完成, 开始处理信息.")
diff --git a/server/http.go b/server/http.go
index 650227e..c02e173 100644
--- a/server/http.go
+++ b/server/http.go
@@ -22,7 +22,7 @@ import (
type httpServer struct {
engine *gin.Engine
bot *coolq.CQBot
- Http *http.Server
+ Http *http.Server
}
type httpClient struct {
@@ -81,9 +81,9 @@ func (s *httpServer) Run(addr, authToken string, bot *coolq.CQBot) {
go func() {
log.Infof("CQ HTTP 服务器已启动: %v", addr)
- s.Http=&http.Server{
- Addr:addr,
- Handler:s.engine,
+ s.Http = &http.Server{
+ Addr: addr,
+ Handler: s.engine,
}
if err := s.Http.ListenAndServe(); err != nil && err != http.ErrServerClosed {
log.Error(err)
@@ -553,4 +553,4 @@ func (s *httpServer) ShutDown() {
log.Println("timeout of 5 seconds.")
}
log.Println("http Server exiting")
-}
\ No newline at end of file
+}
From a979c465631224895a738bc4e1a654c325c0b646 Mon Sep 17 00:00:00 2001
From: Mrs4s <1844812067@qq.com>
Date: Thu, 8 Oct 2020 15:52:33 +0800
Subject: [PATCH 062/367] update MiraiGo.
---
go.mod | 2 +-
go.sum | 6 ++++++
server/apiAdmin.go | 51 +++++++++++++++++++++++++++++++++++++++++++++-
3 files changed, 57 insertions(+), 2 deletions(-)
diff --git a/go.mod b/go.mod
index 7d2fe61..cd826f9 100644
--- a/go.mod
+++ b/go.mod
@@ -3,7 +3,7 @@ module github.com/Mrs4s/go-cqhttp
go 1.14
require (
- github.com/Mrs4s/MiraiGo v0.0.0-20201005155759-f9b3c399e5e0
+ github.com/Mrs4s/MiraiGo v0.0.0-20201008075030-5a7da6298521
github.com/fastly/go-utils v0.0.0-20180712184237-d95a45783239 // indirect
github.com/gin-gonic/gin v1.6.3
github.com/go-playground/validator/v10 v10.4.0 // indirect
diff --git a/go.sum b/go.sum
index cd68cf0..52bad13 100644
--- a/go.sum
+++ b/go.sum
@@ -1,5 +1,11 @@
cloud.google.com/go v0.26.0/go.mod h1:aQUYkXzVsufM+DwF1aE+0xfcU+56JwCaLick0ClmMTw=
github.com/BurntSushi/toml v0.3.1/go.mod h1:xHWCNGjB5oqiDr8zfno3MHue2Ht5sIBksp03qcyfWMU=
+github.com/Mrs4s/MiraiGo v0.0.0-20201005155759-f9b3c399e5e0 h1:sduD7+a96T7ANQSjvqvmjSREq1eXhm4RQVuHeoV/QQo=
+github.com/Mrs4s/MiraiGo v0.0.0-20201005155759-f9b3c399e5e0/go.mod h1:cwYPI2uq6nxNbx0nA6YuAKF1V5szSs6FPlGVLQvRUlo=
+github.com/Mrs4s/MiraiGo v0.0.0-20201008071514-e1f2ae7f80ed h1:JcK6nr0t9S8uO5IQWJ6+xkG5cT0orhULK2+k25kt+uE=
+github.com/Mrs4s/MiraiGo v0.0.0-20201008071514-e1f2ae7f80ed/go.mod h1:cwYPI2uq6nxNbx0nA6YuAKF1V5szSs6FPlGVLQvRUlo=
+github.com/Mrs4s/MiraiGo v0.0.0-20201008075030-5a7da6298521 h1:4wJgQDor9dwZLnxFkv9/ohjPk4wOA17sbjwBm520t0k=
+github.com/Mrs4s/MiraiGo v0.0.0-20201008075030-5a7da6298521/go.mod h1:cwYPI2uq6nxNbx0nA6YuAKF1V5szSs6FPlGVLQvRUlo=
github.com/bwmarrin/snowflake v0.3.0 h1:xm67bEhkKh6ij1790JB83OujPR5CzNe8QuQqAgISZN0=
github.com/bwmarrin/snowflake v0.3.0/go.mod h1:NdZxfVWX+oR6y2K0o6qAYv6gIOP9rjG0/E9WsDpxqwE=
github.com/census-instrumentation/opencensus-proto v0.2.1/go.mod h1:f6KPmirojxKA12rnyqOA5BBL4O983OfeGPqjHWSTneU=
diff --git a/server/apiAdmin.go b/server/apiAdmin.go
index 0767920..1c7a72f 100644
--- a/server/apiAdmin.go
+++ b/server/apiAdmin.go
@@ -98,12 +98,24 @@ func (s *webServer) Dologin() {
s.Console = bufio.NewReader(os.Stdin)
conf := GetConf()
cli := s.Cli
+ cli.AllowSlider = true
rsp, err := cli.Login()
for {
global.Check(err)
var text string
if !rsp.Success {
switch rsp.Error {
+ case client.SliderNeededError:
+ if client.SystemDeviceInfo.Protocol == client.AndroidPhone {
+ log.Warnf("警告: Android Phone 强制要求暂不支持得滑条验证码, 请开启设备锁或切换到Android Pad协议验证通过后再使用Phone协议.")
+ log.Infof("按 Enter 继续....")
+ _, _ = s.Console.ReadString('\n')
+ os.Exit(0)
+ }
+ cli.AllowSlider = false
+ cli.Disconnect()
+ rsp, err = cli.Login()
+ continue
case client.NeedCaptcha:
_ = ioutil.WriteFile("captcha.jpg", rsp.CaptchaImage, 0644)
img, _, _ := image.Decode(bytes.NewReader(rsp.CaptchaImage))
@@ -118,6 +130,40 @@ func (s *webServer) Dologin() {
rsp, err = cli.SubmitCaptcha(strings.ReplaceAll(text, "\n", ""), rsp.CaptchaSign)
global.DelFile("captcha.jpg")
continue
+ case client.SNSNeededError:
+ log.Warnf("账号已开启设备锁, 按下 Enter 向手机 %v 发送短信验证码.", rsp.SMSPhone)
+ _, _ = s.Console.ReadString('\n')
+ if !cli.RequestSNS() {
+ log.Warnf("发送验证码失败,可能是请求过于频繁.")
+ time.Sleep(time.Second * 5)
+ os.Exit(0)
+ }
+ log.Warn("请输入短信验证码: (Enter 提交)")
+ text, _ = s.Console.ReadString('\n')
+ rsp, err = cli.SubmitSNS(strings.ReplaceAll(strings.ReplaceAll(text, "\n", ""), "\r", ""))
+ continue
+ case client.SNSOrVerifyNeededError:
+ log.Warnf("账号已开启设备锁,请选择验证方式:")
+ log.Warnf("1. 向手机 %v 发送短信验证码", rsp.SMSPhone)
+ log.Warnf("2. 使用手机QQ扫码验证.")
+ log.Warn("请输入(1 - 2): ")
+ text, _ = s.Console.ReadString('\n')
+ if strings.Contains(text, "1") {
+ if !cli.RequestSNS() {
+ log.Warnf("发送验证码失败,可能是请求过于频繁.")
+ time.Sleep(time.Second * 5)
+ os.Exit(0)
+ }
+ log.Warn("请输入短信验证码: (Enter 提交)")
+ text, _ = s.Console.ReadString('\n')
+ rsp, err = cli.SubmitSNS(strings.ReplaceAll(strings.ReplaceAll(text, "\n", ""), "\r", ""))
+ continue
+ }
+ log.Warnf("请前往 -> %v <- 验证并重启Bot.", rsp.VerifyUrl)
+ log.Infof(" 按 Enter 继续....")
+ _, _ = s.Console.ReadString('\n')
+ os.Exit(0)
+ return
case client.UnsafeDeviceError:
log.Warnf("账号已开启设备锁,请前往 -> %v <- 验证并重启Bot.", rsp.VerifyUrl)
if conf.WebUi.WebInput {
@@ -131,7 +177,10 @@ func (s *webServer) Dologin() {
os.Exit(0)
return
case client.OtherLoginError, client.UnknownLoginError:
- log.Fatalf("登录失败: %v", rsp.ErrorMessage)
+ log.Warnf("登录失败: %v", rsp.ErrorMessage)
+ log.Infof(" 按 Enter 继续....")
+ _, _ = s.Console.ReadString('\n')
+ os.Exit(0)
return
}
}
From 6879197107dadb71d44b08c4b7cc50c7ef4e8313 Mon Sep 17 00:00:00 2001
From: Mrs4s <1844812067@qq.com>
Date: Thu, 8 Oct 2020 15:54:40 +0800
Subject: [PATCH 063/367] fix typo.
---
server/apiAdmin.go | 6 +++---
1 file changed, 3 insertions(+), 3 deletions(-)
diff --git a/server/apiAdmin.go b/server/apiAdmin.go
index 1c7a72f..2e0bcc2 100644
--- a/server/apiAdmin.go
+++ b/server/apiAdmin.go
@@ -160,7 +160,7 @@ func (s *webServer) Dologin() {
continue
}
log.Warnf("请前往 -> %v <- 验证并重启Bot.", rsp.VerifyUrl)
- log.Infof(" 按 Enter 继续....")
+ log.Infof("按 Enter 继续....")
_, _ = s.Console.ReadString('\n')
os.Exit(0)
return
@@ -170,7 +170,7 @@ func (s *webServer) Dologin() {
log.Infof(" (http://%s:%d/admin/do_web_write 确认后继续)....", conf.WebUi.Host, conf.WebUi.WebUiPort)
text = <-WebInput
} else {
- log.Infof(" 按 Enter 继续....")
+ log.Infof("按 Enter 继续....")
_, _ = s.Console.ReadString('\n')
}
log.Info(text)
@@ -178,7 +178,7 @@ func (s *webServer) Dologin() {
return
case client.OtherLoginError, client.UnknownLoginError:
log.Warnf("登录失败: %v", rsp.ErrorMessage)
- log.Infof(" 按 Enter 继续....")
+ log.Infof("按 Enter 继续....")
_, _ = s.Console.ReadString('\n')
os.Exit(0)
return
From 9d58c56b35c4f29d0f59374aa29a7104d7be63d0 Mon Sep 17 00:00:00 2001
From: Mrs4s <1844812067@qq.com>
Date: Thu, 8 Oct 2020 21:38:03 +0800
Subject: [PATCH 064/367] fix typo.
---
server/apiAdmin.go | 2 +-
1 file changed, 1 insertion(+), 1 deletion(-)
diff --git a/server/apiAdmin.go b/server/apiAdmin.go
index 2e0bcc2..cb092cd 100644
--- a/server/apiAdmin.go
+++ b/server/apiAdmin.go
@@ -107,7 +107,7 @@ func (s *webServer) Dologin() {
switch rsp.Error {
case client.SliderNeededError:
if client.SystemDeviceInfo.Protocol == client.AndroidPhone {
- log.Warnf("警告: Android Phone 强制要求暂不支持得滑条验证码, 请开启设备锁或切换到Android Pad协议验证通过后再使用Phone协议.")
+ log.Warnf("警告: Android Phone 强制要求暂不支持的滑条验证码, 请开启设备锁或切换到Watch协议验证通过后再使用.")
log.Infof("按 Enter 继续....")
_, _ = s.Console.ReadString('\n')
os.Exit(0)
From 73bd756c2012511b7edfb35ae2bcd4d6b5ed7121 Mon Sep 17 00:00:00 2001
From: Mrs4s <1844812067@qq.com>
Date: Thu, 8 Oct 2020 22:48:47 +0800
Subject: [PATCH 065/367] fix #341.
---
coolq/bot.go | 38 ++++++++++++++++++++++++++++++++++++++
coolq/cqcode.go | 41 +++++++++++++++++++++++++++++++++++++----
go.mod | 2 +-
go.sum | 32 ++------------------------------
server/apiAdmin.go | 12 ++++++------
5 files changed, 84 insertions(+), 41 deletions(-)
diff --git a/coolq/bot.go b/coolq/bot.go
index 7e75080..fc81240 100644
--- a/coolq/bot.go
+++ b/coolq/bot.go
@@ -151,6 +151,44 @@ func (bot *CQBot) SendGroupMessage(groupId int64, m *message.SendingMessage) int
bot.Client.SendGroupGift(uint64(groupId), uint64(i.Target), i.GiftId)
return 0
}
+ if i, ok := elem.(*QQMusicElement); ok {
+ ret, err := bot.Client.SendGroupRichMessage(groupId, 100497308, 1, 4, client.RichClientInfo{
+ Platform: 1,
+ SdkVersion: "0.0.0",
+ PackageName: "com.tencent.qqmusic",
+ Signature: "cbd27cd7c861227d013a25b2d10f0799",
+ }, &message.RichMessage{
+ Title: i.Title,
+ Summary: i.Summary,
+ Url: i.Url,
+ PictureUrl: i.PictureUrl,
+ MusicUrl: i.MusicUrl,
+ })
+ if err != nil {
+ log.Warnf("警告: 群 %v 富文本消息发送失败: %v", groupId, err)
+ return -1
+ }
+ return bot.InsertGroupMessage(ret)
+ }
+ if i, ok := elem.(*CloudMusicElement); ok {
+ ret, err := bot.Client.SendGroupRichMessage(groupId, 100495085, 1, 4, client.RichClientInfo{
+ Platform: 1,
+ SdkVersion: "0.0.0",
+ PackageName: "com.netease.cloudmusic",
+ Signature: "da6b069da1e2982db3e386233f68d76d",
+ }, &message.RichMessage{
+ Title: i.Title,
+ Summary: i.Summary,
+ Url: i.Url,
+ PictureUrl: i.PictureUrl,
+ MusicUrl: i.MusicUrl,
+ })
+ if err != nil {
+ log.Warnf("警告: 群 %v 富文本消息发送失败: %v", groupId, err)
+ return -1
+ }
+ return bot.InsertGroupMessage(ret)
+ }
newElem = append(newElem, elem)
}
m.Elements = newElem
diff --git a/coolq/cqcode.go b/coolq/cqcode.go
index a927cdb..e04eff6 100644
--- a/coolq/cqcode.go
+++ b/coolq/cqcode.go
@@ -35,10 +35,30 @@ type GiftElement struct {
GiftId message.GroupGift
}
+type MusicElement struct {
+ Title string
+ Summary string
+ Url string
+ PictureUrl string
+ MusicUrl string
+}
+
+type QQMusicElement struct {
+ MusicElement
+}
+
+type CloudMusicElement struct {
+ MusicElement
+}
+
func (e *GiftElement) Type() message.ElementType {
return message.At
}
+func (e *MusicElement) Type() message.ElementType {
+ return message.Service
+}
+
var GiftId = []message.GroupGift{
message.SweetWink,
message.HappyCola,
@@ -429,8 +449,16 @@ func (bot *CQBot) ToElement(t string, d map[string]string, group bool) (message.
if d["content"] != "" {
content = d["content"]
}
- json := fmt.Sprintf("{\"app\": \"com.tencent.structmsg\",\"desc\": \"音乐\",\"meta\": {\"music\": {\"desc\": \"%s\",\"jumpUrl\": \"%s\",\"musicUrl\": \"%s\",\"preview\": \"%s\",\"tag\": \"QQ音乐\",\"title\": \"%s\"}},\"prompt\": \"[分享]%s\",\"ver\": \"0.0.0.1\",\"view\": \"music\"}", content, jumpUrl, purl, preview, name, name)
- return message.NewLightApp(json), nil
+ if purl == "" {
+ purl = "https://www.baidu.com" // fix vip song
+ }
+ return &QQMusicElement{MusicElement: MusicElement{
+ Title: name,
+ Summary: content,
+ Url: jumpUrl,
+ PictureUrl: preview,
+ MusicUrl: purl,
+ }}, nil
}
if d["type"] == "163" {
info, err := global.NeteaseMusicSongInfo(d["id"])
@@ -448,8 +476,13 @@ func (bot *CQBot) ToElement(t string, d map[string]string, group bool) (message.
if info.Get("artists.0").Exists() {
artistName = info.Get("artists.0.name").Str
}
- json := fmt.Sprintf("{\"app\": \"com.tencent.structmsg\",\"desc\":\"音乐\",\"view\":\"music\",\"prompt\":\"[分享]%s\",\"ver\":\"0.0.0.1\",\"meta\":{ \"music\": { \"desc\": \"%s\", \"jumpUrl\": \"%s\", \"musicUrl\": \"%s\", \"preview\": \"%s\", \"tag\": \"网易云音乐\", \"title\":\"%s\"}}}", name, artistName, jumpUrl, musicUrl, picUrl, name)
- return message.NewLightApp(json), nil
+ return &CloudMusicElement{MusicElement{
+ Title: name,
+ Summary: artistName,
+ Url: jumpUrl,
+ PictureUrl: picUrl,
+ MusicUrl: musicUrl,
+ }}, nil
}
if d["type"] == "custom" {
xml := fmt.Sprintf(`- %s%s
`,
diff --git a/go.mod b/go.mod
index cd826f9..b6d0a55 100644
--- a/go.mod
+++ b/go.mod
@@ -3,7 +3,7 @@ module github.com/Mrs4s/go-cqhttp
go 1.14
require (
- github.com/Mrs4s/MiraiGo v0.0.0-20201008075030-5a7da6298521
+ github.com/Mrs4s/MiraiGo v0.0.0-20201008134448-b53aaceaa1b4
github.com/fastly/go-utils v0.0.0-20180712184237-d95a45783239 // indirect
github.com/gin-gonic/gin v1.6.3
github.com/go-playground/validator/v10 v10.4.0 // indirect
diff --git a/go.sum b/go.sum
index 52bad13..c92b4de 100644
--- a/go.sum
+++ b/go.sum
@@ -1,28 +1,21 @@
cloud.google.com/go v0.26.0/go.mod h1:aQUYkXzVsufM+DwF1aE+0xfcU+56JwCaLick0ClmMTw=
github.com/BurntSushi/toml v0.3.1/go.mod h1:xHWCNGjB5oqiDr8zfno3MHue2Ht5sIBksp03qcyfWMU=
-github.com/Mrs4s/MiraiGo v0.0.0-20201005155759-f9b3c399e5e0 h1:sduD7+a96T7ANQSjvqvmjSREq1eXhm4RQVuHeoV/QQo=
-github.com/Mrs4s/MiraiGo v0.0.0-20201005155759-f9b3c399e5e0/go.mod h1:cwYPI2uq6nxNbx0nA6YuAKF1V5szSs6FPlGVLQvRUlo=
-github.com/Mrs4s/MiraiGo v0.0.0-20201008071514-e1f2ae7f80ed h1:JcK6nr0t9S8uO5IQWJ6+xkG5cT0orhULK2+k25kt+uE=
-github.com/Mrs4s/MiraiGo v0.0.0-20201008071514-e1f2ae7f80ed/go.mod h1:cwYPI2uq6nxNbx0nA6YuAKF1V5szSs6FPlGVLQvRUlo=
-github.com/Mrs4s/MiraiGo v0.0.0-20201008075030-5a7da6298521 h1:4wJgQDor9dwZLnxFkv9/ohjPk4wOA17sbjwBm520t0k=
-github.com/Mrs4s/MiraiGo v0.0.0-20201008075030-5a7da6298521/go.mod h1:cwYPI2uq6nxNbx0nA6YuAKF1V5szSs6FPlGVLQvRUlo=
+github.com/Mrs4s/MiraiGo v0.0.0-20201008134448-b53aaceaa1b4 h1:vNDY7JAh+e7ac0Dft3GF+s4WZU55SZkwaAI7UmXfwHc=
+github.com/Mrs4s/MiraiGo v0.0.0-20201008134448-b53aaceaa1b4/go.mod h1:cwYPI2uq6nxNbx0nA6YuAKF1V5szSs6FPlGVLQvRUlo=
github.com/bwmarrin/snowflake v0.3.0 h1:xm67bEhkKh6ij1790JB83OujPR5CzNe8QuQqAgISZN0=
github.com/bwmarrin/snowflake v0.3.0/go.mod h1:NdZxfVWX+oR6y2K0o6qAYv6gIOP9rjG0/E9WsDpxqwE=
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=
-github.com/davecgh/go-spew v1.1.1 h1:vj9j/u1bqnvCEfJOwUhtlOARqs3+rkHYY13jYWTU97c=
github.com/davecgh/go-spew v1.1.1/go.mod h1:J7Y8YcW2NihsgmVo/mv3lAwl/skON4iLHjSsI+c5H38=
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/gin-contrib/sse v0.1.0 h1:Y/yl/+YNO8GZSjAhjMsSuLt29uWRFHdHYUb5lYOV9qE=
github.com/gin-contrib/sse v0.1.0/go.mod h1:RHrZQHXnP2xjPF+u1gW/2HnVO7nvIa9PG3Gm+fLHvGI=
github.com/gin-gonic/gin v1.5.0/go.mod h1:Nd6IXA8m5kNZdNEHMBd93KT+mdY3+bewLgRvmCsR2Do=
github.com/gin-gonic/gin v1.6.3 h1:ahKqKTFpO5KTPHxWZjEdPScmYaGtLo8Y4DMHoEsnp14=
github.com/gin-gonic/gin v1.6.3/go.mod h1:75u5sXoLsGZoRN5Sgbi1eraJ4GU3++wFwWzhwvtwp4M=
-github.com/go-playground/assert/v2 v2.0.1 h1:MsBgLAaY856+nPRTKrp3/OZK38U/wa0CcBYNjji3q3A=
github.com/go-playground/assert/v2 v2.0.1/go.mod h1:VDjEfimB/XKnb+ZQfWdccd7VUvScMdVu0Titje2rxJ4=
github.com/go-playground/locales v0.12.1/go.mod h1:IUMDtCfWo/w/mtMfIE/IG2K+Ey3ygWanZIBtBW0W2TM=
github.com/go-playground/locales v0.13.0 h1:HyWk6mgj5qFqCT5fjGBuRArbVDfE4hi8+e8ceBS/t7Q=
@@ -50,28 +43,22 @@ github.com/google/go-cmp v0.2.0/go.mod h1:oXzfMopK8JAjlY9xF4vHSVASa0yLyX7SntLO5a
github.com/google/go-cmp v0.3.0/go.mod h1:8QqcDgzrUqlUb/G2PQTWiueGozuR1884gddMywk6iLU=
github.com/google/go-cmp v0.3.1/go.mod h1:8QqcDgzrUqlUb/G2PQTWiueGozuR1884gddMywk6iLU=
github.com/google/go-cmp v0.4.0/go.mod h1:v8dTdLbMG2kIc/vJvl+f65V22dbkXbowE6jgT/gNBxE=
-github.com/google/go-cmp v0.5.0 h1:/QaMHBdZ26BB3SSst0Iwl10Epc+xhTquomWX0oZEB6w=
github.com/google/go-cmp v0.5.0/go.mod h1:v8dTdLbMG2kIc/vJvl+f65V22dbkXbowE6jgT/gNBxE=
github.com/google/gofuzz v1.0.0/go.mod h1:dBl0BpW6vV/+mYPU4Po3pmUjxk6FQPldtuIdl/M65Eg=
-github.com/google/uuid v1.1.1 h1:Gkbcsh/GbpXz7lPftLA3P6TYMwjCLYm83jiFQZF/3gY=
github.com/google/uuid v1.1.1/go.mod h1:TIyPZe4MgqvfeYDBFedMoGGpEw/LqOeaOT+nhxU+yHo=
github.com/gorilla/websocket v1.4.2 h1:+/TMaTYc4QFitKJxsQ7Yye35DkWvkdLcvGKqM+x0Ufc=
github.com/gorilla/websocket v1.4.2/go.mod h1:YR8l580nyteQvAITg2hZ9XVh4b55+EU/adAjf1fMHhE=
github.com/guonaihong/gout v0.1.2 h1:TR2XCRopGgJdj231IayEoeavgbznFXzzzcZVdT/hG10=
github.com/guonaihong/gout v0.1.2/go.mod h1:vXvv5Kxr70eM5wrp4F0+t9lnLWmq+YPW2GByll2f/EA=
-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.0 h1:J2SLSdy7HgElq8ekSl2Mxh6vrRNFxqbXGenYH2I02Vs=
github.com/jonboulle/clockwork v0.2.0/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/json-iterator/go v1.1.10 h1:Kz6Cvnvv2wGdaG/V8yMvfkmNiXq9Ya2KUv4rouJJr68=
github.com/json-iterator/go v1.1.10/go.mod h1:KdQUCv79m/52Kvf8AW2vK1V8akMuk1QjK/uOdHXbAo4=
github.com/konsorten/go-windows-terminal-sequences v1.0.1/go.mod h1:T0+1ngSBFLxvqU3pZ+m/2kptfBszLMUkC4ZK/EgS/cQ=
github.com/leodido/go-urn v1.1.0/go.mod h1:+cyI34gQWZcE1eQU7NVgKkkzdXDQHr1dBMtdAPozLkw=
github.com/leodido/go-urn v1.2.0 h1:hpXL4XnriNwQ/ABnpepYM/1vCLWNDfUNts8dX3xTG6Y=
github.com/leodido/go-urn v1.2.0/go.mod h1:+8+nEpDfqqsY+g338gtMEUOtuK+4dEMhiQEgxpxOKII=
-github.com/lestrrat-go/envload v0.0.0-20180220234015-a3eb8ddeffcc h1:RKf14vYWi2ttpEmkA4aQ3j4u9dStX2t4M8UM6qqNsG8=
github.com/lestrrat-go/envload v0.0.0-20180220234015-a3eb8ddeffcc/go.mod h1:kopuH9ugFRkIXf3YoqHKyrJ9YfUFsckUU9S7B+XP+is=
github.com/lestrrat-go/file-rotatelogs v2.4.0+incompatible h1:Y6sqxHMyB1D2YSzWkLibYKgg+SwmyFU9dF2hn6MdTj4=
github.com/lestrrat-go/file-rotatelogs v2.4.0+incompatible/go.mod h1:ZQnN8lSECaebrkQytbHj4xNgtg8CR7RYXnPok8e0EHA=
@@ -81,17 +68,14 @@ github.com/mattn/go-isatty v0.0.9/go.mod h1:YNRxwqDuOph6SZLI9vUUz6OYw3QyUt7WiY2y
github.com/mattn/go-isatty v0.0.12 h1:wuysRhFDzyxgEmMf5xjvJ2M9dZoWAXNNr5LSBS7uHXY=
github.com/mattn/go-isatty v0.0.12/go.mod h1:cbi8OIDigv2wuxKPP5vlRcQ1OAZbq2CE4Kysco4FUpU=
github.com/modern-go/concurrent v0.0.0-20180228061459-e0a39a4cb421/go.mod h1:6dJC0mAP4ikYIbvyc7fijjWJddQyLn8Ig3JB5CqoB9Q=
-github.com/modern-go/concurrent v0.0.0-20180306012644-bacd9c7ef1dd h1:TRLaZ9cD/w8PVh93nsPXa1VrQ6jlwL5oN8l14QlcNfg=
github.com/modern-go/concurrent v0.0.0-20180306012644-bacd9c7ef1dd/go.mod h1:6dJC0mAP4ikYIbvyc7fijjWJddQyLn8Ig3JB5CqoB9Q=
github.com/modern-go/reflect2 v0.0.0-20180701023420-4b7aa43c6742/go.mod h1:bx2lNnkwVCuqBIxFjflWJWanXIb3RllmbCylyMrvgv0=
-github.com/modern-go/reflect2 v1.0.1 h1:9f412s+6RmYXLWZSEzVVgPGK7C2PphHj5RJrvfx9AWI=
github.com/modern-go/reflect2 v1.0.1/go.mod h1:bx2lNnkwVCuqBIxFjflWJWanXIb3RllmbCylyMrvgv0=
github.com/nfnt/resize v0.0.0-20180221191011-83c6a9932646 h1:zYyBkD/k9seD2A7fsi6Oo2LfFZAehjjQMERAvZLEDnQ=
github.com/nfnt/resize v0.0.0-20180221191011-83c6a9932646/go.mod h1:jpp1/29i3P1S/RLdc7JQKbRpFeM1dOBd8T9ki5s+AY8=
github.com/pkg/errors v0.8.1/go.mod h1:bwawxfHBFNV+L2hUp1rHADufV3IMtnDRdf1r5NINEl0=
github.com/pkg/errors v0.9.1 h1:FEBLx1zS214owpjy7qsBeixbURkuhQAwrK5UwLGTwt4=
github.com/pkg/errors v0.9.1/go.mod h1:bwawxfHBFNV+L2hUp1rHADufV3IMtnDRdf1r5NINEl0=
-github.com/pmezard/go-difflib v1.0.0 h1:4DBwDE0NGyQoBHbLQYPwSUPoCMWR5BEzIk/f1lZbAQM=
github.com/pmezard/go-difflib v1.0.0/go.mod h1:iKH77koFhYxTK1pcRnkKkqfTogsbg7gZNVY4sRDYZ/4=
github.com/prometheus/client_model v0.0.0-20190812154241-14fe0d1b01d4/go.mod h1:xMI15A0UPsDsEKsMN9yxemIoYk6Tm2C1GtYGdfGttqA=
github.com/rifflock/lfshook v0.0.0-20180920164130-b9218ef580f5 h1:mZHayPoR0lNmnHyvtYjDeq0zlVHn9K/ZXoy17ylucdo=
@@ -103,11 +87,9 @@ github.com/stretchr/objx v0.1.0/go.mod h1:HFkY916IF+rwdDfMAkV7OtwuqBVzrE8GR6GFx+
github.com/stretchr/objx v0.1.1/go.mod h1:HFkY916IF+rwdDfMAkV7OtwuqBVzrE8GR6GFx+wExME=
github.com/stretchr/testify v1.2.2/go.mod h1:a8OnRcib4nhh0OaRAV+Yts87kKdq0PP7pXfy6kDkUVs=
github.com/stretchr/testify v1.3.0/go.mod h1:M5WIy9Dh21IEIfnGCwXGc5bZfKNJtfHm1UVUgZn+9EI=
-github.com/stretchr/testify v1.4.0 h1:2E4SXV/wtOkTonXsotYi4li6zVWxYlZuYNCXe9XRJyk=
github.com/stretchr/testify v1.4.0/go.mod h1:j7eGeouHqKxXV5pUuKE4zz7dFj8WfuZ+81PSLYec5m4=
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 h1:LRbvNuNuvAiISWg6gxLEFuCe72UKy5hDqhxW/8183ws=
github.com/tidwall/gjson v1.6.1/go.mod h1:BaHyNc5bjzYkPqgLq7mdVzeiRtULKULXLgZFKsxEHI0=
@@ -115,18 +97,12 @@ github.com/tidwall/match v1.0.1 h1:PnKP62LPNxHKTwvHHZZzdOAOCtsJTjo6dZLCwpKm5xc=
github.com/tidwall/match v1.0.1/go.mod h1:LujAq0jyVjBy028G1WhWfIzbpQfMO8bBZ6Tyb0+pL9E=
github.com/tidwall/pretty v1.0.2 h1:Z7S3cePv9Jwm1KwS0513MRaoUe3S01WPbLNV40pwWZU=
github.com/tidwall/pretty v1.0.2/go.mod h1:XNkn88O1ChpSDQmQeStsy+sBenx6DDtFZJxhVysOjyk=
-github.com/ugorji/go v1.1.7 h1:/68gy2h+1mWMrwZFeD1kQialdSzAb432dtpeJ42ovdo=
github.com/ugorji/go v1.1.7/go.mod h1:kZn38zHttfInRq0xu/PH0az30d+z6vm202qpg1oXVMw=
github.com/ugorji/go v1.1.10 h1:Mh7W3N/hGJJ8fRQNHIgomNTa0CgZc0aKDFvbgHl+U7A=
github.com/ugorji/go v1.1.10/go.mod h1:/tC+H0R6N4Lcv4DoSdphIa9y/RAs4QFHDtN9W2oQcHw=
-github.com/ugorji/go/codec v1.1.7 h1:2SvQaVZ1ouYrrKKwoSk2pzd4A9evlKJb9oTL+OaLUSs=
github.com/ugorji/go/codec v1.1.7/go.mod h1:Ax+UKWsSmolVDwsd+7N3ZtXu+yMGCf907BLYF3GoBXY=
github.com/ugorji/go/codec v1.1.10 h1:otofY/FAoRTMVqlVeDv/Kpm04D13lfJdrDqPbc3axg4=
github.com/ugorji/go/codec v1.1.10/go.mod h1:jdPQoxvTq1mb8XV6RmofOz5UgNKV2czR6xvxXGwy1Bo=
-github.com/wdvxdr1123/go-silk v0.0.0-20201005163614-f79330a7d135 h1:UQlCEjbkMjL2sX5ruLdl1VjArsUqzUdZoXOC8DQM/o8=
-github.com/wdvxdr1123/go-silk v0.0.0-20201005163614-f79330a7d135/go.mod h1:5q9LFlBr+yX/J8Jd/9wHdXwkkjFkNyQIS7kX2Lgx/Zs=
-github.com/wdvxdr1123/go-silk v0.0.0-20201006012916-b6a6e0f00915 h1:OkqbIcMb6lT9xfyLvONscMJPzRsUC3zlLxLxiJxYzhg=
-github.com/wdvxdr1123/go-silk v0.0.0-20201006012916-b6a6e0f00915/go.mod h1:5q9LFlBr+yX/J8Jd/9wHdXwkkjFkNyQIS7kX2Lgx/Zs=
github.com/wdvxdr1123/go-silk v0.0.0-20201006020916-0398076200ea h1:OqkIV1VL5xm88jhXLaPHRJroeRknxN3EApcAVlNIIOw=
github.com/wdvxdr1123/go-silk v0.0.0-20201006020916-0398076200ea/go.mod h1:5q9LFlBr+yX/J8Jd/9wHdXwkkjFkNyQIS7kX2Lgx/Zs=
github.com/xujiajun/gorouter v1.2.0/go.mod h1:yJrIta+bTNpBM/2UT8hLOaEAFckO+m/qmR3luMIQygM=
@@ -139,7 +115,6 @@ github.com/xujiajun/utils v0.0.0-20190123093513-8bf096c4f53b/go.mod h1:AZd87GYJl
github.com/yinghau76/go-ascii-art v0.0.0-20190517192627-e7f465a30189 h1:4UJw9if55Fu3HOwbfcaQlJ27p3oeJU2JZqoeT3ITJQk=
github.com/yinghau76/go-ascii-art v0.0.0-20190517192627-e7f465a30189/go.mod h1:rIrm5geMiBhPQkdfUm8gDFi/WiHneOp1i9KjmJqc+9I=
golang.org/x/crypto v0.0.0-20190308221718-c2843e01d9a2/go.mod h1:djNgcEr1/C05ACkg1iLfiJU5Ep61QUkGW8qpdssI0+w=
-golang.org/x/crypto v0.0.0-20200622213623-75b288015ac9 h1:psW17arqaxU48Z5kZ0CQnkZWQJsqcURM6tKiBApRjXI=
golang.org/x/crypto v0.0.0-20200622213623-75b288015ac9/go.mod h1:LzIPMQfyMNhhGPhUkYOs5KpL4U8rLKemX1yGLhDgUto=
golang.org/x/crypto v0.0.0-20201002170205-7f63de1d35b0 h1:hb9wdF1z5waM+dSIICn1l0DkLVDT3hqhhQsDNUmHPRE=
golang.org/x/crypto v0.0.0-20201002170205-7f63de1d35b0/go.mod h1:LzIPMQfyMNhhGPhUkYOs5KpL4U8rLKemX1yGLhDgUto=
@@ -167,7 +142,6 @@ golang.org/x/sys v0.0.0-20190422165155-953cdadca894/go.mod h1:h1NjWce9XRLGQEsW7w
golang.org/x/sys v0.0.0-20190813064441-fde4db37ae7a/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs=
golang.org/x/sys v0.0.0-20191026070338-33540a1f6037/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs=
golang.org/x/sys v0.0.0-20200116001909-b77594299b42/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs=
-golang.org/x/sys v0.0.0-20200930185726-fdedc70b468f h1:+Nyd8tzPX9R7BWHguqsrbFdRx3WQ/1ib8I44HXV5yTA=
golang.org/x/sys v0.0.0-20200930185726-fdedc70b468f/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs=
golang.org/x/sys v0.0.0-20201005172224-997123666555 h1:fihtqzYxy4E31W1yUlyRGveTZT1JIP0bmKaDZ2ceKAw=
golang.org/x/sys v0.0.0-20201005172224-997123666555/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs=
@@ -180,7 +154,6 @@ golang.org/x/tools v0.0.0-20190114222345-bf090417da8b/go.mod h1:n7NCudcB/nEzxVGm
golang.org/x/tools v0.0.0-20190226205152-f727befe758c/go.mod h1:9Yl7xja0Znq3iFh3HoIrodX9oNMXvdceNzlUR8zjMvY=
golang.org/x/tools v0.0.0-20190311212946-11955173bddd/go.mod h1:LCzVGOaR6xXOjkQ3onu1FJEFr0SW1gC7cKk1uF8kGRs=
golang.org/x/tools v0.0.0-20190524140312-2c0ae7006135/go.mod h1:RgjU9mgBXZiqYHBnxXauZ1Gv1EHHAz9KjViQ78xBX0Q=
-golang.org/x/xerrors v0.0.0-20191204190536-9bdfabe68543 h1:E7g+9GITq07hpfrRu66IVDexMakfv52eLZ2CXBWiKr4=
golang.org/x/xerrors v0.0.0-20191204190536-9bdfabe68543/go.mod h1:I/5z698sn9Ka8TeJc9MKroUUfqBBauWjQqLJ2OPfmY0=
google.golang.org/appengine v1.1.0/go.mod h1:EbEs0AVv82hx2wNQdGPgUI5lhzA/G0D9YwlJXL52JkM=
google.golang.org/appengine v1.4.0/go.mod h1:xpcJRLb0r/rnEns0DIKYYv+WjYCduHsrkT7/EB5XEv4=
@@ -200,7 +173,6 @@ google.golang.org/protobuf v1.23.0/go.mod h1:EGpADcykh3NcUnDUJcl1+ZksZNG86OlYog2
google.golang.org/protobuf v1.23.1-0.20200526195155-81db48ad09cc/go.mod h1:EGpADcykh3NcUnDUJcl1+ZksZNG86OlYog2l/sGQquU=
google.golang.org/protobuf v1.25.0 h1:Ejskq+SyPohKW+1uil0JJMtmHCgJPJ/qWTxr8qp+R4c=
google.golang.org/protobuf v1.25.0/go.mod h1:9JNX74DMeImyA3h4bdi1ymwjUzf21/xIlbajtzgsN7c=
-gopkg.in/check.v1 v0.0.0-20161208181325-20d25e280405 h1:yhCVgyC4o1eVCa2tZl7eS0r+SDo693bJlVdllGtEeKM=
gopkg.in/check.v1 v0.0.0-20161208181325-20d25e280405/go.mod h1:Co6ibVJAznAaIkqp8huTwlJQCZ016jof/cbN4VW5Yz0=
gopkg.in/go-playground/assert.v1 v1.2.1/go.mod h1:9RXL0bg/zibRAgZUYszZSwO/z8Y/a8bDuhia5mkpMnE=
gopkg.in/go-playground/validator.v9 v9.29.1/go.mod h1:+c9/zcJMFNgbLvly1L1V+PpxWdVbfP1avr/N00E2vyQ=
diff --git a/server/apiAdmin.go b/server/apiAdmin.go
index cb092cd..0c896fe 100644
--- a/server/apiAdmin.go
+++ b/server/apiAdmin.go
@@ -130,33 +130,33 @@ func (s *webServer) Dologin() {
rsp, err = cli.SubmitCaptcha(strings.ReplaceAll(text, "\n", ""), rsp.CaptchaSign)
global.DelFile("captcha.jpg")
continue
- case client.SNSNeededError:
+ case client.SMSNeededError:
log.Warnf("账号已开启设备锁, 按下 Enter 向手机 %v 发送短信验证码.", rsp.SMSPhone)
_, _ = s.Console.ReadString('\n')
- if !cli.RequestSNS() {
+ if !cli.RequestSMS() {
log.Warnf("发送验证码失败,可能是请求过于频繁.")
time.Sleep(time.Second * 5)
os.Exit(0)
}
log.Warn("请输入短信验证码: (Enter 提交)")
text, _ = s.Console.ReadString('\n')
- rsp, err = cli.SubmitSNS(strings.ReplaceAll(strings.ReplaceAll(text, "\n", ""), "\r", ""))
+ rsp, err = cli.SubmitSMS(strings.ReplaceAll(strings.ReplaceAll(text, "\n", ""), "\r", ""))
continue
- case client.SNSOrVerifyNeededError:
+ case client.SMSOrVerifyNeededError:
log.Warnf("账号已开启设备锁,请选择验证方式:")
log.Warnf("1. 向手机 %v 发送短信验证码", rsp.SMSPhone)
log.Warnf("2. 使用手机QQ扫码验证.")
log.Warn("请输入(1 - 2): ")
text, _ = s.Console.ReadString('\n')
if strings.Contains(text, "1") {
- if !cli.RequestSNS() {
+ if !cli.RequestSMS() {
log.Warnf("发送验证码失败,可能是请求过于频繁.")
time.Sleep(time.Second * 5)
os.Exit(0)
}
log.Warn("请输入短信验证码: (Enter 提交)")
text, _ = s.Console.ReadString('\n')
- rsp, err = cli.SubmitSNS(strings.ReplaceAll(strings.ReplaceAll(text, "\n", ""), "\r", ""))
+ rsp, err = cli.SubmitSMS(strings.ReplaceAll(strings.ReplaceAll(text, "\n", ""), "\r", ""))
continue
}
log.Warnf("请前往 -> %v <- 验证并重启Bot.", rsp.VerifyUrl)
From 24937f238631a12bb07e520254d6bb4f40c554d0 Mon Sep 17 00:00:00 2001
From: Mrs4s <1844812067@qq.com>
Date: Thu, 8 Oct 2020 23:06:33 +0800
Subject: [PATCH 066/367] update go-silk.
---
go.mod | 2 +-
go.sum | 2 ++
2 files changed, 3 insertions(+), 1 deletion(-)
diff --git a/go.mod b/go.mod
index b6d0a55..8c00b3b 100644
--- a/go.mod
+++ b/go.mod
@@ -23,7 +23,7 @@ require (
github.com/tebeka/strftime v0.1.5 // indirect
github.com/tidwall/gjson v1.6.1
github.com/ugorji/go v1.1.10 // indirect
- github.com/wdvxdr1123/go-silk v0.0.0-20201006020916-0398076200ea
+ github.com/wdvxdr1123/go-silk v0.0.0-20201007123416-b982fd3d91d6
github.com/xujiajun/nutsdb v0.5.0
github.com/yinghau76/go-ascii-art v0.0.0-20190517192627-e7f465a30189
golang.org/x/crypto v0.0.0-20201002170205-7f63de1d35b0 // indirect
diff --git a/go.sum b/go.sum
index c92b4de..f2ce6e0 100644
--- a/go.sum
+++ b/go.sum
@@ -105,6 +105,8 @@ github.com/ugorji/go/codec v1.1.10 h1:otofY/FAoRTMVqlVeDv/Kpm04D13lfJdrDqPbc3axg
github.com/ugorji/go/codec v1.1.10/go.mod h1:jdPQoxvTq1mb8XV6RmofOz5UgNKV2czR6xvxXGwy1Bo=
github.com/wdvxdr1123/go-silk v0.0.0-20201006020916-0398076200ea h1:OqkIV1VL5xm88jhXLaPHRJroeRknxN3EApcAVlNIIOw=
github.com/wdvxdr1123/go-silk v0.0.0-20201006020916-0398076200ea/go.mod h1:5q9LFlBr+yX/J8Jd/9wHdXwkkjFkNyQIS7kX2Lgx/Zs=
+github.com/wdvxdr1123/go-silk v0.0.0-20201007123416-b982fd3d91d6 h1:lX18MCdNzT2zIi7K02x4C5cPkDXpL+wCb1YTAMXjLWQ=
+github.com/wdvxdr1123/go-silk v0.0.0-20201007123416-b982fd3d91d6/go.mod h1:5q9LFlBr+yX/J8Jd/9wHdXwkkjFkNyQIS7kX2Lgx/Zs=
github.com/xujiajun/gorouter v1.2.0/go.mod h1:yJrIta+bTNpBM/2UT8hLOaEAFckO+m/qmR3luMIQygM=
github.com/xujiajun/mmap-go v1.0.1 h1:7Se7ss1fLPPRW+ePgqGpCkfGIZzJV6JPq9Wq9iv/WHc=
github.com/xujiajun/mmap-go v1.0.1/go.mod h1:CNN6Sw4SL69Sui00p0zEzcZKbt+5HtEnYUsc6BKKRMg=
From 1d7f1cc5d5ead11f5d1ad2859bba2c11d9bb877d Mon Sep 17 00:00:00 2001
From: Mrs4s <1844812067@qq.com>
Date: Thu, 8 Oct 2020 23:28:22 +0800
Subject: [PATCH 067/367] add: group_card event.
---
coolq/bot.go | 1 +
coolq/event.go | 14 ++++++++++++++
docs/cqhttp.md | 17 +++++++++++++++++
3 files changed, 32 insertions(+)
diff --git a/coolq/bot.go b/coolq/bot.go
index fc81240..b132998 100644
--- a/coolq/bot.go
+++ b/coolq/bot.go
@@ -66,6 +66,7 @@ func NewQQBot(cli *client.QQClient, conf *global.JsonConfig) *CQBot {
bot.Client.OnGroupMemberJoined(bot.memberJoinEvent)
bot.Client.OnGroupMemberLeaved(bot.memberLeaveEvent)
bot.Client.OnGroupMemberPermissionChanged(bot.memberPermissionChangedEvent)
+ bot.Client.OnGroupMemberCardUpdated(bot.memberCardUpdatedEvent)
bot.Client.OnNewFriendRequest(bot.friendRequestEvent)
bot.Client.OnNewFriendAdded(bot.friendAddedEvent)
bot.Client.OnGroupInvited(bot.groupInvitedEvent)
diff --git a/coolq/event.go b/coolq/event.go
index d03a8a4..3eb65ee 100644
--- a/coolq/event.go
+++ b/coolq/event.go
@@ -310,6 +310,20 @@ func (bot *CQBot) memberPermissionChangedEvent(c *client.QQClient, e *client.Mem
})
}
+func (bot *CQBot) memberCardUpdatedEvent(c *client.QQClient, e *client.MemberCardUpdatedEvent) {
+ log.Infof("群 %v 的 %v 更新了名片 %v -> %v", formatGroupName(e.Group), formatMemberName(e.Member), e.OldCard, e.Member.CardName)
+ bot.dispatchEventMessage(MSG{
+ "post_type": "notice",
+ "notice_type": "group_card",
+ "group_id": e.Group.Code,
+ "user_id": e.Member.Uin,
+ "card_new": e.Member.CardName,
+ "card_old": e.OldCard,
+ "time": time.Now().Unix(),
+ "self_id": c.Uin,
+ })
+}
+
func (bot *CQBot) memberJoinEvent(c *client.QQClient, e *client.MemberJoinGroupEvent) {
log.Infof("新成员 %v 进入了群 %v.", formatMemberName(e.Member), formatGroupName(e.Group))
bot.dispatchEventMessage(bot.groupIncrease(e.Group.Code, 0, e.Member.Uin))
diff --git a/docs/cqhttp.md b/docs/cqhttp.md
index 62e3440..46f1008 100644
--- a/docs/cqhttp.md
+++ b/docs/cqhttp.md
@@ -520,3 +520,20 @@ Type: `tts`
| `sub_type` | string | `honor` | 提示类型 |
| `user_id` | int64 | | 成员id |
| `honor_type` | string | `talkative:龙王` `performer:群聊之火` `emotion:快乐源泉` | 荣誉类型 |
+
+#### 群成员名片更新
+
+> 注意: 此事件不保证时效性,仅在收到消息时校验卡片
+
+**上报数据**
+
+| 字段 | 类型 | 可能的值 | 说明 |
+| ------------- | ------ | -------------- | -------------- |
+| `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` 字段为空字符串, 并不是昵称
\ No newline at end of file
From a72a688a62b6d14f1767c95f05b0af8827330748 Mon Sep 17 00:00:00 2001
From: Mrs4s
Date: Sat, 10 Oct 2020 17:07:56 +0800
Subject: [PATCH 068/367] fix vip song.
---
coolq/bot.go | 6 +++++-
coolq/cqcode.go | 3 ---
2 files changed, 5 insertions(+), 4 deletions(-)
diff --git a/coolq/bot.go b/coolq/bot.go
index b132998..cd4c84f 100644
--- a/coolq/bot.go
+++ b/coolq/bot.go
@@ -153,7 +153,11 @@ func (bot *CQBot) SendGroupMessage(groupId int64, m *message.SendingMessage) int
return 0
}
if i, ok := elem.(*QQMusicElement); ok {
- ret, err := bot.Client.SendGroupRichMessage(groupId, 100497308, 1, 4, client.RichClientInfo{
+ var msgStyle uint32 = 4
+ if i.MusicUrl == "" {
+ msgStyle = 0 // fix vip song
+ }
+ ret, err := bot.Client.SendGroupRichMessage(groupId, 100497308, 1, msgStyle, client.RichClientInfo{
Platform: 1,
SdkVersion: "0.0.0",
PackageName: "com.tencent.qqmusic",
diff --git a/coolq/cqcode.go b/coolq/cqcode.go
index e04eff6..78eea64 100644
--- a/coolq/cqcode.go
+++ b/coolq/cqcode.go
@@ -449,9 +449,6 @@ func (bot *CQBot) ToElement(t string, d map[string]string, group bool) (message.
if d["content"] != "" {
content = d["content"]
}
- if purl == "" {
- purl = "https://www.baidu.com" // fix vip song
- }
return &QQMusicElement{MusicElement: MusicElement{
Title: name,
Summary: content,
From 4c9f60da09b14fa8636887a945138b6fb3654554 Mon Sep 17 00:00:00 2001
From: Ink-33
Date: Sun, 11 Oct 2020 10:39:33 +0800
Subject: [PATCH 069/367] update Dockerfile
---
Dockerfile | 2 +-
1 file changed, 1 insertion(+), 1 deletion(-)
diff --git a/Dockerfile b/Dockerfile
index 478327d..8a1febb 100644
--- a/Dockerfile
+++ b/Dockerfile
@@ -1,4 +1,4 @@
-FROM golang:1.14.7-alpine AS builder
+FROM golang:1.15.2-alpine AS builder
RUN go env -w GO111MODULE=auto \
&& go env -w CGO_ENABLED=0 \
From c984f22d4fc8d0fb0a6252e321e44f12a3a7749d Mon Sep 17 00:00:00 2001
From: wdvxdr
Date: Sun, 11 Oct 2020 18:02:10 +0800
Subject: [PATCH 070/367] fix tts panic & support showPic flashPic
---
coolq/api.go | 2 +-
coolq/cqcode.go | 59 ++++++++++++++++++++++++++++++++++++++++++-------
go.mod | 6 ++---
go.sum | 18 +++++++++++----
4 files changed, 69 insertions(+), 16 deletions(-)
diff --git a/coolq/api.go b/coolq/api.go
index 50ab320..eb830d8 100644
--- a/coolq/api.go
+++ b/coolq/api.go
@@ -665,7 +665,7 @@ func (bot *CQBot) CQCanSendRecord() MSG {
}
func (bot *CQBot) CQOcrImage(imageId string) MSG {
- img, err := bot.makeImageElem("image", map[string]string{"file": imageId}, true)
+ img, err := bot.makeImageElem(map[string]string{"file": imageId}, true)
if err != nil {
log.Warnf("load image error: %v", err)
return Failed(100)
diff --git a/coolq/cqcode.go b/coolq/cqcode.go
index 78eea64..17ce84c 100644
--- a/coolq/cqcode.go
+++ b/coolq/cqcode.go
@@ -362,12 +362,48 @@ func (bot *CQBot) ConvertObjectMessage(m gjson.Result, group bool) (r []message.
return
}
-func (bot *CQBot) ToElement(t string, d map[string]string, group bool) (message.IMessageElement, error) {
+func (bot *CQBot) ToElement(t string, d map[string]string, group bool) (m message.IMessageElement, err error) {
switch t {
case "text":
return message.NewText(d["text"]), nil
case "image":
- return bot.makeImageElem(t, d, group)
+ img,err := bot.makeImageElem(d, group)
+ if err != nil{
+ return nil, err
+ }
+ tp := d["type"]
+ if tp != "show" && tp != "flash" {
+ return img, nil
+ }
+ if i, ok := img.(*message.ImageElement); ok { // 秀图,闪照什么的就直接传了吧
+ if group {
+ img, err = bot.Client.UploadGroupImage(1, i.Data)
+ } else {
+ img, err = bot.Client.UploadPrivateImage(1, i.Data)
+ }
+ if err != nil {
+ return nil, err
+ }
+ }
+ switch tp {
+ case "flash":
+ if i, ok := img.(*message.GroupImageElement); ok{
+ return &message.GroupFlashPicElement{GroupImageElement: *i},nil
+ }
+ if i, ok := img.(*message.FriendImageElement); ok{
+ return &message.FriendFlashPicElement{FriendImageElement: *i},nil
+ }
+ case "show":
+ id, _ := strconv.ParseInt(d["id"], 10, 64)
+ if id < 40000 || id >= 40006 {
+ id = 40000
+ }
+ if i, ok := img.(*message.GroupImageElement); ok{
+ return &message.GroupShowPicElement{GroupImageElement: *i,EffectId: int32(id)},nil
+ }
+ return img,nil // 私聊还没做
+ }
+
case "poke":
if !group {
return nil, errors.New("todo") // TODO: private poke
@@ -388,6 +424,12 @@ func (bot *CQBot) ToElement(t string, d map[string]string, group bool) (message.
if !group {
return nil, errors.New("private voice unsupported now")
}
+ defer func() {
+ if r := recover();r != nil {
+ m = nil
+ err = errors.New("tts 转换失败")
+ }
+ }()
data, err := bot.Client.GetTts(d["text"])
ioutil.WriteFile("tts.silk", data, 777)
if err != nil {
@@ -529,7 +571,7 @@ func (bot *CQBot) ToElement(t string, d map[string]string, group bool) (message.
if maxheight == 0 {
maxheight = 1000
}
- img, err := bot.makeImageElem(t, d, group)
+ img, err := bot.makeImageElem(d, group)
if err != nil {
return nil, errors.New("send cardimage faild")
}
@@ -537,6 +579,7 @@ func (bot *CQBot) ToElement(t string, d map[string]string, group bool) (message.
default:
return nil, errors.New("unsupported cq code: " + t)
}
+ return nil, nil
}
func CQCodeEscapeText(raw string) string {
@@ -568,7 +611,7 @@ func CQCodeUnescapeValue(content string) string {
}
// 图片 elem 生成器,单独拎出来,用于公用
-func (bot *CQBot) makeImageElem(t string, d map[string]string, group bool) (message.IMessageElement, error) {
+func (bot *CQBot) makeImageElem(d map[string]string, group bool) (message.IMessageElement, error) {
f := d["file"]
if strings.HasPrefix(f, "http") || strings.HasPrefix(f, "https") {
cache := d["cache"]
@@ -616,7 +659,7 @@ func (bot *CQBot) makeImageElem(t string, d map[string]string, group bool) (mess
rawPath += ".cqimg"
}
if !global.PathExists(rawPath) && d["url"] != "" {
- return bot.ToElement(t, map[string]string{"file": d["url"]}, group)
+ return bot.makeImageElem(map[string]string{"file": d["url"]}, group)
}
if global.PathExists(rawPath) {
b, err := ioutil.ReadFile(rawPath)
@@ -652,7 +695,7 @@ func (bot *CQBot) makeImageElem(t string, d map[string]string, group bool) (mess
}
if size == 0 {
if url != "" {
- return bot.ToElement(t, map[string]string{"file": url}, group)
+ return bot.makeImageElem(map[string]string{"file": url}, group)
}
return nil, errors.New("img size is 0")
}
@@ -663,7 +706,7 @@ func (bot *CQBot) makeImageElem(t string, d map[string]string, group bool) (mess
rsp, err := bot.Client.QueryGroupImage(1, hash, size)
if err != nil {
if url != "" {
- return bot.ToElement(t, map[string]string{"file": url}, group)
+ return bot.makeImageElem(map[string]string{"file": url}, group)
}
return nil, err
}
@@ -672,7 +715,7 @@ func (bot *CQBot) makeImageElem(t string, d map[string]string, group bool) (mess
rsp, err := bot.Client.QueryFriendImage(1, hash, size)
if err != nil {
if url != "" {
- return bot.ToElement(t, map[string]string{"file": url}, group)
+ return bot.makeImageElem(map[string]string{"file": url}, group)
}
return nil, err
}
diff --git a/go.mod b/go.mod
index 8c00b3b..d4a04d4 100644
--- a/go.mod
+++ b/go.mod
@@ -3,7 +3,7 @@ module github.com/Mrs4s/go-cqhttp
go 1.14
require (
- github.com/Mrs4s/MiraiGo v0.0.0-20201008134448-b53aaceaa1b4
+ github.com/Mrs4s/MiraiGo v0.0.0-20201011070235-2fa335fd8b68
github.com/fastly/go-utils v0.0.0-20180712184237-d95a45783239 // indirect
github.com/gin-gonic/gin v1.6.3
github.com/go-playground/validator/v10 v10.4.0 // indirect
@@ -27,8 +27,8 @@ require (
github.com/xujiajun/nutsdb v0.5.0
github.com/yinghau76/go-ascii-art v0.0.0-20190517192627-e7f465a30189
golang.org/x/crypto v0.0.0-20201002170205-7f63de1d35b0 // indirect
- golang.org/x/net v0.0.0-20201002202402-0a1ea396d57c // indirect
- golang.org/x/sys v0.0.0-20201005172224-997123666555 // indirect
+ golang.org/x/net v0.0.0-20201010224723-4f7140c49acb // indirect
+ golang.org/x/sys v0.0.0-20201009025420-dfb3f7c4e634 // indirect
golang.org/x/time v0.0.0-20200630173020-3af7569d3a1e
gopkg.in/yaml.v2 v2.3.0 // indirect
)
diff --git a/go.sum b/go.sum
index f2ce6e0..c84bb8f 100644
--- a/go.sum
+++ b/go.sum
@@ -2,6 +2,8 @@ cloud.google.com/go v0.26.0/go.mod h1:aQUYkXzVsufM+DwF1aE+0xfcU+56JwCaLick0ClmMT
github.com/BurntSushi/toml v0.3.1/go.mod h1:xHWCNGjB5oqiDr8zfno3MHue2Ht5sIBksp03qcyfWMU=
github.com/Mrs4s/MiraiGo v0.0.0-20201008134448-b53aaceaa1b4 h1:vNDY7JAh+e7ac0Dft3GF+s4WZU55SZkwaAI7UmXfwHc=
github.com/Mrs4s/MiraiGo v0.0.0-20201008134448-b53aaceaa1b4/go.mod h1:cwYPI2uq6nxNbx0nA6YuAKF1V5szSs6FPlGVLQvRUlo=
+github.com/Mrs4s/MiraiGo v0.0.0-20201011070235-2fa335fd8b68 h1:+BT4VZ0ZeiTFRV5hOzxJR0d3FW2dcl+ZZwCY5zL5Xls=
+github.com/Mrs4s/MiraiGo v0.0.0-20201011070235-2fa335fd8b68/go.mod h1:cwYPI2uq6nxNbx0nA6YuAKF1V5szSs6FPlGVLQvRUlo=
github.com/bwmarrin/snowflake v0.3.0 h1:xm67bEhkKh6ij1790JB83OujPR5CzNe8QuQqAgISZN0=
github.com/bwmarrin/snowflake v0.3.0/go.mod h1:NdZxfVWX+oR6y2K0o6qAYv6gIOP9rjG0/E9WsDpxqwE=
github.com/census-instrumentation/opencensus-proto v0.2.1/go.mod h1:f6KPmirojxKA12rnyqOA5BBL4O983OfeGPqjHWSTneU=
@@ -54,6 +56,7 @@ github.com/jehiah/go-strftime v0.0.0-20171201141054-1d33003b3869/go.mod h1:cJ6Cj
github.com/jonboulle/clockwork v0.2.0/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/json-iterator/go v1.1.10 h1:Kz6Cvnvv2wGdaG/V8yMvfkmNiXq9Ya2KUv4rouJJr68=
github.com/json-iterator/go v1.1.10/go.mod h1:KdQUCv79m/52Kvf8AW2vK1V8akMuk1QjK/uOdHXbAo4=
github.com/konsorten/go-windows-terminal-sequences v1.0.1/go.mod h1:T0+1ngSBFLxvqU3pZ+m/2kptfBszLMUkC4ZK/EgS/cQ=
github.com/leodido/go-urn v1.1.0/go.mod h1:+cyI34gQWZcE1eQU7NVgKkkzdXDQHr1dBMtdAPozLkw=
@@ -68,8 +71,10 @@ github.com/mattn/go-isatty v0.0.9/go.mod h1:YNRxwqDuOph6SZLI9vUUz6OYw3QyUt7WiY2y
github.com/mattn/go-isatty v0.0.12 h1:wuysRhFDzyxgEmMf5xjvJ2M9dZoWAXNNr5LSBS7uHXY=
github.com/mattn/go-isatty v0.0.12/go.mod h1:cbi8OIDigv2wuxKPP5vlRcQ1OAZbq2CE4Kysco4FUpU=
github.com/modern-go/concurrent v0.0.0-20180228061459-e0a39a4cb421/go.mod h1:6dJC0mAP4ikYIbvyc7fijjWJddQyLn8Ig3JB5CqoB9Q=
+github.com/modern-go/concurrent v0.0.0-20180306012644-bacd9c7ef1dd h1:TRLaZ9cD/w8PVh93nsPXa1VrQ6jlwL5oN8l14QlcNfg=
github.com/modern-go/concurrent v0.0.0-20180306012644-bacd9c7ef1dd/go.mod h1:6dJC0mAP4ikYIbvyc7fijjWJddQyLn8Ig3JB5CqoB9Q=
github.com/modern-go/reflect2 v0.0.0-20180701023420-4b7aa43c6742/go.mod h1:bx2lNnkwVCuqBIxFjflWJWanXIb3RllmbCylyMrvgv0=
+github.com/modern-go/reflect2 v1.0.1 h1:9f412s+6RmYXLWZSEzVVgPGK7C2PphHj5RJrvfx9AWI=
github.com/modern-go/reflect2 v1.0.1/go.mod h1:bx2lNnkwVCuqBIxFjflWJWanXIb3RllmbCylyMrvgv0=
github.com/nfnt/resize v0.0.0-20180221191011-83c6a9932646 h1:zYyBkD/k9seD2A7fsi6Oo2LfFZAehjjQMERAvZLEDnQ=
github.com/nfnt/resize v0.0.0-20180221191011-83c6a9932646/go.mod h1:jpp1/29i3P1S/RLdc7JQKbRpFeM1dOBd8T9ki5s+AY8=
@@ -130,8 +135,10 @@ golang.org/x/net v0.0.0-20190213061140-3a22650c66bd/go.mod h1:mL1N/T3taQHkDXs73r
golang.org/x/net v0.0.0-20190311183353-d8887717615a/go.mod h1:t9HGtf8HONx5eT2rtn7q6eTqICYqUVnKs3thJo3Qplg=
golang.org/x/net v0.0.0-20190404232315-eb5bcb51f2a3/go.mod h1:t9HGtf8HONx5eT2rtn7q6eTqICYqUVnKs3thJo3Qplg=
golang.org/x/net v0.0.0-20200114155413-6afb5195e5aa/go.mod h1:z5CRVTTTmAJ677TzLLGU+0bjPO0LkuOLi4/5GtJWs/s=
-golang.org/x/net v0.0.0-20201002202402-0a1ea396d57c h1:dk0ukUIHmGHqASjP0iue2261isepFCC6XRCSd1nHgDw=
-golang.org/x/net v0.0.0-20201002202402-0a1ea396d57c/go.mod h1:iQL9McJNjoIa5mjH6nYTCTZXUN6RP+XW3eib7Ya3XcI=
+golang.org/x/net v0.0.0-20201006153459-a7d1128ccaa0 h1:wBouT66WTYFXdxfVdz9sVWARVd/2vfGcmI45D2gj45M=
+golang.org/x/net v0.0.0-20201006153459-a7d1128ccaa0/go.mod h1:sp8m0HH+o8qH0wwXwYZr8TS3Oi6o0r6Gce1SSxlDquU=
+golang.org/x/net v0.0.0-20201010224723-4f7140c49acb h1:mUVeFHoDKis5nxCAzoAi7E8Ghb86EXh/RK6wtvJIqRY=
+golang.org/x/net v0.0.0-20201010224723-4f7140c49acb/go.mod h1:sp8m0HH+o8qH0wwXwYZr8TS3Oi6o0r6Gce1SSxlDquU=
golang.org/x/oauth2 v0.0.0-20180821212333-d2e6202438be/go.mod h1:N/0e6XlmueqKjAGxoOufVs8QHGRruUQn6yWY3a++T0U=
golang.org/x/sync v0.0.0-20180314180146-1d60e4601c6f/go.mod h1:RxMgew5VJxzue5/jJTE5uejpjVlOe/izrB70Jof72aM=
golang.org/x/sync v0.0.0-20181108010431-42b317875d0f/go.mod h1:RxMgew5VJxzue5/jJTE5uejpjVlOe/izrB70Jof72aM=
@@ -145,10 +152,13 @@ golang.org/x/sys v0.0.0-20190813064441-fde4db37ae7a/go.mod h1:h1NjWce9XRLGQEsW7w
golang.org/x/sys v0.0.0-20191026070338-33540a1f6037/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs=
golang.org/x/sys v0.0.0-20200116001909-b77594299b42/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs=
golang.org/x/sys v0.0.0-20200930185726-fdedc70b468f/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs=
-golang.org/x/sys v0.0.0-20201005172224-997123666555 h1:fihtqzYxy4E31W1yUlyRGveTZT1JIP0bmKaDZ2ceKAw=
-golang.org/x/sys v0.0.0-20201005172224-997123666555/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs=
+golang.org/x/sys v0.0.0-20201007082116-8445cc04cbdf h1:AvBTl0xbF/KtHyvm61X4gSPF7/dKJ/xQqJwKr1Qu9no=
+golang.org/x/sys v0.0.0-20201007082116-8445cc04cbdf/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs=
+golang.org/x/sys v0.0.0-20201009025420-dfb3f7c4e634 h1:bNEHhJCnrwMKNMmOx3yAynp5vs5/gRy+XWFtZFu7NBM=
+golang.org/x/sys v0.0.0-20201009025420-dfb3f7c4e634/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs=
golang.org/x/text v0.3.0/go.mod h1:NqM8EUOU14njkJ3fqMW+pc6Ldnwhi/IjpwHt7yyuwOQ=
golang.org/x/text v0.3.2/go.mod h1:bEr9sfX3Q8Zfm5fL9x+3itogRgK3+ptLWKqgva+5dAk=
+golang.org/x/text v0.3.3/go.mod h1:5Zoc/QRtKVWzQhOtBMvqHzDpF6irO9z98xDceosuGiQ=
golang.org/x/time v0.0.0-20200630173020-3af7569d3a1e h1:EHBhcS0mlXEAVwNyO2dLfjToGsyY4j24pTs2ScHnX7s=
golang.org/x/time v0.0.0-20200630173020-3af7569d3a1e/go.mod h1:tRJNPiyCQ0inRvYxbN9jk5I+vvW/OXSQhTDSoE431IQ=
golang.org/x/tools v0.0.0-20180917221912-90fa682c2a6e/go.mod h1:n7NCudcB/nEzxVGmLbDWY5pfWTLqBcC2KZ6jyYvM4mQ=
From e719c8673111c1d38bff33a85ec1283a20325ee1 Mon Sep 17 00:00:00 2001
From: wdvxdr
Date: Sun, 11 Oct 2020 18:19:58 +0800
Subject: [PATCH 071/367] doc showPic & flashPic
---
docs/cqhttp.md | 22 ++++++++++++++++++++++
1 file changed, 22 insertions(+)
diff --git a/docs/cqhttp.md b/docs/cqhttp.md
index 46f1008..67be4e1 100644
--- a/docs/cqhttp.md
+++ b/docs/cqhttp.md
@@ -4,6 +4,28 @@
## CQCode
+### 图片
+
+| 参数名 | 可能的值 | 说明 |
+| --- | --- | --- |
+| `file` | - | 图片文件名 |
+| `type` | `flash`,`show` | 图片类型,`flash` 表示闪照,`show` 表示秀图,默认普通图片 |
+| `url` | - | 图片 URL |
+| `cache` | `0` `1` | 只在通过网络 URL 发送时有效,表示是否使用已缓存的文件,默认 `1` |
+| `id` | - | 发送秀图时的特效id,默认为40000 |
+
+可用的特效ID:
+
+| id |类型 |
+| --- |-------|
+| 40000 | 普通 |
+| 40001 | 幻影 |
+| 40002 | 抖动 |
+| 40003 | 生日 |
+| 40004 | 爱你 |
+| 40005 | 征友 |
+
+
### 回复
Type : `reply`
From 584159d2854eb4c15b72e9b3fad30b47b954308c Mon Sep 17 00:00:00 2001
From: Mrs4s
Date: Mon, 12 Oct 2020 13:30:11 +0800
Subject: [PATCH 072/367] update QA.md
---
docs/QA.md | 8 --------
1 file changed, 8 deletions(-)
diff --git a/docs/QA.md b/docs/QA.md
index 670722c..28f455c 100644
--- a/docs/QA.md
+++ b/docs/QA.md
@@ -1,13 +1,5 @@
# 常见问题
-### Q: 为什么登录的时候出现 `客户端版本过低 请升级客户端`?
-
-### A: 此问题是因为密码输入错误导致的, 信息为服务器返回, 很可能是TX相关的错误, 请检查密码
-
-### Q: 为什么登录的时候出现 `为了您的帐号安全,请使用QQ一键登录`?
-
-### A: 因为目前手机协议不支持图片验证码,切换成平板协议登录成功后,再切换回手机协议即可
-
### Q: 为什么挂一段时间后就会出现 `消息发送失败,账号可能被风控`?
### A: 如果你刚开始使用 go-cqhttp 建议挂机3-7天,即可解除风控
From b7d3aec9b7eb217a8170dc7feaeab3b2e9f16f8d Mon Sep 17 00:00:00 2001
From: Mrs4s
Date: Mon, 12 Oct 2020 14:14:25 +0800
Subject: [PATCH 073/367] switch to scanf.
---
server/apiAdmin.go | 18 +++++++++++-------
1 file changed, 11 insertions(+), 7 deletions(-)
diff --git a/server/apiAdmin.go b/server/apiAdmin.go
index 0c896fe..febb887 100644
--- a/server/apiAdmin.go
+++ b/server/apiAdmin.go
@@ -96,6 +96,10 @@ func (s *webServer) Run(addr string, cli *client.QQClient) *coolq.CQBot {
func (s *webServer) Dologin() {
s.Console = bufio.NewReader(os.Stdin)
+ readLine := func() (str string) {
+ _, _ = fmt.Scanf("%s", &str)
+ return
+ }
conf := GetConf()
cli := s.Cli
cli.AllowSlider = true
@@ -109,7 +113,7 @@ func (s *webServer) Dologin() {
if client.SystemDeviceInfo.Protocol == client.AndroidPhone {
log.Warnf("警告: Android Phone 强制要求暂不支持的滑条验证码, 请开启设备锁或切换到Watch协议验证通过后再使用.")
log.Infof("按 Enter 继续....")
- _, _ = s.Console.ReadString('\n')
+ readLine()
os.Exit(0)
}
cli.AllowSlider = false
@@ -125,7 +129,7 @@ func (s *webServer) Dologin() {
text = <-WebInput
} else {
log.Warn("请输入验证码 (captcha.jpg): (Enter 提交)")
- text, _ = s.Console.ReadString('\n')
+ text = readLine()
}
rsp, err = cli.SubmitCaptcha(strings.ReplaceAll(text, "\n", ""), rsp.CaptchaSign)
global.DelFile("captcha.jpg")
@@ -139,7 +143,7 @@ func (s *webServer) Dologin() {
os.Exit(0)
}
log.Warn("请输入短信验证码: (Enter 提交)")
- text, _ = s.Console.ReadString('\n')
+ text = readLine()
rsp, err = cli.SubmitSMS(strings.ReplaceAll(strings.ReplaceAll(text, "\n", ""), "\r", ""))
continue
case client.SMSOrVerifyNeededError:
@@ -155,13 +159,13 @@ func (s *webServer) Dologin() {
os.Exit(0)
}
log.Warn("请输入短信验证码: (Enter 提交)")
- text, _ = s.Console.ReadString('\n')
+ text = readLine()
rsp, err = cli.SubmitSMS(strings.ReplaceAll(strings.ReplaceAll(text, "\n", ""), "\r", ""))
continue
}
log.Warnf("请前往 -> %v <- 验证并重启Bot.", rsp.VerifyUrl)
log.Infof("按 Enter 继续....")
- _, _ = s.Console.ReadString('\n')
+ readLine()
os.Exit(0)
return
case client.UnsafeDeviceError:
@@ -171,7 +175,7 @@ func (s *webServer) Dologin() {
text = <-WebInput
} else {
log.Infof("按 Enter 继续....")
- _, _ = s.Console.ReadString('\n')
+ readLine()
}
log.Info(text)
os.Exit(0)
@@ -179,7 +183,7 @@ func (s *webServer) Dologin() {
case client.OtherLoginError, client.UnknownLoginError:
log.Warnf("登录失败: %v", rsp.ErrorMessage)
log.Infof("按 Enter 继续....")
- _, _ = s.Console.ReadString('\n')
+ readLine()
os.Exit(0)
return
}
From a6c13b68cdd2dafd1163e99aa5ca3e8e56c8c424 Mon Sep 17 00:00:00 2001
From: Mrs4s
Date: Mon, 12 Oct 2020 14:18:37 +0800
Subject: [PATCH 074/367] update MiraiGo.
---
go.mod | 2 +-
go.sum | 2 ++
2 files changed, 3 insertions(+), 1 deletion(-)
diff --git a/go.mod b/go.mod
index d4a04d4..6e61e36 100644
--- a/go.mod
+++ b/go.mod
@@ -3,7 +3,7 @@ module github.com/Mrs4s/go-cqhttp
go 1.14
require (
- github.com/Mrs4s/MiraiGo v0.0.0-20201011070235-2fa335fd8b68
+ github.com/Mrs4s/MiraiGo v0.0.0-20201012045500-03913806a223
github.com/fastly/go-utils v0.0.0-20180712184237-d95a45783239 // indirect
github.com/gin-gonic/gin v1.6.3
github.com/go-playground/validator/v10 v10.4.0 // indirect
diff --git a/go.sum b/go.sum
index c84bb8f..59e934c 100644
--- a/go.sum
+++ b/go.sum
@@ -4,6 +4,8 @@ github.com/Mrs4s/MiraiGo v0.0.0-20201008134448-b53aaceaa1b4 h1:vNDY7JAh+e7ac0Dft
github.com/Mrs4s/MiraiGo v0.0.0-20201008134448-b53aaceaa1b4/go.mod h1:cwYPI2uq6nxNbx0nA6YuAKF1V5szSs6FPlGVLQvRUlo=
github.com/Mrs4s/MiraiGo v0.0.0-20201011070235-2fa335fd8b68 h1:+BT4VZ0ZeiTFRV5hOzxJR0d3FW2dcl+ZZwCY5zL5Xls=
github.com/Mrs4s/MiraiGo v0.0.0-20201011070235-2fa335fd8b68/go.mod h1:cwYPI2uq6nxNbx0nA6YuAKF1V5szSs6FPlGVLQvRUlo=
+github.com/Mrs4s/MiraiGo v0.0.0-20201012045500-03913806a223 h1:PxdAQGZg45nUbad77Ey00PiA6yby0/8rjkL6NXv8/j0=
+github.com/Mrs4s/MiraiGo v0.0.0-20201012045500-03913806a223/go.mod h1:cwYPI2uq6nxNbx0nA6YuAKF1V5szSs6FPlGVLQvRUlo=
github.com/bwmarrin/snowflake v0.3.0 h1:xm67bEhkKh6ij1790JB83OujPR5CzNe8QuQqAgISZN0=
github.com/bwmarrin/snowflake v0.3.0/go.mod h1:NdZxfVWX+oR6y2K0o6qAYv6gIOP9rjG0/E9WsDpxqwE=
github.com/census-instrumentation/opencensus-proto v0.2.1/go.mod h1:f6KPmirojxKA12rnyqOA5BBL4O983OfeGPqjHWSTneU=
From a53e549e6c3c1436c5aa01ad372da01b545a7913 Mon Sep 17 00:00:00 2001
From: Mrs4s <1844812067@qq.com>
Date: Tue, 13 Oct 2020 13:05:46 +0800
Subject: [PATCH 075/367] update MiraiGo.
---
go.mod | 15 +--------------
go.sum | 49 ++++++++-----------------------------------------
2 files changed, 9 insertions(+), 55 deletions(-)
diff --git a/go.mod b/go.mod
index 6e61e36..54ce09e 100644
--- a/go.mod
+++ b/go.mod
@@ -3,32 +3,19 @@ module github.com/Mrs4s/go-cqhttp
go 1.14
require (
- github.com/Mrs4s/MiraiGo v0.0.0-20201012045500-03913806a223
- github.com/fastly/go-utils v0.0.0-20180712184237-d95a45783239 // indirect
+ github.com/Mrs4s/MiraiGo v0.0.0-20201013050256-7b392cacdb79
github.com/gin-gonic/gin v1.6.3
- github.com/go-playground/validator/v10 v10.4.0 // indirect
github.com/gorilla/websocket v1.4.2
github.com/guonaihong/gout v0.1.2
- github.com/jehiah/go-strftime v0.0.0-20171201141054-1d33003b3869 // indirect
- github.com/jonboulle/clockwork v0.2.0 // indirect
- github.com/json-iterator/go v1.1.10 // indirect
github.com/lestrrat-go/file-rotatelogs v2.4.0+incompatible
github.com/lestrrat-go/strftime v1.0.3 // indirect
- github.com/modern-go/concurrent v0.0.0-20180306012644-bacd9c7ef1dd // indirect
- github.com/modern-go/reflect2 v1.0.1 // indirect
github.com/pkg/errors v0.9.1 // indirect
github.com/rifflock/lfshook v0.0.0-20180920164130-b9218ef580f5
github.com/sirupsen/logrus v1.7.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.1
- github.com/ugorji/go v1.1.10 // indirect
github.com/wdvxdr1123/go-silk v0.0.0-20201007123416-b982fd3d91d6
github.com/xujiajun/nutsdb v0.5.0
github.com/yinghau76/go-ascii-art v0.0.0-20190517192627-e7f465a30189
- golang.org/x/crypto v0.0.0-20201002170205-7f63de1d35b0 // indirect
- golang.org/x/net v0.0.0-20201010224723-4f7140c49acb // indirect
- golang.org/x/sys v0.0.0-20201009025420-dfb3f7c4e634 // indirect
golang.org/x/time v0.0.0-20200630173020-3af7569d3a1e
- gopkg.in/yaml.v2 v2.3.0 // indirect
)
diff --git a/go.sum b/go.sum
index 59e934c..844e617 100644
--- a/go.sum
+++ b/go.sum
@@ -1,11 +1,7 @@
cloud.google.com/go v0.26.0/go.mod h1:aQUYkXzVsufM+DwF1aE+0xfcU+56JwCaLick0ClmMTw=
github.com/BurntSushi/toml v0.3.1/go.mod h1:xHWCNGjB5oqiDr8zfno3MHue2Ht5sIBksp03qcyfWMU=
-github.com/Mrs4s/MiraiGo v0.0.0-20201008134448-b53aaceaa1b4 h1:vNDY7JAh+e7ac0Dft3GF+s4WZU55SZkwaAI7UmXfwHc=
-github.com/Mrs4s/MiraiGo v0.0.0-20201008134448-b53aaceaa1b4/go.mod h1:cwYPI2uq6nxNbx0nA6YuAKF1V5szSs6FPlGVLQvRUlo=
-github.com/Mrs4s/MiraiGo v0.0.0-20201011070235-2fa335fd8b68 h1:+BT4VZ0ZeiTFRV5hOzxJR0d3FW2dcl+ZZwCY5zL5Xls=
-github.com/Mrs4s/MiraiGo v0.0.0-20201011070235-2fa335fd8b68/go.mod h1:cwYPI2uq6nxNbx0nA6YuAKF1V5szSs6FPlGVLQvRUlo=
-github.com/Mrs4s/MiraiGo v0.0.0-20201012045500-03913806a223 h1:PxdAQGZg45nUbad77Ey00PiA6yby0/8rjkL6NXv8/j0=
-github.com/Mrs4s/MiraiGo v0.0.0-20201012045500-03913806a223/go.mod h1:cwYPI2uq6nxNbx0nA6YuAKF1V5szSs6FPlGVLQvRUlo=
+github.com/Mrs4s/MiraiGo v0.0.0-20201013050256-7b392cacdb79 h1:t9PK37mnl5tbilG+FMUY1hZujoDjFr8iO8upwYHww5c=
+github.com/Mrs4s/MiraiGo v0.0.0-20201013050256-7b392cacdb79/go.mod h1:cwYPI2uq6nxNbx0nA6YuAKF1V5szSs6FPlGVLQvRUlo=
github.com/bwmarrin/snowflake v0.3.0 h1:xm67bEhkKh6ij1790JB83OujPR5CzNe8QuQqAgISZN0=
github.com/bwmarrin/snowflake v0.3.0/go.mod h1:NdZxfVWX+oR6y2K0o6qAYv6gIOP9rjG0/E9WsDpxqwE=
github.com/census-instrumentation/opencensus-proto v0.2.1/go.mod h1:f6KPmirojxKA12rnyqOA5BBL4O983OfeGPqjHWSTneU=
@@ -14,7 +10,6 @@ github.com/davecgh/go-spew v1.1.0/go.mod h1:J7Y8YcW2NihsgmVo/mv3lAwl/skON4iLHjSs
github.com/davecgh/go-spew v1.1.1/go.mod h1:J7Y8YcW2NihsgmVo/mv3lAwl/skON4iLHjSsI+c5H38=
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/go.mod h1:Gdwt2ce0yfBxPvZrHkprdPPTTS3N5rwmLE8T22KBXlw=
github.com/gin-contrib/sse v0.1.0 h1:Y/yl/+YNO8GZSjAhjMsSuLt29uWRFHdHYUb5lYOV9qE=
github.com/gin-contrib/sse v0.1.0/go.mod h1:RHrZQHXnP2xjPF+u1gW/2HnVO7nvIa9PG3Gm+fLHvGI=
github.com/gin-gonic/gin v1.5.0/go.mod h1:Nd6IXA8m5kNZdNEHMBd93KT+mdY3+bewLgRvmCsR2Do=
@@ -27,9 +22,8 @@ github.com/go-playground/locales v0.13.0/go.mod h1:taPMhCMXrRLJO55olJkUXHZBHCxTM
github.com/go-playground/universal-translator v0.16.0/go.mod h1:1AnU7NaIRDWWzGEKwgtJRd2xk99HeFyHw3yid4rvQIY=
github.com/go-playground/universal-translator v0.17.0 h1:icxd5fm+REJzpZx7ZfpaD876Lmtgy7VtROAbHHXk8no=
github.com/go-playground/universal-translator v0.17.0/go.mod h1:UkSxE5sNxxRwHyU+Scu5vgOQjsIJAF8j9muTVoKLVtA=
+github.com/go-playground/validator/v10 v10.2.0 h1:KgJ0snyC2R9VXYN2rneOtQcw5aHQB1Vv0sFl1UcHBOY=
github.com/go-playground/validator/v10 v10.2.0/go.mod h1:uOYAAleCW8F/7oMFd6aG0GOhaH6EGOAJShg8Id5JGkI=
-github.com/go-playground/validator/v10 v10.4.0 h1:72qIR/m8ybvL8L5TIyfgrigqkrw7kVYAvjEvpT85l70=
-github.com/go-playground/validator/v10 v10.4.0/go.mod h1:nlOn6nFhuKACm19sB/8EGNn9GlaMV7XkbRSipzJ0Ii4=
github.com/golang/glog v0.0.0-20160126235308-23def4e6c14b/go.mod h1:SBH7ygxi8pfUlaOkMMuAQtPIUF8ecWP5IEl/CR7VP2Q=
github.com/golang/mock v1.1.1/go.mod h1:oTYuIxOrZwtPieC+H1uAHpcLFnEyAGVDL/k47Jfbm0A=
github.com/golang/protobuf v1.2.0/go.mod h1:6lQm79b+lXiMfvg/cZm0SGofjICqVBUtrP5yJMmIC1U=
@@ -54,12 +48,8 @@ github.com/gorilla/websocket v1.4.2 h1:+/TMaTYc4QFitKJxsQ7Yye35DkWvkdLcvGKqM+x0U
github.com/gorilla/websocket v1.4.2/go.mod h1:YR8l580nyteQvAITg2hZ9XVh4b55+EU/adAjf1fMHhE=
github.com/guonaihong/gout v0.1.2 h1:TR2XCRopGgJdj231IayEoeavgbznFXzzzcZVdT/hG10=
github.com/guonaihong/gout v0.1.2/go.mod h1:vXvv5Kxr70eM5wrp4F0+t9lnLWmq+YPW2GByll2f/EA=
-github.com/jehiah/go-strftime v0.0.0-20171201141054-1d33003b3869/go.mod h1:cJ6Cj7dQo+O6GJNiMx+Pa94qKj+TG8ONdKHgMNIyyag=
-github.com/jonboulle/clockwork v0.2.0/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/json-iterator/go v1.1.10 h1:Kz6Cvnvv2wGdaG/V8yMvfkmNiXq9Ya2KUv4rouJJr68=
-github.com/json-iterator/go v1.1.10/go.mod h1:KdQUCv79m/52Kvf8AW2vK1V8akMuk1QjK/uOdHXbAo4=
github.com/konsorten/go-windows-terminal-sequences v1.0.1/go.mod h1:T0+1ngSBFLxvqU3pZ+m/2kptfBszLMUkC4ZK/EgS/cQ=
github.com/leodido/go-urn v1.1.0/go.mod h1:+cyI34gQWZcE1eQU7NVgKkkzdXDQHr1dBMtdAPozLkw=
github.com/leodido/go-urn v1.2.0 h1:hpXL4XnriNwQ/ABnpepYM/1vCLWNDfUNts8dX3xTG6Y=
@@ -73,11 +63,7 @@ github.com/mattn/go-isatty v0.0.9/go.mod h1:YNRxwqDuOph6SZLI9vUUz6OYw3QyUt7WiY2y
github.com/mattn/go-isatty v0.0.12 h1:wuysRhFDzyxgEmMf5xjvJ2M9dZoWAXNNr5LSBS7uHXY=
github.com/mattn/go-isatty v0.0.12/go.mod h1:cbi8OIDigv2wuxKPP5vlRcQ1OAZbq2CE4Kysco4FUpU=
github.com/modern-go/concurrent v0.0.0-20180228061459-e0a39a4cb421/go.mod h1:6dJC0mAP4ikYIbvyc7fijjWJddQyLn8Ig3JB5CqoB9Q=
-github.com/modern-go/concurrent v0.0.0-20180306012644-bacd9c7ef1dd h1:TRLaZ9cD/w8PVh93nsPXa1VrQ6jlwL5oN8l14QlcNfg=
-github.com/modern-go/concurrent v0.0.0-20180306012644-bacd9c7ef1dd/go.mod h1:6dJC0mAP4ikYIbvyc7fijjWJddQyLn8Ig3JB5CqoB9Q=
github.com/modern-go/reflect2 v0.0.0-20180701023420-4b7aa43c6742/go.mod h1:bx2lNnkwVCuqBIxFjflWJWanXIb3RllmbCylyMrvgv0=
-github.com/modern-go/reflect2 v1.0.1 h1:9f412s+6RmYXLWZSEzVVgPGK7C2PphHj5RJrvfx9AWI=
-github.com/modern-go/reflect2 v1.0.1/go.mod h1:bx2lNnkwVCuqBIxFjflWJWanXIb3RllmbCylyMrvgv0=
github.com/nfnt/resize v0.0.0-20180221191011-83c6a9932646 h1:zYyBkD/k9seD2A7fsi6Oo2LfFZAehjjQMERAvZLEDnQ=
github.com/nfnt/resize v0.0.0-20180221191011-83c6a9932646/go.mod h1:jpp1/29i3P1S/RLdc7JQKbRpFeM1dOBd8T9ki5s+AY8=
github.com/pkg/errors v0.8.1/go.mod h1:bwawxfHBFNV+L2hUp1rHADufV3IMtnDRdf1r5NINEl0=
@@ -97,21 +83,16 @@ github.com/stretchr/testify v1.3.0/go.mod h1:M5WIy9Dh21IEIfnGCwXGc5bZfKNJtfHm1UV
github.com/stretchr/testify v1.4.0/go.mod h1:j7eGeouHqKxXV5pUuKE4zz7dFj8WfuZ+81PSLYec5m4=
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/go.mod h1:29/OidkoWHdEKZqzyDLUyC+LmgDgdHo4WAFCDT7D/Ig=
github.com/tidwall/gjson v1.6.1 h1:LRbvNuNuvAiISWg6gxLEFuCe72UKy5hDqhxW/8183ws=
github.com/tidwall/gjson v1.6.1/go.mod h1:BaHyNc5bjzYkPqgLq7mdVzeiRtULKULXLgZFKsxEHI0=
github.com/tidwall/match v1.0.1 h1:PnKP62LPNxHKTwvHHZZzdOAOCtsJTjo6dZLCwpKm5xc=
github.com/tidwall/match v1.0.1/go.mod h1:LujAq0jyVjBy028G1WhWfIzbpQfMO8bBZ6Tyb0+pL9E=
github.com/tidwall/pretty v1.0.2 h1:Z7S3cePv9Jwm1KwS0513MRaoUe3S01WPbLNV40pwWZU=
github.com/tidwall/pretty v1.0.2/go.mod h1:XNkn88O1ChpSDQmQeStsy+sBenx6DDtFZJxhVysOjyk=
+github.com/ugorji/go v1.1.7 h1:/68gy2h+1mWMrwZFeD1kQialdSzAb432dtpeJ42ovdo=
github.com/ugorji/go v1.1.7/go.mod h1:kZn38zHttfInRq0xu/PH0az30d+z6vm202qpg1oXVMw=
-github.com/ugorji/go v1.1.10 h1:Mh7W3N/hGJJ8fRQNHIgomNTa0CgZc0aKDFvbgHl+U7A=
-github.com/ugorji/go v1.1.10/go.mod h1:/tC+H0R6N4Lcv4DoSdphIa9y/RAs4QFHDtN9W2oQcHw=
+github.com/ugorji/go/codec v1.1.7 h1:2SvQaVZ1ouYrrKKwoSk2pzd4A9evlKJb9oTL+OaLUSs=
github.com/ugorji/go/codec v1.1.7/go.mod h1:Ax+UKWsSmolVDwsd+7N3ZtXu+yMGCf907BLYF3GoBXY=
-github.com/ugorji/go/codec v1.1.10 h1:otofY/FAoRTMVqlVeDv/Kpm04D13lfJdrDqPbc3axg4=
-github.com/ugorji/go/codec v1.1.10/go.mod h1:jdPQoxvTq1mb8XV6RmofOz5UgNKV2czR6xvxXGwy1Bo=
-github.com/wdvxdr1123/go-silk v0.0.0-20201006020916-0398076200ea h1:OqkIV1VL5xm88jhXLaPHRJroeRknxN3EApcAVlNIIOw=
-github.com/wdvxdr1123/go-silk v0.0.0-20201006020916-0398076200ea/go.mod h1:5q9LFlBr+yX/J8Jd/9wHdXwkkjFkNyQIS7kX2Lgx/Zs=
github.com/wdvxdr1123/go-silk v0.0.0-20201007123416-b982fd3d91d6 h1:lX18MCdNzT2zIi7K02x4C5cPkDXpL+wCb1YTAMXjLWQ=
github.com/wdvxdr1123/go-silk v0.0.0-20201007123416-b982fd3d91d6/go.mod h1:5q9LFlBr+yX/J8Jd/9wHdXwkkjFkNyQIS7kX2Lgx/Zs=
github.com/xujiajun/gorouter v1.2.0/go.mod h1:yJrIta+bTNpBM/2UT8hLOaEAFckO+m/qmR3luMIQygM=
@@ -124,9 +105,6 @@ github.com/xujiajun/utils v0.0.0-20190123093513-8bf096c4f53b/go.mod h1:AZd87GYJl
github.com/yinghau76/go-ascii-art v0.0.0-20190517192627-e7f465a30189 h1:4UJw9if55Fu3HOwbfcaQlJ27p3oeJU2JZqoeT3ITJQk=
github.com/yinghau76/go-ascii-art v0.0.0-20190517192627-e7f465a30189/go.mod h1:rIrm5geMiBhPQkdfUm8gDFi/WiHneOp1i9KjmJqc+9I=
golang.org/x/crypto v0.0.0-20190308221718-c2843e01d9a2/go.mod h1:djNgcEr1/C05ACkg1iLfiJU5Ep61QUkGW8qpdssI0+w=
-golang.org/x/crypto v0.0.0-20200622213623-75b288015ac9/go.mod h1:LzIPMQfyMNhhGPhUkYOs5KpL4U8rLKemX1yGLhDgUto=
-golang.org/x/crypto v0.0.0-20201002170205-7f63de1d35b0 h1:hb9wdF1z5waM+dSIICn1l0DkLVDT3hqhhQsDNUmHPRE=
-golang.org/x/crypto v0.0.0-20201002170205-7f63de1d35b0/go.mod h1:LzIPMQfyMNhhGPhUkYOs5KpL4U8rLKemX1yGLhDgUto=
golang.org/x/exp v0.0.0-20190121172915-509febef88a4/go.mod h1:CJ0aWSM057203Lf6IL+f9T1iT9GByDxfZKAQTCR3kQA=
golang.org/x/lint v0.0.0-20181026193005-c67002cb31c3/go.mod h1:UVdnD1Gm6xHRNCYTkRU2/jEulfH38KcIWyp/GAMgvoE=
golang.org/x/lint v0.0.0-20190227174305-5b3e6a55c961/go.mod h1:wehouNa3lNwaWXcvxsM5YxQ5yQlVC4a0KAMCusXpPoU=
@@ -135,12 +113,8 @@ golang.org/x/net v0.0.0-20180724234803-3673e40ba225/go.mod h1:mL1N/T3taQHkDXs73r
golang.org/x/net v0.0.0-20180826012351-8a410e7b638d/go.mod h1:mL1N/T3taQHkDXs73rZJwtUhF3w3ftmwwsq0BUmARs4=
golang.org/x/net v0.0.0-20190213061140-3a22650c66bd/go.mod h1:mL1N/T3taQHkDXs73rZJwtUhF3w3ftmwwsq0BUmARs4=
golang.org/x/net v0.0.0-20190311183353-d8887717615a/go.mod h1:t9HGtf8HONx5eT2rtn7q6eTqICYqUVnKs3thJo3Qplg=
-golang.org/x/net v0.0.0-20190404232315-eb5bcb51f2a3/go.mod h1:t9HGtf8HONx5eT2rtn7q6eTqICYqUVnKs3thJo3Qplg=
+golang.org/x/net v0.0.0-20200114155413-6afb5195e5aa h1:F+8P+gmewFQYRk6JoLQLwjBCTu3mcIURZfNkVweuRKA=
golang.org/x/net v0.0.0-20200114155413-6afb5195e5aa/go.mod h1:z5CRVTTTmAJ677TzLLGU+0bjPO0LkuOLi4/5GtJWs/s=
-golang.org/x/net v0.0.0-20201006153459-a7d1128ccaa0 h1:wBouT66WTYFXdxfVdz9sVWARVd/2vfGcmI45D2gj45M=
-golang.org/x/net v0.0.0-20201006153459-a7d1128ccaa0/go.mod h1:sp8m0HH+o8qH0wwXwYZr8TS3Oi6o0r6Gce1SSxlDquU=
-golang.org/x/net v0.0.0-20201010224723-4f7140c49acb h1:mUVeFHoDKis5nxCAzoAi7E8Ghb86EXh/RK6wtvJIqRY=
-golang.org/x/net v0.0.0-20201010224723-4f7140c49acb/go.mod h1:sp8m0HH+o8qH0wwXwYZr8TS3Oi6o0r6Gce1SSxlDquU=
golang.org/x/oauth2 v0.0.0-20180821212333-d2e6202438be/go.mod h1:N/0e6XlmueqKjAGxoOufVs8QHGRruUQn6yWY3a++T0U=
golang.org/x/sync v0.0.0-20180314180146-1d60e4601c6f/go.mod h1:RxMgew5VJxzue5/jJTE5uejpjVlOe/izrB70Jof72aM=
golang.org/x/sync v0.0.0-20181108010431-42b317875d0f/go.mod h1:RxMgew5VJxzue5/jJTE5uejpjVlOe/izrB70Jof72aM=
@@ -148,19 +122,13 @@ golang.org/x/sync v0.0.0-20190423024810-112230192c58/go.mod h1:RxMgew5VJxzue5/jJ
golang.org/x/sys v0.0.0-20180830151530-49385e6e1522/go.mod h1:STP8DvDyc/dI5b8T5hshtkjS+E42TnysNCUPdjciGhY=
golang.org/x/sys v0.0.0-20181221143128-b4a75ba826a6/go.mod h1:STP8DvDyc/dI5b8T5hshtkjS+E42TnysNCUPdjciGhY=
golang.org/x/sys v0.0.0-20190215142949-d0b11bdaac8a/go.mod h1:STP8DvDyc/dI5b8T5hshtkjS+E42TnysNCUPdjciGhY=
-golang.org/x/sys v0.0.0-20190412213103-97732733099d/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs=
golang.org/x/sys v0.0.0-20190422165155-953cdadca894/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs=
golang.org/x/sys v0.0.0-20190813064441-fde4db37ae7a/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs=
golang.org/x/sys v0.0.0-20191026070338-33540a1f6037/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs=
+golang.org/x/sys v0.0.0-20200116001909-b77594299b42 h1:vEOn+mP2zCOVzKckCZy6YsCtDblrpj/w7B9nxGNELpg=
golang.org/x/sys v0.0.0-20200116001909-b77594299b42/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs=
-golang.org/x/sys v0.0.0-20200930185726-fdedc70b468f/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs=
-golang.org/x/sys v0.0.0-20201007082116-8445cc04cbdf h1:AvBTl0xbF/KtHyvm61X4gSPF7/dKJ/xQqJwKr1Qu9no=
-golang.org/x/sys v0.0.0-20201007082116-8445cc04cbdf/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs=
-golang.org/x/sys v0.0.0-20201009025420-dfb3f7c4e634 h1:bNEHhJCnrwMKNMmOx3yAynp5vs5/gRy+XWFtZFu7NBM=
-golang.org/x/sys v0.0.0-20201009025420-dfb3f7c4e634/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs=
golang.org/x/text v0.3.0/go.mod h1:NqM8EUOU14njkJ3fqMW+pc6Ldnwhi/IjpwHt7yyuwOQ=
golang.org/x/text v0.3.2/go.mod h1:bEr9sfX3Q8Zfm5fL9x+3itogRgK3+ptLWKqgva+5dAk=
-golang.org/x/text v0.3.3/go.mod h1:5Zoc/QRtKVWzQhOtBMvqHzDpF6irO9z98xDceosuGiQ=
golang.org/x/time v0.0.0-20200630173020-3af7569d3a1e h1:EHBhcS0mlXEAVwNyO2dLfjToGsyY4j24pTs2ScHnX7s=
golang.org/x/time v0.0.0-20200630173020-3af7569d3a1e/go.mod h1:tRJNPiyCQ0inRvYxbN9jk5I+vvW/OXSQhTDSoE431IQ=
golang.org/x/tools v0.0.0-20180917221912-90fa682c2a6e/go.mod h1:n7NCudcB/nEzxVGmLbDWY5pfWTLqBcC2KZ6jyYvM4mQ=
@@ -191,8 +159,7 @@ gopkg.in/check.v1 v0.0.0-20161208181325-20d25e280405/go.mod h1:Co6ibVJAznAaIkqp8
gopkg.in/go-playground/assert.v1 v1.2.1/go.mod h1:9RXL0bg/zibRAgZUYszZSwO/z8Y/a8bDuhia5mkpMnE=
gopkg.in/go-playground/validator.v9 v9.29.1/go.mod h1:+c9/zcJMFNgbLvly1L1V+PpxWdVbfP1avr/N00E2vyQ=
gopkg.in/yaml.v2 v2.2.2/go.mod h1:hI93XBmqTisBFMUTm0b8Fm+jr3Dg1NNxqwp+5A1VGuI=
+gopkg.in/yaml.v2 v2.2.8 h1:obN1ZagJSUGI0Ek/LBmuj4SNLPfIny3KsKFopxRdj10=
gopkg.in/yaml.v2 v2.2.8/go.mod h1:hI93XBmqTisBFMUTm0b8Fm+jr3Dg1NNxqwp+5A1VGuI=
-gopkg.in/yaml.v2 v2.3.0 h1:clyUAQHOM3G0M3f5vQj7LuJrETvjVot3Z5el9nffUtU=
-gopkg.in/yaml.v2 v2.3.0/go.mod h1:hI93XBmqTisBFMUTm0b8Fm+jr3Dg1NNxqwp+5A1VGuI=
honnef.co/go/tools v0.0.0-20190102054323-c2f93a96b099/go.mod h1:rf3lG4BRIbNafJWhAfAdb/ePZxsR/4RtNHQocxwk9r4=
honnef.co/go/tools v0.0.0-20190523083050-ea95bdfd59fc/go.mod h1:rf3lG4BRIbNafJWhAfAdb/ePZxsR/4RtNHQocxwk9r4=
From c619ee7feb19ba512da607b31dbc0f150c99eafa Mon Sep 17 00:00:00 2001
From: Mrs4s <1844812067@qq.com>
Date: Tue, 13 Oct 2020 14:40:49 +0800
Subject: [PATCH 076/367] fix private rich msg.
---
coolq/bot.go | 34 ++++++++++++++++++++++++++++++++++
server/apiAdmin.go | 4 ++--
2 files changed, 36 insertions(+), 2 deletions(-)
diff --git a/coolq/bot.go b/coolq/bot.go
index cd4c84f..92258be 100644
--- a/coolq/bot.go
+++ b/coolq/bot.go
@@ -217,6 +217,40 @@ func (bot *CQBot) SendPrivateMessage(target int64, m *message.SendingMessage) in
newElem = append(newElem, fm)
continue
}
+ if i, ok := elem.(*QQMusicElement); ok {
+ var msgStyle uint32 = 4
+ if i.MusicUrl == "" {
+ msgStyle = 0 // fix vip song
+ }
+ bot.Client.SendFriendRichMessage(target, 100497308, 1, msgStyle, client.RichClientInfo{
+ Platform: 1,
+ SdkVersion: "0.0.0",
+ PackageName: "com.tencent.qqmusic",
+ Signature: "cbd27cd7c861227d013a25b2d10f0799",
+ }, &message.RichMessage{
+ Title: i.Title,
+ Summary: i.Summary,
+ Url: i.Url,
+ PictureUrl: i.PictureUrl,
+ MusicUrl: i.MusicUrl,
+ })
+ return 0
+ }
+ if i, ok := elem.(*CloudMusicElement); ok {
+ bot.Client.SendFriendRichMessage(target, 100495085, 1, 4, client.RichClientInfo{
+ Platform: 1,
+ SdkVersion: "0.0.0",
+ PackageName: "com.netease.cloudmusic",
+ Signature: "da6b069da1e2982db3e386233f68d76d",
+ }, &message.RichMessage{
+ Title: i.Title,
+ Summary: i.Summary,
+ Url: i.Url,
+ PictureUrl: i.PictureUrl,
+ MusicUrl: i.MusicUrl,
+ })
+ return 0
+ }
newElem = append(newElem, elem)
}
m.Elements = newElem
diff --git a/server/apiAdmin.go b/server/apiAdmin.go
index febb887..ada43b3 100644
--- a/server/apiAdmin.go
+++ b/server/apiAdmin.go
@@ -136,7 +136,7 @@ func (s *webServer) Dologin() {
continue
case client.SMSNeededError:
log.Warnf("账号已开启设备锁, 按下 Enter 向手机 %v 发送短信验证码.", rsp.SMSPhone)
- _, _ = s.Console.ReadString('\n')
+ readLine()
if !cli.RequestSMS() {
log.Warnf("发送验证码失败,可能是请求过于频繁.")
time.Sleep(time.Second * 5)
@@ -151,7 +151,7 @@ func (s *webServer) Dologin() {
log.Warnf("1. 向手机 %v 发送短信验证码", rsp.SMSPhone)
log.Warnf("2. 使用手机QQ扫码验证.")
log.Warn("请输入(1 - 2): ")
- text, _ = s.Console.ReadString('\n')
+ text = readLine()
if strings.Contains(text, "1") {
if !cli.RequestSMS() {
log.Warnf("发送验证码失败,可能是请求过于频繁.")
From 95376a8a63b82a98a0ae78a6917a3eda140abc4f Mon Sep 17 00:00:00 2001
From: Mrs4s
Date: Tue, 13 Oct 2020 20:56:50 +0800
Subject: [PATCH 077/367] feature: custom music type supported.
---
coolq/cqcode.go | 38 ++++++++++++++++++++++++++++----------
1 file changed, 28 insertions(+), 10 deletions(-)
diff --git a/coolq/cqcode.go b/coolq/cqcode.go
index 17ce84c..267df4e 100644
--- a/coolq/cqcode.go
+++ b/coolq/cqcode.go
@@ -367,8 +367,8 @@ func (bot *CQBot) ToElement(t string, d map[string]string, group bool) (m messag
case "text":
return message.NewText(d["text"]), nil
case "image":
- img,err := bot.makeImageElem(d, group)
- if err != nil{
+ img, err := bot.makeImageElem(d, group)
+ if err != nil {
return nil, err
}
tp := d["type"]
@@ -387,21 +387,21 @@ func (bot *CQBot) ToElement(t string, d map[string]string, group bool) (m messag
}
switch tp {
case "flash":
- if i, ok := img.(*message.GroupImageElement); ok{
- return &message.GroupFlashPicElement{GroupImageElement: *i},nil
+ if i, ok := img.(*message.GroupImageElement); ok {
+ return &message.GroupFlashPicElement{GroupImageElement: *i}, nil
}
- if i, ok := img.(*message.FriendImageElement); ok{
- return &message.FriendFlashPicElement{FriendImageElement: *i},nil
+ if i, ok := img.(*message.FriendImageElement); ok {
+ return &message.FriendFlashPicElement{FriendImageElement: *i}, nil
}
case "show":
id, _ := strconv.ParseInt(d["id"], 10, 64)
if id < 40000 || id >= 40006 {
id = 40000
}
- if i, ok := img.(*message.GroupImageElement); ok{
- return &message.GroupShowPicElement{GroupImageElement: *i,EffectId: int32(id)},nil
+ if i, ok := img.(*message.GroupImageElement); ok {
+ return &message.GroupShowPicElement{GroupImageElement: *i, EffectId: int32(id)}, nil
}
- return img,nil // 私聊还没做
+ return img, nil // 私聊还没做
}
case "poke":
@@ -425,7 +425,7 @@ func (bot *CQBot) ToElement(t string, d map[string]string, group bool) (m messag
return nil, errors.New("private voice unsupported now")
}
defer func() {
- if r := recover();r != nil {
+ if r := recover(); r != nil {
m = nil
err = errors.New("tts 转换失败")
}
@@ -524,6 +524,24 @@ func (bot *CQBot) ToElement(t string, d map[string]string, group bool) (m messag
}}, nil
}
if d["type"] == "custom" {
+ if d["subtype"] == "qq" {
+ return &QQMusicElement{MusicElement{
+ Title: d["title"],
+ Summary: d["content"],
+ Url: d["url"],
+ PictureUrl: d["image"],
+ MusicUrl: d["purl"],
+ }}, nil
+ }
+ if d["subtype"] == "163" {
+ return &CloudMusicElement{MusicElement{
+ Title: d["title"],
+ Summary: d["content"],
+ Url: d["url"],
+ PictureUrl: d["image"],
+ MusicUrl: d["purl"],
+ }}, nil
+ }
xml := fmt.Sprintf(`- %s%s
`,
d["title"], d["url"], d["image"], d["audio"], d["title"], d["content"])
return &message.ServiceElement{
From 06e40a940eab202f8c171f0a6187e62013e8f979 Mon Sep 17 00:00:00 2001
From: Mrs4s
Date: Tue, 13 Oct 2020 21:05:09 +0800
Subject: [PATCH 078/367] feature: offline file event.
---
coolq/bot.go | 1 +
coolq/event.go | 20 ++++++++++++++++++++
2 files changed, 21 insertions(+)
diff --git a/coolq/bot.go b/coolq/bot.go
index 92258be..52219c3 100644
--- a/coolq/bot.go
+++ b/coolq/bot.go
@@ -61,6 +61,7 @@ func NewQQBot(cli *client.QQClient, conf *global.JsonConfig) *CQBot {
bot.Client.OnGroupMessageRecalled(bot.groupRecallEvent)
bot.Client.OnGroupNotify(bot.groupNotifyEvent)
bot.Client.OnFriendMessageRecalled(bot.friendRecallEvent)
+ bot.Client.OnReceivedOfflineFile(bot.offlineFileEvent)
bot.Client.OnJoinGroup(bot.joinGroupEvent)
bot.Client.OnLeaveGroup(bot.leaveGroupEvent)
bot.Client.OnGroupMemberJoined(bot.memberJoinEvent)
diff --git a/coolq/event.go b/coolq/event.go
index 3eb65ee..0ba56e6 100644
--- a/coolq/event.go
+++ b/coolq/event.go
@@ -278,6 +278,26 @@ func (bot *CQBot) friendRecallEvent(c *client.QQClient, e *client.FriendMessageR
})
}
+func (bot *CQBot) offlineFileEvent(c *client.QQClient, e *client.OfflineFileEvent) {
+ f := c.FindFriend(e.Sender)
+ if f == nil {
+ return
+ }
+ log.Infof("好友 %v(%v) 发送了离线文件 %v", f.Nickname, f.Uin, e.FileName)
+ bot.dispatchEventMessage(MSG{
+ "post_type": "notice",
+ "notice_type": "offline_file",
+ "user_id": e.Sender,
+ "file": MSG{
+ "name": e.FileName,
+ "size": e.FileSize,
+ "url": e.DownloadUrl,
+ },
+ "self_id": c.Uin,
+ "time": time.Now().Unix(),
+ })
+}
+
func (bot *CQBot) joinGroupEvent(c *client.QQClient, group *client.GroupInfo) {
log.Infof("Bot进入了群 %v.", formatGroupName(group))
bot.dispatchEventMessage(bot.groupIncrease(group.Code, 0, c.Uin))
From 1feb44d6ba63c12ea5972805622d46e5899673b4 Mon Sep 17 00:00:00 2001
From: Mrs4s
Date: Wed, 14 Oct 2020 20:17:02 +0800
Subject: [PATCH 079/367] Update README.md
---
README.md | 4 ++++
1 file changed, 4 insertions(+)
diff --git a/README.md b/README.md
index f7aef0b..3ff33de 100644
--- a/README.md
+++ b/README.md
@@ -35,6 +35,10 @@
- [CQ:reply]
- [CQ:forward]
- [CQ:node]
+- [CQ:gift]
+- [CQ:redbag]
+- [CQ:tts]
+- [CQ:music]
From 2d768c3c1f5c78b596efab0b67d7ee642db83db6 Mon Sep 17 00:00:00 2001
From: Mrs4s <1844812067@qq.com>
Date: Wed, 14 Oct 2020 20:19:54 +0800
Subject: [PATCH 080/367] fix exit.
---
server/apiAdmin.go | 4 +++-
1 file changed, 3 insertions(+), 1 deletion(-)
diff --git a/server/apiAdmin.go b/server/apiAdmin.go
index ada43b3..142e0ae 100644
--- a/server/apiAdmin.go
+++ b/server/apiAdmin.go
@@ -77,7 +77,9 @@ func (s *webServer) Run(addr string, cli *client.QQClient) *coolq.CQBot {
if err != nil {
log.Error(err)
log.Infof("请检查端口是否被占用.")
- time.Sleep(time.Second * 5)
+ c := make(chan os.Signal, 1)
+ signal.Notify(c, os.Interrupt, os.Kill)
+ <-c
os.Exit(1)
}
} else {
From 0ab52da0f0a60e24a4e416cf38b51a52936836e2 Mon Sep 17 00:00:00 2001
From: Mrs4s
Date: Thu, 15 Oct 2020 16:49:07 +0800
Subject: [PATCH 081/367] fix type.
---
coolq/cqcode.go | 10 +++++-----
1 file changed, 5 insertions(+), 5 deletions(-)
diff --git a/coolq/cqcode.go b/coolq/cqcode.go
index 267df4e..63dbad7 100644
--- a/coolq/cqcode.go
+++ b/coolq/cqcode.go
@@ -743,7 +743,7 @@ func (bot *CQBot) makeImageElem(d map[string]string, group bool) (message.IMessa
}
//SendNewPic 一种xml 方式发送的群消息图片
-func (bot *CQBot) SendNewPic(elem message.IMessageElement, source string, icon string, minwidth int64, minheigt int64, maxwidth int64, maxheight int64, group bool) (*message.ServiceElement, error) {
+func (bot *CQBot) SendNewPic(elem message.IMessageElement, source string, icon string, minWidth int64, minHeight int64, maxWidth int64, maxHeight int64, group bool) (*message.ServiceElement, error) {
var xml string
xml = ""
if i, ok := elem.(*message.ImageElement); ok {
@@ -753,7 +753,7 @@ func (bot *CQBot) SendNewPic(elem message.IMessageElement, source string, icon s
log.Warnf("警告: 好友消息 %v 消息图片上传失败: %v", 1, err)
return nil, err
}
- xml = fmt.Sprintf(` `, "", gm.Md5, gm.Md5, len(i.Data), "", minwidth, minheigt, maxwidth, maxheight, source, icon)
+ xml = fmt.Sprintf(` `, "", gm.Md5, gm.Md5, len(i.Data), "", minWidth, minHeight, maxWidth, maxHeight, source, icon)
} else {
gm, err := bot.Client.UploadGroupImage(1, i.Data)
@@ -761,14 +761,14 @@ func (bot *CQBot) SendNewPic(elem message.IMessageElement, source string, icon s
log.Warnf("警告: 群 %v 消息图片上传失败: %v", 1, err)
return nil, err
}
- xml = fmt.Sprintf(` `, "", gm.Md5, gm.Md5, len(i.Data), "", minwidth, minheigt, maxwidth, maxheight, source, icon)
+ xml = fmt.Sprintf(` `, "", gm.Md5, gm.Md5, len(i.Data), "", minWidth, minHeight, maxWidth, maxHeight, source, icon)
}
}
if i, ok := elem.(*message.GroupImageElement); ok {
- xml = fmt.Sprintf(` `, "", i.Md5, i.Md5, 0, "", minwidth, minheigt, maxwidth, maxheight, source, icon)
+ xml = fmt.Sprintf(` `, "", i.Md5, i.Md5, 0, "", minWidth, minHeight, maxWidth, maxHeight, source, icon)
}
if i, ok := elem.(*message.FriendImageElement); ok {
- xml = fmt.Sprintf(` `, "", i.Md5, i.Md5, 0, "", minwidth, minheigt, maxwidth, maxheight, source, icon)
+ xml = fmt.Sprintf(` `, "", i.Md5, i.Md5, 0, "", minWidth, minHeight, maxWidth, maxHeight, source, icon)
}
if xml != "" {
log.Warn(xml)
From 755a79415004bed8cb64e83cb8f759db393ca8f1 Mon Sep 17 00:00:00 2001
From: Mrs4s
Date: Thu, 15 Oct 2020 17:20:25 +0800
Subject: [PATCH 082/367] feature: use leveldb.
---
coolq/bot.go | 51 ++++++++++++++++++++++++++-----------------------
coolq/cqcode.go | 26 ++++++++++++-------------
go.mod | 2 +-
go.sum | 14 ++++++++++++++
4 files changed, 55 insertions(+), 38 deletions(-)
diff --git a/coolq/bot.go b/coolq/bot.go
index 52219c3..5c41c28 100644
--- a/coolq/bot.go
+++ b/coolq/bot.go
@@ -5,6 +5,7 @@ import (
"encoding/gob"
"encoding/json"
"fmt"
+ "github.com/syndtr/goleveldb/leveldb"
"hash/crc32"
"path"
"sync"
@@ -17,14 +18,13 @@ import (
log "github.com/sirupsen/logrus"
"github.com/tidwall/gjson"
- "github.com/xujiajun/nutsdb"
)
type CQBot struct {
Client *client.QQClient
events []func(MSG)
- db *nutsdb.DB
+ db *leveldb.DB
friendReqCache sync.Map
invitedReqCache sync.Map
joinReqCache sync.Map
@@ -41,14 +41,22 @@ func NewQQBot(cli *client.QQClient, conf *global.JsonConfig) *CQBot {
Client: cli,
}
if conf.EnableDB {
- opt := nutsdb.DefaultOptions
- opt.Dir = path.Join("data", "db")
- opt.EntryIdxMode = nutsdb.HintBPTSparseIdxMode
- db, err := nutsdb.Open(opt)
+ p := path.Join("data", "leveldb")
+ db, err := leveldb.OpenFile(p, nil)
if err != nil {
log.Fatalf("打开数据库失败, 如果频繁遇到此问题请清理 data/db 文件夹或关闭数据库功能。")
}
bot.db = db
+ /*
+ opt := nutsdb.DefaultOptions
+ opt.Dir = path.Join("data", "db")
+ opt.EntryIdxMode = nutsdb.HintBPTSparseIdxMode
+ db, err := nutsdb.Open(opt)
+ if err != nil {
+ log.Fatalf("打开数据库失败, 如果频繁遇到此问题请清理 data/db 文件夹或关闭数据库功能。")
+ }
+ bot.db = db
+ */
gob.Register(message.Sender{})
log.Info("信息数据库初始化完成.")
} else {
@@ -103,17 +111,14 @@ func (bot *CQBot) OnEventPush(f func(m MSG)) {
func (bot *CQBot) GetGroupMessage(mid int32) MSG {
if bot.db != nil {
m := MSG{}
- err := bot.db.View(func(tx *nutsdb.Tx) error {
- e, err := tx.Get("group-messages", binary.ToBytes(mid))
- if err != nil {
- return err
- }
- buff := new(bytes.Buffer)
- buff.Write(binary.GZipUncompress(e.Value))
- return gob.NewDecoder(buff).Decode(&m)
- })
+ data, err := bot.db.Get(binary.ToBytes(mid), nil)
if err == nil {
- return m
+ buff := new(bytes.Buffer)
+ buff.Write(binary.GZipUncompress(data))
+ err = gob.NewDecoder(buff).Decode(&m)
+ if err == nil {
+ return m
+ }
}
log.Warnf("获取信息时出现错误: %v id: %v", err, mid)
}
@@ -290,14 +295,12 @@ func (bot *CQBot) InsertGroupMessage(m *message.GroupMessage) int32 {
}
id := ToGlobalId(m.GroupCode, m.Id)
if bot.db != nil {
- err := bot.db.Update(func(tx *nutsdb.Tx) error {
- buf := new(bytes.Buffer)
- if err := gob.NewEncoder(buf).Encode(val); err != nil {
- return err
- }
- return tx.Put("group-messages", binary.ToBytes(id), binary.GZipCompress(buf.Bytes()), 0)
- })
- if err != nil {
+ buf := new(bytes.Buffer)
+ if err := gob.NewEncoder(buf).Encode(val); err != nil {
+ log.Warnf("记录聊天数据时出现错误: %v", err)
+ return -1
+ }
+ if err := bot.db.Put(binary.ToBytes(id), binary.GZipCompress(buf.Bytes()), nil); err != nil {
log.Warnf("记录聊天数据时出现错误: %v", err)
return -1
}
diff --git a/coolq/cqcode.go b/coolq/cqcode.go
index 63dbad7..d4c1f10 100644
--- a/coolq/cqcode.go
+++ b/coolq/cqcode.go
@@ -573,27 +573,27 @@ func (bot *CQBot) ToElement(t string, d map[string]string, group bool) (m messag
case "cardimage":
source := d["source"]
icon := d["icon"]
- minwidth, _ := strconv.ParseInt(d["minwidth"], 10, 64)
- if minwidth == 0 {
- minwidth = 200
+ minWidth, _ := strconv.ParseInt(d["minwidth"], 10, 64)
+ if minWidth == 0 {
+ minWidth = 200
}
- minheight, _ := strconv.ParseInt(d["minheight"], 10, 64)
- if minheight == 0 {
- minheight = 200
+ minHeight, _ := strconv.ParseInt(d["minheight"], 10, 64)
+ if minHeight == 0 {
+ minHeight = 200
}
- maxwidth, _ := strconv.ParseInt(d["maxwidth"], 10, 64)
- if maxwidth == 0 {
- maxwidth = 500
+ maxWidth, _ := strconv.ParseInt(d["maxwidth"], 10, 64)
+ if maxWidth == 0 {
+ maxWidth = 500
}
- maxheight, _ := strconv.ParseInt(d["maxheight"], 10, 64)
- if maxheight == 0 {
- maxheight = 1000
+ maxHeight, _ := strconv.ParseInt(d["maxheight"], 10, 64)
+ if maxHeight == 0 {
+ maxHeight = 1000
}
img, err := bot.makeImageElem(d, group)
if err != nil {
return nil, errors.New("send cardimage faild")
}
- return bot.SendNewPic(img, source, icon, minwidth, minheight, maxwidth, maxheight, group)
+ return bot.SendNewPic(img, source, icon, minWidth, minHeight, maxWidth, maxHeight, group)
default:
return nil, errors.New("unsupported cq code: " + t)
}
diff --git a/go.mod b/go.mod
index 54ce09e..31bf4e9 100644
--- a/go.mod
+++ b/go.mod
@@ -12,10 +12,10 @@ require (
github.com/pkg/errors v0.9.1 // indirect
github.com/rifflock/lfshook v0.0.0-20180920164130-b9218ef580f5
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/tidwall/gjson v1.6.1
github.com/wdvxdr1123/go-silk v0.0.0-20201007123416-b982fd3d91d6
- github.com/xujiajun/nutsdb v0.5.0
github.com/yinghau76/go-ascii-art v0.0.0-20190517192627-e7f465a30189
golang.org/x/time v0.0.0-20200630173020-3af7569d3a1e
)
diff --git a/go.sum b/go.sum
index 844e617..a9f277c 100644
--- a/go.sum
+++ b/go.sum
@@ -10,6 +10,7 @@ github.com/davecgh/go-spew v1.1.0/go.mod h1:J7Y8YcW2NihsgmVo/mv3lAwl/skON4iLHjSs
github.com/davecgh/go-spew v1.1.1/go.mod h1:J7Y8YcW2NihsgmVo/mv3lAwl/skON4iLHjSsI+c5H38=
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/fsnotify/fsnotify v1.4.7/go.mod h1:jwhsz4b93w/PPRr/qN1Yymfu8t87LnFCMoQvtojpjFo=
github.com/gin-contrib/sse v0.1.0 h1:Y/yl/+YNO8GZSjAhjMsSuLt29uWRFHdHYUb5lYOV9qE=
github.com/gin-contrib/sse v0.1.0/go.mod h1:RHrZQHXnP2xjPF+u1gW/2HnVO7nvIa9PG3Gm+fLHvGI=
github.com/gin-gonic/gin v1.5.0/go.mod h1:Nd6IXA8m5kNZdNEHMBd93KT+mdY3+bewLgRvmCsR2Do=
@@ -37,6 +38,8 @@ github.com/golang/protobuf v1.4.0/go.mod h1:jodUvKwWbYaEsadDk5Fwe5c77LiNKVO9IDvq
github.com/golang/protobuf v1.4.1/go.mod h1:U8fpvMrcmy5pZrNK1lt4xCsGvpyWQ/VVv6QDs8UjoX8=
github.com/golang/protobuf v1.4.2 h1:+Z5KGCizgyZCbGh1KZqA0fcLLkwbsjIzS4aV2v7wJX0=
github.com/golang/protobuf v1.4.2/go.mod h1:oDoupMAO8OvCJWAcko0GGGIgR6R6ocIYbsSw735rRwI=
+github.com/golang/snappy v0.0.0-20180518054509-2e65f85255db h1:woRePGFeVFfLKN/pOkfl+p/TAqKOfFu+7KPlMVpok/w=
+github.com/golang/snappy v0.0.0-20180518054509-2e65f85255db/go.mod h1:/XxbfmMg8lxefKM7IXC3fBNl/7bRcc72aCRzEWrmP2Q=
github.com/google/go-cmp v0.2.0/go.mod h1:oXzfMopK8JAjlY9xF4vHSVASa0yLyX7SntLO5aqRK0M=
github.com/google/go-cmp v0.3.0/go.mod h1:8QqcDgzrUqlUb/G2PQTWiueGozuR1884gddMywk6iLU=
github.com/google/go-cmp v0.3.1/go.mod h1:8QqcDgzrUqlUb/G2PQTWiueGozuR1884gddMywk6iLU=
@@ -48,6 +51,7 @@ github.com/gorilla/websocket v1.4.2 h1:+/TMaTYc4QFitKJxsQ7Yye35DkWvkdLcvGKqM+x0U
github.com/gorilla/websocket v1.4.2/go.mod h1:YR8l580nyteQvAITg2hZ9XVh4b55+EU/adAjf1fMHhE=
github.com/guonaihong/gout v0.1.2 h1:TR2XCRopGgJdj231IayEoeavgbznFXzzzcZVdT/hG10=
github.com/guonaihong/gout v0.1.2/go.mod h1:vXvv5Kxr70eM5wrp4F0+t9lnLWmq+YPW2GByll2f/EA=
+github.com/hpcloud/tail v1.0.0/go.mod h1:ab1qPbhIpdTxEkNHXyeSf5vhxWSCs/tWer42PpOxQnU=
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/konsorten/go-windows-terminal-sequences v1.0.1/go.mod h1:T0+1ngSBFLxvqU3pZ+m/2kptfBszLMUkC4ZK/EgS/cQ=
@@ -66,6 +70,9 @@ github.com/modern-go/concurrent v0.0.0-20180228061459-e0a39a4cb421/go.mod h1:6dJ
github.com/modern-go/reflect2 v0.0.0-20180701023420-4b7aa43c6742/go.mod h1:bx2lNnkwVCuqBIxFjflWJWanXIb3RllmbCylyMrvgv0=
github.com/nfnt/resize v0.0.0-20180221191011-83c6a9932646 h1:zYyBkD/k9seD2A7fsi6Oo2LfFZAehjjQMERAvZLEDnQ=
github.com/nfnt/resize v0.0.0-20180221191011-83c6a9932646/go.mod h1:jpp1/29i3P1S/RLdc7JQKbRpFeM1dOBd8T9ki5s+AY8=
+github.com/onsi/ginkgo v1.6.0/go.mod h1:lLunBs/Ym6LB5Z9jYTR76FiuTmxDTDusOGeTQH+WWjE=
+github.com/onsi/ginkgo v1.7.0/go.mod h1:lLunBs/Ym6LB5Z9jYTR76FiuTmxDTDusOGeTQH+WWjE=
+github.com/onsi/gomega v1.4.3/go.mod h1:ex+gbHU/CVuBBDIJjb2X0qEXbFg53c61hWP/1CpauHY=
github.com/pkg/errors v0.8.1/go.mod h1:bwawxfHBFNV+L2hUp1rHADufV3IMtnDRdf1r5NINEl0=
github.com/pkg/errors v0.9.1 h1:FEBLx1zS214owpjy7qsBeixbURkuhQAwrK5UwLGTwt4=
github.com/pkg/errors v0.9.1/go.mod h1:bwawxfHBFNV+L2hUp1rHADufV3IMtnDRdf1r5NINEl0=
@@ -81,6 +88,8 @@ github.com/stretchr/objx v0.1.1/go.mod h1:HFkY916IF+rwdDfMAkV7OtwuqBVzrE8GR6GFx+
github.com/stretchr/testify v1.2.2/go.mod h1:a8OnRcib4nhh0OaRAV+Yts87kKdq0PP7pXfy6kDkUVs=
github.com/stretchr/testify v1.3.0/go.mod h1:M5WIy9Dh21IEIfnGCwXGc5bZfKNJtfHm1UVUgZn+9EI=
github.com/stretchr/testify v1.4.0/go.mod h1:j7eGeouHqKxXV5pUuKE4zz7dFj8WfuZ+81PSLYec5m4=
+github.com/syndtr/goleveldb v1.0.0 h1:fBdIW9lB4Iz0n9khmH8w27SJ3QEJ7+IgjPEwGSZiFdE=
+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/tidwall/gjson v1.6.1 h1:LRbvNuNuvAiISWg6gxLEFuCe72UKy5hDqhxW/8183ws=
@@ -111,6 +120,7 @@ golang.org/x/lint v0.0.0-20190227174305-5b3e6a55c961/go.mod h1:wehouNa3lNwaWXcvx
golang.org/x/lint v0.0.0-20190313153728-d0100b6bd8b3/go.mod h1:6SW0HCj/g11FgYtHlgUYUwCkIfeOF89ocIRzGO/8vkc=
golang.org/x/net v0.0.0-20180724234803-3673e40ba225/go.mod h1:mL1N/T3taQHkDXs73rZJwtUhF3w3ftmwwsq0BUmARs4=
golang.org/x/net v0.0.0-20180826012351-8a410e7b638d/go.mod h1:mL1N/T3taQHkDXs73rZJwtUhF3w3ftmwwsq0BUmARs4=
+golang.org/x/net v0.0.0-20180906233101-161cd47e91fd/go.mod h1:mL1N/T3taQHkDXs73rZJwtUhF3w3ftmwwsq0BUmARs4=
golang.org/x/net v0.0.0-20190213061140-3a22650c66bd/go.mod h1:mL1N/T3taQHkDXs73rZJwtUhF3w3ftmwwsq0BUmARs4=
golang.org/x/net v0.0.0-20190311183353-d8887717615a/go.mod h1:t9HGtf8HONx5eT2rtn7q6eTqICYqUVnKs3thJo3Qplg=
golang.org/x/net v0.0.0-20200114155413-6afb5195e5aa h1:F+8P+gmewFQYRk6JoLQLwjBCTu3mcIURZfNkVweuRKA=
@@ -120,6 +130,7 @@ golang.org/x/sync v0.0.0-20180314180146-1d60e4601c6f/go.mod h1:RxMgew5VJxzue5/jJ
golang.org/x/sync v0.0.0-20181108010431-42b317875d0f/go.mod h1:RxMgew5VJxzue5/jJTE5uejpjVlOe/izrB70Jof72aM=
golang.org/x/sync v0.0.0-20190423024810-112230192c58/go.mod h1:RxMgew5VJxzue5/jJTE5uejpjVlOe/izrB70Jof72aM=
golang.org/x/sys v0.0.0-20180830151530-49385e6e1522/go.mod h1:STP8DvDyc/dI5b8T5hshtkjS+E42TnysNCUPdjciGhY=
+golang.org/x/sys v0.0.0-20180909124046-d0be0721c37e/go.mod h1:STP8DvDyc/dI5b8T5hshtkjS+E42TnysNCUPdjciGhY=
golang.org/x/sys v0.0.0-20181221143128-b4a75ba826a6/go.mod h1:STP8DvDyc/dI5b8T5hshtkjS+E42TnysNCUPdjciGhY=
golang.org/x/sys v0.0.0-20190215142949-d0b11bdaac8a/go.mod h1:STP8DvDyc/dI5b8T5hshtkjS+E42TnysNCUPdjciGhY=
golang.org/x/sys v0.0.0-20190422165155-953cdadca894/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs=
@@ -156,8 +167,11 @@ google.golang.org/protobuf v1.23.1-0.20200526195155-81db48ad09cc/go.mod h1:EGpAD
google.golang.org/protobuf v1.25.0 h1:Ejskq+SyPohKW+1uil0JJMtmHCgJPJ/qWTxr8qp+R4c=
google.golang.org/protobuf v1.25.0/go.mod h1:9JNX74DMeImyA3h4bdi1ymwjUzf21/xIlbajtzgsN7c=
gopkg.in/check.v1 v0.0.0-20161208181325-20d25e280405/go.mod h1:Co6ibVJAznAaIkqp8huTwlJQCZ016jof/cbN4VW5Yz0=
+gopkg.in/fsnotify.v1 v1.4.7/go.mod h1:Tz8NjZHkW78fSQdbUxIjBTcgA1z1m8ZHf0WmKUhAMys=
gopkg.in/go-playground/assert.v1 v1.2.1/go.mod h1:9RXL0bg/zibRAgZUYszZSwO/z8Y/a8bDuhia5mkpMnE=
gopkg.in/go-playground/validator.v9 v9.29.1/go.mod h1:+c9/zcJMFNgbLvly1L1V+PpxWdVbfP1avr/N00E2vyQ=
+gopkg.in/tomb.v1 v1.0.0-20141024135613-dd632973f1e7/go.mod h1:dt/ZhP58zS4L8KSrWDmTeBkI65Dw0HsyUHuEVlX15mw=
+gopkg.in/yaml.v2 v2.2.1/go.mod h1:hI93XBmqTisBFMUTm0b8Fm+jr3Dg1NNxqwp+5A1VGuI=
gopkg.in/yaml.v2 v2.2.2/go.mod h1:hI93XBmqTisBFMUTm0b8Fm+jr3Dg1NNxqwp+5A1VGuI=
gopkg.in/yaml.v2 v2.2.8 h1:obN1ZagJSUGI0Ek/LBmuj4SNLPfIny3KsKFopxRdj10=
gopkg.in/yaml.v2 v2.2.8/go.mod h1:hI93XBmqTisBFMUTm0b8Fm+jr3Dg1NNxqwp+5A1VGuI=
From 18f8a12b8c8253739af67c57f56aa09c0518f862 Mon Sep 17 00:00:00 2001
From: Mrs4s
Date: Thu, 15 Oct 2020 20:31:33 +0800
Subject: [PATCH 083/367] update MiraiGo.
---
go.mod | 2 +-
go.sum | 16 ++++------------
2 files changed, 5 insertions(+), 13 deletions(-)
diff --git a/go.mod b/go.mod
index 31bf4e9..e03c41e 100644
--- a/go.mod
+++ b/go.mod
@@ -3,7 +3,7 @@ module github.com/Mrs4s/go-cqhttp
go 1.14
require (
- github.com/Mrs4s/MiraiGo v0.0.0-20201013050256-7b392cacdb79
+ github.com/Mrs4s/MiraiGo v0.0.0-20201015123028-325bfd80e9e4
github.com/gin-gonic/gin v1.6.3
github.com/gorilla/websocket v1.4.2
github.com/guonaihong/gout v0.1.2
diff --git a/go.sum b/go.sum
index a9f277c..2978d34 100644
--- a/go.sum
+++ b/go.sum
@@ -1,9 +1,9 @@
cloud.google.com/go v0.26.0/go.mod h1:aQUYkXzVsufM+DwF1aE+0xfcU+56JwCaLick0ClmMTw=
github.com/BurntSushi/toml v0.3.1/go.mod h1:xHWCNGjB5oqiDr8zfno3MHue2Ht5sIBksp03qcyfWMU=
-github.com/Mrs4s/MiraiGo v0.0.0-20201013050256-7b392cacdb79 h1:t9PK37mnl5tbilG+FMUY1hZujoDjFr8iO8upwYHww5c=
-github.com/Mrs4s/MiraiGo v0.0.0-20201013050256-7b392cacdb79/go.mod h1:cwYPI2uq6nxNbx0nA6YuAKF1V5szSs6FPlGVLQvRUlo=
-github.com/bwmarrin/snowflake v0.3.0 h1:xm67bEhkKh6ij1790JB83OujPR5CzNe8QuQqAgISZN0=
-github.com/bwmarrin/snowflake v0.3.0/go.mod h1:NdZxfVWX+oR6y2K0o6qAYv6gIOP9rjG0/E9WsDpxqwE=
+github.com/Mrs4s/MiraiGo v0.0.0-20201015122829-c747c2a2ae2e h1:IjE9x7GxYC0UxNhgpWRDK0GalOxoS/KzZIp0AbKWjVo=
+github.com/Mrs4s/MiraiGo v0.0.0-20201015122829-c747c2a2ae2e/go.mod h1:cwYPI2uq6nxNbx0nA6YuAKF1V5szSs6FPlGVLQvRUlo=
+github.com/Mrs4s/MiraiGo v0.0.0-20201015123028-325bfd80e9e4 h1:5ZcH7lNF7Cf+1/ZF+5YO9ERisiJp+7wNOgRMhMKczS0=
+github.com/Mrs4s/MiraiGo v0.0.0-20201015123028-325bfd80e9e4/go.mod h1:cwYPI2uq6nxNbx0nA6YuAKF1V5szSs6FPlGVLQvRUlo=
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=
@@ -104,13 +104,6 @@ github.com/ugorji/go/codec v1.1.7 h1:2SvQaVZ1ouYrrKKwoSk2pzd4A9evlKJb9oTL+OaLUSs
github.com/ugorji/go/codec v1.1.7/go.mod h1:Ax+UKWsSmolVDwsd+7N3ZtXu+yMGCf907BLYF3GoBXY=
github.com/wdvxdr1123/go-silk v0.0.0-20201007123416-b982fd3d91d6 h1:lX18MCdNzT2zIi7K02x4C5cPkDXpL+wCb1YTAMXjLWQ=
github.com/wdvxdr1123/go-silk v0.0.0-20201007123416-b982fd3d91d6/go.mod h1:5q9LFlBr+yX/J8Jd/9wHdXwkkjFkNyQIS7kX2Lgx/Zs=
-github.com/xujiajun/gorouter v1.2.0/go.mod h1:yJrIta+bTNpBM/2UT8hLOaEAFckO+m/qmR3luMIQygM=
-github.com/xujiajun/mmap-go v1.0.1 h1:7Se7ss1fLPPRW+ePgqGpCkfGIZzJV6JPq9Wq9iv/WHc=
-github.com/xujiajun/mmap-go v1.0.1/go.mod h1:CNN6Sw4SL69Sui00p0zEzcZKbt+5HtEnYUsc6BKKRMg=
-github.com/xujiajun/nutsdb v0.5.0 h1:j/jM3Zw7Chg8WK7bAcKR0Xr7Mal47U1oJAMgySfDn9E=
-github.com/xujiajun/nutsdb v0.5.0/go.mod h1:owdwN0tW084RxEodABLbO7h4Z2s9WiAjZGZFhRh0/1Q=
-github.com/xujiajun/utils v0.0.0-20190123093513-8bf096c4f53b h1:jKG9OiL4T4xQN3IUrhUpc1tG+HfDXppkgVcrAiiaI/0=
-github.com/xujiajun/utils v0.0.0-20190123093513-8bf096c4f53b/go.mod h1:AZd87GYJlUzl82Yab2kTjx1EyXSQCAfZDhpTo1SQC4k=
github.com/yinghau76/go-ascii-art v0.0.0-20190517192627-e7f465a30189 h1:4UJw9if55Fu3HOwbfcaQlJ27p3oeJU2JZqoeT3ITJQk=
github.com/yinghau76/go-ascii-art v0.0.0-20190517192627-e7f465a30189/go.mod h1:rIrm5geMiBhPQkdfUm8gDFi/WiHneOp1i9KjmJqc+9I=
golang.org/x/crypto v0.0.0-20190308221718-c2843e01d9a2/go.mod h1:djNgcEr1/C05ACkg1iLfiJU5Ep61QUkGW8qpdssI0+w=
@@ -131,7 +124,6 @@ golang.org/x/sync v0.0.0-20181108010431-42b317875d0f/go.mod h1:RxMgew5VJxzue5/jJ
golang.org/x/sync v0.0.0-20190423024810-112230192c58/go.mod h1:RxMgew5VJxzue5/jJTE5uejpjVlOe/izrB70Jof72aM=
golang.org/x/sys v0.0.0-20180830151530-49385e6e1522/go.mod h1:STP8DvDyc/dI5b8T5hshtkjS+E42TnysNCUPdjciGhY=
golang.org/x/sys v0.0.0-20180909124046-d0be0721c37e/go.mod h1:STP8DvDyc/dI5b8T5hshtkjS+E42TnysNCUPdjciGhY=
-golang.org/x/sys v0.0.0-20181221143128-b4a75ba826a6/go.mod h1:STP8DvDyc/dI5b8T5hshtkjS+E42TnysNCUPdjciGhY=
golang.org/x/sys v0.0.0-20190215142949-d0b11bdaac8a/go.mod h1:STP8DvDyc/dI5b8T5hshtkjS+E42TnysNCUPdjciGhY=
golang.org/x/sys v0.0.0-20190422165155-953cdadca894/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs=
golang.org/x/sys v0.0.0-20190813064441-fde4db37ae7a/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs=
From 9bd41c77925e4ef7d1127ee62ada0b5a3d791e2e Mon Sep 17 00:00:00 2001
From: Mrs4s <1844812067@qq.com>
Date: Sat, 17 Oct 2020 14:55:53 +0800
Subject: [PATCH 084/367] update MiraiGo & private ptt support.
---
coolq/bot.go | 9 +++++++++
coolq/cqcode.go | 6 ------
go.mod | 2 +-
go.sum | 2 ++
4 files changed, 12 insertions(+), 7 deletions(-)
diff --git a/coolq/bot.go b/coolq/bot.go
index 52219c3..3152fe4 100644
--- a/coolq/bot.go
+++ b/coolq/bot.go
@@ -218,6 +218,15 @@ func (bot *CQBot) SendPrivateMessage(target int64, m *message.SendingMessage) in
newElem = append(newElem, fm)
continue
}
+ if i, ok := elem.(*message.VoiceElement); ok {
+ fv, err := bot.Client.UploadPrivatePtt(target, i.Data)
+ if err != nil {
+ log.Warnf("警告: 好友 %v 消息语音上传失败: %v", target, err)
+ continue
+ }
+ newElem = append(newElem, fv)
+ continue
+ }
if i, ok := elem.(*QQMusicElement); ok {
var msgStyle uint32 = 4
if i.MusicUrl == "" {
diff --git a/coolq/cqcode.go b/coolq/cqcode.go
index 267df4e..13e77aa 100644
--- a/coolq/cqcode.go
+++ b/coolq/cqcode.go
@@ -421,9 +421,6 @@ func (bot *CQBot) ToElement(t string, d map[string]string, group bool) (m messag
}
return &GiftElement{Target: t, GiftId: GiftId[id]}, nil
case "tts":
- if !group {
- return nil, errors.New("private voice unsupported now")
- }
defer func() {
if r := recover(); r != nil {
m = nil
@@ -437,9 +434,6 @@ func (bot *CQBot) ToElement(t string, d map[string]string, group bool) (m messag
}
return &message.VoiceElement{Data: data}, nil
case "record":
- if !group {
- return nil, errors.New("private voice unsupported now")
- }
f := d["file"]
data, err := global.FindFile(f, d["cache"], global.VOICE_PATH)
if err != nil {
diff --git a/go.mod b/go.mod
index 54ce09e..2a20da2 100644
--- a/go.mod
+++ b/go.mod
@@ -3,7 +3,7 @@ module github.com/Mrs4s/go-cqhttp
go 1.14
require (
- github.com/Mrs4s/MiraiGo v0.0.0-20201013050256-7b392cacdb79
+ github.com/Mrs4s/MiraiGo v0.0.0-20201016033322-0922b058ff56
github.com/gin-gonic/gin v1.6.3
github.com/gorilla/websocket v1.4.2
github.com/guonaihong/gout v0.1.2
diff --git a/go.sum b/go.sum
index 844e617..3ae413a 100644
--- a/go.sum
+++ b/go.sum
@@ -2,6 +2,8 @@ cloud.google.com/go v0.26.0/go.mod h1:aQUYkXzVsufM+DwF1aE+0xfcU+56JwCaLick0ClmMT
github.com/BurntSushi/toml v0.3.1/go.mod h1:xHWCNGjB5oqiDr8zfno3MHue2Ht5sIBksp03qcyfWMU=
github.com/Mrs4s/MiraiGo v0.0.0-20201013050256-7b392cacdb79 h1:t9PK37mnl5tbilG+FMUY1hZujoDjFr8iO8upwYHww5c=
github.com/Mrs4s/MiraiGo v0.0.0-20201013050256-7b392cacdb79/go.mod h1:cwYPI2uq6nxNbx0nA6YuAKF1V5szSs6FPlGVLQvRUlo=
+github.com/Mrs4s/MiraiGo v0.0.0-20201016033322-0922b058ff56 h1:vcXOLG+W/c56EWOwA8btrHMEGBMwFgLUZli0Jh1axzg=
+github.com/Mrs4s/MiraiGo v0.0.0-20201016033322-0922b058ff56/go.mod h1:cwYPI2uq6nxNbx0nA6YuAKF1V5szSs6FPlGVLQvRUlo=
github.com/bwmarrin/snowflake v0.3.0 h1:xm67bEhkKh6ij1790JB83OujPR5CzNe8QuQqAgISZN0=
github.com/bwmarrin/snowflake v0.3.0/go.mod h1:NdZxfVWX+oR6y2K0o6qAYv6gIOP9rjG0/E9WsDpxqwE=
github.com/census-instrumentation/opencensus-proto v0.2.1/go.mod h1:f6KPmirojxKA12rnyqOA5BBL4O983OfeGPqjHWSTneU=
From 08394ae87d0f7c8a442ca7dd2d10c6a15a45e792 Mon Sep 17 00:00:00 2001
From: Mrs4s <1844812067@qq.com>
Date: Sat, 17 Oct 2020 15:02:51 +0800
Subject: [PATCH 085/367] update golang version.
---
.github/workflows/ci.yml | 2 +-
.github/workflows/release.yml | 1 +
go.mod | 1 +
go.sum | 14 ++++++++++++++
4 files changed, 17 insertions(+), 1 deletion(-)
diff --git a/.github/workflows/ci.yml b/.github/workflows/ci.yml
index 6bca0fe..a6b3a27 100644
--- a/.github/workflows/ci.yml
+++ b/.github/workflows/ci.yml
@@ -28,7 +28,7 @@ jobs:
- name: Setup Go environment
uses: actions/setup-go@v2.1.1
with:
- go-version: 1.14
+ go-version: 1.15
- name: Build binary file
env:
diff --git a/.github/workflows/release.yml b/.github/workflows/release.yml
index 48c5184..68909f4 100644
--- a/.github/workflows/release.yml
+++ b/.github/workflows/release.yml
@@ -26,5 +26,6 @@ jobs:
github_token: ${{ secrets.GITHUB_TOKEN }}
goos: ${{ matrix.goos }}
goarch: ${{ matrix.goarch }}
+ goversion: "https://golang.org/dl/go1.15.3.linux-amd64.tar.gz"
ldflags: -w -s -X "github.com/Mrs4s/go-cqhttp/coolq.Version=${{ env.RELEASE_VERSION }}"
\ No newline at end of file
diff --git a/go.mod b/go.mod
index 2a20da2..7bff5da 100644
--- a/go.mod
+++ b/go.mod
@@ -12,6 +12,7 @@ require (
github.com/pkg/errors v0.9.1 // indirect
github.com/rifflock/lfshook v0.0.0-20180920164130-b9218ef580f5
github.com/sirupsen/logrus v1.7.0
+ github.com/syndtr/goleveldb v1.0.0 // indirect
github.com/t-tomalak/logrus-easy-formatter v0.0.0-20190827215021-c074f06c5816
github.com/tidwall/gjson v1.6.1
github.com/wdvxdr1123/go-silk v0.0.0-20201007123416-b982fd3d91d6
diff --git a/go.sum b/go.sum
index 3ae413a..5ac49b5 100644
--- a/go.sum
+++ b/go.sum
@@ -12,6 +12,7 @@ github.com/davecgh/go-spew v1.1.0/go.mod h1:J7Y8YcW2NihsgmVo/mv3lAwl/skON4iLHjSs
github.com/davecgh/go-spew v1.1.1/go.mod h1:J7Y8YcW2NihsgmVo/mv3lAwl/skON4iLHjSsI+c5H38=
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/fsnotify/fsnotify v1.4.7/go.mod h1:jwhsz4b93w/PPRr/qN1Yymfu8t87LnFCMoQvtojpjFo=
github.com/gin-contrib/sse v0.1.0 h1:Y/yl/+YNO8GZSjAhjMsSuLt29uWRFHdHYUb5lYOV9qE=
github.com/gin-contrib/sse v0.1.0/go.mod h1:RHrZQHXnP2xjPF+u1gW/2HnVO7nvIa9PG3Gm+fLHvGI=
github.com/gin-gonic/gin v1.5.0/go.mod h1:Nd6IXA8m5kNZdNEHMBd93KT+mdY3+bewLgRvmCsR2Do=
@@ -39,6 +40,8 @@ github.com/golang/protobuf v1.4.0/go.mod h1:jodUvKwWbYaEsadDk5Fwe5c77LiNKVO9IDvq
github.com/golang/protobuf v1.4.1/go.mod h1:U8fpvMrcmy5pZrNK1lt4xCsGvpyWQ/VVv6QDs8UjoX8=
github.com/golang/protobuf v1.4.2 h1:+Z5KGCizgyZCbGh1KZqA0fcLLkwbsjIzS4aV2v7wJX0=
github.com/golang/protobuf v1.4.2/go.mod h1:oDoupMAO8OvCJWAcko0GGGIgR6R6ocIYbsSw735rRwI=
+github.com/golang/snappy v0.0.0-20180518054509-2e65f85255db h1:woRePGFeVFfLKN/pOkfl+p/TAqKOfFu+7KPlMVpok/w=
+github.com/golang/snappy v0.0.0-20180518054509-2e65f85255db/go.mod h1:/XxbfmMg8lxefKM7IXC3fBNl/7bRcc72aCRzEWrmP2Q=
github.com/google/go-cmp v0.2.0/go.mod h1:oXzfMopK8JAjlY9xF4vHSVASa0yLyX7SntLO5aqRK0M=
github.com/google/go-cmp v0.3.0/go.mod h1:8QqcDgzrUqlUb/G2PQTWiueGozuR1884gddMywk6iLU=
github.com/google/go-cmp v0.3.1/go.mod h1:8QqcDgzrUqlUb/G2PQTWiueGozuR1884gddMywk6iLU=
@@ -50,6 +53,7 @@ github.com/gorilla/websocket v1.4.2 h1:+/TMaTYc4QFitKJxsQ7Yye35DkWvkdLcvGKqM+x0U
github.com/gorilla/websocket v1.4.2/go.mod h1:YR8l580nyteQvAITg2hZ9XVh4b55+EU/adAjf1fMHhE=
github.com/guonaihong/gout v0.1.2 h1:TR2XCRopGgJdj231IayEoeavgbznFXzzzcZVdT/hG10=
github.com/guonaihong/gout v0.1.2/go.mod h1:vXvv5Kxr70eM5wrp4F0+t9lnLWmq+YPW2GByll2f/EA=
+github.com/hpcloud/tail v1.0.0/go.mod h1:ab1qPbhIpdTxEkNHXyeSf5vhxWSCs/tWer42PpOxQnU=
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/konsorten/go-windows-terminal-sequences v1.0.1/go.mod h1:T0+1ngSBFLxvqU3pZ+m/2kptfBszLMUkC4ZK/EgS/cQ=
@@ -68,6 +72,9 @@ github.com/modern-go/concurrent v0.0.0-20180228061459-e0a39a4cb421/go.mod h1:6dJ
github.com/modern-go/reflect2 v0.0.0-20180701023420-4b7aa43c6742/go.mod h1:bx2lNnkwVCuqBIxFjflWJWanXIb3RllmbCylyMrvgv0=
github.com/nfnt/resize v0.0.0-20180221191011-83c6a9932646 h1:zYyBkD/k9seD2A7fsi6Oo2LfFZAehjjQMERAvZLEDnQ=
github.com/nfnt/resize v0.0.0-20180221191011-83c6a9932646/go.mod h1:jpp1/29i3P1S/RLdc7JQKbRpFeM1dOBd8T9ki5s+AY8=
+github.com/onsi/ginkgo v1.6.0/go.mod h1:lLunBs/Ym6LB5Z9jYTR76FiuTmxDTDusOGeTQH+WWjE=
+github.com/onsi/ginkgo v1.7.0/go.mod h1:lLunBs/Ym6LB5Z9jYTR76FiuTmxDTDusOGeTQH+WWjE=
+github.com/onsi/gomega v1.4.3/go.mod h1:ex+gbHU/CVuBBDIJjb2X0qEXbFg53c61hWP/1CpauHY=
github.com/pkg/errors v0.8.1/go.mod h1:bwawxfHBFNV+L2hUp1rHADufV3IMtnDRdf1r5NINEl0=
github.com/pkg/errors v0.9.1 h1:FEBLx1zS214owpjy7qsBeixbURkuhQAwrK5UwLGTwt4=
github.com/pkg/errors v0.9.1/go.mod h1:bwawxfHBFNV+L2hUp1rHADufV3IMtnDRdf1r5NINEl0=
@@ -83,6 +90,8 @@ github.com/stretchr/objx v0.1.1/go.mod h1:HFkY916IF+rwdDfMAkV7OtwuqBVzrE8GR6GFx+
github.com/stretchr/testify v1.2.2/go.mod h1:a8OnRcib4nhh0OaRAV+Yts87kKdq0PP7pXfy6kDkUVs=
github.com/stretchr/testify v1.3.0/go.mod h1:M5WIy9Dh21IEIfnGCwXGc5bZfKNJtfHm1UVUgZn+9EI=
github.com/stretchr/testify v1.4.0/go.mod h1:j7eGeouHqKxXV5pUuKE4zz7dFj8WfuZ+81PSLYec5m4=
+github.com/syndtr/goleveldb v1.0.0 h1:fBdIW9lB4Iz0n9khmH8w27SJ3QEJ7+IgjPEwGSZiFdE=
+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/tidwall/gjson v1.6.1 h1:LRbvNuNuvAiISWg6gxLEFuCe72UKy5hDqhxW/8183ws=
@@ -113,6 +122,7 @@ golang.org/x/lint v0.0.0-20190227174305-5b3e6a55c961/go.mod h1:wehouNa3lNwaWXcvx
golang.org/x/lint v0.0.0-20190313153728-d0100b6bd8b3/go.mod h1:6SW0HCj/g11FgYtHlgUYUwCkIfeOF89ocIRzGO/8vkc=
golang.org/x/net v0.0.0-20180724234803-3673e40ba225/go.mod h1:mL1N/T3taQHkDXs73rZJwtUhF3w3ftmwwsq0BUmARs4=
golang.org/x/net v0.0.0-20180826012351-8a410e7b638d/go.mod h1:mL1N/T3taQHkDXs73rZJwtUhF3w3ftmwwsq0BUmARs4=
+golang.org/x/net v0.0.0-20180906233101-161cd47e91fd/go.mod h1:mL1N/T3taQHkDXs73rZJwtUhF3w3ftmwwsq0BUmARs4=
golang.org/x/net v0.0.0-20190213061140-3a22650c66bd/go.mod h1:mL1N/T3taQHkDXs73rZJwtUhF3w3ftmwwsq0BUmARs4=
golang.org/x/net v0.0.0-20190311183353-d8887717615a/go.mod h1:t9HGtf8HONx5eT2rtn7q6eTqICYqUVnKs3thJo3Qplg=
golang.org/x/net v0.0.0-20200114155413-6afb5195e5aa h1:F+8P+gmewFQYRk6JoLQLwjBCTu3mcIURZfNkVweuRKA=
@@ -122,6 +132,7 @@ golang.org/x/sync v0.0.0-20180314180146-1d60e4601c6f/go.mod h1:RxMgew5VJxzue5/jJ
golang.org/x/sync v0.0.0-20181108010431-42b317875d0f/go.mod h1:RxMgew5VJxzue5/jJTE5uejpjVlOe/izrB70Jof72aM=
golang.org/x/sync v0.0.0-20190423024810-112230192c58/go.mod h1:RxMgew5VJxzue5/jJTE5uejpjVlOe/izrB70Jof72aM=
golang.org/x/sys v0.0.0-20180830151530-49385e6e1522/go.mod h1:STP8DvDyc/dI5b8T5hshtkjS+E42TnysNCUPdjciGhY=
+golang.org/x/sys v0.0.0-20180909124046-d0be0721c37e/go.mod h1:STP8DvDyc/dI5b8T5hshtkjS+E42TnysNCUPdjciGhY=
golang.org/x/sys v0.0.0-20181221143128-b4a75ba826a6/go.mod h1:STP8DvDyc/dI5b8T5hshtkjS+E42TnysNCUPdjciGhY=
golang.org/x/sys v0.0.0-20190215142949-d0b11bdaac8a/go.mod h1:STP8DvDyc/dI5b8T5hshtkjS+E42TnysNCUPdjciGhY=
golang.org/x/sys v0.0.0-20190422165155-953cdadca894/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs=
@@ -158,8 +169,11 @@ google.golang.org/protobuf v1.23.1-0.20200526195155-81db48ad09cc/go.mod h1:EGpAD
google.golang.org/protobuf v1.25.0 h1:Ejskq+SyPohKW+1uil0JJMtmHCgJPJ/qWTxr8qp+R4c=
google.golang.org/protobuf v1.25.0/go.mod h1:9JNX74DMeImyA3h4bdi1ymwjUzf21/xIlbajtzgsN7c=
gopkg.in/check.v1 v0.0.0-20161208181325-20d25e280405/go.mod h1:Co6ibVJAznAaIkqp8huTwlJQCZ016jof/cbN4VW5Yz0=
+gopkg.in/fsnotify.v1 v1.4.7/go.mod h1:Tz8NjZHkW78fSQdbUxIjBTcgA1z1m8ZHf0WmKUhAMys=
gopkg.in/go-playground/assert.v1 v1.2.1/go.mod h1:9RXL0bg/zibRAgZUYszZSwO/z8Y/a8bDuhia5mkpMnE=
gopkg.in/go-playground/validator.v9 v9.29.1/go.mod h1:+c9/zcJMFNgbLvly1L1V+PpxWdVbfP1avr/N00E2vyQ=
+gopkg.in/tomb.v1 v1.0.0-20141024135613-dd632973f1e7/go.mod h1:dt/ZhP58zS4L8KSrWDmTeBkI65Dw0HsyUHuEVlX15mw=
+gopkg.in/yaml.v2 v2.2.1/go.mod h1:hI93XBmqTisBFMUTm0b8Fm+jr3Dg1NNxqwp+5A1VGuI=
gopkg.in/yaml.v2 v2.2.2/go.mod h1:hI93XBmqTisBFMUTm0b8Fm+jr3Dg1NNxqwp+5A1VGuI=
gopkg.in/yaml.v2 v2.2.8 h1:obN1ZagJSUGI0Ek/LBmuj4SNLPfIny3KsKFopxRdj10=
gopkg.in/yaml.v2 v2.2.8/go.mod h1:hI93XBmqTisBFMUTm0b8Fm+jr3Dg1NNxqwp+5A1VGuI=
From 8c82082991fcff8e914a0a4ea5ea4b875956f89a Mon Sep 17 00:00:00 2001
From: Mrs4s <1844812067@qq.com>
Date: Sat, 17 Oct 2020 15:04:46 +0800
Subject: [PATCH 086/367] fix ci.
---
.github/workflows/ci.yml | 4 ++--
.github/workflows/release.yml | 2 +-
2 files changed, 3 insertions(+), 3 deletions(-)
diff --git a/.github/workflows/ci.yml b/.github/workflows/ci.yml
index a6b3a27..20e61ef 100644
--- a/.github/workflows/ci.yml
+++ b/.github/workflows/ci.yml
@@ -14,12 +14,12 @@ jobs:
runs-on: ubuntu-latest
strategy:
matrix:
- # build and publish in parallel: linux/386, linux/amd64, windows/386, windows/amd64, darwin/386, darwin/amd64
+ # build and publish in parallel: linux/386, linux/amd64, windows/386, windows/amd64, darwin/amd64
goos: [linux, windows, darwin]
goarch: ["386", amd64, arm]
exclude:
- goos: darwin
- goarch: arm
+ goarch: [arm, "386"]
fail-fast: true
steps:
diff --git a/.github/workflows/release.yml b/.github/workflows/release.yml
index 68909f4..a5b9a71 100644
--- a/.github/workflows/release.yml
+++ b/.github/workflows/release.yml
@@ -13,7 +13,7 @@ jobs:
goarch: ["386", amd64, arm]
exclude:
- goos: darwin
- goarch: arm
+ goarch: [arm, "386"]
steps:
- uses: actions/checkout@v2
From 2978116c8984dd833fb15c38baa8dbd8a2a2c225 Mon Sep 17 00:00:00 2001
From: Mrs4s <1844812067@qq.com>
Date: Sat, 17 Oct 2020 15:08:49 +0800
Subject: [PATCH 087/367] fix ci.
---
.github/workflows/ci.yml | 4 +++-
.github/workflows/release.yml | 4 +++-
2 files changed, 6 insertions(+), 2 deletions(-)
diff --git a/.github/workflows/ci.yml b/.github/workflows/ci.yml
index 20e61ef..7365a7f 100644
--- a/.github/workflows/ci.yml
+++ b/.github/workflows/ci.yml
@@ -19,7 +19,9 @@ jobs:
goarch: ["386", amd64, arm]
exclude:
- goos: darwin
- goarch: [arm, "386"]
+ goarch: arm
+ - goos: darwin
+ goarch: "386"
fail-fast: true
steps:
diff --git a/.github/workflows/release.yml b/.github/workflows/release.yml
index a5b9a71..b121c64 100644
--- a/.github/workflows/release.yml
+++ b/.github/workflows/release.yml
@@ -13,7 +13,9 @@ jobs:
goarch: ["386", amd64, arm]
exclude:
- goos: darwin
- goarch: [arm, "386"]
+ goarch: arm
+ - goos: darwin
+ goarch: "386"
steps:
- uses: actions/checkout@v2
From d1372332f3ac21a06231239b3fcce1e4a6397fd6 Mon Sep 17 00:00:00 2001
From: Mrs4s <1844812067@qq.com>
Date: Sat, 17 Oct 2020 16:53:04 +0800
Subject: [PATCH 088/367] fix db & private recall supported & private reply
supported.
---
coolq/api.go | 20 ++++++++++++++-----
coolq/bot.go | 48 +++++++++++++++++++++++++++++----------------
coolq/cqcode.go | 6 +++---
coolq/event.go | 12 ++++++++----
go.mod | 5 ++---
go.sum | 2 ++
server/http.go | 8 ++++----
server/websocket.go | 4 ++--
8 files changed, 67 insertions(+), 38 deletions(-)
diff --git a/coolq/api.go b/coolq/api.go
index eb830d8..21f8516 100644
--- a/coolq/api.go
+++ b/coolq/api.go
@@ -189,7 +189,7 @@ func (bot *CQBot) CQSendGroupForwardMessage(groupId int64, m gjson.Result) MSG {
ts.Add(time.Second)
if e.Get("data.id").Exists() {
i, _ := strconv.Atoi(e.Get("data.id").Str)
- m := bot.GetGroupMessage(int32(i))
+ m := bot.GetMessage(int32(i))
if m != nil {
sender := m["sender"].(message.Sender)
nodes = append(nodes, &message.ForwardNode{
@@ -412,11 +412,19 @@ func (bot *CQBot) CQProcessGroupRequest(flag, subType, reason string, approve bo
// https://cqhttp.cc/docs/4.15/#/API?id=delete_msg-%E6%92%A4%E5%9B%9E%E6%B6%88%E6%81%AF
func (bot *CQBot) CQDeleteMessage(messageId int32) MSG {
- msg := bot.GetGroupMessage(messageId)
+ msg := bot.GetMessage(messageId)
if msg == nil {
return Failed(100)
}
- bot.Client.RecallGroupMessage(msg["group"].(int64), msg["message-id"].(int32), msg["internal-id"].(int32))
+ if _, ok := msg["group"]; ok {
+ bot.Client.RecallGroupMessage(msg["group"].(int64), msg["message-id"].(int32), msg["internal-id"].(int32))
+ } else {
+ if msg["sender"].(message.Sender).Uin != bot.Client.Uin {
+ log.Warnf("撤回 %v 失败: 好友会话无法撤回对方消息.")
+ return Failed(100)
+ }
+ bot.Client.RecallPrivateMessage(msg["target"].(int64), int64(msg["time"].(int32)), msg["message-id"].(int32), msg["internal-id"].(int32))
+ }
return OK(nil)
}
@@ -638,15 +646,17 @@ func (bot *CQBot) CQGetForwardMessage(resId string) MSG {
})
}
-func (bot *CQBot) CQGetGroupMessage(messageId int32) MSG {
- msg := bot.GetGroupMessage(messageId)
+func (bot *CQBot) CQGetMessage(messageId int32) MSG {
+ msg := bot.GetMessage(messageId)
if msg == nil {
return Failed(100)
}
sender := msg["sender"].(message.Sender)
+ _, group := msg["group"]
return OK(MSG{
"message_id": messageId,
"real_id": msg["message-id"],
+ "group": group,
"sender": MSG{
"user_id": sender.Uin,
"nickname": sender.Nickname,
diff --git a/coolq/bot.go b/coolq/bot.go
index 40cff0a..04bd0b5 100644
--- a/coolq/bot.go
+++ b/coolq/bot.go
@@ -47,16 +47,6 @@ func NewQQBot(cli *client.QQClient, conf *global.JsonConfig) *CQBot {
log.Fatalf("打开数据库失败, 如果频繁遇到此问题请清理 data/db 文件夹或关闭数据库功能。")
}
bot.db = db
- /*
- opt := nutsdb.DefaultOptions
- opt.Dir = path.Join("data", "db")
- opt.EntryIdxMode = nutsdb.HintBPTSparseIdxMode
- db, err := nutsdb.Open(opt)
- if err != nil {
- log.Fatalf("打开数据库失败, 如果频繁遇到此问题请清理 data/db 文件夹或关闭数据库功能。")
- }
- bot.db = db
- */
gob.Register(message.Sender{})
log.Info("信息数据库初始化完成.")
} else {
@@ -108,7 +98,7 @@ func (bot *CQBot) OnEventPush(f func(m MSG)) {
bot.events = append(bot.events, f)
}
-func (bot *CQBot) GetGroupMessage(mid int32) MSG {
+func (bot *CQBot) GetMessage(mid int32) MSG {
if bot.db != nil {
m := MSG{}
data, err := bot.db.Get(binary.ToBytes(mid), nil)
@@ -270,26 +260,26 @@ func (bot *CQBot) SendPrivateMessage(target int64, m *message.SendingMessage) in
}
m.Elements = newElem
var id int32 = -1
- if bot.Client.FindFriend(target) != nil {
+ if bot.Client.FindFriend(target) != nil { // 双向好友
msg := bot.Client.SendPrivateMessage(target, m)
if msg != nil {
- id = msg.Id
+ id = bot.InsertPrivateMessage(msg)
}
- } else if code, ok := bot.tempMsgCache.Load(target); ok {
+ } else if code, ok := bot.tempMsgCache.Load(target); ok { // 临时会话
msg := bot.Client.SendTempMessage(code.(int64), target, m)
if msg != nil {
id = msg.Id
}
- } else if _, ok := bot.oneWayMsgCache.Load(target); ok {
+ } else if _, ok := bot.oneWayMsgCache.Load(target); ok { // 单向好友
msg := bot.Client.SendPrivateMessage(target, m)
if msg != nil {
- id = msg.Id
+ id = bot.InsertPrivateMessage(msg)
}
}
if id == -1 {
return -1
}
- return ToGlobalId(target, id)
+ return id
}
func (bot *CQBot) InsertGroupMessage(m *message.GroupMessage) int32 {
@@ -317,6 +307,30 @@ func (bot *CQBot) InsertGroupMessage(m *message.GroupMessage) int32 {
return id
}
+func (bot *CQBot) InsertPrivateMessage(m *message.PrivateMessage) int32 {
+ val := MSG{
+ "message-id": m.Id,
+ "internal-id": m.InternalId,
+ "target": m.Target,
+ "sender": m.Sender,
+ "time": m.Time,
+ "message": ToStringMessage(m.Elements, m.Sender.Uin, true),
+ }
+ id := ToGlobalId(m.Sender.Uin, m.Id)
+ if bot.db != nil {
+ buf := new(bytes.Buffer)
+ if err := gob.NewEncoder(buf).Encode(val); err != nil {
+ log.Warnf("记录聊天数据时出现错误: %v", err)
+ return -1
+ }
+ if err := bot.db.Put(binary.ToBytes(id), binary.GZipCompress(buf.Bytes()), nil); err != nil {
+ log.Warnf("记录聊天数据时出现错误: %v", err)
+ return -1
+ }
+ }
+ return id
+}
+
func ToGlobalId(code int64, msgId int32) int32 {
return int32(crc32.ChecksumIEEE([]byte(fmt.Sprintf("%d-%d", code, msgId))))
}
diff --git a/coolq/cqcode.go b/coolq/cqcode.go
index c3d0748..e35a6fc 100644
--- a/coolq/cqcode.go
+++ b/coolq/cqcode.go
@@ -269,7 +269,7 @@ func (bot *CQBot) ConvertStringMessage(m string, group bool) (r []message.IMessa
for _, p := range ps {
d[p[1]] = CQCodeUnescapeValue(p[2])
}
- if t == "reply" && group {
+ if t == "reply" {
if len(r) > 0 {
if _, ok := r[0].(*message.ReplyElement); ok {
log.Warnf("警告: 一条信息只能包含一个 Reply 元素.")
@@ -278,7 +278,7 @@ func (bot *CQBot) ConvertStringMessage(m string, group bool) (r []message.IMessa
}
mid, err := strconv.Atoi(d["id"])
if err == nil {
- org := bot.GetGroupMessage(int32(mid))
+ org := bot.GetMessage(int32(mid))
if org != nil {
r = append([]message.IMessageElement{
&message.ReplyElement{
@@ -322,7 +322,7 @@ func (bot *CQBot) ConvertObjectMessage(m gjson.Result, group bool) (r []message.
}
mid, err := strconv.Atoi(e.Get("data").Get("id").Str)
if err == nil {
- org := bot.GetGroupMessage(int32(mid))
+ org := bot.GetMessage(int32(mid))
if org != nil {
r = append([]message.IMessageElement{
&message.ReplyElement{
diff --git a/coolq/event.go b/coolq/event.go
index 0ba56e6..eda461a 100644
--- a/coolq/event.go
+++ b/coolq/event.go
@@ -31,18 +31,22 @@ func ToFormattedMessage(e []message.IMessageElement, code int64, raw ...bool) (r
func (bot *CQBot) privateMessageEvent(c *client.QQClient, m *message.PrivateMessage) {
bot.checkMedia(m.Elements)
- cqm := ToStringMessage(m.Elements, 0, true)
+ cqm := ToStringMessage(m.Elements, m.Sender.Uin, true)
if !m.Sender.IsFriend {
bot.oneWayMsgCache.Store(m.Sender.Uin, "")
}
- log.Infof("收到好友 %v(%v) 的消息: %v", m.Sender.DisplayName(), m.Sender.Uin, cqm)
+ id := m.Id
+ if bot.db != nil {
+ id = bot.InsertPrivateMessage(m)
+ }
+ log.Infof("收到好友 %v(%v) 的消息: %v (%v)", m.Sender.DisplayName(), m.Sender.Uin, cqm, id)
fm := MSG{
"post_type": "message",
"message_type": "private",
"sub_type": "friend",
- "message_id": ToGlobalId(m.Sender.Uin, m.Id),
+ "message_id": id,
"user_id": m.Sender.Uin,
- "message": ToFormattedMessage(m.Elements, 0, false),
+ "message": ToFormattedMessage(m.Elements, m.Sender.Uin, false),
"raw_message": cqm,
"font": 0,
"self_id": c.Uin,
diff --git a/go.mod b/go.mod
index 7bff5da..3118405 100644
--- a/go.mod
+++ b/go.mod
@@ -3,7 +3,7 @@ module github.com/Mrs4s/go-cqhttp
go 1.14
require (
- github.com/Mrs4s/MiraiGo v0.0.0-20201016033322-0922b058ff56
+ github.com/Mrs4s/MiraiGo v0.0.0-20201017083749-517ddcd50b8d
github.com/gin-gonic/gin v1.6.3
github.com/gorilla/websocket v1.4.2
github.com/guonaihong/gout v0.1.2
@@ -12,11 +12,10 @@ require (
github.com/pkg/errors v0.9.1 // indirect
github.com/rifflock/lfshook v0.0.0-20180920164130-b9218ef580f5
github.com/sirupsen/logrus v1.7.0
- github.com/syndtr/goleveldb v1.0.0 // indirect
+ github.com/syndtr/goleveldb v1.0.0
github.com/t-tomalak/logrus-easy-formatter v0.0.0-20190827215021-c074f06c5816
github.com/tidwall/gjson v1.6.1
github.com/wdvxdr1123/go-silk v0.0.0-20201007123416-b982fd3d91d6
- github.com/xujiajun/nutsdb v0.5.0
github.com/yinghau76/go-ascii-art v0.0.0-20190517192627-e7f465a30189
golang.org/x/time v0.0.0-20200630173020-3af7569d3a1e
)
diff --git a/go.sum b/go.sum
index 5ac49b5..7acd5a6 100644
--- a/go.sum
+++ b/go.sum
@@ -4,6 +4,8 @@ github.com/Mrs4s/MiraiGo v0.0.0-20201013050256-7b392cacdb79 h1:t9PK37mnl5tbilG+F
github.com/Mrs4s/MiraiGo v0.0.0-20201013050256-7b392cacdb79/go.mod h1:cwYPI2uq6nxNbx0nA6YuAKF1V5szSs6FPlGVLQvRUlo=
github.com/Mrs4s/MiraiGo v0.0.0-20201016033322-0922b058ff56 h1:vcXOLG+W/c56EWOwA8btrHMEGBMwFgLUZli0Jh1axzg=
github.com/Mrs4s/MiraiGo v0.0.0-20201016033322-0922b058ff56/go.mod h1:cwYPI2uq6nxNbx0nA6YuAKF1V5szSs6FPlGVLQvRUlo=
+github.com/Mrs4s/MiraiGo v0.0.0-20201017083749-517ddcd50b8d h1:f59SuqT0RVy6T9nAg6zTNfnzkvdgLdGqkNKu/AfiPU4=
+github.com/Mrs4s/MiraiGo v0.0.0-20201017083749-517ddcd50b8d/go.mod h1:cwYPI2uq6nxNbx0nA6YuAKF1V5szSs6FPlGVLQvRUlo=
github.com/bwmarrin/snowflake v0.3.0 h1:xm67bEhkKh6ij1790JB83OujPR5CzNe8QuQqAgISZN0=
github.com/bwmarrin/snowflake v0.3.0/go.mod h1:NdZxfVWX+oR6y2K0o6qAYv6gIOP9rjG0/E9WsDpxqwE=
github.com/census-instrumentation/opencensus-proto v0.2.1/go.mod h1:f6KPmirojxKA12rnyqOA5BBL4O983OfeGPqjHWSTneU=
diff --git a/server/http.go b/server/http.go
index c02e173..c4348ae 100644
--- a/server/http.go
+++ b/server/http.go
@@ -234,9 +234,9 @@ func (s *httpServer) GetImage(c *gin.Context) {
c.JSON(200, s.bot.CQGetImage(file))
}
-func (s *httpServer) GetGroupMessage(c *gin.Context) {
+func (s *httpServer) GetMessage(c *gin.Context) {
mid, _ := strconv.ParseInt(getParam(c, "message_id"), 10, 32)
- c.JSON(200, s.bot.CQGetGroupMessage(int32(mid)))
+ c.JSON(200, s.bot.CQGetMessage(int32(mid)))
}
func (s *httpServer) GetGroupHonorInfo(c *gin.Context) {
@@ -501,8 +501,8 @@ var httpApi = map[string]func(s *httpServer, c *gin.Context){
"get_forward_msg": func(s *httpServer, c *gin.Context) {
s.GetForwardMessage(c)
},
- "get_group_msg": func(s *httpServer, c *gin.Context) {
- s.GetGroupMessage(c)
+ "get_msg": func(s *httpServer, c *gin.Context) {
+ s.GetMessage(c)
},
"get_group_honor_info": func(s *httpServer, c *gin.Context) {
s.GetGroupHonorInfo(c)
diff --git a/server/websocket.go b/server/websocket.go
index 8e5d821..df3a923 100644
--- a/server/websocket.go
+++ b/server/websocket.go
@@ -474,8 +474,8 @@ var wsApi = map[string]func(*coolq.CQBot, gjson.Result) coolq.MSG{
"get_forward_msg": func(bot *coolq.CQBot, p gjson.Result) coolq.MSG {
return bot.CQGetForwardMessage(p.Get("message_id").Str)
},
- "get_group_msg": func(bot *coolq.CQBot, p gjson.Result) coolq.MSG {
- return bot.CQGetGroupMessage(int32(p.Get("message_id").Int()))
+ "get_msg": func(bot *coolq.CQBot, p gjson.Result) coolq.MSG {
+ return bot.CQGetMessage(int32(p.Get("message_id").Int()))
},
"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)
From 9b36645b73204f778f4e8fc20d73f041100a332e Mon Sep 17 00:00:00 2001
From: Mrs4s <1844812067@qq.com>
Date: Sat, 17 Oct 2020 16:57:49 +0800
Subject: [PATCH 089/367] fix input.
---
server/apiAdmin.go | 2 +-
1 file changed, 1 insertion(+), 1 deletion(-)
diff --git a/server/apiAdmin.go b/server/apiAdmin.go
index 142e0ae..44544f9 100644
--- a/server/apiAdmin.go
+++ b/server/apiAdmin.go
@@ -99,7 +99,7 @@ func (s *webServer) Run(addr string, cli *client.QQClient) *coolq.CQBot {
func (s *webServer) Dologin() {
s.Console = bufio.NewReader(os.Stdin)
readLine := func() (str string) {
- _, _ = fmt.Scanf("%s", &str)
+ str, _ = s.Console.ReadString('\n')
return
}
conf := GetConf()
From 6a20a86e492d5dd1aeafd817ac508330e927c2fd Mon Sep 17 00:00:00 2001
From: Mrs4s <1844812067@qq.com>
Date: Sat, 17 Oct 2020 17:13:27 +0800
Subject: [PATCH 090/367] update doc.
---
docs/cqhttp.md | 21 ++++++++++++++++++++-
1 file changed, 20 insertions(+), 1 deletion(-)
diff --git a/docs/cqhttp.md b/docs/cqhttp.md
index 67be4e1..bfc16c7 100644
--- a/docs/cqhttp.md
+++ b/docs/cqhttp.md
@@ -558,4 +558,23 @@ Type: `tts`
| `card_new` | int64 | | 新名片 |
| `card_old` | int64 | | 旧名片 |
-> PS: 当名片为空时 `card_xx` 字段为空字符串, 并不是昵称
\ No newline at end of file
+> PS: 当名片为空时 `card_xx` 字段为空字符串, 并不是昵称
+
+#### 接收到离线文件
+
+**上报数据**
+
+| 字段 | 类型 | 可能的值 | 说明 |
+| ------------- | ------ | -------------- | -------------- |
+| `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
From b99986d1127dfa77fd8fc795b7ef838ea1c8f460 Mon Sep 17 00:00:00 2001
From: wdvxdr
Date: Sat, 17 Oct 2020 19:46:24 +0800
Subject: [PATCH 091/367] feature: support custom migu misic
---
coolq/bot.go | 34 ++++++++++++++++++++++++++++++++++
coolq/cqcode.go | 14 ++++++++++++++
2 files changed, 48 insertions(+)
diff --git a/coolq/bot.go b/coolq/bot.go
index 04bd0b5..0483d57 100644
--- a/coolq/bot.go
+++ b/coolq/bot.go
@@ -190,6 +190,25 @@ func (bot *CQBot) SendGroupMessage(groupId int64, m *message.SendingMessage) int
}
return bot.InsertGroupMessage(ret)
}
+ if i, ok := elem.(*MiguMusicElement); ok {
+ ret, err := bot.Client.SendGroupRichMessage(groupId, 1101053067, 1, 4, client.RichClientInfo{
+ Platform: 1,
+ SdkVersion: "0.0.0",
+ PackageName: "cmccwm.mobilemusic",
+ Signature: "6cdc72a439cef99a3418d2a78aa28c73",
+ }, &message.RichMessage{
+ Title: i.Title,
+ Summary: i.Summary,
+ Url: i.Url,
+ PictureUrl: i.PictureUrl,
+ MusicUrl: i.MusicUrl,
+ })
+ if err != nil {
+ log.Warnf("警告: 群 %v 富文本消息发送失败: %v", groupId, err)
+ return -1
+ }
+ return bot.InsertGroupMessage(ret)
+ }
newElem = append(newElem, elem)
}
m.Elements = newElem
@@ -256,6 +275,21 @@ func (bot *CQBot) SendPrivateMessage(target int64, m *message.SendingMessage) in
})
return 0
}
+ if i, ok := elem.(*MiguMusicElement); ok {
+ bot.Client.SendFriendRichMessage(target, 1101053067, 1, 4, client.RichClientInfo{
+ Platform: 1,
+ SdkVersion: "0.0.0",
+ PackageName: "cmccwm.mobilemusic",
+ Signature: "6cdc72a439cef99a3418d2a78aa28c73",
+ }, &message.RichMessage{
+ Title: i.Title,
+ Summary: i.Summary,
+ Url: i.Url,
+ PictureUrl: i.PictureUrl,
+ MusicUrl: i.MusicUrl,
+ })
+ return 0
+ }
newElem = append(newElem, elem)
}
m.Elements = newElem
diff --git a/coolq/cqcode.go b/coolq/cqcode.go
index e35a6fc..1e4f1d3 100644
--- a/coolq/cqcode.go
+++ b/coolq/cqcode.go
@@ -51,6 +51,10 @@ type CloudMusicElement struct {
MusicElement
}
+type MiguMusicElement struct {
+ MusicElement
+}
+
func (e *GiftElement) Type() message.ElementType {
return message.At
}
@@ -372,6 +376,7 @@ func (bot *CQBot) ToElement(t string, d map[string]string, group bool) (m messag
return nil, err
}
tp := d["type"]
+ fmt.Println(tp)
if tp != "show" && tp != "flash" {
return img, nil
}
@@ -536,6 +541,15 @@ func (bot *CQBot) ToElement(t string, d map[string]string, group bool) (m messag
MusicUrl: d["purl"],
}}, nil
}
+ if d["subtype"] == "migu" {
+ return &MiguMusicElement{MusicElement{
+ Title: d["title"],
+ Summary: d["content"],
+ Url: d["url"],
+ PictureUrl: d["image"],
+ MusicUrl: d["purl"],
+ }}, nil
+ }
xml := fmt.Sprintf(`- %s%s
`,
d["title"], d["url"], d["image"], d["audio"], d["title"], d["content"])
return &message.ServiceElement{
From 98b9be575e6ffee3702ed0a61d3684d2a7f1d1aa Mon Sep 17 00:00:00 2001
From: wdvxdr
Date: Sat, 17 Oct 2020 19:50:14 +0800
Subject: [PATCH 092/367] fix typo
---
coolq/cqcode.go | 1 -
1 file changed, 1 deletion(-)
diff --git a/coolq/cqcode.go b/coolq/cqcode.go
index 1e4f1d3..95363cf 100644
--- a/coolq/cqcode.go
+++ b/coolq/cqcode.go
@@ -376,7 +376,6 @@ func (bot *CQBot) ToElement(t string, d map[string]string, group bool) (m messag
return nil, err
}
tp := d["type"]
- fmt.Println(tp)
if tp != "show" && tp != "flash" {
return img, nil
}
From c35f46e0330cd991f422444f3c7f4bfd9b94a869 Mon Sep 17 00:00:00 2001
From: Mrs4s <1844812067@qq.com>
Date: Sun, 18 Oct 2020 22:40:41 +0800
Subject: [PATCH 093/367] update doc.
---
docs/cqhttp.md | 29 +++++++++++++++++++++++++++++
1 file changed, 29 insertions(+)
diff --git a/docs/cqhttp.md b/docs/cqhttp.md
index bfc16c7..9584ed1 100644
--- a/docs/cqhttp.md
+++ b/docs/cqhttp.md
@@ -472,6 +472,35 @@ Type: `tts`
| ---------- | ----------------- | -------- |
| `slices` | string[] | 词组 |
+### 图片OCR
+
+> 注意: 目前图片OCR接口仅支持接受的图片
+
+终结点: `/.ocr_image`
+
+**参数**
+
+ | 字段 | 类型 | 说明 |
+ | ------------ | ------ | ------ |
+ | `image` | string | 图片ID |
+
+**响应数据**
+
+ | 字段 | 类型 | 说明 |
+ | ---------- | ----------------- | -------- |
+ | `texts` | TextDetection[] | OCR结果 |
+ | `language` | string | 语言 |
+
+**TextDetection**
+
+ | 字段 | 类型 | 说明 |
+ | ---------- | ----------------- | -------- |
+ | `text` | string | 文本 |
+ | `confidence`| int32 | 置信度 |
+ | `coordinates` | vector2 | 坐标 |
+
+
+
## 事件
#### 群消息撤回
From fffed72d4430d368bd15f3f0a0c0ef7ad89e413d Mon Sep 17 00:00:00 2001
From: Shigma <33423008+Shigma@users.noreply.github.com>
Date: Sun, 18 Oct 2020 23:50:13 +0800
Subject: [PATCH 094/367] Update api.go
---
coolq/api.go | 2 +-
1 file changed, 1 insertion(+), 1 deletion(-)
diff --git a/coolq/api.go b/coolq/api.go
index 21f8516..c6b2b55 100644
--- a/coolq/api.go
+++ b/coolq/api.go
@@ -662,7 +662,7 @@ func (bot *CQBot) CQGetMessage(messageId int32) MSG {
"nickname": sender.Nickname,
},
"time": msg["time"],
- "content": msg["message"],
+ "message": msg["message"],
})
}
From 8e61060ef0373c5620b65a91cdb1493ad6b98c4f Mon Sep 17 00:00:00 2001
From: wdvxdr
Date: Tue, 20 Oct 2020 09:44:55 +0800
Subject: [PATCH 095/367] fix array message
---
coolq/cqcode.go | 4 ++--
1 file changed, 2 insertions(+), 2 deletions(-)
diff --git a/coolq/cqcode.go b/coolq/cqcode.go
index 95363cf..2233ad6 100644
--- a/coolq/cqcode.go
+++ b/coolq/cqcode.go
@@ -324,7 +324,7 @@ func (bot *CQBot) ConvertObjectMessage(m gjson.Result, group bool) (r []message.
return
}
}
- mid, err := strconv.Atoi(e.Get("data").Get("id").Str)
+ mid, err := strconv.Atoi(e.Get("data").Get("id").String())
if err == nil {
org := bot.GetMessage(int32(mid))
if org != nil {
@@ -342,7 +342,7 @@ func (bot *CQBot) ConvertObjectMessage(m gjson.Result, group bool) (r []message.
}
d := make(map[string]string)
e.Get("data").ForEach(func(key, value gjson.Result) bool {
- d[key.Str] = value.Str
+ d[key.Str] = value.String()
return true
})
elem, err := bot.ToElement(t, d, group)
From c2fd0f1bb26f1e1a6ac1d44e4297ca288fd4303d Mon Sep 17 00:00:00 2001
From: Mrs4s
Date: Tue, 20 Oct 2020 21:05:59 +0800
Subject: [PATCH 096/367] fix #372.
---
server/http.go | 2 +-
1 file changed, 1 insertion(+), 1 deletion(-)
diff --git a/server/http.go b/server/http.go
index c4348ae..16d7c20 100644
--- a/server/http.go
+++ b/server/http.go
@@ -131,7 +131,7 @@ func (c *httpClient) onBotPushEvent(m coolq.MSG) {
}
return h
}()).SetTimeout(time.Second * time.Duration(c.timeout)).F().Retry().Attempt(5).
- WaitTime(time.Millisecond * 500).MaxWaitTime(time.Second * 5).
+ WaitTime(time.Millisecond * 500).MaxWaitTime(time.Second).
Do()
if err != nil {
log.Warnf("上报Event数据 %v 到 %v 失败: %v", m.ToJson(), c.addr, err)
From 2cdb341db4480ad6190192900516106783c3e458 Mon Sep 17 00:00:00 2001
From: Mrs4s
Date: Tue, 20 Oct 2020 21:12:53 +0800
Subject: [PATCH 097/367] fix oneway recall.
---
coolq/event.go | 8 ++++++--
1 file changed, 6 insertions(+), 2 deletions(-)
diff --git a/coolq/event.go b/coolq/event.go
index eda461a..8d807a7 100644
--- a/coolq/event.go
+++ b/coolq/event.go
@@ -271,12 +271,16 @@ func (bot *CQBot) groupNotifyEvent(c *client.QQClient, e client.IGroupNotifyEven
func (bot *CQBot) friendRecallEvent(c *client.QQClient, e *client.FriendMessageRecalledEvent) {
f := c.FindFriend(e.FriendUin)
gid := ToGlobalId(e.FriendUin, e.MessageId)
- log.Infof("好友 %v(%v) 撤回了消息: %v", f.Nickname, f.Uin, gid)
+ if f != nil {
+ log.Infof("好友 %v(%v) 撤回了消息: %v", f.Nickname, f.Uin, gid)
+ } else {
+ log.Infof("好友 %v 撤回了消息: %v", e.FriendUin, gid)
+ }
bot.dispatchEventMessage(MSG{
"post_type": "notice",
"notice_type": "friend_recall",
"self_id": c.Uin,
- "user_id": f.Uin,
+ "user_id": e.FriendUin,
"time": e.Time,
"message_id": gid,
})
From f96abc5e268e1b1797ae67ea738e462dab649901 Mon Sep 17 00:00:00 2001
From: Mrs4s
Date: Thu, 22 Oct 2020 20:51:29 +0800
Subject: [PATCH 098/367] update gout.
---
go.mod | 2 +-
go.sum | 2 ++
server/http.go | 2 +-
3 files changed, 4 insertions(+), 2 deletions(-)
diff --git a/go.mod b/go.mod
index 3118405..037bae0 100644
--- a/go.mod
+++ b/go.mod
@@ -6,7 +6,7 @@ require (
github.com/Mrs4s/MiraiGo v0.0.0-20201017083749-517ddcd50b8d
github.com/gin-gonic/gin v1.6.3
github.com/gorilla/websocket v1.4.2
- github.com/guonaihong/gout v0.1.2
+ github.com/guonaihong/gout v0.1.3
github.com/lestrrat-go/file-rotatelogs v2.4.0+incompatible
github.com/lestrrat-go/strftime v1.0.3 // indirect
github.com/pkg/errors v0.9.1 // indirect
diff --git a/go.sum b/go.sum
index 7acd5a6..e1d3501 100644
--- a/go.sum
+++ b/go.sum
@@ -55,6 +55,8 @@ github.com/gorilla/websocket v1.4.2 h1:+/TMaTYc4QFitKJxsQ7Yye35DkWvkdLcvGKqM+x0U
github.com/gorilla/websocket v1.4.2/go.mod h1:YR8l580nyteQvAITg2hZ9XVh4b55+EU/adAjf1fMHhE=
github.com/guonaihong/gout v0.1.2 h1:TR2XCRopGgJdj231IayEoeavgbznFXzzzcZVdT/hG10=
github.com/guonaihong/gout v0.1.2/go.mod h1:vXvv5Kxr70eM5wrp4F0+t9lnLWmq+YPW2GByll2f/EA=
+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/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=
diff --git a/server/http.go b/server/http.go
index 16d7c20..c4348ae 100644
--- a/server/http.go
+++ b/server/http.go
@@ -131,7 +131,7 @@ func (c *httpClient) onBotPushEvent(m coolq.MSG) {
}
return h
}()).SetTimeout(time.Second * time.Duration(c.timeout)).F().Retry().Attempt(5).
- WaitTime(time.Millisecond * 500).MaxWaitTime(time.Second).
+ WaitTime(time.Millisecond * 500).MaxWaitTime(time.Second * 5).
Do()
if err != nil {
log.Warnf("上报Event数据 %v 到 %v 失败: %v", m.ToJson(), c.addr, err)
From ce0a5b02712fc28186f6152c77f50c91dbdfdbaa Mon Sep 17 00:00:00 2001
From: Mrs4s
Date: Thu, 22 Oct 2020 22:10:15 +0800
Subject: [PATCH 099/367] fix timeout.
---
global/net.go | 7 ++++++-
server/http.go | 1 +
2 files changed, 7 insertions(+), 1 deletion(-)
diff --git a/global/net.go b/global/net.go
index 7691e89..d30d796 100644
--- a/global/net.go
+++ b/global/net.go
@@ -8,15 +8,20 @@ import (
"io/ioutil"
"net/http"
"strings"
+ "time"
)
+var client = &http.Client{
+ Timeout: time.Second * 15,
+}
+
func GetBytes(url string) ([]byte, error) {
req, err := http.NewRequest("GET", url, nil)
if err != nil {
return nil, err
}
req.Header["User-Agent"] = []string{"Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/83.0.4103.116 Safari/537.36 Edg/83.0.478.61"}
- resp, err := http.DefaultClient.Do(req)
+ resp, err := client.Do(req)
if err != nil {
return nil, err
}
diff --git a/server/http.go b/server/http.go
index c4348ae..eb2619f 100644
--- a/server/http.go
+++ b/server/http.go
@@ -137,6 +137,7 @@ func (c *httpClient) onBotPushEvent(m coolq.MSG) {
log.Warnf("上报Event数据 %v 到 %v 失败: %v", m.ToJson(), c.addr, err)
return
}
+ log.Debugf("上报Event数据 %v 到 %v", m.ToJson(), c.addr)
if gjson.Valid(res) {
c.bot.CQHandleQuickOperation(gjson.Parse(m.ToJson()), gjson.Parse(res))
}
From 1b63a15bbe9911f4fa098ee4ba9d353e7438297f Mon Sep 17 00:00:00 2001
From: Mrs4s <1844812067@qq.com>
Date: Sun, 25 Oct 2020 21:53:03 +0800
Subject: [PATCH 100/367] update MiraiGo.
---
go.mod | 2 +-
go.sum | 2 ++
2 files changed, 3 insertions(+), 1 deletion(-)
diff --git a/go.mod b/go.mod
index 037bae0..335be2c 100644
--- a/go.mod
+++ b/go.mod
@@ -3,7 +3,7 @@ module github.com/Mrs4s/go-cqhttp
go 1.14
require (
- github.com/Mrs4s/MiraiGo v0.0.0-20201017083749-517ddcd50b8d
+ github.com/Mrs4s/MiraiGo v0.0.0-20201024092610-03d2bbf32a4d
github.com/gin-gonic/gin v1.6.3
github.com/gorilla/websocket v1.4.2
github.com/guonaihong/gout v0.1.3
diff --git a/go.sum b/go.sum
index e1d3501..e0d5671 100644
--- a/go.sum
+++ b/go.sum
@@ -6,6 +6,8 @@ github.com/Mrs4s/MiraiGo v0.0.0-20201016033322-0922b058ff56 h1:vcXOLG+W/c56EWOwA
github.com/Mrs4s/MiraiGo v0.0.0-20201016033322-0922b058ff56/go.mod h1:cwYPI2uq6nxNbx0nA6YuAKF1V5szSs6FPlGVLQvRUlo=
github.com/Mrs4s/MiraiGo v0.0.0-20201017083749-517ddcd50b8d h1:f59SuqT0RVy6T9nAg6zTNfnzkvdgLdGqkNKu/AfiPU4=
github.com/Mrs4s/MiraiGo v0.0.0-20201017083749-517ddcd50b8d/go.mod h1:cwYPI2uq6nxNbx0nA6YuAKF1V5szSs6FPlGVLQvRUlo=
+github.com/Mrs4s/MiraiGo v0.0.0-20201024092610-03d2bbf32a4d h1:g200Tv/mkCy6oSFqfOzblMfa3D50iNhyG7IUUQWkb78=
+github.com/Mrs4s/MiraiGo v0.0.0-20201024092610-03d2bbf32a4d/go.mod h1:cwYPI2uq6nxNbx0nA6YuAKF1V5szSs6FPlGVLQvRUlo=
github.com/bwmarrin/snowflake v0.3.0 h1:xm67bEhkKh6ij1790JB83OujPR5CzNe8QuQqAgISZN0=
github.com/bwmarrin/snowflake v0.3.0/go.mod h1:NdZxfVWX+oR6y2K0o6qAYv6gIOP9rjG0/E9WsDpxqwE=
github.com/census-instrumentation/opencensus-proto v0.2.1/go.mod h1:f6KPmirojxKA12rnyqOA5BBL4O983OfeGPqjHWSTneU=
From 6ad0d689789cc716ea6f2aca037c49a24aa66cc3 Mon Sep 17 00:00:00 2001
From: Mrs4s <1844812067@qq.com>
Date: Sun, 25 Oct 2020 22:03:14 +0800
Subject: [PATCH 101/367] feature get_group_system_msg.
---
coolq/api.go | 9 +++++++++
go.mod | 2 +-
go.sum | 2 ++
server/http.go | 7 +++++++
server/websocket.go | 3 +++
5 files changed, 22 insertions(+), 1 deletion(-)
diff --git a/coolq/api.go b/coolq/api.go
index c6b2b55..36564d7 100644
--- a/coolq/api.go
+++ b/coolq/api.go
@@ -666,6 +666,15 @@ func (bot *CQBot) CQGetMessage(messageId int32) MSG {
})
}
+func (bot *CQBot) CQGetGroupSystemMessages() MSG {
+ msg, err := bot.Client.GetGroupSystemMessages()
+ if err != nil {
+ log.Warnf("获取群系统消息失败: %v", err)
+ return Failed(100)
+ }
+ return OK(msg)
+}
+
func (bot *CQBot) CQCanSendImage() MSG {
return OK(MSG{"yes": true})
}
diff --git a/go.mod b/go.mod
index 335be2c..1cfaea6 100644
--- a/go.mod
+++ b/go.mod
@@ -3,7 +3,7 @@ module github.com/Mrs4s/go-cqhttp
go 1.14
require (
- github.com/Mrs4s/MiraiGo v0.0.0-20201024092610-03d2bbf32a4d
+ github.com/Mrs4s/MiraiGo v0.0.0-20201025135955-5be0ad946177
github.com/gin-gonic/gin v1.6.3
github.com/gorilla/websocket v1.4.2
github.com/guonaihong/gout v0.1.3
diff --git a/go.sum b/go.sum
index e0d5671..3caeb48 100644
--- a/go.sum
+++ b/go.sum
@@ -8,6 +8,8 @@ github.com/Mrs4s/MiraiGo v0.0.0-20201017083749-517ddcd50b8d h1:f59SuqT0RVy6T9nAg
github.com/Mrs4s/MiraiGo v0.0.0-20201017083749-517ddcd50b8d/go.mod h1:cwYPI2uq6nxNbx0nA6YuAKF1V5szSs6FPlGVLQvRUlo=
github.com/Mrs4s/MiraiGo v0.0.0-20201024092610-03d2bbf32a4d h1:g200Tv/mkCy6oSFqfOzblMfa3D50iNhyG7IUUQWkb78=
github.com/Mrs4s/MiraiGo v0.0.0-20201024092610-03d2bbf32a4d/go.mod h1:cwYPI2uq6nxNbx0nA6YuAKF1V5szSs6FPlGVLQvRUlo=
+github.com/Mrs4s/MiraiGo v0.0.0-20201025135955-5be0ad946177 h1:TcKqPWXKvOKW2O80rbswKYVLBB3Xas3+RvRInVMyBm8=
+github.com/Mrs4s/MiraiGo v0.0.0-20201025135955-5be0ad946177/go.mod h1:cwYPI2uq6nxNbx0nA6YuAKF1V5szSs6FPlGVLQvRUlo=
github.com/bwmarrin/snowflake v0.3.0 h1:xm67bEhkKh6ij1790JB83OujPR5CzNe8QuQqAgISZN0=
github.com/bwmarrin/snowflake v0.3.0/go.mod h1:NdZxfVWX+oR6y2K0o6qAYv6gIOP9rjG0/E9WsDpxqwE=
github.com/census-instrumentation/opencensus-proto v0.2.1/go.mod h1:f6KPmirojxKA12rnyqOA5BBL4O983OfeGPqjHWSTneU=
diff --git a/server/http.go b/server/http.go
index eb2619f..6d6ca1a 100644
--- a/server/http.go
+++ b/server/http.go
@@ -318,6 +318,10 @@ func (s *httpServer) GetForwardMessage(c *gin.Context) {
c.JSON(200, s.bot.CQGetForwardMessage(resId))
}
+func (s *httpServer) GetGroupSystemMessage(c *gin.Context) {
+ c.JSON(200, s.bot.CQGetGroupSystemMessages())
+}
+
func (s *httpServer) DeleteMessage(c *gin.Context) {
mid, _ := strconv.ParseInt(getParam(c, "message_id"), 10, 32)
c.JSON(200, s.bot.CQDeleteMessage(int32(mid)))
@@ -505,6 +509,9 @@ var httpApi = map[string]func(s *httpServer, c *gin.Context){
"get_msg": func(s *httpServer, c *gin.Context) {
s.GetMessage(c)
},
+ "get_group_system_msg": func(s *httpServer, c *gin.Context) {
+ s.GetGroupSystemMessage(c)
+ },
"get_group_honor_info": func(s *httpServer, c *gin.Context) {
s.GetGroupHonorInfo(c)
},
diff --git a/server/websocket.go b/server/websocket.go
index df3a923..9293082 100644
--- a/server/websocket.go
+++ b/server/websocket.go
@@ -495,6 +495,9 @@ var wsApi = map[string]func(*coolq.CQBot, gjson.Result) coolq.MSG{
"get_version_info": func(bot *coolq.CQBot, p gjson.Result) coolq.MSG {
return bot.CQGetVersionInfo()
},
+ "get_group_system_msg": func(bot *coolq.CQBot, p gjson.Result) coolq.MSG {
+ return bot.CQGetGroupSystemMessages()
+ },
"_get_vip_info": func(bot *coolq.CQBot, p gjson.Result) coolq.MSG {
return bot.CQGetVipInfo(p.Get("user_id").Int())
},
From 84b4889def8ab891ef963a3cdf10108b8318918a Mon Sep 17 00:00:00 2001
From: Mrs4s <1844812067@qq.com>
Date: Sun, 25 Oct 2020 22:06:03 +0800
Subject: [PATCH 102/367] fix issue of sending the empty message.
---
coolq/bot.go | 4 ++++
1 file changed, 4 insertions(+)
diff --git a/coolq/bot.go b/coolq/bot.go
index 0483d57..b71163d 100644
--- a/coolq/bot.go
+++ b/coolq/bot.go
@@ -211,6 +211,10 @@ func (bot *CQBot) SendGroupMessage(groupId int64, m *message.SendingMessage) int
}
newElem = append(newElem, elem)
}
+ if len(newElem) == 0 {
+ log.Warnf("群消息发送失败: 消息为空.")
+ return -1
+ }
m.Elements = newElem
ret := bot.Client.SendGroupMessage(groupId, m, ForceFragmented)
if ret == nil || ret.Id == -1 {
From cc72332455bb577b48627621fef411d27cf2a185 Mon Sep 17 00:00:00 2001
From: Mrs4s <1844812067@qq.com>
Date: Sun, 25 Oct 2020 22:13:31 +0800
Subject: [PATCH 103/367] update doc.
---
docs/cqhttp.md | 39 +++++++++++++++++++++++++++++++++++++++
1 file changed, 39 insertions(+)
diff --git a/docs/cqhttp.md b/docs/cqhttp.md
index 9584ed1..c1f7a23 100644
--- a/docs/cqhttp.md
+++ b/docs/cqhttp.md
@@ -500,6 +500,45 @@ Type: `tts`
| `coordinates` | vector2 | 坐标 |
+### 获取群系统消息
+
+终结点: `/get_group_system_msg`
+
+**响应数据**
+
+ | 字段 | 类型 | 说明 |
+ | ---------- | ----------------- | -------- |
+ | `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 |
+
+ **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 |
+
+
## 事件
From e911123a301819447a45b19ad78c26004d094862 Mon Sep 17 00:00:00 2001
From: Mrs4s
Date: Mon, 26 Oct 2020 13:35:12 +0800
Subject: [PATCH 104/367] update MiraiGo.
---
go.mod | 2 +-
go.sum | 24 ++----------------------
2 files changed, 3 insertions(+), 23 deletions(-)
diff --git a/go.mod b/go.mod
index 1cfaea6..72a329d 100644
--- a/go.mod
+++ b/go.mod
@@ -3,7 +3,7 @@ module github.com/Mrs4s/go-cqhttp
go 1.14
require (
- github.com/Mrs4s/MiraiGo v0.0.0-20201025135955-5be0ad946177
+ github.com/Mrs4s/MiraiGo v0.0.0-20201025234014-8ece3a9dd803
github.com/gin-gonic/gin v1.6.3
github.com/gorilla/websocket v1.4.2
github.com/guonaihong/gout v0.1.3
diff --git a/go.sum b/go.sum
index 3caeb48..b9290fb 100644
--- a/go.sum
+++ b/go.sum
@@ -1,17 +1,7 @@
cloud.google.com/go v0.26.0/go.mod h1:aQUYkXzVsufM+DwF1aE+0xfcU+56JwCaLick0ClmMTw=
github.com/BurntSushi/toml v0.3.1/go.mod h1:xHWCNGjB5oqiDr8zfno3MHue2Ht5sIBksp03qcyfWMU=
-github.com/Mrs4s/MiraiGo v0.0.0-20201013050256-7b392cacdb79 h1:t9PK37mnl5tbilG+FMUY1hZujoDjFr8iO8upwYHww5c=
-github.com/Mrs4s/MiraiGo v0.0.0-20201013050256-7b392cacdb79/go.mod h1:cwYPI2uq6nxNbx0nA6YuAKF1V5szSs6FPlGVLQvRUlo=
-github.com/Mrs4s/MiraiGo v0.0.0-20201016033322-0922b058ff56 h1:vcXOLG+W/c56EWOwA8btrHMEGBMwFgLUZli0Jh1axzg=
-github.com/Mrs4s/MiraiGo v0.0.0-20201016033322-0922b058ff56/go.mod h1:cwYPI2uq6nxNbx0nA6YuAKF1V5szSs6FPlGVLQvRUlo=
-github.com/Mrs4s/MiraiGo v0.0.0-20201017083749-517ddcd50b8d h1:f59SuqT0RVy6T9nAg6zTNfnzkvdgLdGqkNKu/AfiPU4=
-github.com/Mrs4s/MiraiGo v0.0.0-20201017083749-517ddcd50b8d/go.mod h1:cwYPI2uq6nxNbx0nA6YuAKF1V5szSs6FPlGVLQvRUlo=
-github.com/Mrs4s/MiraiGo v0.0.0-20201024092610-03d2bbf32a4d h1:g200Tv/mkCy6oSFqfOzblMfa3D50iNhyG7IUUQWkb78=
-github.com/Mrs4s/MiraiGo v0.0.0-20201024092610-03d2bbf32a4d/go.mod h1:cwYPI2uq6nxNbx0nA6YuAKF1V5szSs6FPlGVLQvRUlo=
-github.com/Mrs4s/MiraiGo v0.0.0-20201025135955-5be0ad946177 h1:TcKqPWXKvOKW2O80rbswKYVLBB3Xas3+RvRInVMyBm8=
-github.com/Mrs4s/MiraiGo v0.0.0-20201025135955-5be0ad946177/go.mod h1:cwYPI2uq6nxNbx0nA6YuAKF1V5szSs6FPlGVLQvRUlo=
-github.com/bwmarrin/snowflake v0.3.0 h1:xm67bEhkKh6ij1790JB83OujPR5CzNe8QuQqAgISZN0=
-github.com/bwmarrin/snowflake v0.3.0/go.mod h1:NdZxfVWX+oR6y2K0o6qAYv6gIOP9rjG0/E9WsDpxqwE=
+github.com/Mrs4s/MiraiGo v0.0.0-20201025234014-8ece3a9dd803 h1:tRXLslHbNt4bd2wV+MIU2sqQME6UJfMYolYufhSRdg0=
+github.com/Mrs4s/MiraiGo v0.0.0-20201025234014-8ece3a9dd803/go.mod h1:cwYPI2uq6nxNbx0nA6YuAKF1V5szSs6FPlGVLQvRUlo=
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=
@@ -57,8 +47,6 @@ github.com/google/gofuzz v1.0.0/go.mod h1:dBl0BpW6vV/+mYPU4Po3pmUjxk6FQPldtuIdl/
github.com/google/uuid v1.1.1/go.mod h1:TIyPZe4MgqvfeYDBFedMoGGpEw/LqOeaOT+nhxU+yHo=
github.com/gorilla/websocket v1.4.2 h1:+/TMaTYc4QFitKJxsQ7Yye35DkWvkdLcvGKqM+x0Ufc=
github.com/gorilla/websocket v1.4.2/go.mod h1:YR8l580nyteQvAITg2hZ9XVh4b55+EU/adAjf1fMHhE=
-github.com/guonaihong/gout v0.1.2 h1:TR2XCRopGgJdj231IayEoeavgbznFXzzzcZVdT/hG10=
-github.com/guonaihong/gout v0.1.2/go.mod h1:vXvv5Kxr70eM5wrp4F0+t9lnLWmq+YPW2GByll2f/EA=
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=
@@ -114,13 +102,6 @@ github.com/ugorji/go/codec v1.1.7 h1:2SvQaVZ1ouYrrKKwoSk2pzd4A9evlKJb9oTL+OaLUSs
github.com/ugorji/go/codec v1.1.7/go.mod h1:Ax+UKWsSmolVDwsd+7N3ZtXu+yMGCf907BLYF3GoBXY=
github.com/wdvxdr1123/go-silk v0.0.0-20201007123416-b982fd3d91d6 h1:lX18MCdNzT2zIi7K02x4C5cPkDXpL+wCb1YTAMXjLWQ=
github.com/wdvxdr1123/go-silk v0.0.0-20201007123416-b982fd3d91d6/go.mod h1:5q9LFlBr+yX/J8Jd/9wHdXwkkjFkNyQIS7kX2Lgx/Zs=
-github.com/xujiajun/gorouter v1.2.0/go.mod h1:yJrIta+bTNpBM/2UT8hLOaEAFckO+m/qmR3luMIQygM=
-github.com/xujiajun/mmap-go v1.0.1 h1:7Se7ss1fLPPRW+ePgqGpCkfGIZzJV6JPq9Wq9iv/WHc=
-github.com/xujiajun/mmap-go v1.0.1/go.mod h1:CNN6Sw4SL69Sui00p0zEzcZKbt+5HtEnYUsc6BKKRMg=
-github.com/xujiajun/nutsdb v0.5.0 h1:j/jM3Zw7Chg8WK7bAcKR0Xr7Mal47U1oJAMgySfDn9E=
-github.com/xujiajun/nutsdb v0.5.0/go.mod h1:owdwN0tW084RxEodABLbO7h4Z2s9WiAjZGZFhRh0/1Q=
-github.com/xujiajun/utils v0.0.0-20190123093513-8bf096c4f53b h1:jKG9OiL4T4xQN3IUrhUpc1tG+HfDXppkgVcrAiiaI/0=
-github.com/xujiajun/utils v0.0.0-20190123093513-8bf096c4f53b/go.mod h1:AZd87GYJlUzl82Yab2kTjx1EyXSQCAfZDhpTo1SQC4k=
github.com/yinghau76/go-ascii-art v0.0.0-20190517192627-e7f465a30189 h1:4UJw9if55Fu3HOwbfcaQlJ27p3oeJU2JZqoeT3ITJQk=
github.com/yinghau76/go-ascii-art v0.0.0-20190517192627-e7f465a30189/go.mod h1:rIrm5geMiBhPQkdfUm8gDFi/WiHneOp1i9KjmJqc+9I=
golang.org/x/crypto v0.0.0-20190308221718-c2843e01d9a2/go.mod h1:djNgcEr1/C05ACkg1iLfiJU5Ep61QUkGW8qpdssI0+w=
@@ -141,7 +122,6 @@ golang.org/x/sync v0.0.0-20181108010431-42b317875d0f/go.mod h1:RxMgew5VJxzue5/jJ
golang.org/x/sync v0.0.0-20190423024810-112230192c58/go.mod h1:RxMgew5VJxzue5/jJTE5uejpjVlOe/izrB70Jof72aM=
golang.org/x/sys v0.0.0-20180830151530-49385e6e1522/go.mod h1:STP8DvDyc/dI5b8T5hshtkjS+E42TnysNCUPdjciGhY=
golang.org/x/sys v0.0.0-20180909124046-d0be0721c37e/go.mod h1:STP8DvDyc/dI5b8T5hshtkjS+E42TnysNCUPdjciGhY=
-golang.org/x/sys v0.0.0-20181221143128-b4a75ba826a6/go.mod h1:STP8DvDyc/dI5b8T5hshtkjS+E42TnysNCUPdjciGhY=
golang.org/x/sys v0.0.0-20190215142949-d0b11bdaac8a/go.mod h1:STP8DvDyc/dI5b8T5hshtkjS+E42TnysNCUPdjciGhY=
golang.org/x/sys v0.0.0-20190422165155-953cdadca894/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs=
golang.org/x/sys v0.0.0-20190813064441-fde4db37ae7a/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs=
From d32f4273284bebe76172baa4aae828e4bfd4c5ac Mon Sep 17 00:00:00 2001
From: Mrs4s
Date: Tue, 27 Oct 2020 18:12:03 +0800
Subject: [PATCH 105/367] update doc.
---
docs/cqhttp.md | 6 +++---
1 file changed, 3 insertions(+), 3 deletions(-)
diff --git a/docs/cqhttp.md b/docs/cqhttp.md
index c1f7a23..d3aba6b 100644
--- a/docs/cqhttp.md
+++ b/docs/cqhttp.md
@@ -380,9 +380,9 @@ Type: `tts`
| `filename` | string | 图片文件原名 |
| `url` | string | 图片下载地址 |
-### 获取群消息
+### 获取消息
-终结点: `/get_group_msg`
+终结点: `/get_msg`
参数
@@ -398,7 +398,7 @@ Type: `tts`
| `real_id` | int32 | 消息真实id |
| `sender` | object | 发送者 |
| `time` | int32 | 发送时间 |
-| `content` | message | 消息内容 |
+| `message` | message | 消息内容 |
### 获取合并转发内容
From 151e44628c2109e02870991eb19be84aeb6d9507 Mon Sep 17 00:00:00 2001
From: Mrs4s
Date: Tue, 27 Oct 2020 18:23:31 +0800
Subject: [PATCH 106/367] fix #376.
---
coolq/api.go | 52 +++++++++++++++++++++++++++++++++-------------------
coolq/bot.go | 12 +++++-------
2 files changed, 38 insertions(+), 26 deletions(-)
diff --git a/coolq/api.go b/coolq/api.go
index 36564d7..fc05c7f 100644
--- a/coolq/api.go
+++ b/coolq/api.go
@@ -384,29 +384,43 @@ func (bot *CQBot) CQProcessFriendRequest(flag string, approve bool) MSG {
// https://cqhttp.cc/docs/4.15/#/API?id=set_group_add_request-%E5%A4%84%E7%90%86%E5%8A%A0%E7%BE%A4%E8%AF%B7%E6%B1%82%EF%BC%8F%E9%82%80%E8%AF%B7
func (bot *CQBot) CQProcessGroupRequest(flag, subType, reason string, approve bool) MSG {
+ msgs, err := bot.Client.GetGroupSystemMessages()
+ if err != nil {
+ log.Errorf("获取群系统消息失败: %v", err)
+ return Failed(100)
+ }
if subType == "add" {
- req, ok := bot.joinReqCache.Load(flag)
- if !ok {
- return Failed(100)
+ for _, req := range msgs.JoinRequests {
+ if strconv.FormatInt(req.RequestId, 10) == flag {
+ if req.Checked {
+ log.Errorf("处理群系统消息失败: 无法操作已处理的消息.")
+ return Failed(100)
+ }
+ if approve {
+ req.Accept()
+ } else {
+ req.Reject(false, reason)
+ }
+ return OK(nil)
+ }
}
- bot.joinReqCache.Delete(flag)
- if approve {
- req.(*client.UserJoinGroupRequest).Accept()
- } else {
- req.(*client.UserJoinGroupRequest).Reject(false, reason)
+ } else {
+ for _, req := range msgs.InvitedRequests {
+ if strconv.FormatInt(req.RequestId, 10) == flag {
+ if req.Checked {
+ log.Errorf("处理群系统消息失败: 无法操作已处理的消息.")
+ return Failed(100)
+ }
+ if approve {
+ req.Accept()
+ } else {
+ req.Reject(false, reason)
+ }
+ return OK(nil)
+ }
}
- return OK(nil)
- }
- req, ok := bot.invitedReqCache.Load(flag)
- if ok {
- bot.invitedReqCache.Delete(flag)
- if approve {
- req.(*client.GroupInvitedRequest).Accept()
- } else {
- req.(*client.GroupInvitedRequest).Reject(false, reason)
- }
- return OK(nil)
}
+ log.Errorf("处理群系统消息失败: 消息 %v 不存在.", flag)
return Failed(100)
}
diff --git a/coolq/bot.go b/coolq/bot.go
index b71163d..dbe71b4 100644
--- a/coolq/bot.go
+++ b/coolq/bot.go
@@ -23,13 +23,11 @@ import (
type CQBot struct {
Client *client.QQClient
- events []func(MSG)
- db *leveldb.DB
- friendReqCache sync.Map
- invitedReqCache sync.Map
- joinReqCache sync.Map
- tempMsgCache sync.Map
- oneWayMsgCache sync.Map
+ events []func(MSG)
+ db *leveldb.DB
+ friendReqCache sync.Map
+ tempMsgCache sync.Map
+ oneWayMsgCache sync.Map
}
type MSG map[string]interface{}
From 66d76aa1f1b06d72119d72fc738e0c87aa4233d7 Mon Sep 17 00:00:00 2001
From: Mrs4s
Date: Tue, 27 Oct 2020 18:23:51 +0800
Subject: [PATCH 107/367] fix build.
---
coolq/event.go | 2 --
1 file changed, 2 deletions(-)
diff --git a/coolq/event.go b/coolq/event.go
index 8d807a7..4454db1 100644
--- a/coolq/event.go
+++ b/coolq/event.go
@@ -396,7 +396,6 @@ func (bot *CQBot) friendAddedEvent(c *client.QQClient, e *client.NewFriendEvent)
func (bot *CQBot) groupInvitedEvent(c *client.QQClient, e *client.GroupInvitedRequest) {
log.Infof("收到来自群 %v(%v) 内用户 %v(%v) 的加群邀请.", e.GroupName, e.GroupCode, e.InvitorNick, e.InvitorUin)
flag := strconv.FormatInt(e.RequestId, 10)
- bot.invitedReqCache.Store(flag, e)
bot.dispatchEventMessage(MSG{
"post_type": "request",
"request_type": "group",
@@ -413,7 +412,6 @@ func (bot *CQBot) groupInvitedEvent(c *client.QQClient, e *client.GroupInvitedRe
func (bot *CQBot) groupJoinReqEvent(c *client.QQClient, e *client.UserJoinGroupRequest) {
log.Infof("群 %v(%v) 收到来自用户 %v(%v) 的加群请求.", e.GroupName, e.GroupCode, e.RequesterNick, e.RequesterUin)
flag := strconv.FormatInt(e.RequestId, 10)
- bot.joinReqCache.Store(flag, e)
bot.dispatchEventMessage(MSG{
"post_type": "request",
"request_type": "group",
From 08b55473aa1847a446a2e23498b7279670f92244 Mon Sep 17 00:00:00 2001
From: Mrs4s
Date: Tue, 27 Oct 2020 18:32:14 +0800
Subject: [PATCH 108/367] update MiraiGo.
---
go.mod | 2 +-
go.sum | 2 ++
2 files changed, 3 insertions(+), 1 deletion(-)
diff --git a/go.mod b/go.mod
index 72a329d..62929ae 100644
--- a/go.mod
+++ b/go.mod
@@ -3,7 +3,7 @@ module github.com/Mrs4s/go-cqhttp
go 1.14
require (
- github.com/Mrs4s/MiraiGo v0.0.0-20201025234014-8ece3a9dd803
+ github.com/Mrs4s/MiraiGo v0.0.0-20201027102621-5fa25a7f7434
github.com/gin-gonic/gin v1.6.3
github.com/gorilla/websocket v1.4.2
github.com/guonaihong/gout v0.1.3
diff --git a/go.sum b/go.sum
index b9290fb..0484ab1 100644
--- a/go.sum
+++ b/go.sum
@@ -2,6 +2,8 @@ cloud.google.com/go v0.26.0/go.mod h1:aQUYkXzVsufM+DwF1aE+0xfcU+56JwCaLick0ClmMT
github.com/BurntSushi/toml v0.3.1/go.mod h1:xHWCNGjB5oqiDr8zfno3MHue2Ht5sIBksp03qcyfWMU=
github.com/Mrs4s/MiraiGo v0.0.0-20201025234014-8ece3a9dd803 h1:tRXLslHbNt4bd2wV+MIU2sqQME6UJfMYolYufhSRdg0=
github.com/Mrs4s/MiraiGo v0.0.0-20201025234014-8ece3a9dd803/go.mod h1:cwYPI2uq6nxNbx0nA6YuAKF1V5szSs6FPlGVLQvRUlo=
+github.com/Mrs4s/MiraiGo v0.0.0-20201027102621-5fa25a7f7434 h1:wb5EoWBj/ulZ30fBQA2KJ0IwVXcesu9aynCFdpRwS8M=
+github.com/Mrs4s/MiraiGo v0.0.0-20201027102621-5fa25a7f7434/go.mod h1:cwYPI2uq6nxNbx0nA6YuAKF1V5szSs6FPlGVLQvRUlo=
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=
From a0219d76ea2da8c7897d771a3ca0c64d02ee8260 Mon Sep 17 00:00:00 2001
From: Mrs4s
Date: Wed, 28 Oct 2020 11:52:47 +0800
Subject: [PATCH 109/367] fix empty friend message.
---
coolq/bot.go | 4 ++++
1 file changed, 4 insertions(+)
diff --git a/coolq/bot.go b/coolq/bot.go
index b71163d..861a204 100644
--- a/coolq/bot.go
+++ b/coolq/bot.go
@@ -296,6 +296,10 @@ func (bot *CQBot) SendPrivateMessage(target int64, m *message.SendingMessage) in
}
newElem = append(newElem, elem)
}
+ if len(newElem) == 0 {
+ log.Warnf("好友消息发送失败: 消息为空.")
+ return -1
+ }
m.Elements = newElem
var id int32 = -1
if bot.Client.FindFriend(target) != nil { // 双向好友
From 3d81777ed13a6726a492f1267bc89ed41e936f0a Mon Sep 17 00:00:00 2001
From: Mrs4s
Date: Fri, 30 Oct 2020 09:23:58 +0800
Subject: [PATCH 110/367] clear code.
---
server/apiAdmin.go | 3 +--
1 file changed, 1 insertion(+), 2 deletions(-)
diff --git a/server/apiAdmin.go b/server/apiAdmin.go
index 44544f9..27b5b61 100644
--- a/server/apiAdmin.go
+++ b/server/apiAdmin.go
@@ -225,8 +225,7 @@ func (s *webServer) Dologin() {
log.Warn("Bot已登录")
return
}
- if conf.ReLogin.MaxReloginTimes == 0 {
- } else if times > conf.ReLogin.MaxReloginTimes {
+ if times > conf.ReLogin.MaxReloginTimes && conf.ReLogin.MaxReloginTimes != 0 {
break
}
log.Warnf("Bot已离线 (%v),将在 %v 秒后尝试重连. 重连次数:%v",
From 491bd2276e3a65dfcf6299a1de7041956e63b135 Mon Sep 17 00:00:00 2001
From: Mrs4s <1844812067@qq.com>
Date: Sun, 1 Nov 2020 18:14:21 +0800
Subject: [PATCH 111/367] replace error msg.
---
server/apiAdmin.go | 6 +++++-
1 file changed, 5 insertions(+), 1 deletion(-)
diff --git a/server/apiAdmin.go b/server/apiAdmin.go
index 44544f9..bd3de5a 100644
--- a/server/apiAdmin.go
+++ b/server/apiAdmin.go
@@ -183,7 +183,11 @@ func (s *webServer) Dologin() {
os.Exit(0)
return
case client.OtherLoginError, client.UnknownLoginError:
- log.Warnf("登录失败: %v", rsp.ErrorMessage)
+ msg := rsp.ErrorMessage
+ if strings.Contains(msg, "版本") {
+ msg = "密码错误或账号被冻结"
+ }
+ log.Warnf("登录失败: %v", msg)
log.Infof("按 Enter 继续....")
readLine()
os.Exit(0)
From 76b793f1196e5975c14edda1e4f09cdb76c40b74 Mon Sep 17 00:00:00 2001
From: sam01101
Date: Mon, 2 Nov 2020 16:27:00 +0800
Subject: [PATCH 112/367] Updated README.md get_group_msg -> get_msg
---
README.md | 2 +-
1 file changed, 1 insertion(+), 1 deletion(-)
diff --git a/README.md b/README.md
index 3ff33de..d6b5f59 100644
--- a/README.md
+++ b/README.md
@@ -68,7 +68,7 @@
| /set_group_leave | [退出群组](https://cqhttp.cc/docs/4.15/#/API?id=set_group_leave-退出群组) |
| /set_group_name | 设置群组名(拓展API) |
| /get_image | 获取图片信息(拓展API) |
-| /get_group_msg | 获取群组消息(拓展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-获取插件运行状态) |
From f675a70af3e07b6617bbb21dd242f4de6a21e070 Mon Sep 17 00:00:00 2001
From: Mrs4s
Date: Thu, 5 Nov 2020 20:33:06 +0800
Subject: [PATCH 113/367] update MiraiGo & log http post error details.
---
go.mod | 2 +-
go.sum | 10 ++++------
server/http.go | 9 ++++++++-
3 files changed, 13 insertions(+), 8 deletions(-)
diff --git a/go.mod b/go.mod
index 62929ae..ba3dc3b 100644
--- a/go.mod
+++ b/go.mod
@@ -3,7 +3,7 @@ module github.com/Mrs4s/go-cqhttp
go 1.14
require (
- github.com/Mrs4s/MiraiGo v0.0.0-20201027102621-5fa25a7f7434
+ github.com/Mrs4s/MiraiGo v0.0.0-20201105120358-ca72d542ca72
github.com/gin-gonic/gin v1.6.3
github.com/gorilla/websocket v1.4.2
github.com/guonaihong/gout v0.1.3
diff --git a/go.sum b/go.sum
index 0484ab1..163260f 100644
--- a/go.sum
+++ b/go.sum
@@ -1,9 +1,7 @@
cloud.google.com/go v0.26.0/go.mod h1:aQUYkXzVsufM+DwF1aE+0xfcU+56JwCaLick0ClmMTw=
github.com/BurntSushi/toml v0.3.1/go.mod h1:xHWCNGjB5oqiDr8zfno3MHue2Ht5sIBksp03qcyfWMU=
-github.com/Mrs4s/MiraiGo v0.0.0-20201025234014-8ece3a9dd803 h1:tRXLslHbNt4bd2wV+MIU2sqQME6UJfMYolYufhSRdg0=
-github.com/Mrs4s/MiraiGo v0.0.0-20201025234014-8ece3a9dd803/go.mod h1:cwYPI2uq6nxNbx0nA6YuAKF1V5szSs6FPlGVLQvRUlo=
-github.com/Mrs4s/MiraiGo v0.0.0-20201027102621-5fa25a7f7434 h1:wb5EoWBj/ulZ30fBQA2KJ0IwVXcesu9aynCFdpRwS8M=
-github.com/Mrs4s/MiraiGo v0.0.0-20201027102621-5fa25a7f7434/go.mod h1:cwYPI2uq6nxNbx0nA6YuAKF1V5szSs6FPlGVLQvRUlo=
+github.com/Mrs4s/MiraiGo v0.0.0-20201105120358-ca72d542ca72 h1:aiKVmrgZHXARnO6AYODwFf1JvTZr6OCl2pohepkkYKc=
+github.com/Mrs4s/MiraiGo v0.0.0-20201105120358-ca72d542ca72/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=
@@ -36,8 +34,8 @@ github.com/golang/protobuf v1.4.0-rc.2/go.mod h1:LlEzMj4AhA7rCAGe4KMBDvJI+AwstrU
github.com/golang/protobuf v1.4.0-rc.4.0.20200313231945-b860323f09d0/go.mod h1:WU3c8KckQ9AFe+yFwt9sWVRKCVIyN9cPHBJSNnbL67w=
github.com/golang/protobuf v1.4.0/go.mod h1:jodUvKwWbYaEsadDk5Fwe5c77LiNKVO9IDvqG2KuDX0=
github.com/golang/protobuf v1.4.1/go.mod h1:U8fpvMrcmy5pZrNK1lt4xCsGvpyWQ/VVv6QDs8UjoX8=
-github.com/golang/protobuf v1.4.2 h1:+Z5KGCizgyZCbGh1KZqA0fcLLkwbsjIzS4aV2v7wJX0=
-github.com/golang/protobuf v1.4.2/go.mod h1:oDoupMAO8OvCJWAcko0GGGIgR6R6ocIYbsSw735rRwI=
+github.com/golang/protobuf v1.4.3 h1:JjCZWpVbqXDqFVmTfYWEVTMIYrL/NPdPSCHPJ0T/raM=
+github.com/golang/protobuf v1.4.3/go.mod h1:oDoupMAO8OvCJWAcko0GGGIgR6R6ocIYbsSw735rRwI=
github.com/golang/snappy v0.0.0-20180518054509-2e65f85255db h1:woRePGFeVFfLKN/pOkfl+p/TAqKOfFu+7KPlMVpok/w=
github.com/golang/snappy v0.0.0-20180518054509-2e65f85255db/go.mod h1:/XxbfmMg8lxefKM7IXC3fBNl/7bRcc72aCRzEWrmP2Q=
github.com/google/go-cmp v0.2.0/go.mod h1:oXzfMopK8JAjlY9xF4vHSVASa0yLyX7SntLO5aqRK0M=
diff --git a/server/http.go b/server/http.go
index 6d6ca1a..89e864a 100644
--- a/server/http.go
+++ b/server/http.go
@@ -5,6 +5,7 @@ import (
"crypto/hmac"
"crypto/sha1"
"encoding/hex"
+ "github.com/guonaihong/gout/dataflow"
"net/http"
"os"
"strconv"
@@ -132,7 +133,13 @@ func (c *httpClient) onBotPushEvent(m coolq.MSG) {
return h
}()).SetTimeout(time.Second * time.Duration(c.timeout)).F().Retry().Attempt(5).
WaitTime(time.Millisecond * 500).MaxWaitTime(time.Second * 5).
- Do()
+ Func(func(con *dataflow.Context) error {
+ if con.Error != nil {
+ log.Warnf("上报Event到 HTTP 服务器 %v 时出现错误: %v 将重试.", c.addr, con.Error)
+ return con.Error
+ }
+ return nil
+ }).Do()
if err != nil {
log.Warnf("上报Event数据 %v 到 %v 失败: %v", m.ToJson(), c.addr, err)
return
From 36b235871fc58306c9ead87bad4befb9e95a80cf Mon Sep 17 00:00:00 2001
From: Mrs4s
Date: Fri, 6 Nov 2020 09:18:20 +0800
Subject: [PATCH 114/367] fix #397.
---
coolq/bot.go | 2 ++
coolq/cqcode.go | 4 ++++
coolq/event.go | 20 ++++++++++++++++++++
3 files changed, 26 insertions(+)
diff --git a/coolq/bot.go b/coolq/bot.go
index dbe71b4..4a40221 100644
--- a/coolq/bot.go
+++ b/coolq/bot.go
@@ -214,6 +214,7 @@ func (bot *CQBot) SendGroupMessage(groupId int64, m *message.SendingMessage) int
return -1
}
m.Elements = newElem
+ bot.checkMedia(newElem)
ret := bot.Client.SendGroupMessage(groupId, m, ForceFragmented)
if ret == nil || ret.Id == -1 {
log.Warnf("群消息发送失败: 账号可能被风控.")
@@ -295,6 +296,7 @@ func (bot *CQBot) SendPrivateMessage(target int64, m *message.SendingMessage) in
newElem = append(newElem, elem)
}
m.Elements = newElem
+ bot.checkMedia(newElem)
var id int32 = -1
if bot.Client.FindFriend(target) != nil { // 双向好友
msg := bot.Client.SendPrivateMessage(target, m)
diff --git a/coolq/cqcode.go b/coolq/cqcode.go
index 2233ad6..f092a5f 100644
--- a/coolq/cqcode.go
+++ b/coolq/cqcode.go
@@ -243,6 +243,10 @@ func ToStringMessage(e []message.IMessageElement, code int64, raw ...bool) (r st
} else {
r += fmt.Sprintf(`[CQ:image,file=%s,url=%s]`, o.Filename, CQCodeEscapeValue(o.Url))
}
+ case *message.GroupImageElement:
+ r += fmt.Sprintf("[CQ:image,file=%s]", hex.EncodeToString(o.Md5)+".image")
+ case *message.FriendImageElement:
+ r += fmt.Sprintf("[CQ:image,file=%s]", hex.EncodeToString(o.Md5)+".image")
case *message.ServiceElement:
if isOk := strings.Contains(o.Content, "
Date: Sat, 7 Nov 2020 13:19:37 +0800
Subject: [PATCH 115/367] fix #381.
---
global/config.go | 2 +-
main.go | 2 +-
2 files changed, 2 insertions(+), 2 deletions(-)
diff --git a/global/config.go b/global/config.go
index e380e99..15a3759 100644
--- a/global/config.go
+++ b/global/config.go
@@ -131,7 +131,7 @@ func DefaultConfig() *JsonConfig {
},
WebUi: &GoCqWebUi{
Enabled: true,
- Host: "0.0.0.0",
+ Host: "127.0.0.1",
WebInput: false,
WebUiPort: 9999,
},
diff --git a/main.go b/main.go
index 46ce32d..7601725 100644
--- a/main.go
+++ b/main.go
@@ -245,7 +245,7 @@ func main() {
conf.WebUi.WebUiPort = 9999
}
if conf.WebUi.Host == "" {
- conf.WebUi.Host = "0.0.0.0"
+ conf.WebUi.Host = "127.0.0.1"
}
confErr := conf.Save("config.json")
if confErr != nil {
From 6bb1f1603e2b3fe405d81a3440235ee247ef7c28 Mon Sep 17 00:00:00 2001
From: Mrs4s <1844812067@qq.com>
Date: Sat, 7 Nov 2020 13:59:43 +0800
Subject: [PATCH 116/367] feature: update check.
---
global/param.go | 22 ++++++++++++++++++++++
main.go | 27 +++++++++++++++++++++++++++
2 files changed, 49 insertions(+)
diff --git a/global/param.go b/global/param.go
index 25e138f..5f01bea 100644
--- a/global/param.go
+++ b/global/param.go
@@ -2,6 +2,9 @@ package global
import (
"github.com/tidwall/gjson"
+ "math"
+ "regexp"
+ "strconv"
"strings"
)
@@ -48,3 +51,22 @@ func EnsureBool(p interface{}, defaultVal bool) bool {
}
return defaultVal
}
+
+// VersionNameCompare 检查版本名是否需要更新, 仅适用于 go-cqhttp 的版本命名规则
+// 例: v0.9.29-fix2 == v0.9.29-fix2 -> false
+// v0.9.29-fix1 < v0.9.29-fix2 -> true
+// v0.9.29-fix2 > v0.9.29-fix1 -> false
+// v0.9.29-fix2 < v0.9.30 -> true
+func VersionNameCompare(current, remote string) bool {
+ sp := regexp.MustCompile(`[0-9]\d*`)
+ cur := sp.FindAllStringSubmatch(current, -1)
+ re := sp.FindAllStringSubmatch(remote, -1)
+ for i := 0; i < int(math.Min(float64(len(cur)), float64(len(re)))); i++ {
+ curSub, _ := strconv.Atoi(cur[i][0])
+ reSub, _ := strconv.Atoi(re[i][0])
+ if curSub < reSub {
+ return true
+ }
+ }
+ return len(cur) < len(re)
+}
diff --git a/main.go b/main.go
index 7601725..971d001 100644
--- a/main.go
+++ b/main.go
@@ -7,6 +7,8 @@ import (
"encoding/json"
"fmt"
"github.com/Mrs4s/go-cqhttp/server"
+ "github.com/guonaihong/gout"
+ "github.com/tidwall/gjson"
"io"
"io/ioutil"
"os"
@@ -253,6 +255,7 @@ func main() {
}
b := server.WebServer.Run(fmt.Sprintf("%s:%d", conf.WebUi.Host, conf.WebUi.WebUiPort), cli)
c := server.Console
+ go checkUpdate()
signal.Notify(c, os.Interrupt, os.Kill)
<-c
b.Release()
@@ -282,3 +285,27 @@ func DecryptPwd(ePwd string, key []byte) string {
}
return string(tea.Decrypt(encrypted))
}
+
+func checkUpdate() {
+ log.Infof("正在检查更新.")
+ if coolq.Version == "unknown" {
+ log.Warnf("检查更新失败: 使用的 Actions 测试版或自编译版本")
+ return
+ }
+ var res string
+ if err := gout.GET("https://api.github.com/repos/Mrs4s/go-cqhttp/releases").BindBody(&res).Do(); err != nil {
+ log.Warnf("检查更新失败: %v", err)
+ return
+ }
+ detail := gjson.Parse(res)
+ if len(detail.Array()) < 1 {
+ return
+ }
+ info := detail.Array()[0]
+ if global.VersionNameCompare(coolq.Version, info.Get("tag_name").Str) {
+ log.Infof("当前有更新的 go-cqhttp 可供更新, 请前往 https://github.com/Mrs4s/go-cqhttp/releases 下载.")
+ log.Infof("当前版本: %v 最新版本: %v", coolq.Version, info.Get("tag_name").Str)
+ return
+ }
+ log.Infof("检查更新完成. 当前已运行最新版本.")
+}
From e2d2461595501f62f5aba4649c456575d9e06d3f Mon Sep 17 00:00:00 2001
From: Mrs4s <1844812067@qq.com>
Date: Sat, 7 Nov 2020 14:50:10 +0800
Subject: [PATCH 117/367] feature: group file api.
---
coolq/api.go | 53 +++++++++++++++++++++++++++++++++++++++++++++
main.go | 2 +-
server/http.go | 35 ++++++++++++++++++++++++++++++
server/websocket.go | 12 ++++++++++
4 files changed, 101 insertions(+), 1 deletion(-)
diff --git a/coolq/api.go b/coolq/api.go
index fc05c7f..ee5ba17 100644
--- a/coolq/api.go
+++ b/coolq/api.go
@@ -102,6 +102,59 @@ func (bot *CQBot) CQGetGroupMemberInfo(groupId, userId int64) MSG {
return OK(convertGroupMemberInfo(groupId, member))
}
+func (bot *CQBot) CQGetGroupFileSystemInfo(groupId int64) MSG {
+ fs, err := bot.Client.GetGroupFileSystem(groupId)
+ if err != nil {
+ log.Errorf("获取群 %v 文件系统信息失败: %v", groupId, err)
+ return Failed(100)
+ }
+ return OK(fs)
+}
+
+func (bot *CQBot) CQGetGroupRootFiles(groupId int64) MSG {
+ fs, err := bot.Client.GetGroupFileSystem(groupId)
+ if err != nil {
+ log.Errorf("获取群 %v 文件系统信息失败: %v", groupId, err)
+ return Failed(100)
+ }
+ files, folders, err := fs.Root()
+ if err != nil {
+ log.Errorf("获取群 %v 根目录文件失败: %v", groupId, err)
+ return Failed(100)
+ }
+ return OK(MSG{
+ "files": files,
+ "folders": folders,
+ })
+}
+
+func (bot *CQBot) CQGetGroupFilesByFolderId(groupId int64, folderId string) MSG {
+ fs, err := bot.Client.GetGroupFileSystem(groupId)
+ if err != nil {
+ log.Errorf("获取群 %v 文件系统信息失败: %v", groupId, err)
+ return Failed(100)
+ }
+ files, folders, err := fs.GetFilesByFolder(folderId)
+ if err != nil {
+ log.Errorf("获取群 %v 根目录 %v 子文件失败: %v", groupId, folderId, err)
+ return Failed(100)
+ }
+ return OK(MSG{
+ "files": files,
+ "folders": folders,
+ })
+}
+
+func (bot *CQBot) CQGetGroupFileUrl(groupId int64, fileId string, busId int32) MSG {
+ url := bot.Client.GetGroupFileUrl(groupId, fileId, busId)
+ if url == "" {
+ return Failed(100)
+ }
+ return OK(MSG{
+ "url": url,
+ })
+}
+
func (bot *CQBot) CQGetWordSlices(content string) MSG {
slices, err := bot.Client.GetWordSegmentation(content)
if err != nil {
diff --git a/main.go b/main.go
index 971d001..6da4252 100644
--- a/main.go
+++ b/main.go
@@ -289,7 +289,7 @@ func DecryptPwd(ePwd string, key []byte) string {
func checkUpdate() {
log.Infof("正在检查更新.")
if coolq.Version == "unknown" {
- log.Warnf("检查更新失败: 使用的 Actions 测试版或自编译版本")
+ log.Warnf("检查更新失败: 使用的 Actions 测试版或自编译版本.")
return
}
var res string
diff --git a/server/http.go b/server/http.go
index 89e864a..3ad7faf 100644
--- a/server/http.go
+++ b/server/http.go
@@ -191,6 +191,29 @@ func (s *httpServer) GetGroupMemberInfo(c *gin.Context) {
c.JSON(200, s.bot.CQGetGroupMemberInfo(gid, uid))
}
+func (s *httpServer) GetGroupFileSystemInfo(c *gin.Context) {
+ gid, _ := strconv.ParseInt(getParam(c, "group_id"), 10, 64)
+ c.JSON(200, s.bot.CQGetGroupFileSystemInfo(gid))
+}
+
+func (s *httpServer) GetGroupRootFiles(c *gin.Context) {
+ gid, _ := strconv.ParseInt(getParam(c, "group_id"), 10, 64)
+ c.JSON(200, s.bot.CQGetGroupRootFiles(gid))
+}
+
+func (s *httpServer) GetGroupFilesByFolderId(c *gin.Context) {
+ gid, _ := strconv.ParseInt(getParam(c, "group_id"), 10, 64)
+ folderId := getParam(c, "folder_id")
+ c.JSON(200, s.bot.CQGetGroupFilesByFolderId(gid, folderId))
+}
+
+func (s *httpServer) GetGroupFileUrl(c *gin.Context) {
+ gid, _ := strconv.ParseInt(getParam(c, "group_id"), 10, 64)
+ fid := getParam(c, "file_id")
+ busid, _ := strconv.ParseInt(getParam(c, "busid"), 10, 32)
+ c.JSON(200, s.bot.CQGetGroupFileUrl(gid, fid, int32(busid)))
+}
+
func (s *httpServer) SendMessage(c *gin.Context) {
if getParam(c, "message_type") == "private" {
s.SendPrivateMessage(c)
@@ -459,6 +482,18 @@ var httpApi = map[string]func(s *httpServer, c *gin.Context){
"get_group_member_info": func(s *httpServer, c *gin.Context) {
s.GetGroupMemberInfo(c)
},
+ "get_group_file_system_info": func(s *httpServer, c *gin.Context) {
+ s.GetGroupFileSystemInfo(c)
+ },
+ "get_group_root_files": func(s *httpServer, c *gin.Context) {
+ s.GetGroupRootFiles(c)
+ },
+ "get_group_files_by_folder": func(s *httpServer, c *gin.Context) {
+ s.GetGroupFilesByFolderId(c)
+ },
+ "get_group_file_url": func(s *httpServer, c *gin.Context) {
+ s.GetGroupFileUrl(c)
+ },
"send_msg": func(s *httpServer, c *gin.Context) {
s.SendMessage(c)
},
diff --git a/server/websocket.go b/server/websocket.go
index 9293082..668ea00 100644
--- a/server/websocket.go
+++ b/server/websocket.go
@@ -498,6 +498,18 @@ var wsApi = map[string]func(*coolq.CQBot, gjson.Result) coolq.MSG{
"get_group_system_msg": func(bot *coolq.CQBot, p gjson.Result) coolq.MSG {
return bot.CQGetGroupSystemMessages()
},
+ "get_group_file_system_info": func(bot *coolq.CQBot, p gjson.Result) coolq.MSG {
+ return bot.CQGetGroupFileSystemInfo(p.Get("group_id").Int())
+ },
+ "get_group_root_files": func(bot *coolq.CQBot, p gjson.Result) coolq.MSG {
+ return bot.CQGetGroupRootFiles(p.Get("group_id").Int())
+ },
+ "get_group_files_by_folder": func(bot *coolq.CQBot, p gjson.Result) coolq.MSG {
+ return bot.CQGetGroupFilesByFolderId(p.Get("group_id").Int(), p.Get("folder_id").Str)
+ },
+ "get_group_file_url": func(bot *coolq.CQBot, p gjson.Result) coolq.MSG {
+ return bot.CQGetGroupFileUrl(p.Get("group_id").Int(), p.Get("file_id").Str, int32(p.Get("busid").Int()))
+ },
"_get_vip_info": func(bot *coolq.CQBot, p gjson.Result) coolq.MSG {
return bot.CQGetVipInfo(p.Get("user_id").Int())
},
From d906bbf0ff886ebac4c7ff38738e310493243226 Mon Sep 17 00:00:00 2001
From: Mrs4s <1844812067@qq.com>
Date: Sat, 7 Nov 2020 15:04:27 +0800
Subject: [PATCH 118/367] doc update.
---
docs/cqhttp.md | 102 +++++++++++++++++++++++++++++++++++++++++++++++++
1 file changed, 102 insertions(+)
diff --git a/docs/cqhttp.md b/docs/cqhttp.md
index d3aba6b..09b2c0d 100644
--- a/docs/cqhttp.md
+++ b/docs/cqhttp.md
@@ -538,7 +538,109 @@ Type: `tts`
| `checked` | bool | 是否已被处理|
| `actor` | int64 | 处理者, 未处理为0 |
+### 获取群文件系统信息
+终结点: `/get_group_file_system_info`
+
+**参数**
+
+ | 字段 | 类型 | 说明 |
+ | ------------ | ------ | ------ |
+ | `group_id` | int64 | 群号 |
+
+**响应数据**
+
+ | 字段 | 类型 | 说明 |
+ | ---------- | ----------------- | -------- |
+ | `file_count` | int32 | 文件总数 |
+ | `limit_count` | int32 | 文件上限 |
+ | `used_space` | int64 | 已使用空间 |
+ | `total_space` | int64 | 空间上限 |
+
+### 获取群根目录文件列表
+
+> `File` 和 `Folder` 对象信息请参考最下方
+
+终结点: `/get_group_root_files`
+
+**参数**
+
+ | 字段 | 类型 | 说明 |
+ | ------------ | ------ | ------ |
+ | `group_id` | int64 | 群号 |
+
+**响应数据**
+
+ | 字段 | 类型 | 说明 |
+ | ---------- | ----------------- | -------- |
+ | `files` | File[] | 文件列表 |
+ | `folders` | Folder[] | 文件夹列表 |
+
+### 获取群子目录文件列表
+
+> `File` 和 `Folder` 对象信息请参考最下方
+
+终结点: `/get_group_files_by_folder`
+
+**参数**
+
+ | 字段 | 类型 | 说明 |
+ | ------------ | ------ | ------ |
+ | `group_id` | int64 | 群号 |
+ | `folder_id` | string | 文件夹ID 参考 `Folder` 对象 |
+
+**响应数据**
+
+ | 字段 | 类型 | 说明 |
+ | ---------- | ----------------- | -------- |
+ | `files` | File[] | 文件列表 |
+ | `folders` | Folder[] | 文件夹列表 |
+
+### 获取群文件资源链接
+
+> `File` 和 `Folder` 对象信息请参考最下方
+
+终结点: `/get_group_file_url`
+
+**参数**
+
+ | 字段 | 类型 | 说明 |
+ | ------------ | ------ | ------ |
+ | `group_id` | int64 | 群号 |
+ | `file_id` | string | 文件ID 参考 `File` 对象 |
+ | `busid` | int32 | 文件类型 参考 `File` 对象 |
+
+**响应数据**
+
+ | 字段 | 类型 | 说明 |
+ | ---------- | ----------------- | -------- |
+ | `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 | 上传者名字 |
+
+ **Folder**
+
+ | 字段 | 类型 | 说明 |
+ | ---------- | ----------------- | -------- |
+ | `folder_id` | string | 文件夹ID |
+ | `folder_name` | string | 文件名 |
+ | `create_time` | int64 | 创建时间 |
+ | `creator` | int64 | 创建者 |
+ | `creator_name` | string | 创建者名字 |
+ | `total_file_count` | int32 | 子文件数量 |
## 事件
From 0cc3d90581f71e7ed31f247173e92700ec1f8148 Mon Sep 17 00:00:00 2001
From: wfjsw
Date: Sun, 8 Nov 2020 23:50:31 +0800
Subject: [PATCH 119/367] fix misinterpretation of whole ban
---
coolq/event.go | 27 +++++++++++++++++++--------
1 file changed, 19 insertions(+), 8 deletions(-)
diff --git a/coolq/event.go b/coolq/event.go
index ea60bb7..7512d80 100644
--- a/coolq/event.go
+++ b/coolq/event.go
@@ -167,13 +167,24 @@ func (bot *CQBot) tempMessageEvent(c *client.QQClient, m *message.TempMessage) {
func (bot *CQBot) groupMutedEvent(c *client.QQClient, e *client.GroupMuteEvent) {
g := c.FindGroup(e.GroupCode)
- if e.Time > 0 {
- log.Infof("群 %v 内 %v 被 %v 禁言了 %v秒.",
- formatGroupName(g), formatMemberName(g.FindMember(e.TargetUin)), formatMemberName(g.FindMember(e.OperatorUin)), e.Time)
+ if e.TargetUin == 0 {
+ if e.Time != 0 {
+ log.Infof("群 %v 被 %v 开启全员禁言.",
+ formatGroupName(g), formatMemberName(g.FindMember(e.OperatorUin)))
+ } else {
+ log.Infof("群 %v 被 %v 解除全员禁言.",
+ formatGroupName(g), formatMemberName(g.FindMember(e.OperatorUin)))
+ }
} else {
- log.Infof("群 %v 内 %v 被 %v 解除禁言.",
- formatGroupName(g), formatMemberName(g.FindMember(e.TargetUin)), formatMemberName(g.FindMember(e.OperatorUin)))
+ if e.Time > 0 {
+ log.Infof("群 %v 内 %v 被 %v 禁言了 %v 秒.",
+ formatGroupName(g), formatMemberName(g.FindMember(e.TargetUin)), formatMemberName(g.FindMember(e.OperatorUin)), e.Time)
+ } else {
+ log.Infof("群 %v 内 %v 被 %v 解除禁言.",
+ formatGroupName(g), formatMemberName(g.FindMember(e.TargetUin)), formatMemberName(g.FindMember(e.OperatorUin)))
+ }
}
+
bot.dispatchEventMessage(MSG{
"post_type": "notice",
"duration": e.Time,
@@ -184,10 +195,10 @@ func (bot *CQBot) groupMutedEvent(c *client.QQClient, e *client.GroupMuteEvent)
"user_id": e.TargetUin,
"time": time.Now().Unix(),
"sub_type": func() string {
- if e.Time > 0 {
- return "ban"
+ if e.Time == 0 {
+ return "lift_ban"
}
- return "lift_ban"
+ return "ban"
}(),
})
}
From c2c7b96f1bd95d1f45915c68dd9eea1c4a78aeb4 Mon Sep 17 00:00:00 2001
From: wdvxdr
Date: Mon, 9 Nov 2020 22:51:50 +0800
Subject: [PATCH 120/367] add self update
---
.github/workflows/release.yml | 2 +-
global/fs.go | 18 ++++++++
go.mod | 20 +++++++++
go.sum | 78 +++++++++++++++++++++++++++++++++
main.go | 82 +++++++++++++++++++++++++++++++++++
5 files changed, 199 insertions(+), 1 deletion(-)
diff --git a/.github/workflows/release.yml b/.github/workflows/release.yml
index b121c64..51dc5bc 100644
--- a/.github/workflows/release.yml
+++ b/.github/workflows/release.yml
@@ -21,7 +21,7 @@ jobs:
- uses: actions/checkout@v2
- name: Set RELEASE_VERSION env
run: echo ::set-env name=RELEASE_VERSION::${GITHUB_REF:10}
- - uses: wangyoucao577/go-release-action@master
+ - uses: pcrbot/go-release-action@master
env:
CGO_ENABLED: 0
with:
diff --git a/global/fs.go b/global/fs.go
index 1b19b36..e5fb7ca 100644
--- a/global/fs.go
+++ b/global/fs.go
@@ -6,6 +6,8 @@ import (
"encoding/base64"
"encoding/hex"
"errors"
+ "fmt"
+ "github.com/dustin/go-humanize"
log "github.com/sirupsen/logrus"
"io/ioutil"
"net/url"
@@ -107,3 +109,19 @@ func DelFile(path string) bool {
return true
}
}
+
+type WriteCounter struct {
+ Total uint64
+}
+
+func (wc *WriteCounter) Write(p []byte) (int, error) {
+ n := len(p)
+ wc.Total += uint64(n)
+ wc.PrintProgress()
+ return n, nil
+}
+
+func (wc WriteCounter) PrintProgress() {
+ fmt.Printf("\r%s", strings.Repeat(" ", 35))
+ fmt.Printf("\rDownloading... %s complete", humanize.Bytes(wc.Total))
+}
\ No newline at end of file
diff --git a/go.mod b/go.mod
index ba3dc3b..2c4437f 100644
--- a/go.mod
+++ b/go.mod
@@ -4,18 +4,38 @@ go 1.14
require (
github.com/Mrs4s/MiraiGo v0.0.0-20201105120358-ca72d542ca72
+ 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/go-playground/validator/v10 v10.4.1 // indirect
+ github.com/golang/snappy v0.0.2 // indirect
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
github.com/lestrrat-go/strftime v1.0.3 // indirect
+ github.com/modern-go/concurrent v0.0.0-20180306012644-bacd9c7ef1dd // indirect
+ github.com/modern-go/reflect2 v1.0.1 // indirect
github.com/pkg/errors v0.9.1 // indirect
github.com/rifflock/lfshook v0.0.0-20180920164130-b9218ef580f5
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.1
+ github.com/ugorji/go v1.1.13 // indirect
github.com/wdvxdr1123/go-silk v0.0.0-20201007123416-b982fd3d91d6
github.com/yinghau76/go-ascii-art v0.0.0-20190517192627-e7f465a30189
+ golang.org/x/crypto v0.0.0-20201016220609-9e8e0b390897 // indirect
+ golang.org/x/net v0.0.0-20201031054903-ff519b6c9102 // indirect
+ golang.org/x/sys v0.0.0-20201101102859-da207088b7d1 // indirect
golang.org/x/time v0.0.0-20200630173020-3af7569d3a1e
+ gopkg.in/yaml.v2 v2.3.0 // indirect
)
+
+// replace github.com/Mrs4s/MiraiGo => C:\Users\wdvxdr\Documents\GitHub\MiraiGo
diff --git a/go.sum b/go.sum
index 163260f..21782a2 100644
--- a/go.sum
+++ b/go.sum
@@ -5,15 +5,36 @@ github.com/Mrs4s/MiraiGo v0.0.0-20201105120358-ca72d542ca72/go.mod h1:pAsWtMIwqk
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=
+github.com/davecgh/go-spew v1.1.1 h1:vj9j/u1bqnvCEfJOwUhtlOARqs3+rkHYY13jYWTU97c=
github.com/davecgh/go-spew v1.1.1/go.mod h1:J7Y8YcW2NihsgmVo/mv3lAwl/skON4iLHjSsI+c5H38=
+github.com/dustin/go-humanize v1.0.0 h1:VSnTsYCnlFHaM2/igO1h6X3HA71jcobQuxemgkq4zYo=
+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 h1:IXs+QLmnXW2CcXuY+8Mzv/fWEsPGWxqefPtCP5CnV9I=
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=
+github.com/getlantern/errors v1.0.1 h1:XukU2whlh7OdpxnkXhNH9VTLVz0EVPGKDV5K0oWhvzw=
+github.com/getlantern/errors v1.0.1/go.mod h1:l+xpFBrCtDLpK9qNjxs+cHU6+BAdlBaxHqikB6Lku3A=
+github.com/getlantern/go-update v0.0.0-20190510022740-79c495ab728c h1:mP9bsvdddRSMwqO+lmNuSrsH7nD2nBIz7af+e/4je4c=
+github.com/getlantern/go-update v0.0.0-20190510022740-79c495ab728c/go.mod h1:goroSTghTcnjKaR2C8ovKWy1lEvRNfqHrW/kRJNMek0=
+github.com/getlantern/golog v0.0.0-20201105130739-9586b8bde3a9 h1:8MYJU90rB1bsavemKSAuDKBjtAKo5xq95bEPOnzV7CE=
+github.com/getlantern/golog v0.0.0-20201105130739-9586b8bde3a9/go.mod h1:ZyIjgH/1wTCl+B+7yH1DqrWp6MPJqESmwmEQ89ZfhvA=
+github.com/getlantern/hex v0.0.0-20190417191902-c6586a6fe0b7 h1:micT5vkcr9tOVk1FiH8SWKID8ultN44Z+yzd2y/Vyb0=
+github.com/getlantern/hex v0.0.0-20190417191902-c6586a6fe0b7/go.mod h1:dD3CgOrwlzca8ed61CsZouQS5h5jIzkK9ZWrTcf0s+o=
+github.com/getlantern/hidden v0.0.0-20190325191715-f02dbb02be55 h1:XYzSdCbkzOC0FDNrgJqGRo8PCMFOBFL9py72DRs7bmc=
+github.com/getlantern/hidden v0.0.0-20190325191715-f02dbb02be55/go.mod h1:6mmzY2kW1TOOrVy+r41Za2MxXM+hhqTtY3oBKd2AgFA=
+github.com/getlantern/ops v0.0.0-20190325191751-d70cb0d6f85f h1:wrYrQttPS8FHIRSlsrcuKazukx/xqO/PpLZzZXsF+EA=
+github.com/getlantern/ops v0.0.0-20190325191751-d70cb0d6f85f/go.mod h1:D5ao98qkA6pxftxoqzibIBBrLSUli+kYnJqrgBf9cIA=
github.com/gin-contrib/sse v0.1.0 h1:Y/yl/+YNO8GZSjAhjMsSuLt29uWRFHdHYUb5lYOV9qE=
github.com/gin-contrib/sse v0.1.0/go.mod h1:RHrZQHXnP2xjPF+u1gW/2HnVO7nvIa9PG3Gm+fLHvGI=
github.com/gin-gonic/gin v1.5.0/go.mod h1:Nd6IXA8m5kNZdNEHMBd93KT+mdY3+bewLgRvmCsR2Do=
github.com/gin-gonic/gin v1.6.3 h1:ahKqKTFpO5KTPHxWZjEdPScmYaGtLo8Y4DMHoEsnp14=
github.com/gin-gonic/gin v1.6.3/go.mod h1:75u5sXoLsGZoRN5Sgbi1eraJ4GU3++wFwWzhwvtwp4M=
+github.com/go-playground/assert/v2 v2.0.1 h1:MsBgLAaY856+nPRTKrp3/OZK38U/wa0CcBYNjji3q3A=
github.com/go-playground/assert/v2 v2.0.1/go.mod h1:VDjEfimB/XKnb+ZQfWdccd7VUvScMdVu0Titje2rxJ4=
github.com/go-playground/locales v0.12.1/go.mod h1:IUMDtCfWo/w/mtMfIE/IG2K+Ey3ygWanZIBtBW0W2TM=
github.com/go-playground/locales v0.13.0 h1:HyWk6mgj5qFqCT5fjGBuRArbVDfE4hi8+e8ceBS/t7Q=
@@ -23,6 +44,10 @@ github.com/go-playground/universal-translator v0.17.0 h1:icxd5fm+REJzpZx7ZfpaD87
github.com/go-playground/universal-translator v0.17.0/go.mod h1:UkSxE5sNxxRwHyU+Scu5vgOQjsIJAF8j9muTVoKLVtA=
github.com/go-playground/validator/v10 v10.2.0 h1:KgJ0snyC2R9VXYN2rneOtQcw5aHQB1Vv0sFl1UcHBOY=
github.com/go-playground/validator/v10 v10.2.0/go.mod h1:uOYAAleCW8F/7oMFd6aG0GOhaH6EGOAJShg8Id5JGkI=
+github.com/go-playground/validator/v10 v10.4.1 h1:pH2c5ADXtd66mxoE0Zm9SUhxE20r7aM3F26W0hOn+GE=
+github.com/go-playground/validator/v10 v10.4.1/go.mod h1:nlOn6nFhuKACm19sB/8EGNn9GlaMV7XkbRSipzJ0Ii4=
+github.com/go-stack/stack v1.8.0 h1:5SgMzNM5HxrEjV0ww2lTmX6E2Izsfxas4+YHWRs3Lsk=
+github.com/go-stack/stack v1.8.0/go.mod h1:v0f6uXyyMGvRgIKkXu+yp6POWl0qKG85gN/melR3HDY=
github.com/golang/glog v0.0.0-20160126235308-23def4e6c14b/go.mod h1:SBH7ygxi8pfUlaOkMMuAQtPIUF8ecWP5IEl/CR7VP2Q=
github.com/golang/mock v1.1.1/go.mod h1:oTYuIxOrZwtPieC+H1uAHpcLFnEyAGVDL/k47Jfbm0A=
github.com/golang/protobuf v1.2.0/go.mod h1:6lQm79b+lXiMfvg/cZm0SGofjICqVBUtrP5yJMmIC1U=
@@ -38,24 +63,39 @@ github.com/golang/protobuf v1.4.3 h1:JjCZWpVbqXDqFVmTfYWEVTMIYrL/NPdPSCHPJ0T/raM
github.com/golang/protobuf v1.4.3/go.mod h1:oDoupMAO8OvCJWAcko0GGGIgR6R6ocIYbsSw735rRwI=
github.com/golang/snappy v0.0.0-20180518054509-2e65f85255db h1:woRePGFeVFfLKN/pOkfl+p/TAqKOfFu+7KPlMVpok/w=
github.com/golang/snappy v0.0.0-20180518054509-2e65f85255db/go.mod h1:/XxbfmMg8lxefKM7IXC3fBNl/7bRcc72aCRzEWrmP2Q=
+github.com/golang/snappy v0.0.2 h1:aeE13tS0IiQgFjYdoL8qN3K1N2bXXtI6Vi51/y7BpMw=
+github.com/golang/snappy v0.0.2/go.mod h1:/XxbfmMg8lxefKM7IXC3fBNl/7bRcc72aCRzEWrmP2Q=
github.com/google/go-cmp v0.2.0/go.mod h1:oXzfMopK8JAjlY9xF4vHSVASa0yLyX7SntLO5aqRK0M=
github.com/google/go-cmp v0.3.0/go.mod h1:8QqcDgzrUqlUb/G2PQTWiueGozuR1884gddMywk6iLU=
github.com/google/go-cmp v0.3.1/go.mod h1:8QqcDgzrUqlUb/G2PQTWiueGozuR1884gddMywk6iLU=
github.com/google/go-cmp v0.4.0/go.mod h1:v8dTdLbMG2kIc/vJvl+f65V22dbkXbowE6jgT/gNBxE=
+github.com/google/go-cmp v0.5.0 h1:/QaMHBdZ26BB3SSst0Iwl10Epc+xhTquomWX0oZEB6w=
github.com/google/go-cmp v0.5.0/go.mod h1:v8dTdLbMG2kIc/vJvl+f65V22dbkXbowE6jgT/gNBxE=
github.com/google/gofuzz v1.0.0/go.mod h1:dBl0BpW6vV/+mYPU4Po3pmUjxk6FQPldtuIdl/M65Eg=
+github.com/google/uuid v1.1.1 h1:Gkbcsh/GbpXz7lPftLA3P6TYMwjCLYm83jiFQZF/3gY=
github.com/google/uuid v1.1.1/go.mod h1:TIyPZe4MgqvfeYDBFedMoGGpEw/LqOeaOT+nhxU+yHo=
github.com/gorilla/websocket v1.4.2 h1:+/TMaTYc4QFitKJxsQ7Yye35DkWvkdLcvGKqM+x0Ufc=
github.com/gorilla/websocket v1.4.2/go.mod h1:YR8l580nyteQvAITg2hZ9XVh4b55+EU/adAjf1fMHhE=
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 h1:nfCOvKYfkgYP8hkirhJocXT2+zOD8yUNjXaWfTlyFKI=
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 h1:9yzud/Ht36ygwatGx56VwCZtlI/2AD15T1X2sjSuGns=
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=
+github.com/kardianos/osext v0.0.0-20190222173326-2bc1f35cddc0/go.mod h1:1NbS8ALrpOvjt0rHPNLyCIeMtbizbir8U//inJ+zuB8=
github.com/konsorten/go-windows-terminal-sequences v1.0.1/go.mod h1:T0+1ngSBFLxvqU3pZ+m/2kptfBszLMUkC4ZK/EgS/cQ=
+github.com/kr/binarydist v0.1.0 h1:6kAoLA9FMMnNGSehX0s1PdjbEaACznAv/W219j2uvyo=
+github.com/kr/binarydist v0.1.0/go.mod h1:DY7S//GCoz1BCd0B0EVrinCKAZN3pXe+MDaIZbXQVgM=
github.com/leodido/go-urn v1.1.0/go.mod h1:+cyI34gQWZcE1eQU7NVgKkkzdXDQHr1dBMtdAPozLkw=
github.com/leodido/go-urn v1.2.0 h1:hpXL4XnriNwQ/ABnpepYM/1vCLWNDfUNts8dX3xTG6Y=
github.com/leodido/go-urn v1.2.0/go.mod h1:+8+nEpDfqqsY+g338gtMEUOtuK+4dEMhiQEgxpxOKII=
+github.com/lestrrat-go/envload v0.0.0-20180220234015-a3eb8ddeffcc h1:RKf14vYWi2ttpEmkA4aQ3j4u9dStX2t4M8UM6qqNsG8=
github.com/lestrrat-go/envload v0.0.0-20180220234015-a3eb8ddeffcc/go.mod h1:kopuH9ugFRkIXf3YoqHKyrJ9YfUFsckUU9S7B+XP+is=
github.com/lestrrat-go/file-rotatelogs v2.4.0+incompatible h1:Y6sqxHMyB1D2YSzWkLibYKgg+SwmyFU9dF2hn6MdTj4=
github.com/lestrrat-go/file-rotatelogs v2.4.0+incompatible/go.mod h1:ZQnN8lSECaebrkQytbHj4xNgtg8CR7RYXnPok8e0EHA=
@@ -64,16 +104,27 @@ github.com/lestrrat-go/strftime v1.0.3/go.mod h1:E1nN3pCbtMSu1yjSVeyuRFVm/U0xoR7
github.com/mattn/go-isatty v0.0.9/go.mod h1:YNRxwqDuOph6SZLI9vUUz6OYw3QyUt7WiY2yME+cCiQ=
github.com/mattn/go-isatty v0.0.12 h1:wuysRhFDzyxgEmMf5xjvJ2M9dZoWAXNNr5LSBS7uHXY=
github.com/mattn/go-isatty v0.0.12/go.mod h1:cbi8OIDigv2wuxKPP5vlRcQ1OAZbq2CE4Kysco4FUpU=
+github.com/modern-go/concurrent v0.0.0-20180228061459-e0a39a4cb421 h1:ZqeYNhU3OHLH3mGKHDcjJRFFRrJa6eAM5H+CtDdOsPc=
github.com/modern-go/concurrent v0.0.0-20180228061459-e0a39a4cb421/go.mod h1:6dJC0mAP4ikYIbvyc7fijjWJddQyLn8Ig3JB5CqoB9Q=
+github.com/modern-go/concurrent v0.0.0-20180306012644-bacd9c7ef1dd h1:TRLaZ9cD/w8PVh93nsPXa1VrQ6jlwL5oN8l14QlcNfg=
+github.com/modern-go/concurrent v0.0.0-20180306012644-bacd9c7ef1dd/go.mod h1:6dJC0mAP4ikYIbvyc7fijjWJddQyLn8Ig3JB5CqoB9Q=
+github.com/modern-go/reflect2 v0.0.0-20180701023420-4b7aa43c6742 h1:Esafd1046DLDQ0W1YjYsBW+p8U2u7vzgW2SQVmlNazg=
github.com/modern-go/reflect2 v0.0.0-20180701023420-4b7aa43c6742/go.mod h1:bx2lNnkwVCuqBIxFjflWJWanXIb3RllmbCylyMrvgv0=
+github.com/modern-go/reflect2 v1.0.1 h1:9f412s+6RmYXLWZSEzVVgPGK7C2PphHj5RJrvfx9AWI=
+github.com/modern-go/reflect2 v1.0.1/go.mod h1:bx2lNnkwVCuqBIxFjflWJWanXIb3RllmbCylyMrvgv0=
github.com/nfnt/resize v0.0.0-20180221191011-83c6a9932646 h1:zYyBkD/k9seD2A7fsi6Oo2LfFZAehjjQMERAvZLEDnQ=
github.com/nfnt/resize v0.0.0-20180221191011-83c6a9932646/go.mod h1:jpp1/29i3P1S/RLdc7JQKbRpFeM1dOBd8T9ki5s+AY8=
github.com/onsi/ginkgo v1.6.0/go.mod h1:lLunBs/Ym6LB5Z9jYTR76FiuTmxDTDusOGeTQH+WWjE=
+github.com/onsi/ginkgo v1.7.0 h1:WSHQ+IS43OoUrWtD1/bbclrwK8TTH5hzp+umCiuxHgs=
github.com/onsi/ginkgo v1.7.0/go.mod h1:lLunBs/Ym6LB5Z9jYTR76FiuTmxDTDusOGeTQH+WWjE=
+github.com/onsi/gomega v1.4.3 h1:RE1xgDvH7imwFD45h+u2SgIfERHlS2yNG4DObb5BSKU=
github.com/onsi/gomega v1.4.3/go.mod h1:ex+gbHU/CVuBBDIJjb2X0qEXbFg53c61hWP/1CpauHY=
+github.com/oxtoacart/bpool v0.0.0-20190530202638-03653db5a59c h1:rp5dCmg/yLR3mgFuSOe4oEnDDmGLROTvMragMUXpTQw=
+github.com/oxtoacart/bpool v0.0.0-20190530202638-03653db5a59c/go.mod h1:X07ZCGwUbLaax7L0S3Tw4hpejzu63ZrrQiUe6W0hcy0=
github.com/pkg/errors v0.8.1/go.mod h1:bwawxfHBFNV+L2hUp1rHADufV3IMtnDRdf1r5NINEl0=
github.com/pkg/errors v0.9.1 h1:FEBLx1zS214owpjy7qsBeixbURkuhQAwrK5UwLGTwt4=
github.com/pkg/errors v0.9.1/go.mod h1:bwawxfHBFNV+L2hUp1rHADufV3IMtnDRdf1r5NINEl0=
+github.com/pmezard/go-difflib v1.0.0 h1:4DBwDE0NGyQoBHbLQYPwSUPoCMWR5BEzIk/f1lZbAQM=
github.com/pmezard/go-difflib v1.0.0/go.mod h1:iKH77koFhYxTK1pcRnkKkqfTogsbg7gZNVY4sRDYZ/4=
github.com/prometheus/client_model v0.0.0-20190812154241-14fe0d1b01d4/go.mod h1:xMI15A0UPsDsEKsMN9yxemIoYk6Tm2C1GtYGdfGttqA=
github.com/rifflock/lfshook v0.0.0-20180920164130-b9218ef580f5 h1:mZHayPoR0lNmnHyvtYjDeq0zlVHn9K/ZXoy17ylucdo=
@@ -85,11 +136,14 @@ github.com/stretchr/objx v0.1.0/go.mod h1:HFkY916IF+rwdDfMAkV7OtwuqBVzrE8GR6GFx+
github.com/stretchr/objx v0.1.1/go.mod h1:HFkY916IF+rwdDfMAkV7OtwuqBVzrE8GR6GFx+wExME=
github.com/stretchr/testify v1.2.2/go.mod h1:a8OnRcib4nhh0OaRAV+Yts87kKdq0PP7pXfy6kDkUVs=
github.com/stretchr/testify v1.3.0/go.mod h1:M5WIy9Dh21IEIfnGCwXGc5bZfKNJtfHm1UVUgZn+9EI=
+github.com/stretchr/testify v1.4.0 h1:2E4SXV/wtOkTonXsotYi4li6zVWxYlZuYNCXe9XRJyk=
github.com/stretchr/testify v1.4.0/go.mod h1:j7eGeouHqKxXV5pUuKE4zz7dFj8WfuZ+81PSLYec5m4=
github.com/syndtr/goleveldb v1.0.0 h1:fBdIW9lB4Iz0n9khmH8w27SJ3QEJ7+IgjPEwGSZiFdE=
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 h1:LRbvNuNuvAiISWg6gxLEFuCe72UKy5hDqhxW/8183ws=
github.com/tidwall/gjson v1.6.1/go.mod h1:BaHyNc5bjzYkPqgLq7mdVzeiRtULKULXLgZFKsxEHI0=
github.com/tidwall/match v1.0.1 h1:PnKP62LPNxHKTwvHHZZzdOAOCtsJTjo6dZLCwpKm5xc=
@@ -98,13 +152,21 @@ github.com/tidwall/pretty v1.0.2 h1:Z7S3cePv9Jwm1KwS0513MRaoUe3S01WPbLNV40pwWZU=
github.com/tidwall/pretty v1.0.2/go.mod h1:XNkn88O1ChpSDQmQeStsy+sBenx6DDtFZJxhVysOjyk=
github.com/ugorji/go v1.1.7 h1:/68gy2h+1mWMrwZFeD1kQialdSzAb432dtpeJ42ovdo=
github.com/ugorji/go v1.1.7/go.mod h1:kZn38zHttfInRq0xu/PH0az30d+z6vm202qpg1oXVMw=
+github.com/ugorji/go v1.1.13 h1:nB3O5kBSQGjEQAcfe1aLUYuxmXdFKmYgBZhY32rQb6Q=
+github.com/ugorji/go v1.1.13/go.mod h1:jxau1n+/wyTGLQoCkjok9r5zFa/FxT6eI5HiHKQszjc=
github.com/ugorji/go/codec v1.1.7 h1:2SvQaVZ1ouYrrKKwoSk2pzd4A9evlKJb9oTL+OaLUSs=
github.com/ugorji/go/codec v1.1.7/go.mod h1:Ax+UKWsSmolVDwsd+7N3ZtXu+yMGCf907BLYF3GoBXY=
+github.com/ugorji/go/codec v1.1.13 h1:013LbFhocBoIqgHeIHKlV4JWYhqogATYWZhIcH0WHn4=
+github.com/ugorji/go/codec v1.1.13/go.mod h1:oNVt3Dq+FO91WNQ/9JnHKQP2QJxTzoN7wCBFCq1OeuU=
github.com/wdvxdr1123/go-silk v0.0.0-20201007123416-b982fd3d91d6 h1:lX18MCdNzT2zIi7K02x4C5cPkDXpL+wCb1YTAMXjLWQ=
github.com/wdvxdr1123/go-silk v0.0.0-20201007123416-b982fd3d91d6/go.mod h1:5q9LFlBr+yX/J8Jd/9wHdXwkkjFkNyQIS7kX2Lgx/Zs=
github.com/yinghau76/go-ascii-art v0.0.0-20190517192627-e7f465a30189 h1:4UJw9if55Fu3HOwbfcaQlJ27p3oeJU2JZqoeT3ITJQk=
github.com/yinghau76/go-ascii-art v0.0.0-20190517192627-e7f465a30189/go.mod h1:rIrm5geMiBhPQkdfUm8gDFi/WiHneOp1i9KjmJqc+9I=
golang.org/x/crypto v0.0.0-20190308221718-c2843e01d9a2/go.mod h1:djNgcEr1/C05ACkg1iLfiJU5Ep61QUkGW8qpdssI0+w=
+golang.org/x/crypto v0.0.0-20200622213623-75b288015ac9 h1:psW17arqaxU48Z5kZ0CQnkZWQJsqcURM6tKiBApRjXI=
+golang.org/x/crypto v0.0.0-20200622213623-75b288015ac9/go.mod h1:LzIPMQfyMNhhGPhUkYOs5KpL4U8rLKemX1yGLhDgUto=
+golang.org/x/crypto v0.0.0-20201016220609-9e8e0b390897 h1:pLI5jrR7OSLijeIDcmRxNmw2api+jEfxLoykJVice/E=
+golang.org/x/crypto v0.0.0-20201016220609-9e8e0b390897/go.mod h1:LzIPMQfyMNhhGPhUkYOs5KpL4U8rLKemX1yGLhDgUto=
golang.org/x/exp v0.0.0-20190121172915-509febef88a4/go.mod h1:CJ0aWSM057203Lf6IL+f9T1iT9GByDxfZKAQTCR3kQA=
golang.org/x/lint v0.0.0-20181026193005-c67002cb31c3/go.mod h1:UVdnD1Gm6xHRNCYTkRU2/jEulfH38KcIWyp/GAMgvoE=
golang.org/x/lint v0.0.0-20190227174305-5b3e6a55c961/go.mod h1:wehouNa3lNwaWXcvxsM5YxQ5yQlVC4a0KAMCusXpPoU=
@@ -114,8 +176,11 @@ golang.org/x/net v0.0.0-20180826012351-8a410e7b638d/go.mod h1:mL1N/T3taQHkDXs73r
golang.org/x/net v0.0.0-20180906233101-161cd47e91fd/go.mod h1:mL1N/T3taQHkDXs73rZJwtUhF3w3ftmwwsq0BUmARs4=
golang.org/x/net v0.0.0-20190213061140-3a22650c66bd/go.mod h1:mL1N/T3taQHkDXs73rZJwtUhF3w3ftmwwsq0BUmARs4=
golang.org/x/net v0.0.0-20190311183353-d8887717615a/go.mod h1:t9HGtf8HONx5eT2rtn7q6eTqICYqUVnKs3thJo3Qplg=
+golang.org/x/net v0.0.0-20190404232315-eb5bcb51f2a3/go.mod h1:t9HGtf8HONx5eT2rtn7q6eTqICYqUVnKs3thJo3Qplg=
golang.org/x/net v0.0.0-20200114155413-6afb5195e5aa h1:F+8P+gmewFQYRk6JoLQLwjBCTu3mcIURZfNkVweuRKA=
golang.org/x/net v0.0.0-20200114155413-6afb5195e5aa/go.mod h1:z5CRVTTTmAJ677TzLLGU+0bjPO0LkuOLi4/5GtJWs/s=
+golang.org/x/net v0.0.0-20201031054903-ff519b6c9102 h1:42cLlJJdEh+ySyeUUbEQ5bsTiq8voBeTuweGVkY6Puw=
+golang.org/x/net v0.0.0-20201031054903-ff519b6c9102/go.mod h1:sp8m0HH+o8qH0wwXwYZr8TS3Oi6o0r6Gce1SSxlDquU=
golang.org/x/oauth2 v0.0.0-20180821212333-d2e6202438be/go.mod h1:N/0e6XlmueqKjAGxoOufVs8QHGRruUQn6yWY3a++T0U=
golang.org/x/sync v0.0.0-20180314180146-1d60e4601c6f/go.mod h1:RxMgew5VJxzue5/jJTE5uejpjVlOe/izrB70Jof72aM=
golang.org/x/sync v0.0.0-20181108010431-42b317875d0f/go.mod h1:RxMgew5VJxzue5/jJTE5uejpjVlOe/izrB70Jof72aM=
@@ -123,13 +188,20 @@ golang.org/x/sync v0.0.0-20190423024810-112230192c58/go.mod h1:RxMgew5VJxzue5/jJ
golang.org/x/sys v0.0.0-20180830151530-49385e6e1522/go.mod h1:STP8DvDyc/dI5b8T5hshtkjS+E42TnysNCUPdjciGhY=
golang.org/x/sys v0.0.0-20180909124046-d0be0721c37e/go.mod h1:STP8DvDyc/dI5b8T5hshtkjS+E42TnysNCUPdjciGhY=
golang.org/x/sys v0.0.0-20190215142949-d0b11bdaac8a/go.mod h1:STP8DvDyc/dI5b8T5hshtkjS+E42TnysNCUPdjciGhY=
+golang.org/x/sys v0.0.0-20190412213103-97732733099d/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs=
golang.org/x/sys v0.0.0-20190422165155-953cdadca894/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs=
golang.org/x/sys v0.0.0-20190813064441-fde4db37ae7a/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs=
golang.org/x/sys v0.0.0-20191026070338-33540a1f6037/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs=
golang.org/x/sys v0.0.0-20200116001909-b77594299b42 h1:vEOn+mP2zCOVzKckCZy6YsCtDblrpj/w7B9nxGNELpg=
golang.org/x/sys v0.0.0-20200116001909-b77594299b42/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs=
+golang.org/x/sys v0.0.0-20200930185726-fdedc70b468f/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs=
+golang.org/x/sys v0.0.0-20201101102859-da207088b7d1 h1:a/mKvvZr9Jcc8oKfcmgzyp7OwF73JPWsQLvH1z2Kxck=
+golang.org/x/sys v0.0.0-20201101102859-da207088b7d1/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs=
golang.org/x/text v0.3.0/go.mod h1:NqM8EUOU14njkJ3fqMW+pc6Ldnwhi/IjpwHt7yyuwOQ=
+golang.org/x/text v0.3.2 h1:tW2bmiBqwgJj/UpqtC8EpXEZVYOwU0yG4iWbprSVAcs=
golang.org/x/text v0.3.2/go.mod h1:bEr9sfX3Q8Zfm5fL9x+3itogRgK3+ptLWKqgva+5dAk=
+golang.org/x/text v0.3.3 h1:cokOdA+Jmi5PJGXLlLllQSgYigAEfHXJAERHVMaCc2k=
+golang.org/x/text v0.3.3/go.mod h1:5Zoc/QRtKVWzQhOtBMvqHzDpF6irO9z98xDceosuGiQ=
golang.org/x/time v0.0.0-20200630173020-3af7569d3a1e h1:EHBhcS0mlXEAVwNyO2dLfjToGsyY4j24pTs2ScHnX7s=
golang.org/x/time v0.0.0-20200630173020-3af7569d3a1e/go.mod h1:tRJNPiyCQ0inRvYxbN9jk5I+vvW/OXSQhTDSoE431IQ=
golang.org/x/tools v0.0.0-20180917221912-90fa682c2a6e/go.mod h1:n7NCudcB/nEzxVGmLbDWY5pfWTLqBcC2KZ6jyYvM4mQ=
@@ -137,6 +209,7 @@ golang.org/x/tools v0.0.0-20190114222345-bf090417da8b/go.mod h1:n7NCudcB/nEzxVGm
golang.org/x/tools v0.0.0-20190226205152-f727befe758c/go.mod h1:9Yl7xja0Znq3iFh3HoIrodX9oNMXvdceNzlUR8zjMvY=
golang.org/x/tools v0.0.0-20190311212946-11955173bddd/go.mod h1:LCzVGOaR6xXOjkQ3onu1FJEFr0SW1gC7cKk1uF8kGRs=
golang.org/x/tools v0.0.0-20190524140312-2c0ae7006135/go.mod h1:RgjU9mgBXZiqYHBnxXauZ1Gv1EHHAz9KjViQ78xBX0Q=
+golang.org/x/xerrors v0.0.0-20191204190536-9bdfabe68543 h1:E7g+9GITq07hpfrRu66IVDexMakfv52eLZ2CXBWiKr4=
golang.org/x/xerrors v0.0.0-20191204190536-9bdfabe68543/go.mod h1:I/5z698sn9Ka8TeJc9MKroUUfqBBauWjQqLJ2OPfmY0=
google.golang.org/appengine v1.1.0/go.mod h1:EbEs0AVv82hx2wNQdGPgUI5lhzA/G0D9YwlJXL52JkM=
google.golang.org/appengine v1.4.0/go.mod h1:xpcJRLb0r/rnEns0DIKYYv+WjYCduHsrkT7/EB5XEv4=
@@ -156,14 +229,19 @@ google.golang.org/protobuf v1.23.0/go.mod h1:EGpADcykh3NcUnDUJcl1+ZksZNG86OlYog2
google.golang.org/protobuf v1.23.1-0.20200526195155-81db48ad09cc/go.mod h1:EGpADcykh3NcUnDUJcl1+ZksZNG86OlYog2l/sGQquU=
google.golang.org/protobuf v1.25.0 h1:Ejskq+SyPohKW+1uil0JJMtmHCgJPJ/qWTxr8qp+R4c=
google.golang.org/protobuf v1.25.0/go.mod h1:9JNX74DMeImyA3h4bdi1ymwjUzf21/xIlbajtzgsN7c=
+gopkg.in/check.v1 v0.0.0-20161208181325-20d25e280405 h1:yhCVgyC4o1eVCa2tZl7eS0r+SDo693bJlVdllGtEeKM=
gopkg.in/check.v1 v0.0.0-20161208181325-20d25e280405/go.mod h1:Co6ibVJAznAaIkqp8huTwlJQCZ016jof/cbN4VW5Yz0=
+gopkg.in/fsnotify.v1 v1.4.7 h1:xOHLXZwVvI9hhs+cLKq5+I5onOuwQLhQwiu63xxlHs4=
gopkg.in/fsnotify.v1 v1.4.7/go.mod h1:Tz8NjZHkW78fSQdbUxIjBTcgA1z1m8ZHf0WmKUhAMys=
gopkg.in/go-playground/assert.v1 v1.2.1/go.mod h1:9RXL0bg/zibRAgZUYszZSwO/z8Y/a8bDuhia5mkpMnE=
gopkg.in/go-playground/validator.v9 v9.29.1/go.mod h1:+c9/zcJMFNgbLvly1L1V+PpxWdVbfP1avr/N00E2vyQ=
+gopkg.in/tomb.v1 v1.0.0-20141024135613-dd632973f1e7 h1:uRGJdciOHaEIrze2W8Q3AKkepLTh2hOroT7a+7czfdQ=
gopkg.in/tomb.v1 v1.0.0-20141024135613-dd632973f1e7/go.mod h1:dt/ZhP58zS4L8KSrWDmTeBkI65Dw0HsyUHuEVlX15mw=
gopkg.in/yaml.v2 v2.2.1/go.mod h1:hI93XBmqTisBFMUTm0b8Fm+jr3Dg1NNxqwp+5A1VGuI=
gopkg.in/yaml.v2 v2.2.2/go.mod h1:hI93XBmqTisBFMUTm0b8Fm+jr3Dg1NNxqwp+5A1VGuI=
gopkg.in/yaml.v2 v2.2.8 h1:obN1ZagJSUGI0Ek/LBmuj4SNLPfIny3KsKFopxRdj10=
gopkg.in/yaml.v2 v2.2.8/go.mod h1:hI93XBmqTisBFMUTm0b8Fm+jr3Dg1NNxqwp+5A1VGuI=
+gopkg.in/yaml.v2 v2.3.0 h1:clyUAQHOM3G0M3f5vQj7LuJrETvjVot3Z5el9nffUtU=
+gopkg.in/yaml.v2 v2.3.0/go.mod h1:hI93XBmqTisBFMUTm0b8Fm+jr3Dg1NNxqwp+5A1VGuI=
honnef.co/go/tools v0.0.0-20190102054323-c2f93a96b099/go.mod h1:rf3lG4BRIbNafJWhAfAdb/ePZxsR/4RtNHQocxwk9r4=
honnef.co/go/tools v0.0.0-20190523083050-ea95bdfd59fc/go.mod h1:rf3lG4BRIbNafJWhAfAdb/ePZxsR/4RtNHQocxwk9r4=
diff --git a/main.go b/main.go
index 6da4252..5db539c 100644
--- a/main.go
+++ b/main.go
@@ -11,16 +11,20 @@ import (
"github.com/tidwall/gjson"
"io"
"io/ioutil"
+ "net/http"
"os"
"os/signal"
"path"
+ "runtime"
"strconv"
+ "strings"
"time"
"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"
"github.com/rifflock/lfshook"
log "github.com/sirupsen/logrus"
@@ -89,6 +93,16 @@ func init() {
func main() {
console := bufio.NewReader(os.Stdin)
+
+ arg := os.Args
+ if len(arg) >1 && arg[1] == "update"{
+ if len(arg) > 2 {
+ selfUpdate(arg[2])
+ } else {
+ selfUpdate("")
+ }
+ }
+
var conf *global.JsonConfig
if global.PathExists("config.json") || os.Getenv("UIN") == "" {
conf = global.Load("config.json")
@@ -309,3 +323,71 @@ func checkUpdate() {
}
log.Infof("检查更新完成. 当前已运行最新版本.")
}
+
+func selfUpdate(imageUrl string) {
+ console := bufio.NewReader(os.Stdin)
+ readLine := func() (str string) {
+ str, _ = console.ReadString('\n')
+ return
+ }
+ log.Infof("正在检查更新.")
+ var res string
+ if err := gout.GET("https://api.github.com/repos/Mrs4s/go-cqhttp/releases").BindBody(&res).Do(); err != nil {
+ log.Warnf("检查更新失败: %v", err)
+ return
+ }
+ detail := gjson.Parse(res)
+ if len(detail.Array()) < 1 {
+ return
+ }
+ info := detail.Array()[0]
+ version := info.Get("tag_name").Str
+ if coolq.Version != version {
+ log.Info("当前最新版本为 ", version)
+ log.Warn("是否更新(y/N): ")
+ r := strings.TrimSpace(readLine())
+
+ doUpdate := func() {
+ log.Info("正在更新,请稍等...")
+ url := fmt.Sprintf(
+ "%v/Mrs4s/go-cqhttp/releases/download/%v/go-cqhttp-%v-%v-%v",
+ func() string {
+ if imageUrl != "" {
+ return imageUrl
+ }
+ return "https://github.com"
+ }(),
+ version,
+ version,
+ runtime.GOOS,
+ runtime.GOARCH,
+ )
+ if runtime.GOOS == "windows" {
+ url = url + ".exe"
+ }
+ resp, err := http.Get(url)
+ if err != nil {
+ fmt.Println(err)
+ log.Error("更新失败!")
+ return
+ }
+ wc := global.WriteCounter{}
+ err, _ = update.New().FromStream(io.TeeReader(resp.Body, &wc))
+ fmt.Println()
+ if err != nil {
+ log.Error("更新失败!")
+ return
+ }
+ log.Info("更新完成!")
+ }
+
+ if r == "y" || r == "Y" {
+ doUpdate()
+ } else {
+ log.Warn("已取消更新!")
+ }
+ }
+ log.Info("按 Enter 继续....")
+ readLine()
+ os.Exit(0)
+}
\ No newline at end of file
From f59ce1480ece74fb680acbc7d5bec51908b7e8bc Mon Sep 17 00:00:00 2001
From: wdvxdr
Date: Mon, 9 Nov 2020 23:17:36 +0800
Subject: [PATCH 121/367] fmt & fix do_restart
---
coolq/bot.go | 2 +-
global/fs.go | 2 +-
main.go | 4 ++--
server/apiAdmin.go | 1 +
4 files changed, 5 insertions(+), 4 deletions(-)
diff --git a/coolq/bot.go b/coolq/bot.go
index 06c02ff..628c41e 100644
--- a/coolq/bot.go
+++ b/coolq/bot.go
@@ -42,7 +42,7 @@ func NewQQBot(cli *client.QQClient, conf *global.JsonConfig) *CQBot {
p := path.Join("data", "leveldb")
db, err := leveldb.OpenFile(p, nil)
if err != nil {
- log.Fatalf("打开数据库失败, 如果频繁遇到此问题请清理 data/db 文件夹或关闭数据库功能。")
+ log.Fatalf("打开数据库失败, 如果频繁遇到此问题请清理 data/leveldb 文件夹或关闭数据库功能。")
}
bot.db = db
gob.Register(message.Sender{})
diff --git a/global/fs.go b/global/fs.go
index e5fb7ca..bdf842c 100644
--- a/global/fs.go
+++ b/global/fs.go
@@ -124,4 +124,4 @@ func (wc *WriteCounter) Write(p []byte) (int, error) {
func (wc WriteCounter) PrintProgress() {
fmt.Printf("\r%s", strings.Repeat(" ", 35))
fmt.Printf("\rDownloading... %s complete", humanize.Bytes(wc.Total))
-}
\ No newline at end of file
+}
diff --git a/main.go b/main.go
index 5db539c..6025ed4 100644
--- a/main.go
+++ b/main.go
@@ -95,7 +95,7 @@ func main() {
console := bufio.NewReader(os.Stdin)
arg := os.Args
- if len(arg) >1 && arg[1] == "update"{
+ if len(arg) > 1 && arg[1] == "update" {
if len(arg) > 2 {
selfUpdate(arg[2])
} else {
@@ -390,4 +390,4 @@ func selfUpdate(imageUrl string) {
log.Info("按 Enter 继续....")
readLine()
os.Exit(0)
-}
\ No newline at end of file
+}
diff --git a/server/apiAdmin.go b/server/apiAdmin.go
index 637b088..78e01da 100644
--- a/server/apiAdmin.go
+++ b/server/apiAdmin.go
@@ -406,6 +406,7 @@ func (s *webServer) ReloadServer() {
// 热重启
func AdminDoRestart(s *webServer, c *gin.Context) {
+ s.bot.Release()
s.bot = nil
s.Cli = nil
s.DoReLogin()
From 7f9e4e6a203d39dc68c8b4fa0b2173e607c7d930 Mon Sep 17 00:00:00 2001
From: wdvxdr
Date: Tue, 10 Nov 2020 13:17:46 +0800
Subject: [PATCH 122/367] clear
---
go.mod | 2 --
1 file changed, 2 deletions(-)
diff --git a/go.mod b/go.mod
index 2c4437f..6304fe7 100644
--- a/go.mod
+++ b/go.mod
@@ -37,5 +37,3 @@ require (
golang.org/x/time v0.0.0-20200630173020-3af7569d3a1e
gopkg.in/yaml.v2 v2.3.0 // indirect
)
-
-// replace github.com/Mrs4s/MiraiGo => C:\Users\wdvxdr\Documents\GitHub\MiraiGo
From 8b5d63e02cb7bf2abf18dd7725622e16c2e72b37 Mon Sep 17 00:00:00 2001
From: Mrs4s
Date: Wed, 11 Nov 2020 22:12:16 +0800
Subject: [PATCH 123/367] update MiraiGo.
---
go.mod | 17 ++--------------
go.sum | 61 ++++------------------------------------------------------
2 files changed, 6 insertions(+), 72 deletions(-)
diff --git a/go.mod b/go.mod
index 6304fe7..c897e21 100644
--- a/go.mod
+++ b/go.mod
@@ -3,37 +3,24 @@ module github.com/Mrs4s/go-cqhttp
go 1.14
require (
- github.com/Mrs4s/MiraiGo v0.0.0-20201105120358-ca72d542ca72
+ github.com/Mrs4s/MiraiGo v0.0.0-20201110151417-1b08a69f87c8
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/go-playground/validator/v10 v10.4.1 // indirect
- github.com/golang/snappy v0.0.2 // indirect
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
github.com/lestrrat-go/strftime v1.0.3 // indirect
- github.com/modern-go/concurrent v0.0.0-20180306012644-bacd9c7ef1dd // indirect
- github.com/modern-go/reflect2 v1.0.1 // indirect
github.com/pkg/errors v0.9.1 // indirect
github.com/rifflock/lfshook v0.0.0-20180920164130-b9218ef580f5
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.1
- github.com/ugorji/go v1.1.13 // 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
- golang.org/x/crypto v0.0.0-20201016220609-9e8e0b390897 // indirect
- golang.org/x/net v0.0.0-20201031054903-ff519b6c9102 // indirect
- golang.org/x/sys v0.0.0-20201101102859-da207088b7d1 // indirect
golang.org/x/time v0.0.0-20200630173020-3af7569d3a1e
- gopkg.in/yaml.v2 v2.3.0 // indirect
)
diff --git a/go.sum b/go.sum
index 21782a2..cfdd9e9 100644
--- a/go.sum
+++ b/go.sum
@@ -1,19 +1,15 @@
cloud.google.com/go v0.26.0/go.mod h1:aQUYkXzVsufM+DwF1aE+0xfcU+56JwCaLick0ClmMTw=
github.com/BurntSushi/toml v0.3.1/go.mod h1:xHWCNGjB5oqiDr8zfno3MHue2Ht5sIBksp03qcyfWMU=
-github.com/Mrs4s/MiraiGo v0.0.0-20201105120358-ca72d542ca72 h1:aiKVmrgZHXARnO6AYODwFf1JvTZr6OCl2pohepkkYKc=
-github.com/Mrs4s/MiraiGo v0.0.0-20201105120358-ca72d542ca72/go.mod h1:pAsWtMIwqkBXr5DkUpTIHoWQJNduVnX9WSBPmPvkuCs=
+github.com/Mrs4s/MiraiGo v0.0.0-20201110151417-1b08a69f87c8 h1:sPY1qtKS5esZllO/A/XnIVP1vFTuppLzX3vxa2/M62o=
+github.com/Mrs4s/MiraiGo v0.0.0-20201110151417-1b08a69f87c8/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=
-github.com/davecgh/go-spew v1.1.1 h1:vj9j/u1bqnvCEfJOwUhtlOARqs3+rkHYY13jYWTU97c=
github.com/davecgh/go-spew v1.1.1/go.mod h1:J7Y8YcW2NihsgmVo/mv3lAwl/skON4iLHjSsI+c5H38=
github.com/dustin/go-humanize v1.0.0 h1:VSnTsYCnlFHaM2/igO1h6X3HA71jcobQuxemgkq4zYo=
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 h1:IXs+QLmnXW2CcXuY+8Mzv/fWEsPGWxqefPtCP5CnV9I=
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=
@@ -34,7 +30,6 @@ github.com/gin-contrib/sse v0.1.0/go.mod h1:RHrZQHXnP2xjPF+u1gW/2HnVO7nvIa9PG3Gm
github.com/gin-gonic/gin v1.5.0/go.mod h1:Nd6IXA8m5kNZdNEHMBd93KT+mdY3+bewLgRvmCsR2Do=
github.com/gin-gonic/gin v1.6.3 h1:ahKqKTFpO5KTPHxWZjEdPScmYaGtLo8Y4DMHoEsnp14=
github.com/gin-gonic/gin v1.6.3/go.mod h1:75u5sXoLsGZoRN5Sgbi1eraJ4GU3++wFwWzhwvtwp4M=
-github.com/go-playground/assert/v2 v2.0.1 h1:MsBgLAaY856+nPRTKrp3/OZK38U/wa0CcBYNjji3q3A=
github.com/go-playground/assert/v2 v2.0.1/go.mod h1:VDjEfimB/XKnb+ZQfWdccd7VUvScMdVu0Titje2rxJ4=
github.com/go-playground/locales v0.12.1/go.mod h1:IUMDtCfWo/w/mtMfIE/IG2K+Ey3ygWanZIBtBW0W2TM=
github.com/go-playground/locales v0.13.0 h1:HyWk6mgj5qFqCT5fjGBuRArbVDfE4hi8+e8ceBS/t7Q=
@@ -44,8 +39,6 @@ github.com/go-playground/universal-translator v0.17.0 h1:icxd5fm+REJzpZx7ZfpaD87
github.com/go-playground/universal-translator v0.17.0/go.mod h1:UkSxE5sNxxRwHyU+Scu5vgOQjsIJAF8j9muTVoKLVtA=
github.com/go-playground/validator/v10 v10.2.0 h1:KgJ0snyC2R9VXYN2rneOtQcw5aHQB1Vv0sFl1UcHBOY=
github.com/go-playground/validator/v10 v10.2.0/go.mod h1:uOYAAleCW8F/7oMFd6aG0GOhaH6EGOAJShg8Id5JGkI=
-github.com/go-playground/validator/v10 v10.4.1 h1:pH2c5ADXtd66mxoE0Zm9SUhxE20r7aM3F26W0hOn+GE=
-github.com/go-playground/validator/v10 v10.4.1/go.mod h1:nlOn6nFhuKACm19sB/8EGNn9GlaMV7XkbRSipzJ0Ii4=
github.com/go-stack/stack v1.8.0 h1:5SgMzNM5HxrEjV0ww2lTmX6E2Izsfxas4+YHWRs3Lsk=
github.com/go-stack/stack v1.8.0/go.mod h1:v0f6uXyyMGvRgIKkXu+yp6POWl0qKG85gN/melR3HDY=
github.com/golang/glog v0.0.0-20160126235308-23def4e6c14b/go.mod h1:SBH7ygxi8pfUlaOkMMuAQtPIUF8ecWP5IEl/CR7VP2Q=
@@ -63,29 +56,19 @@ github.com/golang/protobuf v1.4.3 h1:JjCZWpVbqXDqFVmTfYWEVTMIYrL/NPdPSCHPJ0T/raM
github.com/golang/protobuf v1.4.3/go.mod h1:oDoupMAO8OvCJWAcko0GGGIgR6R6ocIYbsSw735rRwI=
github.com/golang/snappy v0.0.0-20180518054509-2e65f85255db h1:woRePGFeVFfLKN/pOkfl+p/TAqKOfFu+7KPlMVpok/w=
github.com/golang/snappy v0.0.0-20180518054509-2e65f85255db/go.mod h1:/XxbfmMg8lxefKM7IXC3fBNl/7bRcc72aCRzEWrmP2Q=
-github.com/golang/snappy v0.0.2 h1:aeE13tS0IiQgFjYdoL8qN3K1N2bXXtI6Vi51/y7BpMw=
-github.com/golang/snappy v0.0.2/go.mod h1:/XxbfmMg8lxefKM7IXC3fBNl/7bRcc72aCRzEWrmP2Q=
github.com/google/go-cmp v0.2.0/go.mod h1:oXzfMopK8JAjlY9xF4vHSVASa0yLyX7SntLO5aqRK0M=
github.com/google/go-cmp v0.3.0/go.mod h1:8QqcDgzrUqlUb/G2PQTWiueGozuR1884gddMywk6iLU=
github.com/google/go-cmp v0.3.1/go.mod h1:8QqcDgzrUqlUb/G2PQTWiueGozuR1884gddMywk6iLU=
github.com/google/go-cmp v0.4.0/go.mod h1:v8dTdLbMG2kIc/vJvl+f65V22dbkXbowE6jgT/gNBxE=
-github.com/google/go-cmp v0.5.0 h1:/QaMHBdZ26BB3SSst0Iwl10Epc+xhTquomWX0oZEB6w=
github.com/google/go-cmp v0.5.0/go.mod h1:v8dTdLbMG2kIc/vJvl+f65V22dbkXbowE6jgT/gNBxE=
github.com/google/gofuzz v1.0.0/go.mod h1:dBl0BpW6vV/+mYPU4Po3pmUjxk6FQPldtuIdl/M65Eg=
-github.com/google/uuid v1.1.1 h1:Gkbcsh/GbpXz7lPftLA3P6TYMwjCLYm83jiFQZF/3gY=
github.com/google/uuid v1.1.1/go.mod h1:TIyPZe4MgqvfeYDBFedMoGGpEw/LqOeaOT+nhxU+yHo=
github.com/gorilla/websocket v1.4.2 h1:+/TMaTYc4QFitKJxsQ7Yye35DkWvkdLcvGKqM+x0Ufc=
github.com/gorilla/websocket v1.4.2/go.mod h1:YR8l580nyteQvAITg2hZ9XVh4b55+EU/adAjf1fMHhE=
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 h1:nfCOvKYfkgYP8hkirhJocXT2+zOD8yUNjXaWfTlyFKI=
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 h1:9yzud/Ht36ygwatGx56VwCZtlI/2AD15T1X2sjSuGns=
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=
github.com/kardianos/osext v0.0.0-20190222173326-2bc1f35cddc0/go.mod h1:1NbS8ALrpOvjt0rHPNLyCIeMtbizbir8U//inJ+zuB8=
@@ -95,7 +78,6 @@ github.com/kr/binarydist v0.1.0/go.mod h1:DY7S//GCoz1BCd0B0EVrinCKAZN3pXe+MDaIZb
github.com/leodido/go-urn v1.1.0/go.mod h1:+cyI34gQWZcE1eQU7NVgKkkzdXDQHr1dBMtdAPozLkw=
github.com/leodido/go-urn v1.2.0 h1:hpXL4XnriNwQ/ABnpepYM/1vCLWNDfUNts8dX3xTG6Y=
github.com/leodido/go-urn v1.2.0/go.mod h1:+8+nEpDfqqsY+g338gtMEUOtuK+4dEMhiQEgxpxOKII=
-github.com/lestrrat-go/envload v0.0.0-20180220234015-a3eb8ddeffcc h1:RKf14vYWi2ttpEmkA4aQ3j4u9dStX2t4M8UM6qqNsG8=
github.com/lestrrat-go/envload v0.0.0-20180220234015-a3eb8ddeffcc/go.mod h1:kopuH9ugFRkIXf3YoqHKyrJ9YfUFsckUU9S7B+XP+is=
github.com/lestrrat-go/file-rotatelogs v2.4.0+incompatible h1:Y6sqxHMyB1D2YSzWkLibYKgg+SwmyFU9dF2hn6MdTj4=
github.com/lestrrat-go/file-rotatelogs v2.4.0+incompatible/go.mod h1:ZQnN8lSECaebrkQytbHj4xNgtg8CR7RYXnPok8e0EHA=
@@ -104,27 +86,18 @@ github.com/lestrrat-go/strftime v1.0.3/go.mod h1:E1nN3pCbtMSu1yjSVeyuRFVm/U0xoR7
github.com/mattn/go-isatty v0.0.9/go.mod h1:YNRxwqDuOph6SZLI9vUUz6OYw3QyUt7WiY2yME+cCiQ=
github.com/mattn/go-isatty v0.0.12 h1:wuysRhFDzyxgEmMf5xjvJ2M9dZoWAXNNr5LSBS7uHXY=
github.com/mattn/go-isatty v0.0.12/go.mod h1:cbi8OIDigv2wuxKPP5vlRcQ1OAZbq2CE4Kysco4FUpU=
-github.com/modern-go/concurrent v0.0.0-20180228061459-e0a39a4cb421 h1:ZqeYNhU3OHLH3mGKHDcjJRFFRrJa6eAM5H+CtDdOsPc=
github.com/modern-go/concurrent v0.0.0-20180228061459-e0a39a4cb421/go.mod h1:6dJC0mAP4ikYIbvyc7fijjWJddQyLn8Ig3JB5CqoB9Q=
-github.com/modern-go/concurrent v0.0.0-20180306012644-bacd9c7ef1dd h1:TRLaZ9cD/w8PVh93nsPXa1VrQ6jlwL5oN8l14QlcNfg=
-github.com/modern-go/concurrent v0.0.0-20180306012644-bacd9c7ef1dd/go.mod h1:6dJC0mAP4ikYIbvyc7fijjWJddQyLn8Ig3JB5CqoB9Q=
-github.com/modern-go/reflect2 v0.0.0-20180701023420-4b7aa43c6742 h1:Esafd1046DLDQ0W1YjYsBW+p8U2u7vzgW2SQVmlNazg=
github.com/modern-go/reflect2 v0.0.0-20180701023420-4b7aa43c6742/go.mod h1:bx2lNnkwVCuqBIxFjflWJWanXIb3RllmbCylyMrvgv0=
-github.com/modern-go/reflect2 v1.0.1 h1:9f412s+6RmYXLWZSEzVVgPGK7C2PphHj5RJrvfx9AWI=
-github.com/modern-go/reflect2 v1.0.1/go.mod h1:bx2lNnkwVCuqBIxFjflWJWanXIb3RllmbCylyMrvgv0=
github.com/nfnt/resize v0.0.0-20180221191011-83c6a9932646 h1:zYyBkD/k9seD2A7fsi6Oo2LfFZAehjjQMERAvZLEDnQ=
github.com/nfnt/resize v0.0.0-20180221191011-83c6a9932646/go.mod h1:jpp1/29i3P1S/RLdc7JQKbRpFeM1dOBd8T9ki5s+AY8=
github.com/onsi/ginkgo v1.6.0/go.mod h1:lLunBs/Ym6LB5Z9jYTR76FiuTmxDTDusOGeTQH+WWjE=
-github.com/onsi/ginkgo v1.7.0 h1:WSHQ+IS43OoUrWtD1/bbclrwK8TTH5hzp+umCiuxHgs=
github.com/onsi/ginkgo v1.7.0/go.mod h1:lLunBs/Ym6LB5Z9jYTR76FiuTmxDTDusOGeTQH+WWjE=
-github.com/onsi/gomega v1.4.3 h1:RE1xgDvH7imwFD45h+u2SgIfERHlS2yNG4DObb5BSKU=
github.com/onsi/gomega v1.4.3/go.mod h1:ex+gbHU/CVuBBDIJjb2X0qEXbFg53c61hWP/1CpauHY=
github.com/oxtoacart/bpool v0.0.0-20190530202638-03653db5a59c h1:rp5dCmg/yLR3mgFuSOe4oEnDDmGLROTvMragMUXpTQw=
github.com/oxtoacart/bpool v0.0.0-20190530202638-03653db5a59c/go.mod h1:X07ZCGwUbLaax7L0S3Tw4hpejzu63ZrrQiUe6W0hcy0=
github.com/pkg/errors v0.8.1/go.mod h1:bwawxfHBFNV+L2hUp1rHADufV3IMtnDRdf1r5NINEl0=
github.com/pkg/errors v0.9.1 h1:FEBLx1zS214owpjy7qsBeixbURkuhQAwrK5UwLGTwt4=
github.com/pkg/errors v0.9.1/go.mod h1:bwawxfHBFNV+L2hUp1rHADufV3IMtnDRdf1r5NINEl0=
-github.com/pmezard/go-difflib v1.0.0 h1:4DBwDE0NGyQoBHbLQYPwSUPoCMWR5BEzIk/f1lZbAQM=
github.com/pmezard/go-difflib v1.0.0/go.mod h1:iKH77koFhYxTK1pcRnkKkqfTogsbg7gZNVY4sRDYZ/4=
github.com/prometheus/client_model v0.0.0-20190812154241-14fe0d1b01d4/go.mod h1:xMI15A0UPsDsEKsMN9yxemIoYk6Tm2C1GtYGdfGttqA=
github.com/rifflock/lfshook v0.0.0-20180920164130-b9218ef580f5 h1:mZHayPoR0lNmnHyvtYjDeq0zlVHn9K/ZXoy17ylucdo=
@@ -136,37 +109,27 @@ github.com/stretchr/objx v0.1.0/go.mod h1:HFkY916IF+rwdDfMAkV7OtwuqBVzrE8GR6GFx+
github.com/stretchr/objx v0.1.1/go.mod h1:HFkY916IF+rwdDfMAkV7OtwuqBVzrE8GR6GFx+wExME=
github.com/stretchr/testify v1.2.2/go.mod h1:a8OnRcib4nhh0OaRAV+Yts87kKdq0PP7pXfy6kDkUVs=
github.com/stretchr/testify v1.3.0/go.mod h1:M5WIy9Dh21IEIfnGCwXGc5bZfKNJtfHm1UVUgZn+9EI=
-github.com/stretchr/testify v1.4.0 h1:2E4SXV/wtOkTonXsotYi4li6zVWxYlZuYNCXe9XRJyk=
github.com/stretchr/testify v1.4.0/go.mod h1:j7eGeouHqKxXV5pUuKE4zz7dFj8WfuZ+81PSLYec5m4=
github.com/syndtr/goleveldb v1.0.0 h1:fBdIW9lB4Iz0n9khmH8w27SJ3QEJ7+IgjPEwGSZiFdE=
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 h1:LRbvNuNuvAiISWg6gxLEFuCe72UKy5hDqhxW/8183ws=
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=
github.com/tidwall/match v1.0.1 h1:PnKP62LPNxHKTwvHHZZzdOAOCtsJTjo6dZLCwpKm5xc=
github.com/tidwall/match v1.0.1/go.mod h1:LujAq0jyVjBy028G1WhWfIzbpQfMO8bBZ6Tyb0+pL9E=
github.com/tidwall/pretty v1.0.2 h1:Z7S3cePv9Jwm1KwS0513MRaoUe3S01WPbLNV40pwWZU=
github.com/tidwall/pretty v1.0.2/go.mod h1:XNkn88O1ChpSDQmQeStsy+sBenx6DDtFZJxhVysOjyk=
github.com/ugorji/go v1.1.7 h1:/68gy2h+1mWMrwZFeD1kQialdSzAb432dtpeJ42ovdo=
github.com/ugorji/go v1.1.7/go.mod h1:kZn38zHttfInRq0xu/PH0az30d+z6vm202qpg1oXVMw=
-github.com/ugorji/go v1.1.13 h1:nB3O5kBSQGjEQAcfe1aLUYuxmXdFKmYgBZhY32rQb6Q=
-github.com/ugorji/go v1.1.13/go.mod h1:jxau1n+/wyTGLQoCkjok9r5zFa/FxT6eI5HiHKQszjc=
github.com/ugorji/go/codec v1.1.7 h1:2SvQaVZ1ouYrrKKwoSk2pzd4A9evlKJb9oTL+OaLUSs=
github.com/ugorji/go/codec v1.1.7/go.mod h1:Ax+UKWsSmolVDwsd+7N3ZtXu+yMGCf907BLYF3GoBXY=
-github.com/ugorji/go/codec v1.1.13 h1:013LbFhocBoIqgHeIHKlV4JWYhqogATYWZhIcH0WHn4=
-github.com/ugorji/go/codec v1.1.13/go.mod h1:oNVt3Dq+FO91WNQ/9JnHKQP2QJxTzoN7wCBFCq1OeuU=
github.com/wdvxdr1123/go-silk v0.0.0-20201007123416-b982fd3d91d6 h1:lX18MCdNzT2zIi7K02x4C5cPkDXpL+wCb1YTAMXjLWQ=
github.com/wdvxdr1123/go-silk v0.0.0-20201007123416-b982fd3d91d6/go.mod h1:5q9LFlBr+yX/J8Jd/9wHdXwkkjFkNyQIS7kX2Lgx/Zs=
github.com/yinghau76/go-ascii-art v0.0.0-20190517192627-e7f465a30189 h1:4UJw9if55Fu3HOwbfcaQlJ27p3oeJU2JZqoeT3ITJQk=
github.com/yinghau76/go-ascii-art v0.0.0-20190517192627-e7f465a30189/go.mod h1:rIrm5geMiBhPQkdfUm8gDFi/WiHneOp1i9KjmJqc+9I=
golang.org/x/crypto v0.0.0-20190308221718-c2843e01d9a2/go.mod h1:djNgcEr1/C05ACkg1iLfiJU5Ep61QUkGW8qpdssI0+w=
-golang.org/x/crypto v0.0.0-20200622213623-75b288015ac9 h1:psW17arqaxU48Z5kZ0CQnkZWQJsqcURM6tKiBApRjXI=
-golang.org/x/crypto v0.0.0-20200622213623-75b288015ac9/go.mod h1:LzIPMQfyMNhhGPhUkYOs5KpL4U8rLKemX1yGLhDgUto=
-golang.org/x/crypto v0.0.0-20201016220609-9e8e0b390897 h1:pLI5jrR7OSLijeIDcmRxNmw2api+jEfxLoykJVice/E=
-golang.org/x/crypto v0.0.0-20201016220609-9e8e0b390897/go.mod h1:LzIPMQfyMNhhGPhUkYOs5KpL4U8rLKemX1yGLhDgUto=
golang.org/x/exp v0.0.0-20190121172915-509febef88a4/go.mod h1:CJ0aWSM057203Lf6IL+f9T1iT9GByDxfZKAQTCR3kQA=
golang.org/x/lint v0.0.0-20181026193005-c67002cb31c3/go.mod h1:UVdnD1Gm6xHRNCYTkRU2/jEulfH38KcIWyp/GAMgvoE=
golang.org/x/lint v0.0.0-20190227174305-5b3e6a55c961/go.mod h1:wehouNa3lNwaWXcvxsM5YxQ5yQlVC4a0KAMCusXpPoU=
@@ -176,11 +139,8 @@ golang.org/x/net v0.0.0-20180826012351-8a410e7b638d/go.mod h1:mL1N/T3taQHkDXs73r
golang.org/x/net v0.0.0-20180906233101-161cd47e91fd/go.mod h1:mL1N/T3taQHkDXs73rZJwtUhF3w3ftmwwsq0BUmARs4=
golang.org/x/net v0.0.0-20190213061140-3a22650c66bd/go.mod h1:mL1N/T3taQHkDXs73rZJwtUhF3w3ftmwwsq0BUmARs4=
golang.org/x/net v0.0.0-20190311183353-d8887717615a/go.mod h1:t9HGtf8HONx5eT2rtn7q6eTqICYqUVnKs3thJo3Qplg=
-golang.org/x/net v0.0.0-20190404232315-eb5bcb51f2a3/go.mod h1:t9HGtf8HONx5eT2rtn7q6eTqICYqUVnKs3thJo3Qplg=
golang.org/x/net v0.0.0-20200114155413-6afb5195e5aa h1:F+8P+gmewFQYRk6JoLQLwjBCTu3mcIURZfNkVweuRKA=
golang.org/x/net v0.0.0-20200114155413-6afb5195e5aa/go.mod h1:z5CRVTTTmAJ677TzLLGU+0bjPO0LkuOLi4/5GtJWs/s=
-golang.org/x/net v0.0.0-20201031054903-ff519b6c9102 h1:42cLlJJdEh+ySyeUUbEQ5bsTiq8voBeTuweGVkY6Puw=
-golang.org/x/net v0.0.0-20201031054903-ff519b6c9102/go.mod h1:sp8m0HH+o8qH0wwXwYZr8TS3Oi6o0r6Gce1SSxlDquU=
golang.org/x/oauth2 v0.0.0-20180821212333-d2e6202438be/go.mod h1:N/0e6XlmueqKjAGxoOufVs8QHGRruUQn6yWY3a++T0U=
golang.org/x/sync v0.0.0-20180314180146-1d60e4601c6f/go.mod h1:RxMgew5VJxzue5/jJTE5uejpjVlOe/izrB70Jof72aM=
golang.org/x/sync v0.0.0-20181108010431-42b317875d0f/go.mod h1:RxMgew5VJxzue5/jJTE5uejpjVlOe/izrB70Jof72aM=
@@ -188,20 +148,13 @@ golang.org/x/sync v0.0.0-20190423024810-112230192c58/go.mod h1:RxMgew5VJxzue5/jJ
golang.org/x/sys v0.0.0-20180830151530-49385e6e1522/go.mod h1:STP8DvDyc/dI5b8T5hshtkjS+E42TnysNCUPdjciGhY=
golang.org/x/sys v0.0.0-20180909124046-d0be0721c37e/go.mod h1:STP8DvDyc/dI5b8T5hshtkjS+E42TnysNCUPdjciGhY=
golang.org/x/sys v0.0.0-20190215142949-d0b11bdaac8a/go.mod h1:STP8DvDyc/dI5b8T5hshtkjS+E42TnysNCUPdjciGhY=
-golang.org/x/sys v0.0.0-20190412213103-97732733099d/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs=
golang.org/x/sys v0.0.0-20190422165155-953cdadca894/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs=
golang.org/x/sys v0.0.0-20190813064441-fde4db37ae7a/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs=
golang.org/x/sys v0.0.0-20191026070338-33540a1f6037/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs=
golang.org/x/sys v0.0.0-20200116001909-b77594299b42 h1:vEOn+mP2zCOVzKckCZy6YsCtDblrpj/w7B9nxGNELpg=
golang.org/x/sys v0.0.0-20200116001909-b77594299b42/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs=
-golang.org/x/sys v0.0.0-20200930185726-fdedc70b468f/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs=
-golang.org/x/sys v0.0.0-20201101102859-da207088b7d1 h1:a/mKvvZr9Jcc8oKfcmgzyp7OwF73JPWsQLvH1z2Kxck=
-golang.org/x/sys v0.0.0-20201101102859-da207088b7d1/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs=
golang.org/x/text v0.3.0/go.mod h1:NqM8EUOU14njkJ3fqMW+pc6Ldnwhi/IjpwHt7yyuwOQ=
-golang.org/x/text v0.3.2 h1:tW2bmiBqwgJj/UpqtC8EpXEZVYOwU0yG4iWbprSVAcs=
golang.org/x/text v0.3.2/go.mod h1:bEr9sfX3Q8Zfm5fL9x+3itogRgK3+ptLWKqgva+5dAk=
-golang.org/x/text v0.3.3 h1:cokOdA+Jmi5PJGXLlLllQSgYigAEfHXJAERHVMaCc2k=
-golang.org/x/text v0.3.3/go.mod h1:5Zoc/QRtKVWzQhOtBMvqHzDpF6irO9z98xDceosuGiQ=
golang.org/x/time v0.0.0-20200630173020-3af7569d3a1e h1:EHBhcS0mlXEAVwNyO2dLfjToGsyY4j24pTs2ScHnX7s=
golang.org/x/time v0.0.0-20200630173020-3af7569d3a1e/go.mod h1:tRJNPiyCQ0inRvYxbN9jk5I+vvW/OXSQhTDSoE431IQ=
golang.org/x/tools v0.0.0-20180917221912-90fa682c2a6e/go.mod h1:n7NCudcB/nEzxVGmLbDWY5pfWTLqBcC2KZ6jyYvM4mQ=
@@ -209,7 +162,6 @@ golang.org/x/tools v0.0.0-20190114222345-bf090417da8b/go.mod h1:n7NCudcB/nEzxVGm
golang.org/x/tools v0.0.0-20190226205152-f727befe758c/go.mod h1:9Yl7xja0Znq3iFh3HoIrodX9oNMXvdceNzlUR8zjMvY=
golang.org/x/tools v0.0.0-20190311212946-11955173bddd/go.mod h1:LCzVGOaR6xXOjkQ3onu1FJEFr0SW1gC7cKk1uF8kGRs=
golang.org/x/tools v0.0.0-20190524140312-2c0ae7006135/go.mod h1:RgjU9mgBXZiqYHBnxXauZ1Gv1EHHAz9KjViQ78xBX0Q=
-golang.org/x/xerrors v0.0.0-20191204190536-9bdfabe68543 h1:E7g+9GITq07hpfrRu66IVDexMakfv52eLZ2CXBWiKr4=
golang.org/x/xerrors v0.0.0-20191204190536-9bdfabe68543/go.mod h1:I/5z698sn9Ka8TeJc9MKroUUfqBBauWjQqLJ2OPfmY0=
google.golang.org/appengine v1.1.0/go.mod h1:EbEs0AVv82hx2wNQdGPgUI5lhzA/G0D9YwlJXL52JkM=
google.golang.org/appengine v1.4.0/go.mod h1:xpcJRLb0r/rnEns0DIKYYv+WjYCduHsrkT7/EB5XEv4=
@@ -229,19 +181,14 @@ google.golang.org/protobuf v1.23.0/go.mod h1:EGpADcykh3NcUnDUJcl1+ZksZNG86OlYog2
google.golang.org/protobuf v1.23.1-0.20200526195155-81db48ad09cc/go.mod h1:EGpADcykh3NcUnDUJcl1+ZksZNG86OlYog2l/sGQquU=
google.golang.org/protobuf v1.25.0 h1:Ejskq+SyPohKW+1uil0JJMtmHCgJPJ/qWTxr8qp+R4c=
google.golang.org/protobuf v1.25.0/go.mod h1:9JNX74DMeImyA3h4bdi1ymwjUzf21/xIlbajtzgsN7c=
-gopkg.in/check.v1 v0.0.0-20161208181325-20d25e280405 h1:yhCVgyC4o1eVCa2tZl7eS0r+SDo693bJlVdllGtEeKM=
gopkg.in/check.v1 v0.0.0-20161208181325-20d25e280405/go.mod h1:Co6ibVJAznAaIkqp8huTwlJQCZ016jof/cbN4VW5Yz0=
-gopkg.in/fsnotify.v1 v1.4.7 h1:xOHLXZwVvI9hhs+cLKq5+I5onOuwQLhQwiu63xxlHs4=
gopkg.in/fsnotify.v1 v1.4.7/go.mod h1:Tz8NjZHkW78fSQdbUxIjBTcgA1z1m8ZHf0WmKUhAMys=
gopkg.in/go-playground/assert.v1 v1.2.1/go.mod h1:9RXL0bg/zibRAgZUYszZSwO/z8Y/a8bDuhia5mkpMnE=
gopkg.in/go-playground/validator.v9 v9.29.1/go.mod h1:+c9/zcJMFNgbLvly1L1V+PpxWdVbfP1avr/N00E2vyQ=
-gopkg.in/tomb.v1 v1.0.0-20141024135613-dd632973f1e7 h1:uRGJdciOHaEIrze2W8Q3AKkepLTh2hOroT7a+7czfdQ=
gopkg.in/tomb.v1 v1.0.0-20141024135613-dd632973f1e7/go.mod h1:dt/ZhP58zS4L8KSrWDmTeBkI65Dw0HsyUHuEVlX15mw=
gopkg.in/yaml.v2 v2.2.1/go.mod h1:hI93XBmqTisBFMUTm0b8Fm+jr3Dg1NNxqwp+5A1VGuI=
gopkg.in/yaml.v2 v2.2.2/go.mod h1:hI93XBmqTisBFMUTm0b8Fm+jr3Dg1NNxqwp+5A1VGuI=
gopkg.in/yaml.v2 v2.2.8 h1:obN1ZagJSUGI0Ek/LBmuj4SNLPfIny3KsKFopxRdj10=
gopkg.in/yaml.v2 v2.2.8/go.mod h1:hI93XBmqTisBFMUTm0b8Fm+jr3Dg1NNxqwp+5A1VGuI=
-gopkg.in/yaml.v2 v2.3.0 h1:clyUAQHOM3G0M3f5vQj7LuJrETvjVot3Z5el9nffUtU=
-gopkg.in/yaml.v2 v2.3.0/go.mod h1:hI93XBmqTisBFMUTm0b8Fm+jr3Dg1NNxqwp+5A1VGuI=
honnef.co/go/tools v0.0.0-20190102054323-c2f93a96b099/go.mod h1:rf3lG4BRIbNafJWhAfAdb/ePZxsR/4RtNHQocxwk9r4=
honnef.co/go/tools v0.0.0-20190523083050-ea95bdfd59fc/go.mod h1:rf3lG4BRIbNafJWhAfAdb/ePZxsR/4RtNHQocxwk9r4=
From 4c2b56457e733bc9840723f82ad22121adda6c5c Mon Sep 17 00:00:00 2001
From: Mrs4s
Date: Wed, 11 Nov 2020 22:15:59 +0800
Subject: [PATCH 124/367] update MiraiGo.
---
go.mod | 2 +-
go.sum | 4 ++--
2 files changed, 3 insertions(+), 3 deletions(-)
diff --git a/go.mod b/go.mod
index c897e21..a10b943 100644
--- a/go.mod
+++ b/go.mod
@@ -3,7 +3,7 @@ module github.com/Mrs4s/go-cqhttp
go 1.14
require (
- github.com/Mrs4s/MiraiGo v0.0.0-20201110151417-1b08a69f87c8
+ github.com/Mrs4s/MiraiGo v0.0.0-20201111141037-8b59d083ebeb
github.com/dustin/go-humanize v1.0.0
github.com/getlantern/go-update v0.0.0-20190510022740-79c495ab728c
github.com/getlantern/golog v0.0.0-20201105130739-9586b8bde3a9 // indirect
diff --git a/go.sum b/go.sum
index cfdd9e9..9509f71 100644
--- a/go.sum
+++ b/go.sum
@@ -1,7 +1,7 @@
cloud.google.com/go v0.26.0/go.mod h1:aQUYkXzVsufM+DwF1aE+0xfcU+56JwCaLick0ClmMTw=
github.com/BurntSushi/toml v0.3.1/go.mod h1:xHWCNGjB5oqiDr8zfno3MHue2Ht5sIBksp03qcyfWMU=
-github.com/Mrs4s/MiraiGo v0.0.0-20201110151417-1b08a69f87c8 h1:sPY1qtKS5esZllO/A/XnIVP1vFTuppLzX3vxa2/M62o=
-github.com/Mrs4s/MiraiGo v0.0.0-20201110151417-1b08a69f87c8/go.mod h1:pAsWtMIwqkBXr5DkUpTIHoWQJNduVnX9WSBPmPvkuCs=
+github.com/Mrs4s/MiraiGo v0.0.0-20201111141037-8b59d083ebeb h1:fWll12apr+eo6aLuVJATLZDGY9A+cLKXzQhKBliUSLc=
+github.com/Mrs4s/MiraiGo v0.0.0-20201111141037-8b59d083ebeb/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=
From d2bdf47bf80a31b79b8f702b7e9d29d23883446a Mon Sep 17 00:00:00 2001
From: Mrs4s <1844812067@qq.com>
Date: Thu, 12 Nov 2020 20:55:15 +0800
Subject: [PATCH 125/367] update MiraiGo.
---
go.mod | 2 +-
go.sum | 4 ++--
server/apiAdmin.go | 1 +
3 files changed, 4 insertions(+), 3 deletions(-)
diff --git a/go.mod b/go.mod
index a10b943..4bb1535 100644
--- a/go.mod
+++ b/go.mod
@@ -3,7 +3,7 @@ module github.com/Mrs4s/go-cqhttp
go 1.14
require (
- github.com/Mrs4s/MiraiGo v0.0.0-20201111141037-8b59d083ebeb
+ github.com/Mrs4s/MiraiGo v0.0.0-20201112125100-c41a3dbb0f4a
github.com/dustin/go-humanize v1.0.0
github.com/getlantern/go-update v0.0.0-20190510022740-79c495ab728c
github.com/getlantern/golog v0.0.0-20201105130739-9586b8bde3a9 // indirect
diff --git a/go.sum b/go.sum
index 9509f71..412422c 100644
--- a/go.sum
+++ b/go.sum
@@ -1,7 +1,7 @@
cloud.google.com/go v0.26.0/go.mod h1:aQUYkXzVsufM+DwF1aE+0xfcU+56JwCaLick0ClmMTw=
github.com/BurntSushi/toml v0.3.1/go.mod h1:xHWCNGjB5oqiDr8zfno3MHue2Ht5sIBksp03qcyfWMU=
-github.com/Mrs4s/MiraiGo v0.0.0-20201111141037-8b59d083ebeb h1:fWll12apr+eo6aLuVJATLZDGY9A+cLKXzQhKBliUSLc=
-github.com/Mrs4s/MiraiGo v0.0.0-20201111141037-8b59d083ebeb/go.mod h1:pAsWtMIwqkBXr5DkUpTIHoWQJNduVnX9WSBPmPvkuCs=
+github.com/Mrs4s/MiraiGo v0.0.0-20201112125100-c41a3dbb0f4a h1:6AESfMoGUVTMsgbs4tCE68fXOQq6PUyPTEy6JBX46So=
+github.com/Mrs4s/MiraiGo v0.0.0-20201112125100-c41a3dbb0f4a/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=
diff --git a/server/apiAdmin.go b/server/apiAdmin.go
index 78e01da..b00d3a6 100644
--- a/server/apiAdmin.go
+++ b/server/apiAdmin.go
@@ -249,6 +249,7 @@ func (s *webServer) Dologin() {
log.Fatalf("重连失败: 设备锁")
default:
log.Errorf("重连失败: %v", rsp.ErrorMessage)
+ cli.Disconnect()
continue
}
}
From 171aba527eccbe6baa2ef9bf6401fe9077d19d7e Mon Sep 17 00:00:00 2001
From: Mrs4s <1844812067@qq.com>
Date: Thu, 12 Nov 2020 21:50:57 +0800
Subject: [PATCH 126/367] fix xml escape.
---
coolq/cqcode.go | 2 +-
1 file changed, 1 insertion(+), 1 deletion(-)
diff --git a/coolq/cqcode.go b/coolq/cqcode.go
index f092a5f..2923948 100644
--- a/coolq/cqcode.go
+++ b/coolq/cqcode.go
@@ -554,7 +554,7 @@ func (bot *CQBot) ToElement(t string, d map[string]string, group bool) (m messag
}}, nil
}
xml := fmt.Sprintf(`- %s%s
`,
- d["title"], d["url"], d["image"], d["audio"], d["title"], d["content"])
+ url.PathEscape(d["title"]), d["url"], d["image"], d["audio"], url.PathEscape(d["title"]), url.PathEscape(d["content"]))
return &message.ServiceElement{
Id: 60,
Content: xml,
From 3326660880a0459ce0e52dbb2b680900263ce8a0 Mon Sep 17 00:00:00 2001
From: Mrs4s <1844812067@qq.com>
Date: Thu, 12 Nov 2020 22:20:22 +0800
Subject: [PATCH 127/367] fix cardimage cannot load on pc.
---
coolq/cqcode.go | 45 ++++++++++++++++++++++++++++++++-------------
1 file changed, 32 insertions(+), 13 deletions(-)
diff --git a/coolq/cqcode.go b/coolq/cqcode.go
index 2923948..08f9fd6 100644
--- a/coolq/cqcode.go
+++ b/coolq/cqcode.go
@@ -310,7 +310,12 @@ func (bot *CQBot) ConvertStringMessage(m string, group bool) (r []message.IMessa
}
continue
}
- r = append(r, elem)
+ switch i := elem.(type) {
+ case message.IMessageElement:
+ r = append(r, i)
+ case []message.IMessageElement:
+ r = append(r, i...)
+ }
}
if si != len(m) {
r = append(r, message.NewText(CQCodeUnescapeText(m[si:])))
@@ -354,7 +359,13 @@ func (bot *CQBot) ConvertObjectMessage(m gjson.Result, group bool) (r []message.
log.Warnf("转换CQ码到MiraiGo Element时出现错误: %v 将忽略本段CQ码.", err)
return
}
- r = append(r, elem)
+ switch i := elem.(type) {
+ case message.IMessageElement:
+ r = append(r, i)
+ case []message.IMessageElement:
+ r = append(r, i...)
+ }
+
}
if m.Type == gjson.String {
return bot.ConvertStringMessage(m.Str, group)
@@ -370,7 +381,10 @@ func (bot *CQBot) ConvertObjectMessage(m gjson.Result, group bool) (r []message.
return
}
-func (bot *CQBot) ToElement(t string, d map[string]string, group bool) (m message.IMessageElement, err error) {
+// ToElement 将解码后的CQCode转换为Element.
+// 返回 interface{} 存在三种类型
+// message.IMessageElement []message.IMessageElement nil
+func (bot *CQBot) ToElement(t string, d map[string]string, group bool) (m interface{}, err error) {
switch t {
case "text":
return message.NewText(d["text"]), nil
@@ -604,7 +618,7 @@ func (bot *CQBot) ToElement(t string, d map[string]string, group bool) (m messag
if err != nil {
return nil, errors.New("send cardimage faild")
}
- return bot.SendNewPic(img, source, icon, minWidth, minHeight, maxWidth, maxHeight, group)
+ return bot.makeShowPic(img, source, icon, minWidth, minHeight, maxWidth, maxHeight, group)
default:
return nil, errors.New("unsupported cq code: " + t)
}
@@ -753,10 +767,10 @@ func (bot *CQBot) makeImageElem(d map[string]string, group bool) (message.IMessa
return nil, errors.New("invalid image")
}
-//SendNewPic 一种xml 方式发送的群消息图片
-func (bot *CQBot) SendNewPic(elem message.IMessageElement, source string, icon string, minWidth int64, minHeight int64, maxWidth int64, maxHeight int64, group bool) (*message.ServiceElement, error) {
- var xml string
- xml = ""
+//makeShowPic 一种xml 方式发送的群消息图片
+func (bot *CQBot) makeShowPic(elem message.IMessageElement, source string, icon string, minWidth int64, minHeight int64, maxWidth int64, maxHeight int64, group bool) ([]message.IMessageElement, error) {
+ xml := ""
+ var suf message.IMessageElement
if i, ok := elem.(*message.ImageElement); ok {
if group == false {
gm, err := bot.Client.UploadPrivateImage(1, i.Data)
@@ -764,27 +778,32 @@ func (bot *CQBot) SendNewPic(elem message.IMessageElement, source string, icon s
log.Warnf("警告: 好友消息 %v 消息图片上传失败: %v", 1, err)
return nil, err
}
+ suf = gm
xml = fmt.Sprintf(` `, "", gm.Md5, gm.Md5, len(i.Data), "", minWidth, minHeight, maxWidth, maxHeight, source, icon)
-
} else {
gm, err := bot.Client.UploadGroupImage(1, i.Data)
if err != nil {
log.Warnf("警告: 群 %v 消息图片上传失败: %v", 1, err)
return nil, err
}
+ suf = gm
xml = fmt.Sprintf(` `, "", gm.Md5, gm.Md5, len(i.Data), "", minWidth, minHeight, maxWidth, maxHeight, source, icon)
}
}
+
if i, ok := elem.(*message.GroupImageElement); ok {
xml = fmt.Sprintf(` `, "", i.Md5, i.Md5, 0, "", minWidth, minHeight, maxWidth, maxHeight, source, icon)
+ suf = i
}
if i, ok := elem.(*message.FriendImageElement); ok {
xml = fmt.Sprintf(` `, "", i.Md5, i.Md5, 0, "", minWidth, minHeight, maxWidth, maxHeight, source, icon)
+ suf = i
}
if xml != "" {
- log.Warn(xml)
- XmlMsg := message.NewRichXml(xml, 5)
- return XmlMsg, nil
+ //log.Warn(xml)
+ ret := []message.IMessageElement{suf}
+ ret = append(ret, message.NewRichXml(xml, 5))
+ return ret, nil
}
- return nil, errors.New("发送xml图片消息失败")
+ return nil, errors.New("生成xml图片消息失败")
}
From 0ed6522535d3f753a2617a6d59c49b1f0fa067c9 Mon Sep 17 00:00:00 2001
From: Mrs4s <1844812067@qq.com>
Date: Thu, 12 Nov 2020 22:43:55 +0800
Subject: [PATCH 128/367] fix xml escape error.
---
coolq/cqcode.go | 10 +++++++++-
1 file changed, 9 insertions(+), 1 deletion(-)
diff --git a/coolq/cqcode.go b/coolq/cqcode.go
index 08f9fd6..e15305f 100644
--- a/coolq/cqcode.go
+++ b/coolq/cqcode.go
@@ -1,9 +1,11 @@
package coolq
import (
+ "bytes"
"crypto/md5"
"encoding/base64"
"encoding/hex"
+ xml2 "encoding/xml"
"errors"
"fmt"
"github.com/Mrs4s/MiraiGo/binary"
@@ -568,7 +570,7 @@ func (bot *CQBot) ToElement(t string, d map[string]string, group bool) (m interf
}}, nil
}
xml := fmt.Sprintf(`- %s%s
`,
- url.PathEscape(d["title"]), d["url"], d["image"], d["audio"], url.PathEscape(d["title"]), url.PathEscape(d["content"]))
+ XmlEscape(d["title"]), d["url"], d["image"], d["audio"], XmlEscape(d["title"]), XmlEscape(d["content"]))
return &message.ServiceElement{
Id: 60,
Content: xml,
@@ -625,6 +627,12 @@ func (bot *CQBot) ToElement(t string, d map[string]string, group bool) (m interf
return nil, nil
}
+func XmlEscape(c string) string {
+ buf := new(bytes.Buffer)
+ _ = xml2.EscapeText(buf, []byte(c))
+ return buf.String()
+}
+
func CQCodeEscapeText(raw string) string {
ret := raw
ret = strings.ReplaceAll(ret, "&", "&")
From 535b4ee641f8aade28b957c7e40a534842df8de7 Mon Sep 17 00:00:00 2001
From: Mrs4s <1844812067@qq.com>
Date: Thu, 12 Nov 2020 23:07:34 +0800
Subject: [PATCH 129/367] feature sso address control.
---
docs/config.md | 2 ++
global/config.go | 1 +
go.mod | 2 +-
go.sum | 4 ++--
main.go | 7 ++++++-
server/apiAdmin.go | 7 ++++++-
6 files changed, 18 insertions(+), 5 deletions(-)
diff --git a/docs/config.md b/docs/config.md
index cedef08..f9cb439 100644
--- a/docs/config.md
+++ b/docs/config.md
@@ -36,6 +36,7 @@ go-cqhttp 支持导入CQHTTP的配置文件, 具体步骤为:
"ignore_invalid_cqcode": false,
"force_fragmented": true,
"heartbeat_interval": 5,
+ "use_sso_address": false,
"http_config": {
"enabled": true,
"host": "0.0.0.0",
@@ -77,6 +78,7 @@ go-cqhttp 支持导入CQHTTP的配置文件, 具体步骤为:
| 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 配置 |
diff --git a/global/config.go b/global/config.go
index 15a3759..3026065 100644
--- a/global/config.go
+++ b/global/config.go
@@ -33,6 +33,7 @@ type JsonConfig struct {
WSConfig *GoCQWebsocketConfig `json:"ws_config"`
ReverseServers []*GoCQReverseWebsocketConfig `json:"ws_reverse_servers"`
PostMessageFormat string `json:"post_message_format"`
+ UseSSOAddress bool `json:"use_sso_address"`
Debug bool `json:"debug"`
LogLevel string `json:"log_level"`
WebUi *GoCqWebUi `json:"web_ui"`
diff --git a/go.mod b/go.mod
index 4bb1535..8af2389 100644
--- a/go.mod
+++ b/go.mod
@@ -3,7 +3,7 @@ module github.com/Mrs4s/go-cqhttp
go 1.14
require (
- github.com/Mrs4s/MiraiGo v0.0.0-20201112125100-c41a3dbb0f4a
+ github.com/Mrs4s/MiraiGo v0.0.0-20201112150130-58e7c82fd2dd
github.com/dustin/go-humanize v1.0.0
github.com/getlantern/go-update v0.0.0-20190510022740-79c495ab728c
github.com/getlantern/golog v0.0.0-20201105130739-9586b8bde3a9 // indirect
diff --git a/go.sum b/go.sum
index 412422c..32a69e9 100644
--- a/go.sum
+++ b/go.sum
@@ -1,7 +1,7 @@
cloud.google.com/go v0.26.0/go.mod h1:aQUYkXzVsufM+DwF1aE+0xfcU+56JwCaLick0ClmMTw=
github.com/BurntSushi/toml v0.3.1/go.mod h1:xHWCNGjB5oqiDr8zfno3MHue2Ht5sIBksp03qcyfWMU=
-github.com/Mrs4s/MiraiGo v0.0.0-20201112125100-c41a3dbb0f4a h1:6AESfMoGUVTMsgbs4tCE68fXOQq6PUyPTEy6JBX46So=
-github.com/Mrs4s/MiraiGo v0.0.0-20201112125100-c41a3dbb0f4a/go.mod h1:pAsWtMIwqkBXr5DkUpTIHoWQJNduVnX9WSBPmPvkuCs=
+github.com/Mrs4s/MiraiGo v0.0.0-20201112150130-58e7c82fd2dd h1:n1llMhWgT5s/dBWtbg0NwDzXFAKWfwr1ZXxaErZkLfc=
+github.com/Mrs4s/MiraiGo v0.0.0-20201112150130-58e7c82fd2dd/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=
diff --git a/main.go b/main.go
index 6025ed4..1c89263 100644
--- a/main.go
+++ b/main.go
@@ -246,8 +246,13 @@ func main() {
log.Debug("Protocol -> " + e.Message)
}
})
- cli.OnServerUpdated(func(bot *client.QQClient, e *client.ServerUpdatedEvent) {
+ cli.OnServerUpdated(func(bot *client.QQClient, e *client.ServerUpdatedEvent) bool {
+ if !conf.UseSSOAddress {
+ log.Infof("收到服务器地址更新通知, 根据配置文件已忽略.")
+ return false
+ }
log.Infof("收到服务器地址更新通知, 将在下一次重连时应用. ")
+ return true
})
if conf.WebUi == nil {
conf.WebUi = &global.GoCqWebUi{
diff --git a/server/apiAdmin.go b/server/apiAdmin.go
index b00d3a6..44c5ca1 100644
--- a/server/apiAdmin.go
+++ b/server/apiAdmin.go
@@ -358,8 +358,13 @@ func (s *webServer) DoReLogin() { // TODO: 协议层的 ReLogin
log.Debug("Protocol -> " + e.Message)
}
})
- cli.OnServerUpdated(func(bot *client.QQClient, e *client.ServerUpdatedEvent) {
+ cli.OnServerUpdated(func(bot *client.QQClient, e *client.ServerUpdatedEvent) bool {
+ if !conf.UseSSOAddress {
+ log.Infof("收到服务器地址更新通知, 根据配置文件已忽略.")
+ return false
+ }
log.Infof("收到服务器地址更新通知, 将在下一次重连时应用. ")
+ return true
})
s.Cli = cli
s.Dologin()
From 30f1f3199a3aee618f0bef3dceb38ed6059bc722 Mon Sep 17 00:00:00 2001
From: Mrs4s <1844812067@qq.com>
Date: Fri, 13 Nov 2020 16:19:00 +0800
Subject: [PATCH 130/367] update MiraiGo.
---
go.mod | 2 +-
go.sum | 2 ++
server/apiAdmin.go | 1 +
3 files changed, 4 insertions(+), 1 deletion(-)
diff --git a/go.mod b/go.mod
index 8af2389..26891c6 100644
--- a/go.mod
+++ b/go.mod
@@ -3,7 +3,7 @@ module github.com/Mrs4s/go-cqhttp
go 1.14
require (
- github.com/Mrs4s/MiraiGo v0.0.0-20201112150130-58e7c82fd2dd
+ github.com/Mrs4s/MiraiGo v0.0.0-20201113081613-b6a695d43d8e
github.com/dustin/go-humanize v1.0.0
github.com/getlantern/go-update v0.0.0-20190510022740-79c495ab728c
github.com/getlantern/golog v0.0.0-20201105130739-9586b8bde3a9 // indirect
diff --git a/go.sum b/go.sum
index 32a69e9..837be5d 100644
--- a/go.sum
+++ b/go.sum
@@ -2,6 +2,8 @@ cloud.google.com/go v0.26.0/go.mod h1:aQUYkXzVsufM+DwF1aE+0xfcU+56JwCaLick0ClmMT
github.com/BurntSushi/toml v0.3.1/go.mod h1:xHWCNGjB5oqiDr8zfno3MHue2Ht5sIBksp03qcyfWMU=
github.com/Mrs4s/MiraiGo v0.0.0-20201112150130-58e7c82fd2dd h1:n1llMhWgT5s/dBWtbg0NwDzXFAKWfwr1ZXxaErZkLfc=
github.com/Mrs4s/MiraiGo v0.0.0-20201112150130-58e7c82fd2dd/go.mod h1:pAsWtMIwqkBXr5DkUpTIHoWQJNduVnX9WSBPmPvkuCs=
+github.com/Mrs4s/MiraiGo v0.0.0-20201113081613-b6a695d43d8e h1:3bXOOf9YxLpoF3jYdd5JB/QXggvvFrRNUyvCQysmIoU=
+github.com/Mrs4s/MiraiGo v0.0.0-20201113081613-b6a695d43d8e/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=
diff --git a/server/apiAdmin.go b/server/apiAdmin.go
index 44c5ca1..0790307 100644
--- a/server/apiAdmin.go
+++ b/server/apiAdmin.go
@@ -239,6 +239,7 @@ func (s *webServer) Dologin() {
rsp, err := cli.Login()
if err != nil {
log.Errorf("重连失败: %v", err)
+ cli.Disconnect()
continue
}
if !rsp.Success {
From 06ac2fcb0cc14c0297cd14f8b90485f57e784665 Mon Sep 17 00:00:00 2001
From: wdvxdr
Date: Fri, 13 Nov 2020 17:27:01 +0800
Subject: [PATCH 131/367] :art: clear code
---
server/http.go | 260 +++++++++++++++++--------------------------------
1 file changed, 88 insertions(+), 172 deletions(-)
diff --git a/server/http.go b/server/http.go
index 3ad7faf..8c12e43 100644
--- a/server/http.go
+++ b/server/http.go
@@ -161,78 +161,78 @@ func (s *httpServer) HandleActions(c *gin.Context) {
}
}
-func (s *httpServer) GetLoginInfo(c *gin.Context) {
+func GetLoginInfo(s *httpServer, c *gin.Context) {
c.JSON(200, s.bot.CQGetLoginInfo())
}
-func (s *httpServer) GetFriendList(c *gin.Context) {
+func GetFriendList(s *httpServer, c *gin.Context) {
c.JSON(200, s.bot.CQGetFriendList())
}
-func (s *httpServer) GetGroupList(c *gin.Context) {
+func GetGroupList(s *httpServer, c *gin.Context) {
nc := getParamOrDefault(c, "no_cache", "false")
c.JSON(200, s.bot.CQGetGroupList(nc == "true"))
}
-func (s *httpServer) GetGroupInfo(c *gin.Context) {
+func GetGroupInfo(s *httpServer, c *gin.Context) {
gid, _ := strconv.ParseInt(getParam(c, "group_id"), 10, 64)
c.JSON(200, s.bot.CQGetGroupInfo(gid))
}
-func (s *httpServer) GetGroupMemberList(c *gin.Context) {
+func GetGroupMemberList(s *httpServer, c *gin.Context) {
gid, _ := strconv.ParseInt(getParam(c, "group_id"), 10, 64)
nc := getParamOrDefault(c, "no_cache", "false")
c.JSON(200, s.bot.CQGetGroupMemberList(gid, nc == "true"))
}
-func (s *httpServer) GetGroupMemberInfo(c *gin.Context) {
+func GetGroupMemberInfo(s *httpServer, c *gin.Context) {
gid, _ := strconv.ParseInt(getParam(c, "group_id"), 10, 64)
uid, _ := strconv.ParseInt(getParam(c, "user_id"), 10, 64)
c.JSON(200, s.bot.CQGetGroupMemberInfo(gid, uid))
}
-func (s *httpServer) GetGroupFileSystemInfo(c *gin.Context) {
+func GetGroupFileSystemInfo(s *httpServer, c *gin.Context) {
gid, _ := strconv.ParseInt(getParam(c, "group_id"), 10, 64)
c.JSON(200, s.bot.CQGetGroupFileSystemInfo(gid))
}
-func (s *httpServer) GetGroupRootFiles(c *gin.Context) {
+func GetGroupRootFiles(s *httpServer, c *gin.Context) {
gid, _ := strconv.ParseInt(getParam(c, "group_id"), 10, 64)
c.JSON(200, s.bot.CQGetGroupRootFiles(gid))
}
-func (s *httpServer) GetGroupFilesByFolderId(c *gin.Context) {
+func GetGroupFilesByFolderId(s *httpServer, c *gin.Context) {
gid, _ := strconv.ParseInt(getParam(c, "group_id"), 10, 64)
folderId := getParam(c, "folder_id")
c.JSON(200, s.bot.CQGetGroupFilesByFolderId(gid, folderId))
}
-func (s *httpServer) GetGroupFileUrl(c *gin.Context) {
+func GetGroupFileUrl(s *httpServer, c *gin.Context) {
gid, _ := strconv.ParseInt(getParam(c, "group_id"), 10, 64)
fid := getParam(c, "file_id")
busid, _ := strconv.ParseInt(getParam(c, "busid"), 10, 32)
c.JSON(200, s.bot.CQGetGroupFileUrl(gid, fid, int32(busid)))
}
-func (s *httpServer) SendMessage(c *gin.Context) {
+func SendMessage(s *httpServer, c *gin.Context) {
if getParam(c, "message_type") == "private" {
- s.SendPrivateMessage(c)
+ SendPrivateMessage(s, c)
return
}
if getParam(c, "message_type") == "group" {
- s.SendGroupMessage(c)
+ SendGroupMessage(s, c)
return
}
if getParam(c, "group_id") != "" {
- s.SendGroupMessage(c)
+ SendGroupMessage(s, c)
return
}
if getParam(c, "user_id") != "" {
- s.SendPrivateMessage(c)
+ SendPrivateMessage(s, c)
}
}
-func (s *httpServer) SendPrivateMessage(c *gin.Context) {
+func SendPrivateMessage(s *httpServer, c *gin.Context) {
uid, _ := strconv.ParseInt(getParam(c, "user_id"), 10, 64)
msg, t := getParamWithType(c, "message")
autoEscape := global.EnsureBool(getParam(c, "auto_escape"), false)
@@ -243,7 +243,7 @@ func (s *httpServer) SendPrivateMessage(c *gin.Context) {
c.JSON(200, s.bot.CQSendPrivateMessage(uid, msg, autoEscape))
}
-func (s *httpServer) SendGroupMessage(c *gin.Context) {
+func SendGroupMessage(s *httpServer, c *gin.Context) {
gid, _ := strconv.ParseInt(getParam(c, "group_id"), 10, 64)
msg, t := getParamWithType(c, "message")
autoEscape := global.EnsureBool(getParam(c, "auto_escape"), false)
@@ -254,34 +254,34 @@ func (s *httpServer) SendGroupMessage(c *gin.Context) {
c.JSON(200, s.bot.CQSendGroupMessage(gid, msg, autoEscape))
}
-func (s *httpServer) SendGroupForwardMessage(c *gin.Context) {
+func SendGroupForwardMessage(s *httpServer, c *gin.Context) {
gid, _ := strconv.ParseInt(getParam(c, "group_id"), 10, 64)
msg := getParam(c, "messages")
c.JSON(200, s.bot.CQSendGroupForwardMessage(gid, gjson.Parse(msg)))
}
-func (s *httpServer) GetImage(c *gin.Context) {
+func GetImage(s *httpServer, c *gin.Context) {
file := getParam(c, "file")
c.JSON(200, s.bot.CQGetImage(file))
}
-func (s *httpServer) GetMessage(c *gin.Context) {
+func GetMessage(s *httpServer, c *gin.Context) {
mid, _ := strconv.ParseInt(getParam(c, "message_id"), 10, 32)
c.JSON(200, s.bot.CQGetMessage(int32(mid)))
}
-func (s *httpServer) GetGroupHonorInfo(c *gin.Context) {
+func GetGroupHonorInfo(s *httpServer, c *gin.Context) {
gid, _ := strconv.ParseInt(getParam(c, "group_id"), 10, 64)
c.JSON(200, s.bot.CQGetGroupHonorInfo(gid, getParam(c, "type")))
}
-func (s *httpServer) ProcessFriendRequest(c *gin.Context) {
+func ProcessFriendRequest(s *httpServer, c *gin.Context) {
flag := getParam(c, "flag")
approve := getParamOrDefault(c, "approve", "true")
c.JSON(200, s.bot.CQProcessFriendRequest(flag, approve == "true"))
}
-func (s *httpServer) ProcessGroupRequest(c *gin.Context) {
+func ProcessGroupRequest(s *httpServer, c *gin.Context) {
flag := getParam(c, "flag")
subType := getParam(c, "sub_type")
if subType == "" {
@@ -291,103 +291,103 @@ func (s *httpServer) ProcessGroupRequest(c *gin.Context) {
c.JSON(200, s.bot.CQProcessGroupRequest(flag, subType, getParam(c, "reason"), approve == "true"))
}
-func (s *httpServer) SetGroupCard(c *gin.Context) {
+func SetGroupCard(s *httpServer, c *gin.Context) {
gid, _ := strconv.ParseInt(getParam(c, "group_id"), 10, 64)
uid, _ := strconv.ParseInt(getParam(c, "user_id"), 10, 64)
c.JSON(200, s.bot.CQSetGroupCard(gid, uid, getParam(c, "card")))
}
-func (s *httpServer) SetSpecialTitle(c *gin.Context) {
+func SetSpecialTitle(s *httpServer, c *gin.Context) {
gid, _ := strconv.ParseInt(getParam(c, "group_id"), 10, 64)
uid, _ := strconv.ParseInt(getParam(c, "user_id"), 10, 64)
c.JSON(200, s.bot.CQSetGroupSpecialTitle(gid, uid, getParam(c, "special_title")))
}
-func (s *httpServer) SetGroupKick(c *gin.Context) {
+func SetGroupKick(s *httpServer, c *gin.Context) {
gid, _ := strconv.ParseInt(getParam(c, "group_id"), 10, 64)
uid, _ := strconv.ParseInt(getParam(c, "user_id"), 10, 64)
msg := getParam(c, "message")
c.JSON(200, s.bot.CQSetGroupKick(gid, uid, msg))
}
-func (s *httpServer) SetGroupBan(c *gin.Context) {
+func SetGroupBan(s *httpServer, c *gin.Context) {
gid, _ := strconv.ParseInt(getParam(c, "group_id"), 10, 64)
uid, _ := strconv.ParseInt(getParam(c, "user_id"), 10, 64)
i, _ := strconv.ParseInt(getParamOrDefault(c, "duration", "1800"), 10, 64)
c.JSON(200, s.bot.CQSetGroupBan(gid, uid, uint32(i)))
}
-func (s *httpServer) SetWholeBan(c *gin.Context) {
+func SetWholeBan(s *httpServer, c *gin.Context) {
gid, _ := strconv.ParseInt(getParam(c, "group_id"), 10, 64)
c.JSON(200, s.bot.CQSetGroupWholeBan(gid, getParamOrDefault(c, "enable", "true") == "true"))
}
-func (s *httpServer) SetGroupName(c *gin.Context) {
+func SetGroupName(s *httpServer, c *gin.Context) {
gid, _ := strconv.ParseInt(getParam(c, "group_id"), 10, 64)
c.JSON(200, s.bot.CQSetGroupName(gid, getParam(c, "group_name")))
}
-func (s *httpServer) SetGroupAdmin(c *gin.Context) {
+func SetGroupAdmin(s *httpServer, c *gin.Context) {
gid, _ := strconv.ParseInt(getParam(c, "group_id"), 10, 64)
uid, _ := strconv.ParseInt(getParam(c, "user_id"), 10, 64)
c.JSON(200, s.bot.CQSetGroupAdmin(gid, uid, getParamOrDefault(c, "enable", "true") == "true"))
}
-func (s *httpServer) SendGroupNotice(c *gin.Context) {
+func SendGroupNotice(s *httpServer, c *gin.Context) {
gid, _ := strconv.ParseInt(getParam(c, "group_id"), 10, 64)
c.JSON(200, s.bot.CQSetGroupMemo(gid, getParam(c, "content")))
}
-func (s *httpServer) SetGroupLeave(c *gin.Context) {
+func SetGroupLeave(s *httpServer, c *gin.Context) {
gid, _ := strconv.ParseInt(getParam(c, "group_id"), 10, 64)
c.JSON(200, s.bot.CQSetGroupLeave(gid))
}
-func (s *httpServer) GetForwardMessage(c *gin.Context) {
+func GetForwardMessage(s *httpServer, c *gin.Context) {
resId := getParam(c, "message_id")
c.JSON(200, s.bot.CQGetForwardMessage(resId))
}
-func (s *httpServer) GetGroupSystemMessage(c *gin.Context) {
+func GetGroupSystemMessage(s *httpServer, c *gin.Context) {
c.JSON(200, s.bot.CQGetGroupSystemMessages())
}
-func (s *httpServer) DeleteMessage(c *gin.Context) {
+func DeleteMessage(s *httpServer, c *gin.Context) {
mid, _ := strconv.ParseInt(getParam(c, "message_id"), 10, 32)
c.JSON(200, s.bot.CQDeleteMessage(int32(mid)))
}
-func (s *httpServer) CanSendImage(c *gin.Context) {
+func CanSendImage(s *httpServer, c *gin.Context) {
c.JSON(200, s.bot.CQCanSendImage())
}
-func (s *httpServer) CanSendRecord(c *gin.Context) {
+func CanSendRecord(s *httpServer, c *gin.Context) {
c.JSON(200, s.bot.CQCanSendRecord())
}
-func (s *httpServer) GetStatus(c *gin.Context) {
+func GetStatus(s *httpServer, c *gin.Context) {
c.JSON(200, s.bot.CQGetStatus())
}
-func (s *httpServer) GetVersionInfo(c *gin.Context) {
+func GetVersionInfo(s *httpServer, c *gin.Context) {
c.JSON(200, s.bot.CQGetVersionInfo())
}
-func (s *httpServer) ReloadEventFilter(c *gin.Context) {
+func ReloadEventFilter(s *httpServer, c *gin.Context) {
c.JSON(200, s.bot.CQReloadEventFilter())
}
-func (s *httpServer) GetVipInfo(c *gin.Context) {
+func GetVipInfo(s *httpServer, c *gin.Context) {
uid, _ := strconv.ParseInt(getParam(c, "user_id"), 10, 64)
c.JSON(200, s.bot.CQGetVipInfo(uid))
}
-func (s *httpServer) GetStrangerInfo(c *gin.Context) {
+func GetStrangerInfo(s *httpServer, c *gin.Context) {
uid, _ := strconv.ParseInt(getParam(c, "user_id"), 10, 64)
c.JSON(200, s.bot.CQGetStrangerInfo(uid))
}
-func (s *httpServer) HandleQuickOperation(c *gin.Context) {
+func HandleQuickOperation(s *httpServer, c *gin.Context) {
if c.Request.Method != "POST" {
c.AbortWithStatus(404)
return
@@ -398,17 +398,17 @@ func (s *httpServer) HandleQuickOperation(c *gin.Context) {
}
}
-func (s *httpServer) OcrImage(c *gin.Context) {
+func OcrImage(s *httpServer, c *gin.Context) {
img := getParam(c, "image")
c.JSON(200, s.bot.CQOcrImage(img))
}
-func (s *httpServer) GetWordSlices(c *gin.Context) {
+func GetWordSlices(s *httpServer, c *gin.Context) {
content := getParam(c, "content")
c.JSON(200, s.bot.CQGetWordSlices(content))
}
-func (s *httpServer) SetGroupPortrait(c *gin.Context) {
+func SetGroupPortrait(s *httpServer, c *gin.Context) {
gid, _ := strconv.ParseInt(getParam(c, "group_id"), 10, 64)
file := getParam(c, "file")
cache := getParam(c, "cache")
@@ -464,132 +464,48 @@ func getParamWithType(c *gin.Context, k string) (string, gjson.Type) {
}
var httpApi = map[string]func(s *httpServer, c *gin.Context){
- "get_login_info": func(s *httpServer, c *gin.Context) {
- s.GetLoginInfo(c)
- },
- "get_friend_list": func(s *httpServer, c *gin.Context) {
- s.GetFriendList(c)
- },
- "get_group_list": func(s *httpServer, c *gin.Context) {
- s.GetGroupList(c)
- },
- "get_group_info": func(s *httpServer, c *gin.Context) {
- s.GetGroupInfo(c)
- },
- "get_group_member_list": func(s *httpServer, c *gin.Context) {
- s.GetGroupMemberList(c)
- },
- "get_group_member_info": func(s *httpServer, c *gin.Context) {
- s.GetGroupMemberInfo(c)
- },
- "get_group_file_system_info": func(s *httpServer, c *gin.Context) {
- s.GetGroupFileSystemInfo(c)
- },
- "get_group_root_files": func(s *httpServer, c *gin.Context) {
- s.GetGroupRootFiles(c)
- },
- "get_group_files_by_folder": func(s *httpServer, c *gin.Context) {
- s.GetGroupFilesByFolderId(c)
- },
- "get_group_file_url": func(s *httpServer, c *gin.Context) {
- s.GetGroupFileUrl(c)
- },
- "send_msg": func(s *httpServer, c *gin.Context) {
- s.SendMessage(c)
- },
- "send_group_msg": func(s *httpServer, c *gin.Context) {
- s.SendGroupMessage(c)
- },
- "send_group_forward_msg": func(s *httpServer, c *gin.Context) {
- s.SendGroupForwardMessage(c)
- },
- "send_private_msg": func(s *httpServer, c *gin.Context) {
- s.SendPrivateMessage(c)
- },
- "delete_msg": func(s *httpServer, c *gin.Context) {
- s.DeleteMessage(c)
- },
- "set_friend_add_request": func(s *httpServer, c *gin.Context) {
- s.ProcessFriendRequest(c)
- },
- "set_group_add_request": func(s *httpServer, c *gin.Context) {
- s.ProcessGroupRequest(c)
- },
- "set_group_card": func(s *httpServer, c *gin.Context) {
- s.SetGroupCard(c)
- },
- "set_group_special_title": func(s *httpServer, c *gin.Context) {
- s.SetSpecialTitle(c)
- },
- "set_group_kick": func(s *httpServer, c *gin.Context) {
- s.SetGroupKick(c)
- },
- "set_group_ban": func(s *httpServer, c *gin.Context) {
- s.SetGroupBan(c)
- },
- "set_group_whole_ban": func(s *httpServer, c *gin.Context) {
- s.SetWholeBan(c)
- },
- "set_group_name": func(s *httpServer, c *gin.Context) {
- s.SetGroupName(c)
- },
- "set_group_admin": func(s *httpServer, c *gin.Context) {
- s.SetGroupAdmin(c)
- },
- "_send_group_notice": func(s *httpServer, c *gin.Context) {
- s.SendGroupNotice(c)
- },
- "set_group_leave": func(s *httpServer, c *gin.Context) {
- s.SetGroupLeave(c)
- },
- "get_image": func(s *httpServer, c *gin.Context) {
- s.GetImage(c)
- },
- "get_forward_msg": func(s *httpServer, c *gin.Context) {
- s.GetForwardMessage(c)
- },
- "get_msg": func(s *httpServer, c *gin.Context) {
- s.GetMessage(c)
- },
- "get_group_system_msg": func(s *httpServer, c *gin.Context) {
- s.GetGroupSystemMessage(c)
- },
- "get_group_honor_info": func(s *httpServer, c *gin.Context) {
- s.GetGroupHonorInfo(c)
- },
- "can_send_image": func(s *httpServer, c *gin.Context) {
- s.CanSendImage(c)
- },
- "can_send_record": func(s *httpServer, c *gin.Context) {
- s.CanSendRecord(c)
- },
- "get_status": func(s *httpServer, c *gin.Context) {
- s.GetStatus(c)
- },
- "get_version_info": func(s *httpServer, c *gin.Context) {
- s.GetVersionInfo(c)
- },
- "_get_vip_info": func(s *httpServer, c *gin.Context) {
- s.GetVipInfo(c)
- },
- "get_stranger_info": func(s *httpServer, c *gin.Context) {
- s.GetStrangerInfo(c)
- },
- "reload_event_filter": func(s *httpServer, c *gin.Context) {
- s.ReloadEventFilter(c)
- },
- "set_group_portrait": func(s *httpServer, c *gin.Context) {
- s.SetGroupPortrait(c)
- },
- ".handle_quick_operation": func(s *httpServer, c *gin.Context) {
- s.HandleQuickOperation(c)
- },
- ".ocr_image": func(s *httpServer, c *gin.Context) {
- s.OcrImage(c)
- },
- ".get_word_slices": func(s *httpServer, c *gin.Context) {
- s.GetWordSlices(c)
- },
+ "get_login_info": GetLoginInfo,
+ "get_friend_list": GetFriendList,
+ "get_group_list": GetGroupList,
+ "get_group_info": GetGroupInfo,
+ "get_group_member_list": GetGroupMemberList,
+ "get_group_member_info": GetGroupMemberInfo,
+ "get_group_file_system_info": GetGroupFileSystemInfo,
+ "get_group_root_files": GetGroupRootFiles,
+ "get_group_files_by_folder": GetGroupFilesByFolderId,
+ "get_group_file_url": GetGroupFileUrl,
+ "send_msg": SendMessage,
+ "send_group_msg": SendGroupMessage,
+ "send_group_forward_msg": SendGroupForwardMessage,
+ "send_private_msg": SendPrivateMessage,
+ "delete_msg": DeleteMessage,
+ "set_friend_add_request": ProcessFriendRequest,
+ "set_group_add_request": ProcessGroupRequest,
+ "set_group_card": SetGroupCard,
+ "set_group_special_title": SetSpecialTitle,
+ "set_group_kick": SetGroupKick,
+ "set_group_ban": SetGroupBan,
+ "set_group_whole_ban": SetWholeBan,
+ "set_group_name": SetGroupName,
+ "set_group_admin": SetGroupAdmin,
+ "_send_group_notice": SendGroupNotice,
+ "set_group_leave": SetGroupLeave,
+ "get_image": GetImage,
+ "get_forward_msg": GetForwardMessage,
+ "get_msg": GetMessage,
+ "get_group_system_msg": GetGroupSystemMessage,
+ "get_group_honor_info": GetGroupHonorInfo,
+ "can_send_image": CanSendImage,
+ "can_send_record": CanSendRecord,
+ "get_status": GetStatus,
+ "get_version_info": GetVersionInfo,
+ "_get_vip_info": GetVipInfo,
+ "get_stranger_info": GetStrangerInfo,
+ "reload_event_filter": ReloadEventFilter,
+ "set_group_portrait": SetGroupPortrait,
+ ".handle_quick_operation": HandleQuickOperation,
+ ".ocr_image": OcrImage,
+ ".get_word_slices": GetWordSlices,
}
func (s *httpServer) ShutDown() {
From f9dc22f2e5d80bcbfb79b77622b0ad991e01664a Mon Sep 17 00:00:00 2001
From: Mrs4s <1844812067@qq.com>
Date: Fri, 13 Nov 2020 18:48:39 +0800
Subject: [PATCH 132/367] update MiraiGo.
---
go.mod | 2 +-
go.sum | 6 ++----
2 files changed, 3 insertions(+), 5 deletions(-)
diff --git a/go.mod b/go.mod
index 26891c6..1bdd90c 100644
--- a/go.mod
+++ b/go.mod
@@ -3,7 +3,7 @@ module github.com/Mrs4s/go-cqhttp
go 1.14
require (
- github.com/Mrs4s/MiraiGo v0.0.0-20201113081613-b6a695d43d8e
+ github.com/Mrs4s/MiraiGo v0.0.0-20201113104655-b51d8b417c0c
github.com/dustin/go-humanize v1.0.0
github.com/getlantern/go-update v0.0.0-20190510022740-79c495ab728c
github.com/getlantern/golog v0.0.0-20201105130739-9586b8bde3a9 // indirect
diff --git a/go.sum b/go.sum
index 837be5d..5a763de 100644
--- a/go.sum
+++ b/go.sum
@@ -1,9 +1,7 @@
cloud.google.com/go v0.26.0/go.mod h1:aQUYkXzVsufM+DwF1aE+0xfcU+56JwCaLick0ClmMTw=
github.com/BurntSushi/toml v0.3.1/go.mod h1:xHWCNGjB5oqiDr8zfno3MHue2Ht5sIBksp03qcyfWMU=
-github.com/Mrs4s/MiraiGo v0.0.0-20201112150130-58e7c82fd2dd h1:n1llMhWgT5s/dBWtbg0NwDzXFAKWfwr1ZXxaErZkLfc=
-github.com/Mrs4s/MiraiGo v0.0.0-20201112150130-58e7c82fd2dd/go.mod h1:pAsWtMIwqkBXr5DkUpTIHoWQJNduVnX9WSBPmPvkuCs=
-github.com/Mrs4s/MiraiGo v0.0.0-20201113081613-b6a695d43d8e h1:3bXOOf9YxLpoF3jYdd5JB/QXggvvFrRNUyvCQysmIoU=
-github.com/Mrs4s/MiraiGo v0.0.0-20201113081613-b6a695d43d8e/go.mod h1:pAsWtMIwqkBXr5DkUpTIHoWQJNduVnX9WSBPmPvkuCs=
+github.com/Mrs4s/MiraiGo v0.0.0-20201113104655-b51d8b417c0c h1:6VOhZnNA6GpDcpsHSQ0tvZl5uFkxFjtE3F1y3WJCTYY=
+github.com/Mrs4s/MiraiGo v0.0.0-20201113104655-b51d8b417c0c/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=
From 998b8cb146d39fb2d054362413e6ada2434be105 Mon Sep 17 00:00:00 2001
From: Mrs4s <1844812067@qq.com>
Date: Fri, 13 Nov 2020 19:47:54 +0800
Subject: [PATCH 133/367] feature custom server address.
---
global/fs.go | 20 ++++++++++++++++++++
main.go | 8 ++++++++
2 files changed, 28 insertions(+)
diff --git a/global/fs.go b/global/fs.go
index bdf842c..f7661c5 100644
--- a/global/fs.go
+++ b/global/fs.go
@@ -10,10 +10,12 @@ import (
"github.com/dustin/go-humanize"
log "github.com/sirupsen/logrus"
"io/ioutil"
+ "net"
"net/url"
"os"
"path"
"runtime"
+ "strconv"
"strings"
)
@@ -110,6 +112,24 @@ func DelFile(path string) bool {
}
}
+func ReadAddrFile(path string) []*net.TCPAddr {
+ d, err := ioutil.ReadFile(path)
+ if err != nil {
+ return nil
+ }
+ str := string(d)
+ lines := strings.Split(str, "\n")
+ var ret []*net.TCPAddr
+ for _, l := range lines {
+ ip := strings.Split(l, ":")
+ if len(ip) == 2 {
+ port, _ := strconv.Atoi(ip[1])
+ ret = append(ret, &net.TCPAddr{IP: net.ParseIP(ip[0]), Port: port})
+ }
+ }
+ return ret
+}
+
type WriteCounter struct {
Total uint64
}
diff --git a/main.go b/main.go
index 1c89263..8c54053 100644
--- a/main.go
+++ b/main.go
@@ -246,6 +246,14 @@ func main() {
log.Debug("Protocol -> " + e.Message)
}
})
+ if global.PathExists("address.txt") {
+ log.Infof("检测到 address.txt 文件. 将覆盖目标IP.")
+ addr := global.ReadAddrFile("address.txt")
+ if len(addr) > 0 {
+ cli.SetCustomServer(addr)
+ }
+ log.Infof("读取到 %v 个自定义地址.", len(addr))
+ }
cli.OnServerUpdated(func(bot *client.QQClient, e *client.ServerUpdatedEvent) bool {
if !conf.UseSSOAddress {
log.Infof("收到服务器地址更新通知, 根据配置文件已忽略.")
From 9a018e2a47e8f4ffca83ff42f4b7f555af3d4fbc Mon Sep 17 00:00:00 2001
From: Mrs4s <1844812067@qq.com>
Date: Fri, 13 Nov 2020 19:51:03 +0800
Subject: [PATCH 134/367] doc update.
---
docs/config.md | 14 +++++++++++++-
1 file changed, 13 insertions(+), 1 deletion(-)
diff --git a/docs/config.md b/docs/config.md
index f9cb439..b675ac0 100644
--- a/docs/config.md
+++ b/docs/config.md
@@ -116,4 +116,16 @@ go-cqhttp 支持导入CQHTTP的配置文件, 具体步骤为:
| 1 | Android Phone | 无 |
| 2 | Android Watch | 除了 `Android Pad` 有的限制外还包括: 无法接收撤回消息 |
-> 注意, 根据协议的不同, 各类消息有所限制
\ No newline at end of file
+> 注意, 根据协议的不同, 各类消息有所限制
+
+## 自定义服务器IP
+
+> 某些海外服务器使用默认地址可能会存在链路问题,此功能可以指定 go-cqhttp 连接哪些地址以达到最优化.
+
+将文件 `address.txt` 创建到 `go-cqhttp` 工作目录, 并键入 `IP:PORT` 以换行符为分割即可.
+
+示例:
+````
+1.1.1.1:53
+1.1.2.2:8899
+````
\ No newline at end of file
From b3152bb5141025fe3f466fbcdb5b9aa26d882f73 Mon Sep 17 00:00:00 2001
From: Mrs4s <1844812067@qq.com>
Date: Fri, 13 Nov 2020 19:55:57 +0800
Subject: [PATCH 135/367] update MiraiGo.
---
coolq/api.go | 2 +-
docs/config.md | 4 ++--
go.mod | 2 +-
go.sum | 4 ++--
main.go | 4 ++--
server/apiAdmin.go | 4 ++--
6 files changed, 10 insertions(+), 10 deletions(-)
diff --git a/coolq/api.go b/coolq/api.go
index ee5ba17..ffb9f82 100644
--- a/coolq/api.go
+++ b/coolq/api.go
@@ -807,7 +807,7 @@ func (bot *CQBot) CQGetVersionInfo() MSG {
"version": Version,
"protocol": func() int {
switch client.SystemDeviceInfo.Protocol {
- case client.AndroidPad:
+ case client.IPad:
return 0
case client.AndroidPhone:
return 1
diff --git a/docs/config.md b/docs/config.md
index b675ac0..9f39b78 100644
--- a/docs/config.md
+++ b/docs/config.md
@@ -112,9 +112,9 @@ go-cqhttp 支持导入CQHTTP的配置文件, 具体步骤为:
| 值 | 类型 | 限制 |
| ---- | ------------- | ----------------------------------------------------- |
-| 0 | Android Pad | 无法接收 `group_notify` 事件、无法接收口令红包 |
+| 0 | iPad | 无 |
| 1 | Android Phone | 无 |
-| 2 | Android Watch | 除了 `Android Pad` 有的限制外还包括: 无法接收撤回消息 |
+| 2 | Android Watch | 无法接收 `group_notify` 事件、无法接收口令红包、无法接收撤回消息 |
> 注意, 根据协议的不同, 各类消息有所限制
diff --git a/go.mod b/go.mod
index 1bdd90c..3a32791 100644
--- a/go.mod
+++ b/go.mod
@@ -3,7 +3,7 @@ module github.com/Mrs4s/go-cqhttp
go 1.14
require (
- github.com/Mrs4s/MiraiGo v0.0.0-20201113104655-b51d8b417c0c
+ github.com/Mrs4s/MiraiGo v0.0.0-20201113113825-c1739dba15c9
github.com/dustin/go-humanize v1.0.0
github.com/getlantern/go-update v0.0.0-20190510022740-79c495ab728c
github.com/getlantern/golog v0.0.0-20201105130739-9586b8bde3a9 // indirect
diff --git a/go.sum b/go.sum
index 5a763de..c25bc76 100644
--- a/go.sum
+++ b/go.sum
@@ -1,7 +1,7 @@
cloud.google.com/go v0.26.0/go.mod h1:aQUYkXzVsufM+DwF1aE+0xfcU+56JwCaLick0ClmMTw=
github.com/BurntSushi/toml v0.3.1/go.mod h1:xHWCNGjB5oqiDr8zfno3MHue2Ht5sIBksp03qcyfWMU=
-github.com/Mrs4s/MiraiGo v0.0.0-20201113104655-b51d8b417c0c h1:6VOhZnNA6GpDcpsHSQ0tvZl5uFkxFjtE3F1y3WJCTYY=
-github.com/Mrs4s/MiraiGo v0.0.0-20201113104655-b51d8b417c0c/go.mod h1:pAsWtMIwqkBXr5DkUpTIHoWQJNduVnX9WSBPmPvkuCs=
+github.com/Mrs4s/MiraiGo v0.0.0-20201113113825-c1739dba15c9 h1:7mFBaoEz2HCIkUqfiW1EtpsZEhxfupEda8+EMeuNS+4=
+github.com/Mrs4s/MiraiGo v0.0.0-20201113113825-c1739dba15c9/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=
diff --git a/main.go b/main.go
index 8c54053..b3ef74f 100644
--- a/main.go
+++ b/main.go
@@ -226,8 +226,8 @@ func main() {
log.Info("开始尝试登录并同步消息...")
log.Infof("使用协议: %v", func() string {
switch client.SystemDeviceInfo.Protocol {
- case client.AndroidPad:
- return "Android Pad"
+ case client.IPad:
+ return "iPad"
case client.AndroidPhone:
return "Android Phone"
case client.AndroidWatch:
diff --git a/server/apiAdmin.go b/server/apiAdmin.go
index 0790307..51acecc 100644
--- a/server/apiAdmin.go
+++ b/server/apiAdmin.go
@@ -340,8 +340,8 @@ func (s *webServer) DoReLogin() { // TODO: 协议层的 ReLogin
log.Info("开始尝试登录并同步消息...")
log.Infof("使用协议: %v", func() string {
switch client.SystemDeviceInfo.Protocol {
- case client.AndroidPad:
- return "Android Pad"
+ case client.IPad:
+ return "iPad"
case client.AndroidPhone:
return "Android Phone"
case client.AndroidWatch:
From 5b0ede5346b48e225d29adab63753b36c5916ad0 Mon Sep 17 00:00:00 2001
From: wdvxdr
Date: Fri, 13 Nov 2020 22:32:00 +0800
Subject: [PATCH 136/367] add some gift id
---
coolq/cqcode.go | 9 +++++++--
docs/cqhttp.md | 6 ++++++
docs/quick_start.md | 24 ++++++++++++++++++++++++
go.mod | 14 +++++++++++++-
go.sum | 37 +++++++++++++++++++++++++++++++++++++
5 files changed, 87 insertions(+), 3 deletions(-)
diff --git a/coolq/cqcode.go b/coolq/cqcode.go
index e15305f..631a229 100644
--- a/coolq/cqcode.go
+++ b/coolq/cqcode.go
@@ -65,7 +65,7 @@ func (e *MusicElement) Type() message.ElementType {
return message.Service
}
-var GiftId = []message.GroupGift{
+var GiftId = [...]message.GroupGift{
message.SweetWink,
message.HappyCola,
message.LuckyBracelet,
@@ -75,6 +75,11 @@ var GiftId = []message.GroupGift{
message.RainbowCandy,
message.Stronger,
message.LoveMicrophone,
+ message.HoldingYourHand,
+ message.CuteCat,
+ message.MysteryMask,
+ message.ImBusy,
+ message.LoveMask,
}
func (e *PokeElement) Type() message.ElementType {
@@ -440,7 +445,7 @@ func (bot *CQBot) ToElement(t string, d map[string]string, group bool) (m interf
}
t, _ := strconv.ParseInt(d["qq"], 10, 64)
id, _ := strconv.Atoi(d["id"])
- if id < 0 || id >= 9 {
+ if id < 0 || id >= 14 {
return nil, errors.New("invalid gift id")
}
return &GiftElement{Target: t, GiftId: GiftId[id]}, nil
diff --git a/docs/cqhttp.md b/docs/cqhttp.md
index 09b2c0d..396bd05 100644
--- a/docs/cqhttp.md
+++ b/docs/cqhttp.md
@@ -98,6 +98,12 @@ Type: `gift`
| 6 | 彩虹糖果 |
| 7 | 坚强 |
| 8 | 告白话筒 |
+| 9 | 牵你的手 |
+| 10 | 可爱猫咪 |
+| 11 | 神秘面具 |
+| 12 | 我超忙的 |
+| 13 | 爱心口罩 |
+
示例: `[CQ:gift,qq=123456,id=8]`
diff --git a/docs/quick_start.md b/docs/quick_start.md
index d95c2b2..67fcbab 100644
--- a/docs/quick_start.md
+++ b/docs/quick_start.md
@@ -119,5 +119,29 @@ enable ws?(Y/n)
*注:此时构建后的文件名为*`main`(Linux)或`main.exe`(Windows)
+## 更新
+### 方法一
+从[release] (https://github.com/Mrs4s/go-cqhttp/releases)界面下载最新版本的go-cqhttp
+并替换之前的版本
+
+### 方法二
+
+使用更新参数,在命令行中打开go-cqhttp所在目录
+#### windows
+输入指令
+`go-cqhttp.exe update`
+
+如果在国内连接github下载速度可能很慢,可以使用镜像源下载
+
+`go-cqhttp.exe update https://github.rc1844.workers.dev`
+
+几个可用的镜像源
+- `https://hub.fastgit.org`
+- `https://github.com.cnpmjs.org`
+- `https://github.bajins.com`
+- `https://github.rc1844.workers.dev`
+
+#### linux
+方法与windows基本一致,将 `go-cqhttp.exe` 替换为 `./go-cqhttp`即可
\ No newline at end of file
diff --git a/go.mod b/go.mod
index 3a32791..67b0636 100644
--- a/go.mod
+++ b/go.mod
@@ -3,24 +3,36 @@ module github.com/Mrs4s/go-cqhttp
go 1.14
require (
- github.com/Mrs4s/MiraiGo v0.0.0-20201113113825-c1739dba15c9
+ github.com/Mrs4s/MiraiGo v0.0.0-20201113135440-20e56a777874
github.com/dustin/go-humanize v1.0.0
github.com/getlantern/go-update v0.0.0-20190510022740-79c495ab728c
github.com/getlantern/golog v0.0.0-20201105130739-9586b8bde3a9 // indirect
+ github.com/getlantern/ops v0.0.0-20200403153110-8476b16edcd6 // indirect
github.com/gin-gonic/gin v1.6.3
+ github.com/go-playground/validator/v10 v10.4.1 // indirect
+ github.com/golang/snappy v0.0.2 // indirect
github.com/gorilla/websocket v1.4.2
github.com/guonaihong/gout v0.1.3
+ github.com/json-iterator/go v1.1.10 // 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
github.com/lestrrat-go/strftime v1.0.3 // indirect
+ github.com/modern-go/concurrent v0.0.0-20180306012644-bacd9c7ef1dd // indirect
+ github.com/modern-go/reflect2 v1.0.1 // indirect
github.com/pkg/errors v0.9.1 // indirect
github.com/rifflock/lfshook v0.0.0-20180920164130-b9218ef580f5
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/tidwall/gjson v1.6.3
+ github.com/tidwall/match v1.0.2 // indirect
+ github.com/ugorji/go v1.2.0 // indirect
github.com/wdvxdr1123/go-silk v0.0.0-20201007123416-b982fd3d91d6
github.com/yinghau76/go-ascii-art v0.0.0-20190517192627-e7f465a30189
+ golang.org/x/crypto v0.0.0-20201112155050-0c6587e931a9 // indirect
+ golang.org/x/net v0.0.0-20201110031124-69a78807bb2b // indirect
+ golang.org/x/sys v0.0.0-20201113135734-0a15ea8d9b02 // indirect
golang.org/x/time v0.0.0-20200630173020-3af7569d3a1e
+ gopkg.in/yaml.v2 v2.3.0 // indirect
)
diff --git a/go.sum b/go.sum
index c25bc76..d2ef52a 100644
--- a/go.sum
+++ b/go.sum
@@ -2,6 +2,8 @@ cloud.google.com/go v0.26.0/go.mod h1:aQUYkXzVsufM+DwF1aE+0xfcU+56JwCaLick0ClmMT
github.com/BurntSushi/toml v0.3.1/go.mod h1:xHWCNGjB5oqiDr8zfno3MHue2Ht5sIBksp03qcyfWMU=
github.com/Mrs4s/MiraiGo v0.0.0-20201113113825-c1739dba15c9 h1:7mFBaoEz2HCIkUqfiW1EtpsZEhxfupEda8+EMeuNS+4=
github.com/Mrs4s/MiraiGo v0.0.0-20201113113825-c1739dba15c9/go.mod h1:pAsWtMIwqkBXr5DkUpTIHoWQJNduVnX9WSBPmPvkuCs=
+github.com/Mrs4s/MiraiGo v0.0.0-20201113135440-20e56a777874 h1:lxsD1Ja+TNNtr0S3ogtCzKpy44NoiaNrND9l7+s9Ds0=
+github.com/Mrs4s/MiraiGo v0.0.0-20201113135440-20e56a777874/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=
@@ -25,6 +27,8 @@ github.com/getlantern/hidden v0.0.0-20190325191715-f02dbb02be55 h1:XYzSdCbkzOC0F
github.com/getlantern/hidden v0.0.0-20190325191715-f02dbb02be55/go.mod h1:6mmzY2kW1TOOrVy+r41Za2MxXM+hhqTtY3oBKd2AgFA=
github.com/getlantern/ops v0.0.0-20190325191751-d70cb0d6f85f h1:wrYrQttPS8FHIRSlsrcuKazukx/xqO/PpLZzZXsF+EA=
github.com/getlantern/ops v0.0.0-20190325191751-d70cb0d6f85f/go.mod h1:D5ao98qkA6pxftxoqzibIBBrLSUli+kYnJqrgBf9cIA=
+github.com/getlantern/ops v0.0.0-20200403153110-8476b16edcd6 h1:QthAQCekS1YOeYWSvoHI6ZatlG4B+GBDLxV/2ZkBsTA=
+github.com/getlantern/ops v0.0.0-20200403153110-8476b16edcd6/go.mod h1:D5ao98qkA6pxftxoqzibIBBrLSUli+kYnJqrgBf9cIA=
github.com/gin-contrib/sse v0.1.0 h1:Y/yl/+YNO8GZSjAhjMsSuLt29uWRFHdHYUb5lYOV9qE=
github.com/gin-contrib/sse v0.1.0/go.mod h1:RHrZQHXnP2xjPF+u1gW/2HnVO7nvIa9PG3Gm+fLHvGI=
github.com/gin-gonic/gin v1.5.0/go.mod h1:Nd6IXA8m5kNZdNEHMBd93KT+mdY3+bewLgRvmCsR2Do=
@@ -39,6 +43,8 @@ github.com/go-playground/universal-translator v0.17.0 h1:icxd5fm+REJzpZx7ZfpaD87
github.com/go-playground/universal-translator v0.17.0/go.mod h1:UkSxE5sNxxRwHyU+Scu5vgOQjsIJAF8j9muTVoKLVtA=
github.com/go-playground/validator/v10 v10.2.0 h1:KgJ0snyC2R9VXYN2rneOtQcw5aHQB1Vv0sFl1UcHBOY=
github.com/go-playground/validator/v10 v10.2.0/go.mod h1:uOYAAleCW8F/7oMFd6aG0GOhaH6EGOAJShg8Id5JGkI=
+github.com/go-playground/validator/v10 v10.4.1 h1:pH2c5ADXtd66mxoE0Zm9SUhxE20r7aM3F26W0hOn+GE=
+github.com/go-playground/validator/v10 v10.4.1/go.mod h1:nlOn6nFhuKACm19sB/8EGNn9GlaMV7XkbRSipzJ0Ii4=
github.com/go-stack/stack v1.8.0 h1:5SgMzNM5HxrEjV0ww2lTmX6E2Izsfxas4+YHWRs3Lsk=
github.com/go-stack/stack v1.8.0/go.mod h1:v0f6uXyyMGvRgIKkXu+yp6POWl0qKG85gN/melR3HDY=
github.com/golang/glog v0.0.0-20160126235308-23def4e6c14b/go.mod h1:SBH7ygxi8pfUlaOkMMuAQtPIUF8ecWP5IEl/CR7VP2Q=
@@ -56,6 +62,8 @@ github.com/golang/protobuf v1.4.3 h1:JjCZWpVbqXDqFVmTfYWEVTMIYrL/NPdPSCHPJ0T/raM
github.com/golang/protobuf v1.4.3/go.mod h1:oDoupMAO8OvCJWAcko0GGGIgR6R6ocIYbsSw735rRwI=
github.com/golang/snappy v0.0.0-20180518054509-2e65f85255db h1:woRePGFeVFfLKN/pOkfl+p/TAqKOfFu+7KPlMVpok/w=
github.com/golang/snappy v0.0.0-20180518054509-2e65f85255db/go.mod h1:/XxbfmMg8lxefKM7IXC3fBNl/7bRcc72aCRzEWrmP2Q=
+github.com/golang/snappy v0.0.2 h1:aeE13tS0IiQgFjYdoL8qN3K1N2bXXtI6Vi51/y7BpMw=
+github.com/golang/snappy v0.0.2/go.mod h1:/XxbfmMg8lxefKM7IXC3fBNl/7bRcc72aCRzEWrmP2Q=
github.com/google/go-cmp v0.2.0/go.mod h1:oXzfMopK8JAjlY9xF4vHSVASa0yLyX7SntLO5aqRK0M=
github.com/google/go-cmp v0.3.0/go.mod h1:8QqcDgzrUqlUb/G2PQTWiueGozuR1884gddMywk6iLU=
github.com/google/go-cmp v0.3.1/go.mod h1:8QqcDgzrUqlUb/G2PQTWiueGozuR1884gddMywk6iLU=
@@ -69,7 +77,10 @@ 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/json-iterator/go v1.1.7/go.mod h1:KdQUCv79m/52Kvf8AW2vK1V8akMuk1QjK/uOdHXbAo4=
+github.com/json-iterator/go v1.1.9 h1:9yzud/Ht36ygwatGx56VwCZtlI/2AD15T1X2sjSuGns=
github.com/json-iterator/go v1.1.9/go.mod h1:KdQUCv79m/52Kvf8AW2vK1V8akMuk1QjK/uOdHXbAo4=
+github.com/json-iterator/go v1.1.10 h1:Kz6Cvnvv2wGdaG/V8yMvfkmNiXq9Ya2KUv4rouJJr68=
+github.com/json-iterator/go v1.1.10/go.mod h1:KdQUCv79m/52Kvf8AW2vK1V8akMuk1QjK/uOdHXbAo4=
github.com/kardianos/osext v0.0.0-20190222173326-2bc1f35cddc0 h1:iQTw/8FWTuc7uiaSepXwyf3o52HaUYcV+Tu66S3F5GA=
github.com/kardianos/osext v0.0.0-20190222173326-2bc1f35cddc0/go.mod h1:1NbS8ALrpOvjt0rHPNLyCIeMtbizbir8U//inJ+zuB8=
github.com/konsorten/go-windows-terminal-sequences v1.0.1/go.mod h1:T0+1ngSBFLxvqU3pZ+m/2kptfBszLMUkC4ZK/EgS/cQ=
@@ -86,8 +97,14 @@ github.com/lestrrat-go/strftime v1.0.3/go.mod h1:E1nN3pCbtMSu1yjSVeyuRFVm/U0xoR7
github.com/mattn/go-isatty v0.0.9/go.mod h1:YNRxwqDuOph6SZLI9vUUz6OYw3QyUt7WiY2yME+cCiQ=
github.com/mattn/go-isatty v0.0.12 h1:wuysRhFDzyxgEmMf5xjvJ2M9dZoWAXNNr5LSBS7uHXY=
github.com/mattn/go-isatty v0.0.12/go.mod h1:cbi8OIDigv2wuxKPP5vlRcQ1OAZbq2CE4Kysco4FUpU=
+github.com/modern-go/concurrent v0.0.0-20180228061459-e0a39a4cb421 h1:ZqeYNhU3OHLH3mGKHDcjJRFFRrJa6eAM5H+CtDdOsPc=
github.com/modern-go/concurrent v0.0.0-20180228061459-e0a39a4cb421/go.mod h1:6dJC0mAP4ikYIbvyc7fijjWJddQyLn8Ig3JB5CqoB9Q=
+github.com/modern-go/concurrent v0.0.0-20180306012644-bacd9c7ef1dd h1:TRLaZ9cD/w8PVh93nsPXa1VrQ6jlwL5oN8l14QlcNfg=
+github.com/modern-go/concurrent v0.0.0-20180306012644-bacd9c7ef1dd/go.mod h1:6dJC0mAP4ikYIbvyc7fijjWJddQyLn8Ig3JB5CqoB9Q=
+github.com/modern-go/reflect2 v0.0.0-20180701023420-4b7aa43c6742 h1:Esafd1046DLDQ0W1YjYsBW+p8U2u7vzgW2SQVmlNazg=
github.com/modern-go/reflect2 v0.0.0-20180701023420-4b7aa43c6742/go.mod h1:bx2lNnkwVCuqBIxFjflWJWanXIb3RllmbCylyMrvgv0=
+github.com/modern-go/reflect2 v1.0.1 h1:9f412s+6RmYXLWZSEzVVgPGK7C2PphHj5RJrvfx9AWI=
+github.com/modern-go/reflect2 v1.0.1/go.mod h1:bx2lNnkwVCuqBIxFjflWJWanXIb3RllmbCylyMrvgv0=
github.com/nfnt/resize v0.0.0-20180221191011-83c6a9932646 h1:zYyBkD/k9seD2A7fsi6Oo2LfFZAehjjQMERAvZLEDnQ=
github.com/nfnt/resize v0.0.0-20180221191011-83c6a9932646/go.mod h1:jpp1/29i3P1S/RLdc7JQKbRpFeM1dOBd8T9ki5s+AY8=
github.com/onsi/ginkgo v1.6.0/go.mod h1:lLunBs/Ym6LB5Z9jYTR76FiuTmxDTDusOGeTQH+WWjE=
@@ -119,17 +136,27 @@ github.com/tidwall/gjson v1.6.3 h1:aHoiiem0dr7GHkW001T1SMTJ7X5PvyekH5WX0whWGnI=
github.com/tidwall/gjson v1.6.3/go.mod h1:BaHyNc5bjzYkPqgLq7mdVzeiRtULKULXLgZFKsxEHI0=
github.com/tidwall/match v1.0.1 h1:PnKP62LPNxHKTwvHHZZzdOAOCtsJTjo6dZLCwpKm5xc=
github.com/tidwall/match v1.0.1/go.mod h1:LujAq0jyVjBy028G1WhWfIzbpQfMO8bBZ6Tyb0+pL9E=
+github.com/tidwall/match v1.0.2 h1:uuqvHuBGSedK7awZ2YoAtpnimfwBGFjHuWLuLqQj+bU=
+github.com/tidwall/match v1.0.2/go.mod h1:LujAq0jyVjBy028G1WhWfIzbpQfMO8bBZ6Tyb0+pL9E=
github.com/tidwall/pretty v1.0.2 h1:Z7S3cePv9Jwm1KwS0513MRaoUe3S01WPbLNV40pwWZU=
github.com/tidwall/pretty v1.0.2/go.mod h1:XNkn88O1ChpSDQmQeStsy+sBenx6DDtFZJxhVysOjyk=
github.com/ugorji/go v1.1.7 h1:/68gy2h+1mWMrwZFeD1kQialdSzAb432dtpeJ42ovdo=
github.com/ugorji/go v1.1.7/go.mod h1:kZn38zHttfInRq0xu/PH0az30d+z6vm202qpg1oXVMw=
+github.com/ugorji/go v1.2.0 h1:6eXlzYLLwZwXroJx9NyqbYcbv/d93twiOzQLDewE6qM=
+github.com/ugorji/go v1.2.0/go.mod h1:1ny++pKMXhLWrwWV5Nf+CbOuZJhMoaFD+0GMFfd8fEc=
github.com/ugorji/go/codec v1.1.7 h1:2SvQaVZ1ouYrrKKwoSk2pzd4A9evlKJb9oTL+OaLUSs=
github.com/ugorji/go/codec v1.1.7/go.mod h1:Ax+UKWsSmolVDwsd+7N3ZtXu+yMGCf907BLYF3GoBXY=
+github.com/ugorji/go/codec v1.2.0 h1:As6RccOIlbm9wHuWYMlB30dErcI+4WiKWsYsmPkyrUw=
+github.com/ugorji/go/codec v1.2.0/go.mod h1:dXvG35r7zTX6QImXOSFhGMmKtX+wJ7VTWzGvYQGIjBs=
github.com/wdvxdr1123/go-silk v0.0.0-20201007123416-b982fd3d91d6 h1:lX18MCdNzT2zIi7K02x4C5cPkDXpL+wCb1YTAMXjLWQ=
github.com/wdvxdr1123/go-silk v0.0.0-20201007123416-b982fd3d91d6/go.mod h1:5q9LFlBr+yX/J8Jd/9wHdXwkkjFkNyQIS7kX2Lgx/Zs=
github.com/yinghau76/go-ascii-art v0.0.0-20190517192627-e7f465a30189 h1:4UJw9if55Fu3HOwbfcaQlJ27p3oeJU2JZqoeT3ITJQk=
github.com/yinghau76/go-ascii-art v0.0.0-20190517192627-e7f465a30189/go.mod h1:rIrm5geMiBhPQkdfUm8gDFi/WiHneOp1i9KjmJqc+9I=
golang.org/x/crypto v0.0.0-20190308221718-c2843e01d9a2/go.mod h1:djNgcEr1/C05ACkg1iLfiJU5Ep61QUkGW8qpdssI0+w=
+golang.org/x/crypto v0.0.0-20200622213623-75b288015ac9 h1:psW17arqaxU48Z5kZ0CQnkZWQJsqcURM6tKiBApRjXI=
+golang.org/x/crypto v0.0.0-20200622213623-75b288015ac9/go.mod h1:LzIPMQfyMNhhGPhUkYOs5KpL4U8rLKemX1yGLhDgUto=
+golang.org/x/crypto v0.0.0-20201112155050-0c6587e931a9 h1:umElSU9WZirRdgu2yFHY0ayQkEnKiOC1TtM3fWXFnoU=
+golang.org/x/crypto v0.0.0-20201112155050-0c6587e931a9/go.mod h1:LzIPMQfyMNhhGPhUkYOs5KpL4U8rLKemX1yGLhDgUto=
golang.org/x/exp v0.0.0-20190121172915-509febef88a4/go.mod h1:CJ0aWSM057203Lf6IL+f9T1iT9GByDxfZKAQTCR3kQA=
golang.org/x/lint v0.0.0-20181026193005-c67002cb31c3/go.mod h1:UVdnD1Gm6xHRNCYTkRU2/jEulfH38KcIWyp/GAMgvoE=
golang.org/x/lint v0.0.0-20190227174305-5b3e6a55c961/go.mod h1:wehouNa3lNwaWXcvxsM5YxQ5yQlVC4a0KAMCusXpPoU=
@@ -139,8 +166,11 @@ golang.org/x/net v0.0.0-20180826012351-8a410e7b638d/go.mod h1:mL1N/T3taQHkDXs73r
golang.org/x/net v0.0.0-20180906233101-161cd47e91fd/go.mod h1:mL1N/T3taQHkDXs73rZJwtUhF3w3ftmwwsq0BUmARs4=
golang.org/x/net v0.0.0-20190213061140-3a22650c66bd/go.mod h1:mL1N/T3taQHkDXs73rZJwtUhF3w3ftmwwsq0BUmARs4=
golang.org/x/net v0.0.0-20190311183353-d8887717615a/go.mod h1:t9HGtf8HONx5eT2rtn7q6eTqICYqUVnKs3thJo3Qplg=
+golang.org/x/net v0.0.0-20190404232315-eb5bcb51f2a3/go.mod h1:t9HGtf8HONx5eT2rtn7q6eTqICYqUVnKs3thJo3Qplg=
golang.org/x/net v0.0.0-20200114155413-6afb5195e5aa h1:F+8P+gmewFQYRk6JoLQLwjBCTu3mcIURZfNkVweuRKA=
golang.org/x/net v0.0.0-20200114155413-6afb5195e5aa/go.mod h1:z5CRVTTTmAJ677TzLLGU+0bjPO0LkuOLi4/5GtJWs/s=
+golang.org/x/net v0.0.0-20201110031124-69a78807bb2b h1:uwuIcX0g4Yl1NC5XAz37xsr2lTtcqevgzYNVt49waME=
+golang.org/x/net v0.0.0-20201110031124-69a78807bb2b/go.mod h1:sp8m0HH+o8qH0wwXwYZr8TS3Oi6o0r6Gce1SSxlDquU=
golang.org/x/oauth2 v0.0.0-20180821212333-d2e6202438be/go.mod h1:N/0e6XlmueqKjAGxoOufVs8QHGRruUQn6yWY3a++T0U=
golang.org/x/sync v0.0.0-20180314180146-1d60e4601c6f/go.mod h1:RxMgew5VJxzue5/jJTE5uejpjVlOe/izrB70Jof72aM=
golang.org/x/sync v0.0.0-20181108010431-42b317875d0f/go.mod h1:RxMgew5VJxzue5/jJTE5uejpjVlOe/izrB70Jof72aM=
@@ -148,13 +178,18 @@ golang.org/x/sync v0.0.0-20190423024810-112230192c58/go.mod h1:RxMgew5VJxzue5/jJ
golang.org/x/sys v0.0.0-20180830151530-49385e6e1522/go.mod h1:STP8DvDyc/dI5b8T5hshtkjS+E42TnysNCUPdjciGhY=
golang.org/x/sys v0.0.0-20180909124046-d0be0721c37e/go.mod h1:STP8DvDyc/dI5b8T5hshtkjS+E42TnysNCUPdjciGhY=
golang.org/x/sys v0.0.0-20190215142949-d0b11bdaac8a/go.mod h1:STP8DvDyc/dI5b8T5hshtkjS+E42TnysNCUPdjciGhY=
+golang.org/x/sys v0.0.0-20190412213103-97732733099d/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs=
golang.org/x/sys v0.0.0-20190422165155-953cdadca894/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs=
golang.org/x/sys v0.0.0-20190813064441-fde4db37ae7a/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs=
golang.org/x/sys v0.0.0-20191026070338-33540a1f6037/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs=
golang.org/x/sys v0.0.0-20200116001909-b77594299b42 h1:vEOn+mP2zCOVzKckCZy6YsCtDblrpj/w7B9nxGNELpg=
golang.org/x/sys v0.0.0-20200116001909-b77594299b42/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs=
+golang.org/x/sys v0.0.0-20200930185726-fdedc70b468f/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs=
+golang.org/x/sys v0.0.0-20201113135734-0a15ea8d9b02 h1:5Ftd3YbC/kANXWCBjvppvUmv1BMakgFcBKA7MpYYp4M=
+golang.org/x/sys v0.0.0-20201113135734-0a15ea8d9b02/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs=
golang.org/x/text v0.3.0/go.mod h1:NqM8EUOU14njkJ3fqMW+pc6Ldnwhi/IjpwHt7yyuwOQ=
golang.org/x/text v0.3.2/go.mod h1:bEr9sfX3Q8Zfm5fL9x+3itogRgK3+ptLWKqgva+5dAk=
+golang.org/x/text v0.3.3/go.mod h1:5Zoc/QRtKVWzQhOtBMvqHzDpF6irO9z98xDceosuGiQ=
golang.org/x/time v0.0.0-20200630173020-3af7569d3a1e h1:EHBhcS0mlXEAVwNyO2dLfjToGsyY4j24pTs2ScHnX7s=
golang.org/x/time v0.0.0-20200630173020-3af7569d3a1e/go.mod h1:tRJNPiyCQ0inRvYxbN9jk5I+vvW/OXSQhTDSoE431IQ=
golang.org/x/tools v0.0.0-20180917221912-90fa682c2a6e/go.mod h1:n7NCudcB/nEzxVGmLbDWY5pfWTLqBcC2KZ6jyYvM4mQ=
@@ -190,5 +225,7 @@ gopkg.in/yaml.v2 v2.2.1/go.mod h1:hI93XBmqTisBFMUTm0b8Fm+jr3Dg1NNxqwp+5A1VGuI=
gopkg.in/yaml.v2 v2.2.2/go.mod h1:hI93XBmqTisBFMUTm0b8Fm+jr3Dg1NNxqwp+5A1VGuI=
gopkg.in/yaml.v2 v2.2.8 h1:obN1ZagJSUGI0Ek/LBmuj4SNLPfIny3KsKFopxRdj10=
gopkg.in/yaml.v2 v2.2.8/go.mod h1:hI93XBmqTisBFMUTm0b8Fm+jr3Dg1NNxqwp+5A1VGuI=
+gopkg.in/yaml.v2 v2.3.0 h1:clyUAQHOM3G0M3f5vQj7LuJrETvjVot3Z5el9nffUtU=
+gopkg.in/yaml.v2 v2.3.0/go.mod h1:hI93XBmqTisBFMUTm0b8Fm+jr3Dg1NNxqwp+5A1VGuI=
honnef.co/go/tools v0.0.0-20190102054323-c2f93a96b099/go.mod h1:rf3lG4BRIbNafJWhAfAdb/ePZxsR/4RtNHQocxwk9r4=
honnef.co/go/tools v0.0.0-20190523083050-ea95bdfd59fc/go.mod h1:rf3lG4BRIbNafJWhAfAdb/ePZxsR/4RtNHQocxwk9r4=
From 3e5c2bc8e3e4bf6a65c6979235cfbe3dc3c25233 Mon Sep 17 00:00:00 2001
From: Mrs4s <1844812067@qq.com>
Date: Sat, 14 Nov 2020 15:18:41 +0800
Subject: [PATCH 137/367] update MiraiGo.
---
go.mod | 14 +-------------
go.sum | 41 ++---------------------------------------
2 files changed, 3 insertions(+), 52 deletions(-)
diff --git a/go.mod b/go.mod
index 67b0636..00629da 100644
--- a/go.mod
+++ b/go.mod
@@ -3,36 +3,24 @@ module github.com/Mrs4s/go-cqhttp
go 1.14
require (
- github.com/Mrs4s/MiraiGo v0.0.0-20201113135440-20e56a777874
+ github.com/Mrs4s/MiraiGo v0.0.0-20201114071121-b813765774d7
github.com/dustin/go-humanize v1.0.0
github.com/getlantern/go-update v0.0.0-20190510022740-79c495ab728c
github.com/getlantern/golog v0.0.0-20201105130739-9586b8bde3a9 // indirect
- github.com/getlantern/ops v0.0.0-20200403153110-8476b16edcd6 // indirect
github.com/gin-gonic/gin v1.6.3
- github.com/go-playground/validator/v10 v10.4.1 // indirect
- github.com/golang/snappy v0.0.2 // indirect
github.com/gorilla/websocket v1.4.2
github.com/guonaihong/gout v0.1.3
- github.com/json-iterator/go v1.1.10 // 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
github.com/lestrrat-go/strftime v1.0.3 // indirect
- github.com/modern-go/concurrent v0.0.0-20180306012644-bacd9c7ef1dd // indirect
- github.com/modern-go/reflect2 v1.0.1 // indirect
github.com/pkg/errors v0.9.1 // indirect
github.com/rifflock/lfshook v0.0.0-20180920164130-b9218ef580f5
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/tidwall/gjson v1.6.3
- github.com/tidwall/match v1.0.2 // indirect
- github.com/ugorji/go v1.2.0 // indirect
github.com/wdvxdr1123/go-silk v0.0.0-20201007123416-b982fd3d91d6
github.com/yinghau76/go-ascii-art v0.0.0-20190517192627-e7f465a30189
- golang.org/x/crypto v0.0.0-20201112155050-0c6587e931a9 // indirect
- golang.org/x/net v0.0.0-20201110031124-69a78807bb2b // indirect
- golang.org/x/sys v0.0.0-20201113135734-0a15ea8d9b02 // indirect
golang.org/x/time v0.0.0-20200630173020-3af7569d3a1e
- gopkg.in/yaml.v2 v2.3.0 // indirect
)
diff --git a/go.sum b/go.sum
index d2ef52a..910b372 100644
--- a/go.sum
+++ b/go.sum
@@ -1,9 +1,7 @@
cloud.google.com/go v0.26.0/go.mod h1:aQUYkXzVsufM+DwF1aE+0xfcU+56JwCaLick0ClmMTw=
github.com/BurntSushi/toml v0.3.1/go.mod h1:xHWCNGjB5oqiDr8zfno3MHue2Ht5sIBksp03qcyfWMU=
-github.com/Mrs4s/MiraiGo v0.0.0-20201113113825-c1739dba15c9 h1:7mFBaoEz2HCIkUqfiW1EtpsZEhxfupEda8+EMeuNS+4=
-github.com/Mrs4s/MiraiGo v0.0.0-20201113113825-c1739dba15c9/go.mod h1:pAsWtMIwqkBXr5DkUpTIHoWQJNduVnX9WSBPmPvkuCs=
-github.com/Mrs4s/MiraiGo v0.0.0-20201113135440-20e56a777874 h1:lxsD1Ja+TNNtr0S3ogtCzKpy44NoiaNrND9l7+s9Ds0=
-github.com/Mrs4s/MiraiGo v0.0.0-20201113135440-20e56a777874/go.mod h1:pAsWtMIwqkBXr5DkUpTIHoWQJNduVnX9WSBPmPvkuCs=
+github.com/Mrs4s/MiraiGo v0.0.0-20201114071121-b813765774d7 h1:/vnL6vhst5buzs7YwVxEZe6NuZDdayb/e7gEZ5n+YWg=
+github.com/Mrs4s/MiraiGo v0.0.0-20201114071121-b813765774d7/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=
@@ -27,8 +25,6 @@ github.com/getlantern/hidden v0.0.0-20190325191715-f02dbb02be55 h1:XYzSdCbkzOC0F
github.com/getlantern/hidden v0.0.0-20190325191715-f02dbb02be55/go.mod h1:6mmzY2kW1TOOrVy+r41Za2MxXM+hhqTtY3oBKd2AgFA=
github.com/getlantern/ops v0.0.0-20190325191751-d70cb0d6f85f h1:wrYrQttPS8FHIRSlsrcuKazukx/xqO/PpLZzZXsF+EA=
github.com/getlantern/ops v0.0.0-20190325191751-d70cb0d6f85f/go.mod h1:D5ao98qkA6pxftxoqzibIBBrLSUli+kYnJqrgBf9cIA=
-github.com/getlantern/ops v0.0.0-20200403153110-8476b16edcd6 h1:QthAQCekS1YOeYWSvoHI6ZatlG4B+GBDLxV/2ZkBsTA=
-github.com/getlantern/ops v0.0.0-20200403153110-8476b16edcd6/go.mod h1:D5ao98qkA6pxftxoqzibIBBrLSUli+kYnJqrgBf9cIA=
github.com/gin-contrib/sse v0.1.0 h1:Y/yl/+YNO8GZSjAhjMsSuLt29uWRFHdHYUb5lYOV9qE=
github.com/gin-contrib/sse v0.1.0/go.mod h1:RHrZQHXnP2xjPF+u1gW/2HnVO7nvIa9PG3Gm+fLHvGI=
github.com/gin-gonic/gin v1.5.0/go.mod h1:Nd6IXA8m5kNZdNEHMBd93KT+mdY3+bewLgRvmCsR2Do=
@@ -43,8 +39,6 @@ github.com/go-playground/universal-translator v0.17.0 h1:icxd5fm+REJzpZx7ZfpaD87
github.com/go-playground/universal-translator v0.17.0/go.mod h1:UkSxE5sNxxRwHyU+Scu5vgOQjsIJAF8j9muTVoKLVtA=
github.com/go-playground/validator/v10 v10.2.0 h1:KgJ0snyC2R9VXYN2rneOtQcw5aHQB1Vv0sFl1UcHBOY=
github.com/go-playground/validator/v10 v10.2.0/go.mod h1:uOYAAleCW8F/7oMFd6aG0GOhaH6EGOAJShg8Id5JGkI=
-github.com/go-playground/validator/v10 v10.4.1 h1:pH2c5ADXtd66mxoE0Zm9SUhxE20r7aM3F26W0hOn+GE=
-github.com/go-playground/validator/v10 v10.4.1/go.mod h1:nlOn6nFhuKACm19sB/8EGNn9GlaMV7XkbRSipzJ0Ii4=
github.com/go-stack/stack v1.8.0 h1:5SgMzNM5HxrEjV0ww2lTmX6E2Izsfxas4+YHWRs3Lsk=
github.com/go-stack/stack v1.8.0/go.mod h1:v0f6uXyyMGvRgIKkXu+yp6POWl0qKG85gN/melR3HDY=
github.com/golang/glog v0.0.0-20160126235308-23def4e6c14b/go.mod h1:SBH7ygxi8pfUlaOkMMuAQtPIUF8ecWP5IEl/CR7VP2Q=
@@ -62,8 +56,6 @@ github.com/golang/protobuf v1.4.3 h1:JjCZWpVbqXDqFVmTfYWEVTMIYrL/NPdPSCHPJ0T/raM
github.com/golang/protobuf v1.4.3/go.mod h1:oDoupMAO8OvCJWAcko0GGGIgR6R6ocIYbsSw735rRwI=
github.com/golang/snappy v0.0.0-20180518054509-2e65f85255db h1:woRePGFeVFfLKN/pOkfl+p/TAqKOfFu+7KPlMVpok/w=
github.com/golang/snappy v0.0.0-20180518054509-2e65f85255db/go.mod h1:/XxbfmMg8lxefKM7IXC3fBNl/7bRcc72aCRzEWrmP2Q=
-github.com/golang/snappy v0.0.2 h1:aeE13tS0IiQgFjYdoL8qN3K1N2bXXtI6Vi51/y7BpMw=
-github.com/golang/snappy v0.0.2/go.mod h1:/XxbfmMg8lxefKM7IXC3fBNl/7bRcc72aCRzEWrmP2Q=
github.com/google/go-cmp v0.2.0/go.mod h1:oXzfMopK8JAjlY9xF4vHSVASa0yLyX7SntLO5aqRK0M=
github.com/google/go-cmp v0.3.0/go.mod h1:8QqcDgzrUqlUb/G2PQTWiueGozuR1884gddMywk6iLU=
github.com/google/go-cmp v0.3.1/go.mod h1:8QqcDgzrUqlUb/G2PQTWiueGozuR1884gddMywk6iLU=
@@ -77,10 +69,7 @@ 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/json-iterator/go v1.1.7/go.mod h1:KdQUCv79m/52Kvf8AW2vK1V8akMuk1QjK/uOdHXbAo4=
-github.com/json-iterator/go v1.1.9 h1:9yzud/Ht36ygwatGx56VwCZtlI/2AD15T1X2sjSuGns=
github.com/json-iterator/go v1.1.9/go.mod h1:KdQUCv79m/52Kvf8AW2vK1V8akMuk1QjK/uOdHXbAo4=
-github.com/json-iterator/go v1.1.10 h1:Kz6Cvnvv2wGdaG/V8yMvfkmNiXq9Ya2KUv4rouJJr68=
-github.com/json-iterator/go v1.1.10/go.mod h1:KdQUCv79m/52Kvf8AW2vK1V8akMuk1QjK/uOdHXbAo4=
github.com/kardianos/osext v0.0.0-20190222173326-2bc1f35cddc0 h1:iQTw/8FWTuc7uiaSepXwyf3o52HaUYcV+Tu66S3F5GA=
github.com/kardianos/osext v0.0.0-20190222173326-2bc1f35cddc0/go.mod h1:1NbS8ALrpOvjt0rHPNLyCIeMtbizbir8U//inJ+zuB8=
github.com/konsorten/go-windows-terminal-sequences v1.0.1/go.mod h1:T0+1ngSBFLxvqU3pZ+m/2kptfBszLMUkC4ZK/EgS/cQ=
@@ -97,14 +86,8 @@ github.com/lestrrat-go/strftime v1.0.3/go.mod h1:E1nN3pCbtMSu1yjSVeyuRFVm/U0xoR7
github.com/mattn/go-isatty v0.0.9/go.mod h1:YNRxwqDuOph6SZLI9vUUz6OYw3QyUt7WiY2yME+cCiQ=
github.com/mattn/go-isatty v0.0.12 h1:wuysRhFDzyxgEmMf5xjvJ2M9dZoWAXNNr5LSBS7uHXY=
github.com/mattn/go-isatty v0.0.12/go.mod h1:cbi8OIDigv2wuxKPP5vlRcQ1OAZbq2CE4Kysco4FUpU=
-github.com/modern-go/concurrent v0.0.0-20180228061459-e0a39a4cb421 h1:ZqeYNhU3OHLH3mGKHDcjJRFFRrJa6eAM5H+CtDdOsPc=
github.com/modern-go/concurrent v0.0.0-20180228061459-e0a39a4cb421/go.mod h1:6dJC0mAP4ikYIbvyc7fijjWJddQyLn8Ig3JB5CqoB9Q=
-github.com/modern-go/concurrent v0.0.0-20180306012644-bacd9c7ef1dd h1:TRLaZ9cD/w8PVh93nsPXa1VrQ6jlwL5oN8l14QlcNfg=
-github.com/modern-go/concurrent v0.0.0-20180306012644-bacd9c7ef1dd/go.mod h1:6dJC0mAP4ikYIbvyc7fijjWJddQyLn8Ig3JB5CqoB9Q=
-github.com/modern-go/reflect2 v0.0.0-20180701023420-4b7aa43c6742 h1:Esafd1046DLDQ0W1YjYsBW+p8U2u7vzgW2SQVmlNazg=
github.com/modern-go/reflect2 v0.0.0-20180701023420-4b7aa43c6742/go.mod h1:bx2lNnkwVCuqBIxFjflWJWanXIb3RllmbCylyMrvgv0=
-github.com/modern-go/reflect2 v1.0.1 h1:9f412s+6RmYXLWZSEzVVgPGK7C2PphHj5RJrvfx9AWI=
-github.com/modern-go/reflect2 v1.0.1/go.mod h1:bx2lNnkwVCuqBIxFjflWJWanXIb3RllmbCylyMrvgv0=
github.com/nfnt/resize v0.0.0-20180221191011-83c6a9932646 h1:zYyBkD/k9seD2A7fsi6Oo2LfFZAehjjQMERAvZLEDnQ=
github.com/nfnt/resize v0.0.0-20180221191011-83c6a9932646/go.mod h1:jpp1/29i3P1S/RLdc7JQKbRpFeM1dOBd8T9ki5s+AY8=
github.com/onsi/ginkgo v1.6.0/go.mod h1:lLunBs/Ym6LB5Z9jYTR76FiuTmxDTDusOGeTQH+WWjE=
@@ -136,27 +119,17 @@ github.com/tidwall/gjson v1.6.3 h1:aHoiiem0dr7GHkW001T1SMTJ7X5PvyekH5WX0whWGnI=
github.com/tidwall/gjson v1.6.3/go.mod h1:BaHyNc5bjzYkPqgLq7mdVzeiRtULKULXLgZFKsxEHI0=
github.com/tidwall/match v1.0.1 h1:PnKP62LPNxHKTwvHHZZzdOAOCtsJTjo6dZLCwpKm5xc=
github.com/tidwall/match v1.0.1/go.mod h1:LujAq0jyVjBy028G1WhWfIzbpQfMO8bBZ6Tyb0+pL9E=
-github.com/tidwall/match v1.0.2 h1:uuqvHuBGSedK7awZ2YoAtpnimfwBGFjHuWLuLqQj+bU=
-github.com/tidwall/match v1.0.2/go.mod h1:LujAq0jyVjBy028G1WhWfIzbpQfMO8bBZ6Tyb0+pL9E=
github.com/tidwall/pretty v1.0.2 h1:Z7S3cePv9Jwm1KwS0513MRaoUe3S01WPbLNV40pwWZU=
github.com/tidwall/pretty v1.0.2/go.mod h1:XNkn88O1ChpSDQmQeStsy+sBenx6DDtFZJxhVysOjyk=
github.com/ugorji/go v1.1.7 h1:/68gy2h+1mWMrwZFeD1kQialdSzAb432dtpeJ42ovdo=
github.com/ugorji/go v1.1.7/go.mod h1:kZn38zHttfInRq0xu/PH0az30d+z6vm202qpg1oXVMw=
-github.com/ugorji/go v1.2.0 h1:6eXlzYLLwZwXroJx9NyqbYcbv/d93twiOzQLDewE6qM=
-github.com/ugorji/go v1.2.0/go.mod h1:1ny++pKMXhLWrwWV5Nf+CbOuZJhMoaFD+0GMFfd8fEc=
github.com/ugorji/go/codec v1.1.7 h1:2SvQaVZ1ouYrrKKwoSk2pzd4A9evlKJb9oTL+OaLUSs=
github.com/ugorji/go/codec v1.1.7/go.mod h1:Ax+UKWsSmolVDwsd+7N3ZtXu+yMGCf907BLYF3GoBXY=
-github.com/ugorji/go/codec v1.2.0 h1:As6RccOIlbm9wHuWYMlB30dErcI+4WiKWsYsmPkyrUw=
-github.com/ugorji/go/codec v1.2.0/go.mod h1:dXvG35r7zTX6QImXOSFhGMmKtX+wJ7VTWzGvYQGIjBs=
github.com/wdvxdr1123/go-silk v0.0.0-20201007123416-b982fd3d91d6 h1:lX18MCdNzT2zIi7K02x4C5cPkDXpL+wCb1YTAMXjLWQ=
github.com/wdvxdr1123/go-silk v0.0.0-20201007123416-b982fd3d91d6/go.mod h1:5q9LFlBr+yX/J8Jd/9wHdXwkkjFkNyQIS7kX2Lgx/Zs=
github.com/yinghau76/go-ascii-art v0.0.0-20190517192627-e7f465a30189 h1:4UJw9if55Fu3HOwbfcaQlJ27p3oeJU2JZqoeT3ITJQk=
github.com/yinghau76/go-ascii-art v0.0.0-20190517192627-e7f465a30189/go.mod h1:rIrm5geMiBhPQkdfUm8gDFi/WiHneOp1i9KjmJqc+9I=
golang.org/x/crypto v0.0.0-20190308221718-c2843e01d9a2/go.mod h1:djNgcEr1/C05ACkg1iLfiJU5Ep61QUkGW8qpdssI0+w=
-golang.org/x/crypto v0.0.0-20200622213623-75b288015ac9 h1:psW17arqaxU48Z5kZ0CQnkZWQJsqcURM6tKiBApRjXI=
-golang.org/x/crypto v0.0.0-20200622213623-75b288015ac9/go.mod h1:LzIPMQfyMNhhGPhUkYOs5KpL4U8rLKemX1yGLhDgUto=
-golang.org/x/crypto v0.0.0-20201112155050-0c6587e931a9 h1:umElSU9WZirRdgu2yFHY0ayQkEnKiOC1TtM3fWXFnoU=
-golang.org/x/crypto v0.0.0-20201112155050-0c6587e931a9/go.mod h1:LzIPMQfyMNhhGPhUkYOs5KpL4U8rLKemX1yGLhDgUto=
golang.org/x/exp v0.0.0-20190121172915-509febef88a4/go.mod h1:CJ0aWSM057203Lf6IL+f9T1iT9GByDxfZKAQTCR3kQA=
golang.org/x/lint v0.0.0-20181026193005-c67002cb31c3/go.mod h1:UVdnD1Gm6xHRNCYTkRU2/jEulfH38KcIWyp/GAMgvoE=
golang.org/x/lint v0.0.0-20190227174305-5b3e6a55c961/go.mod h1:wehouNa3lNwaWXcvxsM5YxQ5yQlVC4a0KAMCusXpPoU=
@@ -166,11 +139,8 @@ golang.org/x/net v0.0.0-20180826012351-8a410e7b638d/go.mod h1:mL1N/T3taQHkDXs73r
golang.org/x/net v0.0.0-20180906233101-161cd47e91fd/go.mod h1:mL1N/T3taQHkDXs73rZJwtUhF3w3ftmwwsq0BUmARs4=
golang.org/x/net v0.0.0-20190213061140-3a22650c66bd/go.mod h1:mL1N/T3taQHkDXs73rZJwtUhF3w3ftmwwsq0BUmARs4=
golang.org/x/net v0.0.0-20190311183353-d8887717615a/go.mod h1:t9HGtf8HONx5eT2rtn7q6eTqICYqUVnKs3thJo3Qplg=
-golang.org/x/net v0.0.0-20190404232315-eb5bcb51f2a3/go.mod h1:t9HGtf8HONx5eT2rtn7q6eTqICYqUVnKs3thJo3Qplg=
golang.org/x/net v0.0.0-20200114155413-6afb5195e5aa h1:F+8P+gmewFQYRk6JoLQLwjBCTu3mcIURZfNkVweuRKA=
golang.org/x/net v0.0.0-20200114155413-6afb5195e5aa/go.mod h1:z5CRVTTTmAJ677TzLLGU+0bjPO0LkuOLi4/5GtJWs/s=
-golang.org/x/net v0.0.0-20201110031124-69a78807bb2b h1:uwuIcX0g4Yl1NC5XAz37xsr2lTtcqevgzYNVt49waME=
-golang.org/x/net v0.0.0-20201110031124-69a78807bb2b/go.mod h1:sp8m0HH+o8qH0wwXwYZr8TS3Oi6o0r6Gce1SSxlDquU=
golang.org/x/oauth2 v0.0.0-20180821212333-d2e6202438be/go.mod h1:N/0e6XlmueqKjAGxoOufVs8QHGRruUQn6yWY3a++T0U=
golang.org/x/sync v0.0.0-20180314180146-1d60e4601c6f/go.mod h1:RxMgew5VJxzue5/jJTE5uejpjVlOe/izrB70Jof72aM=
golang.org/x/sync v0.0.0-20181108010431-42b317875d0f/go.mod h1:RxMgew5VJxzue5/jJTE5uejpjVlOe/izrB70Jof72aM=
@@ -178,18 +148,13 @@ golang.org/x/sync v0.0.0-20190423024810-112230192c58/go.mod h1:RxMgew5VJxzue5/jJ
golang.org/x/sys v0.0.0-20180830151530-49385e6e1522/go.mod h1:STP8DvDyc/dI5b8T5hshtkjS+E42TnysNCUPdjciGhY=
golang.org/x/sys v0.0.0-20180909124046-d0be0721c37e/go.mod h1:STP8DvDyc/dI5b8T5hshtkjS+E42TnysNCUPdjciGhY=
golang.org/x/sys v0.0.0-20190215142949-d0b11bdaac8a/go.mod h1:STP8DvDyc/dI5b8T5hshtkjS+E42TnysNCUPdjciGhY=
-golang.org/x/sys v0.0.0-20190412213103-97732733099d/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs=
golang.org/x/sys v0.0.0-20190422165155-953cdadca894/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs=
golang.org/x/sys v0.0.0-20190813064441-fde4db37ae7a/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs=
golang.org/x/sys v0.0.0-20191026070338-33540a1f6037/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs=
golang.org/x/sys v0.0.0-20200116001909-b77594299b42 h1:vEOn+mP2zCOVzKckCZy6YsCtDblrpj/w7B9nxGNELpg=
golang.org/x/sys v0.0.0-20200116001909-b77594299b42/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs=
-golang.org/x/sys v0.0.0-20200930185726-fdedc70b468f/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs=
-golang.org/x/sys v0.0.0-20201113135734-0a15ea8d9b02 h1:5Ftd3YbC/kANXWCBjvppvUmv1BMakgFcBKA7MpYYp4M=
-golang.org/x/sys v0.0.0-20201113135734-0a15ea8d9b02/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs=
golang.org/x/text v0.3.0/go.mod h1:NqM8EUOU14njkJ3fqMW+pc6Ldnwhi/IjpwHt7yyuwOQ=
golang.org/x/text v0.3.2/go.mod h1:bEr9sfX3Q8Zfm5fL9x+3itogRgK3+ptLWKqgva+5dAk=
-golang.org/x/text v0.3.3/go.mod h1:5Zoc/QRtKVWzQhOtBMvqHzDpF6irO9z98xDceosuGiQ=
golang.org/x/time v0.0.0-20200630173020-3af7569d3a1e h1:EHBhcS0mlXEAVwNyO2dLfjToGsyY4j24pTs2ScHnX7s=
golang.org/x/time v0.0.0-20200630173020-3af7569d3a1e/go.mod h1:tRJNPiyCQ0inRvYxbN9jk5I+vvW/OXSQhTDSoE431IQ=
golang.org/x/tools v0.0.0-20180917221912-90fa682c2a6e/go.mod h1:n7NCudcB/nEzxVGmLbDWY5pfWTLqBcC2KZ6jyYvM4mQ=
@@ -225,7 +190,5 @@ gopkg.in/yaml.v2 v2.2.1/go.mod h1:hI93XBmqTisBFMUTm0b8Fm+jr3Dg1NNxqwp+5A1VGuI=
gopkg.in/yaml.v2 v2.2.2/go.mod h1:hI93XBmqTisBFMUTm0b8Fm+jr3Dg1NNxqwp+5A1VGuI=
gopkg.in/yaml.v2 v2.2.8 h1:obN1ZagJSUGI0Ek/LBmuj4SNLPfIny3KsKFopxRdj10=
gopkg.in/yaml.v2 v2.2.8/go.mod h1:hI93XBmqTisBFMUTm0b8Fm+jr3Dg1NNxqwp+5A1VGuI=
-gopkg.in/yaml.v2 v2.3.0 h1:clyUAQHOM3G0M3f5vQj7LuJrETvjVot3Z5el9nffUtU=
-gopkg.in/yaml.v2 v2.3.0/go.mod h1:hI93XBmqTisBFMUTm0b8Fm+jr3Dg1NNxqwp+5A1VGuI=
honnef.co/go/tools v0.0.0-20190102054323-c2f93a96b099/go.mod h1:rf3lG4BRIbNafJWhAfAdb/ePZxsR/4RtNHQocxwk9r4=
honnef.co/go/tools v0.0.0-20190523083050-ea95bdfd59fc/go.mod h1:rf3lG4BRIbNafJWhAfAdb/ePZxsR/4RtNHQocxwk9r4=
From 2cbf23bceb3df231a70f70263b3c8488a748159c Mon Sep 17 00:00:00 2001
From: Mrs4s <1844812067@qq.com>
Date: Sat, 14 Nov 2020 18:54:17 +0800
Subject: [PATCH 138/367] trim for custom ip file.
---
global/fs.go | 2 +-
1 file changed, 1 insertion(+), 1 deletion(-)
diff --git a/global/fs.go b/global/fs.go
index f7661c5..d8bccaf 100644
--- a/global/fs.go
+++ b/global/fs.go
@@ -121,7 +121,7 @@ func ReadAddrFile(path string) []*net.TCPAddr {
lines := strings.Split(str, "\n")
var ret []*net.TCPAddr
for _, l := range lines {
- ip := strings.Split(l, ":")
+ ip := strings.Split(strings.TrimSpace(l), ":")
if len(ip) == 2 {
port, _ := strconv.Atoi(ip[1])
ret = append(ret, &net.TCPAddr{IP: net.ParseIP(ip[0]), Port: port})
From b8ec05e1c1c89403eb3bc5a8429c566ac4d0337c Mon Sep 17 00:00:00 2001
From: Mrs4s <1844812067@qq.com>
Date: Sat, 14 Nov 2020 19:03:36 +0800
Subject: [PATCH 139/367] feature private poke.
---
coolq/bot.go | 5 +++++
coolq/cqcode.go | 3 ---
coolq/event.go | 20 +++++++++++++++++++-
go.mod | 2 +-
go.sum | 6 ++++--
5 files changed, 29 insertions(+), 7 deletions(-)
diff --git a/coolq/bot.go b/coolq/bot.go
index 628c41e..1262b07 100644
--- a/coolq/bot.go
+++ b/coolq/bot.go
@@ -56,6 +56,7 @@ func NewQQBot(cli *client.QQClient, conf *global.JsonConfig) *CQBot {
bot.Client.OnGroupMuted(bot.groupMutedEvent)
bot.Client.OnGroupMessageRecalled(bot.groupRecallEvent)
bot.Client.OnGroupNotify(bot.groupNotifyEvent)
+ bot.Client.OnFriendNotify(bot.friendNotifyEvent)
bot.Client.OnFriendMessageRecalled(bot.friendRecallEvent)
bot.Client.OnReceivedOfflineFile(bot.offlineFileEvent)
bot.Client.OnJoinGroup(bot.joinGroupEvent)
@@ -235,6 +236,10 @@ func (bot *CQBot) SendPrivateMessage(target int64, m *message.SendingMessage) in
newElem = append(newElem, fm)
continue
}
+ if i, ok := elem.(*PokeElement); ok {
+ bot.Client.SendFriendPoke(i.Target)
+ return 0
+ }
if i, ok := elem.(*message.VoiceElement); ok {
fv, err := bot.Client.UploadPrivatePtt(target, i.Data)
if err != nil {
diff --git a/coolq/cqcode.go b/coolq/cqcode.go
index 631a229..b78b9c8 100644
--- a/coolq/cqcode.go
+++ b/coolq/cqcode.go
@@ -434,9 +434,6 @@ func (bot *CQBot) ToElement(t string, d map[string]string, group bool) (m interf
}
case "poke":
- if !group {
- return nil, errors.New("todo") // TODO: private poke
- }
t, _ := strconv.ParseInt(d["qq"], 10, 64)
return &PokeElement{Target: t}, nil
case "gift":
diff --git a/coolq/event.go b/coolq/event.go
index 7512d80..9d2e300 100644
--- a/coolq/event.go
+++ b/coolq/event.go
@@ -220,7 +220,7 @@ func (bot *CQBot) groupRecallEvent(c *client.QQClient, e *client.GroupMessageRec
})
}
-func (bot *CQBot) groupNotifyEvent(c *client.QQClient, e client.IGroupNotifyEvent) {
+func (bot *CQBot) groupNotifyEvent(c *client.QQClient, e client.INotifyEvent) {
group := c.FindGroup(e.From())
switch notify := e.(type) {
case *client.GroupPokeNotifyEvent:
@@ -279,6 +279,24 @@ func (bot *CQBot) groupNotifyEvent(c *client.QQClient, e client.IGroupNotifyEven
}
}
+func (bot *CQBot) friendNotifyEvent(c *client.QQClient, e client.INotifyEvent) {
+ friend := c.FindFriend(e.From())
+ switch notify := e.(type) {
+ case *client.FriendPokeNotifyEvent:
+ log.Infof("好友 %v 戳了戳你.", friend.Nickname)
+ bot.dispatchEventMessage(MSG{
+ "post_type": "notice",
+ "notice_type": "notify",
+ "sub_type": "poke",
+ "self_id": c.Uin,
+ "user_id": notify.Sender,
+ "sender_id": notify.Sender,
+ "target_id": notify.Receiver,
+ "time": time.Now().Unix(),
+ })
+ }
+}
+
func (bot *CQBot) friendRecallEvent(c *client.QQClient, e *client.FriendMessageRecalledEvent) {
f := c.FindFriend(e.FriendUin)
gid := ToGlobalId(e.FriendUin, e.MessageId)
diff --git a/go.mod b/go.mod
index 00629da..af63556 100644
--- a/go.mod
+++ b/go.mod
@@ -3,7 +3,7 @@ module github.com/Mrs4s/go-cqhttp
go 1.14
require (
- github.com/Mrs4s/MiraiGo v0.0.0-20201114071121-b813765774d7
+ github.com/Mrs4s/MiraiGo v0.0.0-20201114105600-231b2d89dbb9
github.com/dustin/go-humanize v1.0.0
github.com/getlantern/go-update v0.0.0-20190510022740-79c495ab728c
github.com/getlantern/golog v0.0.0-20201105130739-9586b8bde3a9 // indirect
diff --git a/go.sum b/go.sum
index 910b372..dc1215a 100644
--- a/go.sum
+++ b/go.sum
@@ -1,7 +1,9 @@
cloud.google.com/go v0.26.0/go.mod h1:aQUYkXzVsufM+DwF1aE+0xfcU+56JwCaLick0ClmMTw=
github.com/BurntSushi/toml v0.3.1/go.mod h1:xHWCNGjB5oqiDr8zfno3MHue2Ht5sIBksp03qcyfWMU=
-github.com/Mrs4s/MiraiGo v0.0.0-20201114071121-b813765774d7 h1:/vnL6vhst5buzs7YwVxEZe6NuZDdayb/e7gEZ5n+YWg=
-github.com/Mrs4s/MiraiGo v0.0.0-20201114071121-b813765774d7/go.mod h1:pAsWtMIwqkBXr5DkUpTIHoWQJNduVnX9WSBPmPvkuCs=
+github.com/Mrs4s/MiraiGo v0.0.0-20201114105236-1ea9f982fee4 h1:0qoqKkSLTnWBS2rZm95ey9YYbCo4sujO4Kk2frw27yY=
+github.com/Mrs4s/MiraiGo v0.0.0-20201114105236-1ea9f982fee4/go.mod h1:pAsWtMIwqkBXr5DkUpTIHoWQJNduVnX9WSBPmPvkuCs=
+github.com/Mrs4s/MiraiGo v0.0.0-20201114105600-231b2d89dbb9 h1:evnR9D9rXcBTUzioFf7XlXX4KbZBhc0/Urp09yV01dc=
+github.com/Mrs4s/MiraiGo v0.0.0-20201114105600-231b2d89dbb9/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=
From a52ae1c828f6c1f1506c8ed2a00d2faa87b3eb31 Mon Sep 17 00:00:00 2001
From: Mrs4s <1844812067@qq.com>
Date: Sat, 14 Nov 2020 19:07:08 +0800
Subject: [PATCH 140/367] update MiraiGo.
---
docs/config.md | 1 +
go.mod | 2 +-
go.sum | 2 ++
main.go | 2 ++
server/apiAdmin.go | 2 ++
5 files changed, 8 insertions(+), 1 deletion(-)
diff --git a/docs/config.md b/docs/config.md
index 9f39b78..3f4a94d 100644
--- a/docs/config.md
+++ b/docs/config.md
@@ -115,6 +115,7 @@ go-cqhttp 支持导入CQHTTP的配置文件, 具体步骤为:
| 0 | iPad | 无 |
| 1 | Android Phone | 无 |
| 2 | Android Watch | 无法接收 `group_notify` 事件、无法接收口令红包、无法接收撤回消息 |
+| 3 | MacOS | 无 |
> 注意, 根据协议的不同, 各类消息有所限制
diff --git a/go.mod b/go.mod
index af63556..f5e3726 100644
--- a/go.mod
+++ b/go.mod
@@ -3,7 +3,7 @@ module github.com/Mrs4s/go-cqhttp
go 1.14
require (
- github.com/Mrs4s/MiraiGo v0.0.0-20201114105600-231b2d89dbb9
+ github.com/Mrs4s/MiraiGo v0.0.0-20201114110437-3d349df7362e
github.com/dustin/go-humanize v1.0.0
github.com/getlantern/go-update v0.0.0-20190510022740-79c495ab728c
github.com/getlantern/golog v0.0.0-20201105130739-9586b8bde3a9 // indirect
diff --git a/go.sum b/go.sum
index dc1215a..c984143 100644
--- a/go.sum
+++ b/go.sum
@@ -4,6 +4,8 @@ github.com/Mrs4s/MiraiGo v0.0.0-20201114105236-1ea9f982fee4 h1:0qoqKkSLTnWBS2rZm
github.com/Mrs4s/MiraiGo v0.0.0-20201114105236-1ea9f982fee4/go.mod h1:pAsWtMIwqkBXr5DkUpTIHoWQJNduVnX9WSBPmPvkuCs=
github.com/Mrs4s/MiraiGo v0.0.0-20201114105600-231b2d89dbb9 h1:evnR9D9rXcBTUzioFf7XlXX4KbZBhc0/Urp09yV01dc=
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/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=
diff --git a/main.go b/main.go
index b3ef74f..926f65b 100644
--- a/main.go
+++ b/main.go
@@ -232,6 +232,8 @@ func main() {
return "Android Phone"
case client.AndroidWatch:
return "Android Watch"
+ case client.MacOS:
+ return "MacOS"
}
return "未知"
}())
diff --git a/server/apiAdmin.go b/server/apiAdmin.go
index 51acecc..3454273 100644
--- a/server/apiAdmin.go
+++ b/server/apiAdmin.go
@@ -346,6 +346,8 @@ func (s *webServer) DoReLogin() { // TODO: 协议层的 ReLogin
return "Android Phone"
case client.AndroidWatch:
return "Android Watch"
+ case client.MacOS:
+ return "MacOS"
}
return "未知"
}())
From afa356e551ba36408483abfffe524a794f20e7de Mon Sep 17 00:00:00 2001
From: =?UTF-8?q?=E6=B6=82=E5=B1=B1=E8=8B=8F=E8=8B=8F?=
Date: Sat, 14 Nov 2020 19:30:32 +0800
Subject: [PATCH 141/367] Update adminApi.md
---
docs/adminApi.md | 2 +-
1 file changed, 1 insertion(+), 1 deletion(-)
diff --git a/docs/adminApi.md b/docs/adminApi.md
index 68dde26..def91f8 100644
--- a/docs/adminApi.md
+++ b/docs/adminApi.md
@@ -69,7 +69,7 @@ method: `POST` formdata
| 参数名 | 类型 | 说明 |
| ------ | ------ | ----------- |
-| input | string | 输入的类容 |
+| input | string | 输入的内容 |
返回:
From cb9d872071620cd5881053ce8d8073d736a3b15a Mon Sep 17 00:00:00 2001
From: Ink-33
Date: Sun, 15 Nov 2020 16:17:43 +0800
Subject: [PATCH 142/367] Fix ineffectual assignment.
---
Dockerfile | 2 +-
coolq/api.go | 3 +--
coolq/cqcode.go | 4 ++--
go.mod | 6 +++++-
go.sum | 10 ++++++++++
5 files changed, 19 insertions(+), 6 deletions(-)
diff --git a/Dockerfile b/Dockerfile
index 8a1febb..938abb2 100644
--- a/Dockerfile
+++ b/Dockerfile
@@ -1,4 +1,4 @@
-FROM golang:1.15.2-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/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/cqcode.go b/coolq/cqcode.go
index b78b9c8..b3ffe85 100644
--- a/coolq/cqcode.go
+++ b/coolq/cqcode.go
@@ -104,7 +104,7 @@ func ToArrayMessage(e []message.IMessageElement, code int64, raw ...bool) (r []M
}
for _, elem := range e {
m := MSG{}
- switch o := elem.(type) {
+ swiadd tch o := elem.(type) {
case *message.TextElement:
m = MSG{
"type": "text",
@@ -195,7 +195,7 @@ func ToArrayMessage(e []message.IMessageElement, code int64, raw ...bool) (r []M
}
}
default:
- continue
+ return
}
r = append(r, m)
}
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=
From 79ba9474a3947470c5a35147c039e1adf8605209 Mon Sep 17 00:00:00 2001
From: Ink-33
Date: Sun, 15 Nov 2020 16:19:57 +0800
Subject: [PATCH 143/367] update
---
coolq/cqcode.go | 2 +-
1 file changed, 1 insertion(+), 1 deletion(-)
diff --git a/coolq/cqcode.go b/coolq/cqcode.go
index b3ffe85..658ee05 100644
--- a/coolq/cqcode.go
+++ b/coolq/cqcode.go
@@ -104,7 +104,7 @@ func ToArrayMessage(e []message.IMessageElement, code int64, raw ...bool) (r []M
}
for _, elem := range e {
m := MSG{}
- swiadd tch o := elem.(type) {
+ switch o := elem.(type) {
case *message.TextElement:
m = MSG{
"type": "text",
From 0f0f74ece893fefa5389cf09393201c77994a8e7 Mon Sep 17 00:00:00 2001
From: Ink-33
Date: Mon, 16 Nov 2020 22:34:05 +0800
Subject: [PATCH 144/367] feather: use startup params to decrypt password
---
main.go | 75 +++++++++++++++++++++++++++++++++++++++++++++------------
1 file changed, 60 insertions(+), 15 deletions(-)
diff --git a/main.go b/main.go
index 926f65b..fb2d1c3 100644
--- a/main.go
+++ b/main.go
@@ -2,17 +2,16 @@ 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"
"runtime"
@@ -20,15 +19,19 @@ import (
"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 +96,26 @@ func init() {
func main() {
console := bufio.NewReader(os.Stdin)
-
+ var strKey string
arg := os.Args
- if len(arg) > 1 && arg[1] == "update" {
- if len(arg) > 2 {
- selfUpdate(arg[2])
- } else {
- selfUpdate("")
+ fmt.Println(arg)
+ if len(arg) > 1 {
+ for i := range arg {
+ switch arg[i] {
+ case "update":
+ if len(arg) > i+1 {
+ selfUpdate(arg[i+2])
+ } else {
+ selfUpdate("")
+ }
+ case "key":
+ if len(arg) > i+1 {
+ b := []byte(arg[i+1])
+ b = append(b, 13, 10)
+ strKey = string(b[:])
+ fmt.Println(b)
+ }
+ }
}
}
@@ -216,8 +232,24 @@ 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[:])
}
@@ -284,10 +316,23 @@ 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:
+ b.Release()
+ cmd := &exec.Cmd{
+ Path: arg[0],
+ Args: arg[1:],
+ Stderr: os.Stderr,
+ Stdout: os.Stdout,
+ }
+ server.HttpServer.ShutDown()
+ cmd.Start()
+ }
}
func EncryptPwd(pwd string, key []byte) string {
From 4a3288cb8d4b03fa22eb591c6279c8174237685c Mon Sep 17 00:00:00 2001
From: Ink-33
Date: Mon, 16 Nov 2020 22:36:47 +0800
Subject: [PATCH 145/367] feather: add set_restart api support
---
coolq/bot.go | 3 ++-
coolq/cqcode.go | 11 ++++++-----
coolq/event.go | 11 ++++++-----
global/codec.go | 5 +++--
global/filter.go | 5 +++--
global/fs.go | 5 +++--
global/net.go | 3 ++-
global/param.go | 3 ++-
global/ratelimit.go | 1 +
server/apiAdmin.go | 44 +++++++++++++++++++++++++++-----------------
server/http.go | 24 +++++++++++++++++++++++-
server/websocket.go | 15 +++++++++++++++
12 files changed, 93 insertions(+), 37 deletions(-)
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 658ee05..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+?.*?]`)
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/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/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..5b58c7e 100644
--- a/server/http.go
+++ b/server/http.go
@@ -5,12 +5,14 @@ import (
"crypto/hmac"
"crypto/sha1"
"encoding/hex"
- "github.com/guonaihong/gout/dataflow"
"net/http"
"os"
"strconv"
"strings"
"time"
+ "unsafe"
+
+ "github.com/guonaihong/gout/dataflow"
"github.com/Mrs4s/go-cqhttp/coolq"
"github.com/Mrs4s/go-cqhttp/global"
@@ -343,6 +345,25 @@ func SetGroupLeave(s *httpServer, c *gin.Context) {
c.JSON(200, s.bot.CQSetGroupLeave(gid))
}
+func SetRestart(s *httpServer, c *gin.Context) {
+ d, t := getParamWithType(c, "delay")
+ if t == gjson.Null {
+ d = "0"
+ }
+ delay, err := strconv.ParseInt(d, 10, 64)
+ if err != nil || delay < 0 {
+ c.JSON(200, Failed(100, "Invalid delay"))
+ return
+ }
+ c.JSON(200, coolq.MSG{"data": nil, "retcode": 0, "status": "async"})
+ go func(delay int64) {
+ var del *time.Duration = (*time.Duration)(unsafe.Pointer(&delay))
+ time.Sleep(*del * time.Millisecond)
+ Restart <- struct{}{}
+ }(delay * time.Hour.Milliseconds())
+
+}
+
func GetForwardMessage(s *httpServer, c *gin.Context) {
resId := getParam(c, "message_id")
c.JSON(200, s.bot.CQGetForwardMessage(resId))
@@ -488,6 +509,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..b01fd21 100644
--- a/server/websocket.go
+++ b/server/websocket.go
@@ -8,6 +8,7 @@ import (
"strings"
"sync"
"time"
+ "unsafe"
"github.com/Mrs4s/go-cqhttp/coolq"
"github.com/Mrs4s/go-cqhttp/global"
@@ -480,6 +481,20 @@ 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 {
+ return Failed(100, "Invalid delay")
+ }
+ defer func(delay int64) {
+ var del *time.Duration = (*time.Duration)(unsafe.Pointer(&delay))
+ time.Sleep(*del * time.Millisecond)
+ Restart <- struct{}{}
+ }(delay * time.Hour.Milliseconds())
+ return coolq.MSG{"data": nil, "retcode": 0, "status": "async"}
+
+ },
"can_send_image": func(bot *coolq.CQBot, p gjson.Result) coolq.MSG {
return bot.CQCanSendImage()
},
From 8900839018bda10668912c37e03f0eb998e16d75 Mon Sep 17 00:00:00 2001
From: Ink-33
Date: Mon, 16 Nov 2020 23:51:45 +0800
Subject: [PATCH 146/367] Improved restart method
---
main.go | 52 +++++++++++++++++++++++++++++++++++++++++-----------
1 file changed, 41 insertions(+), 11 deletions(-)
diff --git a/main.go b/main.go
index fb2d1c3..18f31cd 100644
--- a/main.go
+++ b/main.go
@@ -14,6 +14,7 @@ import (
"os/exec"
"os/signal"
"path"
+ "path/filepath"
"runtime"
"strconv"
"strings"
@@ -97,6 +98,7 @@ func init() {
func main() {
console := bufio.NewReader(os.Stdin)
var strKey string
+ var isRestart bool = false
arg := os.Args
fmt.Println(arg)
if len(arg) > 1 {
@@ -113,8 +115,9 @@ func main() {
b := []byte(arg[i+1])
b = append(b, 13, 10)
strKey = string(b[:])
- fmt.Println(b)
}
+ case "restart":
+ isRestart = true
}
}
}
@@ -253,8 +256,10 @@ func main() {
key := md5.Sum([]byte(strKey))
conf.Password = DecryptPwd(conf.PasswordEncrypted, key[:])
}
- log.Info("Bot将在5秒后登录并开始信息处理, 按 Ctrl+C 取消.")
- time.Sleep(time.Second * 5)
+ if !isRestart {
+ log.Info("Bot将在5秒后登录并开始信息处理, 按 Ctrl+C 取消.")
+ time.Sleep(time.Second * 5)
+ }
log.Info("开始尝试登录并同步消息...")
log.Infof("使用协议: %v", func() string {
switch client.SystemDeviceInfo.Protocol {
@@ -323,15 +328,10 @@ func main() {
case <-c:
b.Release()
case <-r:
- b.Release()
- cmd := &exec.Cmd{
- Path: arg[0],
- Args: arg[1:],
- Stderr: os.Stderr,
- Stdout: os.Stdout,
- }
+ log.Info("正在重启中...")
server.HttpServer.ShutDown()
- cmd.Start()
+ defer b.Release()
+ restart(arg)
}
}
@@ -451,3 +451,33 @@ 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, "restart"}, Args[1:]...)
+ cmd = &exec.Cmd{
+ Path: "cmd.exe",
+ Args: Args,
+ Stderr: os.Stderr,
+ Stdout: os.Stdout,
+ }
+ } else {
+ cmd = &exec.Cmd{
+ Path: Args[0],
+ Args: Args,
+ Stderr: os.Stderr,
+ Stdout: os.Stdout,
+ }
+ }
+ cmd.Start()
+}
From 990e7744a397b766debf75a7706b5b8ff87e6ee7 Mon Sep 17 00:00:00 2001
From: Ink-33
Date: Tue, 17 Nov 2020 00:13:14 +0800
Subject: [PATCH 147/367] Update docs
---
README.md | 83 ++++-----
docs/EventFilter.md | 20 +--
docs/adminApi.md | 104 +++++------
docs/config.md | 58 +++---
docs/cqhttp.md | 422 ++++++++++++++++++++++----------------------
docs/quick_start.md | 2 +-
6 files changed, 345 insertions(+), 344 deletions(-)
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/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..c82e9fe 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,9 @@ method: `POST`
参数:
-| 参数名 |类型 | 说明 |
-| ------ | ------ | -----------|
-| 无 | | |
+| 参数名 | 类型 | 说明 |
+| ------ | ---- | ---- |
+| 无 | | |
返回:
@@ -108,12 +108,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 +130,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 +154,11 @@ method: `POST` formdata
参数:
-| 参数名 | 类型 | 说明 |
-| ------ | ------ | ------------------------------------------------------------ |
-| port | string | 服务端口 |
-| host | string | 服务监听地址 |
-| enable | string | 是否启用 ,填 'true' 或者 'false' |
+| 参数名 | 类型 | 说明 |
+| ------ | ------ | -------------------------------- |
+| port | string | 服务端口 |
+| host | string | 服务监听地址 |
+| enable | string | 是否启用 ,填 'true' 或者 'false' |
返回:
@@ -175,11 +175,11 @@ method: `POST` formdata
参数:
-| 参数名 | 类型 | 说明 |
-| ------ | ------ | ------------------------------------------------------------ |
-| port | string | 服务端口 |
-| host | string | 服务监听地址 |
-| enable | string | 是否启用 ,填 'true' 或者 'false' |
+| 参数名 | 类型 | 说明 |
+| ------ | ------ | -------------------------------- |
+| port | string | 服务端口 |
+| host | string | 服务监听地址 |
+| enable | string | 是否启用 ,填 'true' 或者 'false' |
返回:
@@ -196,9 +196,9 @@ method: `POST` formdata
参数:
-| 参数名 | 类型 | 说明 |
-| ------ | ------ | ------------------------------------------------------------ |
-| json | string | 完整的config.json的配合,json字符串 |
+| 参数名 | 类型 | 说明 |
+| ------ | ------ | ----------------------------------- |
+| json | string | 完整的config.json的配合,json字符串 |
返回:
@@ -215,9 +215,9 @@ method: `GET`
参数:
-| 参数名 | 类型 | 说明 |
-| ------ | ------ | ------------------------------------------------------------ |
-| 无 | | |
+| 参数名 | 类型 | 说明 |
+| ------ | ---- | ---- |
+| 无 | | |
返回:
@@ -226,7 +226,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)
## 更新
From 28f1594539eac276f088831e97aa5cf1ce9426c6 Mon Sep 17 00:00:00 2001
From: Ink-33
Date: Tue, 17 Nov 2020 00:24:25 +0800
Subject: [PATCH 148/367] feather: faststart
---
main.go | 11 ++++++-----
1 file changed, 6 insertions(+), 5 deletions(-)
diff --git a/main.go b/main.go
index 18f31cd..01d9ac8 100644
--- a/main.go
+++ b/main.go
@@ -98,7 +98,7 @@ func init() {
func main() {
console := bufio.NewReader(os.Stdin)
var strKey string
- var isRestart bool = false
+ var isFastStart bool = false
arg := os.Args
fmt.Println(arg)
if len(arg) > 1 {
@@ -116,8 +116,8 @@ func main() {
b = append(b, 13, 10)
strKey = string(b[:])
}
- case "restart":
- isRestart = true
+ case "faststart":
+ isFastStart = true
}
}
}
@@ -256,7 +256,7 @@ func main() {
key := md5.Sum([]byte(strKey))
conf.Password = DecryptPwd(conf.PasswordEncrypted, key[:])
}
- if !isRestart {
+ if !isFastStart {
log.Info("Bot将在5秒后登录并开始信息处理, 按 Ctrl+C 取消.")
time.Sleep(time.Second * 5)
}
@@ -464,7 +464,7 @@ func restart(Args []string) {
if err != nil {
log.Errorf("重启失败:%s", err.Error())
}
- Args = append([]string{"/c", "start ", path, "restart"}, Args[1:]...)
+ Args = append([]string{"/c", "start ", path, "faststart"}, Args[1:]...)
cmd = &exec.Cmd{
Path: "cmd.exe",
Args: Args,
@@ -472,6 +472,7 @@ func restart(Args []string) {
Stdout: os.Stdout,
}
} else {
+ Args = append(Args, "faststart")
cmd = &exec.Cmd{
Path: Args[0],
Args: Args,
From f87b5c8215a632b07f5f00e5cdd8694100c5848e Mon Sep 17 00:00:00 2001
From: Ink-33
Date: Tue, 17 Nov 2020 00:26:51 +0800
Subject: [PATCH 149/367] Fix seflUpdate
---
main.go | 2 +-
1 file changed, 1 insertion(+), 1 deletion(-)
diff --git a/main.go b/main.go
index 01d9ac8..d932616 100644
--- a/main.go
+++ b/main.go
@@ -106,7 +106,7 @@ func main() {
switch arg[i] {
case "update":
if len(arg) > i+1 {
- selfUpdate(arg[i+2])
+ selfUpdate(arg[i+1])
} else {
selfUpdate("")
}
From e053da62e195cdb551c8172a4ca0bcb7f22085c2 Mon Sep 17 00:00:00 2001
From: Ink-33
Date: Tue, 17 Nov 2020 01:23:44 +0800
Subject: [PATCH 150/367] Update adminApi.md
---
docs/adminApi.md | 19 +++++++++++++++++++
1 file changed, 19 insertions(+)
diff --git a/docs/adminApi.md b/docs/adminApi.md
index c82e9fe..374bfd1 100644
--- a/docs/adminApi.md
+++ b/docs/adminApi.md
@@ -87,6 +87,25 @@ method: `POST` formdata
method: `POST`
+参数:
+
+| 参数名 | 类型 | 说明 |
+| ------ | ---- | ---- |
+| 无 | | |
+
+返回:
+
+```json
+{"data": {}, "retcode": 0, "status": "ok"}
+```
+
+### admin/do_process_restart
+
+> 冷重启
+
+method: `POST`
+
+
参数:
| 参数名 | 类型 | 说明 |
From e9b39f3379837ef9f641bb14549e60758f0c9e51 Mon Sep 17 00:00:00 2001
From: Ink-33
Date: Tue, 17 Nov 2020 01:24:16 +0800
Subject: [PATCH 151/367] =?UTF-8?q?Fix:=20set=5Frestart=20delay=E4=B8=8D?=
=?UTF-8?q?=E7=94=9F=E6=95=88=E7=9A=84=E9=97=AE=E9=A2=98?=
MIME-Version: 1.0
Content-Type: text/plain; charset=UTF-8
Content-Transfer-Encoding: 8bit
---
server/http.go | 13 +++----------
server/websocket.go | 6 +++---
2 files changed, 6 insertions(+), 13 deletions(-)
diff --git a/server/http.go b/server/http.go
index 5b58c7e..a3b0ae2 100644
--- a/server/http.go
+++ b/server/http.go
@@ -5,6 +5,7 @@ import (
"crypto/hmac"
"crypto/sha1"
"encoding/hex"
+ "fmt"
"net/http"
"os"
"strconv"
@@ -346,21 +347,13 @@ func SetGroupLeave(s *httpServer, c *gin.Context) {
}
func SetRestart(s *httpServer, c *gin.Context) {
- d, t := getParamWithType(c, "delay")
- if t == gjson.Null {
- d = "0"
- }
- delay, err := strconv.ParseInt(d, 10, 64)
- if err != nil || delay < 0 {
- c.JSON(200, Failed(100, "Invalid delay"))
- return
- }
+ delay, _ := strconv.ParseInt(getParam(c, "delay"), 10, 64)
c.JSON(200, coolq.MSG{"data": nil, "retcode": 0, "status": "async"})
go func(delay int64) {
var del *time.Duration = (*time.Duration)(unsafe.Pointer(&delay))
time.Sleep(*del * time.Millisecond)
Restart <- struct{}{}
- }(delay * time.Hour.Milliseconds())
+ }(delay)
}
diff --git a/server/websocket.go b/server/websocket.go
index b01fd21..24865f7 100644
--- a/server/websocket.go
+++ b/server/websocket.go
@@ -485,13 +485,13 @@ var wsApi = map[string]func(*coolq.CQBot, gjson.Result) coolq.MSG{
var delay int64 = 0
delay = p.Get("delay").Int()
if delay < 0 {
- return Failed(100, "Invalid delay")
+ delay = 0
}
defer func(delay int64) {
var del *time.Duration = (*time.Duration)(unsafe.Pointer(&delay))
- time.Sleep(*del * time.Millisecond)
+ time.Sleep(*del * time.Microsecond)
Restart <- struct{}{}
- }(delay * time.Hour.Milliseconds())
+ }(delay)
return coolq.MSG{"data": nil, "retcode": 0, "status": "async"}
},
From e9a03b68b5123ee810778000f80c55fcaf2d745a Mon Sep 17 00:00:00 2001
From: Ink-33
Date: Tue, 17 Nov 2020 01:26:13 +0800
Subject: [PATCH 152/367] delete test function
---
main.go | 1 -
1 file changed, 1 deletion(-)
diff --git a/main.go b/main.go
index d932616..b09ece5 100644
--- a/main.go
+++ b/main.go
@@ -100,7 +100,6 @@ func main() {
var strKey string
var isFastStart bool = false
arg := os.Args
- fmt.Println(arg)
if len(arg) > 1 {
for i := range arg {
switch arg[i] {
From 0fc004077b1d40e22eef90942853eb764edcf95e Mon Sep 17 00:00:00 2001
From: Ink-33
Date: Tue, 17 Nov 2020 01:30:05 +0800
Subject: [PATCH 153/367] delete unused import
---
server/http.go | 1 -
1 file changed, 1 deletion(-)
diff --git a/server/http.go b/server/http.go
index a3b0ae2..ac83dd7 100644
--- a/server/http.go
+++ b/server/http.go
@@ -5,7 +5,6 @@ import (
"crypto/hmac"
"crypto/sha1"
"encoding/hex"
- "fmt"
"net/http"
"os"
"strconv"
From 7f3e58f97a4efb793ff107042a53d5246a5f5e68 Mon Sep 17 00:00:00 2001
From: Ink-33
Date: Tue, 17 Nov 2020 01:45:14 +0800
Subject: [PATCH 154/367] Update ci.yml
---
.github/workflows/ci.yml | 2 +-
1 file changed, 1 insertion(+), 1 deletion(-)
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
From 8f34003c6f5070ab0253740439483f14ae51a626 Mon Sep 17 00:00:00 2001
From: Ink33 <51873347+Ink-33@users.noreply.github.com>
Date: Tue, 17 Nov 2020 13:53:46 +0800
Subject: [PATCH 155/367] Update websocket.go
---
server/websocket.go | 4 +---
1 file changed, 1 insertion(+), 3 deletions(-)
diff --git a/server/websocket.go b/server/websocket.go
index 24865f7..f0accec 100644
--- a/server/websocket.go
+++ b/server/websocket.go
@@ -8,7 +8,6 @@ import (
"strings"
"sync"
"time"
- "unsafe"
"github.com/Mrs4s/go-cqhttp/coolq"
"github.com/Mrs4s/go-cqhttp/global"
@@ -488,8 +487,7 @@ var wsApi = map[string]func(*coolq.CQBot, gjson.Result) coolq.MSG{
delay = 0
}
defer func(delay int64) {
- var del *time.Duration = (*time.Duration)(unsafe.Pointer(&delay))
- time.Sleep(*del * time.Microsecond)
+ time.Sleep(time.Duration(delay) * time.Milliseconds)
Restart <- struct{}{}
}(delay)
return coolq.MSG{"data": nil, "retcode": 0, "status": "async"}
From beb1a2883a90499359253fca74c4f004b94c9d3d Mon Sep 17 00:00:00 2001
From: Ink33 <51873347+Ink-33@users.noreply.github.com>
Date: Tue, 17 Nov 2020 13:57:28 +0800
Subject: [PATCH 156/367] Update websocket.go
---
server/websocket.go | 2 +-
1 file changed, 1 insertion(+), 1 deletion(-)
diff --git a/server/websocket.go b/server/websocket.go
index f0accec..5de0e49 100644
--- a/server/websocket.go
+++ b/server/websocket.go
@@ -487,7 +487,7 @@ var wsApi = map[string]func(*coolq.CQBot, gjson.Result) coolq.MSG{
delay = 0
}
defer func(delay int64) {
- time.Sleep(time.Duration(delay) * time.Milliseconds)
+ time.Sleep(time.Duration(delay) * time.Millisecond)
Restart <- struct{}{}
}(delay)
return coolq.MSG{"data": nil, "retcode": 0, "status": "async"}
From da2e34aaa5664486a601f9f50808181b1902f911 Mon Sep 17 00:00:00 2001
From: Ink33 <51873347+Ink-33@users.noreply.github.com>
Date: Tue, 17 Nov 2020 13:58:23 +0800
Subject: [PATCH 157/367] Update http.go
---
server/http.go | 4 +---
1 file changed, 1 insertion(+), 3 deletions(-)
diff --git a/server/http.go b/server/http.go
index ac83dd7..f79d443 100644
--- a/server/http.go
+++ b/server/http.go
@@ -10,7 +10,6 @@ import (
"strconv"
"strings"
"time"
- "unsafe"
"github.com/guonaihong/gout/dataflow"
@@ -349,8 +348,7 @@ 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) {
- var del *time.Duration = (*time.Duration)(unsafe.Pointer(&delay))
- time.Sleep(*del * time.Millisecond)
+ time.Sleep(time.Duration(delay) * time.Millisecond)
Restart <- struct{}{}
}(delay)
From 5ab713e7d35079fe471c416abd9dfb9aa782ae53 Mon Sep 17 00:00:00 2001
From: Mrs4s
Date: Tue, 17 Nov 2020 19:05:11 +0800
Subject: [PATCH 158/367] fix cqcode encoder.
---
coolq/cqcode.go | 2 +-
1 file changed, 1 insertion(+), 1 deletion(-)
diff --git a/coolq/cqcode.go b/coolq/cqcode.go
index 3f864bb..3a1375e 100644
--- a/coolq/cqcode.go
+++ b/coolq/cqcode.go
@@ -196,7 +196,7 @@ func ToArrayMessage(e []message.IMessageElement, code int64, raw ...bool) (r []M
}
}
default:
- return
+ continue
}
r = append(r, m)
}
From 31756e9e1d2a08b335245d1e9c8efd78b87902d1 Mon Sep 17 00:00:00 2001
From: Mrs4s
Date: Tue, 17 Nov 2020 19:06:23 +0800
Subject: [PATCH 159/367] update MiraiGo.
---
go.mod | 2 +-
go.sum | 14 ++------------
2 files changed, 3 insertions(+), 13 deletions(-)
diff --git a/go.mod b/go.mod
index 6f2fbe4..ff052e6 100644
--- a/go.mod
+++ b/go.mod
@@ -3,7 +3,7 @@ module github.com/Mrs4s/go-cqhttp
go 1.14
require (
- github.com/Mrs4s/MiraiGo v0.0.0-20201114160242-6b9dd7feaa20
+ github.com/Mrs4s/MiraiGo v0.0.0-20201117105832-3abc734886c9
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
diff --git a/go.sum b/go.sum
index f240eb0..c209103 100644
--- a/go.sum
+++ b/go.sum
@@ -1,13 +1,7 @@
cloud.google.com/go v0.26.0/go.mod h1:aQUYkXzVsufM+DwF1aE+0xfcU+56JwCaLick0ClmMTw=
github.com/BurntSushi/toml v0.3.1/go.mod h1:xHWCNGjB5oqiDr8zfno3MHue2Ht5sIBksp03qcyfWMU=
-github.com/Mrs4s/MiraiGo v0.0.0-20201114105236-1ea9f982fee4 h1:0qoqKkSLTnWBS2rZm95ey9YYbCo4sujO4Kk2frw27yY=
-github.com/Mrs4s/MiraiGo v0.0.0-20201114105236-1ea9f982fee4/go.mod h1:pAsWtMIwqkBXr5DkUpTIHoWQJNduVnX9WSBPmPvkuCs=
-github.com/Mrs4s/MiraiGo v0.0.0-20201114105600-231b2d89dbb9 h1:evnR9D9rXcBTUzioFf7XlXX4KbZBhc0/Urp09yV01dc=
-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/Mrs4s/MiraiGo v0.0.0-20201117105832-3abc734886c9 h1:I+JQrVNt49MYnDKel5swBlwjKV3mMEcBLxlNu+CyyyI=
+github.com/Mrs4s/MiraiGo v0.0.0-20201117105832-3abc734886c9/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=
@@ -16,7 +10,6 @@ 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=
@@ -76,9 +69,7 @@ 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=
@@ -126,7 +117,6 @@ 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=
From 1dbd72c138d4864079a6396b2fd452f78b7219b5 Mon Sep 17 00:00:00 2001
From: Mrs4s
Date: Tue, 17 Nov 2020 19:13:44 +0800
Subject: [PATCH 160/367] update MiraiGo.
---
go.mod | 2 +-
go.sum | 2 ++
2 files changed, 3 insertions(+), 1 deletion(-)
diff --git a/go.mod b/go.mod
index ff052e6..44a32aa 100644
--- a/go.mod
+++ b/go.mod
@@ -3,7 +3,7 @@ module github.com/Mrs4s/go-cqhttp
go 1.14
require (
- github.com/Mrs4s/MiraiGo v0.0.0-20201117105832-3abc734886c9
+ github.com/Mrs4s/MiraiGo v0.0.0-20201117111231-c7a3a6db4df4
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
diff --git a/go.sum b/go.sum
index c209103..da063f5 100644
--- a/go.sum
+++ b/go.sum
@@ -2,6 +2,8 @@ cloud.google.com/go v0.26.0/go.mod h1:aQUYkXzVsufM+DwF1aE+0xfcU+56JwCaLick0ClmMT
github.com/BurntSushi/toml v0.3.1/go.mod h1:xHWCNGjB5oqiDr8zfno3MHue2Ht5sIBksp03qcyfWMU=
github.com/Mrs4s/MiraiGo v0.0.0-20201117105832-3abc734886c9 h1:I+JQrVNt49MYnDKel5swBlwjKV3mMEcBLxlNu+CyyyI=
github.com/Mrs4s/MiraiGo v0.0.0-20201117105832-3abc734886c9/go.mod h1:pAsWtMIwqkBXr5DkUpTIHoWQJNduVnX9WSBPmPvkuCs=
+github.com/Mrs4s/MiraiGo v0.0.0-20201117111231-c7a3a6db4df4 h1:h95uCem1GuY4NUJMTcHUvpWvho2tzPru4t5Nlk+Hljg=
+github.com/Mrs4s/MiraiGo v0.0.0-20201117111231-c7a3a6db4df4/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=
From 39da1636416ddc541db258fc8fcce384acbf0e5f Mon Sep 17 00:00:00 2001
From: wfjsw
Date: Tue, 17 Nov 2020 20:24:38 +0800
Subject: [PATCH 161/367] proper flash pic support
---
coolq/cqcode.go | 14 ++++++++++++++
coolq/event.go | 22 ++++++++++++++++++++++
2 files changed, 36 insertions(+)
diff --git a/coolq/cqcode.go b/coolq/cqcode.go
index 3f864bb..622cd6b 100644
--- a/coolq/cqcode.go
+++ b/coolq/cqcode.go
@@ -183,6 +183,16 @@ func ToArrayMessage(e []message.IMessageElement, code int64, raw ...bool) (r []M
"data": map[string]string{"file": o.Filename, "url": o.Url},
}
}
+ case *message.GroupFlashImgElement:
+ return []MSG{MSG{
+ "type": "image",
+ "data": map[string]string{"file": o.Filename, "type": "flash"},
+ }}
+ case *message.FriendFlashImgElement:
+ return []MSG{MSG{
+ "type": "image",
+ "data": map[string]string{"file": o.Filename, "type": "flash"},
+ }}
case *message.ServiceElement:
if isOk := strings.Contains(o.Content, "
Date: Tue, 17 Nov 2020 20:55:22 +0800
Subject: [PATCH 162/367] Update dependencies
---
go.mod | 2 +-
go.sum | 29 +++++++++++++++++++++--------
2 files changed, 22 insertions(+), 9 deletions(-)
diff --git a/go.mod b/go.mod
index 6f2fbe4..6382ee6 100644
--- a/go.mod
+++ b/go.mod
@@ -3,7 +3,7 @@ module github.com/Mrs4s/go-cqhttp
go 1.14
require (
- github.com/Mrs4s/MiraiGo v0.0.0-20201114160242-6b9dd7feaa20
+ github.com/Mrs4s/MiraiGo v0.0.0-20201117124530-0a7e4ea55756
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
diff --git a/go.sum b/go.sum
index f240eb0..97ffb86 100644
--- a/go.sum
+++ b/go.sum
@@ -1,16 +1,11 @@
cloud.google.com/go v0.26.0/go.mod h1:aQUYkXzVsufM+DwF1aE+0xfcU+56JwCaLick0ClmMTw=
github.com/BurntSushi/toml v0.3.1/go.mod h1:xHWCNGjB5oqiDr8zfno3MHue2Ht5sIBksp03qcyfWMU=
-github.com/Mrs4s/MiraiGo v0.0.0-20201114105236-1ea9f982fee4 h1:0qoqKkSLTnWBS2rZm95ey9YYbCo4sujO4Kk2frw27yY=
-github.com/Mrs4s/MiraiGo v0.0.0-20201114105236-1ea9f982fee4/go.mod h1:pAsWtMIwqkBXr5DkUpTIHoWQJNduVnX9WSBPmPvkuCs=
-github.com/Mrs4s/MiraiGo v0.0.0-20201114105600-231b2d89dbb9 h1:evnR9D9rXcBTUzioFf7XlXX4KbZBhc0/Urp09yV01dc=
-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/Mrs4s/MiraiGo v0.0.0-20201117124530-0a7e4ea55756 h1:PDHbcr2ULmygPq5K7dAn36mAbGoWbFB1w+u1qMTd6eI=
+github.com/Mrs4s/MiraiGo v0.0.0-20201117124530-0a7e4ea55756/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=
+github.com/davecgh/go-spew v1.1.1 h1:vj9j/u1bqnvCEfJOwUhtlOARqs3+rkHYY13jYWTU97c=
github.com/davecgh/go-spew v1.1.1/go.mod h1:J7Y8YcW2NihsgmVo/mv3lAwl/skON4iLHjSsI+c5H38=
github.com/dustin/go-humanize v1.0.0 h1:VSnTsYCnlFHaM2/igO1h6X3HA71jcobQuxemgkq4zYo=
github.com/dustin/go-humanize v1.0.0/go.mod h1:HtrtbFcZ19U5GC7JDqmcUSB87Iq5E25KnS6fMYU6eOk=
@@ -18,6 +13,7 @@ github.com/envoyproxy/go-control-plane v0.9.1-0.20191026205805-5f8ba28d4473/go.m
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 h1:IXs+QLmnXW2CcXuY+8Mzv/fWEsPGWxqefPtCP5CnV9I=
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=
@@ -38,6 +34,7 @@ github.com/gin-contrib/sse v0.1.0/go.mod h1:RHrZQHXnP2xjPF+u1gW/2HnVO7nvIa9PG3Gm
github.com/gin-gonic/gin v1.5.0/go.mod h1:Nd6IXA8m5kNZdNEHMBd93KT+mdY3+bewLgRvmCsR2Do=
github.com/gin-gonic/gin v1.6.3 h1:ahKqKTFpO5KTPHxWZjEdPScmYaGtLo8Y4DMHoEsnp14=
github.com/gin-gonic/gin v1.6.3/go.mod h1:75u5sXoLsGZoRN5Sgbi1eraJ4GU3++wFwWzhwvtwp4M=
+github.com/go-playground/assert/v2 v2.0.1 h1:MsBgLAaY856+nPRTKrp3/OZK38U/wa0CcBYNjji3q3A=
github.com/go-playground/assert/v2 v2.0.1/go.mod h1:VDjEfimB/XKnb+ZQfWdccd7VUvScMdVu0Titje2rxJ4=
github.com/go-playground/locales v0.12.1/go.mod h1:IUMDtCfWo/w/mtMfIE/IG2K+Ey3ygWanZIBtBW0W2TM=
github.com/go-playground/locales v0.13.0 h1:HyWk6mgj5qFqCT5fjGBuRArbVDfE4hi8+e8ceBS/t7Q=
@@ -68,19 +65,23 @@ github.com/google/go-cmp v0.2.0/go.mod h1:oXzfMopK8JAjlY9xF4vHSVASa0yLyX7SntLO5a
github.com/google/go-cmp v0.3.0/go.mod h1:8QqcDgzrUqlUb/G2PQTWiueGozuR1884gddMywk6iLU=
github.com/google/go-cmp v0.3.1/go.mod h1:8QqcDgzrUqlUb/G2PQTWiueGozuR1884gddMywk6iLU=
github.com/google/go-cmp v0.4.0/go.mod h1:v8dTdLbMG2kIc/vJvl+f65V22dbkXbowE6jgT/gNBxE=
+github.com/google/go-cmp v0.5.0 h1:/QaMHBdZ26BB3SSst0Iwl10Epc+xhTquomWX0oZEB6w=
github.com/google/go-cmp v0.5.0/go.mod h1:v8dTdLbMG2kIc/vJvl+f65V22dbkXbowE6jgT/gNBxE=
github.com/google/gofuzz v1.0.0/go.mod h1:dBl0BpW6vV/+mYPU4Po3pmUjxk6FQPldtuIdl/M65Eg=
+github.com/google/uuid v1.1.1 h1:Gkbcsh/GbpXz7lPftLA3P6TYMwjCLYm83jiFQZF/3gY=
github.com/google/uuid v1.1.1/go.mod h1:TIyPZe4MgqvfeYDBFedMoGGpEw/LqOeaOT+nhxU+yHo=
github.com/gorilla/websocket v1.4.2 h1:+/TMaTYc4QFitKJxsQ7Yye35DkWvkdLcvGKqM+x0Ufc=
github.com/gorilla/websocket v1.4.2/go.mod h1:YR8l580nyteQvAITg2hZ9XVh4b55+EU/adAjf1fMHhE=
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 h1:nfCOvKYfkgYP8hkirhJocXT2+zOD8yUNjXaWfTlyFKI=
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 h1:9yzud/Ht36ygwatGx56VwCZtlI/2AD15T1X2sjSuGns=
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=
github.com/kardianos/osext v0.0.0-20190222173326-2bc1f35cddc0/go.mod h1:1NbS8ALrpOvjt0rHPNLyCIeMtbizbir8U//inJ+zuB8=
@@ -90,6 +91,7 @@ github.com/kr/binarydist v0.1.0/go.mod h1:DY7S//GCoz1BCd0B0EVrinCKAZN3pXe+MDaIZb
github.com/leodido/go-urn v1.1.0/go.mod h1:+cyI34gQWZcE1eQU7NVgKkkzdXDQHr1dBMtdAPozLkw=
github.com/leodido/go-urn v1.2.0 h1:hpXL4XnriNwQ/ABnpepYM/1vCLWNDfUNts8dX3xTG6Y=
github.com/leodido/go-urn v1.2.0/go.mod h1:+8+nEpDfqqsY+g338gtMEUOtuK+4dEMhiQEgxpxOKII=
+github.com/lestrrat-go/envload v0.0.0-20180220234015-a3eb8ddeffcc h1:RKf14vYWi2ttpEmkA4aQ3j4u9dStX2t4M8UM6qqNsG8=
github.com/lestrrat-go/envload v0.0.0-20180220234015-a3eb8ddeffcc/go.mod h1:kopuH9ugFRkIXf3YoqHKyrJ9YfUFsckUU9S7B+XP+is=
github.com/lestrrat-go/file-rotatelogs v2.4.0+incompatible h1:Y6sqxHMyB1D2YSzWkLibYKgg+SwmyFU9dF2hn6MdTj4=
github.com/lestrrat-go/file-rotatelogs v2.4.0+incompatible/go.mod h1:ZQnN8lSECaebrkQytbHj4xNgtg8CR7RYXnPok8e0EHA=
@@ -98,18 +100,23 @@ github.com/lestrrat-go/strftime v1.0.3/go.mod h1:E1nN3pCbtMSu1yjSVeyuRFVm/U0xoR7
github.com/mattn/go-isatty v0.0.9/go.mod h1:YNRxwqDuOph6SZLI9vUUz6OYw3QyUt7WiY2yME+cCiQ=
github.com/mattn/go-isatty v0.0.12 h1:wuysRhFDzyxgEmMf5xjvJ2M9dZoWAXNNr5LSBS7uHXY=
github.com/mattn/go-isatty v0.0.12/go.mod h1:cbi8OIDigv2wuxKPP5vlRcQ1OAZbq2CE4Kysco4FUpU=
+github.com/modern-go/concurrent v0.0.0-20180228061459-e0a39a4cb421 h1:ZqeYNhU3OHLH3mGKHDcjJRFFRrJa6eAM5H+CtDdOsPc=
github.com/modern-go/concurrent v0.0.0-20180228061459-e0a39a4cb421/go.mod h1:6dJC0mAP4ikYIbvyc7fijjWJddQyLn8Ig3JB5CqoB9Q=
+github.com/modern-go/reflect2 v0.0.0-20180701023420-4b7aa43c6742 h1:Esafd1046DLDQ0W1YjYsBW+p8U2u7vzgW2SQVmlNazg=
github.com/modern-go/reflect2 v0.0.0-20180701023420-4b7aa43c6742/go.mod h1:bx2lNnkwVCuqBIxFjflWJWanXIb3RllmbCylyMrvgv0=
github.com/nfnt/resize v0.0.0-20180221191011-83c6a9932646 h1:zYyBkD/k9seD2A7fsi6Oo2LfFZAehjjQMERAvZLEDnQ=
github.com/nfnt/resize v0.0.0-20180221191011-83c6a9932646/go.mod h1:jpp1/29i3P1S/RLdc7JQKbRpFeM1dOBd8T9ki5s+AY8=
github.com/onsi/ginkgo v1.6.0/go.mod h1:lLunBs/Ym6LB5Z9jYTR76FiuTmxDTDusOGeTQH+WWjE=
+github.com/onsi/ginkgo v1.7.0 h1:WSHQ+IS43OoUrWtD1/bbclrwK8TTH5hzp+umCiuxHgs=
github.com/onsi/ginkgo v1.7.0/go.mod h1:lLunBs/Ym6LB5Z9jYTR76FiuTmxDTDusOGeTQH+WWjE=
+github.com/onsi/gomega v1.4.3 h1:RE1xgDvH7imwFD45h+u2SgIfERHlS2yNG4DObb5BSKU=
github.com/onsi/gomega v1.4.3/go.mod h1:ex+gbHU/CVuBBDIJjb2X0qEXbFg53c61hWP/1CpauHY=
github.com/oxtoacart/bpool v0.0.0-20190530202638-03653db5a59c h1:rp5dCmg/yLR3mgFuSOe4oEnDDmGLROTvMragMUXpTQw=
github.com/oxtoacart/bpool v0.0.0-20190530202638-03653db5a59c/go.mod h1:X07ZCGwUbLaax7L0S3Tw4hpejzu63ZrrQiUe6W0hcy0=
github.com/pkg/errors v0.8.1/go.mod h1:bwawxfHBFNV+L2hUp1rHADufV3IMtnDRdf1r5NINEl0=
github.com/pkg/errors v0.9.1 h1:FEBLx1zS214owpjy7qsBeixbURkuhQAwrK5UwLGTwt4=
github.com/pkg/errors v0.9.1/go.mod h1:bwawxfHBFNV+L2hUp1rHADufV3IMtnDRdf1r5NINEl0=
+github.com/pmezard/go-difflib v1.0.0 h1:4DBwDE0NGyQoBHbLQYPwSUPoCMWR5BEzIk/f1lZbAQM=
github.com/pmezard/go-difflib v1.0.0/go.mod h1:iKH77koFhYxTK1pcRnkKkqfTogsbg7gZNVY4sRDYZ/4=
github.com/prometheus/client_model v0.0.0-20190812154241-14fe0d1b01d4/go.mod h1:xMI15A0UPsDsEKsMN9yxemIoYk6Tm2C1GtYGdfGttqA=
github.com/rifflock/lfshook v0.0.0-20180920164130-b9218ef580f5 h1:mZHayPoR0lNmnHyvtYjDeq0zlVHn9K/ZXoy17ylucdo=
@@ -121,6 +128,7 @@ github.com/stretchr/objx v0.1.0/go.mod h1:HFkY916IF+rwdDfMAkV7OtwuqBVzrE8GR6GFx+
github.com/stretchr/objx v0.1.1/go.mod h1:HFkY916IF+rwdDfMAkV7OtwuqBVzrE8GR6GFx+wExME=
github.com/stretchr/testify v1.2.2/go.mod h1:a8OnRcib4nhh0OaRAV+Yts87kKdq0PP7pXfy6kDkUVs=
github.com/stretchr/testify v1.3.0/go.mod h1:M5WIy9Dh21IEIfnGCwXGc5bZfKNJtfHm1UVUgZn+9EI=
+github.com/stretchr/testify v1.4.0 h1:2E4SXV/wtOkTonXsotYi4li6zVWxYlZuYNCXe9XRJyk=
github.com/stretchr/testify v1.4.0/go.mod h1:j7eGeouHqKxXV5pUuKE4zz7dFj8WfuZ+81PSLYec5m4=
github.com/syndtr/goleveldb v1.0.0 h1:fBdIW9lB4Iz0n9khmH8w27SJ3QEJ7+IgjPEwGSZiFdE=
github.com/syndtr/goleveldb v1.0.0/go.mod h1:ZVVdQEZoIme9iO1Ch2Jdy24qqXrMMOU6lpPAyBWyWuQ=
@@ -168,6 +176,7 @@ golang.org/x/sys v0.0.0-20191026070338-33540a1f6037/go.mod h1:h1NjWce9XRLGQEsW7w
golang.org/x/sys v0.0.0-20200116001909-b77594299b42 h1:vEOn+mP2zCOVzKckCZy6YsCtDblrpj/w7B9nxGNELpg=
golang.org/x/sys v0.0.0-20200116001909-b77594299b42/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs=
golang.org/x/text v0.3.0/go.mod h1:NqM8EUOU14njkJ3fqMW+pc6Ldnwhi/IjpwHt7yyuwOQ=
+golang.org/x/text v0.3.2 h1:tW2bmiBqwgJj/UpqtC8EpXEZVYOwU0yG4iWbprSVAcs=
golang.org/x/text v0.3.2/go.mod h1:bEr9sfX3Q8Zfm5fL9x+3itogRgK3+ptLWKqgva+5dAk=
golang.org/x/time v0.0.0-20200630173020-3af7569d3a1e h1:EHBhcS0mlXEAVwNyO2dLfjToGsyY4j24pTs2ScHnX7s=
golang.org/x/time v0.0.0-20200630173020-3af7569d3a1e/go.mod h1:tRJNPiyCQ0inRvYxbN9jk5I+vvW/OXSQhTDSoE431IQ=
@@ -176,6 +185,7 @@ golang.org/x/tools v0.0.0-20190114222345-bf090417da8b/go.mod h1:n7NCudcB/nEzxVGm
golang.org/x/tools v0.0.0-20190226205152-f727befe758c/go.mod h1:9Yl7xja0Znq3iFh3HoIrodX9oNMXvdceNzlUR8zjMvY=
golang.org/x/tools v0.0.0-20190311212946-11955173bddd/go.mod h1:LCzVGOaR6xXOjkQ3onu1FJEFr0SW1gC7cKk1uF8kGRs=
golang.org/x/tools v0.0.0-20190524140312-2c0ae7006135/go.mod h1:RgjU9mgBXZiqYHBnxXauZ1Gv1EHHAz9KjViQ78xBX0Q=
+golang.org/x/xerrors v0.0.0-20191204190536-9bdfabe68543 h1:E7g+9GITq07hpfrRu66IVDexMakfv52eLZ2CXBWiKr4=
golang.org/x/xerrors v0.0.0-20191204190536-9bdfabe68543/go.mod h1:I/5z698sn9Ka8TeJc9MKroUUfqBBauWjQqLJ2OPfmY0=
google.golang.org/appengine v1.1.0/go.mod h1:EbEs0AVv82hx2wNQdGPgUI5lhzA/G0D9YwlJXL52JkM=
google.golang.org/appengine v1.4.0/go.mod h1:xpcJRLb0r/rnEns0DIKYYv+WjYCduHsrkT7/EB5XEv4=
@@ -195,10 +205,13 @@ google.golang.org/protobuf v1.23.0/go.mod h1:EGpADcykh3NcUnDUJcl1+ZksZNG86OlYog2
google.golang.org/protobuf v1.23.1-0.20200526195155-81db48ad09cc/go.mod h1:EGpADcykh3NcUnDUJcl1+ZksZNG86OlYog2l/sGQquU=
google.golang.org/protobuf v1.25.0 h1:Ejskq+SyPohKW+1uil0JJMtmHCgJPJ/qWTxr8qp+R4c=
google.golang.org/protobuf v1.25.0/go.mod h1:9JNX74DMeImyA3h4bdi1ymwjUzf21/xIlbajtzgsN7c=
+gopkg.in/check.v1 v0.0.0-20161208181325-20d25e280405 h1:yhCVgyC4o1eVCa2tZl7eS0r+SDo693bJlVdllGtEeKM=
gopkg.in/check.v1 v0.0.0-20161208181325-20d25e280405/go.mod h1:Co6ibVJAznAaIkqp8huTwlJQCZ016jof/cbN4VW5Yz0=
+gopkg.in/fsnotify.v1 v1.4.7 h1:xOHLXZwVvI9hhs+cLKq5+I5onOuwQLhQwiu63xxlHs4=
gopkg.in/fsnotify.v1 v1.4.7/go.mod h1:Tz8NjZHkW78fSQdbUxIjBTcgA1z1m8ZHf0WmKUhAMys=
gopkg.in/go-playground/assert.v1 v1.2.1/go.mod h1:9RXL0bg/zibRAgZUYszZSwO/z8Y/a8bDuhia5mkpMnE=
gopkg.in/go-playground/validator.v9 v9.29.1/go.mod h1:+c9/zcJMFNgbLvly1L1V+PpxWdVbfP1avr/N00E2vyQ=
+gopkg.in/tomb.v1 v1.0.0-20141024135613-dd632973f1e7 h1:uRGJdciOHaEIrze2W8Q3AKkepLTh2hOroT7a+7czfdQ=
gopkg.in/tomb.v1 v1.0.0-20141024135613-dd632973f1e7/go.mod h1:dt/ZhP58zS4L8KSrWDmTeBkI65Dw0HsyUHuEVlX15mw=
gopkg.in/yaml.v2 v2.2.1/go.mod h1:hI93XBmqTisBFMUTm0b8Fm+jr3Dg1NNxqwp+5A1VGuI=
gopkg.in/yaml.v2 v2.2.2/go.mod h1:hI93XBmqTisBFMUTm0b8Fm+jr3Dg1NNxqwp+5A1VGuI=
From df0d5af07a0e0fa7e761f38fae8b4bd9b8ca139c Mon Sep 17 00:00:00 2001
From: Mrs4s
Date: Wed, 18 Nov 2020 00:04:33 +0800
Subject: [PATCH 163/367] update MiraiGo.
---
go.mod | 6 +-----
go.sum | 10 ++--------
2 files changed, 3 insertions(+), 13 deletions(-)
diff --git a/go.mod b/go.mod
index 44a32aa..6eed354 100644
--- a/go.mod
+++ b/go.mod
@@ -3,16 +3,13 @@ module github.com/Mrs4s/go-cqhttp
go 1.14
require (
- github.com/Mrs4s/MiraiGo v0.0.0-20201117111231-c7a3a6db4df4
+ github.com/Mrs4s/MiraiGo v0.0.0-20201117154121-989187125900
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
@@ -22,7 +19,6 @@ 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 da063f5..cacb4c2 100644
--- a/go.sum
+++ b/go.sum
@@ -1,9 +1,7 @@
cloud.google.com/go v0.26.0/go.mod h1:aQUYkXzVsufM+DwF1aE+0xfcU+56JwCaLick0ClmMTw=
github.com/BurntSushi/toml v0.3.1/go.mod h1:xHWCNGjB5oqiDr8zfno3MHue2Ht5sIBksp03qcyfWMU=
-github.com/Mrs4s/MiraiGo v0.0.0-20201117105832-3abc734886c9 h1:I+JQrVNt49MYnDKel5swBlwjKV3mMEcBLxlNu+CyyyI=
-github.com/Mrs4s/MiraiGo v0.0.0-20201117105832-3abc734886c9/go.mod h1:pAsWtMIwqkBXr5DkUpTIHoWQJNduVnX9WSBPmPvkuCs=
-github.com/Mrs4s/MiraiGo v0.0.0-20201117111231-c7a3a6db4df4 h1:h95uCem1GuY4NUJMTcHUvpWvho2tzPru4t5Nlk+Hljg=
-github.com/Mrs4s/MiraiGo v0.0.0-20201117111231-c7a3a6db4df4/go.mod h1:pAsWtMIwqkBXr5DkUpTIHoWQJNduVnX9WSBPmPvkuCs=
+github.com/Mrs4s/MiraiGo v0.0.0-20201117154121-989187125900 h1:xnx3dH7hgZ/Z4k33EhKzBmQhwASJ5bvsorqPhO0DWbc=
+github.com/Mrs4s/MiraiGo v0.0.0-20201117154121-989187125900/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=
@@ -12,7 +10,6 @@ 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/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=
@@ -71,8 +68,6 @@ 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/go.mod h1:cJ6Cj7dQo+O6GJNiMx+Pa94qKj+TG8ONdKHgMNIyyag=
-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=
@@ -119,7 +114,6 @@ 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/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=
From d94d389843394c7d256b8013c4a28c05658ed4a5 Mon Sep 17 00:00:00 2001
From: Mrs4s
Date: Wed, 18 Nov 2020 00:17:05 +0800
Subject: [PATCH 164/367] doc update.
---
docs/config.md | 8 ++++----
1 file changed, 4 insertions(+), 4 deletions(-)
diff --git a/docs/config.md b/docs/config.md
index 4201ef0..5e5334f 100644
--- a/docs/config.md
+++ b/docs/config.md
@@ -112,10 +112,10 @@ go-cqhttp 支持导入CQHTTP的配置文件, 具体步骤为:
| 值 | 类型 | 限制 |
| --- | ------------- | ---------------------------------------------------------------- |
-| 0 | iPad | 无 |
-| 1 | Android Phone | 无 |
-| 2 | Android Watch | 无法接收 `group_notify` 事件、无法接收口令红包、无法接收撤回消息 |
-| 3 | MacOS | 无 |
+| 0 | iPad | 无 |
+| 1 | Android Phone | 无法接收新版表情如 `/吃瓜 /汪汪`, 会自动转换为字符串 |
+| 2 | Android Watch | 除`Android Phone`的限制外, 无法接收 `notify` 事件、无法接收口令红包、无法接收撤回消息 |
+| 3 | MacOS | 无 |
> 注意, 根据协议的不同, 各类消息有所限制
From 8f765583176ce28d1499ead2af49a3b50e70393a Mon Sep 17 00:00:00 2001
From: Mrs4s
Date: Wed, 18 Nov 2020 00:37:00 +0800
Subject: [PATCH 165/367] fix actions.
---
.github/workflows/release.yml | 2 +-
1 file changed, 1 insertion(+), 1 deletion(-)
diff --git a/.github/workflows/release.yml b/.github/workflows/release.yml
index 51dc5bc..93fc465 100644
--- a/.github/workflows/release.yml
+++ b/.github/workflows/release.yml
@@ -20,7 +20,7 @@ jobs:
steps:
- uses: actions/checkout@v2
- name: Set RELEASE_VERSION env
- run: echo ::set-env name=RELEASE_VERSION::${GITHUB_REF:10}
+ run: echo "RELEASE_VERSION=${GITHUB_REF:10}" >> $GITHUB_ENV
- uses: pcrbot/go-release-action@master
env:
CGO_ENABLED: 0
From 83e0aaa0f8aa2928f72c12f04ef0826ea7de15f4 Mon Sep 17 00:00:00 2001
From: Ink-33
Date: Wed, 18 Nov 2020 01:31:45 +0800
Subject: [PATCH 166/367] Fix: set_restart api panic
---
main.go | 1 -
1 file changed, 1 deletion(-)
diff --git a/main.go b/main.go
index b09ece5..da2ac3d 100644
--- a/main.go
+++ b/main.go
@@ -328,7 +328,6 @@ func main() {
b.Release()
case <-r:
log.Info("正在重启中...")
- server.HttpServer.ShutDown()
defer b.Release()
restart(arg)
}
From eb3d7434cc8782003af61b47acf12fb125ebb063 Mon Sep 17 00:00:00 2001
From: wdvxdr
Date: Wed, 18 Nov 2020 21:06:37 +0800
Subject: [PATCH 167/367] use hjson
---
coolq/bot.go | 4 +++-
docs/adminApi.md | 10 +++++-----
docs/config.md | 2 +-
docs/file.md | 4 ++--
docs/quick_start.md | 8 ++++----
global/config.go | 22 +++++++++++++++++-----
go.mod | 6 ++++++
go.sum | 29 +++++++++++++++++++++++++++++
main.go | 26 ++++++++++++++++----------
server/apiAdmin.go | 40 +++++++++++++++++++++-------------------
10 files changed, 104 insertions(+), 47 deletions(-)
diff --git a/coolq/bot.go b/coolq/bot.go
index 6ea59f6..45d6861 100644
--- a/coolq/bot.go
+++ b/coolq/bot.go
@@ -3,7 +3,6 @@ package coolq
import (
"bytes"
"encoding/gob"
- "encoding/json"
"fmt"
"hash/crc32"
"path"
@@ -17,10 +16,13 @@ import (
"github.com/Mrs4s/MiraiGo/message"
"github.com/Mrs4s/go-cqhttp/global"
+ jsoniter "github.com/json-iterator/go"
log "github.com/sirupsen/logrus"
"github.com/tidwall/gjson"
)
+var json = jsoniter.ConfigCompatibleWithStandardLibrary
+
type CQBot struct {
Client *client.QQClient
diff --git a/docs/adminApi.md b/docs/adminApi.md
index 374bfd1..a455dcd 100644
--- a/docs/adminApi.md
+++ b/docs/adminApi.md
@@ -8,7 +8,7 @@
| 参数名 | 类型 | 说明 |
| ------------ | ------ | --------------------------- |
-| access_token | string | 校验口令,config.json中配置 |
+| access_token | string | 校验口令,config.hjson中配置 |
@@ -209,7 +209,7 @@ method: `POST` formdata
### admin/do_config_json
-> 直接修改 config.json配置
+> 直接修改 config.hjson配置
method: `POST` formdata
@@ -217,7 +217,7 @@ method: `POST` formdata
| 参数名 | 类型 | 说明 |
| ------ | ------ | ----------------------------------- |
-| json | string | 完整的config.json的配合,json字符串 |
+| json | string | 完整的config.hjson的配合,json字符串 |
返回:
@@ -228,7 +228,7 @@ method: `POST` formdata
### admin/get_config_json
-> 获取当前 config.json配置
+> 获取当前 config.hjson配置
method: `GET`
@@ -247,5 +247,5 @@ method: `GET`
| 参数名 | 类型 | 说明 |
| ------ | ------ | ----------------------------------- |
-| config | string | 完整的config.json的配合,json字符串 |
+| config | string | 完整的config.hjson的配合,json字符串 |
diff --git a/docs/config.md b/docs/config.md
index 5e5334f..19595f4 100644
--- a/docs/config.md
+++ b/docs/config.md
@@ -1,6 +1,6 @@
# 配置
-go-cqhttp 包含 `config.json` 和 `device.json` 两个配置文件, 其中 `config.json` 为运行配置 `device.json` 为虚拟设备信息.
+go-cqhttp 包含 `config.hjson` 和 `device.json` 两个配置文件, 其中 `config.json` 为运行配置 `device.json` 为虚拟设备信息.
## 从原CQHTTP导入配置
diff --git a/docs/file.md b/docs/file.md
index 4fe926e..987a49d 100644
--- a/docs/file.md
+++ b/docs/file.md
@@ -5,7 +5,7 @@ go-cqhttp 默认生成的文件树如下所示:
````
.
├── go-cqhttp
-├── config.json
+├── config.hjson
├── device.json
├── logs
│ └── xx-xx-xx.log
@@ -18,7 +18,7 @@ go-cqhttp 默认生成的文件树如下所示:
| 文件 | 用途 |
| ----------- | ------------------- |
| go-cqhttp | go-cqhttp可执行文件 |
-| config.json | 运行配置文件 |
+| config.hjson | 运行配置文件 |
| device.json | 虚拟设备配置文件 |
| logs | 日志存放目录 |
| data | 数据目录 |
diff --git a/docs/quick_start.md b/docs/quick_start.md
index 778a533..d9676a3 100644
--- a/docs/quick_start.md
+++ b/docs/quick_start.md
@@ -28,8 +28,8 @@
1. 双击`go-cqhttp.exe`此时将提示
```
-[WARNING]: 尝试加载配置文件 config.json 失败: 文件不存在
-[INFO]: 默认配置文件已生成,请编辑 config.json 后重启程序.
+[WARNING]: 尝试加载配置文件 config.hjson 失败: 文件不存在
+[INFO]: 默认配置文件已生成,请编辑 config.hjson 后重启程序.
```
2. 参照[config.md](https://github.com/Mrs4s/go-cqhttp/blob/master/docs/config.md)和你所用到的插件的 `README` 填入参数
3. 再次双击`go-cqhttp.exe`
@@ -79,8 +79,8 @@ enable ws?(Y/n)
2. `cd`到解压目录
3. 输入 `./go-cqhttp`,`Enter`运行 ,此时将提示
```
-[WARNING]: 尝试加载配置文件 config.json 失败: 文件不存在
-[INFO]: 默认配置文件已生成,请编辑 config.json 后重启程序.
+[WARNING]: 尝试加载配置文件 config.hjson 失败: 文件不存在
+[INFO]: 默认配置文件已生成,请编辑 config.hjson 后重启程序.
```
4. 参照[config.md](https://github.com/Mrs4s/go-cqhttp/blob/master/docs/config.md)和你所用到的插件的 `README` 填入参数
diff --git a/global/config.go b/global/config.go
index 3026065..460e9be 100644
--- a/global/config.go
+++ b/global/config.go
@@ -1,14 +1,17 @@
package global
import (
- "encoding/json"
"os"
"strconv"
"time"
+ "github.com/hjson/hjson-go"
+ jsoniter "github.com/json-iterator/go"
log "github.com/sirupsen/logrus"
)
+var json = jsoniter.ConfigCompatibleWithStandardLibrary
+
type JsonConfig struct {
Uin int64 `json:"uin"`
Password string `json:"password"`
@@ -144,19 +147,28 @@ func Load(p string) *JsonConfig {
log.Warnf("尝试加载配置文件 %v 失败: 文件不存在", p)
return nil
}
- c := JsonConfig{}
- err := json.Unmarshal([]byte(ReadAllText(p)), &c)
+ var dat map[string]interface{}
+ var c = JsonConfig{}
+ err := hjson.Unmarshal([]byte(ReadAllText(p)), &dat)
+ if err == nil {
+ b, _ := json.Marshal(dat)
+ err = json.Unmarshal(b, &c)
+ }
if err != nil {
log.Warnf("尝试加载配置文件 %v 时出现错误: %v", p, err)
log.Infoln("原文件已备份")
- os.Rename(p, p+".backup"+strconv.FormatInt(time.Now().Unix(), 10))
+ _ = os.Rename(p, p+".backup"+strconv.FormatInt(time.Now().Unix(), 10))
return nil
}
return &c
}
func (c *JsonConfig) Save(p string) error {
- data, err := json.MarshalIndent(c, "", "\t")
+ data, err := hjson.MarshalWithOptions(c, hjson.EncoderOptions{
+ Eol: "\n",
+ BracesSameLine: true,
+ IndentBy: " ",
+ })
if err != nil {
return err
}
diff --git a/go.mod b/go.mod
index 6eed354..66122bf 100644
--- a/go.mod
+++ b/go.mod
@@ -5,11 +5,16 @@ go 1.14
require (
github.com/Mrs4s/MiraiGo v0.0.0-20201117154121-989187125900
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/hjson/hjson-go v3.1.0+incompatible
+ github.com/jehiah/go-strftime v0.0.0-20171201141054-1d33003b3869 // indirect
+ github.com/jonboulle/clockwork v0.2.2 // indirect
+ github.com/json-iterator/go v1.1.9
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 +24,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 cacb4c2..8e7d488 100644
--- a/go.sum
+++ b/go.sum
@@ -5,11 +5,15 @@ github.com/Mrs4s/MiraiGo v0.0.0-20201117154121-989187125900/go.mod h1:pAsWtMIwqk
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=
+github.com/davecgh/go-spew v1.1.1 h1:vj9j/u1bqnvCEfJOwUhtlOARqs3+rkHYY13jYWTU97c=
github.com/davecgh/go-spew v1.1.1/go.mod h1:J7Y8YcW2NihsgmVo/mv3lAwl/skON4iLHjSsI+c5H38=
github.com/dustin/go-humanize v1.0.0 h1:VSnTsYCnlFHaM2/igO1h6X3HA71jcobQuxemgkq4zYo=
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 h1:IXs+QLmnXW2CcXuY+8Mzv/fWEsPGWxqefPtCP5CnV9I=
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=
@@ -30,6 +34,7 @@ github.com/gin-contrib/sse v0.1.0/go.mod h1:RHrZQHXnP2xjPF+u1gW/2HnVO7nvIa9PG3Gm
github.com/gin-gonic/gin v1.5.0/go.mod h1:Nd6IXA8m5kNZdNEHMBd93KT+mdY3+bewLgRvmCsR2Do=
github.com/gin-gonic/gin v1.6.3 h1:ahKqKTFpO5KTPHxWZjEdPScmYaGtLo8Y4DMHoEsnp14=
github.com/gin-gonic/gin v1.6.3/go.mod h1:75u5sXoLsGZoRN5Sgbi1eraJ4GU3++wFwWzhwvtwp4M=
+github.com/go-playground/assert/v2 v2.0.1 h1:MsBgLAaY856+nPRTKrp3/OZK38U/wa0CcBYNjji3q3A=
github.com/go-playground/assert/v2 v2.0.1/go.mod h1:VDjEfimB/XKnb+ZQfWdccd7VUvScMdVu0Titje2rxJ4=
github.com/go-playground/locales v0.12.1/go.mod h1:IUMDtCfWo/w/mtMfIE/IG2K+Ey3ygWanZIBtBW0W2TM=
github.com/go-playground/locales v0.13.0 h1:HyWk6mgj5qFqCT5fjGBuRArbVDfE4hi8+e8ceBS/t7Q=
@@ -60,15 +65,25 @@ github.com/google/go-cmp v0.2.0/go.mod h1:oXzfMopK8JAjlY9xF4vHSVASa0yLyX7SntLO5a
github.com/google/go-cmp v0.3.0/go.mod h1:8QqcDgzrUqlUb/G2PQTWiueGozuR1884gddMywk6iLU=
github.com/google/go-cmp v0.3.1/go.mod h1:8QqcDgzrUqlUb/G2PQTWiueGozuR1884gddMywk6iLU=
github.com/google/go-cmp v0.4.0/go.mod h1:v8dTdLbMG2kIc/vJvl+f65V22dbkXbowE6jgT/gNBxE=
+github.com/google/go-cmp v0.5.0 h1:/QaMHBdZ26BB3SSst0Iwl10Epc+xhTquomWX0oZEB6w=
github.com/google/go-cmp v0.5.0/go.mod h1:v8dTdLbMG2kIc/vJvl+f65V22dbkXbowE6jgT/gNBxE=
github.com/google/gofuzz v1.0.0/go.mod h1:dBl0BpW6vV/+mYPU4Po3pmUjxk6FQPldtuIdl/M65Eg=
+github.com/google/uuid v1.1.1 h1:Gkbcsh/GbpXz7lPftLA3P6TYMwjCLYm83jiFQZF/3gY=
github.com/google/uuid v1.1.1/go.mod h1:TIyPZe4MgqvfeYDBFedMoGGpEw/LqOeaOT+nhxU+yHo=
github.com/gorilla/websocket v1.4.2 h1:+/TMaTYc4QFitKJxsQ7Yye35DkWvkdLcvGKqM+x0Ufc=
github.com/gorilla/websocket v1.4.2/go.mod h1:YR8l580nyteQvAITg2hZ9XVh4b55+EU/adAjf1fMHhE=
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/hjson/hjson-go v3.1.0+incompatible h1:DY/9yE8ey8Zv22bY+mHV1uk2yRy0h8tKhZ77hEdi0Aw=
+github.com/hjson/hjson-go v3.1.0+incompatible/go.mod h1:qsetwF8NlsTsOTwZTApNlTCerV+b2GjYRRcIk4JMFio=
+github.com/hpcloud/tail v1.0.0 h1:nfCOvKYfkgYP8hkirhJocXT2+zOD8yUNjXaWfTlyFKI=
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 h1:9yzud/Ht36ygwatGx56VwCZtlI/2AD15T1X2sjSuGns=
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=
github.com/kardianos/osext v0.0.0-20190222173326-2bc1f35cddc0/go.mod h1:1NbS8ALrpOvjt0rHPNLyCIeMtbizbir8U//inJ+zuB8=
@@ -78,6 +93,7 @@ github.com/kr/binarydist v0.1.0/go.mod h1:DY7S//GCoz1BCd0B0EVrinCKAZN3pXe+MDaIZb
github.com/leodido/go-urn v1.1.0/go.mod h1:+cyI34gQWZcE1eQU7NVgKkkzdXDQHr1dBMtdAPozLkw=
github.com/leodido/go-urn v1.2.0 h1:hpXL4XnriNwQ/ABnpepYM/1vCLWNDfUNts8dX3xTG6Y=
github.com/leodido/go-urn v1.2.0/go.mod h1:+8+nEpDfqqsY+g338gtMEUOtuK+4dEMhiQEgxpxOKII=
+github.com/lestrrat-go/envload v0.0.0-20180220234015-a3eb8ddeffcc h1:RKf14vYWi2ttpEmkA4aQ3j4u9dStX2t4M8UM6qqNsG8=
github.com/lestrrat-go/envload v0.0.0-20180220234015-a3eb8ddeffcc/go.mod h1:kopuH9ugFRkIXf3YoqHKyrJ9YfUFsckUU9S7B+XP+is=
github.com/lestrrat-go/file-rotatelogs v2.4.0+incompatible h1:Y6sqxHMyB1D2YSzWkLibYKgg+SwmyFU9dF2hn6MdTj4=
github.com/lestrrat-go/file-rotatelogs v2.4.0+incompatible/go.mod h1:ZQnN8lSECaebrkQytbHj4xNgtg8CR7RYXnPok8e0EHA=
@@ -86,18 +102,23 @@ github.com/lestrrat-go/strftime v1.0.3/go.mod h1:E1nN3pCbtMSu1yjSVeyuRFVm/U0xoR7
github.com/mattn/go-isatty v0.0.9/go.mod h1:YNRxwqDuOph6SZLI9vUUz6OYw3QyUt7WiY2yME+cCiQ=
github.com/mattn/go-isatty v0.0.12 h1:wuysRhFDzyxgEmMf5xjvJ2M9dZoWAXNNr5LSBS7uHXY=
github.com/mattn/go-isatty v0.0.12/go.mod h1:cbi8OIDigv2wuxKPP5vlRcQ1OAZbq2CE4Kysco4FUpU=
+github.com/modern-go/concurrent v0.0.0-20180228061459-e0a39a4cb421 h1:ZqeYNhU3OHLH3mGKHDcjJRFFRrJa6eAM5H+CtDdOsPc=
github.com/modern-go/concurrent v0.0.0-20180228061459-e0a39a4cb421/go.mod h1:6dJC0mAP4ikYIbvyc7fijjWJddQyLn8Ig3JB5CqoB9Q=
+github.com/modern-go/reflect2 v0.0.0-20180701023420-4b7aa43c6742 h1:Esafd1046DLDQ0W1YjYsBW+p8U2u7vzgW2SQVmlNazg=
github.com/modern-go/reflect2 v0.0.0-20180701023420-4b7aa43c6742/go.mod h1:bx2lNnkwVCuqBIxFjflWJWanXIb3RllmbCylyMrvgv0=
github.com/nfnt/resize v0.0.0-20180221191011-83c6a9932646 h1:zYyBkD/k9seD2A7fsi6Oo2LfFZAehjjQMERAvZLEDnQ=
github.com/nfnt/resize v0.0.0-20180221191011-83c6a9932646/go.mod h1:jpp1/29i3P1S/RLdc7JQKbRpFeM1dOBd8T9ki5s+AY8=
github.com/onsi/ginkgo v1.6.0/go.mod h1:lLunBs/Ym6LB5Z9jYTR76FiuTmxDTDusOGeTQH+WWjE=
+github.com/onsi/ginkgo v1.7.0 h1:WSHQ+IS43OoUrWtD1/bbclrwK8TTH5hzp+umCiuxHgs=
github.com/onsi/ginkgo v1.7.0/go.mod h1:lLunBs/Ym6LB5Z9jYTR76FiuTmxDTDusOGeTQH+WWjE=
+github.com/onsi/gomega v1.4.3 h1:RE1xgDvH7imwFD45h+u2SgIfERHlS2yNG4DObb5BSKU=
github.com/onsi/gomega v1.4.3/go.mod h1:ex+gbHU/CVuBBDIJjb2X0qEXbFg53c61hWP/1CpauHY=
github.com/oxtoacart/bpool v0.0.0-20190530202638-03653db5a59c h1:rp5dCmg/yLR3mgFuSOe4oEnDDmGLROTvMragMUXpTQw=
github.com/oxtoacart/bpool v0.0.0-20190530202638-03653db5a59c/go.mod h1:X07ZCGwUbLaax7L0S3Tw4hpejzu63ZrrQiUe6W0hcy0=
github.com/pkg/errors v0.8.1/go.mod h1:bwawxfHBFNV+L2hUp1rHADufV3IMtnDRdf1r5NINEl0=
github.com/pkg/errors v0.9.1 h1:FEBLx1zS214owpjy7qsBeixbURkuhQAwrK5UwLGTwt4=
github.com/pkg/errors v0.9.1/go.mod h1:bwawxfHBFNV+L2hUp1rHADufV3IMtnDRdf1r5NINEl0=
+github.com/pmezard/go-difflib v1.0.0 h1:4DBwDE0NGyQoBHbLQYPwSUPoCMWR5BEzIk/f1lZbAQM=
github.com/pmezard/go-difflib v1.0.0/go.mod h1:iKH77koFhYxTK1pcRnkKkqfTogsbg7gZNVY4sRDYZ/4=
github.com/prometheus/client_model v0.0.0-20190812154241-14fe0d1b01d4/go.mod h1:xMI15A0UPsDsEKsMN9yxemIoYk6Tm2C1GtYGdfGttqA=
github.com/rifflock/lfshook v0.0.0-20180920164130-b9218ef580f5 h1:mZHayPoR0lNmnHyvtYjDeq0zlVHn9K/ZXoy17ylucdo=
@@ -109,11 +130,14 @@ github.com/stretchr/objx v0.1.0/go.mod h1:HFkY916IF+rwdDfMAkV7OtwuqBVzrE8GR6GFx+
github.com/stretchr/objx v0.1.1/go.mod h1:HFkY916IF+rwdDfMAkV7OtwuqBVzrE8GR6GFx+wExME=
github.com/stretchr/testify v1.2.2/go.mod h1:a8OnRcib4nhh0OaRAV+Yts87kKdq0PP7pXfy6kDkUVs=
github.com/stretchr/testify v1.3.0/go.mod h1:M5WIy9Dh21IEIfnGCwXGc5bZfKNJtfHm1UVUgZn+9EI=
+github.com/stretchr/testify v1.4.0 h1:2E4SXV/wtOkTonXsotYi4li6zVWxYlZuYNCXe9XRJyk=
github.com/stretchr/testify v1.4.0/go.mod h1:j7eGeouHqKxXV5pUuKE4zz7dFj8WfuZ+81PSLYec5m4=
github.com/syndtr/goleveldb v1.0.0 h1:fBdIW9lB4Iz0n9khmH8w27SJ3QEJ7+IgjPEwGSZiFdE=
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=
@@ -154,6 +178,7 @@ golang.org/x/sys v0.0.0-20191026070338-33540a1f6037/go.mod h1:h1NjWce9XRLGQEsW7w
golang.org/x/sys v0.0.0-20200116001909-b77594299b42 h1:vEOn+mP2zCOVzKckCZy6YsCtDblrpj/w7B9nxGNELpg=
golang.org/x/sys v0.0.0-20200116001909-b77594299b42/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs=
golang.org/x/text v0.3.0/go.mod h1:NqM8EUOU14njkJ3fqMW+pc6Ldnwhi/IjpwHt7yyuwOQ=
+golang.org/x/text v0.3.2 h1:tW2bmiBqwgJj/UpqtC8EpXEZVYOwU0yG4iWbprSVAcs=
golang.org/x/text v0.3.2/go.mod h1:bEr9sfX3Q8Zfm5fL9x+3itogRgK3+ptLWKqgva+5dAk=
golang.org/x/time v0.0.0-20200630173020-3af7569d3a1e h1:EHBhcS0mlXEAVwNyO2dLfjToGsyY4j24pTs2ScHnX7s=
golang.org/x/time v0.0.0-20200630173020-3af7569d3a1e/go.mod h1:tRJNPiyCQ0inRvYxbN9jk5I+vvW/OXSQhTDSoE431IQ=
@@ -162,6 +187,7 @@ golang.org/x/tools v0.0.0-20190114222345-bf090417da8b/go.mod h1:n7NCudcB/nEzxVGm
golang.org/x/tools v0.0.0-20190226205152-f727befe758c/go.mod h1:9Yl7xja0Znq3iFh3HoIrodX9oNMXvdceNzlUR8zjMvY=
golang.org/x/tools v0.0.0-20190311212946-11955173bddd/go.mod h1:LCzVGOaR6xXOjkQ3onu1FJEFr0SW1gC7cKk1uF8kGRs=
golang.org/x/tools v0.0.0-20190524140312-2c0ae7006135/go.mod h1:RgjU9mgBXZiqYHBnxXauZ1Gv1EHHAz9KjViQ78xBX0Q=
+golang.org/x/xerrors v0.0.0-20191204190536-9bdfabe68543 h1:E7g+9GITq07hpfrRu66IVDexMakfv52eLZ2CXBWiKr4=
golang.org/x/xerrors v0.0.0-20191204190536-9bdfabe68543/go.mod h1:I/5z698sn9Ka8TeJc9MKroUUfqBBauWjQqLJ2OPfmY0=
google.golang.org/appengine v1.1.0/go.mod h1:EbEs0AVv82hx2wNQdGPgUI5lhzA/G0D9YwlJXL52JkM=
google.golang.org/appengine v1.4.0/go.mod h1:xpcJRLb0r/rnEns0DIKYYv+WjYCduHsrkT7/EB5XEv4=
@@ -181,10 +207,13 @@ google.golang.org/protobuf v1.23.0/go.mod h1:EGpADcykh3NcUnDUJcl1+ZksZNG86OlYog2
google.golang.org/protobuf v1.23.1-0.20200526195155-81db48ad09cc/go.mod h1:EGpADcykh3NcUnDUJcl1+ZksZNG86OlYog2l/sGQquU=
google.golang.org/protobuf v1.25.0 h1:Ejskq+SyPohKW+1uil0JJMtmHCgJPJ/qWTxr8qp+R4c=
google.golang.org/protobuf v1.25.0/go.mod h1:9JNX74DMeImyA3h4bdi1ymwjUzf21/xIlbajtzgsN7c=
+gopkg.in/check.v1 v0.0.0-20161208181325-20d25e280405 h1:yhCVgyC4o1eVCa2tZl7eS0r+SDo693bJlVdllGtEeKM=
gopkg.in/check.v1 v0.0.0-20161208181325-20d25e280405/go.mod h1:Co6ibVJAznAaIkqp8huTwlJQCZ016jof/cbN4VW5Yz0=
+gopkg.in/fsnotify.v1 v1.4.7 h1:xOHLXZwVvI9hhs+cLKq5+I5onOuwQLhQwiu63xxlHs4=
gopkg.in/fsnotify.v1 v1.4.7/go.mod h1:Tz8NjZHkW78fSQdbUxIjBTcgA1z1m8ZHf0WmKUhAMys=
gopkg.in/go-playground/assert.v1 v1.2.1/go.mod h1:9RXL0bg/zibRAgZUYszZSwO/z8Y/a8bDuhia5mkpMnE=
gopkg.in/go-playground/validator.v9 v9.29.1/go.mod h1:+c9/zcJMFNgbLvly1L1V+PpxWdVbfP1avr/N00E2vyQ=
+gopkg.in/tomb.v1 v1.0.0-20141024135613-dd632973f1e7 h1:uRGJdciOHaEIrze2W8Q3AKkepLTh2hOroT7a+7czfdQ=
gopkg.in/tomb.v1 v1.0.0-20141024135613-dd632973f1e7/go.mod h1:dt/ZhP58zS4L8KSrWDmTeBkI65Dw0HsyUHuEVlX15mw=
gopkg.in/yaml.v2 v2.2.1/go.mod h1:hI93XBmqTisBFMUTm0b8Fm+jr3Dg1NNxqwp+5A1VGuI=
gopkg.in/yaml.v2 v2.2.2/go.mod h1:hI93XBmqTisBFMUTm0b8Fm+jr3Dg1NNxqwp+5A1VGuI=
diff --git a/main.go b/main.go
index b09ece5..9c2c9d2 100644
--- a/main.go
+++ b/main.go
@@ -5,7 +5,6 @@ import (
"context"
"crypto/md5"
"encoding/base64"
- "encoding/json"
"fmt"
"io"
"io/ioutil"
@@ -29,12 +28,15 @@ import (
"github.com/Mrs4s/go-cqhttp/coolq"
"github.com/Mrs4s/go-cqhttp/global"
"github.com/getlantern/go-update"
+ jsoniter "github.com/json-iterator/go"
rotatelogs "github.com/lestrrat-go/file-rotatelogs"
"github.com/rifflock/lfshook"
log "github.com/sirupsen/logrus"
easy "github.com/t-tomalak/logrus-easy-formatter"
)
+var json = jsoniter.ConfigCompatibleWithStandardLibrary
+
func init() {
log.SetFormatter(&easy.Formatter{
TimestampFormat: "2006-01-02 15:04:05",
@@ -66,7 +68,7 @@ func init() {
}
if global.PathExists("cqhttp.json") {
log.Info("发现 cqhttp.json 将在五秒后尝试导入配置,按 Ctrl+C 取消.")
- log.Warn("警告: 该操作会删除 cqhttp.json 并覆盖 config.json 文件.")
+ log.Warn("警告: 该操作会删除 cqhttp.json 并覆盖 config.hjson 文件.")
time.Sleep(time.Second * 5)
conf := global.CQHttpApiConfig{}
if err := json.Unmarshal([]byte(global.ReadAllText("cqhttp.json")), &conf); err != nil {
@@ -88,8 +90,8 @@ func init() {
goConf.ReverseServers[0].ReverseEventUrl = conf.WSReverseEventUrl
goConf.ReverseServers[0].ReverseReconnectInterval = conf.WSReverseReconnectInterval
}
- if err := goConf.Save("config.json"); err != nil {
- log.Fatalf("保存 config.json 时出现错误: %v", err)
+ if err := goConf.Save("config.hjson"); err != nil {
+ log.Fatalf("保存 config.hjson 时出现错误: %v", err)
}
_ = os.Remove("cqhttp.json")
}
@@ -122,8 +124,10 @@ func main() {
}
var conf *global.JsonConfig
- if global.PathExists("config.json") || os.Getenv("UIN") == "" {
+ if global.PathExists("config.json") {
conf = global.Load("config.json")
+ _ = conf.Save("config.hjson")
+ _ = os.Remove("config.json")
} else if os.Getenv("UIN") != "" {
log.Infof("将从环境变量加载配置.")
uin, _ := strconv.ParseInt(os.Getenv("UIN"), 10, 64)
@@ -149,19 +153,21 @@ func main() {
if post != "" {
conf.HttpConfig.PostUrls[post] = os.Getenv("HTTP_SECRET")
}
+ } else {
+ conf = global.Load("config.hjson")
}
if conf == nil {
- err := global.DefaultConfig().Save("config.json")
+ err := global.DefaultConfig().Save("config.hjson")
if err != nil {
log.Fatalf("创建默认配置文件时出现错误: %v", err)
return
}
- log.Infof("默认配置文件已生成, 请编辑 config.json 后重启程序.")
+ log.Infof("默认配置文件已生成, 请编辑 config.hjson 后重启程序.")
time.Sleep(time.Second * 5)
return
}
if conf.Uin == 0 || (conf.Password == "" && conf.PasswordEncrypted == "") {
- log.Warnf("请修改 config.json 以添加账号密码.")
+ log.Warnf("请修改 config.hjson 以添加账号密码.")
time.Sleep(time.Second * 5)
return
}
@@ -228,7 +234,7 @@ func main() {
if encrypted := EncryptPwd(conf.Password, key[:]); encrypted != "" {
conf.Password = ""
conf.PasswordEncrypted = encrypted
- _ = conf.Save("config.json")
+ _ = conf.Save("config.hjson")
} else {
log.Warnf("加密时出现问题.")
}
@@ -314,7 +320,7 @@ func main() {
if conf.WebUi.Host == "" {
conf.WebUi.Host = "127.0.0.1"
}
- confErr := conf.Save("config.json")
+ confErr := conf.Save("config.hjson")
if confErr != nil {
log.Error("保存配置文件失败")
}
diff --git a/server/apiAdmin.go b/server/apiAdmin.go
index 6c14120..026d072 100644
--- a/server/apiAdmin.go
+++ b/server/apiAdmin.go
@@ -4,7 +4,6 @@ import (
"bufio"
"bytes"
"encoding/base64"
- "encoding/json"
"fmt"
"image"
"io/ioutil"
@@ -19,11 +18,14 @@ import (
"github.com/Mrs4s/go-cqhttp/coolq"
"github.com/Mrs4s/go-cqhttp/global"
"github.com/gin-gonic/gin"
+ jsoniter "github.com/json-iterator/go"
log "github.com/sirupsen/logrus"
"github.com/tidwall/gjson"
asciiart "github.com/yinghau76/go-ascii-art"
)
+var json = jsoniter.ConfigCompatibleWithStandardLibrary
+
var WebInput = make(chan string, 1) //长度1,用于阻塞
var Console = make(chan os.Signal, 1)
@@ -283,7 +285,7 @@ func GetConf() *global.JsonConfig {
if JsonConfig != nil {
return JsonConfig
}
- conf := global.Load("config.json")
+ conf := global.Load("config.hjson")
return conf
}
@@ -475,9 +477,9 @@ func AdminDoConfigBase(s *webServer, c *gin.Context) {
conf.EnableDB = false
}
conf.AccessToken = c.PostForm("access_token")
- if err := conf.Save("config.json"); err != nil {
- log.Fatalf("保存 config.json 时出现错误: %v", err)
- c.JSON(200, Failed(502, "保存 config.json 时出现错误:"+fmt.Sprintf("%v", err)))
+ if err := conf.Save("config.hjson"); err != nil {
+ log.Fatalf("保存 config.hjson 时出现错误: %v", err)
+ c.JSON(200, Failed(502, "保存 config.hjson 时出现错误:"+fmt.Sprintf("%v", err)))
} else {
JsonConfig = nil
c.JSON(200, coolq.OK(coolq.MSG{}))
@@ -500,9 +502,9 @@ func AdminDoConfigHttp(s *webServer, c *gin.Context) {
if c.PostForm("post_url") != "" {
conf.HttpConfig.PostUrls[c.PostForm("post_url")] = c.PostForm("post_secret")
}
- if err := conf.Save("config.json"); err != nil {
- log.Fatalf("保存 config.json 时出现错误: %v", err)
- c.JSON(200, Failed(502, "保存 config.json 时出现错误:"+fmt.Sprintf("%v", err)))
+ if err := conf.Save("config.hjson"); err != nil {
+ log.Fatalf("保存 config.hjson 时出现错误: %v", err)
+ c.JSON(200, Failed(502, "保存 config.hjson 时出现错误:"+fmt.Sprintf("%v", err)))
} else {
JsonConfig = nil
c.JSON(200, coolq.OK(coolq.MSG{}))
@@ -520,9 +522,9 @@ func AdminDoConfigWs(s *webServer, c *gin.Context) {
} else {
conf.WSConfig.Enabled = false
}
- if err := conf.Save("config.json"); err != nil {
- log.Fatalf("保存 config.json 时出现错误: %v", err)
- c.JSON(200, Failed(502, "保存 config.json 时出现错误:"+fmt.Sprintf("%v", err)))
+ if err := conf.Save("config.hjson"); err != nil {
+ log.Fatalf("保存 config.hjson 时出现错误: %v", err)
+ c.JSON(200, Failed(502, "保存 config.hjson 时出现错误:"+fmt.Sprintf("%v", err)))
} else {
JsonConfig = nil
c.JSON(200, coolq.OK(coolq.MSG{}))
@@ -542,9 +544,9 @@ func AdminDoConfigReverse(s *webServer, c *gin.Context) {
} else {
conf.ReverseServers[0].Enabled = false
}
- if err := conf.Save("config.json"); err != nil {
- log.Fatalf("保存 config.json 时出现错误: %v", err)
- c.JSON(200, Failed(502, "保存 config.json 时出现错误:"+fmt.Sprintf("%v", err)))
+ if err := conf.Save("config.hjson"); err != nil {
+ log.Fatalf("保存 config.hjson 时出现错误: %v", err)
+ c.JSON(200, Failed(502, "保存 config.hjson 时出现错误:"+fmt.Sprintf("%v", err)))
} else {
JsonConfig = nil
c.JSON(200, coolq.OK(coolq.MSG{}))
@@ -557,13 +559,13 @@ func AdminDoConfigJson(s *webServer, c *gin.Context) {
Json := c.PostForm("json")
err := json.Unmarshal([]byte(Json), &conf)
if err != nil {
- log.Warnf("尝试加载配置文件 %v 时出现错误: %v", "config.json", err)
- c.JSON(200, Failed(502, "保存 config.json 时出现错误:"+fmt.Sprintf("%v", err)))
+ log.Warnf("尝试加载配置文件 %v 时出现错误: %v", "config.hjson", err)
+ c.JSON(200, Failed(502, "保存 config.hjson 时出现错误:"+fmt.Sprintf("%v", err)))
return
}
- if err := conf.Save("config.json"); err != nil {
- log.Fatalf("保存 config.json 时出现错误: %v", err)
- c.JSON(200, Failed(502, "保存 config.json 时出现错误:"+fmt.Sprintf("%v", err)))
+ if err := conf.Save("config.hjson"); err != nil {
+ log.Fatalf("保存 config.hjson 时出现错误: %v", err)
+ c.JSON(200, Failed(502, "保存 config.hjson 时出现错误:"+fmt.Sprintf("%v", err)))
} else {
JsonConfig = nil
c.JSON(200, coolq.OK(coolq.MSG{}))
From b2be595fb892a7c4f48968ae2172516f038a3fee Mon Sep 17 00:00:00 2001
From: Ink-33
Date: Wed, 18 Nov 2020 22:33:51 +0800
Subject: [PATCH 168/367] simplifies composite literals
---
coolq/cqcode.go | 4 ++--
1 file changed, 2 insertions(+), 2 deletions(-)
diff --git a/coolq/cqcode.go b/coolq/cqcode.go
index 761446f..b0aafd6 100644
--- a/coolq/cqcode.go
+++ b/coolq/cqcode.go
@@ -184,12 +184,12 @@ func ToArrayMessage(e []message.IMessageElement, code int64, raw ...bool) (r []M
}
}
case *message.GroupFlashImgElement:
- return []MSG{MSG{
+ return []MSG{{
"type": "image",
"data": map[string]string{"file": o.Filename, "type": "flash"},
}}
case *message.FriendFlashImgElement:
- return []MSG{MSG{
+ return []MSG{{
"type": "image",
"data": map[string]string{"file": o.Filename, "type": "flash"},
}}
From 64b1a223cc733693525e73540179f89c8989eb90 Mon Sep 17 00:00:00 2001
From: Ink-33
Date: Wed, 18 Nov 2020 22:46:52 +0800
Subject: [PATCH 169/367] Fix #427
---
main.go | 11 +++++------
1 file changed, 5 insertions(+), 6 deletions(-)
diff --git a/main.go b/main.go
index da2ac3d..c0f9802 100644
--- a/main.go
+++ b/main.go
@@ -2,7 +2,6 @@ package main
import (
"bufio"
- "context"
"crypto/md5"
"encoding/base64"
"encoding/json"
@@ -236,19 +235,19 @@ func main() {
if conf.PasswordEncrypted != "" {
if strKey == "" {
log.Infof("密码加密已启用, 请输入Key对密码进行解密以继续: (Enter 提交)")
- ctx := context.Background()
- go func(ctx context.Context) {
+ cancel := make(chan struct{}, 1)
+ go func() {
select {
- case <-ctx.Done():
+ case <-cancel:
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()
+ cancel <- struct{}{}
} else {
log.Infof("密码加密已启用, 使用运行时传递的参数进行解密,按 Ctrl+C 取消.")
}
From f1f58b40723ed6d3bca764597df7a27ea9e2fc6b Mon Sep 17 00:00:00 2001
From: Mrs4s
Date: Thu, 19 Nov 2020 09:12:41 +0800
Subject: [PATCH 170/367] update MiraiGo.
---
go.mod | 10 +++-------
go.sum | 5 +++++
2 files changed, 8 insertions(+), 7 deletions(-)
diff --git a/go.mod b/go.mod
index 66122bf..fa21e9f 100644
--- a/go.mod
+++ b/go.mod
@@ -1,20 +1,17 @@
module github.com/Mrs4s/go-cqhttp
-go 1.14
+go 1.15
require (
- github.com/Mrs4s/MiraiGo v0.0.0-20201117154121-989187125900
+ github.com/Mrs4s/MiraiGo v0.0.0-20201118132221-03652b042534
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/hjson/hjson-go v3.1.0+incompatible
- github.com/jehiah/go-strftime v0.0.0-20171201141054-1d33003b3869 // indirect
- github.com/jonboulle/clockwork v0.2.2 // indirect
- github.com/json-iterator/go v1.1.9
+ github.com/json-iterator/go v1.1.10
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
@@ -24,7 +21,6 @@ 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 8e7d488..c5a39fa 100644
--- a/go.sum
+++ b/go.sum
@@ -2,6 +2,8 @@ cloud.google.com/go v0.26.0/go.mod h1:aQUYkXzVsufM+DwF1aE+0xfcU+56JwCaLick0ClmMT
github.com/BurntSushi/toml v0.3.1/go.mod h1:xHWCNGjB5oqiDr8zfno3MHue2Ht5sIBksp03qcyfWMU=
github.com/Mrs4s/MiraiGo v0.0.0-20201117154121-989187125900 h1:xnx3dH7hgZ/Z4k33EhKzBmQhwASJ5bvsorqPhO0DWbc=
github.com/Mrs4s/MiraiGo v0.0.0-20201117154121-989187125900/go.mod h1:pAsWtMIwqkBXr5DkUpTIHoWQJNduVnX9WSBPmPvkuCs=
+github.com/Mrs4s/MiraiGo v0.0.0-20201118132221-03652b042534 h1:MM4fnTZhMzvRZaR7EaYfoWYhoBinqxYCwVigdRbzfLI=
+github.com/Mrs4s/MiraiGo v0.0.0-20201118132221-03652b042534/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=
@@ -74,6 +76,7 @@ github.com/gorilla/websocket v1.4.2 h1:+/TMaTYc4QFitKJxsQ7Yye35DkWvkdLcvGKqM+x0U
github.com/gorilla/websocket v1.4.2/go.mod h1:YR8l580nyteQvAITg2hZ9XVh4b55+EU/adAjf1fMHhE=
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/hjson/hjson-go v0.2.3 h1:KhG7/PSxTibbYOzFso5FoiX2gWePcANaCsvM1WE/bTo=
github.com/hjson/hjson-go v3.1.0+incompatible h1:DY/9yE8ey8Zv22bY+mHV1uk2yRy0h8tKhZ77hEdi0Aw=
github.com/hjson/hjson-go v3.1.0+incompatible/go.mod h1:qsetwF8NlsTsOTwZTApNlTCerV+b2GjYRRcIk4JMFio=
github.com/hpcloud/tail v1.0.0 h1:nfCOvKYfkgYP8hkirhJocXT2+zOD8yUNjXaWfTlyFKI=
@@ -85,6 +88,8 @@ github.com/jonboulle/clockwork v0.2.2/go.mod h1:Pkfl5aHPm1nk2H9h0bjmnJD/BcgbGXUB
github.com/json-iterator/go v1.1.7/go.mod h1:KdQUCv79m/52Kvf8AW2vK1V8akMuk1QjK/uOdHXbAo4=
github.com/json-iterator/go v1.1.9 h1:9yzud/Ht36ygwatGx56VwCZtlI/2AD15T1X2sjSuGns=
github.com/json-iterator/go v1.1.9/go.mod h1:KdQUCv79m/52Kvf8AW2vK1V8akMuk1QjK/uOdHXbAo4=
+github.com/json-iterator/go v1.1.10 h1:Kz6Cvnvv2wGdaG/V8yMvfkmNiXq9Ya2KUv4rouJJr68=
+github.com/json-iterator/go v1.1.10/go.mod h1:KdQUCv79m/52Kvf8AW2vK1V8akMuk1QjK/uOdHXbAo4=
github.com/kardianos/osext v0.0.0-20190222173326-2bc1f35cddc0 h1:iQTw/8FWTuc7uiaSepXwyf3o52HaUYcV+Tu66S3F5GA=
github.com/kardianos/osext v0.0.0-20190222173326-2bc1f35cddc0/go.mod h1:1NbS8ALrpOvjt0rHPNLyCIeMtbizbir8U//inJ+zuB8=
github.com/konsorten/go-windows-terminal-sequences v1.0.1/go.mod h1:T0+1ngSBFLxvqU3pZ+m/2kptfBszLMUkC4ZK/EgS/cQ=
From 09c4801b560c9d60a85377a4f3aaa40c28b065b5 Mon Sep 17 00:00:00 2001
From: Mrs4s
Date: Thu, 19 Nov 2020 09:16:32 +0800
Subject: [PATCH 171/367] fix config.
---
main.go | 4 ----
1 file changed, 4 deletions(-)
diff --git a/main.go b/main.go
index 5a84cee..deaf113 100644
--- a/main.go
+++ b/main.go
@@ -319,10 +319,6 @@ func main() {
if conf.WebUi.Host == "" {
conf.WebUi.Host = "127.0.0.1"
}
- confErr := conf.Save("config.hjson")
- if confErr != nil {
- log.Error("保存配置文件失败")
- }
b := server.WebServer.Run(fmt.Sprintf("%s:%d", conf.WebUi.Host, conf.WebUi.WebUiPort), cli)
c := server.Console
r := server.Restart
From 59934982b9462d7515d85488b8e1c9d3ec0dca09 Mon Sep 17 00:00:00 2001
From: fkx4-p <42882359+fkx4-p@users.noreply.github.com>
Date: Thu, 19 Nov 2020 22:48:30 +0800
Subject: [PATCH 172/367] Update quick_start.md
1.Fixed Ink33's typo and my error.
2.Added a discription and an example to make the checking part more reasonable.
---
docs/quick_start.md | 8 ++++----
1 file changed, 4 insertions(+), 4 deletions(-)
diff --git a/docs/quick_start.md b/docs/quick_start.md
index 778a533..61760d0 100644
--- a/docs/quick_start.md
+++ b/docs/quick_start.md
@@ -103,6 +103,8 @@ enable ws?(Y/n)
如果出现`{"data":{"message_id":balabala},"retcode":0,"status":"ok"}`则证明已经成功配置HTTP
+*注:请 连 中括号 也替换掉,就像这样:*`http://127.0.0.1:5700/send_private_msg?user_id=10001&message=ffeecoishp`
+
# 进阶指南
## 如何自己构建
@@ -117,13 +119,11 @@ enable ws?(Y/n)
*注:可以使用*`go env -w GOPROXY=https://goproxy.cn,direct`*来加速国内依赖安装速度*
-*注:此时构建后的文件名为*`go-cqhttp`(Linux)或`go-cqhttp.exe`(Windows)
-
## 更新
### 方法一
-从[release] (https://github.com/Mrs4s/go-cqhttp/releases)界面下载最新版本的go-cqhttp
+从[release](https://github.com/Mrs4s/go-cqhttp/releases)界面下载最新版本的go-cqhttp
并替换之前的版本
### 方法二
@@ -144,4 +144,4 @@ enable ws?(Y/n)
- `https://github.rc1844.workers.dev`
#### linux
-方法与windows基本一致,将 `go-cqhttp.exe` 替换为 `./go-cqhttp`即可
\ No newline at end of file
+方法与windows基本一致,将 `go-cqhttp.exe` 替换为 `./go-cqhttp`即可
From e0ffb98665b3e764c93f3fd5e139fd5db411ced2 Mon Sep 17 00:00:00 2001
From: Mrs4s
Date: Fri, 20 Nov 2020 03:01:58 +0800
Subject: [PATCH 173/367] add comments for default config.
---
global/config.go | 128 +++++++++++++++++++++++++++++++++++++++++++++--
global/fs.go | 4 +-
main.go | 2 +-
3 files changed, 127 insertions(+), 7 deletions(-)
diff --git a/global/config.go b/global/config.go
index 460e9be..68a6e1e 100644
--- a/global/config.go
+++ b/global/config.go
@@ -12,6 +12,127 @@ import (
var json = jsoniter.ConfigCompatibleWithStandardLibrary
+var DefaultConfigWithComments = `
+/*
+ go-cqhttp 默认配置文件
+*/
+
+{
+ // QQ号
+ uin: 0
+ // QQ密码
+ password: ""
+ // 是否启用密码加密
+ encrypt_password: false
+ // 加密后的密码, 如未启用密码加密将为空, 请勿随意修改.
+ password_encrypted: ""
+ // 是否启用内置数据库
+ // 启用将会增加10-20MB的内存占用和一定的磁盘空间
+ // 关闭将无法使用 撤回 回复 get_msg 等上下文相关功能
+ enable_db: true
+ // 访问密钥, 强烈推荐在公网的服务器设置
+ access_token: ""
+ // 重连设置
+ relogin: {
+ // 是否启用自动重连
+ // 如不启用掉线后将不会自动重连
+ enabled: true
+ // 重连延迟, 单位秒
+ relogin_delay: 3
+ // 最大重连次数, 0为无限制
+ max_relogin_times: 0
+ }
+ // API限速设置
+ // 该设置为全局生效
+ // 原 cqhttp 虽然启用了 rate_limit 后缀, 但是基本没插件适配
+ // 目前该限速设置为令牌桶算法, 请参考:
+ // https://baike.baidu.com/item/%E4%BB%A4%E7%89%8C%E6%A1%B6%E7%AE%97%E6%B3%95/6597000?fr=aladdin
+ _rate_limit: {
+ // 是否启用限速
+ enabled: false
+ // 令牌回复频率, 单位秒
+ frequency: 1
+ // 令牌桶大小
+ bucket_size: 1
+ }
+ // 是否忽略无效的CQ码
+ // 如果为假将原样发送
+ ignore_invalid_cqcode: false
+ // 是否强制分片发送消息
+ // 分片发送将会带来更快的速度
+ // 但是兼容性会有些问题
+ force_fragmented: false
+ // 心跳频率, 单位秒
+ // -1 为关闭心跳
+ heartbeat_interval: 0
+ // HTTP设置
+ http_config: {
+ // 是否启用正向HTTP服务器
+ enabled: true
+ // 服务端监听地址
+ host: 0.0.0.0
+ // 服务端监听端口
+ port: 5700
+ // 反向HTTP超时时间, 单位秒
+ // 最小值为5,小于5将会忽略本项设置
+ timeout: 0
+ // 反向HTTP POST地址列表
+ // 格式:
+ // {
+ // 地址: secret
+ // }
+ post_urls: {}
+ }
+ // 正向WS设置
+ ws_config: {
+ // 是否启用正向WS服务器
+ enabled: true
+ // 正向WS服务器监听地址
+ host: 0.0.0.0
+ // 正向WS服务器监听端口
+ port: 6700
+ }
+ // 反向WS设置
+ ws_reverse_servers: [
+ // 可以添加多个反向WS推送
+ {
+ // 是否启用该推送
+ enabled: false
+ // 反向WS Universal 地址
+ // 注意 设置了此项地址后下面两项将会被忽略
+ reverse_url: ws://you_websocket_universal.server
+ // 反向WS API 地址
+ reverse_api_url: ws://you_websocket_api.server
+ // 反向WS Event 地址
+ reverse_event_url: ws://you_websocket_event.server
+ // 重连间隔 单位毫秒
+ reverse_reconnect_interval: 3000
+ }
+ ]
+ // 上报数据类型
+ // 可选: string array
+ post_message_format: string
+ // 是否使用服务器下发的新地址进行重连
+ // 注意, 此设置可能导致在海外服务器上连接情况更差
+ use_sso_address: false
+ // 是否启用 DEBUG
+ debug: false
+ // 日志等级
+ log_level: ""
+ // WebUi 设置
+ web_ui: {
+ // 是否启用 WebUi
+ enabled: true
+ // 监听地址
+ host: 127.0.0.1
+ // 监听端口
+ web_ui_port: 9999
+ // 是否接收来自web的输入
+ web_input: false
+ }
+}
+`
+
type JsonConfig struct {
Uin int64 `json:"uin"`
Password string `json:"password"`
@@ -165,13 +286,12 @@ func Load(p string) *JsonConfig {
func (c *JsonConfig) Save(p string) error {
data, err := hjson.MarshalWithOptions(c, hjson.EncoderOptions{
- Eol: "\n",
+ Eol: "\n",
BracesSameLine: true,
- IndentBy: " ",
+ IndentBy: " ",
})
if err != nil {
return err
}
- WriteAllText(p, string(data))
- return nil
+ return WriteAllText(p, string(data))
}
diff --git a/global/fs.go b/global/fs.go
index 10dc7a2..8aad7fb 100644
--- a/global/fs.go
+++ b/global/fs.go
@@ -43,8 +43,8 @@ func ReadAllText(path string) string {
return string(b)
}
-func WriteAllText(path, text string) {
- _ = ioutil.WriteFile(path, []byte(text), 0644)
+func WriteAllText(path, text string) error {
+ return ioutil.WriteFile(path, []byte(text), 0644)
}
func Check(err error) {
diff --git a/main.go b/main.go
index deaf113..d6bbcee 100644
--- a/main.go
+++ b/main.go
@@ -156,7 +156,7 @@ func main() {
conf = global.Load("config.hjson")
}
if conf == nil {
- err := global.DefaultConfig().Save("config.hjson")
+ err := global.WriteAllText("config.hjson", global.DefaultConfigWithComments)
if err != nil {
log.Fatalf("创建默认配置文件时出现错误: %v", err)
return
From 2a044a62d2b7774f9df66714b80c44a1c18f1425 Mon Sep 17 00:00:00 2001
From: Mrs4s
Date: Fri, 20 Nov 2020 09:07:30 +0800
Subject: [PATCH 174/367] update MiraiGo.
---
go.mod | 2 +-
go.sum | 2 ++
2 files changed, 3 insertions(+), 1 deletion(-)
diff --git a/go.mod b/go.mod
index fa21e9f..3186707 100644
--- a/go.mod
+++ b/go.mod
@@ -3,7 +3,7 @@ module github.com/Mrs4s/go-cqhttp
go 1.15
require (
- github.com/Mrs4s/MiraiGo v0.0.0-20201118132221-03652b042534
+ github.com/Mrs4s/MiraiGo v0.0.0-20201120010132-37b3821668be
github.com/dustin/go-humanize v1.0.0
github.com/getlantern/go-update v0.0.0-20190510022740-79c495ab728c
github.com/getlantern/golog v0.0.0-20201105130739-9586b8bde3a9 // indirect
diff --git a/go.sum b/go.sum
index c5a39fa..1cfc4ad 100644
--- a/go.sum
+++ b/go.sum
@@ -4,6 +4,8 @@ github.com/Mrs4s/MiraiGo v0.0.0-20201117154121-989187125900 h1:xnx3dH7hgZ/Z4k33E
github.com/Mrs4s/MiraiGo v0.0.0-20201117154121-989187125900/go.mod h1:pAsWtMIwqkBXr5DkUpTIHoWQJNduVnX9WSBPmPvkuCs=
github.com/Mrs4s/MiraiGo v0.0.0-20201118132221-03652b042534 h1:MM4fnTZhMzvRZaR7EaYfoWYhoBinqxYCwVigdRbzfLI=
github.com/Mrs4s/MiraiGo v0.0.0-20201118132221-03652b042534/go.mod h1:pAsWtMIwqkBXr5DkUpTIHoWQJNduVnX9WSBPmPvkuCs=
+github.com/Mrs4s/MiraiGo v0.0.0-20201120010132-37b3821668be h1:Husock3Pds2ghVqly25LJu2E9kF7NbsMa/NCqmdNns4=
+github.com/Mrs4s/MiraiGo v0.0.0-20201120010132-37b3821668be/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=
From 36b081eeec8c086ba9dcf521086ba32f766616a1 Mon Sep 17 00:00:00 2001
From: wfjsw
Date: Fri, 20 Nov 2020 14:05:17 +0800
Subject: [PATCH 175/367] reject_add_request
(cherry picked from commit 061a230c9fb723ad49e00776fa37aca080973ecd)
---
coolq/api.go | 6 +++---
go.mod | 6 +++++-
go.sum | 9 ++-------
server/http.go | 3 ++-
server/websocket.go | 2 +-
5 files changed, 13 insertions(+), 13 deletions(-)
diff --git a/coolq/api.go b/coolq/api.go
index f175050..40ec5e2 100644
--- a/coolq/api.go
+++ b/coolq/api.go
@@ -382,10 +382,10 @@ func (bot *CQBot) CQSetGroupMemo(groupId int64, msg string) MSG {
}
// https://cqhttp.cc/docs/4.15/#/API?id=set_group_kick-%E7%BE%A4%E7%BB%84%E8%B8%A2%E4%BA%BA
-func (bot *CQBot) CQSetGroupKick(groupId, userId int64, msg string) MSG {
+func (bot *CQBot) CQSetGroupKick(groupId, userId int64, msg string, block bool) MSG {
if g := bot.Client.FindGroup(groupId); g != nil {
if m := g.FindMember(userId); m != nil {
- m.Kick(msg)
+ m.Kick(msg, block)
return OK(nil)
}
}
@@ -639,7 +639,7 @@ func (bot *CQBot) CQHandleQuickOperation(context, operation gjson.Result) MSG {
bot.CQDeleteMessage(int32(context.Get("message_id").Int()))
}
if operation.Get("kick").Bool() && !isAnonymous {
- bot.CQSetGroupKick(context.Get("group_id").Int(), context.Get("user_id").Int(), "")
+ bot.CQSetGroupKick(context.Get("group_id").Int(), context.Get("user_id").Int(), "", operation.Get("reject_add_request").Bool())
}
if operation.Get("ban").Bool() {
var duration uint32 = 30 * 60
diff --git a/go.mod b/go.mod
index 3186707..ace314c 100644
--- a/go.mod
+++ b/go.mod
@@ -3,14 +3,17 @@ module github.com/Mrs4s/go-cqhttp
go 1.15
require (
- github.com/Mrs4s/MiraiGo v0.0.0-20201120010132-37b3821668be
+ github.com/Mrs4s/MiraiGo v0.0.0-20201120060003-eaee349fe4f4
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/hjson/hjson-go v3.1.0+incompatible
+ github.com/jehiah/go-strftime v0.0.0-20171201141054-1d33003b3869 // indirect
+ github.com/jonboulle/clockwork v0.2.2 // indirect
github.com/json-iterator/go v1.1.10
github.com/kardianos/osext v0.0.0-20190222173326-2bc1f35cddc0 // indirect
github.com/kr/binarydist v0.1.0 // indirect
@@ -21,6 +24,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 1cfc4ad..4560a5b 100644
--- a/go.sum
+++ b/go.sum
@@ -1,11 +1,7 @@
cloud.google.com/go v0.26.0/go.mod h1:aQUYkXzVsufM+DwF1aE+0xfcU+56JwCaLick0ClmMTw=
github.com/BurntSushi/toml v0.3.1/go.mod h1:xHWCNGjB5oqiDr8zfno3MHue2Ht5sIBksp03qcyfWMU=
-github.com/Mrs4s/MiraiGo v0.0.0-20201117154121-989187125900 h1:xnx3dH7hgZ/Z4k33EhKzBmQhwASJ5bvsorqPhO0DWbc=
-github.com/Mrs4s/MiraiGo v0.0.0-20201117154121-989187125900/go.mod h1:pAsWtMIwqkBXr5DkUpTIHoWQJNduVnX9WSBPmPvkuCs=
-github.com/Mrs4s/MiraiGo v0.0.0-20201118132221-03652b042534 h1:MM4fnTZhMzvRZaR7EaYfoWYhoBinqxYCwVigdRbzfLI=
-github.com/Mrs4s/MiraiGo v0.0.0-20201118132221-03652b042534/go.mod h1:pAsWtMIwqkBXr5DkUpTIHoWQJNduVnX9WSBPmPvkuCs=
-github.com/Mrs4s/MiraiGo v0.0.0-20201120010132-37b3821668be h1:Husock3Pds2ghVqly25LJu2E9kF7NbsMa/NCqmdNns4=
-github.com/Mrs4s/MiraiGo v0.0.0-20201120010132-37b3821668be/go.mod h1:pAsWtMIwqkBXr5DkUpTIHoWQJNduVnX9WSBPmPvkuCs=
+github.com/Mrs4s/MiraiGo v0.0.0-20201120060003-eaee349fe4f4 h1:6yT4mIrpQdmVWLTSWN8pjT7R6UI4eeC5UlswPQglXlU=
+github.com/Mrs4s/MiraiGo v0.0.0-20201120060003-eaee349fe4f4/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=
@@ -78,7 +74,6 @@ github.com/gorilla/websocket v1.4.2 h1:+/TMaTYc4QFitKJxsQ7Yye35DkWvkdLcvGKqM+x0U
github.com/gorilla/websocket v1.4.2/go.mod h1:YR8l580nyteQvAITg2hZ9XVh4b55+EU/adAjf1fMHhE=
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/hjson/hjson-go v0.2.3 h1:KhG7/PSxTibbYOzFso5FoiX2gWePcANaCsvM1WE/bTo=
github.com/hjson/hjson-go v3.1.0+incompatible h1:DY/9yE8ey8Zv22bY+mHV1uk2yRy0h8tKhZ77hEdi0Aw=
github.com/hjson/hjson-go v3.1.0+incompatible/go.mod h1:qsetwF8NlsTsOTwZTApNlTCerV+b2GjYRRcIk4JMFio=
github.com/hpcloud/tail v1.0.0 h1:nfCOvKYfkgYP8hkirhJocXT2+zOD8yUNjXaWfTlyFKI=
diff --git a/server/http.go b/server/http.go
index f79d443..9b9ac0e 100644
--- a/server/http.go
+++ b/server/http.go
@@ -308,7 +308,8 @@ func SetGroupKick(s *httpServer, c *gin.Context) {
gid, _ := strconv.ParseInt(getParam(c, "group_id"), 10, 64)
uid, _ := strconv.ParseInt(getParam(c, "user_id"), 10, 64)
msg := getParam(c, "message")
- c.JSON(200, s.bot.CQSetGroupKick(gid, uid, msg))
+ block := getParamOrDefault(c, "reject_add_request", "false")
+ c.JSON(200, s.bot.CQSetGroupKick(gid, uid, msg, block == "true"))
}
func SetGroupBan(s *httpServer, c *gin.Context) {
diff --git a/server/websocket.go b/server/websocket.go
index 5de0e49..6e41ffa 100644
--- a/server/websocket.go
+++ b/server/websocket.go
@@ -433,7 +433,7 @@ var wsApi = map[string]func(*coolq.CQBot, gjson.Result) coolq.MSG{
return bot.CQSetGroupSpecialTitle(p.Get("group_id").Int(), p.Get("user_id").Int(), p.Get("special_title").Str)
},
"set_group_kick": func(bot *coolq.CQBot, p gjson.Result) coolq.MSG {
- return bot.CQSetGroupKick(p.Get("group_id").Int(), p.Get("user_id").Int(), p.Get("message").Str)
+ return bot.CQSetGroupKick(p.Get("group_id").Int(), p.Get("user_id").Int(), p.Get("message").Str, p.Get("reject_add_request").Bool())
},
"set_group_ban": func(bot *coolq.CQBot, p gjson.Result) coolq.MSG {
return bot.CQSetGroupBan(p.Get("group_id").Int(), p.Get("user_id").Int(), func() uint32 {
From 2057e769dac63a3540c0cbb4902bc03fc22c357f Mon Sep 17 00:00:00 2001
From: Mrs4s <1844812067@qq.com>
Date: Fri, 20 Nov 2020 23:51:17 +0800
Subject: [PATCH 176/367] update MiraiGo.
---
coolq/api.go | 1 +
go.mod | 6 +-----
go.sum | 29 ++---------------------------
3 files changed, 4 insertions(+), 32 deletions(-)
diff --git a/coolq/api.go b/coolq/api.go
index 40ec5e2..f7b4a81 100644
--- a/coolq/api.go
+++ b/coolq/api.go
@@ -789,6 +789,7 @@ func (bot *CQBot) CQGetStatus() MSG {
"app_good": true,
"online": bot.Client.Online,
"good": true,
+ "stat": bot.Client.GetStatistics(),
})
}
diff --git a/go.mod b/go.mod
index ace314c..dcfb9c7 100644
--- a/go.mod
+++ b/go.mod
@@ -3,17 +3,14 @@ module github.com/Mrs4s/go-cqhttp
go 1.15
require (
- github.com/Mrs4s/MiraiGo v0.0.0-20201120060003-eaee349fe4f4
+ github.com/Mrs4s/MiraiGo v0.0.0-20201120153907-26b45139c16f
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/hjson/hjson-go v3.1.0+incompatible
- github.com/jehiah/go-strftime v0.0.0-20171201141054-1d33003b3869 // indirect
- github.com/jonboulle/clockwork v0.2.2 // indirect
github.com/json-iterator/go v1.1.10
github.com/kardianos/osext v0.0.0-20190222173326-2bc1f35cddc0 // indirect
github.com/kr/binarydist v0.1.0 // indirect
@@ -24,7 +21,6 @@ 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 4560a5b..d6101bf 100644
--- a/go.sum
+++ b/go.sum
@@ -1,19 +1,15 @@
cloud.google.com/go v0.26.0/go.mod h1:aQUYkXzVsufM+DwF1aE+0xfcU+56JwCaLick0ClmMTw=
github.com/BurntSushi/toml v0.3.1/go.mod h1:xHWCNGjB5oqiDr8zfno3MHue2Ht5sIBksp03qcyfWMU=
-github.com/Mrs4s/MiraiGo v0.0.0-20201120060003-eaee349fe4f4 h1:6yT4mIrpQdmVWLTSWN8pjT7R6UI4eeC5UlswPQglXlU=
-github.com/Mrs4s/MiraiGo v0.0.0-20201120060003-eaee349fe4f4/go.mod h1:pAsWtMIwqkBXr5DkUpTIHoWQJNduVnX9WSBPmPvkuCs=
+github.com/Mrs4s/MiraiGo v0.0.0-20201120153907-26b45139c16f h1:pjxBE1VvJpookM2iUySfiqmuNyMz52oOhcvSRwWldqw=
+github.com/Mrs4s/MiraiGo v0.0.0-20201120153907-26b45139c16f/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=
-github.com/davecgh/go-spew v1.1.1 h1:vj9j/u1bqnvCEfJOwUhtlOARqs3+rkHYY13jYWTU97c=
github.com/davecgh/go-spew v1.1.1/go.mod h1:J7Y8YcW2NihsgmVo/mv3lAwl/skON4iLHjSsI+c5H38=
github.com/dustin/go-humanize v1.0.0 h1:VSnTsYCnlFHaM2/igO1h6X3HA71jcobQuxemgkq4zYo=
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 h1:IXs+QLmnXW2CcXuY+8Mzv/fWEsPGWxqefPtCP5CnV9I=
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=
@@ -34,7 +30,6 @@ github.com/gin-contrib/sse v0.1.0/go.mod h1:RHrZQHXnP2xjPF+u1gW/2HnVO7nvIa9PG3Gm
github.com/gin-gonic/gin v1.5.0/go.mod h1:Nd6IXA8m5kNZdNEHMBd93KT+mdY3+bewLgRvmCsR2Do=
github.com/gin-gonic/gin v1.6.3 h1:ahKqKTFpO5KTPHxWZjEdPScmYaGtLo8Y4DMHoEsnp14=
github.com/gin-gonic/gin v1.6.3/go.mod h1:75u5sXoLsGZoRN5Sgbi1eraJ4GU3++wFwWzhwvtwp4M=
-github.com/go-playground/assert/v2 v2.0.1 h1:MsBgLAaY856+nPRTKrp3/OZK38U/wa0CcBYNjji3q3A=
github.com/go-playground/assert/v2 v2.0.1/go.mod h1:VDjEfimB/XKnb+ZQfWdccd7VUvScMdVu0Titje2rxJ4=
github.com/go-playground/locales v0.12.1/go.mod h1:IUMDtCfWo/w/mtMfIE/IG2K+Ey3ygWanZIBtBW0W2TM=
github.com/go-playground/locales v0.13.0 h1:HyWk6mgj5qFqCT5fjGBuRArbVDfE4hi8+e8ceBS/t7Q=
@@ -65,10 +60,8 @@ github.com/google/go-cmp v0.2.0/go.mod h1:oXzfMopK8JAjlY9xF4vHSVASa0yLyX7SntLO5a
github.com/google/go-cmp v0.3.0/go.mod h1:8QqcDgzrUqlUb/G2PQTWiueGozuR1884gddMywk6iLU=
github.com/google/go-cmp v0.3.1/go.mod h1:8QqcDgzrUqlUb/G2PQTWiueGozuR1884gddMywk6iLU=
github.com/google/go-cmp v0.4.0/go.mod h1:v8dTdLbMG2kIc/vJvl+f65V22dbkXbowE6jgT/gNBxE=
-github.com/google/go-cmp v0.5.0 h1:/QaMHBdZ26BB3SSst0Iwl10Epc+xhTquomWX0oZEB6w=
github.com/google/go-cmp v0.5.0/go.mod h1:v8dTdLbMG2kIc/vJvl+f65V22dbkXbowE6jgT/gNBxE=
github.com/google/gofuzz v1.0.0/go.mod h1:dBl0BpW6vV/+mYPU4Po3pmUjxk6FQPldtuIdl/M65Eg=
-github.com/google/uuid v1.1.1 h1:Gkbcsh/GbpXz7lPftLA3P6TYMwjCLYm83jiFQZF/3gY=
github.com/google/uuid v1.1.1/go.mod h1:TIyPZe4MgqvfeYDBFedMoGGpEw/LqOeaOT+nhxU+yHo=
github.com/gorilla/websocket v1.4.2 h1:+/TMaTYc4QFitKJxsQ7Yye35DkWvkdLcvGKqM+x0Ufc=
github.com/gorilla/websocket v1.4.2/go.mod h1:YR8l580nyteQvAITg2hZ9XVh4b55+EU/adAjf1fMHhE=
@@ -76,14 +69,8 @@ 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/hjson/hjson-go v3.1.0+incompatible h1:DY/9yE8ey8Zv22bY+mHV1uk2yRy0h8tKhZ77hEdi0Aw=
github.com/hjson/hjson-go v3.1.0+incompatible/go.mod h1:qsetwF8NlsTsOTwZTApNlTCerV+b2GjYRRcIk4JMFio=
-github.com/hpcloud/tail v1.0.0 h1:nfCOvKYfkgYP8hkirhJocXT2+zOD8yUNjXaWfTlyFKI=
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 h1:9yzud/Ht36ygwatGx56VwCZtlI/2AD15T1X2sjSuGns=
github.com/json-iterator/go v1.1.9/go.mod h1:KdQUCv79m/52Kvf8AW2vK1V8akMuk1QjK/uOdHXbAo4=
github.com/json-iterator/go v1.1.10 h1:Kz6Cvnvv2wGdaG/V8yMvfkmNiXq9Ya2KUv4rouJJr68=
github.com/json-iterator/go v1.1.10/go.mod h1:KdQUCv79m/52Kvf8AW2vK1V8akMuk1QjK/uOdHXbAo4=
@@ -95,7 +82,6 @@ github.com/kr/binarydist v0.1.0/go.mod h1:DY7S//GCoz1BCd0B0EVrinCKAZN3pXe+MDaIZb
github.com/leodido/go-urn v1.1.0/go.mod h1:+cyI34gQWZcE1eQU7NVgKkkzdXDQHr1dBMtdAPozLkw=
github.com/leodido/go-urn v1.2.0 h1:hpXL4XnriNwQ/ABnpepYM/1vCLWNDfUNts8dX3xTG6Y=
github.com/leodido/go-urn v1.2.0/go.mod h1:+8+nEpDfqqsY+g338gtMEUOtuK+4dEMhiQEgxpxOKII=
-github.com/lestrrat-go/envload v0.0.0-20180220234015-a3eb8ddeffcc h1:RKf14vYWi2ttpEmkA4aQ3j4u9dStX2t4M8UM6qqNsG8=
github.com/lestrrat-go/envload v0.0.0-20180220234015-a3eb8ddeffcc/go.mod h1:kopuH9ugFRkIXf3YoqHKyrJ9YfUFsckUU9S7B+XP+is=
github.com/lestrrat-go/file-rotatelogs v2.4.0+incompatible h1:Y6sqxHMyB1D2YSzWkLibYKgg+SwmyFU9dF2hn6MdTj4=
github.com/lestrrat-go/file-rotatelogs v2.4.0+incompatible/go.mod h1:ZQnN8lSECaebrkQytbHj4xNgtg8CR7RYXnPok8e0EHA=
@@ -111,16 +97,13 @@ github.com/modern-go/reflect2 v0.0.0-20180701023420-4b7aa43c6742/go.mod h1:bx2lN
github.com/nfnt/resize v0.0.0-20180221191011-83c6a9932646 h1:zYyBkD/k9seD2A7fsi6Oo2LfFZAehjjQMERAvZLEDnQ=
github.com/nfnt/resize v0.0.0-20180221191011-83c6a9932646/go.mod h1:jpp1/29i3P1S/RLdc7JQKbRpFeM1dOBd8T9ki5s+AY8=
github.com/onsi/ginkgo v1.6.0/go.mod h1:lLunBs/Ym6LB5Z9jYTR76FiuTmxDTDusOGeTQH+WWjE=
-github.com/onsi/ginkgo v1.7.0 h1:WSHQ+IS43OoUrWtD1/bbclrwK8TTH5hzp+umCiuxHgs=
github.com/onsi/ginkgo v1.7.0/go.mod h1:lLunBs/Ym6LB5Z9jYTR76FiuTmxDTDusOGeTQH+WWjE=
-github.com/onsi/gomega v1.4.3 h1:RE1xgDvH7imwFD45h+u2SgIfERHlS2yNG4DObb5BSKU=
github.com/onsi/gomega v1.4.3/go.mod h1:ex+gbHU/CVuBBDIJjb2X0qEXbFg53c61hWP/1CpauHY=
github.com/oxtoacart/bpool v0.0.0-20190530202638-03653db5a59c h1:rp5dCmg/yLR3mgFuSOe4oEnDDmGLROTvMragMUXpTQw=
github.com/oxtoacart/bpool v0.0.0-20190530202638-03653db5a59c/go.mod h1:X07ZCGwUbLaax7L0S3Tw4hpejzu63ZrrQiUe6W0hcy0=
github.com/pkg/errors v0.8.1/go.mod h1:bwawxfHBFNV+L2hUp1rHADufV3IMtnDRdf1r5NINEl0=
github.com/pkg/errors v0.9.1 h1:FEBLx1zS214owpjy7qsBeixbURkuhQAwrK5UwLGTwt4=
github.com/pkg/errors v0.9.1/go.mod h1:bwawxfHBFNV+L2hUp1rHADufV3IMtnDRdf1r5NINEl0=
-github.com/pmezard/go-difflib v1.0.0 h1:4DBwDE0NGyQoBHbLQYPwSUPoCMWR5BEzIk/f1lZbAQM=
github.com/pmezard/go-difflib v1.0.0/go.mod h1:iKH77koFhYxTK1pcRnkKkqfTogsbg7gZNVY4sRDYZ/4=
github.com/prometheus/client_model v0.0.0-20190812154241-14fe0d1b01d4/go.mod h1:xMI15A0UPsDsEKsMN9yxemIoYk6Tm2C1GtYGdfGttqA=
github.com/rifflock/lfshook v0.0.0-20180920164130-b9218ef580f5 h1:mZHayPoR0lNmnHyvtYjDeq0zlVHn9K/ZXoy17ylucdo=
@@ -132,14 +115,11 @@ github.com/stretchr/objx v0.1.0/go.mod h1:HFkY916IF+rwdDfMAkV7OtwuqBVzrE8GR6GFx+
github.com/stretchr/objx v0.1.1/go.mod h1:HFkY916IF+rwdDfMAkV7OtwuqBVzrE8GR6GFx+wExME=
github.com/stretchr/testify v1.2.2/go.mod h1:a8OnRcib4nhh0OaRAV+Yts87kKdq0PP7pXfy6kDkUVs=
github.com/stretchr/testify v1.3.0/go.mod h1:M5WIy9Dh21IEIfnGCwXGc5bZfKNJtfHm1UVUgZn+9EI=
-github.com/stretchr/testify v1.4.0 h1:2E4SXV/wtOkTonXsotYi4li6zVWxYlZuYNCXe9XRJyk=
github.com/stretchr/testify v1.4.0/go.mod h1:j7eGeouHqKxXV5pUuKE4zz7dFj8WfuZ+81PSLYec5m4=
github.com/syndtr/goleveldb v1.0.0 h1:fBdIW9lB4Iz0n9khmH8w27SJ3QEJ7+IgjPEwGSZiFdE=
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=
@@ -180,7 +160,6 @@ golang.org/x/sys v0.0.0-20191026070338-33540a1f6037/go.mod h1:h1NjWce9XRLGQEsW7w
golang.org/x/sys v0.0.0-20200116001909-b77594299b42 h1:vEOn+mP2zCOVzKckCZy6YsCtDblrpj/w7B9nxGNELpg=
golang.org/x/sys v0.0.0-20200116001909-b77594299b42/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs=
golang.org/x/text v0.3.0/go.mod h1:NqM8EUOU14njkJ3fqMW+pc6Ldnwhi/IjpwHt7yyuwOQ=
-golang.org/x/text v0.3.2 h1:tW2bmiBqwgJj/UpqtC8EpXEZVYOwU0yG4iWbprSVAcs=
golang.org/x/text v0.3.2/go.mod h1:bEr9sfX3Q8Zfm5fL9x+3itogRgK3+ptLWKqgva+5dAk=
golang.org/x/time v0.0.0-20200630173020-3af7569d3a1e h1:EHBhcS0mlXEAVwNyO2dLfjToGsyY4j24pTs2ScHnX7s=
golang.org/x/time v0.0.0-20200630173020-3af7569d3a1e/go.mod h1:tRJNPiyCQ0inRvYxbN9jk5I+vvW/OXSQhTDSoE431IQ=
@@ -189,7 +168,6 @@ golang.org/x/tools v0.0.0-20190114222345-bf090417da8b/go.mod h1:n7NCudcB/nEzxVGm
golang.org/x/tools v0.0.0-20190226205152-f727befe758c/go.mod h1:9Yl7xja0Znq3iFh3HoIrodX9oNMXvdceNzlUR8zjMvY=
golang.org/x/tools v0.0.0-20190311212946-11955173bddd/go.mod h1:LCzVGOaR6xXOjkQ3onu1FJEFr0SW1gC7cKk1uF8kGRs=
golang.org/x/tools v0.0.0-20190524140312-2c0ae7006135/go.mod h1:RgjU9mgBXZiqYHBnxXauZ1Gv1EHHAz9KjViQ78xBX0Q=
-golang.org/x/xerrors v0.0.0-20191204190536-9bdfabe68543 h1:E7g+9GITq07hpfrRu66IVDexMakfv52eLZ2CXBWiKr4=
golang.org/x/xerrors v0.0.0-20191204190536-9bdfabe68543/go.mod h1:I/5z698sn9Ka8TeJc9MKroUUfqBBauWjQqLJ2OPfmY0=
google.golang.org/appengine v1.1.0/go.mod h1:EbEs0AVv82hx2wNQdGPgUI5lhzA/G0D9YwlJXL52JkM=
google.golang.org/appengine v1.4.0/go.mod h1:xpcJRLb0r/rnEns0DIKYYv+WjYCduHsrkT7/EB5XEv4=
@@ -209,13 +187,10 @@ google.golang.org/protobuf v1.23.0/go.mod h1:EGpADcykh3NcUnDUJcl1+ZksZNG86OlYog2
google.golang.org/protobuf v1.23.1-0.20200526195155-81db48ad09cc/go.mod h1:EGpADcykh3NcUnDUJcl1+ZksZNG86OlYog2l/sGQquU=
google.golang.org/protobuf v1.25.0 h1:Ejskq+SyPohKW+1uil0JJMtmHCgJPJ/qWTxr8qp+R4c=
google.golang.org/protobuf v1.25.0/go.mod h1:9JNX74DMeImyA3h4bdi1ymwjUzf21/xIlbajtzgsN7c=
-gopkg.in/check.v1 v0.0.0-20161208181325-20d25e280405 h1:yhCVgyC4o1eVCa2tZl7eS0r+SDo693bJlVdllGtEeKM=
gopkg.in/check.v1 v0.0.0-20161208181325-20d25e280405/go.mod h1:Co6ibVJAznAaIkqp8huTwlJQCZ016jof/cbN4VW5Yz0=
-gopkg.in/fsnotify.v1 v1.4.7 h1:xOHLXZwVvI9hhs+cLKq5+I5onOuwQLhQwiu63xxlHs4=
gopkg.in/fsnotify.v1 v1.4.7/go.mod h1:Tz8NjZHkW78fSQdbUxIjBTcgA1z1m8ZHf0WmKUhAMys=
gopkg.in/go-playground/assert.v1 v1.2.1/go.mod h1:9RXL0bg/zibRAgZUYszZSwO/z8Y/a8bDuhia5mkpMnE=
gopkg.in/go-playground/validator.v9 v9.29.1/go.mod h1:+c9/zcJMFNgbLvly1L1V+PpxWdVbfP1avr/N00E2vyQ=
-gopkg.in/tomb.v1 v1.0.0-20141024135613-dd632973f1e7 h1:uRGJdciOHaEIrze2W8Q3AKkepLTh2hOroT7a+7czfdQ=
gopkg.in/tomb.v1 v1.0.0-20141024135613-dd632973f1e7/go.mod h1:dt/ZhP58zS4L8KSrWDmTeBkI65Dw0HsyUHuEVlX15mw=
gopkg.in/yaml.v2 v2.2.1/go.mod h1:hI93XBmqTisBFMUTm0b8Fm+jr3Dg1NNxqwp+5A1VGuI=
gopkg.in/yaml.v2 v2.2.2/go.mod h1:hI93XBmqTisBFMUTm0b8Fm+jr3Dg1NNxqwp+5A1VGuI=
From b6f3c300abd3a71d7cebc5863de07dc820dab269 Mon Sep 17 00:00:00 2001
From: Mrs4s <1844812067@qq.com>
Date: Sat, 21 Nov 2020 21:27:25 +0800
Subject: [PATCH 177/367] fix #442.
---
server/apiAdmin.go | 2 +-
1 file changed, 1 insertion(+), 1 deletion(-)
diff --git a/server/apiAdmin.go b/server/apiAdmin.go
index 026d072..ddef632 100644
--- a/server/apiAdmin.go
+++ b/server/apiAdmin.go
@@ -77,7 +77,7 @@ func (s *webServer) Run(addr string, cli *client.QQClient) *coolq.CQBot {
go func() {
//开启端口监听
- if s.Conf.WebUi.Enabled {
+ if s.Conf.WebUi != nil && s.Conf.WebUi.Enabled {
log.Infof("Admin API 服务器已启动: %v", addr)
err := s.engine.Run(addr)
if err != nil {
From 9d5842f09b70c12b78f73a12344c25975eb1f397 Mon Sep 17 00:00:00 2001
From: Shigma <33423008+Shigma@users.noreply.github.com>
Date: Sun, 22 Nov 2020 23:26:38 +0800
Subject: [PATCH 178/367] fix inconsistant bahaviour compared to spec
MIME-Version: 1.0
Content-Type: text/plain; charset=UTF-8
Content-Transfer-Encoding: 8bit
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
good:状态符合预期,意味着各模块正常运行、功能正常,且 QQ 在线
---
coolq/api.go | 3 ++-
1 file changed, 2 insertions(+), 1 deletion(-)
diff --git a/coolq/api.go b/coolq/api.go
index f7b4a81..1afb11a 100644
--- a/coolq/api.go
+++ b/coolq/api.go
@@ -781,6 +781,7 @@ func (bot *CQBot) CQSetGroupPortrait(groupId int64, file, cache string) MSG {
return Failed(100)
}
+// 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
func (bot *CQBot) CQGetStatus() MSG {
return OK(MSG{
"app_initialized": true,
@@ -788,7 +789,7 @@ func (bot *CQBot) CQGetStatus() MSG {
"plugins_good": nil,
"app_good": true,
"online": bot.Client.Online,
- "good": true,
+ "good": bot.Client.Online,
"stat": bot.Client.GetStatistics(),
})
}
From 1549ef4a329317152ba9258618777395b1be4826 Mon Sep 17 00:00:00 2001
From: Mrs4s
Date: Mon, 23 Nov 2020 14:19:41 +0800
Subject: [PATCH 179/367] update MiraiGo.
---
go.mod | 2 +-
go.sum | 4 ++--
2 files changed, 3 insertions(+), 3 deletions(-)
diff --git a/go.mod b/go.mod
index dcfb9c7..cde6682 100644
--- a/go.mod
+++ b/go.mod
@@ -3,7 +3,7 @@ module github.com/Mrs4s/go-cqhttp
go 1.15
require (
- github.com/Mrs4s/MiraiGo v0.0.0-20201120153907-26b45139c16f
+ github.com/Mrs4s/MiraiGo v0.0.0-20201123061252-c134dbea5052
github.com/dustin/go-humanize v1.0.0
github.com/getlantern/go-update v0.0.0-20190510022740-79c495ab728c
github.com/getlantern/golog v0.0.0-20201105130739-9586b8bde3a9 // indirect
diff --git a/go.sum b/go.sum
index d6101bf..91f6800 100644
--- a/go.sum
+++ b/go.sum
@@ -1,7 +1,7 @@
cloud.google.com/go v0.26.0/go.mod h1:aQUYkXzVsufM+DwF1aE+0xfcU+56JwCaLick0ClmMTw=
github.com/BurntSushi/toml v0.3.1/go.mod h1:xHWCNGjB5oqiDr8zfno3MHue2Ht5sIBksp03qcyfWMU=
-github.com/Mrs4s/MiraiGo v0.0.0-20201120153907-26b45139c16f h1:pjxBE1VvJpookM2iUySfiqmuNyMz52oOhcvSRwWldqw=
-github.com/Mrs4s/MiraiGo v0.0.0-20201120153907-26b45139c16f/go.mod h1:pAsWtMIwqkBXr5DkUpTIHoWQJNduVnX9WSBPmPvkuCs=
+github.com/Mrs4s/MiraiGo v0.0.0-20201123061252-c134dbea5052 h1:Y06UEVfcojtNDhsM/5kyfbqSbZgtstmIzM6gTBUULY0=
+github.com/Mrs4s/MiraiGo v0.0.0-20201123061252-c134dbea5052/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=
From 2c7b56a79cd05d74cae85bdb4a323b992c82dc98 Mon Sep 17 00:00:00 2001
From: Mrs4s
Date: Mon, 23 Nov 2020 14:59:00 +0800
Subject: [PATCH 180/367] fix get_msg.
---
coolq/api.go | 15 +++++++++++----
coolq/cqcode.go | 36 ++++++++++++++++++++++++++++++++++--
2 files changed, 45 insertions(+), 6 deletions(-)
diff --git a/coolq/api.go b/coolq/api.go
index 1afb11a..b8e04ba 100644
--- a/coolq/api.go
+++ b/coolq/api.go
@@ -718,17 +718,24 @@ func (bot *CQBot) CQGetMessage(messageId int32) MSG {
return Failed(100)
}
sender := msg["sender"].(message.Sender)
- _, group := msg["group"]
+ gid, isGroup := msg["group"]
+ raw := msg["message"].(string)
return OK(MSG{
"message_id": messageId,
"real_id": msg["message-id"],
- "group": group,
+ "group": isGroup,
+ "group_id": gid,
"sender": MSG{
"user_id": sender.Uin,
"nickname": sender.Nickname,
},
- "time": msg["time"],
- "message": msg["message"],
+ "time": msg["time"],
+ "message": ToFormattedMessage(bot.ConvertStringMessage(raw, isGroup), func() int64 {
+ if isGroup {
+ return gid.(int64)
+ }
+ return sender.Uin
+ }(), false),
})
}
diff --git a/coolq/cqcode.go b/coolq/cqcode.go
index b0aafd6..7cf9037 100644
--- a/coolq/cqcode.go
+++ b/coolq/cqcode.go
@@ -183,6 +183,30 @@ func ToArrayMessage(e []message.IMessageElement, code int64, raw ...bool) (r []M
"data": map[string]string{"file": o.Filename, "url": o.Url},
}
}
+ case *message.GroupImageElement:
+ if ur {
+ m = MSG{
+ "type": "image",
+ "data": map[string]string{"file": hex.EncodeToString(o.Md5) + ".image"},
+ }
+ } else {
+ m = MSG{
+ "type": "image",
+ "data": map[string]string{"file": hex.EncodeToString(o.Md5) + ".image", "url": CQCodeEscapeText(o.Url)},
+ }
+ }
+ case *message.FriendImageElement:
+ if ur {
+ m = MSG{
+ "type": "image",
+ "data": map[string]string{"file": hex.EncodeToString(o.Md5) + ".image"},
+ }
+ } else {
+ m = MSG{
+ "type": "image",
+ "data": map[string]string{"file": hex.EncodeToString(o.Md5) + ".image", "url": CQCodeEscapeText(o.Url)},
+ }
+ }
case *message.GroupFlashImgElement:
return []MSG{{
"type": "image",
@@ -262,9 +286,17 @@ func ToStringMessage(e []message.IMessageElement, code int64, raw ...bool) (r st
r += fmt.Sprintf(`[CQ:image,file=%s,url=%s]`, o.Filename, CQCodeEscapeValue(o.Url))
}
case *message.GroupImageElement:
- r += fmt.Sprintf("[CQ:image,file=%s]", hex.EncodeToString(o.Md5)+".image")
+ if ur {
+ r += fmt.Sprintf("[CQ:image,file=%s]", hex.EncodeToString(o.Md5)+".image")
+ } else {
+ r += fmt.Sprintf("[CQ:image,file=%s,url=%s]", hex.EncodeToString(o.Md5)+".image", CQCodeEscapeText(o.Url))
+ }
case *message.FriendImageElement:
- r += fmt.Sprintf("[CQ:image,file=%s]", hex.EncodeToString(o.Md5)+".image")
+ if ur {
+ r += fmt.Sprintf("[CQ:image,file=%s]", hex.EncodeToString(o.Md5)+".image")
+ } else {
+ r += fmt.Sprintf("[CQ:image,file=%s,url=%s]", hex.EncodeToString(o.Md5)+".image", CQCodeEscapeText(o.Url))
+ }
case *message.GroupFlashImgElement:
return fmt.Sprintf("[CQ:image,type=flash,file=%s]", o.Filename)
case *message.FriendFlashImgElement:
From 439c3422fb75284b7b1b65e4249a917889a0277a Mon Sep 17 00:00:00 2001
From: Mrs4s
Date: Tue, 24 Nov 2020 18:21:33 +0800
Subject: [PATCH 181/367] doc update.
---
docs/cqhttp.md | 247 ++++++++++++++++++++++++++++---------------------
1 file changed, 139 insertions(+), 108 deletions(-)
diff --git a/docs/cqhttp.md b/docs/cqhttp.md
index bfa3206..5f51c32 100644
--- a/docs/cqhttp.md
+++ b/docs/cqhttp.md
@@ -485,26 +485,26 @@ Type: `tts`
终结点: `/.ocr_image`
**参数**
-
- | 字段 | 类型 | 说明 |
- | ------- | ------ | ------ |
- | `image` | string | 图片ID |
-
+
+| 字段 | 类型 | 说明 |
+| ------- | ------ | ------ |
+| `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,56 +512,56 @@ 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 |
+
### 获取群文件系统信息
终结点: `/get_group_file_system_info`
**参数**
-
- | 字段 | 类型 | 说明 |
- | ---------- | ----- | ---- |
- | `group_id` | int64 | 群号 |
+
+| 字段 | 类型 | 说明 |
+| ---------- | ----- | ---- |
+| `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 | 空间上限 |
### 获取群根目录文件列表
@@ -570,18 +570,18 @@ Type: `tts`
终结点: `/get_group_root_files`
**参数**
-
- | 字段 | 类型 | 说明 |
- | ---------- | ----- | ---- |
- | `group_id` | int64 | 群号 |
-
+
+| 字段 | 类型 | 说明 |
+| ---------- | ----- | ---- |
+| `group_id` | int64 | 群号 |
+
**响应数据**
- | 字段 | 类型 | 说明 |
- | --------- | -------- | ---------- |
- | `files` | File[] | 文件列表 |
- | `folders` | Folder[] | 文件夹列表 |
-
+| 字段 | 类型 | 说明 |
+| --------- | -------- | ---------- |
+| `files` | File[] | 文件列表 |
+| `folders` | Folder[] | 文件夹列表 |
+
### 获取群子目录文件列表
> `File` 和 `Folder` 对象信息请参考最下方
@@ -589,19 +589,19 @@ Type: `tts`
终结点: `/get_group_files_by_folder`
**参数**
-
- | 字段 | 类型 | 说明 |
- | ----------- | ------ | --------------------------- |
- | `group_id` | int64 | 群号 |
- | `folder_id` | string | 文件夹ID 参考 `Folder` 对象 |
-
+
+| 字段 | 类型 | 说明 |
+| ----------- | ------ | --------------------------- |
+| `group_id` | int64 | 群号 |
+| `folder_id` | string | 文件夹ID 参考 `Folder` 对象 |
+
**响应数据**
- | 字段 | 类型 | 说明 |
- | --------- | -------- | ---------- |
- | `files` | File[] | 文件列表 |
- | `folders` | Folder[] | 文件夹列表 |
-
+| 字段 | 类型 | 说明 |
+| --------- | -------- | ---------- |
+| `files` | File[] | 文件列表 |
+| `folders` | Folder[] | 文件夹列表 |
+
### 获取群文件资源链接
> `File` 和 `Folder` 对象信息请参考最下方
@@ -609,44 +609,75 @@ Type: `tts`
终结点: `/get_group_file_url`
**参数**
-
- | 字段 | 类型 | 说明 |
- | ---------- | ------ | ------------------------- |
- | `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 | 子文件数量 |
+
+### 获取状态
+
+终结点: `/get_status`
+
+**响应数据**
+
+| 字段 | 类型 | 说明 |
+| --------------- | ---------- | ------------------------------- |
+| app_initialized | bool | 原 `CQHTTP` 字段, 恒定为 `true` |
+| app_enabled | bool | 原 `CQHTTP` 字段, 恒定为 `true` |
+| plugins_good | bool | 原 `CQHTTP` 字段, 恒定为 `true` |
+| app_good | bool | 原 `CQHTTP` 字段, 恒定为 `true` |
+| online | bool | 表示BOT是否在线 |
+| goold | bool | 同 `online` |
+| stat | Statistics | 运行统计 |
+
+**Statistics**
+
+
+| 字段 | 类型 | 说明 |
+| ---------------- | ------ | ---------------- |
+| packet_received | uint64 | 收到的数据包总数 |
+| packet_sent | uint64 | 发送的数据包总数 |
+| packet_lost | uint32 | 数据包丢失总数 |
+| message_received | uint64 | 接受信息总数 |
+| message_sent | uint64 | 发送信息总数 |
+| disconnect_times | uint32 | TCP链接断开次数 |
+| lost_times | uint32 | 账号掉线次数 |
+
+> 注意: 所有统计信息都将在重启后重制
## 事件
From 143d5ef8ab5bb301d68c563a5e16d6eae6f18c72 Mon Sep 17 00:00:00 2001
From: Mrs4s
Date: Tue, 24 Nov 2020 19:03:37 +0800
Subject: [PATCH 182/367] feature proxy rewrite.
---
global/config.go | 1 +
global/net.go | 22 ++++++++++++++++++++++
main.go | 1 +
3 files changed, 24 insertions(+)
diff --git a/global/config.go b/global/config.go
index 68a6e1e..25075f1 100644
--- a/global/config.go
+++ b/global/config.go
@@ -152,6 +152,7 @@ type JsonConfig struct {
} `json:"_rate_limit"`
IgnoreInvalidCQCode bool `json:"ignore_invalid_cqcode"`
ForceFragmented bool `json:"force_fragmented"`
+ ProxyRewrite string `json:"proxy_rewrite"`
HeartbeatInterval time.Duration `json:"heartbeat_interval"`
HttpConfig *GoCQHttpConfig `json:"http_config"`
WSConfig *GoCQWebsocketConfig `json:"ws_config"`
diff --git a/global/net.go b/global/net.go
index 1495fb1..d10bb1e 100644
--- a/global/net.go
+++ b/global/net.go
@@ -5,7 +5,9 @@ import (
"compress/gzip"
"fmt"
"io/ioutil"
+ "net"
"net/http"
+ "net/url"
"strings"
"time"
@@ -14,8 +16,28 @@ import (
var client = &http.Client{
Timeout: time.Second * 15,
+ Transport: &http.Transport{
+ Proxy: func(request *http.Request) (u *url.URL, e error) {
+ if Proxy == "" {
+ return http.ProxyFromEnvironment(request)
+ }
+ return url.Parse(Proxy)
+ },
+ DialContext: (&net.Dialer{
+ Timeout: 30 * time.Second,
+ KeepAlive: 30 * time.Second,
+ DualStack: true,
+ }).DialContext,
+ ForceAttemptHTTP2: true,
+ MaxIdleConns: 100,
+ IdleConnTimeout: 90 * time.Second,
+ TLSHandshakeTimeout: 10 * time.Second,
+ ExpectContinueTimeout: 1 * time.Second,
+ },
}
+var Proxy string
+
func GetBytes(url string) ([]byte, error) {
req, err := http.NewRequest("GET", url, nil)
if err != nil {
diff --git a/main.go b/main.go
index d6bbcee..0972ba4 100644
--- a/main.go
+++ b/main.go
@@ -319,6 +319,7 @@ func main() {
if conf.WebUi.Host == "" {
conf.WebUi.Host = "127.0.0.1"
}
+ global.Proxy = conf.ProxyRewrite
b := server.WebServer.Run(fmt.Sprintf("%s:%d", conf.WebUi.Host, conf.WebUi.WebUiPort), cli)
c := server.Console
r := server.Restart
From d1c6053df8a537dd8cbe923c2a17df9db8429a6c Mon Sep 17 00:00:00 2001
From: Mrs4s
Date: Wed, 25 Nov 2020 16:32:41 +0800
Subject: [PATCH 183/367] update MiraiGo.
---
go.mod | 2 +-
go.sum | 2 ++
2 files changed, 3 insertions(+), 1 deletion(-)
diff --git a/go.mod b/go.mod
index cde6682..ceaf635 100644
--- a/go.mod
+++ b/go.mod
@@ -3,7 +3,7 @@ module github.com/Mrs4s/go-cqhttp
go 1.15
require (
- github.com/Mrs4s/MiraiGo v0.0.0-20201123061252-c134dbea5052
+ github.com/Mrs4s/MiraiGo v0.0.0-20201125073606-b3233e604e03
github.com/dustin/go-humanize v1.0.0
github.com/getlantern/go-update v0.0.0-20190510022740-79c495ab728c
github.com/getlantern/golog v0.0.0-20201105130739-9586b8bde3a9 // indirect
diff --git a/go.sum b/go.sum
index 91f6800..b3410bf 100644
--- a/go.sum
+++ b/go.sum
@@ -2,6 +2,8 @@ cloud.google.com/go v0.26.0/go.mod h1:aQUYkXzVsufM+DwF1aE+0xfcU+56JwCaLick0ClmMT
github.com/BurntSushi/toml v0.3.1/go.mod h1:xHWCNGjB5oqiDr8zfno3MHue2Ht5sIBksp03qcyfWMU=
github.com/Mrs4s/MiraiGo v0.0.0-20201123061252-c134dbea5052 h1:Y06UEVfcojtNDhsM/5kyfbqSbZgtstmIzM6gTBUULY0=
github.com/Mrs4s/MiraiGo v0.0.0-20201123061252-c134dbea5052/go.mod h1:pAsWtMIwqkBXr5DkUpTIHoWQJNduVnX9WSBPmPvkuCs=
+github.com/Mrs4s/MiraiGo v0.0.0-20201125073606-b3233e604e03 h1:TGOIB6ZGLODcXn+/NJC0BPN0JwopqQmM3W/B7J/Lavw=
+github.com/Mrs4s/MiraiGo v0.0.0-20201125073606-b3233e604e03/go.mod h1:J1zaJWyeX7hQIPpOobqb8opxTNPbguotudPPrHJMoDM=
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=
From 375fdc8dca6ee069f02dc101a32c29a244195802 Mon Sep 17 00:00:00 2001
From: Mrs4s
Date: Wed, 25 Nov 2020 17:28:19 +0800
Subject: [PATCH 184/367] update config comment.
---
global/config.go | 1 +
1 file changed, 1 insertion(+)
diff --git a/global/config.go b/global/config.go
index 25075f1..25b023c 100644
--- a/global/config.go
+++ b/global/config.go
@@ -100,6 +100,7 @@ var DefaultConfigWithComments = `
enabled: false
// 反向WS Universal 地址
// 注意 设置了此项地址后下面两项将会被忽略
+ // 留空请使用 ""
reverse_url: ws://you_websocket_universal.server
// 反向WS API 地址
reverse_api_url: ws://you_websocket_api.server
From 28d536a3af74080ec38d3fbfbb398c5d98fd2049 Mon Sep 17 00:00:00 2001
From: Mrs4s
Date: Wed, 25 Nov 2020 20:12:35 +0800
Subject: [PATCH 185/367] update MiraiGo.
---
go.mod | 2 +-
go.sum | 7 ++-----
2 files changed, 3 insertions(+), 6 deletions(-)
diff --git a/go.mod b/go.mod
index ceaf635..87449c2 100644
--- a/go.mod
+++ b/go.mod
@@ -3,7 +3,7 @@ module github.com/Mrs4s/go-cqhttp
go 1.15
require (
- github.com/Mrs4s/MiraiGo v0.0.0-20201125073606-b3233e604e03
+ github.com/Mrs4s/MiraiGo v0.0.0-20201125120914-ad8bcb63aaab
github.com/dustin/go-humanize v1.0.0
github.com/getlantern/go-update v0.0.0-20190510022740-79c495ab728c
github.com/getlantern/golog v0.0.0-20201105130739-9586b8bde3a9 // indirect
diff --git a/go.sum b/go.sum
index b3410bf..ea70221 100644
--- a/go.sum
+++ b/go.sum
@@ -1,9 +1,7 @@
cloud.google.com/go v0.26.0/go.mod h1:aQUYkXzVsufM+DwF1aE+0xfcU+56JwCaLick0ClmMTw=
github.com/BurntSushi/toml v0.3.1/go.mod h1:xHWCNGjB5oqiDr8zfno3MHue2Ht5sIBksp03qcyfWMU=
-github.com/Mrs4s/MiraiGo v0.0.0-20201123061252-c134dbea5052 h1:Y06UEVfcojtNDhsM/5kyfbqSbZgtstmIzM6gTBUULY0=
-github.com/Mrs4s/MiraiGo v0.0.0-20201123061252-c134dbea5052/go.mod h1:pAsWtMIwqkBXr5DkUpTIHoWQJNduVnX9WSBPmPvkuCs=
-github.com/Mrs4s/MiraiGo v0.0.0-20201125073606-b3233e604e03 h1:TGOIB6ZGLODcXn+/NJC0BPN0JwopqQmM3W/B7J/Lavw=
-github.com/Mrs4s/MiraiGo v0.0.0-20201125073606-b3233e604e03/go.mod h1:J1zaJWyeX7hQIPpOobqb8opxTNPbguotudPPrHJMoDM=
+github.com/Mrs4s/MiraiGo v0.0.0-20201125120914-ad8bcb63aaab h1:N6AhvWwKrzIVUy0m2D4Zp59+BH9jTCY6TKlMQW0Z1Lw=
+github.com/Mrs4s/MiraiGo v0.0.0-20201125120914-ad8bcb63aaab/go.mod h1:J1zaJWyeX7hQIPpOobqb8opxTNPbguotudPPrHJMoDM=
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=
@@ -122,7 +120,6 @@ 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/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=
github.com/tidwall/match v1.0.1 h1:PnKP62LPNxHKTwvHHZZzdOAOCtsJTjo6dZLCwpKm5xc=
From 7a713c9327646fa47b73984d620ee55cfe2392a7 Mon Sep 17 00:00:00 2001
From: Mrs4s
Date: Fri, 27 Nov 2020 01:28:52 +0800
Subject: [PATCH 186/367] update MiraiGo.
---
coolq/api.go | 10 ++++++++--
go.mod | 2 +-
go.sum | 4 ++--
3 files changed, 11 insertions(+), 5 deletions(-)
diff --git a/coolq/api.go b/coolq/api.go
index b8e04ba..c6cbc78 100644
--- a/coolq/api.go
+++ b/coolq/api.go
@@ -484,13 +484,19 @@ func (bot *CQBot) CQDeleteMessage(messageId int32) MSG {
return Failed(100)
}
if _, ok := msg["group"]; ok {
- bot.Client.RecallGroupMessage(msg["group"].(int64), msg["message-id"].(int32), msg["internal-id"].(int32))
+ if err := bot.Client.RecallGroupMessage(msg["group"].(int64), msg["message-id"].(int32), msg["internal-id"].(int32)); err != nil {
+ log.Warnf("撤回 %v 失败: %v", messageId, err)
+ return Failed(100)
+ }
} else {
if msg["sender"].(message.Sender).Uin != bot.Client.Uin {
log.Warnf("撤回 %v 失败: 好友会话无法撤回对方消息.")
return Failed(100)
}
- bot.Client.RecallPrivateMessage(msg["target"].(int64), int64(msg["time"].(int32)), msg["message-id"].(int32), msg["internal-id"].(int32))
+ if err := bot.Client.RecallPrivateMessage(msg["target"].(int64), int64(msg["time"].(int32)), msg["message-id"].(int32), msg["internal-id"].(int32)); err != nil {
+ log.Warnf("撤回 %v 失败: %v", messageId, err)
+ return Failed(100)
+ }
}
return OK(nil)
}
diff --git a/go.mod b/go.mod
index 87449c2..2ebcc26 100644
--- a/go.mod
+++ b/go.mod
@@ -3,7 +3,7 @@ module github.com/Mrs4s/go-cqhttp
go 1.15
require (
- github.com/Mrs4s/MiraiGo v0.0.0-20201125120914-ad8bcb63aaab
+ github.com/Mrs4s/MiraiGo v0.0.0-20201126172545-3bfec47a16f1
github.com/dustin/go-humanize v1.0.0
github.com/getlantern/go-update v0.0.0-20190510022740-79c495ab728c
github.com/getlantern/golog v0.0.0-20201105130739-9586b8bde3a9 // indirect
diff --git a/go.sum b/go.sum
index ea70221..643e02b 100644
--- a/go.sum
+++ b/go.sum
@@ -1,7 +1,7 @@
cloud.google.com/go v0.26.0/go.mod h1:aQUYkXzVsufM+DwF1aE+0xfcU+56JwCaLick0ClmMTw=
github.com/BurntSushi/toml v0.3.1/go.mod h1:xHWCNGjB5oqiDr8zfno3MHue2Ht5sIBksp03qcyfWMU=
-github.com/Mrs4s/MiraiGo v0.0.0-20201125120914-ad8bcb63aaab h1:N6AhvWwKrzIVUy0m2D4Zp59+BH9jTCY6TKlMQW0Z1Lw=
-github.com/Mrs4s/MiraiGo v0.0.0-20201125120914-ad8bcb63aaab/go.mod h1:J1zaJWyeX7hQIPpOobqb8opxTNPbguotudPPrHJMoDM=
+github.com/Mrs4s/MiraiGo v0.0.0-20201126172545-3bfec47a16f1 h1:U9DLenyqWA+q5x4TQiK2kiBuSlnUsJMx/XhRjGe9/zU=
+github.com/Mrs4s/MiraiGo v0.0.0-20201126172545-3bfec47a16f1/go.mod h1:J1zaJWyeX7hQIPpOobqb8opxTNPbguotudPPrHJMoDM=
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=
From 7f831cf856d41e2d368d5997fbab75fe04b432db Mon Sep 17 00:00:00 2001
From: Mrs4s
Date: Fri, 27 Nov 2020 01:38:08 +0800
Subject: [PATCH 187/367] update MiraiGo.
---
go.mod | 2 +-
go.sum | 4 ++--
2 files changed, 3 insertions(+), 3 deletions(-)
diff --git a/go.mod b/go.mod
index 2ebcc26..e02f3e8 100644
--- a/go.mod
+++ b/go.mod
@@ -3,7 +3,7 @@ module github.com/Mrs4s/go-cqhttp
go 1.15
require (
- github.com/Mrs4s/MiraiGo v0.0.0-20201126172545-3bfec47a16f1
+ github.com/Mrs4s/MiraiGo v0.0.0-20201126173608-8b500107c54d
github.com/dustin/go-humanize v1.0.0
github.com/getlantern/go-update v0.0.0-20190510022740-79c495ab728c
github.com/getlantern/golog v0.0.0-20201105130739-9586b8bde3a9 // indirect
diff --git a/go.sum b/go.sum
index 643e02b..b520a2a 100644
--- a/go.sum
+++ b/go.sum
@@ -1,7 +1,7 @@
cloud.google.com/go v0.26.0/go.mod h1:aQUYkXzVsufM+DwF1aE+0xfcU+56JwCaLick0ClmMTw=
github.com/BurntSushi/toml v0.3.1/go.mod h1:xHWCNGjB5oqiDr8zfno3MHue2Ht5sIBksp03qcyfWMU=
-github.com/Mrs4s/MiraiGo v0.0.0-20201126172545-3bfec47a16f1 h1:U9DLenyqWA+q5x4TQiK2kiBuSlnUsJMx/XhRjGe9/zU=
-github.com/Mrs4s/MiraiGo v0.0.0-20201126172545-3bfec47a16f1/go.mod h1:J1zaJWyeX7hQIPpOobqb8opxTNPbguotudPPrHJMoDM=
+github.com/Mrs4s/MiraiGo v0.0.0-20201126173608-8b500107c54d h1:+oGHcMd+OTR/zmhlaKUI9TjjWHZJaUBQi4I3+HP7faU=
+github.com/Mrs4s/MiraiGo v0.0.0-20201126173608-8b500107c54d/go.mod h1:J1zaJWyeX7hQIPpOobqb8opxTNPbguotudPPrHJMoDM=
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=
From 33d64b6e27654d91dd5cf79d0bd66596ac34c570 Mon Sep 17 00:00:00 2001
From: Mrs4s
Date: Fri, 27 Nov 2020 01:46:42 +0800
Subject: [PATCH 188/367] update README.md
---
README.md | 2 +-
1 file changed, 1 insertion(+), 1 deletion(-)
diff --git a/README.md b/README.md
index a2a9b24..68f8add 100644
--- a/README.md
+++ b/README.md
@@ -20,7 +20,7 @@
- [x] 消息撤回事件
- [x] 解析/发送 回复消息
- [x] 解析/发送 合并转发
-- [ ] 使用代理请求网络图片
+- [x] 使用代理请求网络图片
#### 实现
From b93df0250d5f48053607e2b01097f9bd32bfb95e Mon Sep 17 00:00:00 2001
From: daofeng2015
Date: Sat, 28 Nov 2020 23:24:24 +0800
Subject: [PATCH 189/367] =?UTF-8?q?fix:Dockerfile=E5=A2=9E=E5=8A=A0?=
=?UTF-8?q?=E4=BB=A3=E7=90=86=E6=BA=90?=
MIME-Version: 1.0
Content-Type: text/plain; charset=UTF-8
Content-Transfer-Encoding: 8bit
---
Dockerfile | 1 +
1 file changed, 1 insertion(+)
diff --git a/Dockerfile b/Dockerfile
index 938abb2..d6058c6 100644
--- a/Dockerfile
+++ b/Dockerfile
@@ -2,6 +2,7 @@ FROM golang:1.15.5-alpine AS builder
RUN go env -w GO111MODULE=auto \
&& go env -w CGO_ENABLED=0 \
+ && go env -w GOPROXY=https://goproxy.cn,direct \
&& mkdir /build
WORKDIR /build
From dcb708e3e396315b670589673c0e8d1311d51a66 Mon Sep 17 00:00:00 2001
From: brownchow <8622915+brownchow@users.noreply.github.com>
Date: Sun, 29 Nov 2020 18:21:01 +0800
Subject: [PATCH 190/367] remove mkdir, add set -ex
---
Dockerfile | 8 ++++----
1 file changed, 4 insertions(+), 4 deletions(-)
diff --git a/Dockerfile b/Dockerfile
index d6058c6..13bb038 100644
--- a/Dockerfile
+++ b/Dockerfile
@@ -2,15 +2,15 @@ FROM golang:1.15.5-alpine AS builder
RUN go env -w GO111MODULE=auto \
&& go env -w CGO_ENABLED=0 \
- && go env -w GOPROXY=https://goproxy.cn,direct \
- && mkdir /build
+ && go env -w GOPROXY=https://goproxy.cn,direct
WORKDIR /build
COPY ./ .
-RUN cd /build \
- && go build -ldflags "-s -w -extldflags '-static'" -o cqhttp
+RUN set -ex \
+ && cd /build \
+ && go build -ldflags "-s -w -extldflags '-static'" -o cqhttp
FROM alpine:latest
From 71e3e97aeb893274e9de6750a236497e792a97e7 Mon Sep 17 00:00:00 2001
From: Mrs4s <1844812067@qq.com>
Date: Sun, 29 Nov 2020 21:01:12 +0800
Subject: [PATCH 191/367] update MiraiGo.
---
go.mod | 2 +-
go.sum | 4 ++--
2 files changed, 3 insertions(+), 3 deletions(-)
diff --git a/go.mod b/go.mod
index e02f3e8..c428426 100644
--- a/go.mod
+++ b/go.mod
@@ -3,7 +3,7 @@ module github.com/Mrs4s/go-cqhttp
go 1.15
require (
- github.com/Mrs4s/MiraiGo v0.0.0-20201126173608-8b500107c54d
+ github.com/Mrs4s/MiraiGo v0.0.0-20201129125807-bb4a8e659c2a
github.com/dustin/go-humanize v1.0.0
github.com/getlantern/go-update v0.0.0-20190510022740-79c495ab728c
github.com/getlantern/golog v0.0.0-20201105130739-9586b8bde3a9 // indirect
diff --git a/go.sum b/go.sum
index b520a2a..5aa4cf5 100644
--- a/go.sum
+++ b/go.sum
@@ -1,7 +1,7 @@
cloud.google.com/go v0.26.0/go.mod h1:aQUYkXzVsufM+DwF1aE+0xfcU+56JwCaLick0ClmMTw=
github.com/BurntSushi/toml v0.3.1/go.mod h1:xHWCNGjB5oqiDr8zfno3MHue2Ht5sIBksp03qcyfWMU=
-github.com/Mrs4s/MiraiGo v0.0.0-20201126173608-8b500107c54d h1:+oGHcMd+OTR/zmhlaKUI9TjjWHZJaUBQi4I3+HP7faU=
-github.com/Mrs4s/MiraiGo v0.0.0-20201126173608-8b500107c54d/go.mod h1:J1zaJWyeX7hQIPpOobqb8opxTNPbguotudPPrHJMoDM=
+github.com/Mrs4s/MiraiGo v0.0.0-20201129125807-bb4a8e659c2a h1:LX0voKO/ay8KuxaYT4PLhBQFlBnW35o6M3F4vhl8bak=
+github.com/Mrs4s/MiraiGo v0.0.0-20201129125807-bb4a8e659c2a/go.mod h1:J1zaJWyeX7hQIPpOobqb8opxTNPbguotudPPrHJMoDM=
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=
From 6599bf6aa62cbdd685d9ba3b15c7c190a798e015 Mon Sep 17 00:00:00 2001
From: Mrs4s <1844812067@qq.com>
Date: Sun, 29 Nov 2020 21:17:16 +0800
Subject: [PATCH 192/367] update MiraiGo.
---
go.mod | 2 +-
go.sum | 2 ++
2 files changed, 3 insertions(+), 1 deletion(-)
diff --git a/go.mod b/go.mod
index c428426..9d27b4d 100644
--- a/go.mod
+++ b/go.mod
@@ -3,7 +3,7 @@ module github.com/Mrs4s/go-cqhttp
go 1.15
require (
- github.com/Mrs4s/MiraiGo v0.0.0-20201129125807-bb4a8e659c2a
+ github.com/Mrs4s/MiraiGo v0.0.0-20201129131629-7a3c8fd7f4e2
github.com/dustin/go-humanize v1.0.0
github.com/getlantern/go-update v0.0.0-20190510022740-79c495ab728c
github.com/getlantern/golog v0.0.0-20201105130739-9586b8bde3a9 // indirect
diff --git a/go.sum b/go.sum
index 5aa4cf5..e207685 100644
--- a/go.sum
+++ b/go.sum
@@ -2,6 +2,8 @@ cloud.google.com/go v0.26.0/go.mod h1:aQUYkXzVsufM+DwF1aE+0xfcU+56JwCaLick0ClmMT
github.com/BurntSushi/toml v0.3.1/go.mod h1:xHWCNGjB5oqiDr8zfno3MHue2Ht5sIBksp03qcyfWMU=
github.com/Mrs4s/MiraiGo v0.0.0-20201129125807-bb4a8e659c2a h1:LX0voKO/ay8KuxaYT4PLhBQFlBnW35o6M3F4vhl8bak=
github.com/Mrs4s/MiraiGo v0.0.0-20201129125807-bb4a8e659c2a/go.mod h1:J1zaJWyeX7hQIPpOobqb8opxTNPbguotudPPrHJMoDM=
+github.com/Mrs4s/MiraiGo v0.0.0-20201129131629-7a3c8fd7f4e2 h1:8dV/HU6Og7cMEtXWOk100Gc64fM1VjwxzlvwBcjcjqA=
+github.com/Mrs4s/MiraiGo v0.0.0-20201129131629-7a3c8fd7f4e2/go.mod h1:J1zaJWyeX7hQIPpOobqb8opxTNPbguotudPPrHJMoDM=
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=
From 09eeff3ce669d0c8a6b66e9c3b4f172745f3a89d Mon Sep 17 00:00:00 2001
From: Mrs4s
Date: Tue, 1 Dec 2020 19:31:17 +0800
Subject: [PATCH 193/367] feature new cqcode converter
---
coolq/cqcode.go | 110 +++++++++++++++---------------
coolq/cqcode_c.go | 166 ++++++++++++++++++++++++++++++++++++++++++++++
2 files changed, 223 insertions(+), 53 deletions(-)
create mode 100644 coolq/cqcode_c.go
diff --git a/coolq/cqcode.go b/coolq/cqcode.go
index 7cf9037..eae888c 100644
--- a/coolq/cqcode.go
+++ b/coolq/cqcode.go
@@ -316,65 +316,69 @@ func ToStringMessage(e []message.IMessageElement, code int64, raw ...bool) (r st
}
func (bot *CQBot) ConvertStringMessage(m string, group bool) (r []message.IMessageElement) {
- i := matchReg.FindAllStringSubmatchIndex(m, -1)
- si := 0
- for _, idx := range i {
- if idx[0] > si {
- text := m[si:idx[0]]
- r = append(r, message.NewText(CQCodeUnescapeText(text)))
- }
- code := m[idx[0]:idx[1]]
- si = idx[1]
- t := typeReg.FindAllStringSubmatch(code, -1)[0][1]
- ps := paramReg.FindAllStringSubmatch(code, -1)
- d := make(map[string]string)
- for _, p := range ps {
- d[p[1]] = CQCodeUnescapeValue(p[2])
- }
- if t == "reply" {
- if len(r) > 0 {
- if _, ok := r[0].(*message.ReplyElement); ok {
- log.Warnf("警告: 一条信息只能包含一个 Reply 元素.")
- continue
+ c := newCQCodeConverter(m, bot, group)
+ return c.convert()
+ /*
+ i := matchReg.FindAllStringSubmatchIndex(m, -1)
+ si := 0
+ for _, idx := range i {
+ if idx[0] > si {
+ text := m[si:idx[0]]
+ r = append(r, message.NewText(CQCodeUnescapeText(text)))
+ }
+ code := m[idx[0]:idx[1]]
+ si = idx[1]
+ t := typeReg.FindAllStringSubmatch(code, -1)[0][1]
+ ps := paramReg.FindAllStringSubmatch(code, -1)
+ d := make(map[string]string)
+ for _, p := range ps {
+ d[p[1]] = CQCodeUnescapeValue(p[2])
+ }
+ if t == "reply" {
+ if len(r) > 0 {
+ if _, ok := r[0].(*message.ReplyElement); ok {
+ log.Warnf("警告: 一条信息只能包含一个 Reply 元素.")
+ continue
+ }
+ }
+ mid, err := strconv.Atoi(d["id"])
+ if err == nil {
+ org := bot.GetMessage(int32(mid))
+ if org != nil {
+ r = append([]message.IMessageElement{
+ &message.ReplyElement{
+ ReplySeq: org["message-id"].(int32),
+ Sender: org["sender"].(message.Sender).Uin,
+ Time: org["time"].(int32),
+ Elements: bot.ConvertStringMessage(org["message"].(string), group),
+ },
+ }, r...)
+ continue
+ }
}
}
- mid, err := strconv.Atoi(d["id"])
- if err == nil {
- org := bot.GetMessage(int32(mid))
- if org != nil {
- r = append([]message.IMessageElement{
- &message.ReplyElement{
- ReplySeq: org["message-id"].(int32),
- Sender: org["sender"].(message.Sender).Uin,
- Time: org["time"].(int32),
- Elements: bot.ConvertStringMessage(org["message"].(string), group),
- },
- }, r...)
- continue
+ elem, err := bot.ToElement(t, d, group)
+ if err != nil {
+ if !IgnoreInvalidCQCode {
+ log.Warnf("转换CQ码 %v 到MiraiGo Element时出现错误: %v 将原样发送.", code, err)
+ r = append(r, message.NewText(code))
+ } else {
+ log.Warnf("转换CQ码 %v 到MiraiGo Element时出现错误: %v 将忽略.", code, err)
}
+ continue
+ }
+ switch i := elem.(type) {
+ case message.IMessageElement:
+ r = append(r, i)
+ case []message.IMessageElement:
+ r = append(r, i...)
}
}
- elem, err := bot.ToElement(t, d, group)
- if err != nil {
- if !IgnoreInvalidCQCode {
- log.Warnf("转换CQ码 %v 到MiraiGo Element时出现错误: %v 将原样发送.", code, err)
- r = append(r, message.NewText(code))
- } else {
- log.Warnf("转换CQ码 %v 到MiraiGo Element时出现错误: %v 将忽略.", code, err)
- }
- continue
+ if si != len(m) {
+ r = append(r, message.NewText(CQCodeUnescapeText(m[si:])))
}
- switch i := elem.(type) {
- case message.IMessageElement:
- r = append(r, i)
- case []message.IMessageElement:
- r = append(r, i...)
- }
- }
- if si != len(m) {
- r = append(r, message.NewText(CQCodeUnescapeText(m[si:])))
- }
- return
+ return
+ */
}
func (bot *CQBot) ConvertObjectMessage(m gjson.Result, group bool) (r []message.IMessageElement) {
diff --git a/coolq/cqcode_c.go b/coolq/cqcode_c.go
new file mode 100644
index 0000000..9c89aaa
--- /dev/null
+++ b/coolq/cqcode_c.go
@@ -0,0 +1,166 @@
+package coolq
+
+import (
+ "bufio"
+ "github.com/Mrs4s/MiraiGo/message"
+ log "github.com/sirupsen/logrus"
+ "math"
+ "strconv"
+ "strings"
+)
+
+type CQCodeConverter struct {
+ message []rune
+ bot *CQBot
+ group bool
+
+ index int
+ stat state
+ elements []message.IMessageElement
+ tempText []rune
+ cqCode []rune
+}
+
+type state uint8
+
+const (
+ S0 state = iota
+ S1
+)
+
+func newCQCodeConverter(message string, bot *CQBot, group bool) *CQCodeConverter {
+ return &CQCodeConverter{message: []rune(message), bot: bot, group: group, stat: S0}
+}
+
+func (c *CQCodeConverter) hasNext() bool {
+ return c.index < len(c.message)
+}
+
+func (c *CQCodeConverter) next() rune {
+ r := c.message[c.index]
+ c.index++
+ return r
+}
+
+func (c *CQCodeConverter) move(steps int) {
+ c.index += steps
+}
+
+func (c *CQCodeConverter) peek(idx int) rune {
+ return c.message[idx]
+}
+
+func (c *CQCodeConverter) peekN(count int) string {
+ lastIdx := int(math.Min(float64(c.index+count), float64(len(c.message)-1)))
+ return string(c.message[c.index:lastIdx])
+}
+
+func (c *CQCodeConverter) isCQCodeBegin(r rune) bool {
+ return r == '[' && c.peekN(3) == "CQ:"
+}
+
+func (c *CQCodeConverter) saveTempText() {
+ if len(c.tempText) != 0 {
+ c.elements = append(c.elements, message.NewText(CQCodeUnescapeValue(string(c.tempText))))
+ }
+ c.tempText = []rune{}
+ c.cqCode = []rune{}
+}
+
+func (c *CQCodeConverter) saveCQCode() {
+ defer func() {
+ c.cqCode = []rune{}
+ c.tempText = []rune{}
+ }()
+ reader := strings.NewReader(string(c.cqCode))
+ buf := bufio.NewReader(reader)
+ t, _ := buf.ReadString(',')
+ t = t[0 : len(t)-1]
+ params := make(map[string]string)
+ for buf.Buffered() > 0 {
+ p, _ := buf.ReadString(',')
+ if strings.HasSuffix(p, ",") {
+ p = p[0 : len(p)-1]
+ }
+ p = strings.TrimSpace(p)
+ if p == "" {
+ continue
+ }
+ data := strings.SplitN(p, "=", 2)
+ if len(data) == 2 {
+ params[data[0]] = data[1]
+ } else {
+ params[p] = ""
+ }
+ }
+ if t == "reply" { // reply 特殊处理
+ if len(c.elements) > 0 {
+ if _, ok := c.elements[0].(*message.ReplyElement); ok {
+ log.Warnf("警告: 一条信息只能包含一个 Reply 元素.")
+ return
+ }
+ }
+ mid, err := strconv.Atoi(params["id"])
+ if err == nil {
+ org := c.bot.GetMessage(int32(mid))
+ if org != nil {
+ c.elements = append([]message.IMessageElement{
+ &message.ReplyElement{
+ ReplySeq: org["message-id"].(int32),
+ Sender: org["sender"].(message.Sender).Uin,
+ Time: org["time"].(int32),
+ Elements: c.bot.ConvertStringMessage(org["message"].(string), c.group),
+ },
+ }, c.elements...)
+ return
+ }
+ }
+ }
+ elem, err := c.bot.ToElement(t, params, c.group)
+ if err != nil {
+ org := "[" + string(c.cqCode) + "]"
+ if !IgnoreInvalidCQCode {
+ log.Warnf("转换CQ码 %v 时出现错误: %v 将原样发送.", org, err)
+ c.elements = append(c.elements, message.NewText(org))
+ } else {
+ log.Warnf("转换CQ码 %v 时出现错误: %v 将忽略.", org, err)
+ }
+ return
+ }
+ switch i := elem.(type) {
+ case message.IMessageElement:
+ c.elements = append(c.elements, i)
+ case []message.IMessageElement:
+ c.elements = append(c.elements, i...)
+ }
+}
+
+func (c *CQCodeConverter) convert() []message.IMessageElement {
+ for c.hasNext() {
+ ch := c.next()
+ switch c.stat {
+ case S0:
+ if c.isCQCodeBegin(ch) {
+ c.saveTempText()
+ c.tempText = append(c.tempText, []rune("[CQ:")...)
+ c.move(3)
+ c.stat = S1
+ } else {
+ c.tempText = append(c.tempText, ch)
+ }
+ case S1:
+ if c.isCQCodeBegin(ch) {
+ c.move(-1)
+ c.stat = S0
+ } else if ch == ']' {
+ c.saveCQCode()
+ c.stat = S0
+ } else {
+ c.cqCode = append(c.cqCode, ch)
+ c.tempText = append(c.tempText, ch)
+ }
+ }
+ }
+ c.saveTempText()
+ return c.elements
+}
From 03518b4823f355a3707f782956099807b58a1efa Mon Sep 17 00:00:00 2001
From: Mrs4s
Date: Tue, 1 Dec 2020 21:14:48 +0800
Subject: [PATCH 194/367] more error message.
---
coolq/api.go | 109 ++++++++++++++++++++++++++++-----------------------
1 file changed, 60 insertions(+), 49 deletions(-)
diff --git a/coolq/api.go b/coolq/api.go
index c6cbc78..dfb012a 100644
--- a/coolq/api.go
+++ b/coolq/api.go
@@ -58,7 +58,7 @@ func (bot *CQBot) CQGetGroupList(noCache bool) MSG {
func (bot *CQBot) CQGetGroupInfo(groupId int64) MSG {
group := bot.Client.FindGroup(groupId)
if group == nil {
- return Failed(100)
+ return Failed(100, "GROUP_NOT_FOUND", "群聊不存在")
}
return OK(MSG{
"group_id": group.Code,
@@ -72,13 +72,13 @@ func (bot *CQBot) CQGetGroupInfo(groupId int64) MSG {
func (bot *CQBot) CQGetGroupMemberList(groupId int64, noCache bool) MSG {
group := bot.Client.FindGroup(groupId)
if group == nil {
- return Failed(100)
+ return Failed(100, "GROUP_NOT_FOUND", "群聊不存在")
}
if noCache {
t, err := bot.Client.GetGroupMembers(group)
if err != nil {
log.Warnf("刷新群 %v 成员列表失败: %v", groupId, err)
- return Failed(100)
+ return Failed(100, "GET_MEMBERS_API_ERROR", err.Error())
}
group.Members = t
}
@@ -93,11 +93,11 @@ func (bot *CQBot) CQGetGroupMemberList(groupId int64, noCache bool) MSG {
func (bot *CQBot) CQGetGroupMemberInfo(groupId, userId int64) MSG {
group := bot.Client.FindGroup(groupId)
if group == nil {
- return Failed(100)
+ return Failed(100, "GROUP_NOT_FOUND", "群聊不存在")
}
member := group.FindMember(userId)
if member == nil {
- return Failed(102)
+ return Failed(100, "MEMBER_NOT_FOUND", "群员不存在")
}
return OK(convertGroupMemberInfo(groupId, member))
}
@@ -106,7 +106,7 @@ func (bot *CQBot) CQGetGroupFileSystemInfo(groupId int64) MSG {
fs, err := bot.Client.GetGroupFileSystem(groupId)
if err != nil {
log.Errorf("获取群 %v 文件系统信息失败: %v", groupId, err)
- return Failed(100)
+ return Failed(100, "FILE_SYSTEM_API_ERROR", err.Error())
}
return OK(fs)
}
@@ -115,12 +115,12 @@ func (bot *CQBot) CQGetGroupRootFiles(groupId int64) MSG {
fs, err := bot.Client.GetGroupFileSystem(groupId)
if err != nil {
log.Errorf("获取群 %v 文件系统信息失败: %v", groupId, err)
- return Failed(100)
+ return Failed(100, "FILE_SYSTEM_API_ERROR", err.Error())
}
files, folders, err := fs.Root()
if err != nil {
log.Errorf("获取群 %v 根目录文件失败: %v", groupId, err)
- return Failed(100)
+ return Failed(100, "FILE_SYSTEM_API_ERROR", err.Error())
}
return OK(MSG{
"files": files,
@@ -132,12 +132,12 @@ func (bot *CQBot) CQGetGroupFilesByFolderId(groupId int64, folderId string) MSG
fs, err := bot.Client.GetGroupFileSystem(groupId)
if err != nil {
log.Errorf("获取群 %v 文件系统信息失败: %v", groupId, err)
- return Failed(100)
+ return Failed(100, "FILE_SYSTEM_API_ERROR", err.Error())
}
files, folders, err := fs.GetFilesByFolder(folderId)
if err != nil {
log.Errorf("获取群 %v 根目录 %v 子文件失败: %v", groupId, folderId, err)
- return Failed(100)
+ return Failed(100, "FILE_SYSTEM_API_ERROR", err.Error())
}
return OK(MSG{
"files": files,
@@ -148,7 +148,7 @@ func (bot *CQBot) CQGetGroupFilesByFolderId(groupId int64, folderId string) MSG
func (bot *CQBot) CQGetGroupFileUrl(groupId int64, fileId string, busId int32) MSG {
url := bot.Client.GetGroupFileUrl(groupId, fileId, busId)
if url == "" {
- return Failed(100)
+ return Failed(100, "FILE_SYSTEM_API_ERROR")
}
return OK(MSG{
"url": url,
@@ -158,7 +158,7 @@ func (bot *CQBot) CQGetGroupFileUrl(groupId int64, fileId string, busId int32) M
func (bot *CQBot) CQGetWordSlices(content string) MSG {
slices, err := bot.Client.GetWordSegmentation(content)
if err != nil {
- return Failed(100)
+ return Failed(100, "WORD_SEGMENTATION_API_ERROR", err.Error())
}
for i := 0; i < len(slices); i++ {
slices[i] = strings.ReplaceAll(slices[i], "\u0000", "")
@@ -188,7 +188,7 @@ func (bot *CQBot) CQSendGroupMessage(groupId int64, i interface{}, autoEscape bo
fixAt(elem)
mid := bot.SendGroupMessage(groupId, &message.SendingMessage{Elements: elem})
if mid == -1 {
- return Failed(100)
+ return Failed(100, "SEND_MSG_API_ERROR", "请参考输出")
}
log.Infof("发送群 %v(%v) 的消息: %v (%v)", groupId, groupId, limitedString(m.String()), mid)
return OK(MSG{"message_id": mid})
@@ -204,7 +204,7 @@ func (bot *CQBot) CQSendGroupMessage(groupId int64, i interface{}, autoEscape bo
}
if str == "" {
log.Warnf("群消息发送失败: 信息为空. MSG: %v", i)
- return Failed(100)
+ return Failed(100, "EMPTY_MSG_ERROR", "消息为空")
}
var elem []message.IMessageElement
if autoEscape {
@@ -215,7 +215,7 @@ func (bot *CQBot) CQSendGroupMessage(groupId int64, i interface{}, autoEscape bo
fixAt(elem)
mid := bot.SendGroupMessage(groupId, &message.SendingMessage{Elements: elem})
if mid == -1 {
- return Failed(100)
+ return Failed(100, "SEND_MSG_API_ERROR", "请参考输出")
}
log.Infof("发送群 %v(%v) 的消息: %v (%v)", groupId, groupId, limitedString(str), mid)
return OK(MSG{"message_id": mid})
@@ -312,7 +312,7 @@ func (bot *CQBot) CQSendPrivateMessage(userId int64, i interface{}, autoEscape b
elem := bot.ConvertObjectMessage(m, true)
mid := bot.SendPrivateMessage(userId, &message.SendingMessage{Elements: elem})
if mid == -1 {
- return Failed(100)
+ return Failed(100, "SEND_MSG_API_ERROR", "请参考输出")
}
log.Infof("发送好友 %v(%v) 的消息: %v (%v)", userId, userId, limitedString(m.String()), mid)
return OK(MSG{"message_id": mid})
@@ -327,7 +327,7 @@ func (bot *CQBot) CQSendPrivateMessage(userId int64, i interface{}, autoEscape b
str = s
}
if str == "" {
- return Failed(100)
+ return Failed(100, "EMPTY_MSG_ERROR", "消息为空")
}
var elem []message.IMessageElement
if autoEscape {
@@ -337,7 +337,7 @@ func (bot *CQBot) CQSendPrivateMessage(userId int64, i interface{}, autoEscape b
}
mid := bot.SendPrivateMessage(userId, &message.SendingMessage{Elements: elem})
if mid == -1 {
- return Failed(100)
+ return Failed(100, "SEND_MSG_API_ERROR", "请参考输出")
}
log.Infof("发送好友 %v(%v) 的消息: %v (%v)", userId, userId, limitedString(str), mid)
return OK(MSG{"message_id": mid})
@@ -351,7 +351,7 @@ func (bot *CQBot) CQSetGroupCard(groupId, userId int64, card string) MSG {
return OK(nil)
}
}
- return Failed(100)
+ return Failed(100, "GROUP_NOT_FOUND", "群聊不存在")
}
// https://cqhttp.cc/docs/4.15/#/API?id=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
@@ -362,7 +362,7 @@ func (bot *CQBot) CQSetGroupSpecialTitle(groupId, userId int64, title string) MS
return OK(nil)
}
}
- return Failed(100)
+ return Failed(100, "GROUP_NOT_FOUND", "群聊不存在")
}
func (bot *CQBot) CQSetGroupName(groupId int64, name string) MSG {
@@ -370,7 +370,7 @@ func (bot *CQBot) CQSetGroupName(groupId int64, name string) MSG {
g.UpdateName(name)
return OK(nil)
}
- return Failed(100)
+ return Failed(100, "GROUP_NOT_FOUND", "群聊不存在")
}
func (bot *CQBot) CQSetGroupMemo(groupId int64, msg string) MSG {
@@ -378,7 +378,7 @@ func (bot *CQBot) CQSetGroupMemo(groupId int64, msg string) MSG {
g.UpdateMemo(msg)
return OK(nil)
}
- return Failed(100)
+ return Failed(100, "GROUP_NOT_FOUND", "群聊不存在")
}
// https://cqhttp.cc/docs/4.15/#/API?id=set_group_kick-%E7%BE%A4%E7%BB%84%E8%B8%A2%E4%BA%BA
@@ -389,7 +389,7 @@ func (bot *CQBot) CQSetGroupKick(groupId, userId int64, msg string, block bool)
return OK(nil)
}
}
- return Failed(100)
+ return Failed(100, "GROUP_NOT_FOUND", "群聊不存在")
}
// https://cqhttp.cc/docs/4.15/#/API?id=set_group_ban-%E7%BE%A4%E7%BB%84%E5%8D%95%E4%BA%BA%E7%A6%81%E8%A8%80
@@ -400,7 +400,7 @@ func (bot *CQBot) CQSetGroupBan(groupId, userId int64, duration uint32) MSG {
return OK(nil)
}
}
- return Failed(100)
+ return Failed(100, "GROUP_NOT_FOUND", "群聊不存在")
}
// https://cqhttp.cc/docs/4.15/#/API?id=set_group_whole_ban-%E7%BE%A4%E7%BB%84%E5%85%A8%E5%91%98%E7%A6%81%E8%A8%80
@@ -409,7 +409,7 @@ func (bot *CQBot) CQSetGroupWholeBan(groupId int64, enable bool) MSG {
g.MuteAll(enable)
return OK(nil)
}
- return Failed(100)
+ return Failed(100, "GROUP_NOT_FOUND", "群聊不存在")
}
// https://cqhttp.cc/docs/4.15/#/API?id=set_group_leave-%E9%80%80%E5%87%BA%E7%BE%A4%E7%BB%84
@@ -418,14 +418,14 @@ func (bot *CQBot) CQSetGroupLeave(groupId int64) MSG {
g.Quit()
return OK(nil)
}
- return Failed(100)
+ return Failed(100, "GROUP_NOT_FOUND", "群聊不存在")
}
// https://cqhttp.cc/docs/4.15/#/API?id=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
func (bot *CQBot) CQProcessFriendRequest(flag string, approve bool) MSG {
req, ok := bot.friendReqCache.Load(flag)
if !ok {
- return Failed(100)
+ return Failed(100, "FLAG_NOT_FOUND", "FLAG不存在")
}
if approve {
req.(*client.NewFriendRequest).Accept()
@@ -440,14 +440,14 @@ func (bot *CQBot) CQProcessGroupRequest(flag, subType, reason string, approve bo
msgs, err := bot.Client.GetGroupSystemMessages()
if err != nil {
log.Errorf("获取群系统消息失败: %v", err)
- return Failed(100)
+ return Failed(100, "SYSTEM_MSG_API_ERROR", err.Error())
}
if subType == "add" {
for _, req := range msgs.JoinRequests {
if strconv.FormatInt(req.RequestId, 10) == flag {
if req.Checked {
log.Errorf("处理群系统消息失败: 无法操作已处理的消息.")
- return Failed(100)
+ return Failed(100, "FLAG_HAS_BEEN_CHECKED", "消息已被处理")
}
if approve {
req.Accept()
@@ -462,7 +462,7 @@ func (bot *CQBot) CQProcessGroupRequest(flag, subType, reason string, approve bo
if strconv.FormatInt(req.RequestId, 10) == flag {
if req.Checked {
log.Errorf("处理群系统消息失败: 无法操作已处理的消息.")
- return Failed(100)
+ return Failed(100, "FLAG_HAS_BEEN_CHECKED", "消息已被处理")
}
if approve {
req.Accept()
@@ -474,7 +474,7 @@ func (bot *CQBot) CQProcessGroupRequest(flag, subType, reason string, approve bo
}
}
log.Errorf("处理群系统消息失败: 消息 %v 不存在.", flag)
- return Failed(100)
+ return Failed(100, "FLAG_NOT_FOUND", "FLAG不存在")
}
// https://cqhttp.cc/docs/4.15/#/API?id=delete_msg-%E6%92%A4%E5%9B%9E%E6%B6%88%E6%81%AF
@@ -486,16 +486,16 @@ func (bot *CQBot) CQDeleteMessage(messageId int32) MSG {
if _, ok := msg["group"]; ok {
if err := bot.Client.RecallGroupMessage(msg["group"].(int64), msg["message-id"].(int32), msg["internal-id"].(int32)); err != nil {
log.Warnf("撤回 %v 失败: %v", messageId, err)
- return Failed(100)
+ return Failed(100, "RECALL_API_ERROR", err.Error())
}
} else {
if msg["sender"].(message.Sender).Uin != bot.Client.Uin {
log.Warnf("撤回 %v 失败: 好友会话无法撤回对方消息.")
- return Failed(100)
+ return Failed(100, "CANNOT_RECALL_FRIEND_MSG", "无法撤回对方消息")
}
if err := bot.Client.RecallPrivateMessage(msg["target"].(int64), int64(msg["time"].(int32)), msg["message-id"].(int32), msg["internal-id"].(int32)); err != nil {
log.Warnf("撤回 %v 失败: %v", messageId, err)
- return Failed(100)
+ return Failed(100, "RECALL_API_ERROR", err.Error())
}
}
return OK(nil)
@@ -505,17 +505,17 @@ func (bot *CQBot) CQDeleteMessage(messageId int32) MSG {
func (bot *CQBot) CQSetGroupAdmin(groupId, userId int64, enable bool) MSG {
group := bot.Client.FindGroup(groupId)
if group == nil || group.OwnerUin != bot.Client.Uin {
- return Failed(100)
+ return Failed(100, "PERMISSION_DENIED", "群不存在或权限不足")
}
mem := group.FindMember(userId)
if mem == nil {
- return Failed(100)
+ return Failed(100, "GROUP_MEMBER_NOT_FOUND", "群成员不存在")
}
mem.SetAdmin(enable)
t, err := bot.Client.GetGroupMembers(group)
if err != nil {
log.Warnf("刷新群 %v 成员列表失败: %v", groupId, err)
- return Failed(100)
+ return Failed(100, "GET_MEMBERS_API_ERROR", err.Error())
}
group.Members = t
return OK(nil)
@@ -524,7 +524,7 @@ func (bot *CQBot) CQSetGroupAdmin(groupId, userId int64, enable bool) MSG {
func (bot *CQBot) CQGetVipInfo(userId int64) MSG {
vip, err := bot.Client.GetVipInfo(userId)
if err != nil {
- return Failed(100)
+ return Failed(100, "VIP_API_ERROR", err.Error())
}
msg := MSG{
"user_id": vip.Uin,
@@ -597,7 +597,7 @@ func (bot *CQBot) CQGetGroupHonorInfo(groupId int64, t string) MSG {
func (bot *CQBot) CQGetStrangerInfo(userId int64) MSG {
info, err := bot.Client.GetSummaryInfo(userId)
if err != nil {
- return Failed(100)
+ return Failed(100, "SUMMARY_API_ERROR", err.Error())
}
return OK(MSG{
"user_id": info.Uin,
@@ -692,14 +692,15 @@ func (bot *CQBot) CQGetImage(file string) MSG {
}
msg["file"] = local
return OK(msg)
+ } else {
+ return Failed(100, "LOAD_FILE_ERROR", err.Error())
}
- return Failed(100)
}
func (bot *CQBot) CQGetForwardMessage(resId string) MSG {
m := bot.Client.GetForwardMessage(resId)
if m == nil {
- return Failed(100)
+ return Failed(100, "MSG_NOT_FOUND", "消息不存在")
}
r := make([]MSG, 0)
for _, n := range m.Nodes {
@@ -721,7 +722,7 @@ func (bot *CQBot) CQGetForwardMessage(resId string) MSG {
func (bot *CQBot) CQGetMessage(messageId int32) MSG {
msg := bot.GetMessage(messageId)
if msg == nil {
- return Failed(100)
+ return Failed(100, "MSG_NOT_FOUND", "消息不存在")
}
sender := msg["sender"].(message.Sender)
gid, isGroup := msg["group"]
@@ -749,7 +750,7 @@ func (bot *CQBot) CQGetGroupSystemMessages() MSG {
msg, err := bot.Client.GetGroupSystemMessages()
if err != nil {
log.Warnf("获取群系统消息失败: %v", err)
- return Failed(100)
+ return Failed(100, "SYSTEM_MSG_API_ERROR", err.Error())
}
return OK(msg)
}
@@ -766,12 +767,12 @@ func (bot *CQBot) CQOcrImage(imageId string) MSG {
img, err := bot.makeImageElem(map[string]string{"file": imageId}, true)
if err != nil {
log.Warnf("load image error: %v", err)
- return Failed(100)
+ return Failed(100, "LOAD_FILE_ERROR", err.Error())
}
rsp, err := bot.Client.ImageOcr(img)
if err != nil {
log.Warnf("ocr image error: %v", err)
- return Failed(100)
+ return Failed(100, "OCR_API_ERROR", err.Error())
}
return OK(rsp)
}
@@ -786,12 +787,12 @@ func (bot *CQBot) CQSetGroupPortrait(groupId int64, file, cache string) MSG {
img, err := global.FindFile(file, cache, global.IMAGE_PATH)
if err != nil {
log.Warnf("set group portrait error: %v", err)
- return Failed(100)
+ return Failed(100, "LOAD_FILE_ERROR", err.Error())
}
g.UpdateGroupHeadPortrait(img)
return OK(nil)
}
- return Failed(100)
+ return Failed(100, "GROUP_NOT_FOUND", "群聊不存在")
}
// 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
@@ -827,6 +828,8 @@ func (bot *CQBot) CQGetVersionInfo() MSG {
return 1
case client.AndroidWatch:
return 2
+ case client.MacOS:
+ return 3
default:
return -1
}
@@ -838,8 +841,16 @@ func OK(data interface{}) MSG {
return MSG{"data": data, "retcode": 0, "status": "ok"}
}
-func Failed(code int) MSG {
- return MSG{"data": nil, "retcode": code, "status": "failed"}
+func Failed(code int, msg ...string) MSG {
+ m := ""
+ w := ""
+ if len(msg) > 0 {
+ m = msg[0]
+ }
+ if len(msg) > 1 {
+ w = msg[1]
+ }
+ return MSG{"data": nil, "retcode": code, "msg": m, "wording": w, "status": "failed"}
}
func convertGroupMemberInfo(groupId int64, m *client.GroupMemberInfo) MSG {
From d76bcfb1f0d0980624d0104d770920dad4ab492d Mon Sep 17 00:00:00 2001
From: Mrs4s
Date: Wed, 2 Dec 2020 00:36:26 +0800
Subject: [PATCH 195/367] update MiraiGo.
---
go.mod | 2 +-
go.sum | 2 ++
2 files changed, 3 insertions(+), 1 deletion(-)
diff --git a/go.mod b/go.mod
index 9d27b4d..25705ee 100644
--- a/go.mod
+++ b/go.mod
@@ -3,7 +3,7 @@ module github.com/Mrs4s/go-cqhttp
go 1.15
require (
- github.com/Mrs4s/MiraiGo v0.0.0-20201129131629-7a3c8fd7f4e2
+ github.com/Mrs4s/MiraiGo v0.0.0-20201201163300-a56a314a61de
github.com/dustin/go-humanize v1.0.0
github.com/getlantern/go-update v0.0.0-20190510022740-79c495ab728c
github.com/getlantern/golog v0.0.0-20201105130739-9586b8bde3a9 // indirect
diff --git a/go.sum b/go.sum
index e207685..cfb1a06 100644
--- a/go.sum
+++ b/go.sum
@@ -4,6 +4,8 @@ github.com/Mrs4s/MiraiGo v0.0.0-20201129125807-bb4a8e659c2a h1:LX0voKO/ay8KuxaYT
github.com/Mrs4s/MiraiGo v0.0.0-20201129125807-bb4a8e659c2a/go.mod h1:J1zaJWyeX7hQIPpOobqb8opxTNPbguotudPPrHJMoDM=
github.com/Mrs4s/MiraiGo v0.0.0-20201129131629-7a3c8fd7f4e2 h1:8dV/HU6Og7cMEtXWOk100Gc64fM1VjwxzlvwBcjcjqA=
github.com/Mrs4s/MiraiGo v0.0.0-20201129131629-7a3c8fd7f4e2/go.mod h1:J1zaJWyeX7hQIPpOobqb8opxTNPbguotudPPrHJMoDM=
+github.com/Mrs4s/MiraiGo v0.0.0-20201201163300-a56a314a61de h1:yDPm0EywuZuxLq1dAmQMXonKYfp0jBDy3p2Ahqzl4gs=
+github.com/Mrs4s/MiraiGo v0.0.0-20201201163300-a56a314a61de/go.mod h1:J1zaJWyeX7hQIPpOobqb8opxTNPbguotudPPrHJMoDM=
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=
From 3468c38fbc0b03d0fbc4c6957a94806f76bcf332 Mon Sep 17 00:00:00 2001
From: Mrs4s
Date: Wed, 2 Dec 2020 15:05:20 +0800
Subject: [PATCH 196/367] clear code.
---
coolq/api.go | 2 +-
coolq/cqcode.go | 183 ++++++++++++++++++++++++++++++----------------
coolq/cqcode_c.go | 166 -----------------------------------------
3 files changed, 123 insertions(+), 228 deletions(-)
delete mode 100644 coolq/cqcode_c.go
diff --git a/coolq/api.go b/coolq/api.go
index dfb012a..a2d88a2 100644
--- a/coolq/api.go
+++ b/coolq/api.go
@@ -490,7 +490,7 @@ func (bot *CQBot) CQDeleteMessage(messageId int32) MSG {
}
} else {
if msg["sender"].(message.Sender).Uin != bot.Client.Uin {
- log.Warnf("撤回 %v 失败: 好友会话无法撤回对方消息.")
+ log.Warnf("撤回 %v 失败: 好友会话无法撤回对方消息.", messageId)
return Failed(100, "CANNOT_RECALL_FRIEND_MSG", "无法撤回对方消息")
}
if err := bot.Client.RecallPrivateMessage(msg["target"].(int64), int64(msg["time"].(int32)), msg["message-id"].(int32), msg["internal-id"].(int32)); err != nil {
diff --git a/coolq/cqcode.go b/coolq/cqcode.go
index eae888c..eec4a74 100644
--- a/coolq/cqcode.go
+++ b/coolq/cqcode.go
@@ -1,6 +1,7 @@
package coolq
import (
+ "bufio"
"bytes"
"crypto/md5"
"encoding/base64"
@@ -9,9 +10,9 @@ import (
"errors"
"fmt"
"io/ioutil"
+ "math"
"net/url"
"path"
- "regexp"
"runtime"
"strconv"
"strings"
@@ -23,9 +24,11 @@ import (
"github.com/tidwall/gjson"
)
+/*
var matchReg = regexp.MustCompile(`\[CQ:\w+?.*?]`)
var typeReg = regexp.MustCompile(`\[CQ:(\w+)`)
var paramReg = regexp.MustCompile(`,([\w\-.]+?)=([^,\]]+)`)
+*/
var IgnoreInvalidCQCode = false
@@ -315,70 +318,130 @@ func ToStringMessage(e []message.IMessageElement, code int64, raw ...bool) (r st
return
}
-func (bot *CQBot) ConvertStringMessage(m string, group bool) (r []message.IMessageElement) {
- c := newCQCodeConverter(m, bot, group)
- return c.convert()
- /*
- i := matchReg.FindAllStringSubmatchIndex(m, -1)
- si := 0
- for _, idx := range i {
- if idx[0] > si {
- text := m[si:idx[0]]
- r = append(r, message.NewText(CQCodeUnescapeText(text)))
+func (bot *CQBot) ConvertStringMessage(msg string, group bool) (r []message.IMessageElement) {
+ index := 0
+ stat := 0
+ rMsg := []rune(msg)
+ var tempText, cqCode []rune
+ hasNext := func() bool {
+ return index < len(rMsg)
+ }
+ next := func() rune {
+ r := rMsg[index]
+ index++
+ return r
+ }
+ move := func(steps int) {
+ index += steps
+ }
+ peekN := func(count int) string {
+ lastIdx := int(math.Min(float64(index+count), float64(len(rMsg))))
+ return string(rMsg[index:lastIdx])
+ }
+ isCQCodeBegin := func(r rune) bool {
+ return r == '[' && peekN(3) == "CQ:"
+ }
+ saveTempText := func() {
+ if len(tempText) != 0 {
+ r = append(r, message.NewText(CQCodeUnescapeValue(string(tempText))))
+ }
+ tempText = []rune{}
+ cqCode = []rune{}
+ }
+ saveCQCode := func() {
+ defer func() {
+ cqCode = []rune{}
+ tempText = []rune{}
+ }()
+ reader := strings.NewReader(string(cqCode))
+ buf := bufio.NewReader(reader)
+ t, _ := buf.ReadString(',')
+ t = t[0 : len(t)-1]
+ params := make(map[string]string)
+ for buf.Buffered() > 0 {
+ p, _ := buf.ReadString(',')
+ if strings.HasSuffix(p, ",") {
+ p = p[0 : len(p)-1]
}
- code := m[idx[0]:idx[1]]
- si = idx[1]
- t := typeReg.FindAllStringSubmatch(code, -1)[0][1]
- ps := paramReg.FindAllStringSubmatch(code, -1)
- d := make(map[string]string)
- for _, p := range ps {
- d[p[1]] = CQCodeUnescapeValue(p[2])
- }
- if t == "reply" {
- if len(r) > 0 {
- if _, ok := r[0].(*message.ReplyElement); ok {
- log.Warnf("警告: 一条信息只能包含一个 Reply 元素.")
- continue
- }
- }
- mid, err := strconv.Atoi(d["id"])
- if err == nil {
- org := bot.GetMessage(int32(mid))
- if org != nil {
- r = append([]message.IMessageElement{
- &message.ReplyElement{
- ReplySeq: org["message-id"].(int32),
- Sender: org["sender"].(message.Sender).Uin,
- Time: org["time"].(int32),
- Elements: bot.ConvertStringMessage(org["message"].(string), group),
- },
- }, r...)
- continue
- }
- }
- }
- elem, err := bot.ToElement(t, d, group)
- if err != nil {
- if !IgnoreInvalidCQCode {
- log.Warnf("转换CQ码 %v 到MiraiGo Element时出现错误: %v 将原样发送.", code, err)
- r = append(r, message.NewText(code))
- } else {
- log.Warnf("转换CQ码 %v 到MiraiGo Element时出现错误: %v 将忽略.", code, err)
- }
+ p = strings.TrimSpace(p)
+ if p == "" {
continue
}
- switch i := elem.(type) {
- case message.IMessageElement:
- r = append(r, i)
- case []message.IMessageElement:
- r = append(r, i...)
+ data := strings.SplitN(p, "=", 2)
+ if len(data) == 2 {
+ params[data[0]] = data[1]
+ } else {
+ params[p] = ""
}
}
- if si != len(m) {
- r = append(r, message.NewText(CQCodeUnescapeText(m[si:])))
+ if t == "reply" { // reply 特殊处理
+ if len(r) > 0 {
+ if _, ok := r[0].(*message.ReplyElement); ok {
+ log.Warnf("警告: 一条信息只能包含一个 Reply 元素.")
+ return
+ }
+ }
+ mid, err := strconv.Atoi(params["id"])
+ if err == nil {
+ org := bot.GetMessage(int32(mid))
+ if org != nil {
+ r = append([]message.IMessageElement{
+ &message.ReplyElement{
+ ReplySeq: org["message-id"].(int32),
+ Sender: org["sender"].(message.Sender).Uin,
+ Time: org["time"].(int32),
+ Elements: bot.ConvertStringMessage(org["message"].(string), group),
+ },
+ }, r...)
+ return
+ }
+ }
}
- return
- */
+ elem, err := bot.ToElement(t, params, group)
+ if err != nil {
+ org := "[" + string(cqCode) + "]"
+ if !IgnoreInvalidCQCode {
+ log.Warnf("转换CQ码 %v 时出现错误: %v 将原样发送.", org, err)
+ r = append(r, message.NewText(org))
+ } else {
+ log.Warnf("转换CQ码 %v 时出现错误: %v 将忽略.", org, err)
+ }
+ return
+ }
+ switch i := elem.(type) {
+ case message.IMessageElement:
+ r = append(r, i)
+ case []message.IMessageElement:
+ r = append(r, i...)
+ }
+ }
+ for hasNext() {
+ ch := next()
+ switch stat {
+ case 0:
+ if isCQCodeBegin(ch) {
+ saveTempText()
+ tempText = append(tempText, []rune("[CQ:")...)
+ move(3)
+ stat = 1
+ } else {
+ tempText = append(tempText, ch)
+ }
+ case 1:
+ if isCQCodeBegin(ch) {
+ move(-1)
+ stat = 0
+ } else if ch == ']' {
+ saveCQCode()
+ stat = 0
+ } else {
+ cqCode = append(cqCode, ch)
+ tempText = append(tempText, ch)
+ }
+ }
+ }
+ saveTempText()
+ return
}
func (bot *CQBot) ConvertObjectMessage(m gjson.Result, group bool) (r []message.IMessageElement) {
@@ -634,14 +697,12 @@ func (bot *CQBot) ToElement(t string, d map[string]string, group bool) (m interf
case "xml":
resId := d["resid"]
template := CQCodeEscapeValue(d["data"])
- //println(template)
i, _ := strconv.ParseInt(resId, 10, 64)
msg := message.NewRichXml(template, i)
return msg, nil
case "json":
resId := d["resid"]
i, _ := strconv.ParseInt(resId, 10, 64)
- log.Warnf("json msg=%s", d["data"])
if i == 0 {
//默认情况下走小程序通道
msg := message.NewLightApp(CQCodeUnescapeValue(d["data"]))
diff --git a/coolq/cqcode_c.go b/coolq/cqcode_c.go
deleted file mode 100644
index 9c89aaa..0000000
--- a/coolq/cqcode_c.go
+++ /dev/null
@@ -1,166 +0,0 @@
-package coolq
-
-import (
- "bufio"
- "github.com/Mrs4s/MiraiGo/message"
- log "github.com/sirupsen/logrus"
- "math"
- "strconv"
- "strings"
-)
-
-type CQCodeConverter struct {
- message []rune
- bot *CQBot
- group bool
-
- index int
- stat state
- elements []message.IMessageElement
- tempText []rune
- cqCode []rune
-}
-
-type state uint8
-
-const (
- S0 state = iota
- S1
-)
-
-func newCQCodeConverter(message string, bot *CQBot, group bool) *CQCodeConverter {
- return &CQCodeConverter{message: []rune(message), bot: bot, group: group, stat: S0}
-}
-
-func (c *CQCodeConverter) hasNext() bool {
- return c.index < len(c.message)
-}
-
-func (c *CQCodeConverter) next() rune {
- r := c.message[c.index]
- c.index++
- return r
-}
-
-func (c *CQCodeConverter) move(steps int) {
- c.index += steps
-}
-
-func (c *CQCodeConverter) peek(idx int) rune {
- return c.message[idx]
-}
-
-func (c *CQCodeConverter) peekN(count int) string {
- lastIdx := int(math.Min(float64(c.index+count), float64(len(c.message)-1)))
- return string(c.message[c.index:lastIdx])
-}
-
-func (c *CQCodeConverter) isCQCodeBegin(r rune) bool {
- return r == '[' && c.peekN(3) == "CQ:"
-}
-
-func (c *CQCodeConverter) saveTempText() {
- if len(c.tempText) != 0 {
- c.elements = append(c.elements, message.NewText(CQCodeUnescapeValue(string(c.tempText))))
- }
- c.tempText = []rune{}
- c.cqCode = []rune{}
-}
-
-func (c *CQCodeConverter) saveCQCode() {
- defer func() {
- c.cqCode = []rune{}
- c.tempText = []rune{}
- }()
- reader := strings.NewReader(string(c.cqCode))
- buf := bufio.NewReader(reader)
- t, _ := buf.ReadString(',')
- t = t[0 : len(t)-1]
- params := make(map[string]string)
- for buf.Buffered() > 0 {
- p, _ := buf.ReadString(',')
- if strings.HasSuffix(p, ",") {
- p = p[0 : len(p)-1]
- }
- p = strings.TrimSpace(p)
- if p == "" {
- continue
- }
- data := strings.SplitN(p, "=", 2)
- if len(data) == 2 {
- params[data[0]] = data[1]
- } else {
- params[p] = ""
- }
- }
- if t == "reply" { // reply 特殊处理
- if len(c.elements) > 0 {
- if _, ok := c.elements[0].(*message.ReplyElement); ok {
- log.Warnf("警告: 一条信息只能包含一个 Reply 元素.")
- return
- }
- }
- mid, err := strconv.Atoi(params["id"])
- if err == nil {
- org := c.bot.GetMessage(int32(mid))
- if org != nil {
- c.elements = append([]message.IMessageElement{
- &message.ReplyElement{
- ReplySeq: org["message-id"].(int32),
- Sender: org["sender"].(message.Sender).Uin,
- Time: org["time"].(int32),
- Elements: c.bot.ConvertStringMessage(org["message"].(string), c.group),
- },
- }, c.elements...)
- return
- }
- }
- }
- elem, err := c.bot.ToElement(t, params, c.group)
- if err != nil {
- org := "[" + string(c.cqCode) + "]"
- if !IgnoreInvalidCQCode {
- log.Warnf("转换CQ码 %v 时出现错误: %v 将原样发送.", org, err)
- c.elements = append(c.elements, message.NewText(org))
- } else {
- log.Warnf("转换CQ码 %v 时出现错误: %v 将忽略.", org, err)
- }
- return
- }
- switch i := elem.(type) {
- case message.IMessageElement:
- c.elements = append(c.elements, i)
- case []message.IMessageElement:
- c.elements = append(c.elements, i...)
- }
-}
-
-func (c *CQCodeConverter) convert() []message.IMessageElement {
- for c.hasNext() {
- ch := c.next()
- switch c.stat {
- case S0:
- if c.isCQCodeBegin(ch) {
- c.saveTempText()
- c.tempText = append(c.tempText, []rune("[CQ:")...)
- c.move(3)
- c.stat = S1
- } else {
- c.tempText = append(c.tempText, ch)
- }
- case S1:
- if c.isCQCodeBegin(ch) {
- c.move(-1)
- c.stat = S0
- } else if ch == ']' {
- c.saveCQCode()
- c.stat = S0
- } else {
- c.cqCode = append(c.cqCode, ch)
- c.tempText = append(c.tempText, ch)
- }
- }
- }
- c.saveTempText()
- return c.elements
-}
From 6973a10b4bc4ec51792946a1872bc38f557c54bb Mon Sep 17 00:00:00 2001
From: Mrs4s
Date: Wed, 2 Dec 2020 19:29:31 +0800
Subject: [PATCH 197/367] fix #455.
---
server/apiAdmin.go | 4 ++--
1 file changed, 2 insertions(+), 2 deletions(-)
diff --git a/server/apiAdmin.go b/server/apiAdmin.go
index ddef632..971d515 100644
--- a/server/apiAdmin.go
+++ b/server/apiAdmin.go
@@ -132,7 +132,7 @@ func (s *webServer) Dologin() {
_ = ioutil.WriteFile("captcha.jpg", rsp.CaptchaImage, 0644)
img, _, _ := image.Decode(bytes.NewReader(rsp.CaptchaImage))
fmt.Println(asciiart.New("image", img).Art)
- if conf.WebUi.WebInput {
+ if conf.WebUi != nil && conf.WebUi.WebInput {
log.Warnf("请输入验证码 (captcha.jpg): (http://%s:%d/admin/do_web_write 输入)", conf.WebUi.Host, conf.WebUi.WebUiPort)
text = <-WebInput
} else {
@@ -178,7 +178,7 @@ func (s *webServer) Dologin() {
return
case client.UnsafeDeviceError:
log.Warnf("账号已开启设备锁,请前往 -> %v <- 验证并重启Bot.", rsp.VerifyUrl)
- if conf.WebUi.WebInput {
+ if conf.WebUi != nil && conf.WebUi.WebInput {
log.Infof(" (http://%s:%d/admin/do_web_write 确认后继续)....", conf.WebUi.Host, conf.WebUi.WebUiPort)
text = <-WebInput
} else {
From c5a5f71664ced215cfd6fee963d9e39232825bbe Mon Sep 17 00:00:00 2001
From: Mrs4s
Date: Wed, 2 Dec 2020 20:34:15 +0800
Subject: [PATCH 198/367] update MiraiGo.
---
coolq/api.go | 2 +-
go.mod | 2 +-
go.sum | 8 ++------
3 files changed, 4 insertions(+), 8 deletions(-)
diff --git a/coolq/api.go b/coolq/api.go
index a2d88a2..d3be897 100644
--- a/coolq/api.go
+++ b/coolq/api.go
@@ -481,7 +481,7 @@ func (bot *CQBot) CQProcessGroupRequest(flag, subType, reason string, approve bo
func (bot *CQBot) CQDeleteMessage(messageId int32) MSG {
msg := bot.GetMessage(messageId)
if msg == nil {
- return Failed(100)
+ return Failed(100, "MESSAGE_NOT_FOUND", "消息不存在")
}
if _, ok := msg["group"]; ok {
if err := bot.Client.RecallGroupMessage(msg["group"].(int64), msg["message-id"].(int32), msg["internal-id"].(int32)); err != nil {
diff --git a/go.mod b/go.mod
index 25705ee..0b1d468 100644
--- a/go.mod
+++ b/go.mod
@@ -3,7 +3,7 @@ module github.com/Mrs4s/go-cqhttp
go 1.15
require (
- github.com/Mrs4s/MiraiGo v0.0.0-20201201163300-a56a314a61de
+ github.com/Mrs4s/MiraiGo v0.0.0-20201202121633-9fca2495b1e5
github.com/dustin/go-humanize v1.0.0
github.com/getlantern/go-update v0.0.0-20190510022740-79c495ab728c
github.com/getlantern/golog v0.0.0-20201105130739-9586b8bde3a9 // indirect
diff --git a/go.sum b/go.sum
index cfb1a06..4a23740 100644
--- a/go.sum
+++ b/go.sum
@@ -1,11 +1,7 @@
cloud.google.com/go v0.26.0/go.mod h1:aQUYkXzVsufM+DwF1aE+0xfcU+56JwCaLick0ClmMTw=
github.com/BurntSushi/toml v0.3.1/go.mod h1:xHWCNGjB5oqiDr8zfno3MHue2Ht5sIBksp03qcyfWMU=
-github.com/Mrs4s/MiraiGo v0.0.0-20201129125807-bb4a8e659c2a h1:LX0voKO/ay8KuxaYT4PLhBQFlBnW35o6M3F4vhl8bak=
-github.com/Mrs4s/MiraiGo v0.0.0-20201129125807-bb4a8e659c2a/go.mod h1:J1zaJWyeX7hQIPpOobqb8opxTNPbguotudPPrHJMoDM=
-github.com/Mrs4s/MiraiGo v0.0.0-20201129131629-7a3c8fd7f4e2 h1:8dV/HU6Og7cMEtXWOk100Gc64fM1VjwxzlvwBcjcjqA=
-github.com/Mrs4s/MiraiGo v0.0.0-20201129131629-7a3c8fd7f4e2/go.mod h1:J1zaJWyeX7hQIPpOobqb8opxTNPbguotudPPrHJMoDM=
-github.com/Mrs4s/MiraiGo v0.0.0-20201201163300-a56a314a61de h1:yDPm0EywuZuxLq1dAmQMXonKYfp0jBDy3p2Ahqzl4gs=
-github.com/Mrs4s/MiraiGo v0.0.0-20201201163300-a56a314a61de/go.mod h1:J1zaJWyeX7hQIPpOobqb8opxTNPbguotudPPrHJMoDM=
+github.com/Mrs4s/MiraiGo v0.0.0-20201202121633-9fca2495b1e5 h1:qVGQjUz+W+ZArHWjDO6MepKZKmxdINaDMYhufflaWVk=
+github.com/Mrs4s/MiraiGo v0.0.0-20201202121633-9fca2495b1e5/go.mod h1:J1zaJWyeX7hQIPpOobqb8opxTNPbguotudPPrHJMoDM=
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=
From b23f68e7463ab7099af88e9a95c183f1fe5ed2e2 Mon Sep 17 00:00:00 2001
From: Mrs4s
Date: Wed, 2 Dec 2020 22:13:02 +0800
Subject: [PATCH 199/367] try to fix #422.
---
server/apiAdmin.go | 7 +++++++
1 file changed, 7 insertions(+)
diff --git a/server/apiAdmin.go b/server/apiAdmin.go
index 971d515..704f738 100644
--- a/server/apiAdmin.go
+++ b/server/apiAdmin.go
@@ -112,6 +112,7 @@ func (s *webServer) Dologin() {
cli := s.Cli
cli.AllowSlider = true
rsp, err := cli.Login()
+ count := 0
for {
global.Check(err)
var text string
@@ -193,6 +194,12 @@ func (s *webServer) Dologin() {
if strings.Contains(msg, "版本") {
msg = "密码错误或账号被冻结"
}
+ if strings.Contains(msg, "上网环境") && count < 5 {
+ cli.Disconnect()
+ rsp, err = cli.Login()
+ count++
+ continue
+ }
log.Warnf("登录失败: %v", msg)
log.Infof("按 Enter 继续....")
readLine()
From dfeadef1a2c90059622f6bcdb7ee678d279b5be7 Mon Sep 17 00:00:00 2001
From: Mrs4s
Date: Wed, 2 Dec 2020 22:13:52 +0800
Subject: [PATCH 200/367] update MiraiGo.
---
go.mod | 2 +-
go.sum | 4 ++--
2 files changed, 3 insertions(+), 3 deletions(-)
diff --git a/go.mod b/go.mod
index 0b1d468..5c4c8dd 100644
--- a/go.mod
+++ b/go.mod
@@ -3,7 +3,7 @@ module github.com/Mrs4s/go-cqhttp
go 1.15
require (
- github.com/Mrs4s/MiraiGo v0.0.0-20201202121633-9fca2495b1e5
+ github.com/Mrs4s/MiraiGo v0.0.0-20201202140458-0eb4eb738d31
github.com/dustin/go-humanize v1.0.0
github.com/getlantern/go-update v0.0.0-20190510022740-79c495ab728c
github.com/getlantern/golog v0.0.0-20201105130739-9586b8bde3a9 // indirect
diff --git a/go.sum b/go.sum
index 4a23740..2efb000 100644
--- a/go.sum
+++ b/go.sum
@@ -1,7 +1,7 @@
cloud.google.com/go v0.26.0/go.mod h1:aQUYkXzVsufM+DwF1aE+0xfcU+56JwCaLick0ClmMTw=
github.com/BurntSushi/toml v0.3.1/go.mod h1:xHWCNGjB5oqiDr8zfno3MHue2Ht5sIBksp03qcyfWMU=
-github.com/Mrs4s/MiraiGo v0.0.0-20201202121633-9fca2495b1e5 h1:qVGQjUz+W+ZArHWjDO6MepKZKmxdINaDMYhufflaWVk=
-github.com/Mrs4s/MiraiGo v0.0.0-20201202121633-9fca2495b1e5/go.mod h1:J1zaJWyeX7hQIPpOobqb8opxTNPbguotudPPrHJMoDM=
+github.com/Mrs4s/MiraiGo v0.0.0-20201202140458-0eb4eb738d31 h1:jClElKWovoOzDYmVd16UQc8638d0FvyKCtVj7qF+ej4=
+github.com/Mrs4s/MiraiGo v0.0.0-20201202140458-0eb4eb738d31/go.mod h1:J1zaJWyeX7hQIPpOobqb8opxTNPbguotudPPrHJMoDM=
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=
From d63d10b69e42fd09b83d9c91d797d2a570529d4f Mon Sep 17 00:00:00 2001
From: Mrs4s
Date: Thu, 3 Dec 2020 00:59:35 +0800
Subject: [PATCH 201/367] update MiraiGo.
---
go.mod | 2 +-
go.sum | 2 ++
2 files changed, 3 insertions(+), 1 deletion(-)
diff --git a/go.mod b/go.mod
index 5c4c8dd..c48ef93 100644
--- a/go.mod
+++ b/go.mod
@@ -3,7 +3,7 @@ module github.com/Mrs4s/go-cqhttp
go 1.15
require (
- github.com/Mrs4s/MiraiGo v0.0.0-20201202140458-0eb4eb738d31
+ github.com/Mrs4s/MiraiGo v0.0.0-20201202165542-3344bb0c87fa
github.com/dustin/go-humanize v1.0.0
github.com/getlantern/go-update v0.0.0-20190510022740-79c495ab728c
github.com/getlantern/golog v0.0.0-20201105130739-9586b8bde3a9 // indirect
diff --git a/go.sum b/go.sum
index 2efb000..2bd9407 100644
--- a/go.sum
+++ b/go.sum
@@ -2,6 +2,8 @@ cloud.google.com/go v0.26.0/go.mod h1:aQUYkXzVsufM+DwF1aE+0xfcU+56JwCaLick0ClmMT
github.com/BurntSushi/toml v0.3.1/go.mod h1:xHWCNGjB5oqiDr8zfno3MHue2Ht5sIBksp03qcyfWMU=
github.com/Mrs4s/MiraiGo v0.0.0-20201202140458-0eb4eb738d31 h1:jClElKWovoOzDYmVd16UQc8638d0FvyKCtVj7qF+ej4=
github.com/Mrs4s/MiraiGo v0.0.0-20201202140458-0eb4eb738d31/go.mod h1:J1zaJWyeX7hQIPpOobqb8opxTNPbguotudPPrHJMoDM=
+github.com/Mrs4s/MiraiGo v0.0.0-20201202165542-3344bb0c87fa h1:2+TW0hS+hbdmfD5wXir629LUZgZVZwax4iLpdvb8j+s=
+github.com/Mrs4s/MiraiGo v0.0.0-20201202165542-3344bb0c87fa/go.mod h1:J1zaJWyeX7hQIPpOobqb8opxTNPbguotudPPrHJMoDM=
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=
From 8a75a6e95abb567454ade149068d4dfa0e8fc7a3 Mon Sep 17 00:00:00 2001
From: Mrs4s
Date: Thu, 3 Dec 2020 10:58:29 +0800
Subject: [PATCH 202/367] update MiraiGo.
---
go.mod | 2 +-
go.sum | 6 ++----
2 files changed, 3 insertions(+), 5 deletions(-)
diff --git a/go.mod b/go.mod
index c48ef93..1b90e3a 100644
--- a/go.mod
+++ b/go.mod
@@ -3,7 +3,7 @@ module github.com/Mrs4s/go-cqhttp
go 1.15
require (
- github.com/Mrs4s/MiraiGo v0.0.0-20201202165542-3344bb0c87fa
+ github.com/Mrs4s/MiraiGo v0.0.0-20201203010528-a1ecf84cac2b
github.com/dustin/go-humanize v1.0.0
github.com/getlantern/go-update v0.0.0-20190510022740-79c495ab728c
github.com/getlantern/golog v0.0.0-20201105130739-9586b8bde3a9 // indirect
diff --git a/go.sum b/go.sum
index 2bd9407..7365382 100644
--- a/go.sum
+++ b/go.sum
@@ -1,9 +1,7 @@
cloud.google.com/go v0.26.0/go.mod h1:aQUYkXzVsufM+DwF1aE+0xfcU+56JwCaLick0ClmMTw=
github.com/BurntSushi/toml v0.3.1/go.mod h1:xHWCNGjB5oqiDr8zfno3MHue2Ht5sIBksp03qcyfWMU=
-github.com/Mrs4s/MiraiGo v0.0.0-20201202140458-0eb4eb738d31 h1:jClElKWovoOzDYmVd16UQc8638d0FvyKCtVj7qF+ej4=
-github.com/Mrs4s/MiraiGo v0.0.0-20201202140458-0eb4eb738d31/go.mod h1:J1zaJWyeX7hQIPpOobqb8opxTNPbguotudPPrHJMoDM=
-github.com/Mrs4s/MiraiGo v0.0.0-20201202165542-3344bb0c87fa h1:2+TW0hS+hbdmfD5wXir629LUZgZVZwax4iLpdvb8j+s=
-github.com/Mrs4s/MiraiGo v0.0.0-20201202165542-3344bb0c87fa/go.mod h1:J1zaJWyeX7hQIPpOobqb8opxTNPbguotudPPrHJMoDM=
+github.com/Mrs4s/MiraiGo v0.0.0-20201203010528-a1ecf84cac2b h1:CUzjI0hmu4sbjm0E13hNVXubNr8fbRB99mAwuJ3l1JE=
+github.com/Mrs4s/MiraiGo v0.0.0-20201203010528-a1ecf84cac2b/go.mod h1:J1zaJWyeX7hQIPpOobqb8opxTNPbguotudPPrHJMoDM=
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=
From a4ec4077e28763f83f82f145c17a3ead0e8b9c8f Mon Sep 17 00:00:00 2001
From: Mrs4s
Date: Thu, 3 Dec 2020 11:02:19 +0800
Subject: [PATCH 203/367] fix #458.
---
coolq/cqcode.go | 2 +-
1 file changed, 1 insertion(+), 1 deletion(-)
diff --git a/coolq/cqcode.go b/coolq/cqcode.go
index eec4a74..53ca64d 100644
--- a/coolq/cqcode.go
+++ b/coolq/cqcode.go
@@ -369,7 +369,7 @@ func (bot *CQBot) ConvertStringMessage(msg string, group bool) (r []message.IMes
}
data := strings.SplitN(p, "=", 2)
if len(data) == 2 {
- params[data[0]] = data[1]
+ params[data[0]] = CQCodeUnescapeValue(data[1])
} else {
params[p] = ""
}
From 1fbaa6107d4b0d00adc68572547bf82db90d738a Mon Sep 17 00:00:00 2001
From: Mrs4s
Date: Thu, 3 Dec 2020 11:05:36 +0800
Subject: [PATCH 204/367] feature remove test for ocr_image api.
---
server/http.go | 1 +
server/websocket.go | 3 +++
2 files changed, 4 insertions(+)
diff --git a/server/http.go b/server/http.go
index 9b9ac0e..183069b 100644
--- a/server/http.go
+++ b/server/http.go
@@ -518,6 +518,7 @@ var httpApi = map[string]func(s *httpServer, c *gin.Context){
"set_group_portrait": SetGroupPortrait,
".handle_quick_operation": HandleQuickOperation,
".ocr_image": OcrImage,
+ "ocr_image": OcrImage,
".get_word_slices": GetWordSlices,
}
diff --git a/server/websocket.go b/server/websocket.go
index 6e41ffa..a430d04 100644
--- a/server/websocket.go
+++ b/server/websocket.go
@@ -532,6 +532,9 @@ var wsApi = map[string]func(*coolq.CQBot, gjson.Result) coolq.MSG{
".ocr_image": func(bot *coolq.CQBot, p gjson.Result) coolq.MSG {
return bot.CQOcrImage(p.Get("image").Str)
},
+ "ocr_image": func(bot *coolq.CQBot, p gjson.Result) coolq.MSG {
+ return bot.CQOcrImage(p.Get("image").Str)
+ },
".get_word_slices": func(bot *coolq.CQBot, p gjson.Result) coolq.MSG {
return bot.CQGetWordSlices(p.Get("content").Str)
},
From 93d0d87fbb58adc3183622b096559f607e12ab23 Mon Sep 17 00:00:00 2001
From: Mrs4s
Date: Thu, 3 Dec 2020 15:02:36 +0800
Subject: [PATCH 205/367] optimization cqcode converter.
---
coolq/cqcode.go | 17 +++++++----------
1 file changed, 7 insertions(+), 10 deletions(-)
diff --git a/coolq/cqcode.go b/coolq/cqcode.go
index 53ca64d..2426922 100644
--- a/coolq/cqcode.go
+++ b/coolq/cqcode.go
@@ -1,7 +1,6 @@
package coolq
import (
- "bufio"
"bytes"
"crypto/md5"
"encoding/base64"
@@ -353,16 +352,14 @@ func (bot *CQBot) ConvertStringMessage(msg string, group bool) (r []message.IMes
cqCode = []rune{}
tempText = []rune{}
}()
- reader := strings.NewReader(string(cqCode))
- buf := bufio.NewReader(reader)
- t, _ := buf.ReadString(',')
- t = t[0 : len(t)-1]
+ s := strings.SplitN(string(cqCode), ",", -1)
+ if len(s) == 0 {
+ return
+ }
+ t := s[0]
params := make(map[string]string)
- for buf.Buffered() > 0 {
- p, _ := buf.ReadString(',')
- if strings.HasSuffix(p, ",") {
- p = p[0 : len(p)-1]
- }
+ for i := 1; i < len(s); i++ {
+ p := s[i]
p = strings.TrimSpace(p)
if p == "" {
continue
From 947d165ac53863173990a864d902d8bce925ea3c Mon Sep 17 00:00:00 2001
From: wdvxdr
Date: Thu, 3 Dec 2020 20:52:13 +0800
Subject: [PATCH 206/367] :zap: improve event filter
---
coolq/bot.go | 9 ++---
global/filter.go | 87 ++++++++++++++++++++++++++----------------------
2 files changed, 51 insertions(+), 45 deletions(-)
diff --git a/coolq/bot.go b/coolq/bot.go
index 45d6861..fd196b0 100644
--- a/coolq/bot.go
+++ b/coolq/bot.go
@@ -392,22 +392,19 @@ func (bot *CQBot) Release() {
}
func (bot *CQBot) dispatchEventMessage(m MSG) {
- payload := gjson.Parse(m.ToJson())
- filter := global.EventFilter
- if filter != nil && (*filter).Eval(payload) == false {
+ if global.EventFilter != nil && global.EventFilter.Eval(gjson.Parse(m.ToJson())) == false {
log.Debug("Event filtered!")
return
}
for _, f := range bot.events {
- fn := f
- go func() {
+ go func(fn func(MSG)) {
start := time.Now()
fn(m)
end := time.Now()
if end.Sub(start) > time.Second*5 {
log.Debugf("警告: 事件处理耗时超过 5 秒 (%v), 请检查应用是否有堵塞.", end.Sub(start))
}
- }()
+ }(f)
}
}
diff --git a/global/filter.go b/global/filter.go
index f47f62e..344ab13 100644
--- a/global/filter.go
+++ b/global/filter.go
@@ -13,13 +13,13 @@ type Filter interface {
Eval(payload gjson.Result) bool
}
-type OperationNode struct {
+type operationNode struct {
key string
filter Filter
}
type NotOperator struct {
- operand_ Filter
+ operand Filter
}
func notOperatorConstruct(argument gjson.Result) *NotOperator {
@@ -27,16 +27,16 @@ func notOperatorConstruct(argument gjson.Result) *NotOperator {
panic("the argument of 'not' operator must be an object")
}
op := new(NotOperator)
- op.operand_ = Generate("and", argument)
+ op.operand = Generate("and", argument)
return op
}
-func (notOperator NotOperator) Eval(payload gjson.Result) bool {
- return !(notOperator.operand_).Eval(payload)
+func (op *NotOperator) Eval(payload gjson.Result) bool {
+ return !op.operand.Eval(payload)
}
type AndOperator struct {
- operands []OperationNode
+ operands []operationNode
}
func andOperatorConstruct(argument gjson.Result) *AndOperator {
@@ -51,19 +51,19 @@ func andOperatorConstruct(argument gjson.Result) *AndOperator {
// "bar": "baz"
// }
opKey := key.Str[1:]
- op.operands = append(op.operands, OperationNode{"", Generate(opKey, value)})
+ op.operands = append(op.operands, operationNode{"", Generate(opKey, value)})
} else if value.IsObject() {
// is an normal key with an object as the value
// "foo": {
// ".bar": "baz"
// }
opKey := key.String()
- op.operands = append(op.operands, OperationNode{opKey, Generate("and", value)})
+ op.operands = append(op.operands, operationNode{opKey, Generate("and", value)})
} else {
// is an normal key with a non-object as the value
// "foo": "bar"
opKey := key.String()
- op.operands = append(op.operands, OperationNode{opKey, Generate("eq", value)})
+ op.operands = append(op.operands, operationNode{opKey, Generate("eq", value)})
}
return true
})
@@ -106,11 +106,10 @@ func orOperatorConstruct(argument gjson.Result) *OrOperator {
return op
}
-func (orOperator OrOperator) Eval(payload gjson.Result) bool {
+func (op *OrOperator) Eval(payload gjson.Result) bool {
res := false
- for _, operand := range orOperator.operands {
+ for _, operand := range op.operands {
res = res || operand.Eval(payload)
-
if res == true {
break
}
@@ -119,35 +118,36 @@ func (orOperator OrOperator) Eval(payload gjson.Result) bool {
}
type EqualOperator struct {
- value gjson.Result
+ operand string
}
func equalOperatorConstruct(argument gjson.Result) *EqualOperator {
op := new(EqualOperator)
- op.value = argument
+ op.operand = argument.String()
return op
}
-func (equalOperator EqualOperator) Eval(payload gjson.Result) bool {
- return payload.String() == equalOperator.value.String()
+func (op *EqualOperator) Eval(payload gjson.Result) bool {
+ return payload.String() == op.operand
}
type NotEqualOperator struct {
- value gjson.Result
+ operand string
}
func notEqualOperatorConstruct(argument gjson.Result) *NotEqualOperator {
op := new(NotEqualOperator)
- op.value = argument
+ op.operand = argument.String()
return op
}
-func (notEqualOperator NotEqualOperator) Eval(payload gjson.Result) bool {
- return !(payload.String() == notEqualOperator.value.String())
+func (op *NotEqualOperator) Eval(payload gjson.Result) bool {
+ return !(payload.String() == op.operand)
}
type InOperator struct {
- operand gjson.Result
+ operandString string
+ operandArray []string
}
func inOperatorConstruct(argument gjson.Result) *InOperator {
@@ -155,20 +155,29 @@ func inOperatorConstruct(argument gjson.Result) *InOperator {
panic("the argument of 'in' operator must be an array or a string")
}
op := new(InOperator)
- op.operand = argument
+ if argument.IsArray() {
+ op.operandArray = []string{}
+ argument.ForEach(func(_, value gjson.Result) bool {
+ op.operandArray = append(op.operandArray, value.String())
+ return true
+ })
+ } else {
+ op.operandString = argument.String()
+ }
return op
}
-func (inOperator InOperator) Eval(payload gjson.Result) bool {
- if inOperator.operand.IsArray() {
- res := false
- inOperator.operand.ForEach(func(key, value gjson.Result) bool {
- res = res || value.String() == payload.String()
- return true
- })
- return res
+func (op *InOperator) Eval(payload gjson.Result) bool {
+ payloadStr := payload.String()
+ if op.operandArray != nil {
+ for _, value := range op.operandArray {
+ if value == payloadStr {
+ return true
+ }
+ }
+ return false
}
- return strings.Contains(inOperator.operand.String(), payload.String())
+ return strings.Contains(op.operandString, payloadStr)
}
type ContainsOperator struct {
@@ -184,15 +193,15 @@ func containsOperatorConstruct(argument gjson.Result) *ContainsOperator {
return op
}
-func (containsOperator ContainsOperator) Eval(payload gjson.Result) bool {
+func (op *ContainsOperator) Eval(payload gjson.Result) bool {
if payload.IsObject() || payload.IsArray() {
return false
}
- return strings.Contains(payload.String(), containsOperator.operand)
+ return strings.Contains(payload.String(), op.operand)
}
type RegexOperator struct {
- regex string
+ regex *regexp.Regexp
}
func regexOperatorConstruct(argument gjson.Result) *RegexOperator {
@@ -200,12 +209,12 @@ func regexOperatorConstruct(argument gjson.Result) *RegexOperator {
panic("the argument of 'regex' operator must be a string")
}
op := new(RegexOperator)
- op.regex = argument.String()
+ op.regex = regexp.MustCompile(argument.String())
return op
}
-func (containsOperator RegexOperator) Eval(payload gjson.Result) bool {
- matched, _ := regexp.MatchString(containsOperator.regex, payload.String())
+func (op *RegexOperator) Eval(payload gjson.Result) bool {
+ matched := op.regex.MatchString(payload.String())
return matched
}
@@ -232,7 +241,7 @@ func Generate(opName string, argument gjson.Result) Filter {
}
}
-var EventFilter = new(Filter)
+var EventFilter Filter = nil
func BootFilter() {
defer func() {
@@ -247,6 +256,6 @@ func BootFilter() {
if err != nil {
panic(err)
} else {
- *EventFilter = Generate("and", gjson.ParseBytes(f))
+ EventFilter = Generate("and", gjson.ParseBytes(f))
}
}
From 70e8ea07bd081934d3d530e54c16c384531d75d5 Mon Sep 17 00:00:00 2001
From: wdvxdr
Date: Thu, 3 Dec 2020 22:19:46 +0800
Subject: [PATCH 207/367] remove convert
---
coolq/bot.go | 3 +--
global/filter.go | 42 ++++++++++++++++++++++++++++++------------
2 files changed, 31 insertions(+), 14 deletions(-)
diff --git a/coolq/bot.go b/coolq/bot.go
index fd196b0..4a10ffa 100644
--- a/coolq/bot.go
+++ b/coolq/bot.go
@@ -18,7 +18,6 @@ import (
jsoniter "github.com/json-iterator/go"
log "github.com/sirupsen/logrus"
- "github.com/tidwall/gjson"
)
var json = jsoniter.ConfigCompatibleWithStandardLibrary
@@ -392,7 +391,7 @@ func (bot *CQBot) Release() {
}
func (bot *CQBot) dispatchEventMessage(m MSG) {
- if global.EventFilter != nil && global.EventFilter.Eval(gjson.Parse(m.ToJson())) == false {
+ if global.EventFilter != nil && global.EventFilter.Eval(global.MSG(m)) == false {
log.Debug("Event filtered!")
return
}
diff --git a/global/filter.go b/global/filter.go
index 344ab13..44f25a4 100644
--- a/global/filter.go
+++ b/global/filter.go
@@ -1,6 +1,7 @@
package global
import (
+ "fmt"
"io/ioutil"
"regexp"
"strings"
@@ -9,8 +10,28 @@ import (
"github.com/tidwall/gjson"
)
+type MSG map[string]interface{}
+
+func (m MSG) Get(s string) MSG {
+ if v,ok := m[s];ok {
+ if msg,ok := v.(MSG);ok {
+ return msg
+ }
+ return MSG{"__str__": v} // 用这个名字应该没问题吧
+ }
+ return MSG{}
+}
+
+func (m MSG) String() string {
+ if str,ok:=m["__str__"];ok {
+ return fmt.Sprint(str)
+ }
+ str, _ := json.MarshalToString(m)
+ return str
+}
+
type Filter interface {
- Eval(payload gjson.Result) bool
+ Eval(payload MSG) bool
}
type operationNode struct {
@@ -31,7 +52,7 @@ func notOperatorConstruct(argument gjson.Result) *NotOperator {
return op
}
-func (op *NotOperator) Eval(payload gjson.Result) bool {
+func (op *NotOperator) Eval(payload MSG) bool {
return !op.operand.Eval(payload)
}
@@ -70,7 +91,7 @@ func andOperatorConstruct(argument gjson.Result) *AndOperator {
return op
}
-func (andOperator *AndOperator) Eval(payload gjson.Result) bool {
+func (andOperator *AndOperator) Eval(payload MSG) bool {
res := true
for _, operand := range andOperator.operands {
@@ -106,7 +127,7 @@ func orOperatorConstruct(argument gjson.Result) *OrOperator {
return op
}
-func (op *OrOperator) Eval(payload gjson.Result) bool {
+func (op *OrOperator) Eval(payload MSG) bool {
res := false
for _, operand := range op.operands {
res = res || operand.Eval(payload)
@@ -127,7 +148,7 @@ func equalOperatorConstruct(argument gjson.Result) *EqualOperator {
return op
}
-func (op *EqualOperator) Eval(payload gjson.Result) bool {
+func (op *EqualOperator) Eval(payload MSG) bool {
return payload.String() == op.operand
}
@@ -141,7 +162,7 @@ func notEqualOperatorConstruct(argument gjson.Result) *NotEqualOperator {
return op
}
-func (op *NotEqualOperator) Eval(payload gjson.Result) bool {
+func (op *NotEqualOperator) Eval(payload MSG) bool {
return !(payload.String() == op.operand)
}
@@ -167,7 +188,7 @@ func inOperatorConstruct(argument gjson.Result) *InOperator {
return op
}
-func (op *InOperator) Eval(payload gjson.Result) bool {
+func (op *InOperator) Eval(payload MSG) bool {
payloadStr := payload.String()
if op.operandArray != nil {
for _, value := range op.operandArray {
@@ -193,10 +214,7 @@ func containsOperatorConstruct(argument gjson.Result) *ContainsOperator {
return op
}
-func (op *ContainsOperator) Eval(payload gjson.Result) bool {
- if payload.IsObject() || payload.IsArray() {
- return false
- }
+func (op *ContainsOperator) Eval(payload MSG) bool {
return strings.Contains(payload.String(), op.operand)
}
@@ -213,7 +231,7 @@ func regexOperatorConstruct(argument gjson.Result) *RegexOperator {
return op
}
-func (op *RegexOperator) Eval(payload gjson.Result) bool {
+func (op *RegexOperator) Eval(payload MSG) bool {
matched := op.regex.MatchString(payload.String())
return matched
}
From 12ac895b21eed875f5cde2f49661374adb58d6f9 Mon Sep 17 00:00:00 2001
From: wdvxdr
Date: Thu, 3 Dec 2020 23:04:27 +0800
Subject: [PATCH 208/367] feat get group info no cache
---
coolq/api.go | 9 ++++++++-
server/http.go | 3 ++-
server/websocket.go | 2 +-
3 files changed, 11 insertions(+), 3 deletions(-)
diff --git a/coolq/api.go b/coolq/api.go
index d3be897..6c0081c 100644
--- a/coolq/api.go
+++ b/coolq/api.go
@@ -55,11 +55,18 @@ func (bot *CQBot) CQGetGroupList(noCache bool) MSG {
}
// https://cqhttp.cc/docs/4.15/#/API?id=get_group_info-%E8%8E%B7%E5%8F%96%E7%BE%A4%E4%BF%A1%E6%81%AF
-func (bot *CQBot) CQGetGroupInfo(groupId int64) MSG {
+func (bot *CQBot) CQGetGroupInfo(groupId int64, noCache bool) MSG {
group := bot.Client.FindGroup(groupId)
if group == nil {
return Failed(100, "GROUP_NOT_FOUND", "群聊不存在")
}
+ if noCache {
+ var err error
+ group, err = bot.Client.GetGroupInfo(groupId)
+ if err != nil {
+ return Failed(100, "GET_GROUP_INFO_API_ERROR", err.Error())
+ }
+ }
return OK(MSG{
"group_id": group.Code,
"group_name": group.Name,
diff --git a/server/http.go b/server/http.go
index 9b9ac0e..769c1c7 100644
--- a/server/http.go
+++ b/server/http.go
@@ -177,7 +177,8 @@ func GetGroupList(s *httpServer, c *gin.Context) {
func GetGroupInfo(s *httpServer, c *gin.Context) {
gid, _ := strconv.ParseInt(getParam(c, "group_id"), 10, 64)
- c.JSON(200, s.bot.CQGetGroupInfo(gid))
+ nc := getParamOrDefault(c, "no_cache", "false")
+ c.JSON(200, s.bot.CQGetGroupInfo(gid, nc == "true"))
}
func GetGroupMemberList(s *httpServer, c *gin.Context) {
diff --git a/server/websocket.go b/server/websocket.go
index 6e41ffa..bb5ab01 100644
--- a/server/websocket.go
+++ b/server/websocket.go
@@ -370,7 +370,7 @@ var wsApi = map[string]func(*coolq.CQBot, gjson.Result) coolq.MSG{
return bot.CQGetGroupList(p.Get("no_cache").Bool())
},
"get_group_info": func(bot *coolq.CQBot, p gjson.Result) coolq.MSG {
- return bot.CQGetGroupInfo(p.Get("group_id").Int())
+ return bot.CQGetGroupInfo(p.Get("group_id").Int(), p.Get("no_cache").Bool())
},
"get_group_member_list": func(bot *coolq.CQBot, p gjson.Result) coolq.MSG {
return bot.CQGetGroupMemberList(p.Get("group_id").Int(), p.Get("no_cache").Bool())
From 1f20f26c4941ea07532bdf50664658f041ed2c06 Mon Sep 17 00:00:00 2001
From: wdvxdr
Date: Thu, 3 Dec 2020 23:57:13 +0800
Subject: [PATCH 209/367] update go-silk
---
go.mod | 7 +++++--
go.sum | 28 ++++++++++++++++++++++++++--
2 files changed, 31 insertions(+), 4 deletions(-)
diff --git a/go.mod b/go.mod
index 1b90e3a..6a9cdf0 100644
--- a/go.mod
+++ b/go.mod
@@ -5,24 +5,27 @@ go 1.15
require (
github.com/Mrs4s/MiraiGo v0.0.0-20201203010528-a1ecf84cac2b
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/hjson/hjson-go v3.1.0+incompatible
+ github.com/jehiah/go-strftime v0.0.0-20171201141054-1d33003b3869 // indirect
+ github.com/jonboulle/clockwork v0.2.2 // indirect
github.com/json-iterator/go v1.1.10
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
github.com/lestrrat-go/strftime v1.0.3 // indirect
- github.com/pkg/errors v0.9.1 // indirect
github.com/rifflock/lfshook v0.0.0-20180920164130-b9218ef580f5
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/wdvxdr1123/go-silk v0.0.0-20201203155442-67728040c843
github.com/yinghau76/go-ascii-art v0.0.0-20190517192627-e7f465a30189
golang.org/x/time v0.0.0-20200630173020-3af7569d3a1e
)
diff --git a/go.sum b/go.sum
index 7365382..6d8a37a 100644
--- a/go.sum
+++ b/go.sum
@@ -5,11 +5,15 @@ github.com/Mrs4s/MiraiGo v0.0.0-20201203010528-a1ecf84cac2b/go.mod h1:J1zaJWyeX7
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=
+github.com/davecgh/go-spew v1.1.1 h1:vj9j/u1bqnvCEfJOwUhtlOARqs3+rkHYY13jYWTU97c=
github.com/davecgh/go-spew v1.1.1/go.mod h1:J7Y8YcW2NihsgmVo/mv3lAwl/skON4iLHjSsI+c5H38=
github.com/dustin/go-humanize v1.0.0 h1:VSnTsYCnlFHaM2/igO1h6X3HA71jcobQuxemgkq4zYo=
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 h1:IXs+QLmnXW2CcXuY+8Mzv/fWEsPGWxqefPtCP5CnV9I=
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=
@@ -30,6 +34,7 @@ github.com/gin-contrib/sse v0.1.0/go.mod h1:RHrZQHXnP2xjPF+u1gW/2HnVO7nvIa9PG3Gm
github.com/gin-gonic/gin v1.5.0/go.mod h1:Nd6IXA8m5kNZdNEHMBd93KT+mdY3+bewLgRvmCsR2Do=
github.com/gin-gonic/gin v1.6.3 h1:ahKqKTFpO5KTPHxWZjEdPScmYaGtLo8Y4DMHoEsnp14=
github.com/gin-gonic/gin v1.6.3/go.mod h1:75u5sXoLsGZoRN5Sgbi1eraJ4GU3++wFwWzhwvtwp4M=
+github.com/go-playground/assert/v2 v2.0.1 h1:MsBgLAaY856+nPRTKrp3/OZK38U/wa0CcBYNjji3q3A=
github.com/go-playground/assert/v2 v2.0.1/go.mod h1:VDjEfimB/XKnb+ZQfWdccd7VUvScMdVu0Titje2rxJ4=
github.com/go-playground/locales v0.12.1/go.mod h1:IUMDtCfWo/w/mtMfIE/IG2K+Ey3ygWanZIBtBW0W2TM=
github.com/go-playground/locales v0.13.0 h1:HyWk6mgj5qFqCT5fjGBuRArbVDfE4hi8+e8ceBS/t7Q=
@@ -60,8 +65,10 @@ github.com/google/go-cmp v0.2.0/go.mod h1:oXzfMopK8JAjlY9xF4vHSVASa0yLyX7SntLO5a
github.com/google/go-cmp v0.3.0/go.mod h1:8QqcDgzrUqlUb/G2PQTWiueGozuR1884gddMywk6iLU=
github.com/google/go-cmp v0.3.1/go.mod h1:8QqcDgzrUqlUb/G2PQTWiueGozuR1884gddMywk6iLU=
github.com/google/go-cmp v0.4.0/go.mod h1:v8dTdLbMG2kIc/vJvl+f65V22dbkXbowE6jgT/gNBxE=
+github.com/google/go-cmp v0.5.0 h1:/QaMHBdZ26BB3SSst0Iwl10Epc+xhTquomWX0oZEB6w=
github.com/google/go-cmp v0.5.0/go.mod h1:v8dTdLbMG2kIc/vJvl+f65V22dbkXbowE6jgT/gNBxE=
github.com/google/gofuzz v1.0.0/go.mod h1:dBl0BpW6vV/+mYPU4Po3pmUjxk6FQPldtuIdl/M65Eg=
+github.com/google/uuid v1.1.1 h1:Gkbcsh/GbpXz7lPftLA3P6TYMwjCLYm83jiFQZF/3gY=
github.com/google/uuid v1.1.1/go.mod h1:TIyPZe4MgqvfeYDBFedMoGGpEw/LqOeaOT+nhxU+yHo=
github.com/gorilla/websocket v1.4.2 h1:+/TMaTYc4QFitKJxsQ7Yye35DkWvkdLcvGKqM+x0Ufc=
github.com/gorilla/websocket v1.4.2/go.mod h1:YR8l580nyteQvAITg2hZ9XVh4b55+EU/adAjf1fMHhE=
@@ -69,7 +76,12 @@ 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/hjson/hjson-go v3.1.0+incompatible h1:DY/9yE8ey8Zv22bY+mHV1uk2yRy0h8tKhZ77hEdi0Aw=
github.com/hjson/hjson-go v3.1.0+incompatible/go.mod h1:qsetwF8NlsTsOTwZTApNlTCerV+b2GjYRRcIk4JMFio=
+github.com/hpcloud/tail v1.0.0 h1:nfCOvKYfkgYP8hkirhJocXT2+zOD8yUNjXaWfTlyFKI=
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/json-iterator/go v1.1.10 h1:Kz6Cvnvv2wGdaG/V8yMvfkmNiXq9Ya2KUv4rouJJr68=
@@ -82,6 +94,7 @@ github.com/kr/binarydist v0.1.0/go.mod h1:DY7S//GCoz1BCd0B0EVrinCKAZN3pXe+MDaIZb
github.com/leodido/go-urn v1.1.0/go.mod h1:+cyI34gQWZcE1eQU7NVgKkkzdXDQHr1dBMtdAPozLkw=
github.com/leodido/go-urn v1.2.0 h1:hpXL4XnriNwQ/ABnpepYM/1vCLWNDfUNts8dX3xTG6Y=
github.com/leodido/go-urn v1.2.0/go.mod h1:+8+nEpDfqqsY+g338gtMEUOtuK+4dEMhiQEgxpxOKII=
+github.com/lestrrat-go/envload v0.0.0-20180220234015-a3eb8ddeffcc h1:RKf14vYWi2ttpEmkA4aQ3j4u9dStX2t4M8UM6qqNsG8=
github.com/lestrrat-go/envload v0.0.0-20180220234015-a3eb8ddeffcc/go.mod h1:kopuH9ugFRkIXf3YoqHKyrJ9YfUFsckUU9S7B+XP+is=
github.com/lestrrat-go/file-rotatelogs v2.4.0+incompatible h1:Y6sqxHMyB1D2YSzWkLibYKgg+SwmyFU9dF2hn6MdTj4=
github.com/lestrrat-go/file-rotatelogs v2.4.0+incompatible/go.mod h1:ZQnN8lSECaebrkQytbHj4xNgtg8CR7RYXnPok8e0EHA=
@@ -97,13 +110,16 @@ github.com/modern-go/reflect2 v0.0.0-20180701023420-4b7aa43c6742/go.mod h1:bx2lN
github.com/nfnt/resize v0.0.0-20180221191011-83c6a9932646 h1:zYyBkD/k9seD2A7fsi6Oo2LfFZAehjjQMERAvZLEDnQ=
github.com/nfnt/resize v0.0.0-20180221191011-83c6a9932646/go.mod h1:jpp1/29i3P1S/RLdc7JQKbRpFeM1dOBd8T9ki5s+AY8=
github.com/onsi/ginkgo v1.6.0/go.mod h1:lLunBs/Ym6LB5Z9jYTR76FiuTmxDTDusOGeTQH+WWjE=
+github.com/onsi/ginkgo v1.7.0 h1:WSHQ+IS43OoUrWtD1/bbclrwK8TTH5hzp+umCiuxHgs=
github.com/onsi/ginkgo v1.7.0/go.mod h1:lLunBs/Ym6LB5Z9jYTR76FiuTmxDTDusOGeTQH+WWjE=
+github.com/onsi/gomega v1.4.3 h1:RE1xgDvH7imwFD45h+u2SgIfERHlS2yNG4DObb5BSKU=
github.com/onsi/gomega v1.4.3/go.mod h1:ex+gbHU/CVuBBDIJjb2X0qEXbFg53c61hWP/1CpauHY=
github.com/oxtoacart/bpool v0.0.0-20190530202638-03653db5a59c h1:rp5dCmg/yLR3mgFuSOe4oEnDDmGLROTvMragMUXpTQw=
github.com/oxtoacart/bpool v0.0.0-20190530202638-03653db5a59c/go.mod h1:X07ZCGwUbLaax7L0S3Tw4hpejzu63ZrrQiUe6W0hcy0=
github.com/pkg/errors v0.8.1/go.mod h1:bwawxfHBFNV+L2hUp1rHADufV3IMtnDRdf1r5NINEl0=
github.com/pkg/errors v0.9.1 h1:FEBLx1zS214owpjy7qsBeixbURkuhQAwrK5UwLGTwt4=
github.com/pkg/errors v0.9.1/go.mod h1:bwawxfHBFNV+L2hUp1rHADufV3IMtnDRdf1r5NINEl0=
+github.com/pmezard/go-difflib v1.0.0 h1:4DBwDE0NGyQoBHbLQYPwSUPoCMWR5BEzIk/f1lZbAQM=
github.com/pmezard/go-difflib v1.0.0/go.mod h1:iKH77koFhYxTK1pcRnkKkqfTogsbg7gZNVY4sRDYZ/4=
github.com/prometheus/client_model v0.0.0-20190812154241-14fe0d1b01d4/go.mod h1:xMI15A0UPsDsEKsMN9yxemIoYk6Tm2C1GtYGdfGttqA=
github.com/rifflock/lfshook v0.0.0-20180920164130-b9218ef580f5 h1:mZHayPoR0lNmnHyvtYjDeq0zlVHn9K/ZXoy17ylucdo=
@@ -115,11 +131,14 @@ github.com/stretchr/objx v0.1.0/go.mod h1:HFkY916IF+rwdDfMAkV7OtwuqBVzrE8GR6GFx+
github.com/stretchr/objx v0.1.1/go.mod h1:HFkY916IF+rwdDfMAkV7OtwuqBVzrE8GR6GFx+wExME=
github.com/stretchr/testify v1.2.2/go.mod h1:a8OnRcib4nhh0OaRAV+Yts87kKdq0PP7pXfy6kDkUVs=
github.com/stretchr/testify v1.3.0/go.mod h1:M5WIy9Dh21IEIfnGCwXGc5bZfKNJtfHm1UVUgZn+9EI=
+github.com/stretchr/testify v1.4.0 h1:2E4SXV/wtOkTonXsotYi4li6zVWxYlZuYNCXe9XRJyk=
github.com/stretchr/testify v1.4.0/go.mod h1:j7eGeouHqKxXV5pUuKE4zz7dFj8WfuZ+81PSLYec5m4=
github.com/syndtr/goleveldb v1.0.0 h1:fBdIW9lB4Iz0n9khmH8w27SJ3QEJ7+IgjPEwGSZiFdE=
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.3 h1:aHoiiem0dr7GHkW001T1SMTJ7X5PvyekH5WX0whWGnI=
github.com/tidwall/gjson v1.6.3/go.mod h1:BaHyNc5bjzYkPqgLq7mdVzeiRtULKULXLgZFKsxEHI0=
github.com/tidwall/match v1.0.1 h1:PnKP62LPNxHKTwvHHZZzdOAOCtsJTjo6dZLCwpKm5xc=
@@ -130,8 +149,8 @@ github.com/ugorji/go v1.1.7 h1:/68gy2h+1mWMrwZFeD1kQialdSzAb432dtpeJ42ovdo=
github.com/ugorji/go v1.1.7/go.mod h1:kZn38zHttfInRq0xu/PH0az30d+z6vm202qpg1oXVMw=
github.com/ugorji/go/codec v1.1.7 h1:2SvQaVZ1ouYrrKKwoSk2pzd4A9evlKJb9oTL+OaLUSs=
github.com/ugorji/go/codec v1.1.7/go.mod h1:Ax+UKWsSmolVDwsd+7N3ZtXu+yMGCf907BLYF3GoBXY=
-github.com/wdvxdr1123/go-silk v0.0.0-20201007123416-b982fd3d91d6 h1:lX18MCdNzT2zIi7K02x4C5cPkDXpL+wCb1YTAMXjLWQ=
-github.com/wdvxdr1123/go-silk v0.0.0-20201007123416-b982fd3d91d6/go.mod h1:5q9LFlBr+yX/J8Jd/9wHdXwkkjFkNyQIS7kX2Lgx/Zs=
+github.com/wdvxdr1123/go-silk v0.0.0-20201203155442-67728040c843 h1:PRhoPwoTPcB9IDtAj7bEqeGS3SCxZ4xs7/IH35P24jQ=
+github.com/wdvxdr1123/go-silk v0.0.0-20201203155442-67728040c843/go.mod h1:5q9LFlBr+yX/J8Jd/9wHdXwkkjFkNyQIS7kX2Lgx/Zs=
github.com/yinghau76/go-ascii-art v0.0.0-20190517192627-e7f465a30189 h1:4UJw9if55Fu3HOwbfcaQlJ27p3oeJU2JZqoeT3ITJQk=
github.com/yinghau76/go-ascii-art v0.0.0-20190517192627-e7f465a30189/go.mod h1:rIrm5geMiBhPQkdfUm8gDFi/WiHneOp1i9KjmJqc+9I=
golang.org/x/crypto v0.0.0-20190308221718-c2843e01d9a2/go.mod h1:djNgcEr1/C05ACkg1iLfiJU5Ep61QUkGW8qpdssI0+w=
@@ -159,6 +178,7 @@ golang.org/x/sys v0.0.0-20191026070338-33540a1f6037/go.mod h1:h1NjWce9XRLGQEsW7w
golang.org/x/sys v0.0.0-20200116001909-b77594299b42 h1:vEOn+mP2zCOVzKckCZy6YsCtDblrpj/w7B9nxGNELpg=
golang.org/x/sys v0.0.0-20200116001909-b77594299b42/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs=
golang.org/x/text v0.3.0/go.mod h1:NqM8EUOU14njkJ3fqMW+pc6Ldnwhi/IjpwHt7yyuwOQ=
+golang.org/x/text v0.3.2 h1:tW2bmiBqwgJj/UpqtC8EpXEZVYOwU0yG4iWbprSVAcs=
golang.org/x/text v0.3.2/go.mod h1:bEr9sfX3Q8Zfm5fL9x+3itogRgK3+ptLWKqgva+5dAk=
golang.org/x/time v0.0.0-20200630173020-3af7569d3a1e h1:EHBhcS0mlXEAVwNyO2dLfjToGsyY4j24pTs2ScHnX7s=
golang.org/x/time v0.0.0-20200630173020-3af7569d3a1e/go.mod h1:tRJNPiyCQ0inRvYxbN9jk5I+vvW/OXSQhTDSoE431IQ=
@@ -167,6 +187,7 @@ golang.org/x/tools v0.0.0-20190114222345-bf090417da8b/go.mod h1:n7NCudcB/nEzxVGm
golang.org/x/tools v0.0.0-20190226205152-f727befe758c/go.mod h1:9Yl7xja0Znq3iFh3HoIrodX9oNMXvdceNzlUR8zjMvY=
golang.org/x/tools v0.0.0-20190311212946-11955173bddd/go.mod h1:LCzVGOaR6xXOjkQ3onu1FJEFr0SW1gC7cKk1uF8kGRs=
golang.org/x/tools v0.0.0-20190524140312-2c0ae7006135/go.mod h1:RgjU9mgBXZiqYHBnxXauZ1Gv1EHHAz9KjViQ78xBX0Q=
+golang.org/x/xerrors v0.0.0-20191204190536-9bdfabe68543 h1:E7g+9GITq07hpfrRu66IVDexMakfv52eLZ2CXBWiKr4=
golang.org/x/xerrors v0.0.0-20191204190536-9bdfabe68543/go.mod h1:I/5z698sn9Ka8TeJc9MKroUUfqBBauWjQqLJ2OPfmY0=
google.golang.org/appengine v1.1.0/go.mod h1:EbEs0AVv82hx2wNQdGPgUI5lhzA/G0D9YwlJXL52JkM=
google.golang.org/appengine v1.4.0/go.mod h1:xpcJRLb0r/rnEns0DIKYYv+WjYCduHsrkT7/EB5XEv4=
@@ -186,10 +207,13 @@ google.golang.org/protobuf v1.23.0/go.mod h1:EGpADcykh3NcUnDUJcl1+ZksZNG86OlYog2
google.golang.org/protobuf v1.23.1-0.20200526195155-81db48ad09cc/go.mod h1:EGpADcykh3NcUnDUJcl1+ZksZNG86OlYog2l/sGQquU=
google.golang.org/protobuf v1.25.0 h1:Ejskq+SyPohKW+1uil0JJMtmHCgJPJ/qWTxr8qp+R4c=
google.golang.org/protobuf v1.25.0/go.mod h1:9JNX74DMeImyA3h4bdi1ymwjUzf21/xIlbajtzgsN7c=
+gopkg.in/check.v1 v0.0.0-20161208181325-20d25e280405 h1:yhCVgyC4o1eVCa2tZl7eS0r+SDo693bJlVdllGtEeKM=
gopkg.in/check.v1 v0.0.0-20161208181325-20d25e280405/go.mod h1:Co6ibVJAznAaIkqp8huTwlJQCZ016jof/cbN4VW5Yz0=
+gopkg.in/fsnotify.v1 v1.4.7 h1:xOHLXZwVvI9hhs+cLKq5+I5onOuwQLhQwiu63xxlHs4=
gopkg.in/fsnotify.v1 v1.4.7/go.mod h1:Tz8NjZHkW78fSQdbUxIjBTcgA1z1m8ZHf0WmKUhAMys=
gopkg.in/go-playground/assert.v1 v1.2.1/go.mod h1:9RXL0bg/zibRAgZUYszZSwO/z8Y/a8bDuhia5mkpMnE=
gopkg.in/go-playground/validator.v9 v9.29.1/go.mod h1:+c9/zcJMFNgbLvly1L1V+PpxWdVbfP1avr/N00E2vyQ=
+gopkg.in/tomb.v1 v1.0.0-20141024135613-dd632973f1e7 h1:uRGJdciOHaEIrze2W8Q3AKkepLTh2hOroT7a+7czfdQ=
gopkg.in/tomb.v1 v1.0.0-20141024135613-dd632973f1e7/go.mod h1:dt/ZhP58zS4L8KSrWDmTeBkI65Dw0HsyUHuEVlX15mw=
gopkg.in/yaml.v2 v2.2.1/go.mod h1:hI93XBmqTisBFMUTm0b8Fm+jr3Dg1NNxqwp+5A1VGuI=
gopkg.in/yaml.v2 v2.2.2/go.mod h1:hI93XBmqTisBFMUTm0b8Fm+jr3Dg1NNxqwp+5A1VGuI=
From cc6c042516df4f39065de24270171474b2095e16 Mon Sep 17 00:00:00 2001
From: Mrs4s
Date: Fri, 4 Dec 2020 09:36:03 +0800
Subject: [PATCH 210/367] feature pprof service.
---
go.mod | 1 +
go.sum | 3 +++
main.go | 4 ++++
server/apiAdmin.go | 7 +++++++
server/http.go | 8 +-------
5 files changed, 16 insertions(+), 7 deletions(-)
diff --git a/go.mod b/go.mod
index 6a9cdf0..67c87d4 100644
--- a/go.mod
+++ b/go.mod
@@ -8,6 +8,7 @@ require (
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-contrib/pprof v1.3.0
github.com/gin-gonic/gin v1.6.3
github.com/gorilla/websocket v1.4.2
github.com/guonaihong/gout v0.1.3
diff --git a/go.sum b/go.sum
index 6d8a37a..6fa1266 100644
--- a/go.sum
+++ b/go.sum
@@ -29,9 +29,12 @@ github.com/getlantern/hidden v0.0.0-20190325191715-f02dbb02be55 h1:XYzSdCbkzOC0F
github.com/getlantern/hidden v0.0.0-20190325191715-f02dbb02be55/go.mod h1:6mmzY2kW1TOOrVy+r41Za2MxXM+hhqTtY3oBKd2AgFA=
github.com/getlantern/ops v0.0.0-20190325191751-d70cb0d6f85f h1:wrYrQttPS8FHIRSlsrcuKazukx/xqO/PpLZzZXsF+EA=
github.com/getlantern/ops v0.0.0-20190325191751-d70cb0d6f85f/go.mod h1:D5ao98qkA6pxftxoqzibIBBrLSUli+kYnJqrgBf9cIA=
+github.com/gin-contrib/pprof v1.3.0 h1:G9eK6HnbkSqDZBYbzG4wrjCsA4e+cvYAHUZw6W+W9K0=
+github.com/gin-contrib/pprof v1.3.0/go.mod h1:waMjT1H9b179t3CxuG1cV3DHpga6ybizwfBaM5OXaB0=
github.com/gin-contrib/sse v0.1.0 h1:Y/yl/+YNO8GZSjAhjMsSuLt29uWRFHdHYUb5lYOV9qE=
github.com/gin-contrib/sse v0.1.0/go.mod h1:RHrZQHXnP2xjPF+u1gW/2HnVO7nvIa9PG3Gm+fLHvGI=
github.com/gin-gonic/gin v1.5.0/go.mod h1:Nd6IXA8m5kNZdNEHMBd93KT+mdY3+bewLgRvmCsR2Do=
+github.com/gin-gonic/gin v1.6.2/go.mod h1:75u5sXoLsGZoRN5Sgbi1eraJ4GU3++wFwWzhwvtwp4M=
github.com/gin-gonic/gin v1.6.3 h1:ahKqKTFpO5KTPHxWZjEdPScmYaGtLo8Y4DMHoEsnp14=
github.com/gin-gonic/gin v1.6.3/go.mod h1:75u5sXoLsGZoRN5Sgbi1eraJ4GU3++wFwWzhwvtwp4M=
github.com/go-playground/assert/v2 v2.0.1 h1:MsBgLAaY856+nPRTKrp3/OZK38U/wa0CcBYNjji3q3A=
diff --git a/main.go b/main.go
index 0972ba4..77e317f 100644
--- a/main.go
+++ b/main.go
@@ -214,6 +214,10 @@ func main() {
log.SetLevel(log.DebugLevel)
log.Warnf("已开启Debug模式.")
log.Debugf("开发交流群: 192548878")
+ server.Debug = true
+ if conf.WebUi == nil || !conf.WebUi.Enabled {
+ log.Warnf("警告: 在Debug模式下未启用WebUi服务, 将无法进行性能分析.")
+ }
}
if !global.PathExists("device.json") {
log.Warn("虚拟设备信息不存在, 将自动生成随机设备.")
diff --git a/server/apiAdmin.go b/server/apiAdmin.go
index 704f738..226a437 100644
--- a/server/apiAdmin.go
+++ b/server/apiAdmin.go
@@ -5,6 +5,7 @@ import (
"bytes"
"encoding/base64"
"fmt"
+ "github.com/gin-contrib/pprof"
"image"
"io/ioutil"
"net/http"
@@ -75,6 +76,12 @@ func (s *webServer) Run(addr string, cli *client.QQClient) *coolq.CQBot {
//通用路由
s.engine.Any("/admin/:action", s.admin)
+ if Debug {
+ pprof.Register(s.engine)
+ log.Debugf("pprof 性能分析服务已启动在 http://%v/debug/pprof, 如果有任何性能问题请下载报告并提交给开发者", addr)
+ time.Sleep(time.Second * 3)
+ }
+
go func() {
//开启端口监听
if s.Conf.WebUi != nil && s.Conf.WebUi.Enabled {
diff --git a/server/http.go b/server/http.go
index 1778a6a..2275d47 100644
--- a/server/http.go
+++ b/server/http.go
@@ -35,6 +35,7 @@ type httpClient struct {
}
var HttpServer = &httpServer{}
+var Debug = false
func (s *httpServer) Run(addr, authToken string, bot *coolq.CQBot) {
gin.SetMode(gin.ReleaseMode)
@@ -93,13 +94,6 @@ func (s *httpServer) Run(addr, authToken string, bot *coolq.CQBot) {
time.Sleep(time.Second * 5)
os.Exit(1)
}
- //err := s.engine.Run(addr)
- //if err != nil {
- // log.Error(err)
- // log.Infof("请检查端口是否被占用.")
- // time.Sleep(time.Second * 5)
- // os.Exit(1)
- //}
}()
}
From 14278190e34410ad0379b120b562f80737437d79 Mon Sep 17 00:00:00 2001
From: Mrs4s
Date: Fri, 4 Dec 2020 09:39:53 +0800
Subject: [PATCH 211/367] fix msg.
---
server/apiAdmin.go | 11 +++++------
1 file changed, 5 insertions(+), 6 deletions(-)
diff --git a/server/apiAdmin.go b/server/apiAdmin.go
index 226a437..c4ac28e 100644
--- a/server/apiAdmin.go
+++ b/server/apiAdmin.go
@@ -76,15 +76,14 @@ func (s *webServer) Run(addr string, cli *client.QQClient) *coolq.CQBot {
//通用路由
s.engine.Any("/admin/:action", s.admin)
- if Debug {
- pprof.Register(s.engine)
- log.Debugf("pprof 性能分析服务已启动在 http://%v/debug/pprof, 如果有任何性能问题请下载报告并提交给开发者", addr)
- time.Sleep(time.Second * 3)
- }
-
go func() {
//开启端口监听
if s.Conf.WebUi != nil && s.Conf.WebUi.Enabled {
+ if Debug {
+ pprof.Register(s.engine)
+ log.Debugf("pprof 性能分析服务已启动在 http://%v/debug/pprof, 如果有任何性能问题请下载报告并提交给开发者", addr)
+ time.Sleep(time.Second * 3)
+ }
log.Infof("Admin API 服务器已启动: %v", addr)
err := s.engine.Run(addr)
if err != nil {
From 469054e5a377357f17182ed4eefcd113b9b817f9 Mon Sep 17 00:00:00 2001
From: Mrs4s
Date: Fri, 4 Dec 2020 14:29:12 +0800
Subject: [PATCH 212/367] =?UTF-8?q?more=20info=20for=20=E5=BD=93=E5=89=8D?=
=?UTF-8?q?=E4=B8=8A=E7=BD=91=E7=8E=AF=E5=A2=83=E5=BC=82=E5=B8=B8.=20close?=
=?UTF-8?q?=20#465.?=
MIME-Version: 1.0
Content-Type: text/plain; charset=UTF-8
Content-Transfer-Encoding: 8bit
---
server/apiAdmin.go | 2 ++
1 file changed, 2 insertions(+)
diff --git a/server/apiAdmin.go b/server/apiAdmin.go
index c4ac28e..96e7e26 100644
--- a/server/apiAdmin.go
+++ b/server/apiAdmin.go
@@ -204,6 +204,8 @@ func (s *webServer) Dologin() {
cli.Disconnect()
rsp, err = cli.Login()
count++
+ log.Warnf("错误: 当前上网环境异常. 将更换服务器并重试. 如果频繁遇到此问题请打开设备锁.")
+ time.Sleep(time.Second)
continue
}
log.Warnf("登录失败: %v", msg)
From b3c4cecdacce9671ba1100830b6044d758d8c337 Mon Sep 17 00:00:00 2001
From: shirokurakana
Date: Fri, 4 Dec 2020 22:01:50 +0800
Subject: [PATCH 213/367] =?UTF-8?q?=E8=A1=A5=E5=85=85=E5=B9=B6=E6=95=B4?=
=?UTF-8?q?=E7=90=86=E6=96=87=E6=A1=A3?=
MIME-Version: 1.0
Content-Type: text/plain; charset=UTF-8
Content-Transfer-Encoding: 8bit
---
README.md | 238 +++++++++++++++++++++++++++++++++++++------------
docs/cqhttp.md | 147 ++++++------------------------
2 files changed, 209 insertions(+), 176 deletions(-)
diff --git a/README.md b/README.md
index 68f8add..670cca3 100644
--- a/README.md
+++ b/README.md
@@ -26,75 +26,199 @@
已实现CQ码
-- [CQ:image]
-- [CQ:record]
-- [CQ:video]
-- [CQ:face]
-- [CQ:at]
-- [CQ:share]
-- [CQ:reply]
-- [CQ:forward]
-- [CQ:node]
-- [CQ:gift]
-- [CQ:redbag]
-- [CQ:tts]
-- [CQ:music]
+##### 符合Onebot标准的CQ码
+| CQ码 | 功能 |
+| ------------ | ---------------------------- |
+| [CQ:face] | [QQ表情] |
+| [CQ:record] | [语音] |
+| [CQ:video] | [短视频] |
+| [CQ:at] | [@某人] |
+| [CQ:share] | [链接分享] |
+| [CQ:music] | [音乐分享] [音乐自定义分享] |
+| [CQ:reply] | [回复] |
+| [CQ:forward] | [合并转发] |
+| [CQ:node] | [合并转发节点] |
+| [CQ:xml] | [XML消息] |
+| [CQ:json] | [JSON消息] |
+
+[QQ表情]: https://github.com/howmanybots/onebot/blob/master/v11/specs/message/segment.md#qq-%E8%A1%A8%E6%83%85
+[语音]: https://github.com/howmanybots/onebot/blob/master/v11/specs/message/segment.md#%E8%AF%AD%E9%9F%B3
+[短视频]: https://github.com/howmanybots/onebot/blob/master/v11/specs/message/segment.md#%E7%9F%AD%E8%A7%86%E9%A2%91
+[@某人]: https://github.com/howmanybots/onebot/blob/master/v11/specs/message/segment.md#%E6%9F%90%E4%BA%BA
+[链接分享]: https://github.com/howmanybots/onebot/blob/master/v11/specs/message/segment.md#%E9%93%BE%E6%8E%A5%E5%88%86%E4%BA%AB
+[音乐分享]: https://github.com/howmanybots/onebot/blob/master/v11/specs/message/segment.md#%E9%9F%B3%E4%B9%90%E5%88%86%E4%BA%AB-
+[音乐自定义分享]: https://github.com/howmanybots/onebot/blob/master/v11/specs/message/segment.md#%E9%9F%B3%E4%B9%90%E8%87%AA%E5%AE%9A%E4%B9%89%E5%88%86%E4%BA%AB-
+[回复]: https://github.com/howmanybots/onebot/blob/master/v11/specs/message/segment.md#%E5%9B%9E%E5%A4%8D
+[合并转发]: https://github.com/howmanybots/onebot/blob/master/v11/specs/message/segment.md#%E5%90%88%E5%B9%B6%E8%BD%AC%E5%8F%91-
+[合并转发节点]: https://github.com/howmanybots/onebot/blob/master/v11/specs/message/segment.md#%E5%90%88%E5%B9%B6%E8%BD%AC%E5%8F%91%E8%8A%82%E7%82%B9-
+[XML消息]: https://github.com/howmanybots/onebot/blob/master/v11/specs/message/segment.md#xml-%E6%B6%88%E6%81%AF
+[JSON消息]: https://github.com/howmanybots/onebot/blob/master/v11/specs/message/segment.md#json-%E6%B6%88%E6%81%AF
+
+##### 拓展CQ码及与Onebot标准有略微差异的CQ码
+| 拓展CQ码 | 功能 |
+| -------------- | ------------------------------- |
+| [CQ:image] | [图片] |
+| [CQ:redbag] | [红包] |
+| [CQ:poke] | [戳一戳] |
+| [CQ:gift] | [礼物] |
+| [CQ:node] | [合并转发消息节点] |
+| [CQ:cardimage] | [一种xml的图片消息(装逼大图)] |
+| [CQ:tts] | [文本转语音] |
+
+[图片]: docs/cqhttp.md#%E5%9B%BE%E7%89%87
+[红包]: docs/cqhttp.md#%E7%BA%A2%E5%8C%85
+[戳一戳]: docs/cqhttp.md#%E6%88%B3%E4%B8%80%E6%88%B3
+[礼物]: docs/cqhttp.md#%E7%A4%BC%E7%89%A9
+[合并转发消息节点]: docs/cqhttp.md#%E5%90%88%E5%B9%B6%E8%BD%AC%E5%8F%91%E6%B6%88%E6%81%AF%E8%8A%82%E7%82%B9
+[一种xml的图片消息(装逼大图)]: docs/cqhttp.md#cardimage-%E4%B8%80%E7%A7%8Dxml%E7%9A%84%E5%9B%BE%E7%89%87%E6%B6%88%E6%81%AF%E8%A3%85%E9%80%BC%E5%A4%A7%E5%9B%BE
+[文本转语音]: docs/cqhttp.md#%E6%96%87%E6%9C%AC%E8%BD%AC%E8%AF%AD%E9%9F%B3
已实现API
-##### 注意: 部分API实现与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) |
+##### 符合Onebot标准的API
+| API | 功能 |
+| ------------------------ | ---------------------- |
+| /send_private_msg | [发送私聊消息] |
+| /send_group_msg | [发送群消息] |
+| /send_msg | [发送消息] |
+| /delete_msg | [撤回信息] |
+| /set_group_kick | [群组踢人] |
+| /set_group_ban | [群组单人禁言] |
+| /set_group_whole_ban | [群组全员禁言] |
+| /set_group_admin | [群组设置管理员] |
+| /set_group_card | [设置群名片(群备注)] |
+| /set_group_name | [设置群名] |
+| /set_group_leave | [退出群组] |
+| /set_group_special_title | [设置群组专属头衔] |
+| /set_friend_add_request | [处理加好友请求] |
+| /set_group_add_request | [处理加群请求/邀请] |
+| /get_login_info | [获取登录号信息] |
+| /get_stranger_info | [获取陌生人信息] |
+| /get_friend_list | [获取好友列表] |
+| /get_group_info | [获取群信息] |
+| /get_group_list | [获取群列表] |
+| /get_group_member_info | [获取群成员信息] |
+| /get_group_member_list | [获取群成员列表] |
+| /get_group_honor_info | [获取群荣誉信息] |
+| /can_send_image | [检查是否可以发送图片] |
+| /can_send_record | [检查是否可以发送语音] |
+| /get_version_info | [获取版本信息] |
+| /set_restart | [重启go-cqhttp] |
+| /.handle_quick_operation | [对事件执行快速操作] |
+
+
+[发送私聊消息]: 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
+[发送群消息]: 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
+[发送消息]: 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
+[撤回信息]: 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
+[群组踢人]: 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
+[群组单人禁言]: 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
+[群组全员禁言]: 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
+[群组设置管理员]: https://github.com/howmanybots/onebot/blob/master/v11/specs/api/public.md#set_group_admin-%E7%BE%A4%E7%BB%84%E8%AE%BE%E7%BD%AE%E7%AE%A1%E7%90%86%E5%91%98
+[设置群名片(群备注)]: 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
+[设置群名]: 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
+[退出群组]: 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
+[设置群组专属头衔]: 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
+[处理加好友请求]: 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
+[处理加群请求/邀请]: 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
+[获取登录号信息]: 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
+[获取陌生人信息]: https://github.com/howmanybots/onebot/blob/master/v11/specs/api/public.md#get_stranger_info-%E8%8E%B7%E5%8F%96%E9%99%8C%E7%94%9F%E4%BA%BA%E4%BF%A1%E6%81%AF
+[获取好友列表]: 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
+[获取群信息]: 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
+[获取群列表]: 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
+[获取群成员信息]: 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
+[获取群成员列表]: 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
+[获取群荣誉信息]: https://github.com/howmanybots/onebot/blob/master/v11/specs/api/public.md#get_group_honor_info-%E8%8E%B7%E5%8F%96%E7%BE%A4%E8%8D%A3%E8%AA%89%E4%BF%A1%E6%81%AF
+[检查是否可以发送图片]: 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
+[检查是否可以发送语音]: 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
+[获取版本信息]: 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
+[重启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
+[对事件执行快速操作]: https://github.com/howmanybots/onebot/blob/master/v11/specs/api/hidden.md#handle_quick_operation-%E5%AF%B9%E4%BA%8B%E4%BB%B6%E6%89%A7%E8%A1%8C%E5%BF%AB%E9%80%9F%E6%93%8D%E4%BD%9C
+
+##### 拓展API及与Onebot标准有略微差异的API
+| 拓展API | 功能 |
+| --------------------------- | ---------------------- |
+| /set_group_portrait | [设置群头像] |
+| /get_image | [获取图片信息] |
+| /get_msg | [获取消息] |
+| /get_forward_msg | [获取合并转发内容] |
+| /send_group_forward_msg | [发送合并转发(群)] |
+| /.get_word_slices | [获取中文分词] |
+| /.ocr_image | [图片OCR] |
+| /get_group_system_msg | [获取群系统消息] |
+| /get_group_file_system_info | [获取群文件系统信息] |
+| /get_group_root_files | [获取群根目录文件列表] |
+| /get_group_files_by_folder | [获取群子目录文件列表] |
+| /get_group_file_url | [获取群文件资源链接] |
+| /get_status | [获取状态] |
+
+[设置群头像]: docs/cqhttp.md#%E8%AE%BE%E7%BD%AE%E7%BE%A4%E5%A4%B4%E5%83%8F
+[获取图片信息]: docs/cqhttp.md#%E8%8E%B7%E5%8F%96%E5%9B%BE%E7%89%87%E4%BF%A1%E6%81%AF
+[获取消息]: docs/cqhttp.md#%E8%8E%B7%E5%8F%96%E6%B6%88%E6%81%AF
+[获取合并转发内容]: docs/cqhttp.md#%E8%8E%B7%E5%8F%96%E5%90%88%E5%B9%B6%E8%BD%AC%E5%8F%91%E5%86%85%E5%AE%B9
+[发送合并转发(群)]: docs/cqhttp.md#%E5%8F%91%E9%80%81%E5%90%88%E5%B9%B6%E8%BD%AC%E5%8F%91%E7%BE%A4
+[获取中文分词]: docs/cqhttp.md#%E8%8E%B7%E5%8F%96%E4%B8%AD%E6%96%87%E5%88%86%E8%AF%8D
+[图片OCR]: docs/cqhttp.md#%E5%9B%BE%E7%89%87ocr
+[获取群系统消息]: docs/cqhttp.md#%E8%8E%B7%E5%8F%96%E7%BE%A4%E7%B3%BB%E7%BB%9F%E6%B6%88%E6%81%AF
+[获取群文件系统信息]: docs/cqhttp.md#%E8%8E%B7%E5%8F%96%E7%BE%A4%E6%96%87%E4%BB%B6%E7%B3%BB%E7%BB%9F%E4%BF%A1%E6%81%AF
+[获取群根目录文件列表]: docs/cqhttp.md#%E8%8E%B7%E5%8F%96%E7%BE%A4%E6%A0%B9%E7%9B%AE%E5%BD%95%E6%96%87%E4%BB%B6%E5%88%97%E8%A1%A8
+[获取群子目录文件列表]: docs/cqhttp.md#%E8%8E%B7%E5%8F%96%E7%BE%A4%E5%AD%90%E7%9B%AE%E5%BD%95%E6%96%87%E4%BB%B6%E5%88%97%E8%A1%A8
+[获取群文件资源链接]: docs/cqhttp.md#%E8%8E%B7%E5%8F%96%E7%BE%A4%E6%96%87%E4%BB%B6%E8%B5%84%E6%BA%90%E9%93%BE%E6%8E%A5
+[获取状态]: docs/cqhttp.md#%E8%8E%B7%E5%8F%96%E7%8A%B6%E6%80%81
已实现Event
-##### 注意: 部分Event数据与CQHTTP原版略有差异,请参考文档
-| 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) |
+##### 符合Onebot标准的Event(部分Event比Onebot标准多上报几个字段,不影响使用)
+| 事件类型 | 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
+[群文件上传]: 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/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#%E5%A5%BD%E5%8F%8B%E6%B7%BB%E5%8A%A0
+[群消息撤回]: https://github.com/howmanybots/onebot/blob/master/v11/specs/event/notice.md#%E7%BE%A4%E6%B6%88%E6%81%AF%E6%92%A4%E5%9B%9E
+[好友消息撤回]: https://github.com/howmanybots/onebot/blob/master/v11/specs/event/notice.md#%E5%A5%BD%E5%8F%8B%E6%B6%88%E6%81%AF%E6%92%A4%E5%9B%9E
+[群内戳一戳]: https://github.com/howmanybots/onebot/blob/master/v11/specs/event/notice.md#%E7%BE%A4%E5%86%85%E6%88%B3%E4%B8%80%E6%88%B3
+[群红包运气王]: https://github.com/howmanybots/onebot/blob/master/v11/specs/event/notice.md#%E7%BE%A4%E7%BA%A2%E5%8C%85%E8%BF%90%E6%B0%94%E7%8E%8B
+[群成员荣誉变更]: https://github.com/howmanybots/onebot/blob/master/v11/specs/event/notice.md#%E7%BE%A4%E6%88%90%E5%91%98%E8%8D%A3%E8%AA%89%E5%8F%98%E6%9B%B4
+[加好友请求]: 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
+
+##### 拓展Event
+| 事件类型 | 拓展Event |
+| -------- | ---------------- |
+| 通知事件 | [好友戳一戳] |
+| 通知事件 | [群成员名片更新] |
+| 通知事件 | [接收到离线文件] |
+
+[好友戳一戳]: docs/cqhttp.md#%E5%A5%BD%E5%8F%8B%E6%88%B3%E4%B8%80%E6%88%B3
+[群成员名片更新]: docs/cqhttp.md#%E7%BE%A4%E6%88%90%E5%91%98%E5%90%8D%E7%89%87%E6%9B%B4%E6%96%B0
+[接收到离线文件]: docs/cqhttp.md#%E6%8E%A5%E6%94%B6%E5%88%B0%E7%A6%BB%E7%BA%BF%E6%96%87%E4%BB%B6
diff --git a/docs/cqhttp.md b/docs/cqhttp.md
index 5f51c32..d250d5d 100644
--- a/docs/cqhttp.md
+++ b/docs/cqhttp.md
@@ -25,21 +25,6 @@
| 40004 | 爱你 |
| 40005 | 征友 |
-
-### 回复
-
-Type : `reply`
-
-范围: **发送/接收**
-
-参数:
-
-| 参数名 | 类型 | 说明 |
-| ------ | ---- | ------------------------------------- |
-| id | int | 回复时所引用的消息id, 必须为本群消息. |
-
-示例: `[CQ:reply,id=123456]`
-
### 红包
Type: `redbag`
@@ -108,20 +93,6 @@ Type: `gift`
示例: `[CQ:gift,qq=123456,id=8]`
- ### 合并转发
-
-Type: `forward`
-
-范围: **接收**
-
-参数:
-
-| 参数名 | 类型 | 说明 |
-| ------ | ------ | ------------------------------------------------------------- |
-| id | string | 合并转发ID, 需要通过 `/get_forward_msg` API获取转发的具体内容 |
-
-示例: `[CQ:forward,id=xxxx]`
-
### 合并转发消息节点
Type: `node`
@@ -333,17 +304,6 @@ Type: `tts`
## API
-### 设置群名
-
-终结点: `/set_group_name`
-
-**参数**
-
-| 字段 | 类型 | 说明 |
-| ---------- | ------ | ---- |
-| group_id | int64 | 群号 |
-| group_name | string | 新名 |
-
### 设置群头像
终结点: `/set_group_portrait`
@@ -681,74 +641,19 @@ Type: `tts`
## 事件
-#### 群消息撤回
+#### 好友戳一戳
**上报数据**
-| 字段 | 类型 | 可能的值 | 说明 |
-| ------------- | ------ | -------------- | -------------- |
-| `post_type` | string | `notice` | 上报类型 |
-| `notice_type` | string | `group_recall` | 消息类型 |
-| `group_id` | int64 | | 群号 |
-| `user_id` | int64 | | 消息发送者id |
-| `operator_id` | int64 | | 操作者id |
-| `message_id` | int64 | | 被撤回的消息id |
-
-#### 好友消息撤回
-
-**上报数据**
-
-| 字段 | 类型 | 可能的值 | 说明 |
-| ------------- | ------ | --------------- | -------------- |
-| `post_type` | string | `notice` | 上报类型 |
-| `notice_type` | string | `friend_recall` | 消息类型 |
-| `user_id` | int64 | | 好友id |
-| `message_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 |
-
-#### 群红包运气王提示
-
-> 注意:此事件无法在平板和手表协议上触发
-
-**上报数据**
-
-| 字段 | 类型 | 可能的值 | 说明 |
-| ------------- | ------ | ------------ | ------------ |
-| `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 | `honor` | 提示类型 |
-| `user_id` | int64 | | 成员id |
-| `honor_type` | string | `talkative:龙王` `performer:群聊之火` `emotion:快乐源泉` | 荣誉类型 |
+| 字段 | 类型 | 可能的值 | 说明 |
+| ------------- | ------ | ------------ | --------------------- |
+| `post_type` | string | `notice` | 上报类型 |
+| `notice_type` | string | `group_card` | 通知类型 |
+| `sub_type` | string | `poke` | 事件子类型 |
+| `self_id` | int64 | | 收到事件的机器人QQ 号 |
+| `user_id` | int64 | | 发送者QQ号 |
+| `target_id` | int64 | | 被戳者QQ号 |
+| `time` | int64 | | 事件发生的时间戳 |
#### 群成员名片更新
@@ -756,14 +661,16 @@ 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 | | 旧名片 |
+| `self_id` | int64 | | 收到事件的机器人QQ 号 |
+| `time` | int64 | | 事件发生的时间戳 |
> PS: 当名片为空时 `card_xx` 字段为空字符串, 并不是昵称
@@ -771,12 +678,14 @@ 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 |
+| `self_id` | int64 | | 收到事件的机器人QQ 号 |
+| `time` | int64 | | 事件发生的时间戳 |
+| `file` | object | | 文件数据 |
**file object**
From 35a1a0f8b5be7cac3c74ae5914ce563c06053a5d Mon Sep 17 00:00:00 2001
From: Mrs4s <1844812067@qq.com>
Date: Sat, 5 Dec 2020 18:17:37 +0800
Subject: [PATCH 214/367] update MiraiGo.
---
go.mod | 6 +-----
go.sum | 29 +++--------------------------
2 files changed, 4 insertions(+), 31 deletions(-)
diff --git a/go.mod b/go.mod
index 67c87d4..8382409 100644
--- a/go.mod
+++ b/go.mod
@@ -3,9 +3,8 @@ module github.com/Mrs4s/go-cqhttp
go 1.15
require (
- github.com/Mrs4s/MiraiGo v0.0.0-20201203010528-a1ecf84cac2b
+ github.com/Mrs4s/MiraiGo v0.0.0-20201204063549-4d6459e1de6d
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-contrib/pprof v1.3.0
@@ -13,8 +12,6 @@ require (
github.com/gorilla/websocket v1.4.2
github.com/guonaihong/gout v0.1.3
github.com/hjson/hjson-go v3.1.0+incompatible
- github.com/jehiah/go-strftime v0.0.0-20171201141054-1d33003b3869 // indirect
- github.com/jonboulle/clockwork v0.2.2 // indirect
github.com/json-iterator/go v1.1.10
github.com/kardianos/osext v0.0.0-20190222173326-2bc1f35cddc0 // indirect
github.com/kr/binarydist v0.1.0 // indirect
@@ -24,7 +21,6 @@ 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-20201203155442-67728040c843
github.com/yinghau76/go-ascii-art v0.0.0-20190517192627-e7f465a30189
diff --git a/go.sum b/go.sum
index 6fa1266..811a384 100644
--- a/go.sum
+++ b/go.sum
@@ -1,19 +1,15 @@
cloud.google.com/go v0.26.0/go.mod h1:aQUYkXzVsufM+DwF1aE+0xfcU+56JwCaLick0ClmMTw=
github.com/BurntSushi/toml v0.3.1/go.mod h1:xHWCNGjB5oqiDr8zfno3MHue2Ht5sIBksp03qcyfWMU=
-github.com/Mrs4s/MiraiGo v0.0.0-20201203010528-a1ecf84cac2b h1:CUzjI0hmu4sbjm0E13hNVXubNr8fbRB99mAwuJ3l1JE=
-github.com/Mrs4s/MiraiGo v0.0.0-20201203010528-a1ecf84cac2b/go.mod h1:J1zaJWyeX7hQIPpOobqb8opxTNPbguotudPPrHJMoDM=
+github.com/Mrs4s/MiraiGo v0.0.0-20201204063549-4d6459e1de6d h1:fD7QubAbdP1tu4jTTLFD2BkTLD45uPH7UwSXJm+D3oA=
+github.com/Mrs4s/MiraiGo v0.0.0-20201204063549-4d6459e1de6d/go.mod h1:J1zaJWyeX7hQIPpOobqb8opxTNPbguotudPPrHJMoDM=
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=
-github.com/davecgh/go-spew v1.1.1 h1:vj9j/u1bqnvCEfJOwUhtlOARqs3+rkHYY13jYWTU97c=
github.com/davecgh/go-spew v1.1.1/go.mod h1:J7Y8YcW2NihsgmVo/mv3lAwl/skON4iLHjSsI+c5H38=
github.com/dustin/go-humanize v1.0.0 h1:VSnTsYCnlFHaM2/igO1h6X3HA71jcobQuxemgkq4zYo=
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 h1:IXs+QLmnXW2CcXuY+8Mzv/fWEsPGWxqefPtCP5CnV9I=
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=
@@ -37,7 +33,6 @@ github.com/gin-gonic/gin v1.5.0/go.mod h1:Nd6IXA8m5kNZdNEHMBd93KT+mdY3+bewLgRvmC
github.com/gin-gonic/gin v1.6.2/go.mod h1:75u5sXoLsGZoRN5Sgbi1eraJ4GU3++wFwWzhwvtwp4M=
github.com/gin-gonic/gin v1.6.3 h1:ahKqKTFpO5KTPHxWZjEdPScmYaGtLo8Y4DMHoEsnp14=
github.com/gin-gonic/gin v1.6.3/go.mod h1:75u5sXoLsGZoRN5Sgbi1eraJ4GU3++wFwWzhwvtwp4M=
-github.com/go-playground/assert/v2 v2.0.1 h1:MsBgLAaY856+nPRTKrp3/OZK38U/wa0CcBYNjji3q3A=
github.com/go-playground/assert/v2 v2.0.1/go.mod h1:VDjEfimB/XKnb+ZQfWdccd7VUvScMdVu0Titje2rxJ4=
github.com/go-playground/locales v0.12.1/go.mod h1:IUMDtCfWo/w/mtMfIE/IG2K+Ey3ygWanZIBtBW0W2TM=
github.com/go-playground/locales v0.13.0 h1:HyWk6mgj5qFqCT5fjGBuRArbVDfE4hi8+e8ceBS/t7Q=
@@ -68,23 +63,17 @@ github.com/google/go-cmp v0.2.0/go.mod h1:oXzfMopK8JAjlY9xF4vHSVASa0yLyX7SntLO5a
github.com/google/go-cmp v0.3.0/go.mod h1:8QqcDgzrUqlUb/G2PQTWiueGozuR1884gddMywk6iLU=
github.com/google/go-cmp v0.3.1/go.mod h1:8QqcDgzrUqlUb/G2PQTWiueGozuR1884gddMywk6iLU=
github.com/google/go-cmp v0.4.0/go.mod h1:v8dTdLbMG2kIc/vJvl+f65V22dbkXbowE6jgT/gNBxE=
-github.com/google/go-cmp v0.5.0 h1:/QaMHBdZ26BB3SSst0Iwl10Epc+xhTquomWX0oZEB6w=
github.com/google/go-cmp v0.5.0/go.mod h1:v8dTdLbMG2kIc/vJvl+f65V22dbkXbowE6jgT/gNBxE=
github.com/google/gofuzz v1.0.0/go.mod h1:dBl0BpW6vV/+mYPU4Po3pmUjxk6FQPldtuIdl/M65Eg=
-github.com/google/uuid v1.1.1 h1:Gkbcsh/GbpXz7lPftLA3P6TYMwjCLYm83jiFQZF/3gY=
github.com/google/uuid v1.1.1/go.mod h1:TIyPZe4MgqvfeYDBFedMoGGpEw/LqOeaOT+nhxU+yHo=
github.com/gorilla/websocket v1.4.2 h1:+/TMaTYc4QFitKJxsQ7Yye35DkWvkdLcvGKqM+x0Ufc=
github.com/gorilla/websocket v1.4.2/go.mod h1:YR8l580nyteQvAITg2hZ9XVh4b55+EU/adAjf1fMHhE=
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/hjson/hjson-go v0.2.3 h1:KhG7/PSxTibbYOzFso5FoiX2gWePcANaCsvM1WE/bTo=
github.com/hjson/hjson-go v3.1.0+incompatible h1:DY/9yE8ey8Zv22bY+mHV1uk2yRy0h8tKhZ77hEdi0Aw=
github.com/hjson/hjson-go v3.1.0+incompatible/go.mod h1:qsetwF8NlsTsOTwZTApNlTCerV+b2GjYRRcIk4JMFio=
-github.com/hpcloud/tail v1.0.0 h1:nfCOvKYfkgYP8hkirhJocXT2+zOD8yUNjXaWfTlyFKI=
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/json-iterator/go v1.1.10 h1:Kz6Cvnvv2wGdaG/V8yMvfkmNiXq9Ya2KUv4rouJJr68=
@@ -97,7 +86,6 @@ github.com/kr/binarydist v0.1.0/go.mod h1:DY7S//GCoz1BCd0B0EVrinCKAZN3pXe+MDaIZb
github.com/leodido/go-urn v1.1.0/go.mod h1:+cyI34gQWZcE1eQU7NVgKkkzdXDQHr1dBMtdAPozLkw=
github.com/leodido/go-urn v1.2.0 h1:hpXL4XnriNwQ/ABnpepYM/1vCLWNDfUNts8dX3xTG6Y=
github.com/leodido/go-urn v1.2.0/go.mod h1:+8+nEpDfqqsY+g338gtMEUOtuK+4dEMhiQEgxpxOKII=
-github.com/lestrrat-go/envload v0.0.0-20180220234015-a3eb8ddeffcc h1:RKf14vYWi2ttpEmkA4aQ3j4u9dStX2t4M8UM6qqNsG8=
github.com/lestrrat-go/envload v0.0.0-20180220234015-a3eb8ddeffcc/go.mod h1:kopuH9ugFRkIXf3YoqHKyrJ9YfUFsckUU9S7B+XP+is=
github.com/lestrrat-go/file-rotatelogs v2.4.0+incompatible h1:Y6sqxHMyB1D2YSzWkLibYKgg+SwmyFU9dF2hn6MdTj4=
github.com/lestrrat-go/file-rotatelogs v2.4.0+incompatible/go.mod h1:ZQnN8lSECaebrkQytbHj4xNgtg8CR7RYXnPok8e0EHA=
@@ -113,16 +101,13 @@ github.com/modern-go/reflect2 v0.0.0-20180701023420-4b7aa43c6742/go.mod h1:bx2lN
github.com/nfnt/resize v0.0.0-20180221191011-83c6a9932646 h1:zYyBkD/k9seD2A7fsi6Oo2LfFZAehjjQMERAvZLEDnQ=
github.com/nfnt/resize v0.0.0-20180221191011-83c6a9932646/go.mod h1:jpp1/29i3P1S/RLdc7JQKbRpFeM1dOBd8T9ki5s+AY8=
github.com/onsi/ginkgo v1.6.0/go.mod h1:lLunBs/Ym6LB5Z9jYTR76FiuTmxDTDusOGeTQH+WWjE=
-github.com/onsi/ginkgo v1.7.0 h1:WSHQ+IS43OoUrWtD1/bbclrwK8TTH5hzp+umCiuxHgs=
github.com/onsi/ginkgo v1.7.0/go.mod h1:lLunBs/Ym6LB5Z9jYTR76FiuTmxDTDusOGeTQH+WWjE=
-github.com/onsi/gomega v1.4.3 h1:RE1xgDvH7imwFD45h+u2SgIfERHlS2yNG4DObb5BSKU=
github.com/onsi/gomega v1.4.3/go.mod h1:ex+gbHU/CVuBBDIJjb2X0qEXbFg53c61hWP/1CpauHY=
github.com/oxtoacart/bpool v0.0.0-20190530202638-03653db5a59c h1:rp5dCmg/yLR3mgFuSOe4oEnDDmGLROTvMragMUXpTQw=
github.com/oxtoacart/bpool v0.0.0-20190530202638-03653db5a59c/go.mod h1:X07ZCGwUbLaax7L0S3Tw4hpejzu63ZrrQiUe6W0hcy0=
github.com/pkg/errors v0.8.1/go.mod h1:bwawxfHBFNV+L2hUp1rHADufV3IMtnDRdf1r5NINEl0=
github.com/pkg/errors v0.9.1 h1:FEBLx1zS214owpjy7qsBeixbURkuhQAwrK5UwLGTwt4=
github.com/pkg/errors v0.9.1/go.mod h1:bwawxfHBFNV+L2hUp1rHADufV3IMtnDRdf1r5NINEl0=
-github.com/pmezard/go-difflib v1.0.0 h1:4DBwDE0NGyQoBHbLQYPwSUPoCMWR5BEzIk/f1lZbAQM=
github.com/pmezard/go-difflib v1.0.0/go.mod h1:iKH77koFhYxTK1pcRnkKkqfTogsbg7gZNVY4sRDYZ/4=
github.com/prometheus/client_model v0.0.0-20190812154241-14fe0d1b01d4/go.mod h1:xMI15A0UPsDsEKsMN9yxemIoYk6Tm2C1GtYGdfGttqA=
github.com/rifflock/lfshook v0.0.0-20180920164130-b9218ef580f5 h1:mZHayPoR0lNmnHyvtYjDeq0zlVHn9K/ZXoy17ylucdo=
@@ -134,14 +119,11 @@ github.com/stretchr/objx v0.1.0/go.mod h1:HFkY916IF+rwdDfMAkV7OtwuqBVzrE8GR6GFx+
github.com/stretchr/objx v0.1.1/go.mod h1:HFkY916IF+rwdDfMAkV7OtwuqBVzrE8GR6GFx+wExME=
github.com/stretchr/testify v1.2.2/go.mod h1:a8OnRcib4nhh0OaRAV+Yts87kKdq0PP7pXfy6kDkUVs=
github.com/stretchr/testify v1.3.0/go.mod h1:M5WIy9Dh21IEIfnGCwXGc5bZfKNJtfHm1UVUgZn+9EI=
-github.com/stretchr/testify v1.4.0 h1:2E4SXV/wtOkTonXsotYi4li6zVWxYlZuYNCXe9XRJyk=
github.com/stretchr/testify v1.4.0/go.mod h1:j7eGeouHqKxXV5pUuKE4zz7dFj8WfuZ+81PSLYec5m4=
github.com/syndtr/goleveldb v1.0.0 h1:fBdIW9lB4Iz0n9khmH8w27SJ3QEJ7+IgjPEwGSZiFdE=
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.3 h1:aHoiiem0dr7GHkW001T1SMTJ7X5PvyekH5WX0whWGnI=
github.com/tidwall/gjson v1.6.3/go.mod h1:BaHyNc5bjzYkPqgLq7mdVzeiRtULKULXLgZFKsxEHI0=
github.com/tidwall/match v1.0.1 h1:PnKP62LPNxHKTwvHHZZzdOAOCtsJTjo6dZLCwpKm5xc=
@@ -181,7 +163,6 @@ golang.org/x/sys v0.0.0-20191026070338-33540a1f6037/go.mod h1:h1NjWce9XRLGQEsW7w
golang.org/x/sys v0.0.0-20200116001909-b77594299b42 h1:vEOn+mP2zCOVzKckCZy6YsCtDblrpj/w7B9nxGNELpg=
golang.org/x/sys v0.0.0-20200116001909-b77594299b42/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs=
golang.org/x/text v0.3.0/go.mod h1:NqM8EUOU14njkJ3fqMW+pc6Ldnwhi/IjpwHt7yyuwOQ=
-golang.org/x/text v0.3.2 h1:tW2bmiBqwgJj/UpqtC8EpXEZVYOwU0yG4iWbprSVAcs=
golang.org/x/text v0.3.2/go.mod h1:bEr9sfX3Q8Zfm5fL9x+3itogRgK3+ptLWKqgva+5dAk=
golang.org/x/time v0.0.0-20200630173020-3af7569d3a1e h1:EHBhcS0mlXEAVwNyO2dLfjToGsyY4j24pTs2ScHnX7s=
golang.org/x/time v0.0.0-20200630173020-3af7569d3a1e/go.mod h1:tRJNPiyCQ0inRvYxbN9jk5I+vvW/OXSQhTDSoE431IQ=
@@ -190,7 +171,6 @@ golang.org/x/tools v0.0.0-20190114222345-bf090417da8b/go.mod h1:n7NCudcB/nEzxVGm
golang.org/x/tools v0.0.0-20190226205152-f727befe758c/go.mod h1:9Yl7xja0Znq3iFh3HoIrodX9oNMXvdceNzlUR8zjMvY=
golang.org/x/tools v0.0.0-20190311212946-11955173bddd/go.mod h1:LCzVGOaR6xXOjkQ3onu1FJEFr0SW1gC7cKk1uF8kGRs=
golang.org/x/tools v0.0.0-20190524140312-2c0ae7006135/go.mod h1:RgjU9mgBXZiqYHBnxXauZ1Gv1EHHAz9KjViQ78xBX0Q=
-golang.org/x/xerrors v0.0.0-20191204190536-9bdfabe68543 h1:E7g+9GITq07hpfrRu66IVDexMakfv52eLZ2CXBWiKr4=
golang.org/x/xerrors v0.0.0-20191204190536-9bdfabe68543/go.mod h1:I/5z698sn9Ka8TeJc9MKroUUfqBBauWjQqLJ2OPfmY0=
google.golang.org/appengine v1.1.0/go.mod h1:EbEs0AVv82hx2wNQdGPgUI5lhzA/G0D9YwlJXL52JkM=
google.golang.org/appengine v1.4.0/go.mod h1:xpcJRLb0r/rnEns0DIKYYv+WjYCduHsrkT7/EB5XEv4=
@@ -210,13 +190,10 @@ google.golang.org/protobuf v1.23.0/go.mod h1:EGpADcykh3NcUnDUJcl1+ZksZNG86OlYog2
google.golang.org/protobuf v1.23.1-0.20200526195155-81db48ad09cc/go.mod h1:EGpADcykh3NcUnDUJcl1+ZksZNG86OlYog2l/sGQquU=
google.golang.org/protobuf v1.25.0 h1:Ejskq+SyPohKW+1uil0JJMtmHCgJPJ/qWTxr8qp+R4c=
google.golang.org/protobuf v1.25.0/go.mod h1:9JNX74DMeImyA3h4bdi1ymwjUzf21/xIlbajtzgsN7c=
-gopkg.in/check.v1 v0.0.0-20161208181325-20d25e280405 h1:yhCVgyC4o1eVCa2tZl7eS0r+SDo693bJlVdllGtEeKM=
gopkg.in/check.v1 v0.0.0-20161208181325-20d25e280405/go.mod h1:Co6ibVJAznAaIkqp8huTwlJQCZ016jof/cbN4VW5Yz0=
-gopkg.in/fsnotify.v1 v1.4.7 h1:xOHLXZwVvI9hhs+cLKq5+I5onOuwQLhQwiu63xxlHs4=
gopkg.in/fsnotify.v1 v1.4.7/go.mod h1:Tz8NjZHkW78fSQdbUxIjBTcgA1z1m8ZHf0WmKUhAMys=
gopkg.in/go-playground/assert.v1 v1.2.1/go.mod h1:9RXL0bg/zibRAgZUYszZSwO/z8Y/a8bDuhia5mkpMnE=
gopkg.in/go-playground/validator.v9 v9.29.1/go.mod h1:+c9/zcJMFNgbLvly1L1V+PpxWdVbfP1avr/N00E2vyQ=
-gopkg.in/tomb.v1 v1.0.0-20141024135613-dd632973f1e7 h1:uRGJdciOHaEIrze2W8Q3AKkepLTh2hOroT7a+7czfdQ=
gopkg.in/tomb.v1 v1.0.0-20141024135613-dd632973f1e7/go.mod h1:dt/ZhP58zS4L8KSrWDmTeBkI65Dw0HsyUHuEVlX15mw=
gopkg.in/yaml.v2 v2.2.1/go.mod h1:hI93XBmqTisBFMUTm0b8Fm+jr3Dg1NNxqwp+5A1VGuI=
gopkg.in/yaml.v2 v2.2.2/go.mod h1:hI93XBmqTisBFMUTm0b8Fm+jr3Dg1NNxqwp+5A1VGuI=
From d8b9eb611f1ef15eaacfa210599df2ca337ab845 Mon Sep 17 00:00:00 2001
From: Mrs4s
Date: Mon, 7 Dec 2020 10:51:30 +0800
Subject: [PATCH 215/367] add stacktrace on panic.
---
server/websocket.go | 3 ++-
1 file changed, 2 insertions(+), 1 deletion(-)
diff --git a/server/websocket.go b/server/websocket.go
index ebcc657..dddbeec 100644
--- a/server/websocket.go
+++ b/server/websocket.go
@@ -4,6 +4,7 @@ import (
"context"
"fmt"
"net/http"
+ "runtime/debug"
"strconv"
"strings"
"sync"
@@ -316,7 +317,7 @@ func (s *websocketServer) listenApi(c *websocketConn) {
func (c *websocketConn) handleRequest(bot *coolq.CQBot, payload []byte) {
defer func() {
if err := recover(); err != nil {
- log.Printf("处置WS命令时发生无法恢复的异常:%v", err)
+ log.Printf("处置WS命令时发生无法恢复的异常:%v\n%s", err, debug.Stack())
c.Close()
}
}()
From 302ae89a756b8a3ecb6523746395fd55f8e82cb4 Mon Sep 17 00:00:00 2001
From: Mrs4s
Date: Mon, 7 Dec 2020 10:53:18 +0800
Subject: [PATCH 216/367] fix pprof.
---
server/apiAdmin.go | 4 ++++
1 file changed, 4 insertions(+)
diff --git a/server/apiAdmin.go b/server/apiAdmin.go
index 96e7e26..15f3e00 100644
--- a/server/apiAdmin.go
+++ b/server/apiAdmin.go
@@ -318,6 +318,10 @@ func AuthMiddleWare() gin.HandlerFunc {
if c.Request.Method == "OPTIONS" {
c.AbortWithStatus(http.StatusNoContent)
}
+ if strings.Contains(c.Request.URL.Path, "debug") {
+ c.Next()
+ return
+ }
// 处理请求
if c.Request.Method != "GET" && c.Request.Method != "POST" {
log.Warnf("已拒绝客户端 %v 的请求: 方法错误", c.Request.RemoteAddr)
From e6de0c33cd9163210f273e5c23dba56a0854b6d2 Mon Sep 17 00:00:00 2001
From: Yiwen-Chan
Date: Tue, 8 Dec 2020 20:24:48 +0800
Subject: [PATCH 217/367] improve doc
---
docs/cqhttp.md | 207 +++++++++++++++++++++++++++++++------------------
1 file changed, 132 insertions(+), 75 deletions(-)
diff --git a/docs/cqhttp.md b/docs/cqhttp.md
index 5f51c32..d08eaf8 100644
--- a/docs/cqhttp.md
+++ b/docs/cqhttp.md
@@ -2,10 +2,64 @@
由于部分 api 原版 CQHTTP 并未实现,go-cqhttp 修改并增加了一些拓展 api .
+
+目录
+
+
+##### CQCode
+- [图片](#图片)
+- [回复](#回复)
+- [红包](#红包)
+- [戳一戳](#戳一戳)
+- [礼物](#礼物)
+- [合并转发](#合并转发)
+- [合并转发消息节点](#合并转发消息节点)
+- [XML 消息](#XML 消息)
+- [JSON 消息](#JSON 消息)
+- [cardimage](#cardimage)
+- [文本转语音](#文本转语音)
+- [图片](#图片)
+
+##### API
+- [设置群名](#设置群名)
+- [设置群头像](#设置群头像)
+- [获取图片信息](#获取图片信息)
+- [获取消息](#获取消息)
+- [获取合并转发内容](#获取合并转发内容)
+- [发送合并转发(群)](#发送合并转发(群))
+- [获取中文分词](#获取中文分词)
+- [图片OCR](#图片OCR)
+- [获取中文分词](#获取中文分词)
+- [获取群系统消息](#获取群文件系统信息)
+- [获取群文件系统信息](#获取群文件系统信息)
+- [获取群根目录文件列表](#获取群根目录文件列表)
+- [获取群子目录文件列表](#获取群子目录文件列表)
+- [获取群文件资源链接](#获取群文件资源链接)
+- [获取状态](#获取状态)
+- [获取群子目录文件列表](#设置群名)
+
+##### 事件
+- [群消息撤回](#群消息撤回)
+- [好友消息撤回](#好友消息撤回)
+- [群内戳一戳](#群内戳一戳)
+- [群红包运气王提示](#群红包运气王提示)
+- [群成员荣誉变更提示](#群成员荣誉变更提示)
+- [群成员名片更新](#群成员名片更新)
+- [接收到离线文件](#接收到离线文件)
+
+
+
+
## CQCode
### 图片
+Type : `image`
+
+范围: **发送/接收**
+
+参数:
+
| 参数名 | 可能的值 | 说明 |
| ------- | --------------- | --------------------------------------------------------------- |
| `file` | - | 图片文件名 |
@@ -25,6 +79,8 @@
| 40004 | 爱你 |
| 40005 | 征友 |
+示例: `[CQ:image,file=http://baidu.com/1.jpg,type=show,id=40004]`
+
### 回复
@@ -36,7 +92,7 @@ Type : `reply`
| 参数名 | 类型 | 说明 |
| ------ | ---- | ------------------------------------- |
-| id | int | 回复时所引用的消息id, 必须为本群消息. |
+| `id` | int | 回复时所引用的消息id, 必须为本群消息. |
示例: `[CQ:reply,id=123456]`
@@ -48,9 +104,9 @@ Type: `redbag`
参数:
-| 参数名 | 类型 | 说明 |
-| ------ | ------ | ----------- |
-| title | string | 祝福语/口令 |
+| 参数名 | 类型 | 说明 |
+| ------- | ------ | ----------- |
+| `title` | string | 祝福语/口令 |
示例: `[CQ:redbag,title=恭喜发财]`
@@ -66,7 +122,7 @@ Type: `poke`
| 参数名 | 类型 | 说明 |
| ------ | ----- | ------------ |
-| qq | int64 | 需要戳的成员 |
+| `qq` | int64 | 需要戳的成员 |
示例: `[CQ:poke,qq=123456]`
@@ -82,8 +138,8 @@ Type: `gift`
| 参数名 | 类型 | 说明 |
| ------ | ----- | -------------- |
-| qq | int64 | 接收礼物的成员 |
-| id | int | 礼物的类型 |
+| `qq` | int64 | 接收礼物的成员 |
+| `id` | int | 礼物的类型 |
目前支持的礼物ID:
@@ -116,9 +172,9 @@ Type: `forward`
参数:
-| 参数名 | 类型 | 说明 |
-| ------ | ------ | ------------------------------------------------------------- |
-| id | string | 合并转发ID, 需要通过 `/get_forward_msg` API获取转发的具体内容 |
+| 参数名 | 类型 | 说明 |
+| ------ | ------ | ------------------------------------------------------------ |
+| `id` | string | 合并转发ID, 需要通过 `/get_forward_msg` API获取转发的具体内容 |
示例: `[CQ:forward,id=xxxx]`
@@ -130,12 +186,12 @@ Type: `node`
参数:
-| 参数名 | 类型 | 说明 | 特殊说明 |
-| ------- | ------- | -------------- | -------------------------------------------------------------------------------------- |
-| id | int32 | 转发消息id | 直接引用他人的消息合并转发, 实际查看顺序为原消息发送顺序 **与下面的自定义消息二选一** |
-| name | string | 发送者显示名字 | 用于自定义消息 (自定义消息并合并转发,实际查看顺序为自定义消息段顺序) |
-| uin | int64 | 发送者QQ号 | 用于自定义消息 |
-| content | message | 具体消息 | 用于自定义消息 **不支持转发套娃,不支持引用回复** |
+| 参数名 | 类型 | 说明 | 特殊说明 |
+| --------- | ------- | -------------- | ------------------------------------------------------------ |
+| `id` | int32 | 转发消息id | 直接引用他人的消息合并转发, 实际查看顺序为原消息发送顺序 **与下面的自定义消息二选一** |
+| `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套娃**
@@ -209,7 +265,7 @@ Type: `node`
]
````
-### xml支持
+### xml 消息
Type: `xml`
@@ -217,10 +273,10 @@ Type: `xml`
参数:
-| 参数名 | 类型 | 说明 |
-| ------ | ------ | ----------------------------------------- |
-| data | string | xml内容,xml中的value部分,记得实体化处理 |
-| resid | int32 | 可以不填 |
+| 参数名 | 类型 | 说明 |
+| ------- | ------ | ----------------------------------------- |
+| `data` | string | xml内容,xml中的value部分,记得实体化处理 |
+| `resid` | int32 | 可以不填 |
示例: `[CQ:xml,data=xxxx]`
@@ -258,7 +314,7 @@ Type: `xml`
```
-### json消息支持
+### JSON 消息
Type: `json`
@@ -266,20 +322,20 @@ Type: `json`
参数:
-| 参数名 | 类型 | 说明 |
-| ------ | ------ | ----------------------------------------------- |
-| data | string | json内容,json的所有字符串记得实体化处理 |
-| resid | int32 | 默认不填为0,走小程序通道,填了走富文本通道发送 |
+| 参数名 | 类型 | 说明 |
+| ------- | ------ | ----------------------------------------------- |
+| `data` | string | json内容,json的所有字符串记得实体化处理 |
+| `resid` | int32 | 默认不填为0,走小程序通道,填了走富文本通道发送 |
json中的字符串需要进行转义:
->","=>`,`、
+>","=> `,`
->"&"=> `&`、
+>"&"=> `&`
->"["=>`[`、
+>"["=> `[`
->"]"=>`]`、
+>"]"=> `]`
否则无法正确得到解析
@@ -289,7 +345,8 @@ json中的字符串需要进行转义:
```
-### cardimage 一种xml的图片消息(装逼大图)
+### cardimage
+一种xml的图片消息(装逼大图)
ps: xml 接口的消息都存在风控风险,请自行兼容发送失败后的处理(可以失败后走普通图片模式)
@@ -299,15 +356,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码:
@@ -327,7 +384,7 @@ Type: `tts`
| 参数名 | 类型 | 说明 |
| ------ | ------ | ---- |
-| text | string | 内容 |
+| `text` | string | 内容 |
示例: `[CQ:tts,text=这是一条测试消息]`
@@ -339,10 +396,10 @@ Type: `tts`
**参数**
-| 字段 | 类型 | 说明 |
-| ---------- | ------ | ---- |
-| group_id | int64 | 群号 |
-| group_name | string | 新名 |
+| 字段 | 类型 | 说明 |
+| ------------ | ------ | ---- |
+| `group_id` | int64 | 群号 |
+| `group_name` | string | 新名 |
### 设置群头像
@@ -350,11 +407,11 @@ Type: `tts`
**参数**
-| 字段 | 类型 | 说明 |
-| -------- | ------ | ------------------------ |
-| group_id | int64 | 群号 |
-| file | string | 图片文件名 |
-| cache | int | 表示是否使用已缓存的文件 |
+| 字段 | 类型 | 说明 |
+| ---------- | ------ | ------------------------ |
+| `group_id` | int64 | 群号 |
+| `file` | string | 图片文件名 |
+| `cache` | int | 表示是否使用已缓存的文件 |
[1]`file` 参数支持以下几种格式:
@@ -654,34 +711,34 @@ Type: `tts`
**响应数据**
-| 字段 | 类型 | 说明 |
-| --------------- | ---------- | ------------------------------- |
-| app_initialized | bool | 原 `CQHTTP` 字段, 恒定为 `true` |
-| app_enabled | bool | 原 `CQHTTP` 字段, 恒定为 `true` |
-| plugins_good | bool | 原 `CQHTTP` 字段, 恒定为 `true` |
-| app_good | bool | 原 `CQHTTP` 字段, 恒定为 `true` |
-| online | bool | 表示BOT是否在线 |
-| goold | bool | 同 `online` |
-| stat | Statistics | 运行统计 |
+| 字段 | 类型 | 说明 |
+| ----------------- | ---------- | ------------------------------- |
+| `app_initialized` | bool | 原 `CQHTTP` 字段, 恒定为 `true` |
+| `app_enabled` | bool | 原 `CQHTTP` 字段, 恒定为 `true` |
+| `plugins_good` | bool | 原 `CQHTTP` 字段, 恒定为 `true` |
+| `app_good` | bool | 原 `CQHTTP` 字段, 恒定为 `true` |
+| `online` | bool | 表示BOT是否在线 |
+| `goold` | bool | 同 `online` |
+| `stat` | Statistics | 运行统计 |
**Statistics**
-| 字段 | 类型 | 说明 |
-| ---------------- | ------ | ---------------- |
-| packet_received | uint64 | 收到的数据包总数 |
-| packet_sent | uint64 | 发送的数据包总数 |
-| packet_lost | uint32 | 数据包丢失总数 |
-| message_received | uint64 | 接受信息总数 |
-| message_sent | uint64 | 发送信息总数 |
-| disconnect_times | uint32 | TCP链接断开次数 |
-| lost_times | uint32 | 账号掉线次数 |
+| 字段 | 类型 | 说明 |
+| ------------------ | ------ | ---------------- |
+| `packet_received` | uint64 | 收到的数据包总数 |
+| `packet_sent` | uint64 | 发送的数据包总数 |
+| `packet_lost` | uint32 | 数据包丢失总数 |
+| `message_received` | uint64 | 接受信息总数 |
+| `message_sent` | uint64 | 发送信息总数 |
+| `disconnect_times` | uint32 | TCP链接断开次数 |
+| `lost_times` | uint32 | 账号掉线次数 |
> 注意: 所有统计信息都将在重启后重制
## 事件
-#### 群消息撤回
+### 群消息撤回
**上报数据**
@@ -694,7 +751,7 @@ Type: `tts`
| `operator_id` | int64 | | 操作者id |
| `message_id` | int64 | | 被撤回的消息id |
-#### 好友消息撤回
+### 好友消息撤回
**上报数据**
@@ -705,7 +762,7 @@ Type: `tts`
| `user_id` | int64 | | 好友id |
| `message_id` | int64 | | 被撤回的消息id |
-#### 群内戳一戳
+### 群内戳一戳
> 注意:此事件无法在平板和手表协议上触发
@@ -720,7 +777,7 @@ Type: `tts`
| `user_id` | int64 | | 发送者id |
| `target_id` | int64 | | 被戳者id |
-#### 群红包运气王提示
+### 群红包运气王提示
> 注意:此事件无法在平板和手表协议上触发
@@ -735,7 +792,7 @@ Type: `tts`
| `user_id` | int64 | | 红包发送者id |
| `target_id` | int64 | | 运气王id |
-#### 群成员荣誉变更提示
+### 群成员荣誉变更提示
> 注意:此事件无法在平板和手表协议上触发
@@ -750,7 +807,7 @@ Type: `tts`
| `user_id` | int64 | | 成员id |
| `honor_type` | string | `talkative:龙王` `performer:群聊之火` `emotion:快乐源泉` | 荣誉类型 |
-#### 群成员名片更新
+### 群成员名片更新
> 注意: 此事件不保证时效性,仅在收到消息时校验卡片
@@ -767,7 +824,7 @@ Type: `tts`
> PS: 当名片为空时 `card_xx` 字段为空字符串, 并不是昵称
-#### 接收到离线文件
+### 接收到离线文件
**上报数据**
From 26372c0939ef885e74978b8a3447c9d25ff38f1d Mon Sep 17 00:00:00 2001
From: Kanri
Date: Tue, 8 Dec 2020 20:28:10 +0800
Subject: [PATCH 218/367] improve doc
---
docs/cqhttp.md | 8 ++++----
1 file changed, 4 insertions(+), 4 deletions(-)
diff --git a/docs/cqhttp.md b/docs/cqhttp.md
index d08eaf8..9243b4f 100644
--- a/docs/cqhttp.md
+++ b/docs/cqhttp.md
@@ -14,8 +14,8 @@
- [礼物](#礼物)
- [合并转发](#合并转发)
- [合并转发消息节点](#合并转发消息节点)
-- [XML 消息](#XML 消息)
-- [JSON 消息](#JSON 消息)
+- [XML 消息](#xml-消息)
+- [JSON 消息](#json-消息)
- [cardimage](#cardimage)
- [文本转语音](#文本转语音)
- [图片](#图片)
@@ -265,7 +265,7 @@ Type: `node`
]
````
-### xml 消息
+### XML 消息
Type: `xml`
@@ -841,4 +841,4 @@ Type: `tts`
| ------ | ------ | -------- | -------- |
| `name` | string | | 文件名 |
| `size` | int64 | | 文件大小 |
-| `url` | string | | 下载链接 |
\ No newline at end of file
+| `url` | string | | 下载链接 |
From 950011b6947434640e0e96c7f69fbef234aec5fa Mon Sep 17 00:00:00 2001
From: wdvxdr
Date: Tue, 8 Dec 2020 22:12:58 +0800
Subject: [PATCH 219/367] update docs
---
docs/EventFilter.md | 14 ++++++++++++--
1 file changed, 12 insertions(+), 2 deletions(-)
diff --git a/docs/EventFilter.md b/docs/EventFilter.md
index 2eb5f38..7f23406 100644
--- a/docs/EventFilter.md
+++ b/docs/EventFilter.md
@@ -1,12 +1,22 @@
# 事件过滤器
-在go-cqhttp同级目录下新建`filter.json`文件即可开启事件过滤器,启动时会读取该文件中定义的过滤规则(使用 JSON 编写),若文件不存在,或过滤规则语法错误,则会暂停所有上报。
+在go-cqhttp同级目录下新建`filter.json`文件即可开启事件过滤器,启动时会读取该文件中定义的过滤规则(使用 JSON 编写),若文件不存在,或过滤规则语法错误,则不会启用事件过滤器。
事件过滤器会处理所有事件(包括心跳事件在内的元事件),请谨慎使用!!
+注意: 与客户端建立连接的握手事件**不会**经过事件过滤器
+
## 示例
这节首先给出一些示例,演示过滤器的基本用法,下一节将给出具体语法说明。
+### 过滤所有事件
+
+```json
+{
+ ".not": {}
+}
+```
+
### 只上报以「!!」开头的消息
```json
@@ -128,5 +138,5 @@
这里有几点需要注意:
-- `message` 字段在运行过滤器时是消息段数组的形式(见 [消息格式]( https://github.com/howmanybots/onebot/blob/master/v11/specs/message/array.md ))
+- `message` 字段在运行过滤器时和上报信息类型相同(见 [消息格式]( https://github.com/howmanybots/onebot/blob/master/v11/specs/message/array.md ))
- `raw_message` 字段为未经**CQ码**处理的原始消息字符串,这意味着其中可能会出现形如 `[CQ:face,id=123]` 的 CQ 码
From e694e8b4824d5a100b86d14c1574fd312f877ba7 Mon Sep 17 00:00:00 2001
From: Mrs4s
Date: Wed, 9 Dec 2020 14:24:39 +0800
Subject: [PATCH 220/367] support event recover.
---
coolq/bot.go | 6 ++++++
1 file changed, 6 insertions(+)
diff --git a/coolq/bot.go b/coolq/bot.go
index 4a10ffa..6277201 100644
--- a/coolq/bot.go
+++ b/coolq/bot.go
@@ -6,6 +6,7 @@ import (
"fmt"
"hash/crc32"
"path"
+ "runtime/debug"
"sync"
"time"
@@ -397,6 +398,11 @@ func (bot *CQBot) dispatchEventMessage(m MSG) {
}
for _, f := range bot.events {
go func(fn func(MSG)) {
+ defer func() {
+ if pan := recover(); pan != nil {
+ log.Warnf("处理事件 %v 时出现错误: %v \n%s", m, pan, debug.Stack())
+ }
+ }()
start := time.Now()
fn(m)
end := time.Now()
From 054ad47da90b7986beac771581b015cec6eb602c Mon Sep 17 00:00:00 2001
From: Mrs4s
Date: Thu, 10 Dec 2020 01:32:08 +0800
Subject: [PATCH 221/367] feature auto fragment.
---
coolq/bot.go | 8 +++++++-
1 file changed, 7 insertions(+), 1 deletion(-)
diff --git a/coolq/bot.go b/coolq/bot.go
index 45d6861..8680d57 100644
--- a/coolq/bot.go
+++ b/coolq/bot.go
@@ -222,7 +222,13 @@ func (bot *CQBot) SendGroupMessage(groupId int64, m *message.SendingMessage) int
ret := bot.Client.SendGroupMessage(groupId, m, ForceFragmented)
if ret == nil || ret.Id == -1 {
log.Warnf("群消息发送失败: 账号可能被风控.")
- return -1
+ if !ForceFragmented {
+ log.Warnf("将尝试分片发送...")
+ ret = bot.Client.SendGroupMessage(groupId, m, true)
+ }
+ if ret == nil || ret.Id == -1 {
+ return -1
+ }
}
return bot.InsertGroupMessage(ret)
}
From 37abe25cd630af0f6eca185f2fd4fadf5a660e88 Mon Sep 17 00:00:00 2001
From: Mrs4s
Date: Thu, 10 Dec 2020 02:01:44 +0800
Subject: [PATCH 222/367] update MiraiGo.
---
go.mod | 2 +-
go.sum | 5 ++---
2 files changed, 3 insertions(+), 4 deletions(-)
diff --git a/go.mod b/go.mod
index 8382409..61e1a50 100644
--- a/go.mod
+++ b/go.mod
@@ -3,7 +3,7 @@ module github.com/Mrs4s/go-cqhttp
go 1.15
require (
- github.com/Mrs4s/MiraiGo v0.0.0-20201204063549-4d6459e1de6d
+ github.com/Mrs4s/MiraiGo v0.0.0-20201209175913-993d8cf8fae7
github.com/dustin/go-humanize v1.0.0
github.com/getlantern/go-update v0.0.0-20190510022740-79c495ab728c
github.com/getlantern/golog v0.0.0-20201105130739-9586b8bde3a9 // indirect
diff --git a/go.sum b/go.sum
index 811a384..286ed5e 100644
--- a/go.sum
+++ b/go.sum
@@ -1,7 +1,7 @@
cloud.google.com/go v0.26.0/go.mod h1:aQUYkXzVsufM+DwF1aE+0xfcU+56JwCaLick0ClmMTw=
github.com/BurntSushi/toml v0.3.1/go.mod h1:xHWCNGjB5oqiDr8zfno3MHue2Ht5sIBksp03qcyfWMU=
-github.com/Mrs4s/MiraiGo v0.0.0-20201204063549-4d6459e1de6d h1:fD7QubAbdP1tu4jTTLFD2BkTLD45uPH7UwSXJm+D3oA=
-github.com/Mrs4s/MiraiGo v0.0.0-20201204063549-4d6459e1de6d/go.mod h1:J1zaJWyeX7hQIPpOobqb8opxTNPbguotudPPrHJMoDM=
+github.com/Mrs4s/MiraiGo v0.0.0-20201209175913-993d8cf8fae7 h1:m/PdSX+ooDa9vgWZ1Pof+D4b0OtNdjJqoU3WmAUc+ic=
+github.com/Mrs4s/MiraiGo v0.0.0-20201209175913-993d8cf8fae7/go.mod h1:J1zaJWyeX7hQIPpOobqb8opxTNPbguotudPPrHJMoDM=
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=
@@ -70,7 +70,6 @@ github.com/gorilla/websocket v1.4.2 h1:+/TMaTYc4QFitKJxsQ7Yye35DkWvkdLcvGKqM+x0U
github.com/gorilla/websocket v1.4.2/go.mod h1:YR8l580nyteQvAITg2hZ9XVh4b55+EU/adAjf1fMHhE=
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/hjson/hjson-go v0.2.3 h1:KhG7/PSxTibbYOzFso5FoiX2gWePcANaCsvM1WE/bTo=
github.com/hjson/hjson-go v3.1.0+incompatible h1:DY/9yE8ey8Zv22bY+mHV1uk2yRy0h8tKhZ77hEdi0Aw=
github.com/hjson/hjson-go v3.1.0+incompatible/go.mod h1:qsetwF8NlsTsOTwZTApNlTCerV+b2GjYRRcIk4JMFio=
github.com/hpcloud/tail v1.0.0/go.mod h1:ab1qPbhIpdTxEkNHXyeSf5vhxWSCs/tWer42PpOxQnU=
From 9a4b28455963ed6eb1f3021db453642af6dba419 Mon Sep 17 00:00:00 2001
From: Mrs4s
Date: Thu, 10 Dec 2020 02:05:09 +0800
Subject: [PATCH 223/367] update MiraiGo.
---
go.mod | 2 +-
go.sum | 4 ++--
2 files changed, 3 insertions(+), 3 deletions(-)
diff --git a/go.mod b/go.mod
index 61e1a50..ec390e3 100644
--- a/go.mod
+++ b/go.mod
@@ -3,7 +3,7 @@ module github.com/Mrs4s/go-cqhttp
go 1.15
require (
- github.com/Mrs4s/MiraiGo v0.0.0-20201209175913-993d8cf8fae7
+ github.com/Mrs4s/MiraiGo v0.0.0-20201209180326-c07a8a9c8a83
github.com/dustin/go-humanize v1.0.0
github.com/getlantern/go-update v0.0.0-20190510022740-79c495ab728c
github.com/getlantern/golog v0.0.0-20201105130739-9586b8bde3a9 // indirect
diff --git a/go.sum b/go.sum
index 286ed5e..59db82a 100644
--- a/go.sum
+++ b/go.sum
@@ -1,7 +1,7 @@
cloud.google.com/go v0.26.0/go.mod h1:aQUYkXzVsufM+DwF1aE+0xfcU+56JwCaLick0ClmMTw=
github.com/BurntSushi/toml v0.3.1/go.mod h1:xHWCNGjB5oqiDr8zfno3MHue2Ht5sIBksp03qcyfWMU=
-github.com/Mrs4s/MiraiGo v0.0.0-20201209175913-993d8cf8fae7 h1:m/PdSX+ooDa9vgWZ1Pof+D4b0OtNdjJqoU3WmAUc+ic=
-github.com/Mrs4s/MiraiGo v0.0.0-20201209175913-993d8cf8fae7/go.mod h1:J1zaJWyeX7hQIPpOobqb8opxTNPbguotudPPrHJMoDM=
+github.com/Mrs4s/MiraiGo v0.0.0-20201209180326-c07a8a9c8a83 h1:9mCmMOTDlQ5reudlum8JAjmrsqSdG0692/BgOIuPIhs=
+github.com/Mrs4s/MiraiGo v0.0.0-20201209180326-c07a8a9c8a83/go.mod h1:J1zaJWyeX7hQIPpOobqb8opxTNPbguotudPPrHJMoDM=
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=
From f789609a23a2df3681dc2d24ccdfa7937e999740 Mon Sep 17 00:00:00 2001
From: wdvxdr
Date: Thu, 10 Dec 2020 22:28:09 +0800
Subject: [PATCH 224/367] fix ios record
---
go.mod | 2 +-
go.sum | 2 ++
2 files changed, 3 insertions(+), 1 deletion(-)
diff --git a/go.mod b/go.mod
index ec390e3..36930f2 100644
--- a/go.mod
+++ b/go.mod
@@ -22,7 +22,7 @@ require (
github.com/syndtr/goleveldb v1.0.0
github.com/t-tomalak/logrus-easy-formatter v0.0.0-20190827215021-c074f06c5816
github.com/tidwall/gjson v1.6.3
- github.com/wdvxdr1123/go-silk v0.0.0-20201203155442-67728040c843
+ github.com/wdvxdr1123/go-silk v0.0.0-20201210140933-bcdbcb2f1093
github.com/yinghau76/go-ascii-art v0.0.0-20190517192627-e7f465a30189
golang.org/x/time v0.0.0-20200630173020-3af7569d3a1e
)
diff --git a/go.sum b/go.sum
index 59db82a..7ed9b04 100644
--- a/go.sum
+++ b/go.sum
@@ -135,6 +135,8 @@ github.com/ugorji/go/codec v1.1.7 h1:2SvQaVZ1ouYrrKKwoSk2pzd4A9evlKJb9oTL+OaLUSs
github.com/ugorji/go/codec v1.1.7/go.mod h1:Ax+UKWsSmolVDwsd+7N3ZtXu+yMGCf907BLYF3GoBXY=
github.com/wdvxdr1123/go-silk v0.0.0-20201203155442-67728040c843 h1:PRhoPwoTPcB9IDtAj7bEqeGS3SCxZ4xs7/IH35P24jQ=
github.com/wdvxdr1123/go-silk v0.0.0-20201203155442-67728040c843/go.mod h1:5q9LFlBr+yX/J8Jd/9wHdXwkkjFkNyQIS7kX2Lgx/Zs=
+github.com/wdvxdr1123/go-silk v0.0.0-20201210140933-bcdbcb2f1093 h1:t38EBwI2hFJz1sQJ402VqzdA3eMidkY1c3w/8z0SftA=
+github.com/wdvxdr1123/go-silk v0.0.0-20201210140933-bcdbcb2f1093/go.mod h1:5q9LFlBr+yX/J8Jd/9wHdXwkkjFkNyQIS7kX2Lgx/Zs=
github.com/yinghau76/go-ascii-art v0.0.0-20190517192627-e7f465a30189 h1:4UJw9if55Fu3HOwbfcaQlJ27p3oeJU2JZqoeT3ITJQk=
github.com/yinghau76/go-ascii-art v0.0.0-20190517192627-e7f465a30189/go.mod h1:rIrm5geMiBhPQkdfUm8gDFi/WiHneOp1i9KjmJqc+9I=
golang.org/x/crypto v0.0.0-20190308221718-c2843e01d9a2/go.mod h1:djNgcEr1/C05ACkg1iLfiJU5Ep61QUkGW8qpdssI0+w=
From d84b7c423a8f368bf9a2c5e0534ae540e67127f5 Mon Sep 17 00:00:00 2001
From: Ink-33
Date: Fri, 11 Dec 2020 23:32:25 +0800
Subject: [PATCH 225/367] [Break Change]feature: key entry without echoing
Remove unexpected "CR" & "LF" while scaning key. This will cause the previous
encrypted password unusable.
---
go.mod | 31 ++++++++++++++-
go.sum | 114 ++++++++++++++++++++++++++++++++++++++++++++++++++++++--
main.go | 17 ++++-----
3 files changed, 147 insertions(+), 15 deletions(-)
diff --git a/go.mod b/go.mod
index 36930f2..2d70bee 100644
--- a/go.mod
+++ b/go.mod
@@ -5,24 +5,51 @@ go 1.15
require (
github.com/Mrs4s/MiraiGo v0.0.0-20201209180326-c07a8a9c8a83
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/getlantern/ops v0.0.0-20200403153110-8476b16edcd6 // indirect
github.com/gin-contrib/pprof v1.3.0
github.com/gin-gonic/gin v1.6.3
+ github.com/go-playground/validator/v10 v10.4.1 // indirect
+ github.com/golang/snappy v0.0.2 // indirect
+ github.com/google/go-cmp v0.5.4 // indirect
+ github.com/google/uuid v1.1.2 // indirect
github.com/gorilla/websocket v1.4.2
github.com/guonaihong/gout v0.1.3
github.com/hjson/hjson-go v3.1.0+incompatible
+ github.com/jehiah/go-strftime v0.0.0-20171201141054-1d33003b3869 // indirect
+ github.com/jonboulle/clockwork v0.2.2 // indirect
github.com/json-iterator/go v1.1.10
github.com/kardianos/osext v0.0.0-20190222173326-2bc1f35cddc0 // indirect
github.com/kr/binarydist v0.1.0 // indirect
+ github.com/kr/text v0.2.0 // indirect
github.com/lestrrat-go/file-rotatelogs v2.4.0+incompatible
github.com/lestrrat-go/strftime v1.0.3 // indirect
+ github.com/modern-go/concurrent v0.0.0-20180306012644-bacd9c7ef1dd // indirect
+ github.com/modern-go/reflect2 v1.0.1 // indirect
+ github.com/nxadm/tail v1.4.5 // indirect
+ github.com/onsi/ginkgo v1.14.2 // indirect
+ github.com/onsi/gomega v1.10.4 // indirect
github.com/rifflock/lfshook v0.0.0-20180920164130-b9218ef580f5
github.com/sirupsen/logrus v1.7.0
+ github.com/stretchr/testify v1.6.1 // indirect
github.com/syndtr/goleveldb v1.0.0
github.com/t-tomalak/logrus-easy-formatter v0.0.0-20190827215021-c074f06c5816
- github.com/tidwall/gjson v1.6.3
+ github.com/tebeka/strftime v0.1.5 // indirect
+ github.com/tidwall/gjson v1.6.4
+ github.com/tidwall/match v1.0.2 // indirect
+ github.com/ugorji/go v1.2.1 // indirect
github.com/wdvxdr1123/go-silk v0.0.0-20201210140933-bcdbcb2f1093
github.com/yinghau76/go-ascii-art v0.0.0-20190517192627-e7f465a30189
- golang.org/x/time v0.0.0-20200630173020-3af7569d3a1e
+ golang.org/x/crypto v0.0.0-20201208171446-5f87f3452ae9
+ golang.org/x/net v0.0.0-20201209123823-ac852fbbde11 // indirect
+ golang.org/x/sys v0.0.0-20201211090839-8ad439b19e0f // indirect
+ golang.org/x/term v0.0.0-20201210144234-2321bbc49cbf // indirect
+ golang.org/x/text v0.3.4 // indirect
+ golang.org/x/time v0.0.0-20201208040808-7e3f01d25324
+ golang.org/x/xerrors v0.0.0-20200804184101-5ec99f83aff1 // indirect
+ gopkg.in/check.v1 v1.0.0-20201130134442-10cb98267c6c // indirect
+ gopkg.in/yaml.v2 v2.4.0 // indirect
+ gopkg.in/yaml.v3 v3.0.0-20200615113413-eeeca48fe776 // indirect
)
diff --git a/go.sum b/go.sum
index 7ed9b04..1683af5 100644
--- a/go.sum
+++ b/go.sum
@@ -4,13 +4,20 @@ github.com/Mrs4s/MiraiGo v0.0.0-20201209180326-c07a8a9c8a83 h1:9mCmMOTDlQ5reudlu
github.com/Mrs4s/MiraiGo v0.0.0-20201209180326-c07a8a9c8a83/go.mod h1:J1zaJWyeX7hQIPpOobqb8opxTNPbguotudPPrHJMoDM=
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/creack/pty v1.1.9/go.mod h1:oKZEueFk5CKHvIhNR5MUki03XCEU+Q6VDXinZuGJ33E=
github.com/davecgh/go-spew v1.1.0/go.mod h1:J7Y8YcW2NihsgmVo/mv3lAwl/skON4iLHjSsI+c5H38=
+github.com/davecgh/go-spew v1.1.1 h1:vj9j/u1bqnvCEfJOwUhtlOARqs3+rkHYY13jYWTU97c=
github.com/davecgh/go-spew v1.1.1/go.mod h1:J7Y8YcW2NihsgmVo/mv3lAwl/skON4iLHjSsI+c5H38=
github.com/dustin/go-humanize v1.0.0 h1:VSnTsYCnlFHaM2/igO1h6X3HA71jcobQuxemgkq4zYo=
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 h1:IXs+QLmnXW2CcXuY+8Mzv/fWEsPGWxqefPtCP5CnV9I=
github.com/fsnotify/fsnotify v1.4.7/go.mod h1:jwhsz4b93w/PPRr/qN1Yymfu8t87LnFCMoQvtojpjFo=
+github.com/fsnotify/fsnotify v1.4.9 h1:hsms1Qyu0jgnwNXIxa+/V/PDsU6CfLf6CNO8H7IWoS4=
+github.com/fsnotify/fsnotify v1.4.9/go.mod h1:znqG4EE+3YCdAaPaxE2ZRY/06pZUdp0tY4IgpuI1SZQ=
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=
github.com/getlantern/errors v1.0.1 h1:XukU2whlh7OdpxnkXhNH9VTLVz0EVPGKDV5K0oWhvzw=
@@ -25,6 +32,8 @@ github.com/getlantern/hidden v0.0.0-20190325191715-f02dbb02be55 h1:XYzSdCbkzOC0F
github.com/getlantern/hidden v0.0.0-20190325191715-f02dbb02be55/go.mod h1:6mmzY2kW1TOOrVy+r41Za2MxXM+hhqTtY3oBKd2AgFA=
github.com/getlantern/ops v0.0.0-20190325191751-d70cb0d6f85f h1:wrYrQttPS8FHIRSlsrcuKazukx/xqO/PpLZzZXsF+EA=
github.com/getlantern/ops v0.0.0-20190325191751-d70cb0d6f85f/go.mod h1:D5ao98qkA6pxftxoqzibIBBrLSUli+kYnJqrgBf9cIA=
+github.com/getlantern/ops v0.0.0-20200403153110-8476b16edcd6 h1:QthAQCekS1YOeYWSvoHI6ZatlG4B+GBDLxV/2ZkBsTA=
+github.com/getlantern/ops v0.0.0-20200403153110-8476b16edcd6/go.mod h1:D5ao98qkA6pxftxoqzibIBBrLSUli+kYnJqrgBf9cIA=
github.com/gin-contrib/pprof v1.3.0 h1:G9eK6HnbkSqDZBYbzG4wrjCsA4e+cvYAHUZw6W+W9K0=
github.com/gin-contrib/pprof v1.3.0/go.mod h1:waMjT1H9b179t3CxuG1cV3DHpga6ybizwfBaM5OXaB0=
github.com/gin-contrib/sse v0.1.0 h1:Y/yl/+YNO8GZSjAhjMsSuLt29uWRFHdHYUb5lYOV9qE=
@@ -33,6 +42,7 @@ github.com/gin-gonic/gin v1.5.0/go.mod h1:Nd6IXA8m5kNZdNEHMBd93KT+mdY3+bewLgRvmC
github.com/gin-gonic/gin v1.6.2/go.mod h1:75u5sXoLsGZoRN5Sgbi1eraJ4GU3++wFwWzhwvtwp4M=
github.com/gin-gonic/gin v1.6.3 h1:ahKqKTFpO5KTPHxWZjEdPScmYaGtLo8Y4DMHoEsnp14=
github.com/gin-gonic/gin v1.6.3/go.mod h1:75u5sXoLsGZoRN5Sgbi1eraJ4GU3++wFwWzhwvtwp4M=
+github.com/go-playground/assert/v2 v2.0.1 h1:MsBgLAaY856+nPRTKrp3/OZK38U/wa0CcBYNjji3q3A=
github.com/go-playground/assert/v2 v2.0.1/go.mod h1:VDjEfimB/XKnb+ZQfWdccd7VUvScMdVu0Titje2rxJ4=
github.com/go-playground/locales v0.12.1/go.mod h1:IUMDtCfWo/w/mtMfIE/IG2K+Ey3ygWanZIBtBW0W2TM=
github.com/go-playground/locales v0.13.0 h1:HyWk6mgj5qFqCT5fjGBuRArbVDfE4hi8+e8ceBS/t7Q=
@@ -42,6 +52,8 @@ github.com/go-playground/universal-translator v0.17.0 h1:icxd5fm+REJzpZx7ZfpaD87
github.com/go-playground/universal-translator v0.17.0/go.mod h1:UkSxE5sNxxRwHyU+Scu5vgOQjsIJAF8j9muTVoKLVtA=
github.com/go-playground/validator/v10 v10.2.0 h1:KgJ0snyC2R9VXYN2rneOtQcw5aHQB1Vv0sFl1UcHBOY=
github.com/go-playground/validator/v10 v10.2.0/go.mod h1:uOYAAleCW8F/7oMFd6aG0GOhaH6EGOAJShg8Id5JGkI=
+github.com/go-playground/validator/v10 v10.4.1 h1:pH2c5ADXtd66mxoE0Zm9SUhxE20r7aM3F26W0hOn+GE=
+github.com/go-playground/validator/v10 v10.4.1/go.mod h1:nlOn6nFhuKACm19sB/8EGNn9GlaMV7XkbRSipzJ0Ii4=
github.com/go-stack/stack v1.8.0 h1:5SgMzNM5HxrEjV0ww2lTmX6E2Izsfxas4+YHWRs3Lsk=
github.com/go-stack/stack v1.8.0/go.mod h1:v0f6uXyyMGvRgIKkXu+yp6POWl0qKG85gN/melR3HDY=
github.com/golang/glog v0.0.0-20160126235308-23def4e6c14b/go.mod h1:SBH7ygxi8pfUlaOkMMuAQtPIUF8ecWP5IEl/CR7VP2Q=
@@ -55,24 +67,38 @@ github.com/golang/protobuf v1.4.0-rc.2/go.mod h1:LlEzMj4AhA7rCAGe4KMBDvJI+AwstrU
github.com/golang/protobuf v1.4.0-rc.4.0.20200313231945-b860323f09d0/go.mod h1:WU3c8KckQ9AFe+yFwt9sWVRKCVIyN9cPHBJSNnbL67w=
github.com/golang/protobuf v1.4.0/go.mod h1:jodUvKwWbYaEsadDk5Fwe5c77LiNKVO9IDvqG2KuDX0=
github.com/golang/protobuf v1.4.1/go.mod h1:U8fpvMrcmy5pZrNK1lt4xCsGvpyWQ/VVv6QDs8UjoX8=
+github.com/golang/protobuf v1.4.2/go.mod h1:oDoupMAO8OvCJWAcko0GGGIgR6R6ocIYbsSw735rRwI=
github.com/golang/protobuf v1.4.3 h1:JjCZWpVbqXDqFVmTfYWEVTMIYrL/NPdPSCHPJ0T/raM=
github.com/golang/protobuf v1.4.3/go.mod h1:oDoupMAO8OvCJWAcko0GGGIgR6R6ocIYbsSw735rRwI=
github.com/golang/snappy v0.0.0-20180518054509-2e65f85255db h1:woRePGFeVFfLKN/pOkfl+p/TAqKOfFu+7KPlMVpok/w=
github.com/golang/snappy v0.0.0-20180518054509-2e65f85255db/go.mod h1:/XxbfmMg8lxefKM7IXC3fBNl/7bRcc72aCRzEWrmP2Q=
+github.com/golang/snappy v0.0.2 h1:aeE13tS0IiQgFjYdoL8qN3K1N2bXXtI6Vi51/y7BpMw=
+github.com/golang/snappy v0.0.2/go.mod h1:/XxbfmMg8lxefKM7IXC3fBNl/7bRcc72aCRzEWrmP2Q=
github.com/google/go-cmp v0.2.0/go.mod h1:oXzfMopK8JAjlY9xF4vHSVASa0yLyX7SntLO5aqRK0M=
github.com/google/go-cmp v0.3.0/go.mod h1:8QqcDgzrUqlUb/G2PQTWiueGozuR1884gddMywk6iLU=
github.com/google/go-cmp v0.3.1/go.mod h1:8QqcDgzrUqlUb/G2PQTWiueGozuR1884gddMywk6iLU=
github.com/google/go-cmp v0.4.0/go.mod h1:v8dTdLbMG2kIc/vJvl+f65V22dbkXbowE6jgT/gNBxE=
+github.com/google/go-cmp v0.5.0 h1:/QaMHBdZ26BB3SSst0Iwl10Epc+xhTquomWX0oZEB6w=
github.com/google/go-cmp v0.5.0/go.mod h1:v8dTdLbMG2kIc/vJvl+f65V22dbkXbowE6jgT/gNBxE=
+github.com/google/go-cmp v0.5.4 h1:L8R9j+yAqZuZjsqh/z+F1NCffTKKLShY6zXTItVIZ8M=
+github.com/google/go-cmp v0.5.4/go.mod h1:v8dTdLbMG2kIc/vJvl+f65V22dbkXbowE6jgT/gNBxE=
github.com/google/gofuzz v1.0.0/go.mod h1:dBl0BpW6vV/+mYPU4Po3pmUjxk6FQPldtuIdl/M65Eg=
+github.com/google/uuid v1.1.1 h1:Gkbcsh/GbpXz7lPftLA3P6TYMwjCLYm83jiFQZF/3gY=
github.com/google/uuid v1.1.1/go.mod h1:TIyPZe4MgqvfeYDBFedMoGGpEw/LqOeaOT+nhxU+yHo=
+github.com/google/uuid v1.1.2 h1:EVhdT+1Kseyi1/pUmXKaFxYsDNy9RQYkMWRH68J/W7Y=
+github.com/google/uuid v1.1.2/go.mod h1:TIyPZe4MgqvfeYDBFedMoGGpEw/LqOeaOT+nhxU+yHo=
github.com/gorilla/websocket v1.4.2 h1:+/TMaTYc4QFitKJxsQ7Yye35DkWvkdLcvGKqM+x0Ufc=
github.com/gorilla/websocket v1.4.2/go.mod h1:YR8l580nyteQvAITg2hZ9XVh4b55+EU/adAjf1fMHhE=
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/hjson/hjson-go v3.1.0+incompatible h1:DY/9yE8ey8Zv22bY+mHV1uk2yRy0h8tKhZ77hEdi0Aw=
github.com/hjson/hjson-go v3.1.0+incompatible/go.mod h1:qsetwF8NlsTsOTwZTApNlTCerV+b2GjYRRcIk4JMFio=
+github.com/hpcloud/tail v1.0.0 h1:nfCOvKYfkgYP8hkirhJocXT2+zOD8yUNjXaWfTlyFKI=
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/json-iterator/go v1.1.10 h1:Kz6Cvnvv2wGdaG/V8yMvfkmNiXq9Ya2KUv4rouJJr68=
@@ -82,9 +108,17 @@ github.com/kardianos/osext v0.0.0-20190222173326-2bc1f35cddc0/go.mod h1:1NbS8ALr
github.com/konsorten/go-windows-terminal-sequences v1.0.1/go.mod h1:T0+1ngSBFLxvqU3pZ+m/2kptfBszLMUkC4ZK/EgS/cQ=
github.com/kr/binarydist v0.1.0 h1:6kAoLA9FMMnNGSehX0s1PdjbEaACznAv/W219j2uvyo=
github.com/kr/binarydist v0.1.0/go.mod h1:DY7S//GCoz1BCd0B0EVrinCKAZN3pXe+MDaIZbXQVgM=
+github.com/kr/pretty v0.2.1 h1:Fmg33tUaq4/8ym9TJN1x7sLJnHVwhP33CNkpYV/7rwI=
+github.com/kr/pretty v0.2.1/go.mod h1:ipq/a2n7PKx3OHsz4KJII5eveXtPO4qwEXGdVfWzfnI=
+github.com/kr/pty v1.1.1/go.mod h1:pFQYn66WHrOpPYNljwOMqo10TkYh1fy3cYio2l3bCsQ=
+github.com/kr/text v0.1.0 h1:45sCR5RtlFHMR4UwH9sdQ5TC8v0qDQCHnXt+kaKSTVE=
+github.com/kr/text v0.1.0/go.mod h1:4Jbv+DJW3UT/LiOwJeYQe1efqtUx/iVham/4vfdArNI=
+github.com/kr/text v0.2.0 h1:5Nx0Ya0ZqY2ygV366QzturHI13Jq95ApcVaJBhpS+AY=
+github.com/kr/text v0.2.0/go.mod h1:eLer722TekiGuMkidMxC/pM04lWEeraHUUmBw8l2grE=
github.com/leodido/go-urn v1.1.0/go.mod h1:+cyI34gQWZcE1eQU7NVgKkkzdXDQHr1dBMtdAPozLkw=
github.com/leodido/go-urn v1.2.0 h1:hpXL4XnriNwQ/ABnpepYM/1vCLWNDfUNts8dX3xTG6Y=
github.com/leodido/go-urn v1.2.0/go.mod h1:+8+nEpDfqqsY+g338gtMEUOtuK+4dEMhiQEgxpxOKII=
+github.com/lestrrat-go/envload v0.0.0-20180220234015-a3eb8ddeffcc h1:RKf14vYWi2ttpEmkA4aQ3j4u9dStX2t4M8UM6qqNsG8=
github.com/lestrrat-go/envload v0.0.0-20180220234015-a3eb8ddeffcc/go.mod h1:kopuH9ugFRkIXf3YoqHKyrJ9YfUFsckUU9S7B+XP+is=
github.com/lestrrat-go/file-rotatelogs v2.4.0+incompatible h1:Y6sqxHMyB1D2YSzWkLibYKgg+SwmyFU9dF2hn6MdTj4=
github.com/lestrrat-go/file-rotatelogs v2.4.0+incompatible/go.mod h1:ZQnN8lSECaebrkQytbHj4xNgtg8CR7RYXnPok8e0EHA=
@@ -95,18 +129,36 @@ github.com/mattn/go-isatty v0.0.12 h1:wuysRhFDzyxgEmMf5xjvJ2M9dZoWAXNNr5LSBS7uHX
github.com/mattn/go-isatty v0.0.12/go.mod h1:cbi8OIDigv2wuxKPP5vlRcQ1OAZbq2CE4Kysco4FUpU=
github.com/modern-go/concurrent v0.0.0-20180228061459-e0a39a4cb421 h1:ZqeYNhU3OHLH3mGKHDcjJRFFRrJa6eAM5H+CtDdOsPc=
github.com/modern-go/concurrent v0.0.0-20180228061459-e0a39a4cb421/go.mod h1:6dJC0mAP4ikYIbvyc7fijjWJddQyLn8Ig3JB5CqoB9Q=
+github.com/modern-go/concurrent v0.0.0-20180306012644-bacd9c7ef1dd h1:TRLaZ9cD/w8PVh93nsPXa1VrQ6jlwL5oN8l14QlcNfg=
+github.com/modern-go/concurrent v0.0.0-20180306012644-bacd9c7ef1dd/go.mod h1:6dJC0mAP4ikYIbvyc7fijjWJddQyLn8Ig3JB5CqoB9Q=
github.com/modern-go/reflect2 v0.0.0-20180701023420-4b7aa43c6742 h1:Esafd1046DLDQ0W1YjYsBW+p8U2u7vzgW2SQVmlNazg=
github.com/modern-go/reflect2 v0.0.0-20180701023420-4b7aa43c6742/go.mod h1:bx2lNnkwVCuqBIxFjflWJWanXIb3RllmbCylyMrvgv0=
+github.com/modern-go/reflect2 v1.0.1 h1:9f412s+6RmYXLWZSEzVVgPGK7C2PphHj5RJrvfx9AWI=
+github.com/modern-go/reflect2 v1.0.1/go.mod h1:bx2lNnkwVCuqBIxFjflWJWanXIb3RllmbCylyMrvgv0=
github.com/nfnt/resize v0.0.0-20180221191011-83c6a9932646 h1:zYyBkD/k9seD2A7fsi6Oo2LfFZAehjjQMERAvZLEDnQ=
github.com/nfnt/resize v0.0.0-20180221191011-83c6a9932646/go.mod h1:jpp1/29i3P1S/RLdc7JQKbRpFeM1dOBd8T9ki5s+AY8=
+github.com/nxadm/tail v1.4.4 h1:DQuhQpB1tVlglWS2hLQ5OV6B5r8aGxSrPc5Qo6uTN78=
+github.com/nxadm/tail v1.4.4/go.mod h1:kenIhsEOeOJmVchQTgglprH7qJGnHDVpk1VPCcaMI8A=
+github.com/nxadm/tail v1.4.5 h1:obHEce3upls1IBn1gTw/o7bCv7OJb6Ib/o7wNO+4eKw=
+github.com/nxadm/tail v1.4.5/go.mod h1:kenIhsEOeOJmVchQTgglprH7qJGnHDVpk1VPCcaMI8A=
github.com/onsi/ginkgo v1.6.0/go.mod h1:lLunBs/Ym6LB5Z9jYTR76FiuTmxDTDusOGeTQH+WWjE=
+github.com/onsi/ginkgo v1.7.0 h1:WSHQ+IS43OoUrWtD1/bbclrwK8TTH5hzp+umCiuxHgs=
github.com/onsi/ginkgo v1.7.0/go.mod h1:lLunBs/Ym6LB5Z9jYTR76FiuTmxDTDusOGeTQH+WWjE=
+github.com/onsi/ginkgo v1.12.1/go.mod h1:zj2OWP4+oCPe1qIXoGWkgMRwljMUYCdkwsT2108oapk=
+github.com/onsi/ginkgo v1.14.2 h1:8mVmC9kjFFmA8H4pKMUhcblgifdkOIXPvbhN1T36q1M=
+github.com/onsi/ginkgo v1.14.2/go.mod h1:iSB4RoI2tjJc9BBv4NKIKWKya62Rps+oPG/Lv9klQyY=
+github.com/onsi/gomega v1.4.3 h1:RE1xgDvH7imwFD45h+u2SgIfERHlS2yNG4DObb5BSKU=
github.com/onsi/gomega v1.4.3/go.mod h1:ex+gbHU/CVuBBDIJjb2X0qEXbFg53c61hWP/1CpauHY=
+github.com/onsi/gomega v1.7.1/go.mod h1:XdKZgCCFLUoM/7CFJVPcG8C1xQ1AJ0vpAezJrB7JYyY=
+github.com/onsi/gomega v1.10.1/go.mod h1:iN09h71vgCQne3DLsj+A5owkum+a2tYe+TOCB1ybHNo=
+github.com/onsi/gomega v1.10.4 h1:NiTx7EEvBzu9sFOD1zORteLSt3o8gnlvZZwSE9TnY9U=
+github.com/onsi/gomega v1.10.4/go.mod h1:g/HbgYopi++010VEqkFgJHKC09uJiW9UkXvMUuKHUCQ=
github.com/oxtoacart/bpool v0.0.0-20190530202638-03653db5a59c h1:rp5dCmg/yLR3mgFuSOe4oEnDDmGLROTvMragMUXpTQw=
github.com/oxtoacart/bpool v0.0.0-20190530202638-03653db5a59c/go.mod h1:X07ZCGwUbLaax7L0S3Tw4hpejzu63ZrrQiUe6W0hcy0=
github.com/pkg/errors v0.8.1/go.mod h1:bwawxfHBFNV+L2hUp1rHADufV3IMtnDRdf1r5NINEl0=
github.com/pkg/errors v0.9.1 h1:FEBLx1zS214owpjy7qsBeixbURkuhQAwrK5UwLGTwt4=
github.com/pkg/errors v0.9.1/go.mod h1:bwawxfHBFNV+L2hUp1rHADufV3IMtnDRdf1r5NINEl0=
+github.com/pmezard/go-difflib v1.0.0 h1:4DBwDE0NGyQoBHbLQYPwSUPoCMWR5BEzIk/f1lZbAQM=
github.com/pmezard/go-difflib v1.0.0/go.mod h1:iKH77koFhYxTK1pcRnkKkqfTogsbg7gZNVY4sRDYZ/4=
github.com/prometheus/client_model v0.0.0-20190812154241-14fe0d1b01d4/go.mod h1:xMI15A0UPsDsEKsMN9yxemIoYk6Tm2C1GtYGdfGttqA=
github.com/rifflock/lfshook v0.0.0-20180920164130-b9218ef580f5 h1:mZHayPoR0lNmnHyvtYjDeq0zlVHn9K/ZXoy17ylucdo=
@@ -118,28 +170,42 @@ github.com/stretchr/objx v0.1.0/go.mod h1:HFkY916IF+rwdDfMAkV7OtwuqBVzrE8GR6GFx+
github.com/stretchr/objx v0.1.1/go.mod h1:HFkY916IF+rwdDfMAkV7OtwuqBVzrE8GR6GFx+wExME=
github.com/stretchr/testify v1.2.2/go.mod h1:a8OnRcib4nhh0OaRAV+Yts87kKdq0PP7pXfy6kDkUVs=
github.com/stretchr/testify v1.3.0/go.mod h1:M5WIy9Dh21IEIfnGCwXGc5bZfKNJtfHm1UVUgZn+9EI=
+github.com/stretchr/testify v1.4.0 h1:2E4SXV/wtOkTonXsotYi4li6zVWxYlZuYNCXe9XRJyk=
github.com/stretchr/testify v1.4.0/go.mod h1:j7eGeouHqKxXV5pUuKE4zz7dFj8WfuZ+81PSLYec5m4=
+github.com/stretchr/testify v1.6.1 h1:hDPOHmpOpP40lSULcqw7IrRb/u7w6RpDC9399XyoNd0=
+github.com/stretchr/testify v1.6.1/go.mod h1:6Fq8oRcR53rry900zMqJjRRixrwX3KX962/h/Wwjteg=
github.com/syndtr/goleveldb v1.0.0 h1:fBdIW9lB4Iz0n9khmH8w27SJ3QEJ7+IgjPEwGSZiFdE=
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.3 h1:aHoiiem0dr7GHkW001T1SMTJ7X5PvyekH5WX0whWGnI=
github.com/tidwall/gjson v1.6.3/go.mod h1:BaHyNc5bjzYkPqgLq7mdVzeiRtULKULXLgZFKsxEHI0=
+github.com/tidwall/gjson v1.6.4 h1:JKsCsJqRVFz8eYCsQ5E/ANRbK6CanAtA9IUvGsXklyo=
+github.com/tidwall/gjson v1.6.4/go.mod h1:BaHyNc5bjzYkPqgLq7mdVzeiRtULKULXLgZFKsxEHI0=
github.com/tidwall/match v1.0.1 h1:PnKP62LPNxHKTwvHHZZzdOAOCtsJTjo6dZLCwpKm5xc=
github.com/tidwall/match v1.0.1/go.mod h1:LujAq0jyVjBy028G1WhWfIzbpQfMO8bBZ6Tyb0+pL9E=
+github.com/tidwall/match v1.0.2 h1:uuqvHuBGSedK7awZ2YoAtpnimfwBGFjHuWLuLqQj+bU=
+github.com/tidwall/match v1.0.2/go.mod h1:LujAq0jyVjBy028G1WhWfIzbpQfMO8bBZ6Tyb0+pL9E=
github.com/tidwall/pretty v1.0.2 h1:Z7S3cePv9Jwm1KwS0513MRaoUe3S01WPbLNV40pwWZU=
github.com/tidwall/pretty v1.0.2/go.mod h1:XNkn88O1ChpSDQmQeStsy+sBenx6DDtFZJxhVysOjyk=
github.com/ugorji/go v1.1.7 h1:/68gy2h+1mWMrwZFeD1kQialdSzAb432dtpeJ42ovdo=
github.com/ugorji/go v1.1.7/go.mod h1:kZn38zHttfInRq0xu/PH0az30d+z6vm202qpg1oXVMw=
+github.com/ugorji/go v1.2.1 h1:dz+JxTe7GZQdErTo7SREc1jQj/hFP1k7jyIAwODoW+k=
+github.com/ugorji/go v1.2.1/go.mod h1:cSVypSfTLm2o9fKxXvQgn3rMmkPXovcWor6Qn5tbFmI=
github.com/ugorji/go/codec v1.1.7 h1:2SvQaVZ1ouYrrKKwoSk2pzd4A9evlKJb9oTL+OaLUSs=
github.com/ugorji/go/codec v1.1.7/go.mod h1:Ax+UKWsSmolVDwsd+7N3ZtXu+yMGCf907BLYF3GoBXY=
-github.com/wdvxdr1123/go-silk v0.0.0-20201203155442-67728040c843 h1:PRhoPwoTPcB9IDtAj7bEqeGS3SCxZ4xs7/IH35P24jQ=
-github.com/wdvxdr1123/go-silk v0.0.0-20201203155442-67728040c843/go.mod h1:5q9LFlBr+yX/J8Jd/9wHdXwkkjFkNyQIS7kX2Lgx/Zs=
+github.com/ugorji/go/codec v1.2.1 h1:/TRfW3XKkvWvmAYyCUaQlhoCDGjcvNR8xVVA/l5p/jQ=
+github.com/ugorji/go/codec v1.2.1/go.mod h1:s/WxCRi46t8rA+fowL40EnmD7ec0XhR7ZypxeBNdzsM=
github.com/wdvxdr1123/go-silk v0.0.0-20201210140933-bcdbcb2f1093 h1:t38EBwI2hFJz1sQJ402VqzdA3eMidkY1c3w/8z0SftA=
github.com/wdvxdr1123/go-silk v0.0.0-20201210140933-bcdbcb2f1093/go.mod h1:5q9LFlBr+yX/J8Jd/9wHdXwkkjFkNyQIS7kX2Lgx/Zs=
github.com/yinghau76/go-ascii-art v0.0.0-20190517192627-e7f465a30189 h1:4UJw9if55Fu3HOwbfcaQlJ27p3oeJU2JZqoeT3ITJQk=
github.com/yinghau76/go-ascii-art v0.0.0-20190517192627-e7f465a30189/go.mod h1:rIrm5geMiBhPQkdfUm8gDFi/WiHneOp1i9KjmJqc+9I=
golang.org/x/crypto v0.0.0-20190308221718-c2843e01d9a2/go.mod h1:djNgcEr1/C05ACkg1iLfiJU5Ep61QUkGW8qpdssI0+w=
+golang.org/x/crypto v0.0.0-20200622213623-75b288015ac9/go.mod h1:LzIPMQfyMNhhGPhUkYOs5KpL4U8rLKemX1yGLhDgUto=
+golang.org/x/crypto v0.0.0-20201208171446-5f87f3452ae9 h1:sYNJzB4J8toYPQTM6pAkcmBRgw9SnQKP9oXCHfgy604=
+golang.org/x/crypto v0.0.0-20201208171446-5f87f3452ae9/go.mod h1:jdWPYTVW3xRLrWPugEBEK3UY2ZEsg3UU495nc5E+M+I=
golang.org/x/exp v0.0.0-20190121172915-509febef88a4/go.mod h1:CJ0aWSM057203Lf6IL+f9T1iT9GByDxfZKAQTCR3kQA=
golang.org/x/lint v0.0.0-20181026193005-c67002cb31c3/go.mod h1:UVdnD1Gm6xHRNCYTkRU2/jEulfH38KcIWyp/GAMgvoE=
golang.org/x/lint v0.0.0-20190227174305-5b3e6a55c961/go.mod h1:wehouNa3lNwaWXcvxsM5YxQ5yQlVC4a0KAMCusXpPoU=
@@ -149,8 +215,13 @@ golang.org/x/net v0.0.0-20180826012351-8a410e7b638d/go.mod h1:mL1N/T3taQHkDXs73r
golang.org/x/net v0.0.0-20180906233101-161cd47e91fd/go.mod h1:mL1N/T3taQHkDXs73rZJwtUhF3w3ftmwwsq0BUmARs4=
golang.org/x/net v0.0.0-20190213061140-3a22650c66bd/go.mod h1:mL1N/T3taQHkDXs73rZJwtUhF3w3ftmwwsq0BUmARs4=
golang.org/x/net v0.0.0-20190311183353-d8887717615a/go.mod h1:t9HGtf8HONx5eT2rtn7q6eTqICYqUVnKs3thJo3Qplg=
+golang.org/x/net v0.0.0-20190404232315-eb5bcb51f2a3/go.mod h1:t9HGtf8HONx5eT2rtn7q6eTqICYqUVnKs3thJo3Qplg=
golang.org/x/net v0.0.0-20200114155413-6afb5195e5aa h1:F+8P+gmewFQYRk6JoLQLwjBCTu3mcIURZfNkVweuRKA=
golang.org/x/net v0.0.0-20200114155413-6afb5195e5aa/go.mod h1:z5CRVTTTmAJ677TzLLGU+0bjPO0LkuOLi4/5GtJWs/s=
+golang.org/x/net v0.0.0-20200520004742-59133d7f0dd7/go.mod h1:qpuaurCH72eLCgpAm/N6yyVIVM9cpaDIP3A8BGJEC5A=
+golang.org/x/net v0.0.0-20201202161906-c7110b5ffcbb/go.mod h1:sp8m0HH+o8qH0wwXwYZr8TS3Oi6o0r6Gce1SSxlDquU=
+golang.org/x/net v0.0.0-20201209123823-ac852fbbde11 h1:lwlPPsmjDKK0J6eG6xDWd5XPehI0R024zxjDnw3esPA=
+golang.org/x/net v0.0.0-20201209123823-ac852fbbde11/go.mod h1:m0MpNAwzfU5UDzcl9v0D8zg8gWTRqZa9RBIspLL5mdg=
golang.org/x/oauth2 v0.0.0-20180821212333-d2e6202438be/go.mod h1:N/0e6XlmueqKjAGxoOufVs8QHGRruUQn6yWY3a++T0U=
golang.org/x/sync v0.0.0-20180314180146-1d60e4601c6f/go.mod h1:RxMgew5VJxzue5/jJTE5uejpjVlOe/izrB70Jof72aM=
golang.org/x/sync v0.0.0-20181108010431-42b317875d0f/go.mod h1:RxMgew5VJxzue5/jJTE5uejpjVlOe/izrB70Jof72aM=
@@ -158,21 +229,43 @@ golang.org/x/sync v0.0.0-20190423024810-112230192c58/go.mod h1:RxMgew5VJxzue5/jJ
golang.org/x/sys v0.0.0-20180830151530-49385e6e1522/go.mod h1:STP8DvDyc/dI5b8T5hshtkjS+E42TnysNCUPdjciGhY=
golang.org/x/sys v0.0.0-20180909124046-d0be0721c37e/go.mod h1:STP8DvDyc/dI5b8T5hshtkjS+E42TnysNCUPdjciGhY=
golang.org/x/sys v0.0.0-20190215142949-d0b11bdaac8a/go.mod h1:STP8DvDyc/dI5b8T5hshtkjS+E42TnysNCUPdjciGhY=
+golang.org/x/sys v0.0.0-20190412213103-97732733099d/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs=
golang.org/x/sys v0.0.0-20190422165155-953cdadca894/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs=
golang.org/x/sys v0.0.0-20190813064441-fde4db37ae7a/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs=
+golang.org/x/sys v0.0.0-20190904154756-749cb33beabd/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs=
+golang.org/x/sys v0.0.0-20191005200804-aed5e4c7ecf9/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs=
golang.org/x/sys v0.0.0-20191026070338-33540a1f6037/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs=
+golang.org/x/sys v0.0.0-20191120155948-bd437916bb0e/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs=
golang.org/x/sys v0.0.0-20200116001909-b77594299b42 h1:vEOn+mP2zCOVzKckCZy6YsCtDblrpj/w7B9nxGNELpg=
golang.org/x/sys v0.0.0-20200116001909-b77594299b42/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs=
+golang.org/x/sys v0.0.0-20200323222414-85ca7c5b95cd/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs=
+golang.org/x/sys v0.0.0-20200519105757-fe76b779f299/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs=
+golang.org/x/sys v0.0.0-20200930185726-fdedc70b468f/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs=
+golang.org/x/sys v0.0.0-20201119102817-f84b799fce68/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs=
+golang.org/x/sys v0.0.0-20201211090839-8ad439b19e0f h1:QdHQnPce6K4XQewki9WNbG5KOROuDzqO3NaYjI1cXJ0=
+golang.org/x/sys v0.0.0-20201211090839-8ad439b19e0f/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs=
+golang.org/x/term v0.0.0-20201117132131-f5c789dd3221/go.mod h1:Nr5EML6q2oocZ2LXRh80K7BxOlk5/8JxuGnuhpl+muw=
+golang.org/x/term v0.0.0-20201126162022-7de9c90e9dd1 h1:v+OssWQX+hTHEmOBgwxdZxK4zHq3yOs8F9J7mk0PY8E=
+golang.org/x/term v0.0.0-20201126162022-7de9c90e9dd1/go.mod h1:bj7SfCRtBDWHUb9snDiAeCFNEtKQo2Wmx5Cou7ajbmo=
+golang.org/x/term v0.0.0-20201210144234-2321bbc49cbf h1:MZ2shdL+ZM/XzY3ZGOnh4Nlpnxz5GSOhOmtHo3iPU6M=
+golang.org/x/term v0.0.0-20201210144234-2321bbc49cbf/go.mod h1:bj7SfCRtBDWHUb9snDiAeCFNEtKQo2Wmx5Cou7ajbmo=
golang.org/x/text v0.3.0/go.mod h1:NqM8EUOU14njkJ3fqMW+pc6Ldnwhi/IjpwHt7yyuwOQ=
+golang.org/x/text v0.3.2 h1:tW2bmiBqwgJj/UpqtC8EpXEZVYOwU0yG4iWbprSVAcs=
golang.org/x/text v0.3.2/go.mod h1:bEr9sfX3Q8Zfm5fL9x+3itogRgK3+ptLWKqgva+5dAk=
-golang.org/x/time v0.0.0-20200630173020-3af7569d3a1e h1:EHBhcS0mlXEAVwNyO2dLfjToGsyY4j24pTs2ScHnX7s=
-golang.org/x/time v0.0.0-20200630173020-3af7569d3a1e/go.mod h1:tRJNPiyCQ0inRvYxbN9jk5I+vvW/OXSQhTDSoE431IQ=
+golang.org/x/text v0.3.3/go.mod h1:5Zoc/QRtKVWzQhOtBMvqHzDpF6irO9z98xDceosuGiQ=
+golang.org/x/text v0.3.4 h1:0YWbFKbhXG/wIiuHDSKpS0Iy7FSA+u45VtBMfQcFTTc=
+golang.org/x/text v0.3.4/go.mod h1:5Zoc/QRtKVWzQhOtBMvqHzDpF6irO9z98xDceosuGiQ=
+golang.org/x/time v0.0.0-20201208040808-7e3f01d25324 h1:Hir2P/De0WpUhtrKGGjvSb2YxUgyZ7EFOSLIcSSpiwE=
+golang.org/x/time v0.0.0-20201208040808-7e3f01d25324/go.mod h1:tRJNPiyCQ0inRvYxbN9jk5I+vvW/OXSQhTDSoE431IQ=
golang.org/x/tools v0.0.0-20180917221912-90fa682c2a6e/go.mod h1:n7NCudcB/nEzxVGmLbDWY5pfWTLqBcC2KZ6jyYvM4mQ=
golang.org/x/tools v0.0.0-20190114222345-bf090417da8b/go.mod h1:n7NCudcB/nEzxVGmLbDWY5pfWTLqBcC2KZ6jyYvM4mQ=
golang.org/x/tools v0.0.0-20190226205152-f727befe758c/go.mod h1:9Yl7xja0Znq3iFh3HoIrodX9oNMXvdceNzlUR8zjMvY=
golang.org/x/tools v0.0.0-20190311212946-11955173bddd/go.mod h1:LCzVGOaR6xXOjkQ3onu1FJEFr0SW1gC7cKk1uF8kGRs=
golang.org/x/tools v0.0.0-20190524140312-2c0ae7006135/go.mod h1:RgjU9mgBXZiqYHBnxXauZ1Gv1EHHAz9KjViQ78xBX0Q=
+golang.org/x/xerrors v0.0.0-20191204190536-9bdfabe68543 h1:E7g+9GITq07hpfrRu66IVDexMakfv52eLZ2CXBWiKr4=
golang.org/x/xerrors v0.0.0-20191204190536-9bdfabe68543/go.mod h1:I/5z698sn9Ka8TeJc9MKroUUfqBBauWjQqLJ2OPfmY0=
+golang.org/x/xerrors v0.0.0-20200804184101-5ec99f83aff1 h1:go1bK/D/BFZV2I8cIQd1NKEZ+0owSTG1fDTci4IqFcE=
+golang.org/x/xerrors v0.0.0-20200804184101-5ec99f83aff1/go.mod h1:I/5z698sn9Ka8TeJc9MKroUUfqBBauWjQqLJ2OPfmY0=
google.golang.org/appengine v1.1.0/go.mod h1:EbEs0AVv82hx2wNQdGPgUI5lhzA/G0D9YwlJXL52JkM=
google.golang.org/appengine v1.4.0/go.mod h1:xpcJRLb0r/rnEns0DIKYYv+WjYCduHsrkT7/EB5XEv4=
google.golang.org/genproto v0.0.0-20180817151627-c66870c02cf8/go.mod h1:JiN7NxoALGmiZfu7CAH4rXhgtRTLTxftemlI0sWmxmc=
@@ -191,14 +284,27 @@ google.golang.org/protobuf v1.23.0/go.mod h1:EGpADcykh3NcUnDUJcl1+ZksZNG86OlYog2
google.golang.org/protobuf v1.23.1-0.20200526195155-81db48ad09cc/go.mod h1:EGpADcykh3NcUnDUJcl1+ZksZNG86OlYog2l/sGQquU=
google.golang.org/protobuf v1.25.0 h1:Ejskq+SyPohKW+1uil0JJMtmHCgJPJ/qWTxr8qp+R4c=
google.golang.org/protobuf v1.25.0/go.mod h1:9JNX74DMeImyA3h4bdi1ymwjUzf21/xIlbajtzgsN7c=
+gopkg.in/check.v1 v0.0.0-20161208181325-20d25e280405 h1:yhCVgyC4o1eVCa2tZl7eS0r+SDo693bJlVdllGtEeKM=
gopkg.in/check.v1 v0.0.0-20161208181325-20d25e280405/go.mod h1:Co6ibVJAznAaIkqp8huTwlJQCZ016jof/cbN4VW5Yz0=
+gopkg.in/check.v1 v1.0.0-20201130134442-10cb98267c6c h1:Hei/4ADfdWqJk1ZMxUNpqntNwaWcugrBjAiHlqqRiVk=
+gopkg.in/check.v1 v1.0.0-20201130134442-10cb98267c6c/go.mod h1:JHkPIbrfpd72SG/EVd6muEfDQjcINNoR0C8j2r3qZ4Q=
+gopkg.in/fsnotify.v1 v1.4.7 h1:xOHLXZwVvI9hhs+cLKq5+I5onOuwQLhQwiu63xxlHs4=
gopkg.in/fsnotify.v1 v1.4.7/go.mod h1:Tz8NjZHkW78fSQdbUxIjBTcgA1z1m8ZHf0WmKUhAMys=
gopkg.in/go-playground/assert.v1 v1.2.1/go.mod h1:9RXL0bg/zibRAgZUYszZSwO/z8Y/a8bDuhia5mkpMnE=
gopkg.in/go-playground/validator.v9 v9.29.1/go.mod h1:+c9/zcJMFNgbLvly1L1V+PpxWdVbfP1avr/N00E2vyQ=
+gopkg.in/tomb.v1 v1.0.0-20141024135613-dd632973f1e7 h1:uRGJdciOHaEIrze2W8Q3AKkepLTh2hOroT7a+7czfdQ=
gopkg.in/tomb.v1 v1.0.0-20141024135613-dd632973f1e7/go.mod h1:dt/ZhP58zS4L8KSrWDmTeBkI65Dw0HsyUHuEVlX15mw=
gopkg.in/yaml.v2 v2.2.1/go.mod h1:hI93XBmqTisBFMUTm0b8Fm+jr3Dg1NNxqwp+5A1VGuI=
gopkg.in/yaml.v2 v2.2.2/go.mod h1:hI93XBmqTisBFMUTm0b8Fm+jr3Dg1NNxqwp+5A1VGuI=
+gopkg.in/yaml.v2 v2.2.4/go.mod h1:hI93XBmqTisBFMUTm0b8Fm+jr3Dg1NNxqwp+5A1VGuI=
gopkg.in/yaml.v2 v2.2.8 h1:obN1ZagJSUGI0Ek/LBmuj4SNLPfIny3KsKFopxRdj10=
gopkg.in/yaml.v2 v2.2.8/go.mod h1:hI93XBmqTisBFMUTm0b8Fm+jr3Dg1NNxqwp+5A1VGuI=
+gopkg.in/yaml.v2 v2.3.0/go.mod h1:hI93XBmqTisBFMUTm0b8Fm+jr3Dg1NNxqwp+5A1VGuI=
+gopkg.in/yaml.v2 v2.4.0 h1:D8xgwECY7CYvx+Y2n4sBz93Jn9JRvxdiyyo8CTfuKaY=
+gopkg.in/yaml.v2 v2.4.0/go.mod h1:RDklbk79AGWmwhnvt/jBztapEOGDOx6ZbXqjP6csGnQ=
+gopkg.in/yaml.v3 v3.0.0-20200313102051-9f266ea9e77c h1:dUUwHk2QECo/6vqA44rthZ8ie2QXMNeKRTHCNY2nXvo=
+gopkg.in/yaml.v3 v3.0.0-20200313102051-9f266ea9e77c/go.mod h1:K4uyk7z7BCEPqu6E+C64Yfv1cQ7kz7rIZviUmN+EgEM=
+gopkg.in/yaml.v3 v3.0.0-20200615113413-eeeca48fe776 h1:tQIYjPdBoyREyB9XMu+nnTclpTYkz2zFM+lzLJFO4gQ=
+gopkg.in/yaml.v3 v3.0.0-20200615113413-eeeca48fe776/go.mod h1:K4uyk7z7BCEPqu6E+C64Yfv1cQ7kz7rIZviUmN+EgEM=
honnef.co/go/tools v0.0.0-20190102054323-c2f93a96b099/go.mod h1:rf3lG4BRIbNafJWhAfAdb/ePZxsR/4RtNHQocxwk9r4=
honnef.co/go/tools v0.0.0-20190523083050-ea95bdfd59fc/go.mod h1:rf3lG4BRIbNafJWhAfAdb/ePZxsR/4RtNHQocxwk9r4=
diff --git a/main.go b/main.go
index 77e317f..14d3f0b 100644
--- a/main.go
+++ b/main.go
@@ -21,6 +21,7 @@ import (
"github.com/Mrs4s/go-cqhttp/server"
"github.com/guonaihong/gout"
"github.com/tidwall/gjson"
+ "golang.org/x/crypto/ssh/terminal"
"github.com/Mrs4s/MiraiGo/binary"
"github.com/Mrs4s/MiraiGo/client"
@@ -97,8 +98,7 @@ func init() {
}
func main() {
- console := bufio.NewReader(os.Stdin)
- var strKey string
+ var byteKey []byte
var isFastStart bool = false
arg := os.Args
if len(arg) > 1 {
@@ -113,8 +113,7 @@ func main() {
case "key":
if len(arg) > i+1 {
b := []byte(arg[i+1])
- b = append(b, 13, 10)
- strKey = string(b[:])
+ byteKey = b
}
case "faststart":
isFastStart = true
@@ -232,8 +231,8 @@ func main() {
}
if conf.EncryptPassword && conf.PasswordEncrypted == "" {
log.Infof("密码加密已启用, 请输入Key对密码进行加密: (Enter 提交)")
- strKey, _ := console.ReadString('\n')
- key := md5.Sum([]byte(strKey))
+ byteKey, _ := terminal.ReadPassword(int(os.Stdin.Fd()))
+ key := md5.Sum(byteKey)
if encrypted := EncryptPwd(conf.Password, key[:]); encrypted != "" {
conf.Password = ""
conf.PasswordEncrypted = encrypted
@@ -243,7 +242,7 @@ func main() {
}
}
if conf.PasswordEncrypted != "" {
- if strKey == "" {
+ if len(byteKey) == 0 {
log.Infof("密码加密已启用, 请输入Key对密码进行解密以继续: (Enter 提交)")
cancel := make(chan struct{}, 1)
go func() {
@@ -256,12 +255,12 @@ func main() {
os.Exit(0)
}
}()
- strKey, _ = console.ReadString('\n')
+ byteKey, _ = terminal.ReadPassword(int(os.Stdin.Fd()))
cancel <- struct{}{}
} else {
log.Infof("密码加密已启用, 使用运行时传递的参数进行解密,按 Ctrl+C 取消.")
}
- key := md5.Sum([]byte(strKey))
+ key := md5.Sum(byteKey)
conf.Password = DecryptPwd(conf.PasswordEncrypted, key[:])
}
if !isFastStart {
From 370e08ad7e47b6b2124631eff571bb20d203c4ce Mon Sep 17 00:00:00 2001
From: Mrs4s <1844812067@qq.com>
Date: Sat, 12 Dec 2020 21:44:39 +0800
Subject: [PATCH 226/367] update MiraiGo.
---
go.mod | 28 +--------------
go.sum | 109 +++------------------------------------------------------
2 files changed, 5 insertions(+), 132 deletions(-)
diff --git a/go.mod b/go.mod
index 2d70bee..5b8d40e 100644
--- a/go.mod
+++ b/go.mod
@@ -3,53 +3,27 @@ module github.com/Mrs4s/go-cqhttp
go 1.15
require (
- github.com/Mrs4s/MiraiGo v0.0.0-20201209180326-c07a8a9c8a83
+ github.com/Mrs4s/MiraiGo v0.0.0-20201212132428-af0230171ee1
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/getlantern/ops v0.0.0-20200403153110-8476b16edcd6 // indirect
github.com/gin-contrib/pprof v1.3.0
github.com/gin-gonic/gin v1.6.3
- github.com/go-playground/validator/v10 v10.4.1 // indirect
- github.com/golang/snappy v0.0.2 // indirect
- github.com/google/go-cmp v0.5.4 // indirect
- github.com/google/uuid v1.1.2 // indirect
github.com/gorilla/websocket v1.4.2
github.com/guonaihong/gout v0.1.3
github.com/hjson/hjson-go v3.1.0+incompatible
- github.com/jehiah/go-strftime v0.0.0-20171201141054-1d33003b3869 // indirect
- github.com/jonboulle/clockwork v0.2.2 // indirect
github.com/json-iterator/go v1.1.10
github.com/kardianos/osext v0.0.0-20190222173326-2bc1f35cddc0 // indirect
github.com/kr/binarydist v0.1.0 // indirect
- github.com/kr/text v0.2.0 // indirect
github.com/lestrrat-go/file-rotatelogs v2.4.0+incompatible
github.com/lestrrat-go/strftime v1.0.3 // indirect
- github.com/modern-go/concurrent v0.0.0-20180306012644-bacd9c7ef1dd // indirect
- github.com/modern-go/reflect2 v1.0.1 // indirect
- github.com/nxadm/tail v1.4.5 // indirect
- github.com/onsi/ginkgo v1.14.2 // indirect
- github.com/onsi/gomega v1.10.4 // indirect
github.com/rifflock/lfshook v0.0.0-20180920164130-b9218ef580f5
github.com/sirupsen/logrus v1.7.0
- github.com/stretchr/testify v1.6.1 // indirect
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.4
- github.com/tidwall/match v1.0.2 // indirect
- github.com/ugorji/go v1.2.1 // indirect
github.com/wdvxdr1123/go-silk v0.0.0-20201210140933-bcdbcb2f1093
github.com/yinghau76/go-ascii-art v0.0.0-20190517192627-e7f465a30189
golang.org/x/crypto v0.0.0-20201208171446-5f87f3452ae9
- golang.org/x/net v0.0.0-20201209123823-ac852fbbde11 // indirect
- golang.org/x/sys v0.0.0-20201211090839-8ad439b19e0f // indirect
- golang.org/x/term v0.0.0-20201210144234-2321bbc49cbf // indirect
- golang.org/x/text v0.3.4 // indirect
golang.org/x/time v0.0.0-20201208040808-7e3f01d25324
- golang.org/x/xerrors v0.0.0-20200804184101-5ec99f83aff1 // indirect
- gopkg.in/check.v1 v1.0.0-20201130134442-10cb98267c6c // indirect
- gopkg.in/yaml.v2 v2.4.0 // indirect
- gopkg.in/yaml.v3 v3.0.0-20200615113413-eeeca48fe776 // indirect
)
diff --git a/go.sum b/go.sum
index 1683af5..7d2b049 100644
--- a/go.sum
+++ b/go.sum
@@ -1,23 +1,16 @@
cloud.google.com/go v0.26.0/go.mod h1:aQUYkXzVsufM+DwF1aE+0xfcU+56JwCaLick0ClmMTw=
github.com/BurntSushi/toml v0.3.1/go.mod h1:xHWCNGjB5oqiDr8zfno3MHue2Ht5sIBksp03qcyfWMU=
-github.com/Mrs4s/MiraiGo v0.0.0-20201209180326-c07a8a9c8a83 h1:9mCmMOTDlQ5reudlum8JAjmrsqSdG0692/BgOIuPIhs=
-github.com/Mrs4s/MiraiGo v0.0.0-20201209180326-c07a8a9c8a83/go.mod h1:J1zaJWyeX7hQIPpOobqb8opxTNPbguotudPPrHJMoDM=
+github.com/Mrs4s/MiraiGo v0.0.0-20201212132428-af0230171ee1 h1:NA46lAqHDhrXMRBjHmnnDDyEbv6d5Ajh4UyO1Dqra7U=
+github.com/Mrs4s/MiraiGo v0.0.0-20201212132428-af0230171ee1/go.mod h1:o+me0DWqTbZU4Xmu2D1gIpCditlwt+vMTNZmjvApf5Y=
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/creack/pty v1.1.9/go.mod h1:oKZEueFk5CKHvIhNR5MUki03XCEU+Q6VDXinZuGJ33E=
github.com/davecgh/go-spew v1.1.0/go.mod h1:J7Y8YcW2NihsgmVo/mv3lAwl/skON4iLHjSsI+c5H38=
-github.com/davecgh/go-spew v1.1.1 h1:vj9j/u1bqnvCEfJOwUhtlOARqs3+rkHYY13jYWTU97c=
github.com/davecgh/go-spew v1.1.1/go.mod h1:J7Y8YcW2NihsgmVo/mv3lAwl/skON4iLHjSsI+c5H38=
github.com/dustin/go-humanize v1.0.0 h1:VSnTsYCnlFHaM2/igO1h6X3HA71jcobQuxemgkq4zYo=
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 h1:IXs+QLmnXW2CcXuY+8Mzv/fWEsPGWxqefPtCP5CnV9I=
github.com/fsnotify/fsnotify v1.4.7/go.mod h1:jwhsz4b93w/PPRr/qN1Yymfu8t87LnFCMoQvtojpjFo=
-github.com/fsnotify/fsnotify v1.4.9 h1:hsms1Qyu0jgnwNXIxa+/V/PDsU6CfLf6CNO8H7IWoS4=
-github.com/fsnotify/fsnotify v1.4.9/go.mod h1:znqG4EE+3YCdAaPaxE2ZRY/06pZUdp0tY4IgpuI1SZQ=
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=
github.com/getlantern/errors v1.0.1 h1:XukU2whlh7OdpxnkXhNH9VTLVz0EVPGKDV5K0oWhvzw=
@@ -32,8 +25,6 @@ github.com/getlantern/hidden v0.0.0-20190325191715-f02dbb02be55 h1:XYzSdCbkzOC0F
github.com/getlantern/hidden v0.0.0-20190325191715-f02dbb02be55/go.mod h1:6mmzY2kW1TOOrVy+r41Za2MxXM+hhqTtY3oBKd2AgFA=
github.com/getlantern/ops v0.0.0-20190325191751-d70cb0d6f85f h1:wrYrQttPS8FHIRSlsrcuKazukx/xqO/PpLZzZXsF+EA=
github.com/getlantern/ops v0.0.0-20190325191751-d70cb0d6f85f/go.mod h1:D5ao98qkA6pxftxoqzibIBBrLSUli+kYnJqrgBf9cIA=
-github.com/getlantern/ops v0.0.0-20200403153110-8476b16edcd6 h1:QthAQCekS1YOeYWSvoHI6ZatlG4B+GBDLxV/2ZkBsTA=
-github.com/getlantern/ops v0.0.0-20200403153110-8476b16edcd6/go.mod h1:D5ao98qkA6pxftxoqzibIBBrLSUli+kYnJqrgBf9cIA=
github.com/gin-contrib/pprof v1.3.0 h1:G9eK6HnbkSqDZBYbzG4wrjCsA4e+cvYAHUZw6W+W9K0=
github.com/gin-contrib/pprof v1.3.0/go.mod h1:waMjT1H9b179t3CxuG1cV3DHpga6ybizwfBaM5OXaB0=
github.com/gin-contrib/sse v0.1.0 h1:Y/yl/+YNO8GZSjAhjMsSuLt29uWRFHdHYUb5lYOV9qE=
@@ -42,7 +33,6 @@ github.com/gin-gonic/gin v1.5.0/go.mod h1:Nd6IXA8m5kNZdNEHMBd93KT+mdY3+bewLgRvmC
github.com/gin-gonic/gin v1.6.2/go.mod h1:75u5sXoLsGZoRN5Sgbi1eraJ4GU3++wFwWzhwvtwp4M=
github.com/gin-gonic/gin v1.6.3 h1:ahKqKTFpO5KTPHxWZjEdPScmYaGtLo8Y4DMHoEsnp14=
github.com/gin-gonic/gin v1.6.3/go.mod h1:75u5sXoLsGZoRN5Sgbi1eraJ4GU3++wFwWzhwvtwp4M=
-github.com/go-playground/assert/v2 v2.0.1 h1:MsBgLAaY856+nPRTKrp3/OZK38U/wa0CcBYNjji3q3A=
github.com/go-playground/assert/v2 v2.0.1/go.mod h1:VDjEfimB/XKnb+ZQfWdccd7VUvScMdVu0Titje2rxJ4=
github.com/go-playground/locales v0.12.1/go.mod h1:IUMDtCfWo/w/mtMfIE/IG2K+Ey3ygWanZIBtBW0W2TM=
github.com/go-playground/locales v0.13.0 h1:HyWk6mgj5qFqCT5fjGBuRArbVDfE4hi8+e8ceBS/t7Q=
@@ -52,8 +42,6 @@ github.com/go-playground/universal-translator v0.17.0 h1:icxd5fm+REJzpZx7ZfpaD87
github.com/go-playground/universal-translator v0.17.0/go.mod h1:UkSxE5sNxxRwHyU+Scu5vgOQjsIJAF8j9muTVoKLVtA=
github.com/go-playground/validator/v10 v10.2.0 h1:KgJ0snyC2R9VXYN2rneOtQcw5aHQB1Vv0sFl1UcHBOY=
github.com/go-playground/validator/v10 v10.2.0/go.mod h1:uOYAAleCW8F/7oMFd6aG0GOhaH6EGOAJShg8Id5JGkI=
-github.com/go-playground/validator/v10 v10.4.1 h1:pH2c5ADXtd66mxoE0Zm9SUhxE20r7aM3F26W0hOn+GE=
-github.com/go-playground/validator/v10 v10.4.1/go.mod h1:nlOn6nFhuKACm19sB/8EGNn9GlaMV7XkbRSipzJ0Ii4=
github.com/go-stack/stack v1.8.0 h1:5SgMzNM5HxrEjV0ww2lTmX6E2Izsfxas4+YHWRs3Lsk=
github.com/go-stack/stack v1.8.0/go.mod h1:v0f6uXyyMGvRgIKkXu+yp6POWl0qKG85gN/melR3HDY=
github.com/golang/glog v0.0.0-20160126235308-23def4e6c14b/go.mod h1:SBH7ygxi8pfUlaOkMMuAQtPIUF8ecWP5IEl/CR7VP2Q=
@@ -67,38 +55,25 @@ github.com/golang/protobuf v1.4.0-rc.2/go.mod h1:LlEzMj4AhA7rCAGe4KMBDvJI+AwstrU
github.com/golang/protobuf v1.4.0-rc.4.0.20200313231945-b860323f09d0/go.mod h1:WU3c8KckQ9AFe+yFwt9sWVRKCVIyN9cPHBJSNnbL67w=
github.com/golang/protobuf v1.4.0/go.mod h1:jodUvKwWbYaEsadDk5Fwe5c77LiNKVO9IDvqG2KuDX0=
github.com/golang/protobuf v1.4.1/go.mod h1:U8fpvMrcmy5pZrNK1lt4xCsGvpyWQ/VVv6QDs8UjoX8=
-github.com/golang/protobuf v1.4.2/go.mod h1:oDoupMAO8OvCJWAcko0GGGIgR6R6ocIYbsSw735rRwI=
github.com/golang/protobuf v1.4.3 h1:JjCZWpVbqXDqFVmTfYWEVTMIYrL/NPdPSCHPJ0T/raM=
github.com/golang/protobuf v1.4.3/go.mod h1:oDoupMAO8OvCJWAcko0GGGIgR6R6ocIYbsSw735rRwI=
github.com/golang/snappy v0.0.0-20180518054509-2e65f85255db h1:woRePGFeVFfLKN/pOkfl+p/TAqKOfFu+7KPlMVpok/w=
github.com/golang/snappy v0.0.0-20180518054509-2e65f85255db/go.mod h1:/XxbfmMg8lxefKM7IXC3fBNl/7bRcc72aCRzEWrmP2Q=
-github.com/golang/snappy v0.0.2 h1:aeE13tS0IiQgFjYdoL8qN3K1N2bXXtI6Vi51/y7BpMw=
-github.com/golang/snappy v0.0.2/go.mod h1:/XxbfmMg8lxefKM7IXC3fBNl/7bRcc72aCRzEWrmP2Q=
github.com/google/go-cmp v0.2.0/go.mod h1:oXzfMopK8JAjlY9xF4vHSVASa0yLyX7SntLO5aqRK0M=
github.com/google/go-cmp v0.3.0/go.mod h1:8QqcDgzrUqlUb/G2PQTWiueGozuR1884gddMywk6iLU=
github.com/google/go-cmp v0.3.1/go.mod h1:8QqcDgzrUqlUb/G2PQTWiueGozuR1884gddMywk6iLU=
github.com/google/go-cmp v0.4.0/go.mod h1:v8dTdLbMG2kIc/vJvl+f65V22dbkXbowE6jgT/gNBxE=
-github.com/google/go-cmp v0.5.0 h1:/QaMHBdZ26BB3SSst0Iwl10Epc+xhTquomWX0oZEB6w=
github.com/google/go-cmp v0.5.0/go.mod h1:v8dTdLbMG2kIc/vJvl+f65V22dbkXbowE6jgT/gNBxE=
-github.com/google/go-cmp v0.5.4 h1:L8R9j+yAqZuZjsqh/z+F1NCffTKKLShY6zXTItVIZ8M=
-github.com/google/go-cmp v0.5.4/go.mod h1:v8dTdLbMG2kIc/vJvl+f65V22dbkXbowE6jgT/gNBxE=
github.com/google/gofuzz v1.0.0/go.mod h1:dBl0BpW6vV/+mYPU4Po3pmUjxk6FQPldtuIdl/M65Eg=
-github.com/google/uuid v1.1.1 h1:Gkbcsh/GbpXz7lPftLA3P6TYMwjCLYm83jiFQZF/3gY=
github.com/google/uuid v1.1.1/go.mod h1:TIyPZe4MgqvfeYDBFedMoGGpEw/LqOeaOT+nhxU+yHo=
-github.com/google/uuid v1.1.2 h1:EVhdT+1Kseyi1/pUmXKaFxYsDNy9RQYkMWRH68J/W7Y=
-github.com/google/uuid v1.1.2/go.mod h1:TIyPZe4MgqvfeYDBFedMoGGpEw/LqOeaOT+nhxU+yHo=
github.com/gorilla/websocket v1.4.2 h1:+/TMaTYc4QFitKJxsQ7Yye35DkWvkdLcvGKqM+x0Ufc=
github.com/gorilla/websocket v1.4.2/go.mod h1:YR8l580nyteQvAITg2hZ9XVh4b55+EU/adAjf1fMHhE=
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/hjson/hjson-go v0.2.3 h1:KhG7/PSxTibbYOzFso5FoiX2gWePcANaCsvM1WE/bTo=
github.com/hjson/hjson-go v3.1.0+incompatible h1:DY/9yE8ey8Zv22bY+mHV1uk2yRy0h8tKhZ77hEdi0Aw=
github.com/hjson/hjson-go v3.1.0+incompatible/go.mod h1:qsetwF8NlsTsOTwZTApNlTCerV+b2GjYRRcIk4JMFio=
-github.com/hpcloud/tail v1.0.0 h1:nfCOvKYfkgYP8hkirhJocXT2+zOD8yUNjXaWfTlyFKI=
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/json-iterator/go v1.1.10 h1:Kz6Cvnvv2wGdaG/V8yMvfkmNiXq9Ya2KUv4rouJJr68=
@@ -108,17 +83,9 @@ github.com/kardianos/osext v0.0.0-20190222173326-2bc1f35cddc0/go.mod h1:1NbS8ALr
github.com/konsorten/go-windows-terminal-sequences v1.0.1/go.mod h1:T0+1ngSBFLxvqU3pZ+m/2kptfBszLMUkC4ZK/EgS/cQ=
github.com/kr/binarydist v0.1.0 h1:6kAoLA9FMMnNGSehX0s1PdjbEaACznAv/W219j2uvyo=
github.com/kr/binarydist v0.1.0/go.mod h1:DY7S//GCoz1BCd0B0EVrinCKAZN3pXe+MDaIZbXQVgM=
-github.com/kr/pretty v0.2.1 h1:Fmg33tUaq4/8ym9TJN1x7sLJnHVwhP33CNkpYV/7rwI=
-github.com/kr/pretty v0.2.1/go.mod h1:ipq/a2n7PKx3OHsz4KJII5eveXtPO4qwEXGdVfWzfnI=
-github.com/kr/pty v1.1.1/go.mod h1:pFQYn66WHrOpPYNljwOMqo10TkYh1fy3cYio2l3bCsQ=
-github.com/kr/text v0.1.0 h1:45sCR5RtlFHMR4UwH9sdQ5TC8v0qDQCHnXt+kaKSTVE=
-github.com/kr/text v0.1.0/go.mod h1:4Jbv+DJW3UT/LiOwJeYQe1efqtUx/iVham/4vfdArNI=
-github.com/kr/text v0.2.0 h1:5Nx0Ya0ZqY2ygV366QzturHI13Jq95ApcVaJBhpS+AY=
-github.com/kr/text v0.2.0/go.mod h1:eLer722TekiGuMkidMxC/pM04lWEeraHUUmBw8l2grE=
github.com/leodido/go-urn v1.1.0/go.mod h1:+cyI34gQWZcE1eQU7NVgKkkzdXDQHr1dBMtdAPozLkw=
github.com/leodido/go-urn v1.2.0 h1:hpXL4XnriNwQ/ABnpepYM/1vCLWNDfUNts8dX3xTG6Y=
github.com/leodido/go-urn v1.2.0/go.mod h1:+8+nEpDfqqsY+g338gtMEUOtuK+4dEMhiQEgxpxOKII=
-github.com/lestrrat-go/envload v0.0.0-20180220234015-a3eb8ddeffcc h1:RKf14vYWi2ttpEmkA4aQ3j4u9dStX2t4M8UM6qqNsG8=
github.com/lestrrat-go/envload v0.0.0-20180220234015-a3eb8ddeffcc/go.mod h1:kopuH9ugFRkIXf3YoqHKyrJ9YfUFsckUU9S7B+XP+is=
github.com/lestrrat-go/file-rotatelogs v2.4.0+incompatible h1:Y6sqxHMyB1D2YSzWkLibYKgg+SwmyFU9dF2hn6MdTj4=
github.com/lestrrat-go/file-rotatelogs v2.4.0+incompatible/go.mod h1:ZQnN8lSECaebrkQytbHj4xNgtg8CR7RYXnPok8e0EHA=
@@ -129,36 +96,18 @@ github.com/mattn/go-isatty v0.0.12 h1:wuysRhFDzyxgEmMf5xjvJ2M9dZoWAXNNr5LSBS7uHX
github.com/mattn/go-isatty v0.0.12/go.mod h1:cbi8OIDigv2wuxKPP5vlRcQ1OAZbq2CE4Kysco4FUpU=
github.com/modern-go/concurrent v0.0.0-20180228061459-e0a39a4cb421 h1:ZqeYNhU3OHLH3mGKHDcjJRFFRrJa6eAM5H+CtDdOsPc=
github.com/modern-go/concurrent v0.0.0-20180228061459-e0a39a4cb421/go.mod h1:6dJC0mAP4ikYIbvyc7fijjWJddQyLn8Ig3JB5CqoB9Q=
-github.com/modern-go/concurrent v0.0.0-20180306012644-bacd9c7ef1dd h1:TRLaZ9cD/w8PVh93nsPXa1VrQ6jlwL5oN8l14QlcNfg=
-github.com/modern-go/concurrent v0.0.0-20180306012644-bacd9c7ef1dd/go.mod h1:6dJC0mAP4ikYIbvyc7fijjWJddQyLn8Ig3JB5CqoB9Q=
github.com/modern-go/reflect2 v0.0.0-20180701023420-4b7aa43c6742 h1:Esafd1046DLDQ0W1YjYsBW+p8U2u7vzgW2SQVmlNazg=
github.com/modern-go/reflect2 v0.0.0-20180701023420-4b7aa43c6742/go.mod h1:bx2lNnkwVCuqBIxFjflWJWanXIb3RllmbCylyMrvgv0=
-github.com/modern-go/reflect2 v1.0.1 h1:9f412s+6RmYXLWZSEzVVgPGK7C2PphHj5RJrvfx9AWI=
-github.com/modern-go/reflect2 v1.0.1/go.mod h1:bx2lNnkwVCuqBIxFjflWJWanXIb3RllmbCylyMrvgv0=
github.com/nfnt/resize v0.0.0-20180221191011-83c6a9932646 h1:zYyBkD/k9seD2A7fsi6Oo2LfFZAehjjQMERAvZLEDnQ=
github.com/nfnt/resize v0.0.0-20180221191011-83c6a9932646/go.mod h1:jpp1/29i3P1S/RLdc7JQKbRpFeM1dOBd8T9ki5s+AY8=
-github.com/nxadm/tail v1.4.4 h1:DQuhQpB1tVlglWS2hLQ5OV6B5r8aGxSrPc5Qo6uTN78=
-github.com/nxadm/tail v1.4.4/go.mod h1:kenIhsEOeOJmVchQTgglprH7qJGnHDVpk1VPCcaMI8A=
-github.com/nxadm/tail v1.4.5 h1:obHEce3upls1IBn1gTw/o7bCv7OJb6Ib/o7wNO+4eKw=
-github.com/nxadm/tail v1.4.5/go.mod h1:kenIhsEOeOJmVchQTgglprH7qJGnHDVpk1VPCcaMI8A=
github.com/onsi/ginkgo v1.6.0/go.mod h1:lLunBs/Ym6LB5Z9jYTR76FiuTmxDTDusOGeTQH+WWjE=
-github.com/onsi/ginkgo v1.7.0 h1:WSHQ+IS43OoUrWtD1/bbclrwK8TTH5hzp+umCiuxHgs=
github.com/onsi/ginkgo v1.7.0/go.mod h1:lLunBs/Ym6LB5Z9jYTR76FiuTmxDTDusOGeTQH+WWjE=
-github.com/onsi/ginkgo v1.12.1/go.mod h1:zj2OWP4+oCPe1qIXoGWkgMRwljMUYCdkwsT2108oapk=
-github.com/onsi/ginkgo v1.14.2 h1:8mVmC9kjFFmA8H4pKMUhcblgifdkOIXPvbhN1T36q1M=
-github.com/onsi/ginkgo v1.14.2/go.mod h1:iSB4RoI2tjJc9BBv4NKIKWKya62Rps+oPG/Lv9klQyY=
-github.com/onsi/gomega v1.4.3 h1:RE1xgDvH7imwFD45h+u2SgIfERHlS2yNG4DObb5BSKU=
github.com/onsi/gomega v1.4.3/go.mod h1:ex+gbHU/CVuBBDIJjb2X0qEXbFg53c61hWP/1CpauHY=
-github.com/onsi/gomega v1.7.1/go.mod h1:XdKZgCCFLUoM/7CFJVPcG8C1xQ1AJ0vpAezJrB7JYyY=
-github.com/onsi/gomega v1.10.1/go.mod h1:iN09h71vgCQne3DLsj+A5owkum+a2tYe+TOCB1ybHNo=
-github.com/onsi/gomega v1.10.4 h1:NiTx7EEvBzu9sFOD1zORteLSt3o8gnlvZZwSE9TnY9U=
-github.com/onsi/gomega v1.10.4/go.mod h1:g/HbgYopi++010VEqkFgJHKC09uJiW9UkXvMUuKHUCQ=
github.com/oxtoacart/bpool v0.0.0-20190530202638-03653db5a59c h1:rp5dCmg/yLR3mgFuSOe4oEnDDmGLROTvMragMUXpTQw=
github.com/oxtoacart/bpool v0.0.0-20190530202638-03653db5a59c/go.mod h1:X07ZCGwUbLaax7L0S3Tw4hpejzu63ZrrQiUe6W0hcy0=
github.com/pkg/errors v0.8.1/go.mod h1:bwawxfHBFNV+L2hUp1rHADufV3IMtnDRdf1r5NINEl0=
github.com/pkg/errors v0.9.1 h1:FEBLx1zS214owpjy7qsBeixbURkuhQAwrK5UwLGTwt4=
github.com/pkg/errors v0.9.1/go.mod h1:bwawxfHBFNV+L2hUp1rHADufV3IMtnDRdf1r5NINEl0=
-github.com/pmezard/go-difflib v1.0.0 h1:4DBwDE0NGyQoBHbLQYPwSUPoCMWR5BEzIk/f1lZbAQM=
github.com/pmezard/go-difflib v1.0.0/go.mod h1:iKH77koFhYxTK1pcRnkKkqfTogsbg7gZNVY4sRDYZ/4=
github.com/prometheus/client_model v0.0.0-20190812154241-14fe0d1b01d4/go.mod h1:xMI15A0UPsDsEKsMN9yxemIoYk6Tm2C1GtYGdfGttqA=
github.com/rifflock/lfshook v0.0.0-20180920164130-b9218ef580f5 h1:mZHayPoR0lNmnHyvtYjDeq0zlVHn9K/ZXoy17ylucdo=
@@ -170,40 +119,27 @@ github.com/stretchr/objx v0.1.0/go.mod h1:HFkY916IF+rwdDfMAkV7OtwuqBVzrE8GR6GFx+
github.com/stretchr/objx v0.1.1/go.mod h1:HFkY916IF+rwdDfMAkV7OtwuqBVzrE8GR6GFx+wExME=
github.com/stretchr/testify v1.2.2/go.mod h1:a8OnRcib4nhh0OaRAV+Yts87kKdq0PP7pXfy6kDkUVs=
github.com/stretchr/testify v1.3.0/go.mod h1:M5WIy9Dh21IEIfnGCwXGc5bZfKNJtfHm1UVUgZn+9EI=
-github.com/stretchr/testify v1.4.0 h1:2E4SXV/wtOkTonXsotYi4li6zVWxYlZuYNCXe9XRJyk=
github.com/stretchr/testify v1.4.0/go.mod h1:j7eGeouHqKxXV5pUuKE4zz7dFj8WfuZ+81PSLYec5m4=
-github.com/stretchr/testify v1.6.1 h1:hDPOHmpOpP40lSULcqw7IrRb/u7w6RpDC9399XyoNd0=
-github.com/stretchr/testify v1.6.1/go.mod h1:6Fq8oRcR53rry900zMqJjRRixrwX3KX962/h/Wwjteg=
github.com/syndtr/goleveldb v1.0.0 h1:fBdIW9lB4Iz0n9khmH8w27SJ3QEJ7+IgjPEwGSZiFdE=
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.3 h1:aHoiiem0dr7GHkW001T1SMTJ7X5PvyekH5WX0whWGnI=
github.com/tidwall/gjson v1.6.3/go.mod h1:BaHyNc5bjzYkPqgLq7mdVzeiRtULKULXLgZFKsxEHI0=
github.com/tidwall/gjson v1.6.4 h1:JKsCsJqRVFz8eYCsQ5E/ANRbK6CanAtA9IUvGsXklyo=
github.com/tidwall/gjson v1.6.4/go.mod h1:BaHyNc5bjzYkPqgLq7mdVzeiRtULKULXLgZFKsxEHI0=
github.com/tidwall/match v1.0.1 h1:PnKP62LPNxHKTwvHHZZzdOAOCtsJTjo6dZLCwpKm5xc=
github.com/tidwall/match v1.0.1/go.mod h1:LujAq0jyVjBy028G1WhWfIzbpQfMO8bBZ6Tyb0+pL9E=
-github.com/tidwall/match v1.0.2 h1:uuqvHuBGSedK7awZ2YoAtpnimfwBGFjHuWLuLqQj+bU=
-github.com/tidwall/match v1.0.2/go.mod h1:LujAq0jyVjBy028G1WhWfIzbpQfMO8bBZ6Tyb0+pL9E=
github.com/tidwall/pretty v1.0.2 h1:Z7S3cePv9Jwm1KwS0513MRaoUe3S01WPbLNV40pwWZU=
github.com/tidwall/pretty v1.0.2/go.mod h1:XNkn88O1ChpSDQmQeStsy+sBenx6DDtFZJxhVysOjyk=
github.com/ugorji/go v1.1.7 h1:/68gy2h+1mWMrwZFeD1kQialdSzAb432dtpeJ42ovdo=
github.com/ugorji/go v1.1.7/go.mod h1:kZn38zHttfInRq0xu/PH0az30d+z6vm202qpg1oXVMw=
-github.com/ugorji/go v1.2.1 h1:dz+JxTe7GZQdErTo7SREc1jQj/hFP1k7jyIAwODoW+k=
-github.com/ugorji/go v1.2.1/go.mod h1:cSVypSfTLm2o9fKxXvQgn3rMmkPXovcWor6Qn5tbFmI=
github.com/ugorji/go/codec v1.1.7 h1:2SvQaVZ1ouYrrKKwoSk2pzd4A9evlKJb9oTL+OaLUSs=
github.com/ugorji/go/codec v1.1.7/go.mod h1:Ax+UKWsSmolVDwsd+7N3ZtXu+yMGCf907BLYF3GoBXY=
-github.com/ugorji/go/codec v1.2.1 h1:/TRfW3XKkvWvmAYyCUaQlhoCDGjcvNR8xVVA/l5p/jQ=
-github.com/ugorji/go/codec v1.2.1/go.mod h1:s/WxCRi46t8rA+fowL40EnmD7ec0XhR7ZypxeBNdzsM=
github.com/wdvxdr1123/go-silk v0.0.0-20201210140933-bcdbcb2f1093 h1:t38EBwI2hFJz1sQJ402VqzdA3eMidkY1c3w/8z0SftA=
github.com/wdvxdr1123/go-silk v0.0.0-20201210140933-bcdbcb2f1093/go.mod h1:5q9LFlBr+yX/J8Jd/9wHdXwkkjFkNyQIS7kX2Lgx/Zs=
github.com/yinghau76/go-ascii-art v0.0.0-20190517192627-e7f465a30189 h1:4UJw9if55Fu3HOwbfcaQlJ27p3oeJU2JZqoeT3ITJQk=
github.com/yinghau76/go-ascii-art v0.0.0-20190517192627-e7f465a30189/go.mod h1:rIrm5geMiBhPQkdfUm8gDFi/WiHneOp1i9KjmJqc+9I=
golang.org/x/crypto v0.0.0-20190308221718-c2843e01d9a2/go.mod h1:djNgcEr1/C05ACkg1iLfiJU5Ep61QUkGW8qpdssI0+w=
-golang.org/x/crypto v0.0.0-20200622213623-75b288015ac9/go.mod h1:LzIPMQfyMNhhGPhUkYOs5KpL4U8rLKemX1yGLhDgUto=
golang.org/x/crypto v0.0.0-20201208171446-5f87f3452ae9 h1:sYNJzB4J8toYPQTM6pAkcmBRgw9SnQKP9oXCHfgy604=
golang.org/x/crypto v0.0.0-20201208171446-5f87f3452ae9/go.mod h1:jdWPYTVW3xRLrWPugEBEK3UY2ZEsg3UU495nc5E+M+I=
golang.org/x/exp v0.0.0-20190121172915-509febef88a4/go.mod h1:CJ0aWSM057203Lf6IL+f9T1iT9GByDxfZKAQTCR3kQA=
@@ -218,10 +154,6 @@ golang.org/x/net v0.0.0-20190311183353-d8887717615a/go.mod h1:t9HGtf8HONx5eT2rtn
golang.org/x/net v0.0.0-20190404232315-eb5bcb51f2a3/go.mod h1:t9HGtf8HONx5eT2rtn7q6eTqICYqUVnKs3thJo3Qplg=
golang.org/x/net v0.0.0-20200114155413-6afb5195e5aa h1:F+8P+gmewFQYRk6JoLQLwjBCTu3mcIURZfNkVweuRKA=
golang.org/x/net v0.0.0-20200114155413-6afb5195e5aa/go.mod h1:z5CRVTTTmAJ677TzLLGU+0bjPO0LkuOLi4/5GtJWs/s=
-golang.org/x/net v0.0.0-20200520004742-59133d7f0dd7/go.mod h1:qpuaurCH72eLCgpAm/N6yyVIVM9cpaDIP3A8BGJEC5A=
-golang.org/x/net v0.0.0-20201202161906-c7110b5ffcbb/go.mod h1:sp8m0HH+o8qH0wwXwYZr8TS3Oi6o0r6Gce1SSxlDquU=
-golang.org/x/net v0.0.0-20201209123823-ac852fbbde11 h1:lwlPPsmjDKK0J6eG6xDWd5XPehI0R024zxjDnw3esPA=
-golang.org/x/net v0.0.0-20201209123823-ac852fbbde11/go.mod h1:m0MpNAwzfU5UDzcl9v0D8zg8gWTRqZa9RBIspLL5mdg=
golang.org/x/oauth2 v0.0.0-20180821212333-d2e6202438be/go.mod h1:N/0e6XlmueqKjAGxoOufVs8QHGRruUQn6yWY3a++T0U=
golang.org/x/sync v0.0.0-20180314180146-1d60e4601c6f/go.mod h1:RxMgew5VJxzue5/jJTE5uejpjVlOe/izrB70Jof72aM=
golang.org/x/sync v0.0.0-20181108010431-42b317875d0f/go.mod h1:RxMgew5VJxzue5/jJTE5uejpjVlOe/izrB70Jof72aM=
@@ -229,32 +161,15 @@ golang.org/x/sync v0.0.0-20190423024810-112230192c58/go.mod h1:RxMgew5VJxzue5/jJ
golang.org/x/sys v0.0.0-20180830151530-49385e6e1522/go.mod h1:STP8DvDyc/dI5b8T5hshtkjS+E42TnysNCUPdjciGhY=
golang.org/x/sys v0.0.0-20180909124046-d0be0721c37e/go.mod h1:STP8DvDyc/dI5b8T5hshtkjS+E42TnysNCUPdjciGhY=
golang.org/x/sys v0.0.0-20190215142949-d0b11bdaac8a/go.mod h1:STP8DvDyc/dI5b8T5hshtkjS+E42TnysNCUPdjciGhY=
-golang.org/x/sys v0.0.0-20190412213103-97732733099d/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs=
golang.org/x/sys v0.0.0-20190422165155-953cdadca894/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs=
golang.org/x/sys v0.0.0-20190813064441-fde4db37ae7a/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs=
-golang.org/x/sys v0.0.0-20190904154756-749cb33beabd/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs=
-golang.org/x/sys v0.0.0-20191005200804-aed5e4c7ecf9/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs=
golang.org/x/sys v0.0.0-20191026070338-33540a1f6037/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs=
-golang.org/x/sys v0.0.0-20191120155948-bd437916bb0e/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs=
golang.org/x/sys v0.0.0-20200116001909-b77594299b42 h1:vEOn+mP2zCOVzKckCZy6YsCtDblrpj/w7B9nxGNELpg=
golang.org/x/sys v0.0.0-20200116001909-b77594299b42/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs=
-golang.org/x/sys v0.0.0-20200323222414-85ca7c5b95cd/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs=
-golang.org/x/sys v0.0.0-20200519105757-fe76b779f299/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs=
-golang.org/x/sys v0.0.0-20200930185726-fdedc70b468f/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs=
-golang.org/x/sys v0.0.0-20201119102817-f84b799fce68/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs=
-golang.org/x/sys v0.0.0-20201211090839-8ad439b19e0f h1:QdHQnPce6K4XQewki9WNbG5KOROuDzqO3NaYjI1cXJ0=
-golang.org/x/sys v0.0.0-20201211090839-8ad439b19e0f/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs=
+golang.org/x/term v0.0.0-20201117132131-f5c789dd3221 h1:/ZHdbVpdR/jk3g30/d4yUL0JU9kksj8+F/bnQUVLGDM=
golang.org/x/term v0.0.0-20201117132131-f5c789dd3221/go.mod h1:Nr5EML6q2oocZ2LXRh80K7BxOlk5/8JxuGnuhpl+muw=
-golang.org/x/term v0.0.0-20201126162022-7de9c90e9dd1 h1:v+OssWQX+hTHEmOBgwxdZxK4zHq3yOs8F9J7mk0PY8E=
-golang.org/x/term v0.0.0-20201126162022-7de9c90e9dd1/go.mod h1:bj7SfCRtBDWHUb9snDiAeCFNEtKQo2Wmx5Cou7ajbmo=
-golang.org/x/term v0.0.0-20201210144234-2321bbc49cbf h1:MZ2shdL+ZM/XzY3ZGOnh4Nlpnxz5GSOhOmtHo3iPU6M=
-golang.org/x/term v0.0.0-20201210144234-2321bbc49cbf/go.mod h1:bj7SfCRtBDWHUb9snDiAeCFNEtKQo2Wmx5Cou7ajbmo=
golang.org/x/text v0.3.0/go.mod h1:NqM8EUOU14njkJ3fqMW+pc6Ldnwhi/IjpwHt7yyuwOQ=
-golang.org/x/text v0.3.2 h1:tW2bmiBqwgJj/UpqtC8EpXEZVYOwU0yG4iWbprSVAcs=
golang.org/x/text v0.3.2/go.mod h1:bEr9sfX3Q8Zfm5fL9x+3itogRgK3+ptLWKqgva+5dAk=
-golang.org/x/text v0.3.3/go.mod h1:5Zoc/QRtKVWzQhOtBMvqHzDpF6irO9z98xDceosuGiQ=
-golang.org/x/text v0.3.4 h1:0YWbFKbhXG/wIiuHDSKpS0Iy7FSA+u45VtBMfQcFTTc=
-golang.org/x/text v0.3.4/go.mod h1:5Zoc/QRtKVWzQhOtBMvqHzDpF6irO9z98xDceosuGiQ=
golang.org/x/time v0.0.0-20201208040808-7e3f01d25324 h1:Hir2P/De0WpUhtrKGGjvSb2YxUgyZ7EFOSLIcSSpiwE=
golang.org/x/time v0.0.0-20201208040808-7e3f01d25324/go.mod h1:tRJNPiyCQ0inRvYxbN9jk5I+vvW/OXSQhTDSoE431IQ=
golang.org/x/tools v0.0.0-20180917221912-90fa682c2a6e/go.mod h1:n7NCudcB/nEzxVGmLbDWY5pfWTLqBcC2KZ6jyYvM4mQ=
@@ -262,10 +177,7 @@ golang.org/x/tools v0.0.0-20190114222345-bf090417da8b/go.mod h1:n7NCudcB/nEzxVGm
golang.org/x/tools v0.0.0-20190226205152-f727befe758c/go.mod h1:9Yl7xja0Znq3iFh3HoIrodX9oNMXvdceNzlUR8zjMvY=
golang.org/x/tools v0.0.0-20190311212946-11955173bddd/go.mod h1:LCzVGOaR6xXOjkQ3onu1FJEFr0SW1gC7cKk1uF8kGRs=
golang.org/x/tools v0.0.0-20190524140312-2c0ae7006135/go.mod h1:RgjU9mgBXZiqYHBnxXauZ1Gv1EHHAz9KjViQ78xBX0Q=
-golang.org/x/xerrors v0.0.0-20191204190536-9bdfabe68543 h1:E7g+9GITq07hpfrRu66IVDexMakfv52eLZ2CXBWiKr4=
golang.org/x/xerrors v0.0.0-20191204190536-9bdfabe68543/go.mod h1:I/5z698sn9Ka8TeJc9MKroUUfqBBauWjQqLJ2OPfmY0=
-golang.org/x/xerrors v0.0.0-20200804184101-5ec99f83aff1 h1:go1bK/D/BFZV2I8cIQd1NKEZ+0owSTG1fDTci4IqFcE=
-golang.org/x/xerrors v0.0.0-20200804184101-5ec99f83aff1/go.mod h1:I/5z698sn9Ka8TeJc9MKroUUfqBBauWjQqLJ2OPfmY0=
google.golang.org/appengine v1.1.0/go.mod h1:EbEs0AVv82hx2wNQdGPgUI5lhzA/G0D9YwlJXL52JkM=
google.golang.org/appengine v1.4.0/go.mod h1:xpcJRLb0r/rnEns0DIKYYv+WjYCduHsrkT7/EB5XEv4=
google.golang.org/genproto v0.0.0-20180817151627-c66870c02cf8/go.mod h1:JiN7NxoALGmiZfu7CAH4rXhgtRTLTxftemlI0sWmxmc=
@@ -284,27 +196,14 @@ google.golang.org/protobuf v1.23.0/go.mod h1:EGpADcykh3NcUnDUJcl1+ZksZNG86OlYog2
google.golang.org/protobuf v1.23.1-0.20200526195155-81db48ad09cc/go.mod h1:EGpADcykh3NcUnDUJcl1+ZksZNG86OlYog2l/sGQquU=
google.golang.org/protobuf v1.25.0 h1:Ejskq+SyPohKW+1uil0JJMtmHCgJPJ/qWTxr8qp+R4c=
google.golang.org/protobuf v1.25.0/go.mod h1:9JNX74DMeImyA3h4bdi1ymwjUzf21/xIlbajtzgsN7c=
-gopkg.in/check.v1 v0.0.0-20161208181325-20d25e280405 h1:yhCVgyC4o1eVCa2tZl7eS0r+SDo693bJlVdllGtEeKM=
gopkg.in/check.v1 v0.0.0-20161208181325-20d25e280405/go.mod h1:Co6ibVJAznAaIkqp8huTwlJQCZ016jof/cbN4VW5Yz0=
-gopkg.in/check.v1 v1.0.0-20201130134442-10cb98267c6c h1:Hei/4ADfdWqJk1ZMxUNpqntNwaWcugrBjAiHlqqRiVk=
-gopkg.in/check.v1 v1.0.0-20201130134442-10cb98267c6c/go.mod h1:JHkPIbrfpd72SG/EVd6muEfDQjcINNoR0C8j2r3qZ4Q=
-gopkg.in/fsnotify.v1 v1.4.7 h1:xOHLXZwVvI9hhs+cLKq5+I5onOuwQLhQwiu63xxlHs4=
gopkg.in/fsnotify.v1 v1.4.7/go.mod h1:Tz8NjZHkW78fSQdbUxIjBTcgA1z1m8ZHf0WmKUhAMys=
gopkg.in/go-playground/assert.v1 v1.2.1/go.mod h1:9RXL0bg/zibRAgZUYszZSwO/z8Y/a8bDuhia5mkpMnE=
gopkg.in/go-playground/validator.v9 v9.29.1/go.mod h1:+c9/zcJMFNgbLvly1L1V+PpxWdVbfP1avr/N00E2vyQ=
-gopkg.in/tomb.v1 v1.0.0-20141024135613-dd632973f1e7 h1:uRGJdciOHaEIrze2W8Q3AKkepLTh2hOroT7a+7czfdQ=
gopkg.in/tomb.v1 v1.0.0-20141024135613-dd632973f1e7/go.mod h1:dt/ZhP58zS4L8KSrWDmTeBkI65Dw0HsyUHuEVlX15mw=
gopkg.in/yaml.v2 v2.2.1/go.mod h1:hI93XBmqTisBFMUTm0b8Fm+jr3Dg1NNxqwp+5A1VGuI=
gopkg.in/yaml.v2 v2.2.2/go.mod h1:hI93XBmqTisBFMUTm0b8Fm+jr3Dg1NNxqwp+5A1VGuI=
-gopkg.in/yaml.v2 v2.2.4/go.mod h1:hI93XBmqTisBFMUTm0b8Fm+jr3Dg1NNxqwp+5A1VGuI=
gopkg.in/yaml.v2 v2.2.8 h1:obN1ZagJSUGI0Ek/LBmuj4SNLPfIny3KsKFopxRdj10=
gopkg.in/yaml.v2 v2.2.8/go.mod h1:hI93XBmqTisBFMUTm0b8Fm+jr3Dg1NNxqwp+5A1VGuI=
-gopkg.in/yaml.v2 v2.3.0/go.mod h1:hI93XBmqTisBFMUTm0b8Fm+jr3Dg1NNxqwp+5A1VGuI=
-gopkg.in/yaml.v2 v2.4.0 h1:D8xgwECY7CYvx+Y2n4sBz93Jn9JRvxdiyyo8CTfuKaY=
-gopkg.in/yaml.v2 v2.4.0/go.mod h1:RDklbk79AGWmwhnvt/jBztapEOGDOx6ZbXqjP6csGnQ=
-gopkg.in/yaml.v3 v3.0.0-20200313102051-9f266ea9e77c h1:dUUwHk2QECo/6vqA44rthZ8ie2QXMNeKRTHCNY2nXvo=
-gopkg.in/yaml.v3 v3.0.0-20200313102051-9f266ea9e77c/go.mod h1:K4uyk7z7BCEPqu6E+C64Yfv1cQ7kz7rIZviUmN+EgEM=
-gopkg.in/yaml.v3 v3.0.0-20200615113413-eeeca48fe776 h1:tQIYjPdBoyREyB9XMu+nnTclpTYkz2zFM+lzLJFO4gQ=
-gopkg.in/yaml.v3 v3.0.0-20200615113413-eeeca48fe776/go.mod h1:K4uyk7z7BCEPqu6E+C64Yfv1cQ7kz7rIZviUmN+EgEM=
honnef.co/go/tools v0.0.0-20190102054323-c2f93a96b099/go.mod h1:rf3lG4BRIbNafJWhAfAdb/ePZxsR/4RtNHQocxwk9r4=
honnef.co/go/tools v0.0.0-20190523083050-ea95bdfd59fc/go.mod h1:rf3lG4BRIbNafJWhAfAdb/ePZxsR/4RtNHQocxwk9r4=
From d50442b85f55649060406255d88f961fb32cf109 Mon Sep 17 00:00:00 2001
From: Mrs4s <1844812067@qq.com>
Date: Sat, 12 Dec 2020 22:16:35 +0800
Subject: [PATCH 227/367] update MiraiGo.
---
go.mod | 2 +-
go.sum | 2 ++
2 files changed, 3 insertions(+), 1 deletion(-)
diff --git a/go.mod b/go.mod
index 5b8d40e..170c653 100644
--- a/go.mod
+++ b/go.mod
@@ -3,7 +3,7 @@ module github.com/Mrs4s/go-cqhttp
go 1.15
require (
- github.com/Mrs4s/MiraiGo v0.0.0-20201212132428-af0230171ee1
+ github.com/Mrs4s/MiraiGo v0.0.0-20201212141451-52096c28df90
github.com/dustin/go-humanize v1.0.0
github.com/getlantern/go-update v0.0.0-20190510022740-79c495ab728c
github.com/getlantern/golog v0.0.0-20201105130739-9586b8bde3a9 // indirect
diff --git a/go.sum b/go.sum
index 7d2b049..c571085 100644
--- a/go.sum
+++ b/go.sum
@@ -2,6 +2,8 @@ cloud.google.com/go v0.26.0/go.mod h1:aQUYkXzVsufM+DwF1aE+0xfcU+56JwCaLick0ClmMT
github.com/BurntSushi/toml v0.3.1/go.mod h1:xHWCNGjB5oqiDr8zfno3MHue2Ht5sIBksp03qcyfWMU=
github.com/Mrs4s/MiraiGo v0.0.0-20201212132428-af0230171ee1 h1:NA46lAqHDhrXMRBjHmnnDDyEbv6d5Ajh4UyO1Dqra7U=
github.com/Mrs4s/MiraiGo v0.0.0-20201212132428-af0230171ee1/go.mod h1:o+me0DWqTbZU4Xmu2D1gIpCditlwt+vMTNZmjvApf5Y=
+github.com/Mrs4s/MiraiGo v0.0.0-20201212141451-52096c28df90 h1:/qGcbSQGHqYFUPZVIWWKD/KUkofW4B7msBva5f8R2mY=
+github.com/Mrs4s/MiraiGo v0.0.0-20201212141451-52096c28df90/go.mod h1:o+me0DWqTbZU4Xmu2D1gIpCditlwt+vMTNZmjvApf5Y=
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=
From 4ef476cb679c73408eb107acee96787d5ff1ab34 Mon Sep 17 00:00:00 2001
From: Mrs4s
Date: Mon, 14 Dec 2020 16:44:43 +0800
Subject: [PATCH 228/367] update MiraiGo.
---
go.mod | 2 +-
go.sum | 2 ++
main.go | 2 +-
3 files changed, 4 insertions(+), 2 deletions(-)
diff --git a/go.mod b/go.mod
index 170c653..ba2f0e9 100644
--- a/go.mod
+++ b/go.mod
@@ -3,7 +3,7 @@ module github.com/Mrs4s/go-cqhttp
go 1.15
require (
- github.com/Mrs4s/MiraiGo v0.0.0-20201212141451-52096c28df90
+ github.com/Mrs4s/MiraiGo v0.0.0-20201214083047-7e587643012f
github.com/dustin/go-humanize v1.0.0
github.com/getlantern/go-update v0.0.0-20190510022740-79c495ab728c
github.com/getlantern/golog v0.0.0-20201105130739-9586b8bde3a9 // indirect
diff --git a/go.sum b/go.sum
index c571085..20b0481 100644
--- a/go.sum
+++ b/go.sum
@@ -4,6 +4,8 @@ github.com/Mrs4s/MiraiGo v0.0.0-20201212132428-af0230171ee1 h1:NA46lAqHDhrXMRBjH
github.com/Mrs4s/MiraiGo v0.0.0-20201212132428-af0230171ee1/go.mod h1:o+me0DWqTbZU4Xmu2D1gIpCditlwt+vMTNZmjvApf5Y=
github.com/Mrs4s/MiraiGo v0.0.0-20201212141451-52096c28df90 h1:/qGcbSQGHqYFUPZVIWWKD/KUkofW4B7msBva5f8R2mY=
github.com/Mrs4s/MiraiGo v0.0.0-20201212141451-52096c28df90/go.mod h1:o+me0DWqTbZU4Xmu2D1gIpCditlwt+vMTNZmjvApf5Y=
+github.com/Mrs4s/MiraiGo v0.0.0-20201214083047-7e587643012f h1:MMK0Xauag2CmwFvAu7PLq9jOT+sm+WWCByCCoQBDY2w=
+github.com/Mrs4s/MiraiGo v0.0.0-20201214083047-7e587643012f/go.mod h1:o+me0DWqTbZU4Xmu2D1gIpCditlwt+vMTNZmjvApf5Y=
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=
diff --git a/main.go b/main.go
index 14d3f0b..428c8ce 100644
--- a/main.go
+++ b/main.go
@@ -99,7 +99,7 @@ func init() {
func main() {
var byteKey []byte
- var isFastStart bool = false
+ var isFastStart = false
arg := os.Args
if len(arg) > 1 {
for i := range arg {
From 00783380b766ca3c7fb537dcc0b5588d3b8a93ea Mon Sep 17 00:00:00 2001
From: Mrs4s
Date: Mon, 14 Dec 2020 16:51:16 +0800
Subject: [PATCH 229/367] update ISSUE_TEMPLATE.
---
.github/ISSUE_TEMPLATE/bug--.md | 15 ++++++++++++---
1 file changed, 12 insertions(+), 3 deletions(-)
diff --git a/.github/ISSUE_TEMPLATE/bug--.md b/.github/ISSUE_TEMPLATE/bug--.md
index 69a0bba..9135cd0 100644
--- a/.github/ISSUE_TEMPLATE/bug--.md
+++ b/.github/ISSUE_TEMPLATE/bug--.md
@@ -7,11 +7,20 @@ assignees: ''
---
+
+
**环境信息**
请根据实际使用环境修改以下信息
-go-cqhttp版本: v0.9.10
-运行环境: windows_amd64
-连接方式: 反向WS
+go-cqhttp版本:
+运行环境:
+连接方式:
+使用协议:
**bug内容**
请在这里详细描述bug的内容
From cbbe196f263ec385bfa89326e44bc9dae5ab748d Mon Sep 17 00:00:00 2001
From: Mrs4s
Date: Tue, 15 Dec 2020 23:48:26 +0800
Subject: [PATCH 230/367] update MiraiGo.
---
global/net.go | 1 -
go.mod | 2 +-
go.sum | 2 ++
3 files changed, 3 insertions(+), 2 deletions(-)
diff --git a/global/net.go b/global/net.go
index d10bb1e..b55827e 100644
--- a/global/net.go
+++ b/global/net.go
@@ -26,7 +26,6 @@ var client = &http.Client{
DialContext: (&net.Dialer{
Timeout: 30 * time.Second,
KeepAlive: 30 * time.Second,
- DualStack: true,
}).DialContext,
ForceAttemptHTTP2: true,
MaxIdleConns: 100,
diff --git a/go.mod b/go.mod
index ba2f0e9..dd4203b 100644
--- a/go.mod
+++ b/go.mod
@@ -3,7 +3,7 @@ module github.com/Mrs4s/go-cqhttp
go 1.15
require (
- github.com/Mrs4s/MiraiGo v0.0.0-20201214083047-7e587643012f
+ github.com/Mrs4s/MiraiGo v0.0.0-20201215154627-d5a9fc8d7d72
github.com/dustin/go-humanize v1.0.0
github.com/getlantern/go-update v0.0.0-20190510022740-79c495ab728c
github.com/getlantern/golog v0.0.0-20201105130739-9586b8bde3a9 // indirect
diff --git a/go.sum b/go.sum
index 20b0481..02abc39 100644
--- a/go.sum
+++ b/go.sum
@@ -6,6 +6,8 @@ github.com/Mrs4s/MiraiGo v0.0.0-20201212141451-52096c28df90 h1:/qGcbSQGHqYFUPZVI
github.com/Mrs4s/MiraiGo v0.0.0-20201212141451-52096c28df90/go.mod h1:o+me0DWqTbZU4Xmu2D1gIpCditlwt+vMTNZmjvApf5Y=
github.com/Mrs4s/MiraiGo v0.0.0-20201214083047-7e587643012f h1:MMK0Xauag2CmwFvAu7PLq9jOT+sm+WWCByCCoQBDY2w=
github.com/Mrs4s/MiraiGo v0.0.0-20201214083047-7e587643012f/go.mod h1:o+me0DWqTbZU4Xmu2D1gIpCditlwt+vMTNZmjvApf5Y=
+github.com/Mrs4s/MiraiGo v0.0.0-20201215154627-d5a9fc8d7d72 h1:HX6wkKQC9aKdiUCDUlafOycR8LRkUPep2B3XLvd5xVA=
+github.com/Mrs4s/MiraiGo v0.0.0-20201215154627-d5a9fc8d7d72/go.mod h1:o+me0DWqTbZU4Xmu2D1gIpCditlwt+vMTNZmjvApf5Y=
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=
From 474de6ad3db3ea67f03f150e3c4916c3c69c495c Mon Sep 17 00:00:00 2001
From: Mrs4s
Date: Wed, 16 Dec 2020 20:35:15 +0800
Subject: [PATCH 231/367] feature get_group_at_all_remain.
---
coolq/api.go | 11 +++++++++++
server/http.go | 6 ++++++
server/websocket.go | 3 +++
3 files changed, 20 insertions(+)
diff --git a/coolq/api.go b/coolq/api.go
index 6c0081c..43293c8 100644
--- a/coolq/api.go
+++ b/coolq/api.go
@@ -428,6 +428,17 @@ func (bot *CQBot) CQSetGroupLeave(groupId int64) MSG {
return Failed(100, "GROUP_NOT_FOUND", "群聊不存在")
}
+func (bot *CQBot) CQGetAtAllRemain(groupId int64) MSG {
+ if g := bot.Client.FindGroup(groupId); g != nil {
+ i, err := bot.Client.GetAtAllRemain(groupId)
+ if err != nil {
+ return Failed(100, "GROUP_REMAIN_API_ERROR", err.Error())
+ }
+ return OK(i)
+ }
+ return Failed(100, "GROUP_NOT_FOUND", "群聊不存在")
+}
+
// https://cqhttp.cc/docs/4.15/#/API?id=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
func (bot *CQBot) CQProcessFriendRequest(flag string, approve bool) MSG {
req, ok := bot.friendReqCache.Load(flag)
diff --git a/server/http.go b/server/http.go
index 2275d47..34c15d2 100644
--- a/server/http.go
+++ b/server/http.go
@@ -394,6 +394,11 @@ func GetStrangerInfo(s *httpServer, c *gin.Context) {
c.JSON(200, s.bot.CQGetStrangerInfo(uid))
}
+func GetGroupAtAllRemain(s *httpServer, c *gin.Context) {
+ gid, _ := strconv.ParseInt(getParam(c, "group_id"), 10, 64)
+ c.JSON(200, s.bot.CQGetAtAllRemain(gid))
+}
+
func HandleQuickOperation(s *httpServer, c *gin.Context) {
if c.Request.Method != "POST" {
c.AbortWithStatus(404)
@@ -514,6 +519,7 @@ var httpApi = map[string]func(s *httpServer, c *gin.Context){
".handle_quick_operation": HandleQuickOperation,
".ocr_image": OcrImage,
"ocr_image": OcrImage,
+ "get_group_at_all_remain": GetGroupAtAllRemain,
".get_word_slices": GetWordSlices,
}
diff --git a/server/websocket.go b/server/websocket.go
index dddbeec..468c2b3 100644
--- a/server/websocket.go
+++ b/server/websocket.go
@@ -536,6 +536,9 @@ var wsApi = map[string]func(*coolq.CQBot, gjson.Result) coolq.MSG{
"ocr_image": func(bot *coolq.CQBot, p gjson.Result) coolq.MSG {
return bot.CQOcrImage(p.Get("image").Str)
},
+ "get_group_at_all_remain": func(bot *coolq.CQBot, p gjson.Result) coolq.MSG {
+ return bot.CQGetAtAllRemain(p.Get("group_id").Int())
+ },
".get_word_slices": func(bot *coolq.CQBot, p gjson.Result) coolq.MSG {
return bot.CQGetWordSlices(p.Get("content").Str)
},
From aa778104915caa316f1ee5c5436e609853009405 Mon Sep 17 00:00:00 2001
From: Mrs4s
Date: Thu, 17 Dec 2020 08:12:57 +0800
Subject: [PATCH 232/367] support old coolq data path. #499
---
coolq/cqcode.go | 6 ++++++
global/fs.go | 14 +++++++++-----
2 files changed, 15 insertions(+), 5 deletions(-)
diff --git a/coolq/cqcode.go b/coolq/cqcode.go
index 2426922..50fbd54 100644
--- a/coolq/cqcode.go
+++ b/coolq/cqcode.go
@@ -573,6 +573,9 @@ func (bot *CQBot) ToElement(t string, d map[string]string, group bool) (m interf
case "record":
f := d["file"]
data, err := global.FindFile(f, d["cache"], global.VOICE_PATH)
+ if err == global.ErrSyntax {
+ data, err = global.FindFile(f, d["cache"], global.VOICE_PATH_OLD)
+ }
if err != nil {
return nil, err
}
@@ -817,6 +820,9 @@ func (bot *CQBot) makeImageElem(d map[string]string, group bool) (message.IMessa
return message.NewImage(b), nil
}
rawPath := path.Join(global.IMAGE_PATH, f)
+ if !global.PathExists(rawPath) && global.PathExists(path.Join(global.IMAGE_PATH_OLD, f)) {
+ rawPath = path.Join(global.IMAGE_PATH_OLD, f)
+ }
if !global.PathExists(rawPath) && global.PathExists(rawPath+".cqimg") {
rawPath += ".cqimg"
}
diff --git a/global/fs.go b/global/fs.go
index 8aad7fb..43d8c3c 100644
--- a/global/fs.go
+++ b/global/fs.go
@@ -21,13 +21,17 @@ import (
)
var (
- IMAGE_PATH = path.Join("data", "images")
- VOICE_PATH = path.Join("data", "voices")
- VIDEO_PATH = path.Join("data", "videos")
- CACHE_PATH = path.Join("data", "cache")
+ IMAGE_PATH = path.Join("data", "images")
+ IMAGE_PATH_OLD = path.Join("data", "image")
+ VOICE_PATH = path.Join("data", "voices")
+ VOICE_PATH_OLD = path.Join("data", "record")
+ VIDEO_PATH = path.Join("data", "videos")
+ CACHE_PATH = path.Join("data", "cache")
HEADER_AMR = []byte("#!AMR")
HEADER_SILK = []byte("\x02#!SILK_V3")
+
+ ErrSyntax = errors.New("syntax error")
)
func PathExists(path string) bool {
@@ -58,7 +62,7 @@ func IsAMRorSILK(b []byte) bool {
}
func FindFile(f, cache, PATH string) (data []byte, err error) {
- data, err = nil, errors.New("syntax error")
+ data, err = nil, ErrSyntax
if strings.HasPrefix(f, "http") || strings.HasPrefix(f, "https") {
if cache == "" {
cache = "1"
From 289b96f18768b7a18cef1adf5964912704c569fa Mon Sep 17 00:00:00 2001
From: Mrs4s
Date: Fri, 18 Dec 2020 08:57:41 +0800
Subject: [PATCH 233/367] update raw.
---
coolq/api.go | 3 ++-
1 file changed, 2 insertions(+), 1 deletion(-)
diff --git a/coolq/api.go b/coolq/api.go
index 43293c8..01cf55a 100644
--- a/coolq/api.go
+++ b/coolq/api.go
@@ -754,7 +754,8 @@ func (bot *CQBot) CQGetMessage(messageId int32) MSG {
"user_id": sender.Uin,
"nickname": sender.Nickname,
},
- "time": msg["time"],
+ "time": msg["time"],
+ "message_raw": raw,
"message": ToFormattedMessage(bot.ConvertStringMessage(raw, isGroup), func() int64 {
if isGroup {
return gid.(int64)
From 6e3501a6f811e0743f9c211164df70a8662d5b38 Mon Sep 17 00:00:00 2001
From: Mrs4s
Date: Fri, 18 Dec 2020 09:10:09 +0800
Subject: [PATCH 234/367] fix #501.
---
coolq/bot.go | 2 +-
1 file changed, 1 insertion(+), 1 deletion(-)
diff --git a/coolq/bot.go b/coolq/bot.go
index a958e67..49347ed 100644
--- a/coolq/bot.go
+++ b/coolq/bot.go
@@ -88,7 +88,7 @@ func NewQQBot(cli *client.QQClient, conf *global.JsonConfig) *CQBot {
"self_id": bot.Client.Uin,
"post_type": "meta_event",
"meta_event_type": "heartbeat",
- "status": nil,
+ "status": bot.CQGetStatus()["data"],
"interval": 1000 * i,
})
}
From 6ea4bd829e055091afa07f4b66336a4a3700740e Mon Sep 17 00:00:00 2001
From: Mrs4s
Date: Fri, 18 Dec 2020 23:47:49 +0800
Subject: [PATCH 235/367] fix issue of get_msg image url empty. #503
---
coolq/cqcode.go | 5 +++--
1 file changed, 3 insertions(+), 2 deletions(-)
diff --git a/coolq/cqcode.go b/coolq/cqcode.go
index 50fbd54..f7d04e2 100644
--- a/coolq/cqcode.go
+++ b/coolq/cqcode.go
@@ -10,6 +10,7 @@ import (
"fmt"
"io/ioutil"
"math"
+ "math/rand"
"net/url"
"path"
"runtime"
@@ -871,7 +872,7 @@ func (bot *CQBot) makeImageElem(d map[string]string, group bool) (message.IMessa
return nil, errors.New("invalid hash")
}
if group {
- rsp, err := bot.Client.QueryGroupImage(1, hash, size)
+ rsp, err := bot.Client.QueryGroupImage(int64(rand.Uint32()), hash, size)
if err != nil {
if url != "" {
return bot.makeImageElem(map[string]string{"file": url}, group)
@@ -880,7 +881,7 @@ func (bot *CQBot) makeImageElem(d map[string]string, group bool) (message.IMessa
}
return rsp, nil
}
- rsp, err := bot.Client.QueryFriendImage(1, hash, size)
+ rsp, err := bot.Client.QueryFriendImage(int64(rand.Uint32()), hash, size)
if err != nil {
if url != "" {
return bot.makeImageElem(map[string]string{"file": url}, group)
From 3d5cec13d0194b61c27bef041ba9ef37ad7bf927 Mon Sep 17 00:00:00 2001
From: Mrs4s
Date: Fri, 18 Dec 2020 23:56:27 +0800
Subject: [PATCH 236/367] update doc.
---
docs/cqhttp.md | 18 ++++++++++++++++++
1 file changed, 18 insertions(+)
diff --git a/docs/cqhttp.md b/docs/cqhttp.md
index 9243b4f..ecbfa60 100644
--- a/docs/cqhttp.md
+++ b/docs/cqhttp.md
@@ -736,6 +736,24 @@ Type: `tts`
> 注意: 所有统计信息都将在重启后重制
+### 获取群@全体成员剩余次数
+
+终结点: `/get_group_at_all_remain`
+
+**参数**
+
+| 字段 | 类型 | 说明 |
+| ---------- | ------ | ------------------------- |
+| `group_id` | int64 | 群号 |
+
+**响应数据**
+
+| 字段 | 类型 | 说明 |
+| ------------------------------- | ---------- | ------------------------------- |
+| `can_at_all` | bool | 是否可以@全体成员 |
+| `remain_at_all_count_for_group` | int16 | 群内所有管理当天剩余@全体成员次数 |
+| `remain_at_all_count_for_uin` | int16 | BOT当天剩余@全体成员次数 |
+
## 事件
### 群消息撤回
From 9dc519ff771ac32850f9a5e183ce550345367d96 Mon Sep 17 00:00:00 2001
From: Mrs4s
Date: Sat, 19 Dec 2020 02:09:36 +0800
Subject: [PATCH 237/367] feature fix url & update doc.
---
coolq/cqcode.go | 16 +++++++++++++++-
docs/config.md | 9 +++++----
global/config.go | 1 +
global/param.go | 20 ++++++++++++++++++++
server/apiAdmin.go | 1 +
5 files changed, 42 insertions(+), 5 deletions(-)
diff --git a/coolq/cqcode.go b/coolq/cqcode.go
index f7d04e2..29fe1e6 100644
--- a/coolq/cqcode.go
+++ b/coolq/cqcode.go
@@ -31,6 +31,7 @@ var paramReg = regexp.MustCompile(`,([\w\-.]+?)=([^,\]]+)`)
*/
var IgnoreInvalidCQCode = false
+var SplitUrl = false
type PokeElement struct {
Target int64
@@ -343,7 +344,13 @@ func (bot *CQBot) ConvertStringMessage(msg string, group bool) (r []message.IMes
}
saveTempText := func() {
if len(tempText) != 0 {
- r = append(r, message.NewText(CQCodeUnescapeValue(string(tempText))))
+ if SplitUrl {
+ for _, t := range global.SplitUrl(CQCodeUnescapeValue(string(tempText))) {
+ r = append(r, message.NewText(t))
+ }
+ } else {
+ r = append(r, message.NewText(CQCodeUnescapeValue(string(tempText))))
+ }
}
tempText = []rune{}
cqCode = []rune{}
@@ -506,6 +513,13 @@ func (bot *CQBot) ConvertObjectMessage(m gjson.Result, group bool) (r []message.
func (bot *CQBot) ToElement(t string, d map[string]string, group bool) (m interface{}, err error) {
switch t {
case "text":
+ if SplitUrl {
+ var ret []message.IMessageElement
+ for _, text := range global.SplitUrl(d["text"]) {
+ ret = append(ret, message.NewText(text))
+ }
+ return ret, nil
+ }
return message.NewText(d["text"]), nil
case "image":
img, err := bot.makeImageElem(d, group)
diff --git a/docs/config.md b/docs/config.md
index 19595f4..495f245 100644
--- a/docs/config.md
+++ b/docs/config.md
@@ -78,6 +78,7 @@ go-cqhttp 支持导入CQHTTP的配置文件, 具体步骤为:
| post_message_format | string | 上报信息类型 |
| ignore_invalid_cqcode | bool | 是否忽略错误的CQ码 |
| force_fragmented | bool | 是否强制分片发送群长消息 |
+| fix_url | bool | 是否对链接的发送进行预处理, 可缓解链接信息被风控导致无法发送的情况, 但可能影响客户端着色(不影响内容)|
| use_sso_address | bool | 是否使用服务器下发的地址 |
| heartbeat_interval | int64 | 心跳间隔时间,单位秒。小于0则关闭心跳,等于0使用默认值(5秒) |
| http_config | object | HTTP API配置 |
@@ -112,10 +113,10 @@ go-cqhttp 支持导入CQHTTP的配置文件, 具体步骤为:
| 值 | 类型 | 限制 |
| --- | ------------- | ---------------------------------------------------------------- |
-| 0 | iPad | 无 |
-| 1 | Android Phone | 无法接收新版表情如 `/吃瓜 /汪汪`, 会自动转换为字符串 |
-| 2 | Android Watch | 除`Android Phone`的限制外, 无法接收 `notify` 事件、无法接收口令红包、无法接收撤回消息 |
-| 3 | MacOS | 无 |
+| 0 | iPad | 无 |
+| 1 | Android Phone | 无 |
+| 2 | Android Watch | 无法接收 `notify` 事件、无法接收口令红包、无法接收撤回消息 |
+| 3 | MacOS | 无 |
> 注意, 根据协议的不同, 各类消息有所限制
diff --git a/global/config.go b/global/config.go
index 25b023c..d476ace 100644
--- a/global/config.go
+++ b/global/config.go
@@ -153,6 +153,7 @@ type JsonConfig struct {
} `json:"_rate_limit"`
IgnoreInvalidCQCode bool `json:"ignore_invalid_cqcode"`
ForceFragmented bool `json:"force_fragmented"`
+ FixUrl bool `json:"fix_url"`
ProxyRewrite string `json:"proxy_rewrite"`
HeartbeatInterval time.Duration `json:"heartbeat_interval"`
HttpConfig *GoCQHttpConfig `json:"http_config"`
diff --git a/global/param.go b/global/param.go
index 7acd5eb..3d18273 100644
--- a/global/param.go
+++ b/global/param.go
@@ -71,3 +71,23 @@ func VersionNameCompare(current, remote string) bool {
}
return len(cur) < len(re)
}
+
+func SplitUrl(s string) []string {
+ reg := regexp.MustCompile(`[a-zA-Z0-9][-a-zA-Z0-9]{0,62}(\.[a-zA-Z0-9][-a-zA-Z0-9]{0,62})+\.?`)
+ idx := reg.FindAllStringIndex(s, -1)
+ if len(idx) == 0 {
+ return []string{s}
+ }
+ var result []string
+ last := 0
+ for i := 0; i < len(idx); i++ {
+ if len(idx[i]) != 2 {
+ continue
+ }
+ m := int(math.Abs(float64(idx[i][0]-idx[i][1]))/1.5) + idx[i][0]
+ result = append(result, s[last:m])
+ last = m
+ }
+ result = append(result, s[last:])
+ return result
+}
diff --git a/server/apiAdmin.go b/server/apiAdmin.go
index 15f3e00..1113e33 100644
--- a/server/apiAdmin.go
+++ b/server/apiAdmin.go
@@ -239,6 +239,7 @@ func (s *webServer) Dologin() {
global.BootFilter()
global.InitCodec()
coolq.IgnoreInvalidCQCode = conf.IgnoreInvalidCQCode
+ coolq.SplitUrl = conf.FixUrl
coolq.ForceFragmented = conf.ForceFragmented
log.Info("资源初始化完成, 开始处理信息.")
log.Info("アトリは、高性能ですから!")
From e32137ceeba36466fa54aab9f098e22f5cfae8d1 Mon Sep 17 00:00:00 2001
From: Mrs4s
Date: Sat, 19 Dec 2020 02:10:57 +0800
Subject: [PATCH 238/367] update MiraiGo.
---
go.mod | 2 +-
go.sum | 11 ++---------
2 files changed, 3 insertions(+), 10 deletions(-)
diff --git a/go.mod b/go.mod
index dd4203b..1e18cb5 100644
--- a/go.mod
+++ b/go.mod
@@ -3,7 +3,7 @@ module github.com/Mrs4s/go-cqhttp
go 1.15
require (
- github.com/Mrs4s/MiraiGo v0.0.0-20201215154627-d5a9fc8d7d72
+ github.com/Mrs4s/MiraiGo v0.0.0-20201218175143-7312c96e82f7
github.com/dustin/go-humanize v1.0.0
github.com/getlantern/go-update v0.0.0-20190510022740-79c495ab728c
github.com/getlantern/golog v0.0.0-20201105130739-9586b8bde3a9 // indirect
diff --git a/go.sum b/go.sum
index 02abc39..f8c0867 100644
--- a/go.sum
+++ b/go.sum
@@ -1,13 +1,7 @@
cloud.google.com/go v0.26.0/go.mod h1:aQUYkXzVsufM+DwF1aE+0xfcU+56JwCaLick0ClmMTw=
github.com/BurntSushi/toml v0.3.1/go.mod h1:xHWCNGjB5oqiDr8zfno3MHue2Ht5sIBksp03qcyfWMU=
-github.com/Mrs4s/MiraiGo v0.0.0-20201212132428-af0230171ee1 h1:NA46lAqHDhrXMRBjHmnnDDyEbv6d5Ajh4UyO1Dqra7U=
-github.com/Mrs4s/MiraiGo v0.0.0-20201212132428-af0230171ee1/go.mod h1:o+me0DWqTbZU4Xmu2D1gIpCditlwt+vMTNZmjvApf5Y=
-github.com/Mrs4s/MiraiGo v0.0.0-20201212141451-52096c28df90 h1:/qGcbSQGHqYFUPZVIWWKD/KUkofW4B7msBva5f8R2mY=
-github.com/Mrs4s/MiraiGo v0.0.0-20201212141451-52096c28df90/go.mod h1:o+me0DWqTbZU4Xmu2D1gIpCditlwt+vMTNZmjvApf5Y=
-github.com/Mrs4s/MiraiGo v0.0.0-20201214083047-7e587643012f h1:MMK0Xauag2CmwFvAu7PLq9jOT+sm+WWCByCCoQBDY2w=
-github.com/Mrs4s/MiraiGo v0.0.0-20201214083047-7e587643012f/go.mod h1:o+me0DWqTbZU4Xmu2D1gIpCditlwt+vMTNZmjvApf5Y=
-github.com/Mrs4s/MiraiGo v0.0.0-20201215154627-d5a9fc8d7d72 h1:HX6wkKQC9aKdiUCDUlafOycR8LRkUPep2B3XLvd5xVA=
-github.com/Mrs4s/MiraiGo v0.0.0-20201215154627-d5a9fc8d7d72/go.mod h1:o+me0DWqTbZU4Xmu2D1gIpCditlwt+vMTNZmjvApf5Y=
+github.com/Mrs4s/MiraiGo v0.0.0-20201218175143-7312c96e82f7 h1:h4QVB94oL6riP5hYb2BWqJ6KGP7zQVGPXd91V/IQm9g=
+github.com/Mrs4s/MiraiGo v0.0.0-20201218175143-7312c96e82f7/go.mod h1:o+me0DWqTbZU4Xmu2D1gIpCditlwt+vMTNZmjvApf5Y=
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=
@@ -76,7 +70,6 @@ github.com/gorilla/websocket v1.4.2 h1:+/TMaTYc4QFitKJxsQ7Yye35DkWvkdLcvGKqM+x0U
github.com/gorilla/websocket v1.4.2/go.mod h1:YR8l580nyteQvAITg2hZ9XVh4b55+EU/adAjf1fMHhE=
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/hjson/hjson-go v0.2.3 h1:KhG7/PSxTibbYOzFso5FoiX2gWePcANaCsvM1WE/bTo=
github.com/hjson/hjson-go v3.1.0+incompatible h1:DY/9yE8ey8Zv22bY+mHV1uk2yRy0h8tKhZ77hEdi0Aw=
github.com/hjson/hjson-go v3.1.0+incompatible/go.mod h1:qsetwF8NlsTsOTwZTApNlTCerV+b2GjYRRcIk4JMFio=
github.com/hpcloud/tail v1.0.0/go.mod h1:ab1qPbhIpdTxEkNHXyeSf5vhxWSCs/tWer42PpOxQnU=
From a1e19bb66e7f441f5760a5b1d2c2c8db094524b9 Mon Sep 17 00:00:00 2001
From: Mrs4s <1844812067@qq.com>
Date: Sun, 20 Dec 2020 13:01:55 +0800
Subject: [PATCH 239/367] update MiraiGo.
---
go.mod | 2 +-
go.sum | 2 ++
2 files changed, 3 insertions(+), 1 deletion(-)
diff --git a/go.mod b/go.mod
index 1e18cb5..6336872 100644
--- a/go.mod
+++ b/go.mod
@@ -3,7 +3,7 @@ module github.com/Mrs4s/go-cqhttp
go 1.15
require (
- github.com/Mrs4s/MiraiGo v0.0.0-20201218175143-7312c96e82f7
+ github.com/Mrs4s/MiraiGo v0.0.0-20201220045933-93ff7797ed6b
github.com/dustin/go-humanize v1.0.0
github.com/getlantern/go-update v0.0.0-20190510022740-79c495ab728c
github.com/getlantern/golog v0.0.0-20201105130739-9586b8bde3a9 // indirect
diff --git a/go.sum b/go.sum
index f8c0867..a874273 100644
--- a/go.sum
+++ b/go.sum
@@ -2,6 +2,8 @@ cloud.google.com/go v0.26.0/go.mod h1:aQUYkXzVsufM+DwF1aE+0xfcU+56JwCaLick0ClmMT
github.com/BurntSushi/toml v0.3.1/go.mod h1:xHWCNGjB5oqiDr8zfno3MHue2Ht5sIBksp03qcyfWMU=
github.com/Mrs4s/MiraiGo v0.0.0-20201218175143-7312c96e82f7 h1:h4QVB94oL6riP5hYb2BWqJ6KGP7zQVGPXd91V/IQm9g=
github.com/Mrs4s/MiraiGo v0.0.0-20201218175143-7312c96e82f7/go.mod h1:o+me0DWqTbZU4Xmu2D1gIpCditlwt+vMTNZmjvApf5Y=
+github.com/Mrs4s/MiraiGo v0.0.0-20201220045933-93ff7797ed6b h1:ouLBabLLv2eCtLbl/MEQuLzQ3ANXZ/u3x7vTQyWdG+E=
+github.com/Mrs4s/MiraiGo v0.0.0-20201220045933-93ff7797ed6b/go.mod h1:o+me0DWqTbZU4Xmu2D1gIpCditlwt+vMTNZmjvApf5Y=
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=
From f258b010b968398ff1ba23903cdfad26720ea636 Mon Sep 17 00:00:00 2001
From: wdvxdr
Date: Sun, 20 Dec 2020 19:11:08 +0800
Subject: [PATCH 240/367] websocket not found method
---
server/websocket.go | 10 ++++++++++
1 file changed, 10 insertions(+)
diff --git a/server/websocket.go b/server/websocket.go
index 468c2b3..db22aee 100644
--- a/server/websocket.go
+++ b/server/websocket.go
@@ -333,6 +333,16 @@ func (c *websocketConn) handleRequest(bot *coolq.CQBot, payload []byte) {
c.Lock()
defer c.Unlock()
_ = c.WriteJSON(ret)
+ } else {
+ ret := global.MSG{
+ "status": "failed",
+ "retcode": 1404,
+ "data": nil,
+ }
+ if j.Get("echo").Exists() {
+ ret["echo"] = j.Get("echo").Value()
+ }
+ _ = c.WriteJSON(ret)
}
}
From 73774681af5ec8fb3cbbd099fb2dcc8d971d099c Mon Sep 17 00:00:00 2001
From: wdvxdr
Date: Sun, 20 Dec 2020 19:14:42 +0800
Subject: [PATCH 241/367] fix lock
---
server/websocket.go | 8 +++-----
1 file changed, 3 insertions(+), 5 deletions(-)
diff --git a/server/websocket.go b/server/websocket.go
index db22aee..75b3701 100644
--- a/server/websocket.go
+++ b/server/websocket.go
@@ -334,14 +334,12 @@ func (c *websocketConn) handleRequest(bot *coolq.CQBot, payload []byte) {
defer c.Unlock()
_ = c.WriteJSON(ret)
} else {
- ret := global.MSG{
- "status": "failed",
- "retcode": 1404,
- "data": nil,
- }
+ ret := coolq.Failed(1404,"API_NOT_FOUND","API不存在")
if j.Get("echo").Exists() {
ret["echo"] = j.Get("echo").Value()
}
+ c.Lock()
+ defer c.Unlock()
_ = c.WriteJSON(ret)
}
}
From 17ea1e54bd84f7b2199c93ee3d1fb00b63693671 Mon Sep 17 00:00:00 2001
From: Mrs4s <1844812067@qq.com>
Date: Sun, 20 Dec 2020 22:30:46 +0800
Subject: [PATCH 242/367] add user group.
---
main.go | 1 +
1 file changed, 1 insertion(+)
diff --git a/main.go b/main.go
index 428c8ce..2bb8d63 100644
--- a/main.go
+++ b/main.go
@@ -218,6 +218,7 @@ func main() {
log.Warnf("警告: 在Debug模式下未启用WebUi服务, 将无法进行性能分析.")
}
}
+ log.Info("用户交流群: 721829413")
if !global.PathExists("device.json") {
log.Warn("虚拟设备信息不存在, 将自动生成随机设备.")
client.GenRandomDevice()
From 4b32b30f89e14e432ba0ed8e1de892d347d88045 Mon Sep 17 00:00:00 2001
From: ishkong
Date: Thu, 24 Dec 2020 20:26:40 +0800
Subject: [PATCH 243/367] update doc.
---
docs/cqhttp.md | 17 +++++++++++++++++
1 file changed, 17 insertions(+)
diff --git a/docs/cqhttp.md b/docs/cqhttp.md
index ecbfa60..d794c93 100644
--- a/docs/cqhttp.md
+++ b/docs/cqhttp.md
@@ -41,6 +41,7 @@
##### 事件
- [群消息撤回](#群消息撤回)
- [好友消息撤回](#好友消息撤回)
+- [好友戳一戳](#好友戳一戳)
- [群内戳一戳](#群内戳一戳)
- [群红包运气王提示](#群红包运气王提示)
- [群成员荣誉变更提示](#群成员荣誉变更提示)
@@ -81,6 +82,7 @@ Type : `image`
示例: `[CQ:image,file=http://baidu.com/1.jpg,type=show,id=40004]`
+> 注意:图片总大小不能超过30MB,gif总帧数不能超过300帧
### 回复
@@ -780,6 +782,21 @@ Type: `tts`
| `user_id` | int64 | | 好友id |
| `message_id` | int64 | | 被撤回的消息id |
+## 好友戳一戳
+
+**事件数据**
+
+| 字段名 | 数据类型 | 可能的值 | 说明 |
+| ------------- | ------ | -------- | --- |
+| `post_type` | string | `notice` | 上报类型 |
+| `notice_type` | string | `notify` | 消息类型 |
+| `sub_type` | string | `poke` | 提示类型 |
+| `self_id` | int64 | | BOT QQ 号 |
+| `sender_id` | int64 | | 发送者 QQ 号 |
+| `user_id` | int64 | | 发送者 QQ 号 |
+| `target_id` | int64 | | 被戳者 QQ 号 |
+| `time` | int64 | | 时间 |
+
### 群内戳一戳
> 注意:此事件无法在平板和手表协议上触发
From e398dc2e025ecf0008c780870dfef4ec2f7c4b2f Mon Sep 17 00:00:00 2001
From: ishkong
Date: Thu, 24 Dec 2020 20:32:00 +0800
Subject: [PATCH 244/367] Update README.md
---
README.md | 3 ++-
1 file changed, 2 insertions(+), 1 deletion(-)
diff --git a/README.md b/README.md
index 670cca3..286f8df 100644
--- a/README.md
+++ b/README.md
@@ -1,6 +1,7 @@
# go-cqhttp
使用 [mirai](https://github.com/mamoe/mirai) 以及 [MiraiGo](https://github.com/Mrs4s/MiraiGo) 开发的cqhttp golang原生实现, 并在[cqhttp原版](https://github.com/richardchien/coolq-http-api)的基础上做了部分修改和拓展.
-文档暂时可查看 `docs` 目录, 目前还在撰写中.
+
+文档暂时可前往[Go-cqhttp帮助中心](http://ishkong.github.io/go-cqhttp-docs)查看, 目前还在撰写中.
测试版可前往 Release 下载
From 7b831cfa1e5d65e1555cbe1d331fb2929e68411e Mon Sep 17 00:00:00 2001
From: yanyongyu
Date: Fri, 25 Dec 2020 14:18:37 +0800
Subject: [PATCH 245/367] :memo: update readme
---
README.md | 158 ++++++++++++++++++++++++++++++++++--------------------
1 file changed, 101 insertions(+), 57 deletions(-)
diff --git a/README.md b/README.md
index 286f8df..d2d4811 100644
--- a/README.md
+++ b/README.md
@@ -1,48 +1,87 @@
+
+
+
+
+
+
# go-cqhttp
-使用 [mirai](https://github.com/mamoe/mirai) 以及 [MiraiGo](https://github.com/Mrs4s/MiraiGo) 开发的cqhttp golang原生实现, 并在[cqhttp原版](https://github.com/richardchien/coolq-http-api)的基础上做了部分修改和拓展.
-文档暂时可前往[Go-cqhttp帮助中心](http://ishkong.github.io/go-cqhttp-docs)查看, 目前还在撰写中.
+_✨ 基于 [Mirai](https://github.com/mamoe/mirai) 以及 [MiraiGo](https://github.com/Mrs4s/MiraiGo) 的 [cqhttp](https://github.com/howmanybots/onebot/blob/master/README.md) golang 原生实现 ✨_
-测试版可前往 Release 下载
+
-# 兼容性
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+ 文档
+ ·
+ 下载
+ ·
+ 开始使用
+
+
+---
+
+go-cqhttp 在[原版 cqhttp](https://github.com/richardchien/coolq-http-api)的基础上做了部分修改和拓展.
+
+---
+
+## 兼容性
+
+### 接口
-#### 接口
- [x] HTTP API
-- [x] 反向HTTP POST
-- [x] 正向Websocket
-- [x] 反向Websocket
+- [x] 反向 HTTP POST
+- [x] 正向 Websocket
+- [x] 反向 Websocket
-#### 拓展支持
-> 拓展API可前往 [文档](docs/cqhttp.md) 查看
-- [x] HTTP POST多点上报
-- [x] 反向WS多点连接
+### 拓展支持
+
+> 拓展 API 可前往 [文档](docs/cqhttp.md) 查看
+
+- [x] HTTP POST 多点上报
+- [x] 反向 WS 多点连接
- [x] 修改群名
- [x] 消息撤回事件
- [x] 解析/发送 回复消息
- [x] 解析/发送 合并转发
- [x] 使用代理请求网络图片
-#### 实现
+### 实现
+
已实现CQ码
-##### 符合Onebot标准的CQ码
-| CQ码 | 功能 |
-| ------------ | ---------------------------- |
-| [CQ:face] | [QQ表情] |
-| [CQ:record] | [语音] |
-| [CQ:video] | [短视频] |
-| [CQ:at] | [@某人] |
-| [CQ:share] | [链接分享] |
-| [CQ:music] | [音乐分享] [音乐自定义分享] |
-| [CQ:reply] | [回复] |
-| [CQ:forward] | [合并转发] |
-| [CQ:node] | [合并转发节点] |
-| [CQ:xml] | [XML消息] |
-| [CQ:json] | [JSON消息] |
+#### 符合 Onebot 标准的 CQ 码
-[QQ表情]: https://github.com/howmanybots/onebot/blob/master/v11/specs/message/segment.md#qq-%E8%A1%A8%E6%83%85
+| CQ 码 | 功能 |
+| ------------ | --------------------------- |
+| [CQ:face] | [QQ 表情] |
+| [CQ:record] | [语音] |
+| [CQ:video] | [短视频] |
+| [CQ:at] | [@某人] |
+| [CQ:share] | [链接分享] |
+| [CQ:music] | [音乐分享] [音乐自定义分享] |
+| [CQ:reply] | [回复] |
+| [CQ:forward] | [合并转发] |
+| [CQ:node] | [合并转发节点] |
+| [CQ:xml] | [XML 消息] |
+| [CQ:json] | [JSON 消息] |
+
+[qq 表情]: https://github.com/howmanybots/onebot/blob/master/v11/specs/message/segment.md#qq-%E8%A1%A8%E6%83%85
[语音]: https://github.com/howmanybots/onebot/blob/master/v11/specs/message/segment.md#%E8%AF%AD%E9%9F%B3
[短视频]: https://github.com/howmanybots/onebot/blob/master/v11/specs/message/segment.md#%E7%9F%AD%E8%A7%86%E9%A2%91
[@某人]: https://github.com/howmanybots/onebot/blob/master/v11/specs/message/segment.md#%E6%9F%90%E4%BA%BA
@@ -52,26 +91,27 @@
[回复]: https://github.com/howmanybots/onebot/blob/master/v11/specs/message/segment.md#%E5%9B%9E%E5%A4%8D
[合并转发]: https://github.com/howmanybots/onebot/blob/master/v11/specs/message/segment.md#%E5%90%88%E5%B9%B6%E8%BD%AC%E5%8F%91-
[合并转发节点]: https://github.com/howmanybots/onebot/blob/master/v11/specs/message/segment.md#%E5%90%88%E5%B9%B6%E8%BD%AC%E5%8F%91%E8%8A%82%E7%82%B9-
-[XML消息]: https://github.com/howmanybots/onebot/blob/master/v11/specs/message/segment.md#xml-%E6%B6%88%E6%81%AF
-[JSON消息]: https://github.com/howmanybots/onebot/blob/master/v11/specs/message/segment.md#json-%E6%B6%88%E6%81%AF
+[xml 消息]: https://github.com/howmanybots/onebot/blob/master/v11/specs/message/segment.md#xml-%E6%B6%88%E6%81%AF
+[json 消息]: https://github.com/howmanybots/onebot/blob/master/v11/specs/message/segment.md#json-%E6%B6%88%E6%81%AF
-##### 拓展CQ码及与Onebot标准有略微差异的CQ码
-| 拓展CQ码 | 功能 |
-| -------------- | ------------------------------- |
-| [CQ:image] | [图片] |
-| [CQ:redbag] | [红包] |
-| [CQ:poke] | [戳一戳] |
-| [CQ:gift] | [礼物] |
-| [CQ:node] | [合并转发消息节点] |
-| [CQ:cardimage] | [一种xml的图片消息(装逼大图)] |
-| [CQ:tts] | [文本转语音] |
+#### 拓展 CQ 码及与 Onebot 标准有略微差异的 CQ 码
+
+| 拓展 CQ 码 | 功能 |
+| -------------- | --------------------------------- |
+| [CQ:image] | [图片] |
+| [CQ:redbag] | [红包] |
+| [CQ:poke] | [戳一戳] |
+| [CQ:gift] | [礼物] |
+| [CQ:node] | [合并转发消息节点] |
+| [CQ:cardimage] | [一种 xml 的图片消息(装逼大图)] |
+| [CQ:tts] | [文本转语音] |
[图片]: docs/cqhttp.md#%E5%9B%BE%E7%89%87
[红包]: docs/cqhttp.md#%E7%BA%A2%E5%8C%85
[戳一戳]: docs/cqhttp.md#%E6%88%B3%E4%B8%80%E6%88%B3
[礼物]: docs/cqhttp.md#%E7%A4%BC%E7%89%A9
[合并转发消息节点]: docs/cqhttp.md#%E5%90%88%E5%B9%B6%E8%BD%AC%E5%8F%91%E6%B6%88%E6%81%AF%E8%8A%82%E7%82%B9
-[一种xml的图片消息(装逼大图)]: docs/cqhttp.md#cardimage-%E4%B8%80%E7%A7%8Dxml%E7%9A%84%E5%9B%BE%E7%89%87%E6%B6%88%E6%81%AF%E8%A3%85%E9%80%BC%E5%A4%A7%E5%9B%BE
+[一种 xml 的图片消息(装逼大图)]: docs/cqhttp.md#cardimage-%E4%B8%80%E7%A7%8Dxml%E7%9A%84%E5%9B%BE%E7%89%87%E6%B6%88%E6%81%AF%E8%A3%85%E9%80%BC%E5%A4%A7%E5%9B%BE
[文本转语音]: docs/cqhttp.md#%E6%96%87%E6%9C%AC%E8%BD%AC%E8%AF%AD%E9%9F%B3
@@ -79,7 +119,8 @@
已实现API
-##### 符合Onebot标准的API
+#### 符合 Onebot 标准的 API
+
| API | 功能 |
| ------------------------ | ---------------------- |
| /send_private_msg | [发送私聊消息] |
@@ -107,10 +148,9 @@
| /can_send_image | [检查是否可以发送图片] |
| /can_send_record | [检查是否可以发送语音] |
| /get_version_info | [获取版本信息] |
-| /set_restart | [重启go-cqhttp] |
+| /set_restart | [重启 go-cqhttp] |
| /.handle_quick_operation | [对事件执行快速操作] |
-
[发送私聊消息]: 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
[发送群消息]: 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
[发送消息]: 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
@@ -136,11 +176,12 @@
[检查是否可以发送图片]: 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
[检查是否可以发送语音]: 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
[获取版本信息]: 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
-[重启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
+[重启 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
[对事件执行快速操作]: https://github.com/howmanybots/onebot/blob/master/v11/specs/api/hidden.md#handle_quick_operation-%E5%AF%B9%E4%BA%8B%E4%BB%B6%E6%89%A7%E8%A1%8C%E5%BF%AB%E9%80%9F%E6%93%8D%E4%BD%9C
-##### 拓展API及与Onebot标准有略微差异的API
-| 拓展API | 功能 |
+#### 拓展 API 及与 Onebot 标准有略微差异的 API
+
+| 拓展 API | 功能 |
| --------------------------- | ---------------------- |
| /set_group_portrait | [设置群头像] |
| /get_image | [获取图片信息] |
@@ -148,7 +189,7 @@
| /get_forward_msg | [获取合并转发内容] |
| /send_group_forward_msg | [发送合并转发(群)] |
| /.get_word_slices | [获取中文分词] |
-| /.ocr_image | [图片OCR] |
+| /.ocr_image | [图片 OCR] |
| /get_group_system_msg | [获取群系统消息] |
| /get_group_file_system_info | [获取群文件系统信息] |
| /get_group_root_files | [获取群根目录文件列表] |
@@ -162,7 +203,7 @@
[获取合并转发内容]: docs/cqhttp.md#%E8%8E%B7%E5%8F%96%E5%90%88%E5%B9%B6%E8%BD%AC%E5%8F%91%E5%86%85%E5%AE%B9
[发送合并转发(群)]: docs/cqhttp.md#%E5%8F%91%E9%80%81%E5%90%88%E5%B9%B6%E8%BD%AC%E5%8F%91%E7%BE%A4
[获取中文分词]: docs/cqhttp.md#%E8%8E%B7%E5%8F%96%E4%B8%AD%E6%96%87%E5%88%86%E8%AF%8D
-[图片OCR]: docs/cqhttp.md#%E5%9B%BE%E7%89%87ocr
+[图片 ocr]: docs/cqhttp.md#%E5%9B%BE%E7%89%87ocr
[获取群系统消息]: docs/cqhttp.md#%E8%8E%B7%E5%8F%96%E7%BE%A4%E7%B3%BB%E7%BB%9F%E6%B6%88%E6%81%AF
[获取群文件系统信息]: docs/cqhttp.md#%E8%8E%B7%E5%8F%96%E7%BE%A4%E6%96%87%E4%BB%B6%E7%B3%BB%E7%BB%9F%E4%BF%A1%E6%81%AF
[获取群根目录文件列表]: docs/cqhttp.md#%E8%8E%B7%E5%8F%96%E7%BE%A4%E6%A0%B9%E7%9B%AE%E5%BD%95%E6%96%87%E4%BB%B6%E5%88%97%E8%A1%A8
@@ -175,7 +216,8 @@
已实现Event
-##### 符合Onebot标准的Event(部分Event比Onebot标准多上报几个字段,不影响使用)
+#### 符合 Onebot 标准的 Event(部分 Event 比 Onebot 标准多上报几个字段,不影响使用)
+
| 事件类型 | Event |
| -------- | ---------------- |
| 消息事件 | [私聊信息] |
@@ -210,8 +252,9 @@
[加好友请求]: 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
-##### 拓展Event
-| 事件类型 | 拓展Event |
+#### 拓展 Event
+
+| 事件类型 | 拓展 Event |
| -------- | ---------------- |
| 通知事件 | [好友戳一戳] |
| 通知事件 | [群成员名片更新] |
@@ -223,16 +266,17 @@
-# 关于ISSUE
+## 关于 ISSUE
-以下ISSUE会被直接关闭
-- 提交BUG不使用Template
+以下 ISSUE 会被直接关闭
+
+- 提交 BUG 不使用 Template
- 询问已知问题
- 提问找不到重点
- 重复提问
> 请注意, 开发者并没有义务回复您的问题. 您应该具备基本的提问技巧。
-# 性能
+## 性能
-在关闭数据库的情况下, 加载25个好友128个群运行24小时后内存使用为10MB左右. 开启数据库后内存使用将根据消息量增加10-20MB, 如果系统内存小于128M建议关闭数据库使用.
+在关闭数据库的情况下, 加载 25 个好友 128 个群运行 24 小时后内存使用为 10MB 左右. 开启数据库后内存使用将根据消息量增加 10-20MB, 如果系统内存小于 128M 建议关闭数据库使用.
From 13a0a0cfd162556a1c99a8bba2d6c983180df746 Mon Sep 17 00:00:00 2001
From: wdvxdr
Date: Fri, 25 Dec 2020 20:34:51 +0800
Subject: [PATCH 246/367] =?UTF-8?q?group=20forward=20msg=E5=A5=97=E5=A8=83?=
MIME-Version: 1.0
Content-Type: text/plain; charset=UTF-8
Content-Transfer-Encoding: 8bit
---
coolq/api.go | 42 ++++++++++++++++++++++++++++++++++--------
global/filter.go | 6 +++---
server/websocket.go | 2 +-
3 files changed, 38 insertions(+), 12 deletions(-)
diff --git a/coolq/api.go b/coolq/api.go
index 01cf55a..9a1a36d 100644
--- a/coolq/api.go
+++ b/coolq/api.go
@@ -232,7 +232,7 @@ func (bot *CQBot) CQSendGroupForwardMessage(groupId int64, m gjson.Result) MSG {
if m.Type != gjson.JSON {
return Failed(100)
}
- var nodes []*message.ForwardNode
+ var sendNodes []*message.ForwardNode
ts := time.Now().Add(-time.Minute * 5)
hasCustom := func() bool {
for _, item := range m.Array() {
@@ -242,13 +242,14 @@ func (bot *CQBot) CQSendGroupForwardMessage(groupId int64, m gjson.Result) MSG {
}
return false
}()
- convert := func(e gjson.Result) {
+ var convert func(e gjson.Result) []*message.ForwardNode
+ convert = func(e gjson.Result) (nodes []*message.ForwardNode) {
if e.Get("type").Str != "node" {
- return
+ return nil
}
ts.Add(time.Second)
if e.Get("data.id").Exists() {
- i, _ := strconv.Atoi(e.Get("data.id").Str)
+ i, _ := strconv.Atoi(e.Get("data.id").String())
m := bot.GetMessage(int32(i))
if m != nil {
sender := m["sender"].(message.Sender)
@@ -270,6 +271,30 @@ func (bot *CQBot) CQSendGroupForwardMessage(groupId int64, m gjson.Result) MSG {
}
uin, _ := strconv.ParseInt(e.Get("data.uin").Str, 10, 64)
name := e.Get("data.name").Str
+ c := e.Get("data.content")
+ if c.IsArray() {
+ flag := false
+ c.ForEach(func(_, value gjson.Result) bool {
+ if value.Get("type").String() == "node" {
+ flag = true
+ return false
+ }
+ return true
+ })
+ if flag {
+ var taowa []*message.ForwardNode
+ for _, item := range c.Array() {
+ taowa = append(taowa, convert(item)...)
+ }
+ nodes = append(nodes, &message.ForwardNode{
+ SenderId: uin,
+ SenderName: name,
+ Time: int32(ts.Unix()),
+ Message: []message.IMessageElement{bot.Client.UploadGroupForwardMessage(groupId, &message.ForwardMessage{Nodes: taowa})},
+ })
+ return
+ }
+ }
content := bot.ConvertObjectMessage(e.Get("data.content"), true)
if uin != 0 && name != "" && len(content) > 0 {
var newElem []message.IMessageElement
@@ -294,16 +319,17 @@ func (bot *CQBot) CQSendGroupForwardMessage(groupId int64, m gjson.Result) MSG {
return
}
log.Warnf("警告: 非法 Forward node 将跳过")
+ return
}
if m.IsArray() {
for _, item := range m.Array() {
- convert(item)
+ sendNodes = append(sendNodes, convert(item)...)
}
} else {
- convert(m)
+ sendNodes = convert(m)
}
- if len(nodes) > 0 {
- gm := bot.Client.SendGroupForwardMessage(groupId, &message.ForwardMessage{Nodes: nodes})
+ if len(sendNodes) > 0 {
+ gm := bot.Client.SendGroupForwardMessage(groupId, &message.ForwardMessage{Nodes: sendNodes})
return OK(MSG{
"message_id": ToGlobalId(groupId, gm.Id),
})
diff --git a/global/filter.go b/global/filter.go
index 44f25a4..c617167 100644
--- a/global/filter.go
+++ b/global/filter.go
@@ -13,8 +13,8 @@ import (
type MSG map[string]interface{}
func (m MSG) Get(s string) MSG {
- if v,ok := m[s];ok {
- if msg,ok := v.(MSG);ok {
+ if v, ok := m[s]; ok {
+ if msg, ok := v.(MSG); ok {
return msg
}
return MSG{"__str__": v} // 用这个名字应该没问题吧
@@ -23,7 +23,7 @@ func (m MSG) Get(s string) MSG {
}
func (m MSG) String() string {
- if str,ok:=m["__str__"];ok {
+ if str, ok := m["__str__"]; ok {
return fmt.Sprint(str)
}
str, _ := json.MarshalToString(m)
diff --git a/server/websocket.go b/server/websocket.go
index 75b3701..0826662 100644
--- a/server/websocket.go
+++ b/server/websocket.go
@@ -334,7 +334,7 @@ func (c *websocketConn) handleRequest(bot *coolq.CQBot, payload []byte) {
defer c.Unlock()
_ = c.WriteJSON(ret)
} else {
- ret := coolq.Failed(1404,"API_NOT_FOUND","API不存在")
+ ret := coolq.Failed(1404, "API_NOT_FOUND", "API不存在")
if j.Get("echo").Exists() {
ret["echo"] = j.Get("echo").Value()
}
From 566456768523297f566008fe60ad1f5386c5d6f9 Mon Sep 17 00:00:00 2001
From: wdvxdr
Date: Fri, 25 Dec 2020 22:24:26 +0800
Subject: [PATCH 247/367] update MiraiGo
---
go.mod | 6 +++++-
go.sum | 51 +++++++++++++++++++++++++++++++++++++++++++++------
2 files changed, 50 insertions(+), 7 deletions(-)
diff --git a/go.mod b/go.mod
index 6336872..275fba7 100644
--- a/go.mod
+++ b/go.mod
@@ -3,8 +3,9 @@ module github.com/Mrs4s/go-cqhttp
go 1.15
require (
- github.com/Mrs4s/MiraiGo v0.0.0-20201220045933-93ff7797ed6b
+ github.com/Mrs4s/MiraiGo v0.0.0-20201225142205-d3ded1965ca7
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-contrib/pprof v1.3.0
@@ -12,6 +13,8 @@ require (
github.com/gorilla/websocket v1.4.2
github.com/guonaihong/gout v0.1.3
github.com/hjson/hjson-go v3.1.0+incompatible
+ github.com/jehiah/go-strftime v0.0.0-20171201141054-1d33003b3869 // indirect
+ github.com/jonboulle/clockwork v0.2.2 // indirect
github.com/json-iterator/go v1.1.10
github.com/kardianos/osext v0.0.0-20190222173326-2bc1f35cddc0 // indirect
github.com/kr/binarydist v0.1.0 // indirect
@@ -21,6 +24,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.4
github.com/wdvxdr1123/go-silk v0.0.0-20201210140933-bcdbcb2f1093
github.com/yinghau76/go-ascii-art v0.0.0-20190517192627-e7f465a30189
diff --git a/go.sum b/go.sum
index a874273..fb25ac0 100644
--- a/go.sum
+++ b/go.sum
@@ -1,17 +1,20 @@
cloud.google.com/go v0.26.0/go.mod h1:aQUYkXzVsufM+DwF1aE+0xfcU+56JwCaLick0ClmMTw=
github.com/BurntSushi/toml v0.3.1/go.mod h1:xHWCNGjB5oqiDr8zfno3MHue2Ht5sIBksp03qcyfWMU=
-github.com/Mrs4s/MiraiGo v0.0.0-20201218175143-7312c96e82f7 h1:h4QVB94oL6riP5hYb2BWqJ6KGP7zQVGPXd91V/IQm9g=
-github.com/Mrs4s/MiraiGo v0.0.0-20201218175143-7312c96e82f7/go.mod h1:o+me0DWqTbZU4Xmu2D1gIpCditlwt+vMTNZmjvApf5Y=
-github.com/Mrs4s/MiraiGo v0.0.0-20201220045933-93ff7797ed6b h1:ouLBabLLv2eCtLbl/MEQuLzQ3ANXZ/u3x7vTQyWdG+E=
-github.com/Mrs4s/MiraiGo v0.0.0-20201220045933-93ff7797ed6b/go.mod h1:o+me0DWqTbZU4Xmu2D1gIpCditlwt+vMTNZmjvApf5Y=
+github.com/Mrs4s/MiraiGo v0.0.0-20201225142205-d3ded1965ca7 h1:CF/QorTV4oY+XXJlJYZzse/nlZ6NOJiCM+7O8Gjanx4=
+github.com/Mrs4s/MiraiGo v0.0.0-20201225142205-d3ded1965ca7/go.mod h1:7brUNAmygY22+PDCUiVT4MLeyvGHDBjW9f+67DKeHTw=
+github.com/a8m/syncmap v0.0.0-20200818084611-4bbbd178de97/go.mod h1:f3iF7/3t9i9hsYF8DPgT0XeIVyNzevhMCKf2445Q6pE=
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=
+github.com/davecgh/go-spew v1.1.1 h1:vj9j/u1bqnvCEfJOwUhtlOARqs3+rkHYY13jYWTU97c=
github.com/davecgh/go-spew v1.1.1/go.mod h1:J7Y8YcW2NihsgmVo/mv3lAwl/skON4iLHjSsI+c5H38=
github.com/dustin/go-humanize v1.0.0 h1:VSnTsYCnlFHaM2/igO1h6X3HA71jcobQuxemgkq4zYo=
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 h1:IXs+QLmnXW2CcXuY+8Mzv/fWEsPGWxqefPtCP5CnV9I=
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=
@@ -35,6 +38,7 @@ github.com/gin-gonic/gin v1.5.0/go.mod h1:Nd6IXA8m5kNZdNEHMBd93KT+mdY3+bewLgRvmC
github.com/gin-gonic/gin v1.6.2/go.mod h1:75u5sXoLsGZoRN5Sgbi1eraJ4GU3++wFwWzhwvtwp4M=
github.com/gin-gonic/gin v1.6.3 h1:ahKqKTFpO5KTPHxWZjEdPScmYaGtLo8Y4DMHoEsnp14=
github.com/gin-gonic/gin v1.6.3/go.mod h1:75u5sXoLsGZoRN5Sgbi1eraJ4GU3++wFwWzhwvtwp4M=
+github.com/go-playground/assert/v2 v2.0.1 h1:MsBgLAaY856+nPRTKrp3/OZK38U/wa0CcBYNjji3q3A=
github.com/go-playground/assert/v2 v2.0.1/go.mod h1:VDjEfimB/XKnb+ZQfWdccd7VUvScMdVu0Titje2rxJ4=
github.com/go-playground/locales v0.12.1/go.mod h1:IUMDtCfWo/w/mtMfIE/IG2K+Ey3ygWanZIBtBW0W2TM=
github.com/go-playground/locales v0.13.0 h1:HyWk6mgj5qFqCT5fjGBuRArbVDfE4hi8+e8ceBS/t7Q=
@@ -65,8 +69,10 @@ github.com/google/go-cmp v0.2.0/go.mod h1:oXzfMopK8JAjlY9xF4vHSVASa0yLyX7SntLO5a
github.com/google/go-cmp v0.3.0/go.mod h1:8QqcDgzrUqlUb/G2PQTWiueGozuR1884gddMywk6iLU=
github.com/google/go-cmp v0.3.1/go.mod h1:8QqcDgzrUqlUb/G2PQTWiueGozuR1884gddMywk6iLU=
github.com/google/go-cmp v0.4.0/go.mod h1:v8dTdLbMG2kIc/vJvl+f65V22dbkXbowE6jgT/gNBxE=
+github.com/google/go-cmp v0.5.0 h1:/QaMHBdZ26BB3SSst0Iwl10Epc+xhTquomWX0oZEB6w=
github.com/google/go-cmp v0.5.0/go.mod h1:v8dTdLbMG2kIc/vJvl+f65V22dbkXbowE6jgT/gNBxE=
github.com/google/gofuzz v1.0.0/go.mod h1:dBl0BpW6vV/+mYPU4Po3pmUjxk6FQPldtuIdl/M65Eg=
+github.com/google/uuid v1.1.1 h1:Gkbcsh/GbpXz7lPftLA3P6TYMwjCLYm83jiFQZF/3gY=
github.com/google/uuid v1.1.1/go.mod h1:TIyPZe4MgqvfeYDBFedMoGGpEw/LqOeaOT+nhxU+yHo=
github.com/gorilla/websocket v1.4.2 h1:+/TMaTYc4QFitKJxsQ7Yye35DkWvkdLcvGKqM+x0Ufc=
github.com/gorilla/websocket v1.4.2/go.mod h1:YR8l580nyteQvAITg2hZ9XVh4b55+EU/adAjf1fMHhE=
@@ -74,7 +80,12 @@ 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/hjson/hjson-go v3.1.0+incompatible h1:DY/9yE8ey8Zv22bY+mHV1uk2yRy0h8tKhZ77hEdi0Aw=
github.com/hjson/hjson-go v3.1.0+incompatible/go.mod h1:qsetwF8NlsTsOTwZTApNlTCerV+b2GjYRRcIk4JMFio=
+github.com/hpcloud/tail v1.0.0 h1:nfCOvKYfkgYP8hkirhJocXT2+zOD8yUNjXaWfTlyFKI=
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/json-iterator/go v1.1.10 h1:Kz6Cvnvv2wGdaG/V8yMvfkmNiXq9Ya2KUv4rouJJr68=
@@ -87,6 +98,7 @@ github.com/kr/binarydist v0.1.0/go.mod h1:DY7S//GCoz1BCd0B0EVrinCKAZN3pXe+MDaIZb
github.com/leodido/go-urn v1.1.0/go.mod h1:+cyI34gQWZcE1eQU7NVgKkkzdXDQHr1dBMtdAPozLkw=
github.com/leodido/go-urn v1.2.0 h1:hpXL4XnriNwQ/ABnpepYM/1vCLWNDfUNts8dX3xTG6Y=
github.com/leodido/go-urn v1.2.0/go.mod h1:+8+nEpDfqqsY+g338gtMEUOtuK+4dEMhiQEgxpxOKII=
+github.com/lestrrat-go/envload v0.0.0-20180220234015-a3eb8ddeffcc h1:RKf14vYWi2ttpEmkA4aQ3j4u9dStX2t4M8UM6qqNsG8=
github.com/lestrrat-go/envload v0.0.0-20180220234015-a3eb8ddeffcc/go.mod h1:kopuH9ugFRkIXf3YoqHKyrJ9YfUFsckUU9S7B+XP+is=
github.com/lestrrat-go/file-rotatelogs v2.4.0+incompatible h1:Y6sqxHMyB1D2YSzWkLibYKgg+SwmyFU9dF2hn6MdTj4=
github.com/lestrrat-go/file-rotatelogs v2.4.0+incompatible/go.mod h1:ZQnN8lSECaebrkQytbHj4xNgtg8CR7RYXnPok8e0EHA=
@@ -102,13 +114,16 @@ github.com/modern-go/reflect2 v0.0.0-20180701023420-4b7aa43c6742/go.mod h1:bx2lN
github.com/nfnt/resize v0.0.0-20180221191011-83c6a9932646 h1:zYyBkD/k9seD2A7fsi6Oo2LfFZAehjjQMERAvZLEDnQ=
github.com/nfnt/resize v0.0.0-20180221191011-83c6a9932646/go.mod h1:jpp1/29i3P1S/RLdc7JQKbRpFeM1dOBd8T9ki5s+AY8=
github.com/onsi/ginkgo v1.6.0/go.mod h1:lLunBs/Ym6LB5Z9jYTR76FiuTmxDTDusOGeTQH+WWjE=
+github.com/onsi/ginkgo v1.7.0 h1:WSHQ+IS43OoUrWtD1/bbclrwK8TTH5hzp+umCiuxHgs=
github.com/onsi/ginkgo v1.7.0/go.mod h1:lLunBs/Ym6LB5Z9jYTR76FiuTmxDTDusOGeTQH+WWjE=
+github.com/onsi/gomega v1.4.3 h1:RE1xgDvH7imwFD45h+u2SgIfERHlS2yNG4DObb5BSKU=
github.com/onsi/gomega v1.4.3/go.mod h1:ex+gbHU/CVuBBDIJjb2X0qEXbFg53c61hWP/1CpauHY=
github.com/oxtoacart/bpool v0.0.0-20190530202638-03653db5a59c h1:rp5dCmg/yLR3mgFuSOe4oEnDDmGLROTvMragMUXpTQw=
github.com/oxtoacart/bpool v0.0.0-20190530202638-03653db5a59c/go.mod h1:X07ZCGwUbLaax7L0S3Tw4hpejzu63ZrrQiUe6W0hcy0=
github.com/pkg/errors v0.8.1/go.mod h1:bwawxfHBFNV+L2hUp1rHADufV3IMtnDRdf1r5NINEl0=
github.com/pkg/errors v0.9.1 h1:FEBLx1zS214owpjy7qsBeixbURkuhQAwrK5UwLGTwt4=
github.com/pkg/errors v0.9.1/go.mod h1:bwawxfHBFNV+L2hUp1rHADufV3IMtnDRdf1r5NINEl0=
+github.com/pmezard/go-difflib v1.0.0 h1:4DBwDE0NGyQoBHbLQYPwSUPoCMWR5BEzIk/f1lZbAQM=
github.com/pmezard/go-difflib v1.0.0/go.mod h1:iKH77koFhYxTK1pcRnkKkqfTogsbg7gZNVY4sRDYZ/4=
github.com/prometheus/client_model v0.0.0-20190812154241-14fe0d1b01d4/go.mod h1:xMI15A0UPsDsEKsMN9yxemIoYk6Tm2C1GtYGdfGttqA=
github.com/rifflock/lfshook v0.0.0-20180920164130-b9218ef580f5 h1:mZHayPoR0lNmnHyvtYjDeq0zlVHn9K/ZXoy17ylucdo=
@@ -120,11 +135,14 @@ github.com/stretchr/objx v0.1.0/go.mod h1:HFkY916IF+rwdDfMAkV7OtwuqBVzrE8GR6GFx+
github.com/stretchr/objx v0.1.1/go.mod h1:HFkY916IF+rwdDfMAkV7OtwuqBVzrE8GR6GFx+wExME=
github.com/stretchr/testify v1.2.2/go.mod h1:a8OnRcib4nhh0OaRAV+Yts87kKdq0PP7pXfy6kDkUVs=
github.com/stretchr/testify v1.3.0/go.mod h1:M5WIy9Dh21IEIfnGCwXGc5bZfKNJtfHm1UVUgZn+9EI=
+github.com/stretchr/testify v1.4.0 h1:2E4SXV/wtOkTonXsotYi4li6zVWxYlZuYNCXe9XRJyk=
github.com/stretchr/testify v1.4.0/go.mod h1:j7eGeouHqKxXV5pUuKE4zz7dFj8WfuZ+81PSLYec5m4=
github.com/syndtr/goleveldb v1.0.0 h1:fBdIW9lB4Iz0n9khmH8w27SJ3QEJ7+IgjPEwGSZiFdE=
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.3/go.mod h1:BaHyNc5bjzYkPqgLq7mdVzeiRtULKULXLgZFKsxEHI0=
github.com/tidwall/gjson v1.6.4 h1:JKsCsJqRVFz8eYCsQ5E/ANRbK6CanAtA9IUvGsXklyo=
github.com/tidwall/gjson v1.6.4/go.mod h1:BaHyNc5bjzYkPqgLq7mdVzeiRtULKULXLgZFKsxEHI0=
@@ -140,45 +158,63 @@ github.com/wdvxdr1123/go-silk v0.0.0-20201210140933-bcdbcb2f1093 h1:t38EBwI2hFJz
github.com/wdvxdr1123/go-silk v0.0.0-20201210140933-bcdbcb2f1093/go.mod h1:5q9LFlBr+yX/J8Jd/9wHdXwkkjFkNyQIS7kX2Lgx/Zs=
github.com/yinghau76/go-ascii-art v0.0.0-20190517192627-e7f465a30189 h1:4UJw9if55Fu3HOwbfcaQlJ27p3oeJU2JZqoeT3ITJQk=
github.com/yinghau76/go-ascii-art v0.0.0-20190517192627-e7f465a30189/go.mod h1:rIrm5geMiBhPQkdfUm8gDFi/WiHneOp1i9KjmJqc+9I=
+github.com/yuin/goldmark v1.2.1/go.mod h1:3hX8gzYuyVAZsxl0MRgGTJEmQBFcNTphYh9decYSb74=
golang.org/x/crypto v0.0.0-20190308221718-c2843e01d9a2/go.mod h1:djNgcEr1/C05ACkg1iLfiJU5Ep61QUkGW8qpdssI0+w=
+golang.org/x/crypto v0.0.0-20191011191535-87dc89f01550/go.mod h1:yigFU9vqHzYiE8UmvKecakEJjdnWj3jj499lnFckfCI=
+golang.org/x/crypto v0.0.0-20200622213623-75b288015ac9/go.mod h1:LzIPMQfyMNhhGPhUkYOs5KpL4U8rLKemX1yGLhDgUto=
golang.org/x/crypto v0.0.0-20201208171446-5f87f3452ae9 h1:sYNJzB4J8toYPQTM6pAkcmBRgw9SnQKP9oXCHfgy604=
golang.org/x/crypto v0.0.0-20201208171446-5f87f3452ae9/go.mod h1:jdWPYTVW3xRLrWPugEBEK3UY2ZEsg3UU495nc5E+M+I=
golang.org/x/exp v0.0.0-20190121172915-509febef88a4/go.mod h1:CJ0aWSM057203Lf6IL+f9T1iT9GByDxfZKAQTCR3kQA=
golang.org/x/lint v0.0.0-20181026193005-c67002cb31c3/go.mod h1:UVdnD1Gm6xHRNCYTkRU2/jEulfH38KcIWyp/GAMgvoE=
golang.org/x/lint v0.0.0-20190227174305-5b3e6a55c961/go.mod h1:wehouNa3lNwaWXcvxsM5YxQ5yQlVC4a0KAMCusXpPoU=
golang.org/x/lint v0.0.0-20190313153728-d0100b6bd8b3/go.mod h1:6SW0HCj/g11FgYtHlgUYUwCkIfeOF89ocIRzGO/8vkc=
+golang.org/x/mod v0.3.0/go.mod h1:s0Qsj1ACt9ePp/hMypM3fl4fZqREWJwdYDEqhRiZZUA=
golang.org/x/net v0.0.0-20180724234803-3673e40ba225/go.mod h1:mL1N/T3taQHkDXs73rZJwtUhF3w3ftmwwsq0BUmARs4=
golang.org/x/net v0.0.0-20180826012351-8a410e7b638d/go.mod h1:mL1N/T3taQHkDXs73rZJwtUhF3w3ftmwwsq0BUmARs4=
golang.org/x/net v0.0.0-20180906233101-161cd47e91fd/go.mod h1:mL1N/T3taQHkDXs73rZJwtUhF3w3ftmwwsq0BUmARs4=
golang.org/x/net v0.0.0-20190213061140-3a22650c66bd/go.mod h1:mL1N/T3taQHkDXs73rZJwtUhF3w3ftmwwsq0BUmARs4=
golang.org/x/net v0.0.0-20190311183353-d8887717615a/go.mod h1:t9HGtf8HONx5eT2rtn7q6eTqICYqUVnKs3thJo3Qplg=
golang.org/x/net v0.0.0-20190404232315-eb5bcb51f2a3/go.mod h1:t9HGtf8HONx5eT2rtn7q6eTqICYqUVnKs3thJo3Qplg=
-golang.org/x/net v0.0.0-20200114155413-6afb5195e5aa h1:F+8P+gmewFQYRk6JoLQLwjBCTu3mcIURZfNkVweuRKA=
+golang.org/x/net v0.0.0-20190620200207-3b0461eec859/go.mod h1:z5CRVTTTmAJ677TzLLGU+0bjPO0LkuOLi4/5GtJWs/s=
golang.org/x/net v0.0.0-20200114155413-6afb5195e5aa/go.mod h1:z5CRVTTTmAJ677TzLLGU+0bjPO0LkuOLi4/5GtJWs/s=
+golang.org/x/net v0.0.0-20201021035429-f5854403a974 h1:IX6qOQeG5uLjB/hjjwjedwfjND0hgjPMMyO1RoIXQNI=
+golang.org/x/net v0.0.0-20201021035429-f5854403a974/go.mod h1:sp8m0HH+o8qH0wwXwYZr8TS3Oi6o0r6Gce1SSxlDquU=
golang.org/x/oauth2 v0.0.0-20180821212333-d2e6202438be/go.mod h1:N/0e6XlmueqKjAGxoOufVs8QHGRruUQn6yWY3a++T0U=
golang.org/x/sync v0.0.0-20180314180146-1d60e4601c6f/go.mod h1:RxMgew5VJxzue5/jJTE5uejpjVlOe/izrB70Jof72aM=
golang.org/x/sync v0.0.0-20181108010431-42b317875d0f/go.mod h1:RxMgew5VJxzue5/jJTE5uejpjVlOe/izrB70Jof72aM=
golang.org/x/sync v0.0.0-20190423024810-112230192c58/go.mod h1:RxMgew5VJxzue5/jJTE5uejpjVlOe/izrB70Jof72aM=
+golang.org/x/sync v0.0.0-20201020160332-67f06af15bc9/go.mod h1:RxMgew5VJxzue5/jJTE5uejpjVlOe/izrB70Jof72aM=
golang.org/x/sys v0.0.0-20180830151530-49385e6e1522/go.mod h1:STP8DvDyc/dI5b8T5hshtkjS+E42TnysNCUPdjciGhY=
golang.org/x/sys v0.0.0-20180909124046-d0be0721c37e/go.mod h1:STP8DvDyc/dI5b8T5hshtkjS+E42TnysNCUPdjciGhY=
golang.org/x/sys v0.0.0-20190215142949-d0b11bdaac8a/go.mod h1:STP8DvDyc/dI5b8T5hshtkjS+E42TnysNCUPdjciGhY=
+golang.org/x/sys v0.0.0-20190412213103-97732733099d/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs=
golang.org/x/sys v0.0.0-20190422165155-953cdadca894/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs=
golang.org/x/sys v0.0.0-20190813064441-fde4db37ae7a/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs=
golang.org/x/sys v0.0.0-20191026070338-33540a1f6037/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs=
-golang.org/x/sys v0.0.0-20200116001909-b77594299b42 h1:vEOn+mP2zCOVzKckCZy6YsCtDblrpj/w7B9nxGNELpg=
golang.org/x/sys v0.0.0-20200116001909-b77594299b42/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs=
+golang.org/x/sys v0.0.0-20200930185726-fdedc70b468f h1:+Nyd8tzPX9R7BWHguqsrbFdRx3WQ/1ib8I44HXV5yTA=
+golang.org/x/sys v0.0.0-20200930185726-fdedc70b468f/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs=
golang.org/x/term v0.0.0-20201117132131-f5c789dd3221 h1:/ZHdbVpdR/jk3g30/d4yUL0JU9kksj8+F/bnQUVLGDM=
golang.org/x/term v0.0.0-20201117132131-f5c789dd3221/go.mod h1:Nr5EML6q2oocZ2LXRh80K7BxOlk5/8JxuGnuhpl+muw=
golang.org/x/text v0.3.0/go.mod h1:NqM8EUOU14njkJ3fqMW+pc6Ldnwhi/IjpwHt7yyuwOQ=
golang.org/x/text v0.3.2/go.mod h1:bEr9sfX3Q8Zfm5fL9x+3itogRgK3+ptLWKqgva+5dAk=
+golang.org/x/text v0.3.3 h1:cokOdA+Jmi5PJGXLlLllQSgYigAEfHXJAERHVMaCc2k=
+golang.org/x/text v0.3.3/go.mod h1:5Zoc/QRtKVWzQhOtBMvqHzDpF6irO9z98xDceosuGiQ=
golang.org/x/time v0.0.0-20201208040808-7e3f01d25324 h1:Hir2P/De0WpUhtrKGGjvSb2YxUgyZ7EFOSLIcSSpiwE=
golang.org/x/time v0.0.0-20201208040808-7e3f01d25324/go.mod h1:tRJNPiyCQ0inRvYxbN9jk5I+vvW/OXSQhTDSoE431IQ=
golang.org/x/tools v0.0.0-20180917221912-90fa682c2a6e/go.mod h1:n7NCudcB/nEzxVGmLbDWY5pfWTLqBcC2KZ6jyYvM4mQ=
golang.org/x/tools v0.0.0-20190114222345-bf090417da8b/go.mod h1:n7NCudcB/nEzxVGmLbDWY5pfWTLqBcC2KZ6jyYvM4mQ=
golang.org/x/tools v0.0.0-20190226205152-f727befe758c/go.mod h1:9Yl7xja0Znq3iFh3HoIrodX9oNMXvdceNzlUR8zjMvY=
golang.org/x/tools v0.0.0-20190311212946-11955173bddd/go.mod h1:LCzVGOaR6xXOjkQ3onu1FJEFr0SW1gC7cKk1uF8kGRs=
+golang.org/x/tools v0.0.0-20190501045030-23463209683d/go.mod h1:RgjU9mgBXZiqYHBnxXauZ1Gv1EHHAz9KjViQ78xBX0Q=
golang.org/x/tools v0.0.0-20190524140312-2c0ae7006135/go.mod h1:RgjU9mgBXZiqYHBnxXauZ1Gv1EHHAz9KjViQ78xBX0Q=
+golang.org/x/tools v0.0.0-20191119224855-298f0cb1881e/go.mod h1:b+2E5dAYhXwXZwtnZ6UAqBI28+e2cm9otk0dWdXHAEo=
+golang.org/x/tools v0.0.0-20201218024724-ae774e9781d2/go.mod h1:emZCQorbCU4vsT4fOWvOPXz4eW1wZW4PmDk9uLelYpA=
+golang.org/x/xerrors v0.0.0-20190717185122-a985d3407aa7/go.mod h1:I/5z698sn9Ka8TeJc9MKroUUfqBBauWjQqLJ2OPfmY0=
+golang.org/x/xerrors v0.0.0-20191011141410-1b5146add898/go.mod h1:I/5z698sn9Ka8TeJc9MKroUUfqBBauWjQqLJ2OPfmY0=
golang.org/x/xerrors v0.0.0-20191204190536-9bdfabe68543/go.mod h1:I/5z698sn9Ka8TeJc9MKroUUfqBBauWjQqLJ2OPfmY0=
+golang.org/x/xerrors v0.0.0-20200804184101-5ec99f83aff1 h1:go1bK/D/BFZV2I8cIQd1NKEZ+0owSTG1fDTci4IqFcE=
+golang.org/x/xerrors v0.0.0-20200804184101-5ec99f83aff1/go.mod h1:I/5z698sn9Ka8TeJc9MKroUUfqBBauWjQqLJ2OPfmY0=
google.golang.org/appengine v1.1.0/go.mod h1:EbEs0AVv82hx2wNQdGPgUI5lhzA/G0D9YwlJXL52JkM=
google.golang.org/appengine v1.4.0/go.mod h1:xpcJRLb0r/rnEns0DIKYYv+WjYCduHsrkT7/EB5XEv4=
google.golang.org/genproto v0.0.0-20180817151627-c66870c02cf8/go.mod h1:JiN7NxoALGmiZfu7CAH4rXhgtRTLTxftemlI0sWmxmc=
@@ -197,10 +233,13 @@ google.golang.org/protobuf v1.23.0/go.mod h1:EGpADcykh3NcUnDUJcl1+ZksZNG86OlYog2
google.golang.org/protobuf v1.23.1-0.20200526195155-81db48ad09cc/go.mod h1:EGpADcykh3NcUnDUJcl1+ZksZNG86OlYog2l/sGQquU=
google.golang.org/protobuf v1.25.0 h1:Ejskq+SyPohKW+1uil0JJMtmHCgJPJ/qWTxr8qp+R4c=
google.golang.org/protobuf v1.25.0/go.mod h1:9JNX74DMeImyA3h4bdi1ymwjUzf21/xIlbajtzgsN7c=
+gopkg.in/check.v1 v0.0.0-20161208181325-20d25e280405 h1:yhCVgyC4o1eVCa2tZl7eS0r+SDo693bJlVdllGtEeKM=
gopkg.in/check.v1 v0.0.0-20161208181325-20d25e280405/go.mod h1:Co6ibVJAznAaIkqp8huTwlJQCZ016jof/cbN4VW5Yz0=
+gopkg.in/fsnotify.v1 v1.4.7 h1:xOHLXZwVvI9hhs+cLKq5+I5onOuwQLhQwiu63xxlHs4=
gopkg.in/fsnotify.v1 v1.4.7/go.mod h1:Tz8NjZHkW78fSQdbUxIjBTcgA1z1m8ZHf0WmKUhAMys=
gopkg.in/go-playground/assert.v1 v1.2.1/go.mod h1:9RXL0bg/zibRAgZUYszZSwO/z8Y/a8bDuhia5mkpMnE=
gopkg.in/go-playground/validator.v9 v9.29.1/go.mod h1:+c9/zcJMFNgbLvly1L1V+PpxWdVbfP1avr/N00E2vyQ=
+gopkg.in/tomb.v1 v1.0.0-20141024135613-dd632973f1e7 h1:uRGJdciOHaEIrze2W8Q3AKkepLTh2hOroT7a+7czfdQ=
gopkg.in/tomb.v1 v1.0.0-20141024135613-dd632973f1e7/go.mod h1:dt/ZhP58zS4L8KSrWDmTeBkI65Dw0HsyUHuEVlX15mw=
gopkg.in/yaml.v2 v2.2.1/go.mod h1:hI93XBmqTisBFMUTm0b8Fm+jr3Dg1NNxqwp+5A1VGuI=
gopkg.in/yaml.v2 v2.2.2/go.mod h1:hI93XBmqTisBFMUTm0b8Fm+jr3Dg1NNxqwp+5A1VGuI=
From 20f2290ba4550b640da9184adacaec67ec2b970c Mon Sep 17 00:00:00 2001
From: Mrs4s
Date: Fri, 25 Dec 2020 23:12:29 +0800
Subject: [PATCH 248/367] feature set_group_anonymous_ban.
---
coolq/api.go | 20 ++++++++++++++++++++
coolq/event.go | 6 +++---
server/http.go | 15 +++++++++++++++
server/websocket.go | 14 ++++++++++++++
4 files changed, 52 insertions(+), 3 deletions(-)
diff --git a/coolq/api.go b/coolq/api.go
index 9a1a36d..1f49fba 100644
--- a/coolq/api.go
+++ b/coolq/api.go
@@ -840,6 +840,26 @@ func (bot *CQBot) CQSetGroupPortrait(groupId int64, file, cache string) MSG {
return Failed(100, "GROUP_NOT_FOUND", "群聊不存在")
}
+func (bot *CQBot) CQSetGroupAnonymousBan(groupId int64, flag string, duration int32) MSG {
+ if flag == "" {
+ return Failed(100, "INVALID_FLAG", "无效的flag")
+ }
+ if g := bot.Client.FindGroup(groupId); g != nil {
+ s := strings.SplitN(flag, "|", 2)
+ if len(s) != 2 {
+ return Failed(100, "INVALID_FLAG", "无效的flag")
+ }
+ id := s[0]
+ nick := s[1]
+ if err := g.MuteAnonymous(id, nick, duration); err != nil {
+ log.Warnf("anonymous ban error: %v", err)
+ return Failed(100, "CALL_API_ERROR", err.Error())
+ }
+ return OK(nil)
+ }
+ return Failed(100, "GROUP_NOT_FOUND", "群聊不存在")
+}
+
// 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
func (bot *CQBot) CQGetStatus() MSG {
return OK(MSG{
diff --git a/coolq/event.go b/coolq/event.go
index b826d91..5b9dd79 100644
--- a/coolq/event.go
+++ b/coolq/event.go
@@ -114,9 +114,9 @@ func (bot *CQBot) groupMessageEvent(c *client.QQClient, m *message.GroupMessage)
}
if m.Sender.IsAnonymous() {
gm["anonymous"] = MSG{
- "flag": "",
- "id": 0,
- "name": m.Sender.Nickname,
+ "flag": m.Sender.AnonymousInfo.AnonymousId + "|" + m.Sender.AnonymousInfo.AnonymousNick,
+ "id": m.Sender.Uin,
+ "name": m.Sender.AnonymousInfo.AnonymousNick,
}
gm["sender"].(MSG)["nickname"] = "匿名消息"
gm["sub_type"] = "anonymous"
diff --git a/server/http.go b/server/http.go
index 34c15d2..f036be5 100644
--- a/server/http.go
+++ b/server/http.go
@@ -399,6 +399,20 @@ func GetGroupAtAllRemain(s *httpServer, c *gin.Context) {
c.JSON(200, s.bot.CQGetAtAllRemain(gid))
}
+func SetGroupAnonymousBan(s *httpServer, c *gin.Context) {
+ gid, _ := strconv.ParseInt(getParam(c, "group_id"), 10, 64)
+ d, _ := strconv.ParseInt(getParam(c, "duration"), 10, 64)
+ flag := getParam(c, "flag")
+ if flag == "" {
+ flag = getParam(c, "anonymous_flag")
+ }
+ if flag == "" {
+ o := gjson.Parse(getParam(c, "anonymous"))
+ flag = o.Get("flag").String()
+ }
+ c.JSON(200, s.bot.CQSetGroupAnonymousBan(gid, flag, int32(d)))
+}
+
func HandleQuickOperation(s *httpServer, c *gin.Context) {
if c.Request.Method != "POST" {
c.AbortWithStatus(404)
@@ -516,6 +530,7 @@ var httpApi = map[string]func(s *httpServer, c *gin.Context){
"get_stranger_info": GetStrangerInfo,
"reload_event_filter": ReloadEventFilter,
"set_group_portrait": SetGroupPortrait,
+ "set_group_anonymous_ban": SetGroupAnonymousBan,
".handle_quick_operation": HandleQuickOperation,
".ocr_image": OcrImage,
"ocr_image": OcrImage,
diff --git a/server/websocket.go b/server/websocket.go
index 0826662..11f1931 100644
--- a/server/websocket.go
+++ b/server/websocket.go
@@ -553,6 +553,20 @@ var wsApi = map[string]func(*coolq.CQBot, gjson.Result) coolq.MSG{
"set_group_portrait": func(bot *coolq.CQBot, p gjson.Result) coolq.MSG {
return bot.CQSetGroupPortrait(p.Get("group_id").Int(), p.Get("file").String(), p.Get("cache").String())
},
+ "set_group_anonymous_ban": func(bot *coolq.CQBot, p gjson.Result) coolq.MSG {
+ obj := p.Get("anonymous")
+ flag := p.Get("anonymous_flag")
+ if !flag.Exists() {
+ flag = p.Get("flag")
+ }
+ if !flag.Exists() && !obj.Exists() {
+ return coolq.Failed(100, "FLAG_NOT_FOUND", "flag未找到")
+ }
+ if !flag.Exists() {
+ flag = obj.Get("flag")
+ }
+ return bot.CQSetGroupAnonymousBan(p.Get("group_id").Int(), flag.String(), int32(p.Get("duration").Int()))
+ },
".handle_quick_operation": func(bot *coolq.CQBot, p gjson.Result) coolq.MSG {
return bot.CQHandleQuickOperation(p.Get("context"), p.Get("operation"))
},
From 690384a9a3d9cfa06df684e5c0b37551352eaafa Mon Sep 17 00:00:00 2001
From: Mrs4s
Date: Sat, 26 Dec 2020 00:54:23 +0800
Subject: [PATCH 249/367] update MiraiGo.
---
docs/cqhttp.md | 2 +-
go.mod | 12 ++++--------
go.sum | 53 +++++++++++---------------------------------------
3 files changed, 16 insertions(+), 51 deletions(-)
diff --git a/docs/cqhttp.md b/docs/cqhttp.md
index d794c93..0a6a594 100644
--- a/docs/cqhttp.md
+++ b/docs/cqhttp.md
@@ -193,7 +193,7 @@ Type: `node`
| `id` | int32 | 转发消息id | 直接引用他人的消息合并转发, 实际查看顺序为原消息发送顺序 **与下面的自定义消息二选一** |
| `name` | string | 发送者显示名字 | 用于自定义消息 (自定义消息并合并转发,实际查看顺序为自定义消息段顺序) |
| `uin` | int64 | 发送者QQ号 | 用于自定义消息 |
-| `content` | message | 具体消息 | 用于自定义消息 **不支持转发套娃,不支持引用回复** |
+| `content` | message | 具体消息 | 用于自定义消息 **不支持引用回复** |
特殊说明: **需要使用单独的API `/send_group_forward_msg` 发送,并且由于消息段较为复杂,仅支持Array形式入参。 如果引用消息和自定义消息同时出现,实际查看顺序将取消息段顺序. 另外按 [CQHTTP](https://cqhttp.cc/docs/4.15/#/Message?id=格式) 文档说明, `data` 应全为字符串, 但由于需要接收`message` 类型的消息, 所以 *仅限此Type的content字段* 支持Array套娃**
diff --git a/go.mod b/go.mod
index 275fba7..93a61ef 100644
--- a/go.mod
+++ b/go.mod
@@ -3,18 +3,15 @@ module github.com/Mrs4s/go-cqhttp
go 1.15
require (
- github.com/Mrs4s/MiraiGo v0.0.0-20201225142205-d3ded1965ca7
+ github.com/Mrs4s/MiraiGo v0.0.0-20201225164755-c519c532d0d5
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-contrib/pprof v1.3.0
github.com/gin-gonic/gin v1.6.3
github.com/gorilla/websocket v1.4.2
- github.com/guonaihong/gout v0.1.3
+ github.com/guonaihong/gout v0.1.4
github.com/hjson/hjson-go v3.1.0+incompatible
- github.com/jehiah/go-strftime v0.0.0-20171201141054-1d33003b3869 // indirect
- github.com/jonboulle/clockwork v0.2.2 // indirect
github.com/json-iterator/go v1.1.10
github.com/kardianos/osext v0.0.0-20190222173326-2bc1f35cddc0 // indirect
github.com/kr/binarydist v0.1.0 // indirect
@@ -24,10 +21,9 @@ 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.4
+ github.com/tidwall/gjson v1.6.7
github.com/wdvxdr1123/go-silk v0.0.0-20201210140933-bcdbcb2f1093
github.com/yinghau76/go-ascii-art v0.0.0-20190517192627-e7f465a30189
- golang.org/x/crypto v0.0.0-20201208171446-5f87f3452ae9
+ golang.org/x/crypto v0.0.0-20201221181555-eec23a3978ad
golang.org/x/time v0.0.0-20201208040808-7e3f01d25324
)
diff --git a/go.sum b/go.sum
index fb25ac0..6674800 100644
--- a/go.sum
+++ b/go.sum
@@ -1,20 +1,16 @@
cloud.google.com/go v0.26.0/go.mod h1:aQUYkXzVsufM+DwF1aE+0xfcU+56JwCaLick0ClmMTw=
github.com/BurntSushi/toml v0.3.1/go.mod h1:xHWCNGjB5oqiDr8zfno3MHue2Ht5sIBksp03qcyfWMU=
-github.com/Mrs4s/MiraiGo v0.0.0-20201225142205-d3ded1965ca7 h1:CF/QorTV4oY+XXJlJYZzse/nlZ6NOJiCM+7O8Gjanx4=
-github.com/Mrs4s/MiraiGo v0.0.0-20201225142205-d3ded1965ca7/go.mod h1:7brUNAmygY22+PDCUiVT4MLeyvGHDBjW9f+67DKeHTw=
+github.com/Mrs4s/MiraiGo v0.0.0-20201225164755-c519c532d0d5 h1:kvaZXnhjdOtRip6xlXu9hEyJhPzKs8ylrdE2eb+N4NQ=
+github.com/Mrs4s/MiraiGo v0.0.0-20201225164755-c519c532d0d5/go.mod h1:7brUNAmygY22+PDCUiVT4MLeyvGHDBjW9f+67DKeHTw=
github.com/a8m/syncmap v0.0.0-20200818084611-4bbbd178de97/go.mod h1:f3iF7/3t9i9hsYF8DPgT0XeIVyNzevhMCKf2445Q6pE=
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=
-github.com/davecgh/go-spew v1.1.1 h1:vj9j/u1bqnvCEfJOwUhtlOARqs3+rkHYY13jYWTU97c=
github.com/davecgh/go-spew v1.1.1/go.mod h1:J7Y8YcW2NihsgmVo/mv3lAwl/skON4iLHjSsI+c5H38=
github.com/dustin/go-humanize v1.0.0 h1:VSnTsYCnlFHaM2/igO1h6X3HA71jcobQuxemgkq4zYo=
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 h1:IXs+QLmnXW2CcXuY+8Mzv/fWEsPGWxqefPtCP5CnV9I=
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=
@@ -34,16 +30,13 @@ github.com/gin-contrib/pprof v1.3.0 h1:G9eK6HnbkSqDZBYbzG4wrjCsA4e+cvYAHUZw6W+W9
github.com/gin-contrib/pprof v1.3.0/go.mod h1:waMjT1H9b179t3CxuG1cV3DHpga6ybizwfBaM5OXaB0=
github.com/gin-contrib/sse v0.1.0 h1:Y/yl/+YNO8GZSjAhjMsSuLt29uWRFHdHYUb5lYOV9qE=
github.com/gin-contrib/sse v0.1.0/go.mod h1:RHrZQHXnP2xjPF+u1gW/2HnVO7nvIa9PG3Gm+fLHvGI=
-github.com/gin-gonic/gin v1.5.0/go.mod h1:Nd6IXA8m5kNZdNEHMBd93KT+mdY3+bewLgRvmCsR2Do=
+github.com/gin-gonic/gin v1.6.0/go.mod h1:75u5sXoLsGZoRN5Sgbi1eraJ4GU3++wFwWzhwvtwp4M=
github.com/gin-gonic/gin v1.6.2/go.mod h1:75u5sXoLsGZoRN5Sgbi1eraJ4GU3++wFwWzhwvtwp4M=
github.com/gin-gonic/gin v1.6.3 h1:ahKqKTFpO5KTPHxWZjEdPScmYaGtLo8Y4DMHoEsnp14=
github.com/gin-gonic/gin v1.6.3/go.mod h1:75u5sXoLsGZoRN5Sgbi1eraJ4GU3++wFwWzhwvtwp4M=
-github.com/go-playground/assert/v2 v2.0.1 h1:MsBgLAaY856+nPRTKrp3/OZK38U/wa0CcBYNjji3q3A=
github.com/go-playground/assert/v2 v2.0.1/go.mod h1:VDjEfimB/XKnb+ZQfWdccd7VUvScMdVu0Titje2rxJ4=
-github.com/go-playground/locales v0.12.1/go.mod h1:IUMDtCfWo/w/mtMfIE/IG2K+Ey3ygWanZIBtBW0W2TM=
github.com/go-playground/locales v0.13.0 h1:HyWk6mgj5qFqCT5fjGBuRArbVDfE4hi8+e8ceBS/t7Q=
github.com/go-playground/locales v0.13.0/go.mod h1:taPMhCMXrRLJO55olJkUXHZBHCxTMfnGwq/HNwmWNS8=
-github.com/go-playground/universal-translator v0.16.0/go.mod h1:1AnU7NaIRDWWzGEKwgtJRd2xk99HeFyHw3yid4rvQIY=
github.com/go-playground/universal-translator v0.17.0 h1:icxd5fm+REJzpZx7ZfpaD876Lmtgy7VtROAbHHXk8no=
github.com/go-playground/universal-translator v0.17.0/go.mod h1:UkSxE5sNxxRwHyU+Scu5vgOQjsIJAF8j9muTVoKLVtA=
github.com/go-playground/validator/v10 v10.2.0 h1:KgJ0snyC2R9VXYN2rneOtQcw5aHQB1Vv0sFl1UcHBOY=
@@ -69,24 +62,16 @@ github.com/google/go-cmp v0.2.0/go.mod h1:oXzfMopK8JAjlY9xF4vHSVASa0yLyX7SntLO5a
github.com/google/go-cmp v0.3.0/go.mod h1:8QqcDgzrUqlUb/G2PQTWiueGozuR1884gddMywk6iLU=
github.com/google/go-cmp v0.3.1/go.mod h1:8QqcDgzrUqlUb/G2PQTWiueGozuR1884gddMywk6iLU=
github.com/google/go-cmp v0.4.0/go.mod h1:v8dTdLbMG2kIc/vJvl+f65V22dbkXbowE6jgT/gNBxE=
-github.com/google/go-cmp v0.5.0 h1:/QaMHBdZ26BB3SSst0Iwl10Epc+xhTquomWX0oZEB6w=
github.com/google/go-cmp v0.5.0/go.mod h1:v8dTdLbMG2kIc/vJvl+f65V22dbkXbowE6jgT/gNBxE=
github.com/google/gofuzz v1.0.0/go.mod h1:dBl0BpW6vV/+mYPU4Po3pmUjxk6FQPldtuIdl/M65Eg=
-github.com/google/uuid v1.1.1 h1:Gkbcsh/GbpXz7lPftLA3P6TYMwjCLYm83jiFQZF/3gY=
github.com/google/uuid v1.1.1/go.mod h1:TIyPZe4MgqvfeYDBFedMoGGpEw/LqOeaOT+nhxU+yHo=
github.com/gorilla/websocket v1.4.2 h1:+/TMaTYc4QFitKJxsQ7Yye35DkWvkdLcvGKqM+x0Ufc=
github.com/gorilla/websocket v1.4.2/go.mod h1:YR8l580nyteQvAITg2hZ9XVh4b55+EU/adAjf1fMHhE=
-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/guonaihong/gout v0.1.4 h1:uBBoyztMX9okC27OQxqhn6bZ0ROkGyvnEIHwtp3TM4g=
+github.com/guonaihong/gout v0.1.4/go.mod h1:0rFYAYyzbcxEg11eY2qUbffJs7hHRPeugAnlVYSp8Ic=
github.com/hjson/hjson-go v3.1.0+incompatible h1:DY/9yE8ey8Zv22bY+mHV1uk2yRy0h8tKhZ77hEdi0Aw=
github.com/hjson/hjson-go v3.1.0+incompatible/go.mod h1:qsetwF8NlsTsOTwZTApNlTCerV+b2GjYRRcIk4JMFio=
-github.com/hpcloud/tail v1.0.0 h1:nfCOvKYfkgYP8hkirhJocXT2+zOD8yUNjXaWfTlyFKI=
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/json-iterator/go v1.1.10 h1:Kz6Cvnvv2wGdaG/V8yMvfkmNiXq9Ya2KUv4rouJJr68=
github.com/json-iterator/go v1.1.10/go.mod h1:KdQUCv79m/52Kvf8AW2vK1V8akMuk1QjK/uOdHXbAo4=
@@ -95,16 +80,13 @@ github.com/kardianos/osext v0.0.0-20190222173326-2bc1f35cddc0/go.mod h1:1NbS8ALr
github.com/konsorten/go-windows-terminal-sequences v1.0.1/go.mod h1:T0+1ngSBFLxvqU3pZ+m/2kptfBszLMUkC4ZK/EgS/cQ=
github.com/kr/binarydist v0.1.0 h1:6kAoLA9FMMnNGSehX0s1PdjbEaACznAv/W219j2uvyo=
github.com/kr/binarydist v0.1.0/go.mod h1:DY7S//GCoz1BCd0B0EVrinCKAZN3pXe+MDaIZbXQVgM=
-github.com/leodido/go-urn v1.1.0/go.mod h1:+cyI34gQWZcE1eQU7NVgKkkzdXDQHr1dBMtdAPozLkw=
github.com/leodido/go-urn v1.2.0 h1:hpXL4XnriNwQ/ABnpepYM/1vCLWNDfUNts8dX3xTG6Y=
github.com/leodido/go-urn v1.2.0/go.mod h1:+8+nEpDfqqsY+g338gtMEUOtuK+4dEMhiQEgxpxOKII=
-github.com/lestrrat-go/envload v0.0.0-20180220234015-a3eb8ddeffcc h1:RKf14vYWi2ttpEmkA4aQ3j4u9dStX2t4M8UM6qqNsG8=
github.com/lestrrat-go/envload v0.0.0-20180220234015-a3eb8ddeffcc/go.mod h1:kopuH9ugFRkIXf3YoqHKyrJ9YfUFsckUU9S7B+XP+is=
github.com/lestrrat-go/file-rotatelogs v2.4.0+incompatible h1:Y6sqxHMyB1D2YSzWkLibYKgg+SwmyFU9dF2hn6MdTj4=
github.com/lestrrat-go/file-rotatelogs v2.4.0+incompatible/go.mod h1:ZQnN8lSECaebrkQytbHj4xNgtg8CR7RYXnPok8e0EHA=
github.com/lestrrat-go/strftime v1.0.3 h1:qqOPU7y+TM8Y803I8fG9c/DyKG3xH/xkng6keC1015Q=
github.com/lestrrat-go/strftime v1.0.3/go.mod h1:E1nN3pCbtMSu1yjSVeyuRFVm/U0xoR76fd03sz+Qz4g=
-github.com/mattn/go-isatty v0.0.9/go.mod h1:YNRxwqDuOph6SZLI9vUUz6OYw3QyUt7WiY2yME+cCiQ=
github.com/mattn/go-isatty v0.0.12 h1:wuysRhFDzyxgEmMf5xjvJ2M9dZoWAXNNr5LSBS7uHXY=
github.com/mattn/go-isatty v0.0.12/go.mod h1:cbi8OIDigv2wuxKPP5vlRcQ1OAZbq2CE4Kysco4FUpU=
github.com/modern-go/concurrent v0.0.0-20180228061459-e0a39a4cb421 h1:ZqeYNhU3OHLH3mGKHDcjJRFFRrJa6eAM5H+CtDdOsPc=
@@ -114,16 +96,13 @@ github.com/modern-go/reflect2 v0.0.0-20180701023420-4b7aa43c6742/go.mod h1:bx2lN
github.com/nfnt/resize v0.0.0-20180221191011-83c6a9932646 h1:zYyBkD/k9seD2A7fsi6Oo2LfFZAehjjQMERAvZLEDnQ=
github.com/nfnt/resize v0.0.0-20180221191011-83c6a9932646/go.mod h1:jpp1/29i3P1S/RLdc7JQKbRpFeM1dOBd8T9ki5s+AY8=
github.com/onsi/ginkgo v1.6.0/go.mod h1:lLunBs/Ym6LB5Z9jYTR76FiuTmxDTDusOGeTQH+WWjE=
-github.com/onsi/ginkgo v1.7.0 h1:WSHQ+IS43OoUrWtD1/bbclrwK8TTH5hzp+umCiuxHgs=
github.com/onsi/ginkgo v1.7.0/go.mod h1:lLunBs/Ym6LB5Z9jYTR76FiuTmxDTDusOGeTQH+WWjE=
-github.com/onsi/gomega v1.4.3 h1:RE1xgDvH7imwFD45h+u2SgIfERHlS2yNG4DObb5BSKU=
github.com/onsi/gomega v1.4.3/go.mod h1:ex+gbHU/CVuBBDIJjb2X0qEXbFg53c61hWP/1CpauHY=
github.com/oxtoacart/bpool v0.0.0-20190530202638-03653db5a59c h1:rp5dCmg/yLR3mgFuSOe4oEnDDmGLROTvMragMUXpTQw=
github.com/oxtoacart/bpool v0.0.0-20190530202638-03653db5a59c/go.mod h1:X07ZCGwUbLaax7L0S3Tw4hpejzu63ZrrQiUe6W0hcy0=
github.com/pkg/errors v0.8.1/go.mod h1:bwawxfHBFNV+L2hUp1rHADufV3IMtnDRdf1r5NINEl0=
github.com/pkg/errors v0.9.1 h1:FEBLx1zS214owpjy7qsBeixbURkuhQAwrK5UwLGTwt4=
github.com/pkg/errors v0.9.1/go.mod h1:bwawxfHBFNV+L2hUp1rHADufV3IMtnDRdf1r5NINEl0=
-github.com/pmezard/go-difflib v1.0.0 h1:4DBwDE0NGyQoBHbLQYPwSUPoCMWR5BEzIk/f1lZbAQM=
github.com/pmezard/go-difflib v1.0.0/go.mod h1:iKH77koFhYxTK1pcRnkKkqfTogsbg7gZNVY4sRDYZ/4=
github.com/prometheus/client_model v0.0.0-20190812154241-14fe0d1b01d4/go.mod h1:xMI15A0UPsDsEKsMN9yxemIoYk6Tm2C1GtYGdfGttqA=
github.com/rifflock/lfshook v0.0.0-20180920164130-b9218ef580f5 h1:mZHayPoR0lNmnHyvtYjDeq0zlVHn9K/ZXoy17ylucdo=
@@ -135,19 +114,17 @@ github.com/stretchr/objx v0.1.0/go.mod h1:HFkY916IF+rwdDfMAkV7OtwuqBVzrE8GR6GFx+
github.com/stretchr/objx v0.1.1/go.mod h1:HFkY916IF+rwdDfMAkV7OtwuqBVzrE8GR6GFx+wExME=
github.com/stretchr/testify v1.2.2/go.mod h1:a8OnRcib4nhh0OaRAV+Yts87kKdq0PP7pXfy6kDkUVs=
github.com/stretchr/testify v1.3.0/go.mod h1:M5WIy9Dh21IEIfnGCwXGc5bZfKNJtfHm1UVUgZn+9EI=
-github.com/stretchr/testify v1.4.0 h1:2E4SXV/wtOkTonXsotYi4li6zVWxYlZuYNCXe9XRJyk=
github.com/stretchr/testify v1.4.0/go.mod h1:j7eGeouHqKxXV5pUuKE4zz7dFj8WfuZ+81PSLYec5m4=
github.com/syndtr/goleveldb v1.0.0 h1:fBdIW9lB4Iz0n9khmH8w27SJ3QEJ7+IgjPEwGSZiFdE=
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.3/go.mod h1:BaHyNc5bjzYkPqgLq7mdVzeiRtULKULXLgZFKsxEHI0=
-github.com/tidwall/gjson v1.6.4 h1:JKsCsJqRVFz8eYCsQ5E/ANRbK6CanAtA9IUvGsXklyo=
-github.com/tidwall/gjson v1.6.4/go.mod h1:BaHyNc5bjzYkPqgLq7mdVzeiRtULKULXLgZFKsxEHI0=
-github.com/tidwall/match v1.0.1 h1:PnKP62LPNxHKTwvHHZZzdOAOCtsJTjo6dZLCwpKm5xc=
+github.com/tidwall/gjson v1.6.7 h1:Mb1M9HZCRWEcXQ8ieJo7auYyyiSux6w9XN3AdTpxJrE=
+github.com/tidwall/gjson v1.6.7/go.mod h1:zeFuBCIqD4sN/gmqBzZ4j7Jd6UcA2Fc56x7QFsv+8fI=
github.com/tidwall/match v1.0.1/go.mod h1:LujAq0jyVjBy028G1WhWfIzbpQfMO8bBZ6Tyb0+pL9E=
+github.com/tidwall/match v1.0.3 h1:FQUVvBImDutD8wJLN6c5eMzWtjgONK9MwIBCOrUJKeE=
+github.com/tidwall/match v1.0.3/go.mod h1:eRSPERbgtNPcGhD8UCthc6PmLEQXEWd3PRB5JTxsfmM=
github.com/tidwall/pretty v1.0.2 h1:Z7S3cePv9Jwm1KwS0513MRaoUe3S01WPbLNV40pwWZU=
github.com/tidwall/pretty v1.0.2/go.mod h1:XNkn88O1ChpSDQmQeStsy+sBenx6DDtFZJxhVysOjyk=
github.com/ugorji/go v1.1.7 h1:/68gy2h+1mWMrwZFeD1kQialdSzAb432dtpeJ42ovdo=
@@ -162,8 +139,8 @@ github.com/yuin/goldmark v1.2.1/go.mod h1:3hX8gzYuyVAZsxl0MRgGTJEmQBFcNTphYh9dec
golang.org/x/crypto v0.0.0-20190308221718-c2843e01d9a2/go.mod h1:djNgcEr1/C05ACkg1iLfiJU5Ep61QUkGW8qpdssI0+w=
golang.org/x/crypto v0.0.0-20191011191535-87dc89f01550/go.mod h1:yigFU9vqHzYiE8UmvKecakEJjdnWj3jj499lnFckfCI=
golang.org/x/crypto v0.0.0-20200622213623-75b288015ac9/go.mod h1:LzIPMQfyMNhhGPhUkYOs5KpL4U8rLKemX1yGLhDgUto=
-golang.org/x/crypto v0.0.0-20201208171446-5f87f3452ae9 h1:sYNJzB4J8toYPQTM6pAkcmBRgw9SnQKP9oXCHfgy604=
-golang.org/x/crypto v0.0.0-20201208171446-5f87f3452ae9/go.mod h1:jdWPYTVW3xRLrWPugEBEK3UY2ZEsg3UU495nc5E+M+I=
+golang.org/x/crypto v0.0.0-20201221181555-eec23a3978ad h1:DN0cp81fZ3njFcrLCytUHRSUkqBjfTo4Tx9RJTWs0EY=
+golang.org/x/crypto v0.0.0-20201221181555-eec23a3978ad/go.mod h1:jdWPYTVW3xRLrWPugEBEK3UY2ZEsg3UU495nc5E+M+I=
golang.org/x/exp v0.0.0-20190121172915-509febef88a4/go.mod h1:CJ0aWSM057203Lf6IL+f9T1iT9GByDxfZKAQTCR3kQA=
golang.org/x/lint v0.0.0-20181026193005-c67002cb31c3/go.mod h1:UVdnD1Gm6xHRNCYTkRU2/jEulfH38KcIWyp/GAMgvoE=
golang.org/x/lint v0.0.0-20190227174305-5b3e6a55c961/go.mod h1:wehouNa3lNwaWXcvxsM5YxQ5yQlVC4a0KAMCusXpPoU=
@@ -189,7 +166,6 @@ golang.org/x/sys v0.0.0-20180909124046-d0be0721c37e/go.mod h1:STP8DvDyc/dI5b8T5h
golang.org/x/sys v0.0.0-20190215142949-d0b11bdaac8a/go.mod h1:STP8DvDyc/dI5b8T5hshtkjS+E42TnysNCUPdjciGhY=
golang.org/x/sys v0.0.0-20190412213103-97732733099d/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs=
golang.org/x/sys v0.0.0-20190422165155-953cdadca894/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs=
-golang.org/x/sys v0.0.0-20190813064441-fde4db37ae7a/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs=
golang.org/x/sys v0.0.0-20191026070338-33540a1f6037/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs=
golang.org/x/sys v0.0.0-20200116001909-b77594299b42/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs=
golang.org/x/sys v0.0.0-20200930185726-fdedc70b468f h1:+Nyd8tzPX9R7BWHguqsrbFdRx3WQ/1ib8I44HXV5yTA=
@@ -198,7 +174,6 @@ golang.org/x/term v0.0.0-20201117132131-f5c789dd3221 h1:/ZHdbVpdR/jk3g30/d4yUL0J
golang.org/x/term v0.0.0-20201117132131-f5c789dd3221/go.mod h1:Nr5EML6q2oocZ2LXRh80K7BxOlk5/8JxuGnuhpl+muw=
golang.org/x/text v0.3.0/go.mod h1:NqM8EUOU14njkJ3fqMW+pc6Ldnwhi/IjpwHt7yyuwOQ=
golang.org/x/text v0.3.2/go.mod h1:bEr9sfX3Q8Zfm5fL9x+3itogRgK3+ptLWKqgva+5dAk=
-golang.org/x/text v0.3.3 h1:cokOdA+Jmi5PJGXLlLllQSgYigAEfHXJAERHVMaCc2k=
golang.org/x/text v0.3.3/go.mod h1:5Zoc/QRtKVWzQhOtBMvqHzDpF6irO9z98xDceosuGiQ=
golang.org/x/time v0.0.0-20201208040808-7e3f01d25324 h1:Hir2P/De0WpUhtrKGGjvSb2YxUgyZ7EFOSLIcSSpiwE=
golang.org/x/time v0.0.0-20201208040808-7e3f01d25324/go.mod h1:tRJNPiyCQ0inRvYxbN9jk5I+vvW/OXSQhTDSoE431IQ=
@@ -213,7 +188,6 @@ golang.org/x/tools v0.0.0-20201218024724-ae774e9781d2/go.mod h1:emZCQorbCU4vsT4f
golang.org/x/xerrors v0.0.0-20190717185122-a985d3407aa7/go.mod h1:I/5z698sn9Ka8TeJc9MKroUUfqBBauWjQqLJ2OPfmY0=
golang.org/x/xerrors v0.0.0-20191011141410-1b5146add898/go.mod h1:I/5z698sn9Ka8TeJc9MKroUUfqBBauWjQqLJ2OPfmY0=
golang.org/x/xerrors v0.0.0-20191204190536-9bdfabe68543/go.mod h1:I/5z698sn9Ka8TeJc9MKroUUfqBBauWjQqLJ2OPfmY0=
-golang.org/x/xerrors v0.0.0-20200804184101-5ec99f83aff1 h1:go1bK/D/BFZV2I8cIQd1NKEZ+0owSTG1fDTci4IqFcE=
golang.org/x/xerrors v0.0.0-20200804184101-5ec99f83aff1/go.mod h1:I/5z698sn9Ka8TeJc9MKroUUfqBBauWjQqLJ2OPfmY0=
google.golang.org/appengine v1.1.0/go.mod h1:EbEs0AVv82hx2wNQdGPgUI5lhzA/G0D9YwlJXL52JkM=
google.golang.org/appengine v1.4.0/go.mod h1:xpcJRLb0r/rnEns0DIKYYv+WjYCduHsrkT7/EB5XEv4=
@@ -233,13 +207,8 @@ google.golang.org/protobuf v1.23.0/go.mod h1:EGpADcykh3NcUnDUJcl1+ZksZNG86OlYog2
google.golang.org/protobuf v1.23.1-0.20200526195155-81db48ad09cc/go.mod h1:EGpADcykh3NcUnDUJcl1+ZksZNG86OlYog2l/sGQquU=
google.golang.org/protobuf v1.25.0 h1:Ejskq+SyPohKW+1uil0JJMtmHCgJPJ/qWTxr8qp+R4c=
google.golang.org/protobuf v1.25.0/go.mod h1:9JNX74DMeImyA3h4bdi1ymwjUzf21/xIlbajtzgsN7c=
-gopkg.in/check.v1 v0.0.0-20161208181325-20d25e280405 h1:yhCVgyC4o1eVCa2tZl7eS0r+SDo693bJlVdllGtEeKM=
gopkg.in/check.v1 v0.0.0-20161208181325-20d25e280405/go.mod h1:Co6ibVJAznAaIkqp8huTwlJQCZ016jof/cbN4VW5Yz0=
-gopkg.in/fsnotify.v1 v1.4.7 h1:xOHLXZwVvI9hhs+cLKq5+I5onOuwQLhQwiu63xxlHs4=
gopkg.in/fsnotify.v1 v1.4.7/go.mod h1:Tz8NjZHkW78fSQdbUxIjBTcgA1z1m8ZHf0WmKUhAMys=
-gopkg.in/go-playground/assert.v1 v1.2.1/go.mod h1:9RXL0bg/zibRAgZUYszZSwO/z8Y/a8bDuhia5mkpMnE=
-gopkg.in/go-playground/validator.v9 v9.29.1/go.mod h1:+c9/zcJMFNgbLvly1L1V+PpxWdVbfP1avr/N00E2vyQ=
-gopkg.in/tomb.v1 v1.0.0-20141024135613-dd632973f1e7 h1:uRGJdciOHaEIrze2W8Q3AKkepLTh2hOroT7a+7czfdQ=
gopkg.in/tomb.v1 v1.0.0-20141024135613-dd632973f1e7/go.mod h1:dt/ZhP58zS4L8KSrWDmTeBkI65Dw0HsyUHuEVlX15mw=
gopkg.in/yaml.v2 v2.2.1/go.mod h1:hI93XBmqTisBFMUTm0b8Fm+jr3Dg1NNxqwp+5A1VGuI=
gopkg.in/yaml.v2 v2.2.2/go.mod h1:hI93XBmqTisBFMUTm0b8Fm+jr3Dg1NNxqwp+5A1VGuI=
From 569b89a1178bd25523f7fe5a785816cf9d0dea7e Mon Sep 17 00:00:00 2001
From: Mrs4s
Date: Sat, 26 Dec 2020 00:59:43 +0800
Subject: [PATCH 250/367] fix onebot protocol.
---
server/http.go | 3 +++
server/websocket.go | 6 +++++-
2 files changed, 8 insertions(+), 1 deletion(-)
diff --git a/server/http.go b/server/http.go
index f036be5..fd9fadb 100644
--- a/server/http.go
+++ b/server/http.go
@@ -352,6 +352,9 @@ func SetRestart(s *httpServer, c *gin.Context) {
func GetForwardMessage(s *httpServer, c *gin.Context) {
resId := getParam(c, "message_id")
+ if resId == "" {
+ resId = getParam(c, "id")
+ }
c.JSON(200, s.bot.CQGetForwardMessage(resId))
}
diff --git a/server/websocket.go b/server/websocket.go
index 11f1931..15fc88d 100644
--- a/server/websocket.go
+++ b/server/websocket.go
@@ -481,7 +481,11 @@ var wsApi = map[string]func(*coolq.CQBot, gjson.Result) coolq.MSG{
return bot.CQGetImage(p.Get("file").Str)
},
"get_forward_msg": func(bot *coolq.CQBot, p gjson.Result) coolq.MSG {
- return bot.CQGetForwardMessage(p.Get("message_id").Str)
+ id := p.Get("message_id").Str
+ if id == "" {
+ id = p.Get("id").Str
+ }
+ return bot.CQGetForwardMessage(id)
},
"get_msg": func(bot *coolq.CQBot, p gjson.Result) coolq.MSG {
return bot.CQGetMessage(int32(p.Get("message_id").Int()))
From 99a68b144b4802d10926bdebf998f3aac8a6f1c9 Mon Sep 17 00:00:00 2001
From: Mrs4s
Date: Sat, 26 Dec 2020 01:30:01 +0800
Subject: [PATCH 251/367] feature solve silder.
---
global/net.go | 22 ++++++++++++++++++++++
go.mod | 1 +
server/apiAdmin.go | 17 +++++++++--------
3 files changed, 32 insertions(+), 8 deletions(-)
diff --git a/global/net.go b/global/net.go
index b55827e..992257e 100644
--- a/global/net.go
+++ b/global/net.go
@@ -4,6 +4,8 @@ import (
"bytes"
"compress/gzip"
"fmt"
+ "github.com/guonaihong/gout"
+ "github.com/pkg/errors"
"io/ioutil"
"net"
"net/http"
@@ -62,6 +64,26 @@ func GetBytes(url string) ([]byte, error) {
return body, nil
}
+func GetSilderTicket(raw, version string) (string, error) {
+ u, err := url.Parse(raw)
+ if err != nil {
+ return "", err
+ }
+ q := u.Query()
+ var rsp string
+ if err = gout.GET(fmt.Sprintf("https://api.shkong.com/gocqhttpapi/silder/ticket?uin=%v&sid=%v&cap=%v", q["uin"][0], q["sid"][0], q["cap_cd"][0])).
+ SetHeader(gout.H{"User-Agent": "go-cqhttp/" + version}).
+ BindBody(&rsp).
+ Do(); err != nil {
+ return "", err
+ }
+ g := gjson.Parse(rsp)
+ if g.Get("error").Str != "" {
+ return "", errors.New(g.Get("error").Str)
+ }
+ return g.Get("ticket").Str, nil
+}
+
func QQMusicSongInfo(id string) (gjson.Result, error) {
d, err := GetBytes(`https://u.y.qq.com/cgi-bin/musicu.fcg?format=json&inCharset=utf8&outCharset=utf-8¬ice=0&platform=yqq.json&needNewCode=0&data={%22comm%22:{%22ct%22:24,%22cv%22:0},%22songinfo%22:{%22method%22:%22get_song_detail_yqq%22,%22param%22:{%22song_type%22:0,%22song_mid%22:%22%22,%22song_id%22:` + id + `},%22module%22:%22music.pf_song_detail_svr%22}}`)
if err != nil {
diff --git a/go.mod b/go.mod
index 93a61ef..b95169e 100644
--- a/go.mod
+++ b/go.mod
@@ -17,6 +17,7 @@ require (
github.com/kr/binarydist v0.1.0 // indirect
github.com/lestrrat-go/file-rotatelogs v2.4.0+incompatible
github.com/lestrrat-go/strftime v1.0.3 // indirect
+ github.com/pkg/errors v0.9.1
github.com/rifflock/lfshook v0.0.0-20180920164130-b9218ef580f5
github.com/sirupsen/logrus v1.7.0
github.com/syndtr/goleveldb v1.0.0
diff --git a/server/apiAdmin.go b/server/apiAdmin.go
index 1113e33..3378136 100644
--- a/server/apiAdmin.go
+++ b/server/apiAdmin.go
@@ -125,15 +125,16 @@ func (s *webServer) Dologin() {
if !rsp.Success {
switch rsp.Error {
case client.SliderNeededError:
- if client.SystemDeviceInfo.Protocol == client.AndroidPhone {
- log.Warnf("警告: Android Phone 强制要求暂不支持的滑条验证码, 请开启设备锁或切换到Watch协议验证通过后再使用.")
- log.Infof("按 Enter 继续....")
- readLine()
- os.Exit(0)
+ log.Warnf("正在处理滑条验证码, 这可能需要一段时间.")
+ ticket, err := global.GetSilderTicket(rsp.VerifyUrl, coolq.Version)
+ if err != nil {
+ log.Warnf("处理滑条验证码时出现错误: %v 将尝试跳过.", err)
+ cli.AllowSlider = false
+ cli.Disconnect()
+ rsp, err = cli.Login()
+ continue
}
- cli.AllowSlider = false
- cli.Disconnect()
- rsp, err = cli.Login()
+ rsp, err = cli.SubmitTicket(ticket)
continue
case client.NeedCaptcha:
_ = ioutil.WriteFile("captcha.jpg", rsp.CaptchaImage, 0644)
From 2baf622b83f8039b7b8f9c78d59549899292bc3f Mon Sep 17 00:00:00 2001
From: Mrs4s
Date: Sat, 26 Dec 2020 17:32:17 +0800
Subject: [PATCH 252/367] fix silder.
---
global/net.go | 15 +++++----------
server/apiAdmin.go | 30 +++++++++++++++++++++++++-----
2 files changed, 30 insertions(+), 15 deletions(-)
diff --git a/global/net.go b/global/net.go
index 992257e..c6dc179 100644
--- a/global/net.go
+++ b/global/net.go
@@ -64,17 +64,12 @@ func GetBytes(url string) ([]byte, error) {
return body, nil
}
-func GetSilderTicket(raw, version string) (string, error) {
- u, err := url.Parse(raw)
- if err != nil {
- return "", err
- }
- q := u.Query()
+func GetSilderTicket(raw, id string) (string, error) {
var rsp string
- if err = gout.GET(fmt.Sprintf("https://api.shkong.com/gocqhttpapi/silder/ticket?uin=%v&sid=%v&cap=%v", q["uin"][0], q["sid"][0], q["cap_cd"][0])).
- SetHeader(gout.H{"User-Agent": "go-cqhttp/" + version}).
- BindBody(&rsp).
- Do(); err != nil {
+ if err := gout.POST("https://api.shkong.com/gocqhttpapi/task").SetJSON(gout.H{
+ "id": id,
+ "url": raw,
+ }).SetTimeout(time.Second * 35).BindBody(&rsp).Do(); err != nil {
return "", err
}
g := gjson.Parse(rsp)
diff --git a/server/apiAdmin.go b/server/apiAdmin.go
index 3378136..49d673e 100644
--- a/server/apiAdmin.go
+++ b/server/apiAdmin.go
@@ -5,6 +5,7 @@ import (
"bytes"
"encoding/base64"
"fmt"
+ "github.com/Mrs4s/MiraiGo/utils"
"github.com/gin-contrib/pprof"
"image"
"io/ioutil"
@@ -112,6 +113,7 @@ func (s *webServer) Dologin() {
s.Console = bufio.NewReader(os.Stdin)
readLine := func() (str string) {
str, _ = s.Console.ReadString('\n')
+ str = strings.TrimSpace(str)
return
}
conf := GetConf()
@@ -125,15 +127,33 @@ func (s *webServer) Dologin() {
if !rsp.Success {
switch rsp.Error {
case client.SliderNeededError:
- log.Warnf("正在处理滑条验证码, 这可能需要一段时间.")
- ticket, err := global.GetSilderTicket(rsp.VerifyUrl, coolq.Version)
- if err != nil {
- log.Warnf("处理滑条验证码时出现错误: %v 将尝试跳过.", err)
+ log.Warnf("登录需要滑条验证码, 请选择解决方案: ")
+ log.Warnf("1. 自行抓包. (推荐)")
+ log.Warnf("2. 使用Cef自动处理.")
+ log.Warnf("3. 不提交滑块并继续.(可能会导致上网环境异常错误)")
+ log.Warnf("详细信息请参考文档")
+ log.Warn("请输入(1 - 3): ")
+ text = readLine()
+ if strings.Contains(text, "1") {
+ log.Warnf("请用浏览器打开 -> %v <- 并获取Ticket.", rsp.VerifyUrl)
+ log.Warn("请输入Ticket: (Enter 提交)")
+ text = readLine()
+ rsp, err = cli.SubmitTicket(strings.TrimSpace(text))
+ return
+ }
+ if strings.Contains(text, "3") {
cli.AllowSlider = false
cli.Disconnect()
rsp, err = cli.Login()
continue
}
+ id := utils.RandomStringRange(6, "0123456789")
+ log.Warnf("滑块ID为 %v 请在30S内处理.", id)
+ ticket, err := global.GetSilderTicket(rsp.VerifyUrl, id)
+ if err != nil {
+ log.Warnf("错误: " + err.Error())
+ os.Exit(0)
+ }
rsp, err = cli.SubmitTicket(ticket)
continue
case client.NeedCaptcha:
@@ -205,7 +225,7 @@ func (s *webServer) Dologin() {
cli.Disconnect()
rsp, err = cli.Login()
count++
- log.Warnf("错误: 当前上网环境异常. 将更换服务器并重试. 如果频繁遇到此问题请打开设备锁.")
+ log.Warnf("错误: 当前上网环境异常. 将更换服务器并重试.")
time.Sleep(time.Second)
continue
}
From 9c17f501b1a9f5c8eccf13de1de575085af08187 Mon Sep 17 00:00:00 2001
From: Mrs4s <1844812067@qq.com>
Date: Sun, 27 Dec 2020 01:59:01 +0800
Subject: [PATCH 253/367] update doc.
---
docs/slider.md | 74 ++++++++++++++++++++++++++++++++++++++++++++++
global/net.go | 2 +-
server/apiAdmin.go | 2 +-
3 files changed, 76 insertions(+), 2 deletions(-)
create mode 100644 docs/slider.md
diff --git a/docs/slider.md b/docs/slider.md
new file mode 100644
index 0000000..3195e92
--- /dev/null
+++ b/docs/slider.md
@@ -0,0 +1,74 @@
+# 滑块验证码
+
+由于TX最新的限制, 所有协议在陌生设备/IP登录时都有可能被要求通过滑块验证码, 否则将会出现 `当前上网环境异常` 的错误. 目前我们准备了两个临时方案应对该验证码.
+
+> 如果您有一台运行Windows的PC/Server 并且不会抓包操作, 我们建议直接使用方案B
+
+## 方案A: 自行抓包
+
+由于滑块验证码和QQ本体的协议独立, 我们无法直接处理并提交. 需要在浏览器通过后抓包并获取 `Ticket` 提交.
+
+该方案为具体的抓包教程, 如果您已经知道如何在浏览器中抓包. 可以略过接下来的文档并直接抓取 `cap_union_new_verify` 的返回值, 提取 `Ticket` 并在命令行提交.
+
+首先获取滑块验证码的地址, 并在浏览器中打开. 这里以 *Microsoft Edge* 浏览器为例, *Chrome* 同理.
+
+
+
+首先选择 `1` 并提取链接在浏览器中打开
+
+
+
+
+
+此时不要滑动验证码, 首先按下 `F12` (键盘右上角退格键上方) 打开 *开发者工具*
+
+
+
+点击 `Network` 选项卡 (在某些浏览器它可能叫做 `网络`)
+
+
+
+点开 `Filter` (箭头) 按钮以确定您能看到下面的工具栏, 勾选 `Preserve log`(红框)
+
+此时可以滑动并通过验证码
+
+
+
+回到 *开发者工具*, 我们可以看到已经有了一个请求.
+
+
+
+此时如果有多个请求, 请不要慌张. 看到上面的 `Filter` 没? 此时在 `Filter` 输入框中输入 `cap_union_new`, 就应该只剩一个请求了.
+
+然后点击该请求. 点开 `Preview` 选项卡 (箭头):
+
+
+
+此时就能看到一个标准的 `JSON`, 复制 `ticket` 字段并回到 `go-cqhttp` 粘贴. 即可通过滑块验证.
+
+如果您看到这里还是不会如何操作, 没关系! 我们还准备了方案B.
+
+## 方案B: 使用专用工具
+
+此方案需要您有一台可以操作的 `Windows` 电脑.
+
+首先下载工具: [蓝奏云](https://wws.lanzous.com/iw1Ejjr4rtg) [Google Drive](https://drive.google.com/file/d/1M6c3-kuD7ziHwl4hq75LcI119yB6HGdI/view?usp=sharing)
+
+解压并打开工具:
+
+
+
+打开 `go-cqhttp` 并选择 `2`:
+
+
+
+复制 `ID` 并前往工具粘贴:
+
+
+
+
+
+点击 `OK` 并处理滑块, 完成即可登录成功. (OK可能反应稍微慢点, 请不要多次点击)
+
+
+
diff --git a/global/net.go b/global/net.go
index c6dc179..5f5bc9b 100644
--- a/global/net.go
+++ b/global/net.go
@@ -64,7 +64,7 @@ func GetBytes(url string) ([]byte, error) {
return body, nil
}
-func GetSilderTicket(raw, id string) (string, error) {
+func GetSliderTicket(raw, id string) (string, error) {
var rsp string
if err := gout.POST("https://api.shkong.com/gocqhttpapi/task").SetJSON(gout.H{
"id": id,
diff --git a/server/apiAdmin.go b/server/apiAdmin.go
index 49d673e..6236113 100644
--- a/server/apiAdmin.go
+++ b/server/apiAdmin.go
@@ -149,7 +149,7 @@ func (s *webServer) Dologin() {
}
id := utils.RandomStringRange(6, "0123456789")
log.Warnf("滑块ID为 %v 请在30S内处理.", id)
- ticket, err := global.GetSilderTicket(rsp.VerifyUrl, id)
+ ticket, err := global.GetSliderTicket(rsp.VerifyUrl, id)
if err != nil {
log.Warnf("错误: " + err.Error())
os.Exit(0)
From ad51264efa3d6a3a43514b0026987798e8cd1665 Mon Sep 17 00:00:00 2001
From: Mrs4s <1844812067@qq.com>
Date: Sun, 27 Dec 2020 02:02:01 +0800
Subject: [PATCH 254/367] update.
---
server/apiAdmin.go | 2 +-
1 file changed, 1 insertion(+), 1 deletion(-)
diff --git a/server/apiAdmin.go b/server/apiAdmin.go
index 6236113..5c57ce4 100644
--- a/server/apiAdmin.go
+++ b/server/apiAdmin.go
@@ -131,7 +131,7 @@ func (s *webServer) Dologin() {
log.Warnf("1. 自行抓包. (推荐)")
log.Warnf("2. 使用Cef自动处理.")
log.Warnf("3. 不提交滑块并继续.(可能会导致上网环境异常错误)")
- log.Warnf("详细信息请参考文档")
+ log.Warnf("详细信息请参考文档 -> https://github.com/Mrs4s/go-cqhttp/blob/master/docs/slider.md <-")
log.Warn("请输入(1 - 3): ")
text = readLine()
if strings.Contains(text, "1") {
From f7144523d95055e96e5025c3d06283b56690ed99 Mon Sep 17 00:00:00 2001
From: Mrs4s <1844812067@qq.com>
Date: Sun, 27 Dec 2020 15:06:08 +0800
Subject: [PATCH 255/367] fix panic.
---
server/apiAdmin.go | 2 +-
1 file changed, 1 insertion(+), 1 deletion(-)
diff --git a/server/apiAdmin.go b/server/apiAdmin.go
index 5c57ce4..009ebb8 100644
--- a/server/apiAdmin.go
+++ b/server/apiAdmin.go
@@ -139,7 +139,7 @@ func (s *webServer) Dologin() {
log.Warn("请输入Ticket: (Enter 提交)")
text = readLine()
rsp, err = cli.SubmitTicket(strings.TrimSpace(text))
- return
+ continue
}
if strings.Contains(text, "3") {
cli.AllowSlider = false
From 97acd956f051b21d8646c597d4b5f7eec7cb6b17 Mon Sep 17 00:00:00 2001
From: Mrs4s <1844812067@qq.com>
Date: Sun, 27 Dec 2020 15:17:22 +0800
Subject: [PATCH 256/367] update doc.
---
docs/slider.md | 2 +-
1 file changed, 1 insertion(+), 1 deletion(-)
diff --git a/docs/slider.md b/docs/slider.md
index 3195e92..c29593c 100644
--- a/docs/slider.md
+++ b/docs/slider.md
@@ -52,7 +52,7 @@
此方案需要您有一台可以操作的 `Windows` 电脑.
-首先下载工具: [蓝奏云](https://wws.lanzous.com/iw1Ejjr4rtg) [Google Drive](https://drive.google.com/file/d/1M6c3-kuD7ziHwl4hq75LcI119yB6HGdI/view?usp=sharing)
+首先下载工具: [蓝奏云](https://wws.lanzous.com/i2vn0jrofte) [Google Drive](https://drive.google.com/file/d/1peMDHqgP8AgWBVp5vP-cfhcGrb2ksSrE/view?usp=sharing)
解压并打开工具:
From 589fbd21dfa23b978179de794a107812bd31fc8e Mon Sep 17 00:00:00 2001
From: HelloWorld
Date: Sun, 27 Dec 2020 19:32:14 +0800
Subject: [PATCH 257/367] Update quick_start.md
---
docs/quick_start.md | 8 ++++++++
1 file changed, 8 insertions(+)
diff --git a/docs/quick_start.md b/docs/quick_start.md
index d77ed0c..af91dcb 100644
--- a/docs/quick_start.md
+++ b/docs/quick_start.md
@@ -107,6 +107,14 @@ enable ws?(Y/n)
# 进阶指南
+## 跳过启动的五秒延时
+
+使用命令行参数 `faststart`即可跳过启动的五秒钟延时,例如
+
+```
+.\go-cqhttp.exe faststart
+```
+
## 如何自己构建
1. [下载源码](https://github.com/Mrs4s/go-cqhttp/archive/master.zip)并解压 || 使用`git clone https://github.com/Mrs4s/go-cqhttp.git`来拉取
From 4c942964c762bcfccccea0366744487f2476635e Mon Sep 17 00:00:00 2001
From: Mrs4s <1844812067@qq.com>
Date: Sun, 27 Dec 2020 22:15:20 +0800
Subject: [PATCH 258/367] update MiraiGo.
---
go.mod | 2 +-
go.sum | 2 ++
2 files changed, 3 insertions(+), 1 deletion(-)
diff --git a/go.mod b/go.mod
index b95169e..bc3cb2f 100644
--- a/go.mod
+++ b/go.mod
@@ -3,7 +3,7 @@ module github.com/Mrs4s/go-cqhttp
go 1.15
require (
- github.com/Mrs4s/MiraiGo v0.0.0-20201225164755-c519c532d0d5
+ github.com/Mrs4s/MiraiGo v0.0.0-20201227141240-b569935970d8
github.com/dustin/go-humanize v1.0.0
github.com/getlantern/go-update v0.0.0-20190510022740-79c495ab728c
github.com/getlantern/golog v0.0.0-20201105130739-9586b8bde3a9 // indirect
diff --git a/go.sum b/go.sum
index 6674800..8a6182b 100644
--- a/go.sum
+++ b/go.sum
@@ -2,6 +2,8 @@ cloud.google.com/go v0.26.0/go.mod h1:aQUYkXzVsufM+DwF1aE+0xfcU+56JwCaLick0ClmMT
github.com/BurntSushi/toml v0.3.1/go.mod h1:xHWCNGjB5oqiDr8zfno3MHue2Ht5sIBksp03qcyfWMU=
github.com/Mrs4s/MiraiGo v0.0.0-20201225164755-c519c532d0d5 h1:kvaZXnhjdOtRip6xlXu9hEyJhPzKs8ylrdE2eb+N4NQ=
github.com/Mrs4s/MiraiGo v0.0.0-20201225164755-c519c532d0d5/go.mod h1:7brUNAmygY22+PDCUiVT4MLeyvGHDBjW9f+67DKeHTw=
+github.com/Mrs4s/MiraiGo v0.0.0-20201227141240-b569935970d8 h1:NpceCtYeyHaM3vhWL4i+iOz2pjnhDDHMEl4Y1kLx9zI=
+github.com/Mrs4s/MiraiGo v0.0.0-20201227141240-b569935970d8/go.mod h1:7brUNAmygY22+PDCUiVT4MLeyvGHDBjW9f+67DKeHTw=
github.com/a8m/syncmap v0.0.0-20200818084611-4bbbd178de97/go.mod h1:f3iF7/3t9i9hsYF8DPgT0XeIVyNzevhMCKf2445Q6pE=
github.com/census-instrumentation/opencensus-proto v0.2.1/go.mod h1:f6KPmirojxKA12rnyqOA5BBL4O983OfeGPqjHWSTneU=
github.com/client9/misspell v0.3.4/go.mod h1:qj6jICC3Q7zFZvVWo7KLAzC3yx5G7kyvSDkc90ppPyw=
From ec3c2d624456e15019f1417967ef80c35968964c Mon Sep 17 00:00:00 2001
From: Mrs4s
Date: Tue, 29 Dec 2020 22:15:49 +0800
Subject: [PATCH 259/367] update MiraiGo.
---
go.mod | 2 +-
go.sum | 6 ++----
2 files changed, 3 insertions(+), 5 deletions(-)
diff --git a/go.mod b/go.mod
index bc3cb2f..0b7e03d 100644
--- a/go.mod
+++ b/go.mod
@@ -3,7 +3,7 @@ module github.com/Mrs4s/go-cqhttp
go 1.15
require (
- github.com/Mrs4s/MiraiGo v0.0.0-20201227141240-b569935970d8
+ github.com/Mrs4s/MiraiGo v0.0.0-20201229094454-2476ece99e8f
github.com/dustin/go-humanize v1.0.0
github.com/getlantern/go-update v0.0.0-20190510022740-79c495ab728c
github.com/getlantern/golog v0.0.0-20201105130739-9586b8bde3a9 // indirect
diff --git a/go.sum b/go.sum
index 8a6182b..c0af01b 100644
--- a/go.sum
+++ b/go.sum
@@ -1,9 +1,7 @@
cloud.google.com/go v0.26.0/go.mod h1:aQUYkXzVsufM+DwF1aE+0xfcU+56JwCaLick0ClmMTw=
github.com/BurntSushi/toml v0.3.1/go.mod h1:xHWCNGjB5oqiDr8zfno3MHue2Ht5sIBksp03qcyfWMU=
-github.com/Mrs4s/MiraiGo v0.0.0-20201225164755-c519c532d0d5 h1:kvaZXnhjdOtRip6xlXu9hEyJhPzKs8ylrdE2eb+N4NQ=
-github.com/Mrs4s/MiraiGo v0.0.0-20201225164755-c519c532d0d5/go.mod h1:7brUNAmygY22+PDCUiVT4MLeyvGHDBjW9f+67DKeHTw=
-github.com/Mrs4s/MiraiGo v0.0.0-20201227141240-b569935970d8 h1:NpceCtYeyHaM3vhWL4i+iOz2pjnhDDHMEl4Y1kLx9zI=
-github.com/Mrs4s/MiraiGo v0.0.0-20201227141240-b569935970d8/go.mod h1:7brUNAmygY22+PDCUiVT4MLeyvGHDBjW9f+67DKeHTw=
+github.com/Mrs4s/MiraiGo v0.0.0-20201229094454-2476ece99e8f h1:zzRPWuR61umlXwBnywlaOL/8ElT8hswZTQG+VHHMBsY=
+github.com/Mrs4s/MiraiGo v0.0.0-20201229094454-2476ece99e8f/go.mod h1:7brUNAmygY22+PDCUiVT4MLeyvGHDBjW9f+67DKeHTw=
github.com/a8m/syncmap v0.0.0-20200818084611-4bbbd178de97/go.mod h1:f3iF7/3t9i9hsYF8DPgT0XeIVyNzevhMCKf2445Q6pE=
github.com/census-instrumentation/opencensus-proto v0.2.1/go.mod h1:f6KPmirojxKA12rnyqOA5BBL4O983OfeGPqjHWSTneU=
github.com/client9/misspell v0.3.4/go.mod h1:qj6jICC3Q7zFZvVWo7KLAzC3yx5G7kyvSDkc90ppPyw=
From 5a8d918d9d50eaae5b2acd26670bd3004fd7274e Mon Sep 17 00:00:00 2001
From: wdvxdr
Date: Thu, 31 Dec 2020 16:41:03 +0800
Subject: [PATCH 260/367] feat send CQ:forward
---
coolq/api.go | 2 +-
coolq/cqcode.go | 11 ++++++++++-
go.mod | 2 +-
go.sum | 4 ++--
4 files changed, 14 insertions(+), 5 deletions(-)
diff --git a/coolq/api.go b/coolq/api.go
index 1f49fba..1652d18 100644
--- a/coolq/api.go
+++ b/coolq/api.go
@@ -781,7 +781,7 @@ func (bot *CQBot) CQGetMessage(messageId int32) MSG {
"nickname": sender.Nickname,
},
"time": msg["time"],
- "message_raw": raw,
+ "raw_message": raw,
"message": ToFormattedMessage(bot.ConvertStringMessage(raw, isGroup), func() int64 {
if isGroup {
return gid.(int64)
diff --git a/coolq/cqcode.go b/coolq/cqcode.go
index 29fe1e6..8496e0b 100644
--- a/coolq/cqcode.go
+++ b/coolq/cqcode.go
@@ -402,6 +402,12 @@ func (bot *CQBot) ConvertStringMessage(msg string, group bool) (r []message.IMes
}
}
}
+ if t == "forward" { // 单独处理转发
+ if id, ok := params["id"]; ok {
+ r = []message.IMessageElement{bot.Client.DownloadForwardMessage(id)}
+ return
+ }
+ }
elem, err := bot.ToElement(t, params, group)
if err != nil {
org := "[" + string(cqCode) + "]"
@@ -475,6 +481,10 @@ func (bot *CQBot) ConvertObjectMessage(m gjson.Result, group bool) (r []message.
}
}
}
+ if t == "forward" {
+ r = []message.IMessageElement{bot.Client.DownloadForwardMessage(e.Get("data.id").String())}
+ return
+ }
d := make(map[string]string)
e.Get("data").ForEach(func(key, value gjson.Result) bool {
d[key.Str] = value.String()
@@ -491,7 +501,6 @@ func (bot *CQBot) ConvertObjectMessage(m gjson.Result, group bool) (r []message.
case []message.IMessageElement:
r = append(r, i...)
}
-
}
if m.Type == gjson.String {
return bot.ConvertStringMessage(m.Str, group)
diff --git a/go.mod b/go.mod
index 0b7e03d..8fd13f0 100644
--- a/go.mod
+++ b/go.mod
@@ -3,7 +3,7 @@ module github.com/Mrs4s/go-cqhttp
go 1.15
require (
- github.com/Mrs4s/MiraiGo v0.0.0-20201229094454-2476ece99e8f
+ github.com/Mrs4s/MiraiGo v0.0.0-20201231081106-eaa543ae8683
github.com/dustin/go-humanize v1.0.0
github.com/getlantern/go-update v0.0.0-20190510022740-79c495ab728c
github.com/getlantern/golog v0.0.0-20201105130739-9586b8bde3a9 // indirect
diff --git a/go.sum b/go.sum
index c0af01b..0704630 100644
--- a/go.sum
+++ b/go.sum
@@ -1,7 +1,7 @@
cloud.google.com/go v0.26.0/go.mod h1:aQUYkXzVsufM+DwF1aE+0xfcU+56JwCaLick0ClmMTw=
github.com/BurntSushi/toml v0.3.1/go.mod h1:xHWCNGjB5oqiDr8zfno3MHue2Ht5sIBksp03qcyfWMU=
-github.com/Mrs4s/MiraiGo v0.0.0-20201229094454-2476ece99e8f h1:zzRPWuR61umlXwBnywlaOL/8ElT8hswZTQG+VHHMBsY=
-github.com/Mrs4s/MiraiGo v0.0.0-20201229094454-2476ece99e8f/go.mod h1:7brUNAmygY22+PDCUiVT4MLeyvGHDBjW9f+67DKeHTw=
+github.com/Mrs4s/MiraiGo v0.0.0-20201231081106-eaa543ae8683 h1:Hh7GPsqvYzfS2sn7oCK5bv1cWGLO/bpLL16w5WBlWv0=
+github.com/Mrs4s/MiraiGo v0.0.0-20201231081106-eaa543ae8683/go.mod h1:7brUNAmygY22+PDCUiVT4MLeyvGHDBjW9f+67DKeHTw=
github.com/a8m/syncmap v0.0.0-20200818084611-4bbbd178de97/go.mod h1:f3iF7/3t9i9hsYF8DPgT0XeIVyNzevhMCKf2445Q6pE=
github.com/census-instrumentation/opencensus-proto v0.2.1/go.mod h1:f6KPmirojxKA12rnyqOA5BBL4O983OfeGPqjHWSTneU=
github.com/client9/misspell v0.3.4/go.mod h1:qj6jICC3Q7zFZvVWo7KLAzC3yx5G7kyvSDkc90ppPyw=
From cfc5d6d2ffc85489fef39758cd32e8bb8cb31a92 Mon Sep 17 00:00:00 2001
From: wdvxdr
Date: Fri, 1 Jan 2021 19:22:37 +0800
Subject: [PATCH 261/367] drop getlantern/go-update
---
global/fs.go | 78 ++++++++++++++++++++++++++++++++++++++++++++++++++++
go.mod | 9 +++---
go.sum | 44 +++++++++++++++--------------
main.go | 3 +-
4 files changed, 108 insertions(+), 26 deletions(-)
diff --git a/global/fs.go b/global/fs.go
index 43d8c3c..f4222c0 100644
--- a/global/fs.go
+++ b/global/fs.go
@@ -1,17 +1,22 @@
package global
import (
+ "bufio"
"bytes"
+ "compress/bzip2"
"crypto/md5"
"encoding/base64"
"encoding/hex"
"errors"
"fmt"
+ "github.com/kardianos/osext"
+ "io"
"io/ioutil"
"net"
"net/url"
"os"
"path"
+ "path/filepath"
"runtime"
"strconv"
"strings"
@@ -150,3 +155,76 @@ func (wc WriteCounter) PrintProgress() {
fmt.Printf("\r%s", strings.Repeat(" ", 35))
fmt.Printf("\rDownloading... %s complete", humanize.Bytes(wc.Total))
}
+
+// UpdateFromStream copy form getlantern/go-update
+func UpdateFromStream(updateWith io.Reader) (err error, errRecover error) {
+ updatePath, err := osext.Executable()
+ if err != nil {
+ return
+ }
+ var newBytes []byte
+ // no patch to apply, go on through
+ var fileHeader []byte
+ bufBytes := bufio.NewReader(updateWith)
+ fileHeader, err = bufBytes.Peek(2)
+ if err != nil {
+ return
+ }
+ // The content is always bzip2 compressed except when running test, in
+ // which case is not prefixed with the magic byte sequence for sure.
+ if bytes.Equal([]byte{0x42, 0x5a}, fileHeader) {
+ // Identifying bzip2 files.
+ updateWith = bzip2.NewReader(bufBytes)
+ } else {
+ updateWith = io.Reader(bufBytes)
+ }
+ newBytes, err = ioutil.ReadAll(updateWith)
+ if err != nil {
+ return
+ }
+ // get the directory the executable exists in
+ updateDir := filepath.Dir(updatePath)
+ filename := filepath.Base(updatePath)
+ // Copy the contents of of newbinary to a the new executable file
+ newPath := filepath.Join(updateDir, fmt.Sprintf(".%s.new", filename))
+ fp, err := os.OpenFile(newPath, os.O_CREATE|os.O_WRONLY|os.O_TRUNC, 0755)
+ if err != nil {
+ return
+ }
+ // We won't log this error, because it's always going to happen.
+ defer func() { _ = fp.Close() }()
+ if _, err = io.Copy(fp, bytes.NewReader(newBytes)); err != nil {
+ log.Errorf("Unable to copy data: %v\n", err)
+ }
+
+ // if we don't call fp.Close(), windows won't let us move the new executable
+ // because the file will still be "in use"
+ if err := fp.Close(); err != nil {
+ log.Errorf("Unable to close file: %v\n", err)
+ }
+ // this is where we'll move the executable to so that we can swap in the updated replacement
+ oldPath := filepath.Join(updateDir, fmt.Sprintf(".%s.old", filename))
+
+ // delete any existing old exec file - this is necessary on Windows for two reasons:
+ // 1. after a successful update, Windows can't remove the .old file because the process is still running
+ // 2. windows rename operations fail if the destination file already exists
+ _ = os.Remove(oldPath)
+
+ // move the existing executable to a new file in the same directory
+ err = os.Rename(updatePath, oldPath)
+ if err != nil {
+ return
+ }
+
+ // move the new exectuable in to become the new program
+ err = os.Rename(newPath, updatePath)
+
+ if err != nil {
+ // copy unsuccessful
+ errRecover = os.Rename(oldPath, updatePath)
+ } else {
+ // copy successful, remove the old binary
+ _ = os.Remove(oldPath)
+ }
+ return
+}
\ No newline at end of file
diff --git a/go.mod b/go.mod
index 8fd13f0..29bc994 100644
--- a/go.mod
+++ b/go.mod
@@ -5,16 +5,16 @@ go 1.15
require (
github.com/Mrs4s/MiraiGo v0.0.0-20201231081106-eaa543ae8683
github.com/dustin/go-humanize v1.0.0
- github.com/getlantern/go-update v0.0.0-20190510022740-79c495ab728c
- github.com/getlantern/golog v0.0.0-20201105130739-9586b8bde3a9 // indirect
+ github.com/fastly/go-utils v0.0.0-20180712184237-d95a45783239 // indirect
github.com/gin-contrib/pprof v1.3.0
github.com/gin-gonic/gin v1.6.3
github.com/gorilla/websocket v1.4.2
github.com/guonaihong/gout v0.1.4
github.com/hjson/hjson-go v3.1.0+incompatible
+ github.com/jehiah/go-strftime v0.0.0-20171201141054-1d33003b3869 // indirect
+ github.com/jonboulle/clockwork v0.2.2 // indirect
github.com/json-iterator/go v1.1.10
- github.com/kardianos/osext v0.0.0-20190222173326-2bc1f35cddc0 // indirect
- github.com/kr/binarydist v0.1.0 // indirect
+ github.com/kardianos/osext v0.0.0-20190222173326-2bc1f35cddc0
github.com/lestrrat-go/file-rotatelogs v2.4.0+incompatible
github.com/lestrrat-go/strftime v1.0.3 // indirect
github.com/pkg/errors v0.9.1
@@ -22,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.7
github.com/wdvxdr1123/go-silk v0.0.0-20201210140933-bcdbcb2f1093
github.com/yinghau76/go-ascii-art v0.0.0-20190517192627-e7f465a30189
diff --git a/go.sum b/go.sum
index 0704630..b446cf1 100644
--- a/go.sum
+++ b/go.sum
@@ -6,26 +6,16 @@ github.com/a8m/syncmap v0.0.0-20200818084611-4bbbd178de97/go.mod h1:f3iF7/3t9i9h
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=
+github.com/davecgh/go-spew v1.1.1 h1:vj9j/u1bqnvCEfJOwUhtlOARqs3+rkHYY13jYWTU97c=
github.com/davecgh/go-spew v1.1.1/go.mod h1:J7Y8YcW2NihsgmVo/mv3lAwl/skON4iLHjSsI+c5H38=
github.com/dustin/go-humanize v1.0.0 h1:VSnTsYCnlFHaM2/igO1h6X3HA71jcobQuxemgkq4zYo=
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 h1:IXs+QLmnXW2CcXuY+8Mzv/fWEsPGWxqefPtCP5CnV9I=
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=
-github.com/getlantern/errors v1.0.1 h1:XukU2whlh7OdpxnkXhNH9VTLVz0EVPGKDV5K0oWhvzw=
-github.com/getlantern/errors v1.0.1/go.mod h1:l+xpFBrCtDLpK9qNjxs+cHU6+BAdlBaxHqikB6Lku3A=
-github.com/getlantern/go-update v0.0.0-20190510022740-79c495ab728c h1:mP9bsvdddRSMwqO+lmNuSrsH7nD2nBIz7af+e/4je4c=
-github.com/getlantern/go-update v0.0.0-20190510022740-79c495ab728c/go.mod h1:goroSTghTcnjKaR2C8ovKWy1lEvRNfqHrW/kRJNMek0=
-github.com/getlantern/golog v0.0.0-20201105130739-9586b8bde3a9 h1:8MYJU90rB1bsavemKSAuDKBjtAKo5xq95bEPOnzV7CE=
-github.com/getlantern/golog v0.0.0-20201105130739-9586b8bde3a9/go.mod h1:ZyIjgH/1wTCl+B+7yH1DqrWp6MPJqESmwmEQ89ZfhvA=
-github.com/getlantern/hex v0.0.0-20190417191902-c6586a6fe0b7 h1:micT5vkcr9tOVk1FiH8SWKID8ultN44Z+yzd2y/Vyb0=
-github.com/getlantern/hex v0.0.0-20190417191902-c6586a6fe0b7/go.mod h1:dD3CgOrwlzca8ed61CsZouQS5h5jIzkK9ZWrTcf0s+o=
-github.com/getlantern/hidden v0.0.0-20190325191715-f02dbb02be55 h1:XYzSdCbkzOC0FDNrgJqGRo8PCMFOBFL9py72DRs7bmc=
-github.com/getlantern/hidden v0.0.0-20190325191715-f02dbb02be55/go.mod h1:6mmzY2kW1TOOrVy+r41Za2MxXM+hhqTtY3oBKd2AgFA=
-github.com/getlantern/ops v0.0.0-20190325191751-d70cb0d6f85f h1:wrYrQttPS8FHIRSlsrcuKazukx/xqO/PpLZzZXsF+EA=
-github.com/getlantern/ops v0.0.0-20190325191751-d70cb0d6f85f/go.mod h1:D5ao98qkA6pxftxoqzibIBBrLSUli+kYnJqrgBf9cIA=
github.com/gin-contrib/pprof v1.3.0 h1:G9eK6HnbkSqDZBYbzG4wrjCsA4e+cvYAHUZw6W+W9K0=
github.com/gin-contrib/pprof v1.3.0/go.mod h1:waMjT1H9b179t3CxuG1cV3DHpga6ybizwfBaM5OXaB0=
github.com/gin-contrib/sse v0.1.0 h1:Y/yl/+YNO8GZSjAhjMsSuLt29uWRFHdHYUb5lYOV9qE=
@@ -34,6 +24,7 @@ github.com/gin-gonic/gin v1.6.0/go.mod h1:75u5sXoLsGZoRN5Sgbi1eraJ4GU3++wFwWzhwv
github.com/gin-gonic/gin v1.6.2/go.mod h1:75u5sXoLsGZoRN5Sgbi1eraJ4GU3++wFwWzhwvtwp4M=
github.com/gin-gonic/gin v1.6.3 h1:ahKqKTFpO5KTPHxWZjEdPScmYaGtLo8Y4DMHoEsnp14=
github.com/gin-gonic/gin v1.6.3/go.mod h1:75u5sXoLsGZoRN5Sgbi1eraJ4GU3++wFwWzhwvtwp4M=
+github.com/go-playground/assert/v2 v2.0.1 h1:MsBgLAaY856+nPRTKrp3/OZK38U/wa0CcBYNjji3q3A=
github.com/go-playground/assert/v2 v2.0.1/go.mod h1:VDjEfimB/XKnb+ZQfWdccd7VUvScMdVu0Titje2rxJ4=
github.com/go-playground/locales v0.13.0 h1:HyWk6mgj5qFqCT5fjGBuRArbVDfE4hi8+e8ceBS/t7Q=
github.com/go-playground/locales v0.13.0/go.mod h1:taPMhCMXrRLJO55olJkUXHZBHCxTMfnGwq/HNwmWNS8=
@@ -41,8 +32,6 @@ github.com/go-playground/universal-translator v0.17.0 h1:icxd5fm+REJzpZx7ZfpaD87
github.com/go-playground/universal-translator v0.17.0/go.mod h1:UkSxE5sNxxRwHyU+Scu5vgOQjsIJAF8j9muTVoKLVtA=
github.com/go-playground/validator/v10 v10.2.0 h1:KgJ0snyC2R9VXYN2rneOtQcw5aHQB1Vv0sFl1UcHBOY=
github.com/go-playground/validator/v10 v10.2.0/go.mod h1:uOYAAleCW8F/7oMFd6aG0GOhaH6EGOAJShg8Id5JGkI=
-github.com/go-stack/stack v1.8.0 h1:5SgMzNM5HxrEjV0ww2lTmX6E2Izsfxas4+YHWRs3Lsk=
-github.com/go-stack/stack v1.8.0/go.mod h1:v0f6uXyyMGvRgIKkXu+yp6POWl0qKG85gN/melR3HDY=
github.com/golang/glog v0.0.0-20160126235308-23def4e6c14b/go.mod h1:SBH7ygxi8pfUlaOkMMuAQtPIUF8ecWP5IEl/CR7VP2Q=
github.com/golang/mock v1.1.1/go.mod h1:oTYuIxOrZwtPieC+H1uAHpcLFnEyAGVDL/k47Jfbm0A=
github.com/golang/protobuf v1.2.0/go.mod h1:6lQm79b+lXiMfvg/cZm0SGofjICqVBUtrP5yJMmIC1U=
@@ -62,8 +51,10 @@ github.com/google/go-cmp v0.2.0/go.mod h1:oXzfMopK8JAjlY9xF4vHSVASa0yLyX7SntLO5a
github.com/google/go-cmp v0.3.0/go.mod h1:8QqcDgzrUqlUb/G2PQTWiueGozuR1884gddMywk6iLU=
github.com/google/go-cmp v0.3.1/go.mod h1:8QqcDgzrUqlUb/G2PQTWiueGozuR1884gddMywk6iLU=
github.com/google/go-cmp v0.4.0/go.mod h1:v8dTdLbMG2kIc/vJvl+f65V22dbkXbowE6jgT/gNBxE=
+github.com/google/go-cmp v0.5.0 h1:/QaMHBdZ26BB3SSst0Iwl10Epc+xhTquomWX0oZEB6w=
github.com/google/go-cmp v0.5.0/go.mod h1:v8dTdLbMG2kIc/vJvl+f65V22dbkXbowE6jgT/gNBxE=
github.com/google/gofuzz v1.0.0/go.mod h1:dBl0BpW6vV/+mYPU4Po3pmUjxk6FQPldtuIdl/M65Eg=
+github.com/google/uuid v1.1.1 h1:Gkbcsh/GbpXz7lPftLA3P6TYMwjCLYm83jiFQZF/3gY=
github.com/google/uuid v1.1.1/go.mod h1:TIyPZe4MgqvfeYDBFedMoGGpEw/LqOeaOT+nhxU+yHo=
github.com/gorilla/websocket v1.4.2 h1:+/TMaTYc4QFitKJxsQ7Yye35DkWvkdLcvGKqM+x0Ufc=
github.com/gorilla/websocket v1.4.2/go.mod h1:YR8l580nyteQvAITg2hZ9XVh4b55+EU/adAjf1fMHhE=
@@ -71,17 +62,21 @@ github.com/guonaihong/gout v0.1.4 h1:uBBoyztMX9okC27OQxqhn6bZ0ROkGyvnEIHwtp3TM4g
github.com/guonaihong/gout v0.1.4/go.mod h1:0rFYAYyzbcxEg11eY2qUbffJs7hHRPeugAnlVYSp8Ic=
github.com/hjson/hjson-go v3.1.0+incompatible h1:DY/9yE8ey8Zv22bY+mHV1uk2yRy0h8tKhZ77hEdi0Aw=
github.com/hjson/hjson-go v3.1.0+incompatible/go.mod h1:qsetwF8NlsTsOTwZTApNlTCerV+b2GjYRRcIk4JMFio=
+github.com/hpcloud/tail v1.0.0 h1:nfCOvKYfkgYP8hkirhJocXT2+zOD8yUNjXaWfTlyFKI=
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.9/go.mod h1:KdQUCv79m/52Kvf8AW2vK1V8akMuk1QjK/uOdHXbAo4=
github.com/json-iterator/go v1.1.10 h1:Kz6Cvnvv2wGdaG/V8yMvfkmNiXq9Ya2KUv4rouJJr68=
github.com/json-iterator/go v1.1.10/go.mod h1:KdQUCv79m/52Kvf8AW2vK1V8akMuk1QjK/uOdHXbAo4=
github.com/kardianos/osext v0.0.0-20190222173326-2bc1f35cddc0 h1:iQTw/8FWTuc7uiaSepXwyf3o52HaUYcV+Tu66S3F5GA=
github.com/kardianos/osext v0.0.0-20190222173326-2bc1f35cddc0/go.mod h1:1NbS8ALrpOvjt0rHPNLyCIeMtbizbir8U//inJ+zuB8=
github.com/konsorten/go-windows-terminal-sequences v1.0.1/go.mod h1:T0+1ngSBFLxvqU3pZ+m/2kptfBszLMUkC4ZK/EgS/cQ=
-github.com/kr/binarydist v0.1.0 h1:6kAoLA9FMMnNGSehX0s1PdjbEaACznAv/W219j2uvyo=
-github.com/kr/binarydist v0.1.0/go.mod h1:DY7S//GCoz1BCd0B0EVrinCKAZN3pXe+MDaIZbXQVgM=
github.com/leodido/go-urn v1.2.0 h1:hpXL4XnriNwQ/ABnpepYM/1vCLWNDfUNts8dX3xTG6Y=
github.com/leodido/go-urn v1.2.0/go.mod h1:+8+nEpDfqqsY+g338gtMEUOtuK+4dEMhiQEgxpxOKII=
+github.com/lestrrat-go/envload v0.0.0-20180220234015-a3eb8ddeffcc h1:RKf14vYWi2ttpEmkA4aQ3j4u9dStX2t4M8UM6qqNsG8=
github.com/lestrrat-go/envload v0.0.0-20180220234015-a3eb8ddeffcc/go.mod h1:kopuH9ugFRkIXf3YoqHKyrJ9YfUFsckUU9S7B+XP+is=
github.com/lestrrat-go/file-rotatelogs v2.4.0+incompatible h1:Y6sqxHMyB1D2YSzWkLibYKgg+SwmyFU9dF2hn6MdTj4=
github.com/lestrrat-go/file-rotatelogs v2.4.0+incompatible/go.mod h1:ZQnN8lSECaebrkQytbHj4xNgtg8CR7RYXnPok8e0EHA=
@@ -96,13 +91,14 @@ github.com/modern-go/reflect2 v0.0.0-20180701023420-4b7aa43c6742/go.mod h1:bx2lN
github.com/nfnt/resize v0.0.0-20180221191011-83c6a9932646 h1:zYyBkD/k9seD2A7fsi6Oo2LfFZAehjjQMERAvZLEDnQ=
github.com/nfnt/resize v0.0.0-20180221191011-83c6a9932646/go.mod h1:jpp1/29i3P1S/RLdc7JQKbRpFeM1dOBd8T9ki5s+AY8=
github.com/onsi/ginkgo v1.6.0/go.mod h1:lLunBs/Ym6LB5Z9jYTR76FiuTmxDTDusOGeTQH+WWjE=
+github.com/onsi/ginkgo v1.7.0 h1:WSHQ+IS43OoUrWtD1/bbclrwK8TTH5hzp+umCiuxHgs=
github.com/onsi/ginkgo v1.7.0/go.mod h1:lLunBs/Ym6LB5Z9jYTR76FiuTmxDTDusOGeTQH+WWjE=
+github.com/onsi/gomega v1.4.3 h1:RE1xgDvH7imwFD45h+u2SgIfERHlS2yNG4DObb5BSKU=
github.com/onsi/gomega v1.4.3/go.mod h1:ex+gbHU/CVuBBDIJjb2X0qEXbFg53c61hWP/1CpauHY=
-github.com/oxtoacart/bpool v0.0.0-20190530202638-03653db5a59c h1:rp5dCmg/yLR3mgFuSOe4oEnDDmGLROTvMragMUXpTQw=
-github.com/oxtoacart/bpool v0.0.0-20190530202638-03653db5a59c/go.mod h1:X07ZCGwUbLaax7L0S3Tw4hpejzu63ZrrQiUe6W0hcy0=
github.com/pkg/errors v0.8.1/go.mod h1:bwawxfHBFNV+L2hUp1rHADufV3IMtnDRdf1r5NINEl0=
github.com/pkg/errors v0.9.1 h1:FEBLx1zS214owpjy7qsBeixbURkuhQAwrK5UwLGTwt4=
github.com/pkg/errors v0.9.1/go.mod h1:bwawxfHBFNV+L2hUp1rHADufV3IMtnDRdf1r5NINEl0=
+github.com/pmezard/go-difflib v1.0.0 h1:4DBwDE0NGyQoBHbLQYPwSUPoCMWR5BEzIk/f1lZbAQM=
github.com/pmezard/go-difflib v1.0.0/go.mod h1:iKH77koFhYxTK1pcRnkKkqfTogsbg7gZNVY4sRDYZ/4=
github.com/prometheus/client_model v0.0.0-20190812154241-14fe0d1b01d4/go.mod h1:xMI15A0UPsDsEKsMN9yxemIoYk6Tm2C1GtYGdfGttqA=
github.com/rifflock/lfshook v0.0.0-20180920164130-b9218ef580f5 h1:mZHayPoR0lNmnHyvtYjDeq0zlVHn9K/ZXoy17ylucdo=
@@ -114,11 +110,14 @@ github.com/stretchr/objx v0.1.0/go.mod h1:HFkY916IF+rwdDfMAkV7OtwuqBVzrE8GR6GFx+
github.com/stretchr/objx v0.1.1/go.mod h1:HFkY916IF+rwdDfMAkV7OtwuqBVzrE8GR6GFx+wExME=
github.com/stretchr/testify v1.2.2/go.mod h1:a8OnRcib4nhh0OaRAV+Yts87kKdq0PP7pXfy6kDkUVs=
github.com/stretchr/testify v1.3.0/go.mod h1:M5WIy9Dh21IEIfnGCwXGc5bZfKNJtfHm1UVUgZn+9EI=
+github.com/stretchr/testify v1.4.0 h1:2E4SXV/wtOkTonXsotYi4li6zVWxYlZuYNCXe9XRJyk=
github.com/stretchr/testify v1.4.0/go.mod h1:j7eGeouHqKxXV5pUuKE4zz7dFj8WfuZ+81PSLYec5m4=
github.com/syndtr/goleveldb v1.0.0 h1:fBdIW9lB4Iz0n9khmH8w27SJ3QEJ7+IgjPEwGSZiFdE=
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.3/go.mod h1:BaHyNc5bjzYkPqgLq7mdVzeiRtULKULXLgZFKsxEHI0=
github.com/tidwall/gjson v1.6.7 h1:Mb1M9HZCRWEcXQ8ieJo7auYyyiSux6w9XN3AdTpxJrE=
github.com/tidwall/gjson v1.6.7/go.mod h1:zeFuBCIqD4sN/gmqBzZ4j7Jd6UcA2Fc56x7QFsv+8fI=
@@ -174,6 +173,7 @@ golang.org/x/term v0.0.0-20201117132131-f5c789dd3221 h1:/ZHdbVpdR/jk3g30/d4yUL0J
golang.org/x/term v0.0.0-20201117132131-f5c789dd3221/go.mod h1:Nr5EML6q2oocZ2LXRh80K7BxOlk5/8JxuGnuhpl+muw=
golang.org/x/text v0.3.0/go.mod h1:NqM8EUOU14njkJ3fqMW+pc6Ldnwhi/IjpwHt7yyuwOQ=
golang.org/x/text v0.3.2/go.mod h1:bEr9sfX3Q8Zfm5fL9x+3itogRgK3+ptLWKqgva+5dAk=
+golang.org/x/text v0.3.3 h1:cokOdA+Jmi5PJGXLlLllQSgYigAEfHXJAERHVMaCc2k=
golang.org/x/text v0.3.3/go.mod h1:5Zoc/QRtKVWzQhOtBMvqHzDpF6irO9z98xDceosuGiQ=
golang.org/x/time v0.0.0-20201208040808-7e3f01d25324 h1:Hir2P/De0WpUhtrKGGjvSb2YxUgyZ7EFOSLIcSSpiwE=
golang.org/x/time v0.0.0-20201208040808-7e3f01d25324/go.mod h1:tRJNPiyCQ0inRvYxbN9jk5I+vvW/OXSQhTDSoE431IQ=
@@ -188,6 +188,7 @@ golang.org/x/tools v0.0.0-20201218024724-ae774e9781d2/go.mod h1:emZCQorbCU4vsT4f
golang.org/x/xerrors v0.0.0-20190717185122-a985d3407aa7/go.mod h1:I/5z698sn9Ka8TeJc9MKroUUfqBBauWjQqLJ2OPfmY0=
golang.org/x/xerrors v0.0.0-20191011141410-1b5146add898/go.mod h1:I/5z698sn9Ka8TeJc9MKroUUfqBBauWjQqLJ2OPfmY0=
golang.org/x/xerrors v0.0.0-20191204190536-9bdfabe68543/go.mod h1:I/5z698sn9Ka8TeJc9MKroUUfqBBauWjQqLJ2OPfmY0=
+golang.org/x/xerrors v0.0.0-20200804184101-5ec99f83aff1 h1:go1bK/D/BFZV2I8cIQd1NKEZ+0owSTG1fDTci4IqFcE=
golang.org/x/xerrors v0.0.0-20200804184101-5ec99f83aff1/go.mod h1:I/5z698sn9Ka8TeJc9MKroUUfqBBauWjQqLJ2OPfmY0=
google.golang.org/appengine v1.1.0/go.mod h1:EbEs0AVv82hx2wNQdGPgUI5lhzA/G0D9YwlJXL52JkM=
google.golang.org/appengine v1.4.0/go.mod h1:xpcJRLb0r/rnEns0DIKYYv+WjYCduHsrkT7/EB5XEv4=
@@ -207,8 +208,11 @@ google.golang.org/protobuf v1.23.0/go.mod h1:EGpADcykh3NcUnDUJcl1+ZksZNG86OlYog2
google.golang.org/protobuf v1.23.1-0.20200526195155-81db48ad09cc/go.mod h1:EGpADcykh3NcUnDUJcl1+ZksZNG86OlYog2l/sGQquU=
google.golang.org/protobuf v1.25.0 h1:Ejskq+SyPohKW+1uil0JJMtmHCgJPJ/qWTxr8qp+R4c=
google.golang.org/protobuf v1.25.0/go.mod h1:9JNX74DMeImyA3h4bdi1ymwjUzf21/xIlbajtzgsN7c=
+gopkg.in/check.v1 v0.0.0-20161208181325-20d25e280405 h1:yhCVgyC4o1eVCa2tZl7eS0r+SDo693bJlVdllGtEeKM=
gopkg.in/check.v1 v0.0.0-20161208181325-20d25e280405/go.mod h1:Co6ibVJAznAaIkqp8huTwlJQCZ016jof/cbN4VW5Yz0=
+gopkg.in/fsnotify.v1 v1.4.7 h1:xOHLXZwVvI9hhs+cLKq5+I5onOuwQLhQwiu63xxlHs4=
gopkg.in/fsnotify.v1 v1.4.7/go.mod h1:Tz8NjZHkW78fSQdbUxIjBTcgA1z1m8ZHf0WmKUhAMys=
+gopkg.in/tomb.v1 v1.0.0-20141024135613-dd632973f1e7 h1:uRGJdciOHaEIrze2W8Q3AKkepLTh2hOroT7a+7czfdQ=
gopkg.in/tomb.v1 v1.0.0-20141024135613-dd632973f1e7/go.mod h1:dt/ZhP58zS4L8KSrWDmTeBkI65Dw0HsyUHuEVlX15mw=
gopkg.in/yaml.v2 v2.2.1/go.mod h1:hI93XBmqTisBFMUTm0b8Fm+jr3Dg1NNxqwp+5A1VGuI=
gopkg.in/yaml.v2 v2.2.2/go.mod h1:hI93XBmqTisBFMUTm0b8Fm+jr3Dg1NNxqwp+5A1VGuI=
diff --git a/main.go b/main.go
index 2bb8d63..a36cf41 100644
--- a/main.go
+++ b/main.go
@@ -27,7 +27,6 @@ import (
"github.com/Mrs4s/MiraiGo/client"
"github.com/Mrs4s/go-cqhttp/coolq"
"github.com/Mrs4s/go-cqhttp/global"
- "github.com/getlantern/go-update"
jsoniter "github.com/json-iterator/go"
rotatelogs "github.com/lestrrat-go/file-rotatelogs"
"github.com/rifflock/lfshook"
@@ -436,7 +435,7 @@ func selfUpdate(imageUrl string) {
return
}
wc := global.WriteCounter{}
- err, _ = update.New().FromStream(io.TeeReader(resp.Body, &wc))
+ err, _ = global.UpdateFromStream(io.TeeReader(resp.Body, &wc))
fmt.Println()
if err != nil {
log.Error("更新失败!")
From 6c89921a871ec67923ed27e214fc0ab45dacada0 Mon Sep 17 00:00:00 2001
From: wdvxdr
Date: Fri, 1 Jan 2021 19:41:58 +0800
Subject: [PATCH 262/367] tidy
---
global/fs.go | 2 +-
go.mod | 4 ----
go.sum | 24 ------------------------
main.go | 2 ++
4 files changed, 3 insertions(+), 29 deletions(-)
diff --git a/global/fs.go b/global/fs.go
index f4222c0..fe6fbea 100644
--- a/global/fs.go
+++ b/global/fs.go
@@ -227,4 +227,4 @@ func UpdateFromStream(updateWith io.Reader) (err error, errRecover error) {
_ = os.Remove(oldPath)
}
return
-}
\ No newline at end of file
+}
diff --git a/go.mod b/go.mod
index 29bc994..492af98 100644
--- a/go.mod
+++ b/go.mod
@@ -5,14 +5,11 @@ go 1.15
require (
github.com/Mrs4s/MiraiGo v0.0.0-20201231081106-eaa543ae8683
github.com/dustin/go-humanize v1.0.0
- github.com/fastly/go-utils v0.0.0-20180712184237-d95a45783239 // indirect
github.com/gin-contrib/pprof v1.3.0
github.com/gin-gonic/gin v1.6.3
github.com/gorilla/websocket v1.4.2
github.com/guonaihong/gout v0.1.4
github.com/hjson/hjson-go v3.1.0+incompatible
- github.com/jehiah/go-strftime v0.0.0-20171201141054-1d33003b3869 // indirect
- github.com/jonboulle/clockwork v0.2.2 // indirect
github.com/json-iterator/go v1.1.10
github.com/kardianos/osext v0.0.0-20190222173326-2bc1f35cddc0
github.com/lestrrat-go/file-rotatelogs v2.4.0+incompatible
@@ -22,7 +19,6 @@ 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.7
github.com/wdvxdr1123/go-silk v0.0.0-20201210140933-bcdbcb2f1093
github.com/yinghau76/go-ascii-art v0.0.0-20190517192627-e7f465a30189
diff --git a/go.sum b/go.sum
index b446cf1..3d0b549 100644
--- a/go.sum
+++ b/go.sum
@@ -6,15 +6,11 @@ github.com/a8m/syncmap v0.0.0-20200818084611-4bbbd178de97/go.mod h1:f3iF7/3t9i9h
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=
-github.com/davecgh/go-spew v1.1.1 h1:vj9j/u1bqnvCEfJOwUhtlOARqs3+rkHYY13jYWTU97c=
github.com/davecgh/go-spew v1.1.1/go.mod h1:J7Y8YcW2NihsgmVo/mv3lAwl/skON4iLHjSsI+c5H38=
github.com/dustin/go-humanize v1.0.0 h1:VSnTsYCnlFHaM2/igO1h6X3HA71jcobQuxemgkq4zYo=
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 h1:IXs+QLmnXW2CcXuY+8Mzv/fWEsPGWxqefPtCP5CnV9I=
github.com/fsnotify/fsnotify v1.4.7/go.mod h1:jwhsz4b93w/PPRr/qN1Yymfu8t87LnFCMoQvtojpjFo=
github.com/gin-contrib/pprof v1.3.0 h1:G9eK6HnbkSqDZBYbzG4wrjCsA4e+cvYAHUZw6W+W9K0=
github.com/gin-contrib/pprof v1.3.0/go.mod h1:waMjT1H9b179t3CxuG1cV3DHpga6ybizwfBaM5OXaB0=
@@ -24,7 +20,6 @@ github.com/gin-gonic/gin v1.6.0/go.mod h1:75u5sXoLsGZoRN5Sgbi1eraJ4GU3++wFwWzhwv
github.com/gin-gonic/gin v1.6.2/go.mod h1:75u5sXoLsGZoRN5Sgbi1eraJ4GU3++wFwWzhwvtwp4M=
github.com/gin-gonic/gin v1.6.3 h1:ahKqKTFpO5KTPHxWZjEdPScmYaGtLo8Y4DMHoEsnp14=
github.com/gin-gonic/gin v1.6.3/go.mod h1:75u5sXoLsGZoRN5Sgbi1eraJ4GU3++wFwWzhwvtwp4M=
-github.com/go-playground/assert/v2 v2.0.1 h1:MsBgLAaY856+nPRTKrp3/OZK38U/wa0CcBYNjji3q3A=
github.com/go-playground/assert/v2 v2.0.1/go.mod h1:VDjEfimB/XKnb+ZQfWdccd7VUvScMdVu0Titje2rxJ4=
github.com/go-playground/locales v0.13.0 h1:HyWk6mgj5qFqCT5fjGBuRArbVDfE4hi8+e8ceBS/t7Q=
github.com/go-playground/locales v0.13.0/go.mod h1:taPMhCMXrRLJO55olJkUXHZBHCxTMfnGwq/HNwmWNS8=
@@ -51,10 +46,8 @@ github.com/google/go-cmp v0.2.0/go.mod h1:oXzfMopK8JAjlY9xF4vHSVASa0yLyX7SntLO5a
github.com/google/go-cmp v0.3.0/go.mod h1:8QqcDgzrUqlUb/G2PQTWiueGozuR1884gddMywk6iLU=
github.com/google/go-cmp v0.3.1/go.mod h1:8QqcDgzrUqlUb/G2PQTWiueGozuR1884gddMywk6iLU=
github.com/google/go-cmp v0.4.0/go.mod h1:v8dTdLbMG2kIc/vJvl+f65V22dbkXbowE6jgT/gNBxE=
-github.com/google/go-cmp v0.5.0 h1:/QaMHBdZ26BB3SSst0Iwl10Epc+xhTquomWX0oZEB6w=
github.com/google/go-cmp v0.5.0/go.mod h1:v8dTdLbMG2kIc/vJvl+f65V22dbkXbowE6jgT/gNBxE=
github.com/google/gofuzz v1.0.0/go.mod h1:dBl0BpW6vV/+mYPU4Po3pmUjxk6FQPldtuIdl/M65Eg=
-github.com/google/uuid v1.1.1 h1:Gkbcsh/GbpXz7lPftLA3P6TYMwjCLYm83jiFQZF/3gY=
github.com/google/uuid v1.1.1/go.mod h1:TIyPZe4MgqvfeYDBFedMoGGpEw/LqOeaOT+nhxU+yHo=
github.com/gorilla/websocket v1.4.2 h1:+/TMaTYc4QFitKJxsQ7Yye35DkWvkdLcvGKqM+x0Ufc=
github.com/gorilla/websocket v1.4.2/go.mod h1:YR8l580nyteQvAITg2hZ9XVh4b55+EU/adAjf1fMHhE=
@@ -62,12 +55,7 @@ github.com/guonaihong/gout v0.1.4 h1:uBBoyztMX9okC27OQxqhn6bZ0ROkGyvnEIHwtp3TM4g
github.com/guonaihong/gout v0.1.4/go.mod h1:0rFYAYyzbcxEg11eY2qUbffJs7hHRPeugAnlVYSp8Ic=
github.com/hjson/hjson-go v3.1.0+incompatible h1:DY/9yE8ey8Zv22bY+mHV1uk2yRy0h8tKhZ77hEdi0Aw=
github.com/hjson/hjson-go v3.1.0+incompatible/go.mod h1:qsetwF8NlsTsOTwZTApNlTCerV+b2GjYRRcIk4JMFio=
-github.com/hpcloud/tail v1.0.0 h1:nfCOvKYfkgYP8hkirhJocXT2+zOD8yUNjXaWfTlyFKI=
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.9/go.mod h1:KdQUCv79m/52Kvf8AW2vK1V8akMuk1QjK/uOdHXbAo4=
github.com/json-iterator/go v1.1.10 h1:Kz6Cvnvv2wGdaG/V8yMvfkmNiXq9Ya2KUv4rouJJr68=
github.com/json-iterator/go v1.1.10/go.mod h1:KdQUCv79m/52Kvf8AW2vK1V8akMuk1QjK/uOdHXbAo4=
@@ -76,7 +64,6 @@ github.com/kardianos/osext v0.0.0-20190222173326-2bc1f35cddc0/go.mod h1:1NbS8ALr
github.com/konsorten/go-windows-terminal-sequences v1.0.1/go.mod h1:T0+1ngSBFLxvqU3pZ+m/2kptfBszLMUkC4ZK/EgS/cQ=
github.com/leodido/go-urn v1.2.0 h1:hpXL4XnriNwQ/ABnpepYM/1vCLWNDfUNts8dX3xTG6Y=
github.com/leodido/go-urn v1.2.0/go.mod h1:+8+nEpDfqqsY+g338gtMEUOtuK+4dEMhiQEgxpxOKII=
-github.com/lestrrat-go/envload v0.0.0-20180220234015-a3eb8ddeffcc h1:RKf14vYWi2ttpEmkA4aQ3j4u9dStX2t4M8UM6qqNsG8=
github.com/lestrrat-go/envload v0.0.0-20180220234015-a3eb8ddeffcc/go.mod h1:kopuH9ugFRkIXf3YoqHKyrJ9YfUFsckUU9S7B+XP+is=
github.com/lestrrat-go/file-rotatelogs v2.4.0+incompatible h1:Y6sqxHMyB1D2YSzWkLibYKgg+SwmyFU9dF2hn6MdTj4=
github.com/lestrrat-go/file-rotatelogs v2.4.0+incompatible/go.mod h1:ZQnN8lSECaebrkQytbHj4xNgtg8CR7RYXnPok8e0EHA=
@@ -91,14 +78,11 @@ github.com/modern-go/reflect2 v0.0.0-20180701023420-4b7aa43c6742/go.mod h1:bx2lN
github.com/nfnt/resize v0.0.0-20180221191011-83c6a9932646 h1:zYyBkD/k9seD2A7fsi6Oo2LfFZAehjjQMERAvZLEDnQ=
github.com/nfnt/resize v0.0.0-20180221191011-83c6a9932646/go.mod h1:jpp1/29i3P1S/RLdc7JQKbRpFeM1dOBd8T9ki5s+AY8=
github.com/onsi/ginkgo v1.6.0/go.mod h1:lLunBs/Ym6LB5Z9jYTR76FiuTmxDTDusOGeTQH+WWjE=
-github.com/onsi/ginkgo v1.7.0 h1:WSHQ+IS43OoUrWtD1/bbclrwK8TTH5hzp+umCiuxHgs=
github.com/onsi/ginkgo v1.7.0/go.mod h1:lLunBs/Ym6LB5Z9jYTR76FiuTmxDTDusOGeTQH+WWjE=
-github.com/onsi/gomega v1.4.3 h1:RE1xgDvH7imwFD45h+u2SgIfERHlS2yNG4DObb5BSKU=
github.com/onsi/gomega v1.4.3/go.mod h1:ex+gbHU/CVuBBDIJjb2X0qEXbFg53c61hWP/1CpauHY=
github.com/pkg/errors v0.8.1/go.mod h1:bwawxfHBFNV+L2hUp1rHADufV3IMtnDRdf1r5NINEl0=
github.com/pkg/errors v0.9.1 h1:FEBLx1zS214owpjy7qsBeixbURkuhQAwrK5UwLGTwt4=
github.com/pkg/errors v0.9.1/go.mod h1:bwawxfHBFNV+L2hUp1rHADufV3IMtnDRdf1r5NINEl0=
-github.com/pmezard/go-difflib v1.0.0 h1:4DBwDE0NGyQoBHbLQYPwSUPoCMWR5BEzIk/f1lZbAQM=
github.com/pmezard/go-difflib v1.0.0/go.mod h1:iKH77koFhYxTK1pcRnkKkqfTogsbg7gZNVY4sRDYZ/4=
github.com/prometheus/client_model v0.0.0-20190812154241-14fe0d1b01d4/go.mod h1:xMI15A0UPsDsEKsMN9yxemIoYk6Tm2C1GtYGdfGttqA=
github.com/rifflock/lfshook v0.0.0-20180920164130-b9218ef580f5 h1:mZHayPoR0lNmnHyvtYjDeq0zlVHn9K/ZXoy17ylucdo=
@@ -110,14 +94,11 @@ github.com/stretchr/objx v0.1.0/go.mod h1:HFkY916IF+rwdDfMAkV7OtwuqBVzrE8GR6GFx+
github.com/stretchr/objx v0.1.1/go.mod h1:HFkY916IF+rwdDfMAkV7OtwuqBVzrE8GR6GFx+wExME=
github.com/stretchr/testify v1.2.2/go.mod h1:a8OnRcib4nhh0OaRAV+Yts87kKdq0PP7pXfy6kDkUVs=
github.com/stretchr/testify v1.3.0/go.mod h1:M5WIy9Dh21IEIfnGCwXGc5bZfKNJtfHm1UVUgZn+9EI=
-github.com/stretchr/testify v1.4.0 h1:2E4SXV/wtOkTonXsotYi4li6zVWxYlZuYNCXe9XRJyk=
github.com/stretchr/testify v1.4.0/go.mod h1:j7eGeouHqKxXV5pUuKE4zz7dFj8WfuZ+81PSLYec5m4=
github.com/syndtr/goleveldb v1.0.0 h1:fBdIW9lB4Iz0n9khmH8w27SJ3QEJ7+IgjPEwGSZiFdE=
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.3/go.mod h1:BaHyNc5bjzYkPqgLq7mdVzeiRtULKULXLgZFKsxEHI0=
github.com/tidwall/gjson v1.6.7 h1:Mb1M9HZCRWEcXQ8ieJo7auYyyiSux6w9XN3AdTpxJrE=
github.com/tidwall/gjson v1.6.7/go.mod h1:zeFuBCIqD4sN/gmqBzZ4j7Jd6UcA2Fc56x7QFsv+8fI=
@@ -173,7 +154,6 @@ golang.org/x/term v0.0.0-20201117132131-f5c789dd3221 h1:/ZHdbVpdR/jk3g30/d4yUL0J
golang.org/x/term v0.0.0-20201117132131-f5c789dd3221/go.mod h1:Nr5EML6q2oocZ2LXRh80K7BxOlk5/8JxuGnuhpl+muw=
golang.org/x/text v0.3.0/go.mod h1:NqM8EUOU14njkJ3fqMW+pc6Ldnwhi/IjpwHt7yyuwOQ=
golang.org/x/text v0.3.2/go.mod h1:bEr9sfX3Q8Zfm5fL9x+3itogRgK3+ptLWKqgva+5dAk=
-golang.org/x/text v0.3.3 h1:cokOdA+Jmi5PJGXLlLllQSgYigAEfHXJAERHVMaCc2k=
golang.org/x/text v0.3.3/go.mod h1:5Zoc/QRtKVWzQhOtBMvqHzDpF6irO9z98xDceosuGiQ=
golang.org/x/time v0.0.0-20201208040808-7e3f01d25324 h1:Hir2P/De0WpUhtrKGGjvSb2YxUgyZ7EFOSLIcSSpiwE=
golang.org/x/time v0.0.0-20201208040808-7e3f01d25324/go.mod h1:tRJNPiyCQ0inRvYxbN9jk5I+vvW/OXSQhTDSoE431IQ=
@@ -188,7 +168,6 @@ golang.org/x/tools v0.0.0-20201218024724-ae774e9781d2/go.mod h1:emZCQorbCU4vsT4f
golang.org/x/xerrors v0.0.0-20190717185122-a985d3407aa7/go.mod h1:I/5z698sn9Ka8TeJc9MKroUUfqBBauWjQqLJ2OPfmY0=
golang.org/x/xerrors v0.0.0-20191011141410-1b5146add898/go.mod h1:I/5z698sn9Ka8TeJc9MKroUUfqBBauWjQqLJ2OPfmY0=
golang.org/x/xerrors v0.0.0-20191204190536-9bdfabe68543/go.mod h1:I/5z698sn9Ka8TeJc9MKroUUfqBBauWjQqLJ2OPfmY0=
-golang.org/x/xerrors v0.0.0-20200804184101-5ec99f83aff1 h1:go1bK/D/BFZV2I8cIQd1NKEZ+0owSTG1fDTci4IqFcE=
golang.org/x/xerrors v0.0.0-20200804184101-5ec99f83aff1/go.mod h1:I/5z698sn9Ka8TeJc9MKroUUfqBBauWjQqLJ2OPfmY0=
google.golang.org/appengine v1.1.0/go.mod h1:EbEs0AVv82hx2wNQdGPgUI5lhzA/G0D9YwlJXL52JkM=
google.golang.org/appengine v1.4.0/go.mod h1:xpcJRLb0r/rnEns0DIKYYv+WjYCduHsrkT7/EB5XEv4=
@@ -208,11 +187,8 @@ google.golang.org/protobuf v1.23.0/go.mod h1:EGpADcykh3NcUnDUJcl1+ZksZNG86OlYog2
google.golang.org/protobuf v1.23.1-0.20200526195155-81db48ad09cc/go.mod h1:EGpADcykh3NcUnDUJcl1+ZksZNG86OlYog2l/sGQquU=
google.golang.org/protobuf v1.25.0 h1:Ejskq+SyPohKW+1uil0JJMtmHCgJPJ/qWTxr8qp+R4c=
google.golang.org/protobuf v1.25.0/go.mod h1:9JNX74DMeImyA3h4bdi1ymwjUzf21/xIlbajtzgsN7c=
-gopkg.in/check.v1 v0.0.0-20161208181325-20d25e280405 h1:yhCVgyC4o1eVCa2tZl7eS0r+SDo693bJlVdllGtEeKM=
gopkg.in/check.v1 v0.0.0-20161208181325-20d25e280405/go.mod h1:Co6ibVJAznAaIkqp8huTwlJQCZ016jof/cbN4VW5Yz0=
-gopkg.in/fsnotify.v1 v1.4.7 h1:xOHLXZwVvI9hhs+cLKq5+I5onOuwQLhQwiu63xxlHs4=
gopkg.in/fsnotify.v1 v1.4.7/go.mod h1:Tz8NjZHkW78fSQdbUxIjBTcgA1z1m8ZHf0WmKUhAMys=
-gopkg.in/tomb.v1 v1.0.0-20141024135613-dd632973f1e7 h1:uRGJdciOHaEIrze2W8Q3AKkepLTh2hOroT7a+7czfdQ=
gopkg.in/tomb.v1 v1.0.0-20141024135613-dd632973f1e7/go.mod h1:dt/ZhP58zS4L8KSrWDmTeBkI65Dw0HsyUHuEVlX15mw=
gopkg.in/yaml.v2 v2.2.1/go.mod h1:hI93XBmqTisBFMUTm0b8Fm+jr3Dg1NNxqwp+5A1VGuI=
gopkg.in/yaml.v2 v2.2.2/go.mod h1:hI93XBmqTisBFMUTm0b8Fm+jr3Dg1NNxqwp+5A1VGuI=
diff --git a/main.go b/main.go
index a36cf41..a525964 100644
--- a/main.go
+++ b/main.go
@@ -449,6 +449,8 @@ func selfUpdate(imageUrl string) {
} else {
log.Warn("已取消更新!")
}
+ } else {
+ log.Info("当前版本已经是最新版本!")
}
log.Info("按 Enter 继续....")
readLine()
From 1de12bdcd2a4d67c0f213b0b8f5f15dd096485c1 Mon Sep 17 00:00:00 2001
From: ishkong
Date: Sun, 3 Jan 2021 00:03:44 +0800
Subject: [PATCH 263/367] Update cqhttp.md
---
docs/cqhttp.md | 42 ++++++++++++++++++++++++++++++++++++++++++
1 file changed, 42 insertions(+)
diff --git a/docs/cqhttp.md b/docs/cqhttp.md
index 0a6a594..7406ec4 100644
--- a/docs/cqhttp.md
+++ b/docs/cqhttp.md
@@ -756,6 +756,48 @@ Type: `tts`
| `remain_at_all_count_for_group` | int16 | 群内所有管理当天剩余@全体成员次数 |
| `remain_at_all_count_for_uin` | int16 | BOT当天剩余@全体成员次数 |
+### 获取VIP信息
+
+终结点:`/_get_vip_info`
+
+**参数**
+
+| 字段名 | 数据类型 | 默认值 | 说明 |
+| ----- | ------- | ----- | --- |
+| `user_id` | int64 | | QQ 号 |
+
+**响应数据**
+
+| 字段 | 类型 | 说明 |
+| ------------------ | ------- | ---------- |
+| `user_id` | int64 | QQ 号 |
+| `nickname` | string | 用户昵称 |
+| `level` | int64 | QQ 等级 |
+| `level_speed` | float64 | 等级加速度 |
+| `vip_level` | string | 会员等级 |
+| `vip_growth_speed` | int64 | 会员成长速度 |
+| `vip_growth_total` | int64 | 会员成长总值 |
+
+### 发送群公告
+
+终结点: `/_send_group_notice`
+
+**参数**
+
+| 字段名 | 数据类型 | 默认值 | 说明 |
+| ---------- | ------- | ----- | ------ |
+| `group_id` | int64 | | 群号 |
+| `content` | string | | 公告内容 |
+
+`该 API 没有响应数据`
+
+### 重载事件过滤器
+
+终结点:`/reload_event_filter`
+
+`该 API 无需参数也没有响应数据`
+
+
## 事件
### 群消息撤回
From e25536fbe5707db0a473f3156946e4a8d93b2f92 Mon Sep 17 00:00:00 2001
From: ishkong
Date: Sun, 3 Jan 2021 00:06:01 +0800
Subject: [PATCH 264/367] Update cqhttp.md
---
docs/cqhttp.md | 5 ++++-
1 file changed, 4 insertions(+), 1 deletion(-)
diff --git a/docs/cqhttp.md b/docs/cqhttp.md
index 7406ec4..c16a88c 100644
--- a/docs/cqhttp.md
+++ b/docs/cqhttp.md
@@ -37,6 +37,9 @@
- [获取群文件资源链接](#获取群文件资源链接)
- [获取状态](#获取状态)
- [获取群子目录文件列表](#设置群名)
+- [获取用户VIP信息](#获取用户VIP信息)
+- [发送群公告](#发送群公告)
+- [重载事件过滤器](#重载事件过滤器)
##### 事件
- [群消息撤回](#群消息撤回)
@@ -756,7 +759,7 @@ Type: `tts`
| `remain_at_all_count_for_group` | int16 | 群内所有管理当天剩余@全体成员次数 |
| `remain_at_all_count_for_uin` | int16 | BOT当天剩余@全体成员次数 |
-### 获取VIP信息
+### 获取用户VIP信息
终结点:`/_get_vip_info`
From 808c275f3d329557fb258c1310fd176b6805ee2a Mon Sep 17 00:00:00 2001
From: Mrs4s <1844812067@qq.com>
Date: Sun, 3 Jan 2021 00:37:19 +0800
Subject: [PATCH 265/367] update MiraiGo.
---
coolq/api.go | 4 ++--
coolq/bot.go | 22 ++++++++++++++--------
coolq/cqcode.go | 38 +++++++++++++++++++++++++++-----------
go.mod | 2 +-
go.sum | 27 +++++++--------------------
5 files changed, 51 insertions(+), 42 deletions(-)
diff --git a/coolq/api.go b/coolq/api.go
index 1652d18..ecfddbc 100644
--- a/coolq/api.go
+++ b/coolq/api.go
@@ -299,8 +299,8 @@ func (bot *CQBot) CQSendGroupForwardMessage(groupId int64, m gjson.Result) MSG {
if uin != 0 && name != "" && len(content) > 0 {
var newElem []message.IMessageElement
for _, elem := range content {
- if img, ok := elem.(*message.ImageElement); ok {
- gm, err := bot.Client.UploadGroupImage(groupId, img.Data)
+ if img, ok := elem.(*LocalImageElement); ok {
+ gm, err := bot.Client.UploadGroupImage(groupId, img.Stream)
if err != nil {
log.Warnf("警告:群 %v 图片上传失败: %v", groupId, err)
continue
diff --git a/coolq/bot.go b/coolq/bot.go
index 49347ed..3e2320b 100644
--- a/coolq/bot.go
+++ b/coolq/bot.go
@@ -5,6 +5,7 @@ import (
"encoding/gob"
"fmt"
"hash/crc32"
+ "io/ioutil"
"path"
"runtime/debug"
"sync"
@@ -120,8 +121,8 @@ func (bot *CQBot) GetMessage(mid int32) MSG {
func (bot *CQBot) SendGroupMessage(groupId int64, m *message.SendingMessage) int32 {
var newElem []message.IMessageElement
for _, elem := range m.Elements {
- if i, ok := elem.(*message.ImageElement); ok {
- gm, err := bot.Client.UploadGroupImage(groupId, i.Data)
+ if i, ok := elem.(*LocalImageElement); ok {
+ gm, err := bot.Client.UploadGroupImage(groupId, i.Stream)
if err != nil {
log.Warnf("警告: 群 %v 消息图片上传失败: %v", groupId, err)
continue
@@ -129,8 +130,8 @@ func (bot *CQBot) SendGroupMessage(groupId int64, m *message.SendingMessage) int
newElem = append(newElem, gm)
continue
}
- if i, ok := elem.(*message.VoiceElement); ok {
- gv, err := bot.Client.UploadGroupPtt(groupId, i.Data)
+ if i, ok := elem.(*LocalVoiceElement); ok {
+ gv, err := bot.Client.UploadGroupPtt(groupId, i.Stream)
if err != nil {
log.Warnf("警告: 群 %v 消息语音上传失败: %v", groupId, err)
continue
@@ -236,8 +237,8 @@ func (bot *CQBot) SendGroupMessage(groupId int64, m *message.SendingMessage) int
func (bot *CQBot) SendPrivateMessage(target int64, m *message.SendingMessage) int32 {
var newElem []message.IMessageElement
for _, elem := range m.Elements {
- if i, ok := elem.(*message.ImageElement); ok {
- fm, err := bot.Client.UploadPrivateImage(target, i.Data)
+ if i, ok := elem.(*LocalImageElement); ok {
+ fm, err := bot.Client.UploadPrivateImage(target, i.Stream)
if err != nil {
log.Warnf("警告: 私聊 %v 消息图片上传失败.", target)
continue
@@ -249,8 +250,13 @@ func (bot *CQBot) SendPrivateMessage(target int64, m *message.SendingMessage) in
bot.Client.SendFriendPoke(i.Target)
return 0
}
- if i, ok := elem.(*message.VoiceElement); ok {
- fv, err := bot.Client.UploadPrivatePtt(target, i.Data)
+ if i, ok := elem.(*LocalVoiceElement); ok {
+ data, err := ioutil.ReadAll(i.Stream)
+ if err != nil {
+ log.Warnf("警告: 好友 %v 消息语音读取失败: %v", target, err)
+ continue
+ }
+ fv, err := bot.Client.UploadPrivatePtt(target, data)
if err != nil {
log.Warnf("警告: 好友 %v 消息语音上传失败: %v", target, err)
continue
diff --git a/coolq/cqcode.go b/coolq/cqcode.go
index 8496e0b..9f5e440 100644
--- a/coolq/cqcode.go
+++ b/coolq/cqcode.go
@@ -8,10 +8,12 @@ import (
xml2 "encoding/xml"
"errors"
"fmt"
+ "io"
"io/ioutil"
"math"
"math/rand"
"net/url"
+ "os"
"path"
"runtime"
"strconv"
@@ -62,6 +64,16 @@ type MiguMusicElement struct {
MusicElement
}
+type LocalImageElement struct {
+ message.ImageElement
+ Stream io.ReadSeeker
+}
+
+type LocalVoiceElement struct {
+ message.VoiceElement
+ Stream io.ReadSeeker
+}
+
func (e *GiftElement) Type() message.ElementType {
return message.At
}
@@ -539,11 +551,11 @@ func (bot *CQBot) ToElement(t string, d map[string]string, group bool) (m interf
if tp != "show" && tp != "flash" {
return img, nil
}
- if i, ok := img.(*message.ImageElement); ok { // 秀图,闪照什么的就直接传了吧
+ if i, ok := img.(*LocalImageElement); ok { // 秀图,闪照什么的就直接传了吧
if group {
- img, err = bot.Client.UploadGroupImage(1, i.Data)
+ img, err = bot.Client.UploadGroupImage(1, i.Stream)
} else {
- img, err = bot.Client.UploadPrivateImage(1, i.Data)
+ img, err = bot.Client.UploadPrivateImage(1, i.Stream)
}
if err != nil {
return nil, err
@@ -827,7 +839,7 @@ func (bot *CQBot) makeImageElem(d map[string]string, group bool) (message.IMessa
if err != nil {
return nil, err
}
- return message.NewImage(b), nil
+ return &LocalImageElement{Stream: bytes.NewReader(b)}, nil
}
if strings.HasPrefix(f, "file") {
fu, err := url.Parse(f)
@@ -837,11 +849,11 @@ func (bot *CQBot) makeImageElem(d map[string]string, group bool) (message.IMessa
if strings.HasPrefix(fu.Path, "/") && runtime.GOOS == `windows` {
fu.Path = fu.Path[1:]
}
- b, err := ioutil.ReadFile(fu.Path)
+ file, err := os.Open(fu.Path)
if err != nil {
return nil, err
}
- return message.NewImage(b), nil
+ return &LocalImageElement{Stream: file}, nil
}
rawPath := path.Join(global.IMAGE_PATH, f)
if !global.PathExists(rawPath) && global.PathExists(path.Join(global.IMAGE_PATH_OLD, f)) {
@@ -854,12 +866,16 @@ func (bot *CQBot) makeImageElem(d map[string]string, group bool) (message.IMessa
return bot.makeImageElem(map[string]string{"file": d["url"]}, group)
}
if global.PathExists(rawPath) {
- b, err := ioutil.ReadFile(rawPath)
+ file, err := os.Open(rawPath)
if err != nil {
return nil, err
}
if path.Ext(rawPath) != ".image" && path.Ext(rawPath) != ".cqimg" {
- return message.NewImage(b), nil
+ return &LocalImageElement{Stream: file}, nil
+ }
+ b, err := ioutil.ReadAll(file)
+ if err != nil {
+ return nil, err
}
if len(b) < 20 {
return nil, errors.New("invalid local file")
@@ -920,9 +936,9 @@ func (bot *CQBot) makeImageElem(d map[string]string, group bool) (message.IMessa
func (bot *CQBot) makeShowPic(elem message.IMessageElement, source string, icon string, minWidth int64, minHeight int64, maxWidth int64, maxHeight int64, group bool) ([]message.IMessageElement, error) {
xml := ""
var suf message.IMessageElement
- if i, ok := elem.(*message.ImageElement); ok {
+ if i, ok := elem.(*LocalImageElement); ok {
if group == false {
- gm, err := bot.Client.UploadPrivateImage(1, i.Data)
+ gm, err := bot.Client.UploadPrivateImage(1, i.Stream)
if err != nil {
log.Warnf("警告: 好友消息 %v 消息图片上传失败: %v", 1, err)
return nil, err
@@ -930,7 +946,7 @@ func (bot *CQBot) makeShowPic(elem message.IMessageElement, source string, icon
suf = gm
xml = fmt.Sprintf(` `, "", gm.Md5, gm.Md5, len(i.Data), "", minWidth, minHeight, maxWidth, maxHeight, source, icon)
} else {
- gm, err := bot.Client.UploadGroupImage(1, i.Data)
+ gm, err := bot.Client.UploadGroupImage(1, i.Stream)
if err != nil {
log.Warnf("警告: 群 %v 消息图片上传失败: %v", 1, err)
return nil, err
diff --git a/go.mod b/go.mod
index 492af98..11f6711 100644
--- a/go.mod
+++ b/go.mod
@@ -3,7 +3,7 @@ module github.com/Mrs4s/go-cqhttp
go 1.15
require (
- github.com/Mrs4s/MiraiGo v0.0.0-20201231081106-eaa543ae8683
+ github.com/Mrs4s/MiraiGo v0.0.0-20210102161828-e1e1c97a56f2
github.com/dustin/go-humanize v1.0.0
github.com/gin-contrib/pprof v1.3.0
github.com/gin-gonic/gin v1.6.3
diff --git a/go.sum b/go.sum
index 3d0b549..d7858b9 100644
--- a/go.sum
+++ b/go.sum
@@ -1,8 +1,9 @@
cloud.google.com/go v0.26.0/go.mod h1:aQUYkXzVsufM+DwF1aE+0xfcU+56JwCaLick0ClmMTw=
github.com/BurntSushi/toml v0.3.1/go.mod h1:xHWCNGjB5oqiDr8zfno3MHue2Ht5sIBksp03qcyfWMU=
-github.com/Mrs4s/MiraiGo v0.0.0-20201231081106-eaa543ae8683 h1:Hh7GPsqvYzfS2sn7oCK5bv1cWGLO/bpLL16w5WBlWv0=
-github.com/Mrs4s/MiraiGo v0.0.0-20201231081106-eaa543ae8683/go.mod h1:7brUNAmygY22+PDCUiVT4MLeyvGHDBjW9f+67DKeHTw=
-github.com/a8m/syncmap v0.0.0-20200818084611-4bbbd178de97/go.mod h1:f3iF7/3t9i9hsYF8DPgT0XeIVyNzevhMCKf2445Q6pE=
+github.com/Mrs4s/MiraiGo v0.0.0-20210102160857-d0a296aab77f h1:Cup2n0Da+Iy9p0Jpgi/KxjvlCHwBZzfY4YB13l4mFLk=
+github.com/Mrs4s/MiraiGo v0.0.0-20210102160857-d0a296aab77f/go.mod h1:HW2e375lCQiRwtuA/LV6ZVTsi7co1TRfBn+L5Ow77Bo=
+github.com/Mrs4s/MiraiGo v0.0.0-20210102161828-e1e1c97a56f2 h1:7tuZag+0XUisdi3HJq5iaSGIJ3Q0doa2leSl1iH3cKs=
+github.com/Mrs4s/MiraiGo v0.0.0-20210102161828-e1e1c97a56f2/go.mod h1:HW2e375lCQiRwtuA/LV6ZVTsi7co1TRfBn+L5Ow77Bo=
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=
@@ -53,6 +54,7 @@ github.com/gorilla/websocket v1.4.2 h1:+/TMaTYc4QFitKJxsQ7Yye35DkWvkdLcvGKqM+x0U
github.com/gorilla/websocket v1.4.2/go.mod h1:YR8l580nyteQvAITg2hZ9XVh4b55+EU/adAjf1fMHhE=
github.com/guonaihong/gout v0.1.4 h1:uBBoyztMX9okC27OQxqhn6bZ0ROkGyvnEIHwtp3TM4g=
github.com/guonaihong/gout v0.1.4/go.mod h1:0rFYAYyzbcxEg11eY2qUbffJs7hHRPeugAnlVYSp8Ic=
+github.com/hjson/hjson-go v0.2.3 h1:KhG7/PSxTibbYOzFso5FoiX2gWePcANaCsvM1WE/bTo=
github.com/hjson/hjson-go v3.1.0+incompatible h1:DY/9yE8ey8Zv22bY+mHV1uk2yRy0h8tKhZ77hEdi0Aw=
github.com/hjson/hjson-go v3.1.0+incompatible/go.mod h1:qsetwF8NlsTsOTwZTApNlTCerV+b2GjYRRcIk4JMFio=
github.com/hpcloud/tail v1.0.0/go.mod h1:ab1qPbhIpdTxEkNHXyeSf5vhxWSCs/tWer42PpOxQnU=
@@ -115,58 +117,43 @@ github.com/wdvxdr1123/go-silk v0.0.0-20201210140933-bcdbcb2f1093 h1:t38EBwI2hFJz
github.com/wdvxdr1123/go-silk v0.0.0-20201210140933-bcdbcb2f1093/go.mod h1:5q9LFlBr+yX/J8Jd/9wHdXwkkjFkNyQIS7kX2Lgx/Zs=
github.com/yinghau76/go-ascii-art v0.0.0-20190517192627-e7f465a30189 h1:4UJw9if55Fu3HOwbfcaQlJ27p3oeJU2JZqoeT3ITJQk=
github.com/yinghau76/go-ascii-art v0.0.0-20190517192627-e7f465a30189/go.mod h1:rIrm5geMiBhPQkdfUm8gDFi/WiHneOp1i9KjmJqc+9I=
-github.com/yuin/goldmark v1.2.1/go.mod h1:3hX8gzYuyVAZsxl0MRgGTJEmQBFcNTphYh9decYSb74=
golang.org/x/crypto v0.0.0-20190308221718-c2843e01d9a2/go.mod h1:djNgcEr1/C05ACkg1iLfiJU5Ep61QUkGW8qpdssI0+w=
-golang.org/x/crypto v0.0.0-20191011191535-87dc89f01550/go.mod h1:yigFU9vqHzYiE8UmvKecakEJjdnWj3jj499lnFckfCI=
-golang.org/x/crypto v0.0.0-20200622213623-75b288015ac9/go.mod h1:LzIPMQfyMNhhGPhUkYOs5KpL4U8rLKemX1yGLhDgUto=
golang.org/x/crypto v0.0.0-20201221181555-eec23a3978ad h1:DN0cp81fZ3njFcrLCytUHRSUkqBjfTo4Tx9RJTWs0EY=
golang.org/x/crypto v0.0.0-20201221181555-eec23a3978ad/go.mod h1:jdWPYTVW3xRLrWPugEBEK3UY2ZEsg3UU495nc5E+M+I=
golang.org/x/exp v0.0.0-20190121172915-509febef88a4/go.mod h1:CJ0aWSM057203Lf6IL+f9T1iT9GByDxfZKAQTCR3kQA=
golang.org/x/lint v0.0.0-20181026193005-c67002cb31c3/go.mod h1:UVdnD1Gm6xHRNCYTkRU2/jEulfH38KcIWyp/GAMgvoE=
golang.org/x/lint v0.0.0-20190227174305-5b3e6a55c961/go.mod h1:wehouNa3lNwaWXcvxsM5YxQ5yQlVC4a0KAMCusXpPoU=
golang.org/x/lint v0.0.0-20190313153728-d0100b6bd8b3/go.mod h1:6SW0HCj/g11FgYtHlgUYUwCkIfeOF89ocIRzGO/8vkc=
-golang.org/x/mod v0.3.0/go.mod h1:s0Qsj1ACt9ePp/hMypM3fl4fZqREWJwdYDEqhRiZZUA=
golang.org/x/net v0.0.0-20180724234803-3673e40ba225/go.mod h1:mL1N/T3taQHkDXs73rZJwtUhF3w3ftmwwsq0BUmARs4=
golang.org/x/net v0.0.0-20180826012351-8a410e7b638d/go.mod h1:mL1N/T3taQHkDXs73rZJwtUhF3w3ftmwwsq0BUmARs4=
golang.org/x/net v0.0.0-20180906233101-161cd47e91fd/go.mod h1:mL1N/T3taQHkDXs73rZJwtUhF3w3ftmwwsq0BUmARs4=
golang.org/x/net v0.0.0-20190213061140-3a22650c66bd/go.mod h1:mL1N/T3taQHkDXs73rZJwtUhF3w3ftmwwsq0BUmARs4=
golang.org/x/net v0.0.0-20190311183353-d8887717615a/go.mod h1:t9HGtf8HONx5eT2rtn7q6eTqICYqUVnKs3thJo3Qplg=
golang.org/x/net v0.0.0-20190404232315-eb5bcb51f2a3/go.mod h1:t9HGtf8HONx5eT2rtn7q6eTqICYqUVnKs3thJo3Qplg=
-golang.org/x/net v0.0.0-20190620200207-3b0461eec859/go.mod h1:z5CRVTTTmAJ677TzLLGU+0bjPO0LkuOLi4/5GtJWs/s=
+golang.org/x/net v0.0.0-20200114155413-6afb5195e5aa h1:F+8P+gmewFQYRk6JoLQLwjBCTu3mcIURZfNkVweuRKA=
golang.org/x/net v0.0.0-20200114155413-6afb5195e5aa/go.mod h1:z5CRVTTTmAJ677TzLLGU+0bjPO0LkuOLi4/5GtJWs/s=
-golang.org/x/net v0.0.0-20201021035429-f5854403a974 h1:IX6qOQeG5uLjB/hjjwjedwfjND0hgjPMMyO1RoIXQNI=
-golang.org/x/net v0.0.0-20201021035429-f5854403a974/go.mod h1:sp8m0HH+o8qH0wwXwYZr8TS3Oi6o0r6Gce1SSxlDquU=
golang.org/x/oauth2 v0.0.0-20180821212333-d2e6202438be/go.mod h1:N/0e6XlmueqKjAGxoOufVs8QHGRruUQn6yWY3a++T0U=
golang.org/x/sync v0.0.0-20180314180146-1d60e4601c6f/go.mod h1:RxMgew5VJxzue5/jJTE5uejpjVlOe/izrB70Jof72aM=
golang.org/x/sync v0.0.0-20181108010431-42b317875d0f/go.mod h1:RxMgew5VJxzue5/jJTE5uejpjVlOe/izrB70Jof72aM=
golang.org/x/sync v0.0.0-20190423024810-112230192c58/go.mod h1:RxMgew5VJxzue5/jJTE5uejpjVlOe/izrB70Jof72aM=
-golang.org/x/sync v0.0.0-20201020160332-67f06af15bc9/go.mod h1:RxMgew5VJxzue5/jJTE5uejpjVlOe/izrB70Jof72aM=
golang.org/x/sys v0.0.0-20180830151530-49385e6e1522/go.mod h1:STP8DvDyc/dI5b8T5hshtkjS+E42TnysNCUPdjciGhY=
golang.org/x/sys v0.0.0-20180909124046-d0be0721c37e/go.mod h1:STP8DvDyc/dI5b8T5hshtkjS+E42TnysNCUPdjciGhY=
golang.org/x/sys v0.0.0-20190215142949-d0b11bdaac8a/go.mod h1:STP8DvDyc/dI5b8T5hshtkjS+E42TnysNCUPdjciGhY=
-golang.org/x/sys v0.0.0-20190412213103-97732733099d/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs=
golang.org/x/sys v0.0.0-20190422165155-953cdadca894/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs=
golang.org/x/sys v0.0.0-20191026070338-33540a1f6037/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs=
+golang.org/x/sys v0.0.0-20200116001909-b77594299b42 h1:vEOn+mP2zCOVzKckCZy6YsCtDblrpj/w7B9nxGNELpg=
golang.org/x/sys v0.0.0-20200116001909-b77594299b42/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs=
-golang.org/x/sys v0.0.0-20200930185726-fdedc70b468f h1:+Nyd8tzPX9R7BWHguqsrbFdRx3WQ/1ib8I44HXV5yTA=
-golang.org/x/sys v0.0.0-20200930185726-fdedc70b468f/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs=
golang.org/x/term v0.0.0-20201117132131-f5c789dd3221 h1:/ZHdbVpdR/jk3g30/d4yUL0JU9kksj8+F/bnQUVLGDM=
golang.org/x/term v0.0.0-20201117132131-f5c789dd3221/go.mod h1:Nr5EML6q2oocZ2LXRh80K7BxOlk5/8JxuGnuhpl+muw=
golang.org/x/text v0.3.0/go.mod h1:NqM8EUOU14njkJ3fqMW+pc6Ldnwhi/IjpwHt7yyuwOQ=
golang.org/x/text v0.3.2/go.mod h1:bEr9sfX3Q8Zfm5fL9x+3itogRgK3+ptLWKqgva+5dAk=
-golang.org/x/text v0.3.3/go.mod h1:5Zoc/QRtKVWzQhOtBMvqHzDpF6irO9z98xDceosuGiQ=
golang.org/x/time v0.0.0-20201208040808-7e3f01d25324 h1:Hir2P/De0WpUhtrKGGjvSb2YxUgyZ7EFOSLIcSSpiwE=
golang.org/x/time v0.0.0-20201208040808-7e3f01d25324/go.mod h1:tRJNPiyCQ0inRvYxbN9jk5I+vvW/OXSQhTDSoE431IQ=
golang.org/x/tools v0.0.0-20180917221912-90fa682c2a6e/go.mod h1:n7NCudcB/nEzxVGmLbDWY5pfWTLqBcC2KZ6jyYvM4mQ=
golang.org/x/tools v0.0.0-20190114222345-bf090417da8b/go.mod h1:n7NCudcB/nEzxVGmLbDWY5pfWTLqBcC2KZ6jyYvM4mQ=
golang.org/x/tools v0.0.0-20190226205152-f727befe758c/go.mod h1:9Yl7xja0Znq3iFh3HoIrodX9oNMXvdceNzlUR8zjMvY=
golang.org/x/tools v0.0.0-20190311212946-11955173bddd/go.mod h1:LCzVGOaR6xXOjkQ3onu1FJEFr0SW1gC7cKk1uF8kGRs=
-golang.org/x/tools v0.0.0-20190501045030-23463209683d/go.mod h1:RgjU9mgBXZiqYHBnxXauZ1Gv1EHHAz9KjViQ78xBX0Q=
golang.org/x/tools v0.0.0-20190524140312-2c0ae7006135/go.mod h1:RgjU9mgBXZiqYHBnxXauZ1Gv1EHHAz9KjViQ78xBX0Q=
-golang.org/x/tools v0.0.0-20191119224855-298f0cb1881e/go.mod h1:b+2E5dAYhXwXZwtnZ6UAqBI28+e2cm9otk0dWdXHAEo=
-golang.org/x/tools v0.0.0-20201218024724-ae774e9781d2/go.mod h1:emZCQorbCU4vsT4fOWvOPXz4eW1wZW4PmDk9uLelYpA=
-golang.org/x/xerrors v0.0.0-20190717185122-a985d3407aa7/go.mod h1:I/5z698sn9Ka8TeJc9MKroUUfqBBauWjQqLJ2OPfmY0=
-golang.org/x/xerrors v0.0.0-20191011141410-1b5146add898/go.mod h1:I/5z698sn9Ka8TeJc9MKroUUfqBBauWjQqLJ2OPfmY0=
golang.org/x/xerrors v0.0.0-20191204190536-9bdfabe68543/go.mod h1:I/5z698sn9Ka8TeJc9MKroUUfqBBauWjQqLJ2OPfmY0=
golang.org/x/xerrors v0.0.0-20200804184101-5ec99f83aff1/go.mod h1:I/5z698sn9Ka8TeJc9MKroUUfqBBauWjQqLJ2OPfmY0=
google.golang.org/appengine v1.1.0/go.mod h1:EbEs0AVv82hx2wNQdGPgUI5lhzA/G0D9YwlJXL52JkM=
From 9c81b8182027b863e60a3964eaa77c59b5413e47 Mon Sep 17 00:00:00 2001
From: wdvxdr
Date: Sun, 3 Jan 2021 11:08:11 +0800
Subject: [PATCH 266/367] fix none msg
---
coolq/cqcode.go | 1 +
1 file changed, 1 insertion(+)
diff --git a/coolq/cqcode.go b/coolq/cqcode.go
index 9f5e440..39ca526 100644
--- a/coolq/cqcode.go
+++ b/coolq/cqcode.go
@@ -104,6 +104,7 @@ func (e *PokeElement) Type() message.ElementType {
}
func ToArrayMessage(e []message.IMessageElement, code int64, raw ...bool) (r []MSG) {
+ r = []MSG{}
ur := false
if len(raw) != 0 {
ur = raw[0]
From 935faa11594bb1d14ec6a4fa911481d743132423 Mon Sep 17 00:00:00 2001
From: =?UTF-8?q?=E3=81=9D=E3=82=89?=
Date: Sun, 3 Jan 2021 22:09:29 +0800
Subject: [PATCH 267/367] fix typo
---
docs/cqhttp.md | 2 +-
1 file changed, 1 insertion(+), 1 deletion(-)
diff --git a/docs/cqhttp.md b/docs/cqhttp.md
index c16a88c..48b71b5 100644
--- a/docs/cqhttp.md
+++ b/docs/cqhttp.md
@@ -723,7 +723,7 @@ Type: `tts`
| `plugins_good` | bool | 原 `CQHTTP` 字段, 恒定为 `true` |
| `app_good` | bool | 原 `CQHTTP` 字段, 恒定为 `true` |
| `online` | bool | 表示BOT是否在线 |
-| `goold` | bool | 同 `online` |
+| `good` | bool | 同 `online` |
| `stat` | Statistics | 运行统计 |
**Statistics**
From d20ff4eeb291d6333dd49e8a8c0779359f760b79 Mon Sep 17 00:00:00 2001
From: Mrs4s <1844812067@qq.com>
Date: Mon, 4 Jan 2021 01:04:11 +0800
Subject: [PATCH 268/367] feature multi-threading download & fix invalid file.
---
coolq/cqcode.go | 26 ++++--
global/net.go | 216 +++++++++++++++++++++++++++++++++++++++++++-----
2 files changed, 217 insertions(+), 25 deletions(-)
diff --git a/coolq/cqcode.go b/coolq/cqcode.go
index 9f5e440..30957e8 100644
--- a/coolq/cqcode.go
+++ b/coolq/cqcode.go
@@ -35,6 +35,8 @@ var paramReg = regexp.MustCompile(`,([\w\-.]+?)=([^,\]]+)`)
var IgnoreInvalidCQCode = false
var SplitUrl = false
+const maxImageSize = 1024 * 1024 * 30 // 30MB
+
type PokeElement struct {
Target int64
}
@@ -816,23 +818,30 @@ func (bot *CQBot) makeImageElem(d map[string]string, group bool) (message.IMessa
f := d["file"]
if strings.HasPrefix(f, "http") || strings.HasPrefix(f, "https") {
cache := d["cache"]
+ c := d["c"]
if cache == "" {
cache = "1"
}
hash := md5.Sum([]byte(f))
cacheFile := path.Join(global.CACHE_PATH, hex.EncodeToString(hash[:])+".cache")
if global.PathExists(cacheFile) && cache == "1" {
- b, err := ioutil.ReadFile(cacheFile)
+ f, err := os.Open(cacheFile)
if err == nil {
- return message.NewImage(b), nil
+ return &LocalImageElement{Stream: f}, nil
}
}
- b, err := global.GetBytes(f)
+ if global.PathExists(cacheFile) {
+ _ = os.Remove(cacheFile)
+ }
+ thread, _ := strconv.Atoi(c)
+ if err := global.DownloadFileMultiThreading(f, cacheFile, maxImageSize, thread); err != nil {
+ return nil, err
+ }
+ f, err := os.Open(cacheFile)
if err != nil {
return nil, err
}
- _ = ioutil.WriteFile(cacheFile, b, 0644)
- return message.NewImage(b), nil
+ return &LocalImageElement{Stream: f}, nil
}
if strings.HasPrefix(f, "base64") {
b, err := base64.StdEncoding.DecodeString(strings.ReplaceAll(f, "base64://", ""))
@@ -849,6 +858,13 @@ func (bot *CQBot) makeImageElem(d map[string]string, group bool) (message.IMessa
if strings.HasPrefix(fu.Path, "/") && runtime.GOOS == `windows` {
fu.Path = fu.Path[1:]
}
+ info, err := os.Stat(fu.Path)
+ if err != nil {
+ return nil, err
+ }
+ if info.Size() == 0 || info.Size() >= maxImageSize {
+ return nil, errors.New("invalid image size")
+ }
file, err := os.Open(fu.Path)
if err != nil {
return nil, err
diff --git a/global/net.go b/global/net.go
index 5f5bc9b..1ce5797 100644
--- a/global/net.go
+++ b/global/net.go
@@ -1,43 +1,53 @@
package global
import (
+ "bufio"
"bytes"
"compress/gzip"
"fmt"
"github.com/guonaihong/gout"
"github.com/pkg/errors"
+ "io"
"io/ioutil"
"net"
"net/http"
"net/url"
+ "os"
+ "strconv"
"strings"
+ "sync"
"time"
"github.com/tidwall/gjson"
)
-var client = &http.Client{
- Timeout: time.Second * 15,
- Transport: &http.Transport{
- Proxy: func(request *http.Request) (u *url.URL, e error) {
- if Proxy == "" {
- return http.ProxyFromEnvironment(request)
- }
- return url.Parse(Proxy)
+var (
+ client = &http.Client{
+ Timeout: time.Second * 30,
+ Transport: &http.Transport{
+ Proxy: func(request *http.Request) (u *url.URL, e error) {
+ if Proxy == "" {
+ return http.ProxyFromEnvironment(request)
+ }
+ return url.Parse(Proxy)
+ },
+ DialContext: (&net.Dialer{
+ Timeout: 30 * time.Second,
+ KeepAlive: 30 * time.Second,
+ }).DialContext,
+ ForceAttemptHTTP2: true,
+ IdleConnTimeout: 90 * time.Second,
+ TLSHandshakeTimeout: 10 * time.Second,
+ ExpectContinueTimeout: 1 * time.Second,
+ MaxConnsPerHost: 0,
+ MaxIdleConns: 0,
+ MaxIdleConnsPerHost: 999,
},
- DialContext: (&net.Dialer{
- Timeout: 30 * time.Second,
- KeepAlive: 30 * time.Second,
- }).DialContext,
- ForceAttemptHTTP2: true,
- MaxIdleConns: 100,
- IdleConnTimeout: 90 * time.Second,
- TLSHandshakeTimeout: 10 * time.Second,
- ExpectContinueTimeout: 1 * time.Second,
- },
-}
+ }
+ Proxy string
-var Proxy string
+ ErrOverSize = errors.New("oversize")
+)
func GetBytes(url string) ([]byte, error) {
req, err := http.NewRequest("GET", url, nil)
@@ -64,6 +74,172 @@ func GetBytes(url string) ([]byte, error) {
return body, nil
}
+func DownloadFile(url, path string, limit int64) error {
+ file, err := os.OpenFile(path, os.O_WRONLY|os.O_CREATE, 0666)
+ if err != nil {
+ return err
+ }
+ defer file.Close()
+ req, err := http.NewRequest("GET", url, nil)
+ if err != nil {
+ return err
+ }
+ resp, err := client.Do(req)
+ if err != nil {
+ return err
+ }
+ defer resp.Body.Close()
+ if limit > 0 && resp.ContentLength > limit {
+ return ErrOverSize
+ }
+ _, err = io.Copy(file, resp.Body)
+ if err != nil {
+ return err
+ }
+ return nil
+}
+
+func DownloadFileMultiThreading(url, path string, limit int64, threadCount int) error {
+ if threadCount < 2 {
+ return DownloadFile(url, path, limit)
+ }
+ type BlockMetaData struct {
+ BeginOffset int64
+ EndOffset int64
+ DownloadedSize int64
+ }
+ var blocks []*BlockMetaData
+ var contentLength int64
+ errUnsupportedMultiThreading := errors.New("unsupported multi-threading")
+ // 初始化分块或直接下载
+ initOrDownload := func() error {
+ copyStream := func(s io.ReadCloser) error {
+ file, err := os.OpenFile(path, os.O_WRONLY|os.O_CREATE, 0666)
+ if err != nil {
+ return err
+ }
+ defer file.Close()
+ if _, err = io.Copy(file, s); err != nil {
+ return err
+ }
+ return errUnsupportedMultiThreading
+ }
+ req, err := http.NewRequest("GET", url, nil)
+ if err != nil {
+ return err
+ }
+ req.Header.Set("range", "bytes=0-")
+ resp, err := client.Do(req)
+ if err != nil {
+ return err
+ }
+ if resp.StatusCode < 200 || resp.StatusCode >= 300 {
+ return errors.New("response status unsuccessful: " + strconv.FormatInt(int64(resp.StatusCode), 10))
+ }
+ if resp.StatusCode == 200 {
+ if limit > 0 && resp.ContentLength > limit {
+ return ErrOverSize
+ }
+ return copyStream(resp.Body)
+ }
+ if resp.StatusCode == 206 {
+ contentLength = resp.ContentLength
+ if limit > 0 && resp.ContentLength > limit {
+ return ErrOverSize
+ }
+ blockSize := func() int64 {
+ if contentLength > 1024*1024 {
+ return (contentLength / int64(threadCount)) - 10
+ } else {
+ return contentLength
+ }
+ }()
+ if blockSize == contentLength {
+ return copyStream(resp.Body)
+ }
+ var tmp int64
+ for tmp+blockSize < contentLength {
+ blocks = append(blocks, &BlockMetaData{
+ BeginOffset: tmp,
+ EndOffset: tmp + blockSize - 1,
+ })
+ tmp += blockSize
+ }
+ blocks = append(blocks, &BlockMetaData{
+ BeginOffset: tmp,
+ EndOffset: contentLength - 1,
+ })
+ return nil
+ }
+ return errors.New("unknown status code.")
+ }
+ // 下载分块
+ downloadBlock := func(block *BlockMetaData) error {
+ req, _ := http.NewRequest("GET", url, nil)
+ file, err := os.OpenFile(path, os.O_WRONLY|os.O_CREATE, 0666)
+ if err != nil {
+ return err
+ }
+ defer file.Close()
+ _, _ = file.Seek(block.BeginOffset, io.SeekStart)
+ writer := bufio.NewWriter(file)
+ defer writer.Flush()
+ req.Header.Set("range", "bytes="+strconv.FormatInt(block.BeginOffset, 10)+"-"+strconv.FormatInt(block.EndOffset, 10))
+ resp, err := client.Do(req)
+ if err != nil {
+ return err
+ }
+ defer resp.Body.Close()
+ if resp.StatusCode < 200 || resp.StatusCode >= 300 {
+ return errors.New("response status unsuccessful: " + strconv.FormatInt(int64(resp.StatusCode), 10))
+ }
+ var buffer = make([]byte, 1024)
+ i, err := resp.Body.Read(buffer)
+ for {
+ if err != nil && err != io.EOF {
+ return err
+ }
+ i64 := int64(len(buffer[:i]))
+ needSize := block.EndOffset + 1 - block.BeginOffset
+ if i64 > needSize {
+ i64 = needSize
+ err = io.EOF
+ }
+ _, e := writer.Write(buffer[:i64])
+ if e != nil {
+ return e
+ }
+ block.BeginOffset += i64
+ block.DownloadedSize += i64
+ if err == io.EOF || block.BeginOffset > block.EndOffset {
+ break
+ }
+ i, err = resp.Body.Read(buffer)
+ }
+ return nil
+ }
+
+ if err := initOrDownload(); err != nil {
+ if err == errUnsupportedMultiThreading {
+ return nil
+ }
+ return err
+ }
+ wg := sync.WaitGroup{}
+ wg.Add(len(blocks))
+ var lastErr error
+ for i := range blocks {
+ go func(b *BlockMetaData) {
+ defer wg.Done()
+ if err := downloadBlock(b); err != nil {
+ lastErr = err
+ }
+ }(blocks[i])
+ }
+ wg.Wait()
+ return lastErr
+}
+
func GetSliderTicket(raw, id string) (string, error) {
var rsp string
if err := gout.POST("https://api.shkong.com/gocqhttpapi/task").SetJSON(gout.H{
From b8916d257090f5d203a697d2b234d7384dec4914 Mon Sep 17 00:00:00 2001
From: Mrs4s
Date: Mon, 4 Jan 2021 19:56:43 +0800
Subject: [PATCH 269/367] fix message type.
---
coolq/api.go | 6 ++++++
1 file changed, 6 insertions(+)
diff --git a/coolq/api.go b/coolq/api.go
index ecfddbc..e3b20d4 100644
--- a/coolq/api.go
+++ b/coolq/api.go
@@ -776,6 +776,12 @@ func (bot *CQBot) CQGetMessage(messageId int32) MSG {
"real_id": msg["message-id"],
"group": isGroup,
"group_id": gid,
+ "message_type": func() string {
+ if isGroup {
+ return "group"
+ }
+ return "private"
+ }(),
"sender": MSG{
"user_id": sender.Uin,
"nickname": sender.Nickname,
From 773952d6d6bd3b653aa3a496da7efef3325715bc Mon Sep 17 00:00:00 2001
From: Mrs4s
Date: Tue, 5 Jan 2021 00:53:24 +0800
Subject: [PATCH 270/367] update MiraiGo.
---
coolq/bot.go | 24 ++++++++++++++++++++++--
coolq/cqcode.go | 22 ++++++----------------
go.mod | 2 +-
go.sum | 7 ++-----
4 files changed, 31 insertions(+), 24 deletions(-)
diff --git a/coolq/bot.go b/coolq/bot.go
index 3e2320b..03c4a65 100644
--- a/coolq/bot.go
+++ b/coolq/bot.go
@@ -6,6 +6,7 @@ import (
"fmt"
"hash/crc32"
"io/ioutil"
+ "os"
"path"
"runtime/debug"
"sync"
@@ -118,11 +119,30 @@ func (bot *CQBot) GetMessage(mid int32) MSG {
return nil
}
+func (bot *CQBot) UploadLocalImageAsGroup(groupCode int64, img *LocalImageElement) (*message.GroupImageElement, error) {
+ if img.Stream != nil {
+ return bot.Client.UploadGroupImage(groupCode, img.Stream)
+ }
+ return bot.Client.UploadGroupImageByFile(groupCode, img.File)
+}
+
+func (bot *CQBot) UploadLocalImageAsPrivate(userId int64, img *LocalImageElement) (*message.FriendImageElement, error) {
+ if img.Stream != nil {
+ return bot.Client.UploadPrivateImage(userId, img.Stream)
+ }
+ // need update.
+ f, err := os.Open(img.File)
+ if err != nil {
+ return nil, err
+ }
+ return bot.Client.UploadPrivateImage(userId, f)
+}
+
func (bot *CQBot) SendGroupMessage(groupId int64, m *message.SendingMessage) int32 {
var newElem []message.IMessageElement
for _, elem := range m.Elements {
if i, ok := elem.(*LocalImageElement); ok {
- gm, err := bot.Client.UploadGroupImage(groupId, i.Stream)
+ gm, err := bot.UploadLocalImageAsGroup(groupId, i)
if err != nil {
log.Warnf("警告: 群 %v 消息图片上传失败: %v", groupId, err)
continue
@@ -238,7 +258,7 @@ func (bot *CQBot) SendPrivateMessage(target int64, m *message.SendingMessage) in
var newElem []message.IMessageElement
for _, elem := range m.Elements {
if i, ok := elem.(*LocalImageElement); ok {
- fm, err := bot.Client.UploadPrivateImage(target, i.Stream)
+ fm, err := bot.UploadLocalImageAsPrivate(target, i)
if err != nil {
log.Warnf("警告: 私聊 %v 消息图片上传失败.", target)
continue
diff --git a/coolq/cqcode.go b/coolq/cqcode.go
index f7edd6d..ef2dd93 100644
--- a/coolq/cqcode.go
+++ b/coolq/cqcode.go
@@ -69,6 +69,7 @@ type MiguMusicElement struct {
type LocalImageElement struct {
message.ImageElement
Stream io.ReadSeeker
+ File string
}
type LocalVoiceElement struct {
@@ -556,9 +557,9 @@ func (bot *CQBot) ToElement(t string, d map[string]string, group bool) (m interf
}
if i, ok := img.(*LocalImageElement); ok { // 秀图,闪照什么的就直接传了吧
if group {
- img, err = bot.Client.UploadGroupImage(1, i.Stream)
+ img, err = bot.UploadLocalImageAsGroup(1, i)
} else {
- img, err = bot.Client.UploadPrivateImage(1, i.Stream)
+ img, err = bot.UploadLocalImageAsPrivate(1, i)
}
if err != nil {
return nil, err
@@ -826,10 +827,7 @@ func (bot *CQBot) makeImageElem(d map[string]string, group bool) (message.IMessa
hash := md5.Sum([]byte(f))
cacheFile := path.Join(global.CACHE_PATH, hex.EncodeToString(hash[:])+".cache")
if global.PathExists(cacheFile) && cache == "1" {
- f, err := os.Open(cacheFile)
- if err == nil {
- return &LocalImageElement{Stream: f}, nil
- }
+ return &LocalImageElement{File: cacheFile}, nil
}
if global.PathExists(cacheFile) {
_ = os.Remove(cacheFile)
@@ -838,11 +836,7 @@ func (bot *CQBot) makeImageElem(d map[string]string, group bool) (message.IMessa
if err := global.DownloadFileMultiThreading(f, cacheFile, maxImageSize, thread); err != nil {
return nil, err
}
- f, err := os.Open(cacheFile)
- if err != nil {
- return nil, err
- }
- return &LocalImageElement{Stream: f}, nil
+ return &LocalImageElement{File: cacheFile}, nil
}
if strings.HasPrefix(f, "base64") {
b, err := base64.StdEncoding.DecodeString(strings.ReplaceAll(f, "base64://", ""))
@@ -866,11 +860,7 @@ func (bot *CQBot) makeImageElem(d map[string]string, group bool) (message.IMessa
if info.Size() == 0 || info.Size() >= maxImageSize {
return nil, errors.New("invalid image size")
}
- file, err := os.Open(fu.Path)
- if err != nil {
- return nil, err
- }
- return &LocalImageElement{Stream: file}, nil
+ return &LocalImageElement{File: fu.Path}, nil
}
rawPath := path.Join(global.IMAGE_PATH, f)
if !global.PathExists(rawPath) && global.PathExists(path.Join(global.IMAGE_PATH_OLD, f)) {
diff --git a/go.mod b/go.mod
index 11f6711..a946c3a 100644
--- a/go.mod
+++ b/go.mod
@@ -3,7 +3,7 @@ module github.com/Mrs4s/go-cqhttp
go 1.15
require (
- github.com/Mrs4s/MiraiGo v0.0.0-20210102161828-e1e1c97a56f2
+ github.com/Mrs4s/MiraiGo v0.0.0-20210104164708-e94ea61cc8e9
github.com/dustin/go-humanize v1.0.0
github.com/gin-contrib/pprof v1.3.0
github.com/gin-gonic/gin v1.6.3
diff --git a/go.sum b/go.sum
index d7858b9..e29cb06 100644
--- a/go.sum
+++ b/go.sum
@@ -1,9 +1,7 @@
cloud.google.com/go v0.26.0/go.mod h1:aQUYkXzVsufM+DwF1aE+0xfcU+56JwCaLick0ClmMTw=
github.com/BurntSushi/toml v0.3.1/go.mod h1:xHWCNGjB5oqiDr8zfno3MHue2Ht5sIBksp03qcyfWMU=
-github.com/Mrs4s/MiraiGo v0.0.0-20210102160857-d0a296aab77f h1:Cup2n0Da+Iy9p0Jpgi/KxjvlCHwBZzfY4YB13l4mFLk=
-github.com/Mrs4s/MiraiGo v0.0.0-20210102160857-d0a296aab77f/go.mod h1:HW2e375lCQiRwtuA/LV6ZVTsi7co1TRfBn+L5Ow77Bo=
-github.com/Mrs4s/MiraiGo v0.0.0-20210102161828-e1e1c97a56f2 h1:7tuZag+0XUisdi3HJq5iaSGIJ3Q0doa2leSl1iH3cKs=
-github.com/Mrs4s/MiraiGo v0.0.0-20210102161828-e1e1c97a56f2/go.mod h1:HW2e375lCQiRwtuA/LV6ZVTsi7co1TRfBn+L5Ow77Bo=
+github.com/Mrs4s/MiraiGo v0.0.0-20210104164708-e94ea61cc8e9 h1:jzaBgDPLKRuJxQO9UT/2vCFL0ScCO9IThRCa7ViMbGE=
+github.com/Mrs4s/MiraiGo v0.0.0-20210104164708-e94ea61cc8e9/go.mod h1:HW2e375lCQiRwtuA/LV6ZVTsi7co1TRfBn+L5Ow77Bo=
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=
@@ -54,7 +52,6 @@ github.com/gorilla/websocket v1.4.2 h1:+/TMaTYc4QFitKJxsQ7Yye35DkWvkdLcvGKqM+x0U
github.com/gorilla/websocket v1.4.2/go.mod h1:YR8l580nyteQvAITg2hZ9XVh4b55+EU/adAjf1fMHhE=
github.com/guonaihong/gout v0.1.4 h1:uBBoyztMX9okC27OQxqhn6bZ0ROkGyvnEIHwtp3TM4g=
github.com/guonaihong/gout v0.1.4/go.mod h1:0rFYAYyzbcxEg11eY2qUbffJs7hHRPeugAnlVYSp8Ic=
-github.com/hjson/hjson-go v0.2.3 h1:KhG7/PSxTibbYOzFso5FoiX2gWePcANaCsvM1WE/bTo=
github.com/hjson/hjson-go v3.1.0+incompatible h1:DY/9yE8ey8Zv22bY+mHV1uk2yRy0h8tKhZ77hEdi0Aw=
github.com/hjson/hjson-go v3.1.0+incompatible/go.mod h1:qsetwF8NlsTsOTwZTApNlTCerV+b2GjYRRcIk4JMFio=
github.com/hpcloud/tail v1.0.0/go.mod h1:ab1qPbhIpdTxEkNHXyeSf5vhxWSCs/tWer42PpOxQnU=
From a02219a64fd182ab1b70d185c7e24c12c14dcf54 Mon Sep 17 00:00:00 2001
From: Mrs4s
Date: Tue, 5 Jan 2021 00:57:14 +0800
Subject: [PATCH 271/367] fix typo.
---
server/http.go | 3 ++-
1 file changed, 2 insertions(+), 1 deletion(-)
diff --git a/server/http.go b/server/http.go
index fd9fadb..80aaf32 100644
--- a/server/http.go
+++ b/server/http.go
@@ -90,7 +90,8 @@ func (s *httpServer) Run(addr, authToken string, bot *coolq.CQBot) {
}
if err := s.Http.ListenAndServe(); err != nil && err != http.ErrServerClosed {
log.Error(err)
- log.Infof("请检查端口是否被占用.")
+ log.Infof("HTTP 服务启动失败, 请检查端口是否被占用.")
+ log.Warnf("将在五秒后退出.")
time.Sleep(time.Second * 5)
os.Exit(1)
}
From 9573ce1f16e15da4954fc45252e16f5ec73a73ce Mon Sep 17 00:00:00 2001
From: Mrs4s
Date: Tue, 5 Jan 2021 01:21:12 +0800
Subject: [PATCH 272/367] update MiraiGo.
---
go.mod | 2 +-
go.sum | 2 ++
2 files changed, 3 insertions(+), 1 deletion(-)
diff --git a/go.mod b/go.mod
index a946c3a..f32f52d 100644
--- a/go.mod
+++ b/go.mod
@@ -3,7 +3,7 @@ module github.com/Mrs4s/go-cqhttp
go 1.15
require (
- github.com/Mrs4s/MiraiGo v0.0.0-20210104164708-e94ea61cc8e9
+ github.com/Mrs4s/MiraiGo v0.0.0-20210104171920-510924ba979c
github.com/dustin/go-humanize v1.0.0
github.com/gin-contrib/pprof v1.3.0
github.com/gin-gonic/gin v1.6.3
diff --git a/go.sum b/go.sum
index e29cb06..1a68549 100644
--- a/go.sum
+++ b/go.sum
@@ -2,6 +2,8 @@ cloud.google.com/go v0.26.0/go.mod h1:aQUYkXzVsufM+DwF1aE+0xfcU+56JwCaLick0ClmMT
github.com/BurntSushi/toml v0.3.1/go.mod h1:xHWCNGjB5oqiDr8zfno3MHue2Ht5sIBksp03qcyfWMU=
github.com/Mrs4s/MiraiGo v0.0.0-20210104164708-e94ea61cc8e9 h1:jzaBgDPLKRuJxQO9UT/2vCFL0ScCO9IThRCa7ViMbGE=
github.com/Mrs4s/MiraiGo v0.0.0-20210104164708-e94ea61cc8e9/go.mod h1:HW2e375lCQiRwtuA/LV6ZVTsi7co1TRfBn+L5Ow77Bo=
+github.com/Mrs4s/MiraiGo v0.0.0-20210104171920-510924ba979c h1:0O4TonUV7ZTawM+lwy0pNTYqngpbCrZGtYARGRvMQLw=
+github.com/Mrs4s/MiraiGo v0.0.0-20210104171920-510924ba979c/go.mod h1:HW2e375lCQiRwtuA/LV6ZVTsi7co1TRfBn+L5Ow77Bo=
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=
From 1e56c4f986e4d268ecad84591d819a16ed13cbea Mon Sep 17 00:00:00 2001
From: Mrs4s
Date: Tue, 5 Jan 2021 01:25:29 +0800
Subject: [PATCH 273/367] update doc.
---
docs/cqhttp.md | 1 +
1 file changed, 1 insertion(+)
diff --git a/docs/cqhttp.md b/docs/cqhttp.md
index 48b71b5..ae20d37 100644
--- a/docs/cqhttp.md
+++ b/docs/cqhttp.md
@@ -71,6 +71,7 @@ Type : `image`
| `url` | - | 图片 URL |
| `cache` | `0` `1` | 只在通过网络 URL 发送时有效,表示是否使用已缓存的文件,默认 `1` |
| `id` | - | 发送秀图时的特效id,默认为40000 |
+| `c` | `2` `3` | 通过网络下载图片时的线程数, 默认单线程. (在资源不支持并发时会自动处理)|
可用的特效ID:
From 6113eb9200e6a1035ea82b6084810ef83e24c58f Mon Sep 17 00:00:00 2001
From: Mrs4s
Date: Wed, 6 Jan 2021 02:36:56 +0800
Subject: [PATCH 274/367] update MiraiGo.
---
go.mod | 2 +-
go.sum | 6 ++----
2 files changed, 3 insertions(+), 5 deletions(-)
diff --git a/go.mod b/go.mod
index f32f52d..ea327d8 100644
--- a/go.mod
+++ b/go.mod
@@ -3,7 +3,7 @@ module github.com/Mrs4s/go-cqhttp
go 1.15
require (
- github.com/Mrs4s/MiraiGo v0.0.0-20210104171920-510924ba979c
+ github.com/Mrs4s/MiraiGo v0.0.0-20210105173234-72521dec9b56
github.com/dustin/go-humanize v1.0.0
github.com/gin-contrib/pprof v1.3.0
github.com/gin-gonic/gin v1.6.3
diff --git a/go.sum b/go.sum
index 1a68549..2f1571a 100644
--- a/go.sum
+++ b/go.sum
@@ -1,9 +1,7 @@
cloud.google.com/go v0.26.0/go.mod h1:aQUYkXzVsufM+DwF1aE+0xfcU+56JwCaLick0ClmMTw=
github.com/BurntSushi/toml v0.3.1/go.mod h1:xHWCNGjB5oqiDr8zfno3MHue2Ht5sIBksp03qcyfWMU=
-github.com/Mrs4s/MiraiGo v0.0.0-20210104164708-e94ea61cc8e9 h1:jzaBgDPLKRuJxQO9UT/2vCFL0ScCO9IThRCa7ViMbGE=
-github.com/Mrs4s/MiraiGo v0.0.0-20210104164708-e94ea61cc8e9/go.mod h1:HW2e375lCQiRwtuA/LV6ZVTsi7co1TRfBn+L5Ow77Bo=
-github.com/Mrs4s/MiraiGo v0.0.0-20210104171920-510924ba979c h1:0O4TonUV7ZTawM+lwy0pNTYqngpbCrZGtYARGRvMQLw=
-github.com/Mrs4s/MiraiGo v0.0.0-20210104171920-510924ba979c/go.mod h1:HW2e375lCQiRwtuA/LV6ZVTsi7co1TRfBn+L5Ow77Bo=
+github.com/Mrs4s/MiraiGo v0.0.0-20210105173234-72521dec9b56 h1:U7kObHDk3RfaD81+1hA29gxHf3PfRGpX7dqR2UPNO0c=
+github.com/Mrs4s/MiraiGo v0.0.0-20210105173234-72521dec9b56/go.mod h1:HW2e375lCQiRwtuA/LV6ZVTsi7co1TRfBn+L5Ow77Bo=
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=
From 0e5276ea4d6b71fa9da7431494251eb4c18af727 Mon Sep 17 00:00:00 2001
From: Mrs4s
Date: Wed, 6 Jan 2021 02:38:21 +0800
Subject: [PATCH 275/367] fix ptt.
---
coolq/bot.go | 14 ++++----------
1 file changed, 4 insertions(+), 10 deletions(-)
diff --git a/coolq/bot.go b/coolq/bot.go
index 03c4a65..0fc72fa 100644
--- a/coolq/bot.go
+++ b/coolq/bot.go
@@ -5,7 +5,6 @@ import (
"encoding/gob"
"fmt"
"hash/crc32"
- "io/ioutil"
"os"
"path"
"runtime/debug"
@@ -150,8 +149,8 @@ func (bot *CQBot) SendGroupMessage(groupId int64, m *message.SendingMessage) int
newElem = append(newElem, gm)
continue
}
- if i, ok := elem.(*LocalVoiceElement); ok {
- gv, err := bot.Client.UploadGroupPtt(groupId, i.Stream)
+ if i, ok := elem.(*message.VoiceElement); ok {
+ gv, err := bot.Client.UploadGroupPtt(groupId, bytes.NewReader(i.Data))
if err != nil {
log.Warnf("警告: 群 %v 消息语音上传失败: %v", groupId, err)
continue
@@ -270,13 +269,8 @@ func (bot *CQBot) SendPrivateMessage(target int64, m *message.SendingMessage) in
bot.Client.SendFriendPoke(i.Target)
return 0
}
- if i, ok := elem.(*LocalVoiceElement); ok {
- data, err := ioutil.ReadAll(i.Stream)
- if err != nil {
- log.Warnf("警告: 好友 %v 消息语音读取失败: %v", target, err)
- continue
- }
- fv, err := bot.Client.UploadPrivatePtt(target, data)
+ if i, ok := elem.(*message.VoiceElement); ok {
+ fv, err := bot.Client.UploadPrivatePtt(target, i.Data)
if err != nil {
log.Warnf("警告: 好友 %v 消息语音上传失败: %v", target, err)
continue
From f98c334089e36b9a1296ccf04965c694b2581c86 Mon Sep 17 00:00:00 2001
From: wdvxdr
Date: Wed, 6 Jan 2021 12:46:10 +0800
Subject: [PATCH 276/367] fix reconnect
---
server/apiAdmin.go | 2 ++
1 file changed, 2 insertions(+)
diff --git a/server/apiAdmin.go b/server/apiAdmin.go
index 009ebb8..a24b24d 100644
--- a/server/apiAdmin.go
+++ b/server/apiAdmin.go
@@ -266,6 +266,8 @@ func (s *webServer) Dologin() {
log.Info("アトリは、高性能ですから!")
cli.OnDisconnected(func(bot *client.QQClient, e *client.ClientDisconnectedEvent) {
if conf.ReLogin.Enabled {
+ conf.ReLogin.Enabled = false
+ defer func() { conf.ReLogin.Enabled = true }()
var times uint = 1
for {
if cli.Online {
From 2bbf969cfad704763c15e030f6742843c0b07ae0 Mon Sep 17 00:00:00 2001
From: Mrs4s
Date: Wed, 6 Jan 2021 21:27:07 +0800
Subject: [PATCH 277/367] feature download_file.
---
coolq/api.go | 22 ++++++++++++++++++++++
coolq/cqcode.go | 2 +-
global/net.go | 12 +++++++++++-
server/http.go | 28 ++++++++++++++++++++++++++++
server/websocket.go | 22 ++++++++++++++++++++++
5 files changed, 84 insertions(+), 2 deletions(-)
diff --git a/coolq/api.go b/coolq/api.go
index e3b20d4..b453c78 100644
--- a/coolq/api.go
+++ b/coolq/api.go
@@ -1,9 +1,12 @@
package coolq
import (
+ "crypto/md5"
+ "encoding/hex"
"io/ioutil"
"os"
"path"
+ "path/filepath"
"runtime"
"strconv"
"strings"
@@ -741,6 +744,25 @@ func (bot *CQBot) CQGetImage(file string) MSG {
}
}
+func (bot *CQBot) CQDownloadFile(url string, headers map[string]string, threadCount int) MSG {
+ hash := md5.Sum([]byte(url))
+ file := path.Join(global.CACHE_PATH, hex.EncodeToString(hash[:])+".cache")
+ if global.PathExists(file) {
+ if err := os.Remove(file); err != nil {
+ log.Warnf("删除缓存文件 %v 时出现错误: %v", file, err)
+ return Failed(100, "DELETE_FILE_ERROR", err.Error())
+ }
+ }
+ if err := global.DownloadFileMultiThreading(url, file, 0, threadCount, headers); err != nil {
+ log.Warnf("下载链接 %v 时出现错误: %v", url, err)
+ return Failed(100, "DOWNLOAD_FILE_ERROR", err.Error())
+ }
+ abs, _ := filepath.Abs(file)
+ return OK(MSG{
+ "file": abs,
+ })
+}
+
func (bot *CQBot) CQGetForwardMessage(resId string) MSG {
m := bot.Client.GetForwardMessage(resId)
if m == nil {
diff --git a/coolq/cqcode.go b/coolq/cqcode.go
index ef2dd93..16cd7d5 100644
--- a/coolq/cqcode.go
+++ b/coolq/cqcode.go
@@ -833,7 +833,7 @@ func (bot *CQBot) makeImageElem(d map[string]string, group bool) (message.IMessa
_ = os.Remove(cacheFile)
}
thread, _ := strconv.Atoi(c)
- if err := global.DownloadFileMultiThreading(f, cacheFile, maxImageSize, thread); err != nil {
+ if err := global.DownloadFileMultiThreading(f, cacheFile, maxImageSize, thread, nil); err != nil {
return nil, err
}
return &LocalImageElement{File: cacheFile}, nil
diff --git a/global/net.go b/global/net.go
index 1ce5797..715b1a0 100644
--- a/global/net.go
+++ b/global/net.go
@@ -99,7 +99,7 @@ func DownloadFile(url, path string, limit int64) error {
return nil
}
-func DownloadFileMultiThreading(url, path string, limit int64, threadCount int) error {
+func DownloadFileMultiThreading(url, path string, limit int64, threadCount int, headers map[string]string) error {
if threadCount < 2 {
return DownloadFile(url, path, limit)
}
@@ -128,6 +128,11 @@ func DownloadFileMultiThreading(url, path string, limit int64, threadCount int)
if err != nil {
return err
}
+ if headers != nil {
+ for k, v := range headers {
+ req.Header.Set(k, v)
+ }
+ }
req.Header.Set("range", "bytes=0-")
resp, err := client.Do(req)
if err != nil {
@@ -184,6 +189,11 @@ func DownloadFileMultiThreading(url, path string, limit int64, threadCount int)
_, _ = file.Seek(block.BeginOffset, io.SeekStart)
writer := bufio.NewWriter(file)
defer writer.Flush()
+ if headers != nil {
+ for k, v := range headers {
+ req.Header.Set(k, v)
+ }
+ }
req.Header.Set("range", "bytes="+strconv.FormatInt(block.BeginOffset, 10)+"-"+strconv.FormatInt(block.EndOffset, 10))
resp, err := client.Do(req)
if err != nil {
diff --git a/server/http.go b/server/http.go
index 80aaf32..b312d82 100644
--- a/server/http.go
+++ b/server/http.go
@@ -428,6 +428,33 @@ func HandleQuickOperation(s *httpServer, c *gin.Context) {
}
}
+func DownloadFile(s *httpServer, c *gin.Context) {
+ url := getParam(c, "url")
+ tc, _ := strconv.Atoi(getParam(c, "thread_count"))
+ h, t := getParamWithType(c, "headers")
+ headers := map[string]string{}
+ if t == gjson.Null || t == gjson.String {
+ lines := strings.Split(h, "\r\n")
+ for _, sub := range lines {
+ str := strings.SplitN(sub, "=", 2)
+ if len(str) == 2 {
+ headers[str[0]] = str[1]
+ }
+ }
+ }
+ if t == gjson.JSON {
+ arr := gjson.Parse(h)
+ for _, sub := range arr.Array() {
+ str := strings.SplitN(sub.String(), "=", 2)
+ if len(str) == 2 {
+ headers[str[0]] = str[1]
+ }
+ }
+ }
+ println(url, tc, h, t)
+ c.JSON(200, s.bot.CQDownloadFile(url, headers, tc))
+}
+
func OcrImage(s *httpServer, c *gin.Context) {
img := getParam(c, "image")
c.JSON(200, s.bot.CQOcrImage(img))
@@ -535,6 +562,7 @@ var httpApi = map[string]func(s *httpServer, c *gin.Context){
"reload_event_filter": ReloadEventFilter,
"set_group_portrait": SetGroupPortrait,
"set_group_anonymous_ban": SetGroupAnonymousBan,
+ "download_file": DownloadFile,
".handle_quick_operation": HandleQuickOperation,
".ocr_image": OcrImage,
"ocr_image": OcrImage,
diff --git a/server/websocket.go b/server/websocket.go
index 15fc88d..0ab5789 100644
--- a/server/websocket.go
+++ b/server/websocket.go
@@ -490,6 +490,28 @@ var wsApi = map[string]func(*coolq.CQBot, gjson.Result) coolq.MSG{
"get_msg": func(bot *coolq.CQBot, p gjson.Result) coolq.MSG {
return bot.CQGetMessage(int32(p.Get("message_id").Int()))
},
+ "download_file": func(bot *coolq.CQBot, p gjson.Result) coolq.MSG {
+ headers := map[string]string{}
+ headersToken := p.Get("headers")
+ if headersToken.IsArray() {
+ for _, sub := range headersToken.Array() {
+ str := strings.SplitN(sub.String(), "=", 2)
+ if len(str) == 2 {
+ headers[str[0]] = str[1]
+ }
+ }
+ }
+ if headersToken.Type == gjson.String {
+ lines := strings.Split(headersToken.String(), "\r\n")
+ for _, sub := range lines {
+ str := strings.SplitN(sub, "=", 2)
+ if len(str) == 2 {
+ headers[str[0]] = str[1]
+ }
+ }
+ }
+ return bot.CQDownloadFile(p.Get("url").Str, headers, int(p.Get("thread_count").Int()))
+ },
"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)
},
From 938ebf630f3a2a797c73ee761c70435e1edfb422 Mon Sep 17 00:00:00 2001
From: Mrs4s
Date: Wed, 6 Jan 2021 21:43:55 +0800
Subject: [PATCH 278/367] update doc.
---
docs/cqhttp.md | 40 ++++++++++++++++++++++++++++++++++++++++
1 file changed, 40 insertions(+)
diff --git a/docs/cqhttp.md b/docs/cqhttp.md
index ae20d37..2ecbc67 100644
--- a/docs/cqhttp.md
+++ b/docs/cqhttp.md
@@ -760,6 +760,46 @@ Type: `tts`
| `remain_at_all_count_for_group` | int16 | 群内所有管理当天剩余@全体成员次数 |
| `remain_at_all_count_for_uin` | int16 | BOT当天剩余@全体成员次数 |
+### 下载文件到缓存目录
+
+终结点: `/download_file`
+
+**参数**
+
+| 字段 | 类型 | 说明 |
+| ---------- | ------ | ------------------------- |
+| `url` | string | 链接地址 |
+| `thread_count` | int32 | 下载线程数 |
+| `headers` | string or array | 自定义请求头 |
+
+**`headers`格式:**
+
+字符串:
+
+```
+User-Agent=YOUR_UA[\r\n]Referer=https://www.baidu.com
+```
+
+> `[\r\n]` 为换行符, 使用http请求时请注意编码
+
+JSON数组:
+
+```
+[
+ "User-Agent=YOUR_UA",
+ "Referer=https://www.baidu.com",
+]
+```
+
+**响应数据**
+
+| 字段 | 类型 | 说明 |
+| ---------- | ---------- | ------------ |
+| `file` | string | 下载文件的*绝对路径* |
+
+> 通过这个API下载的文件能直接放入CQ码作为图片或语音发送
+> 调用后会阻塞直到下载完成后才会返回数据,请注意下载大文件时的超时
+
### 获取用户VIP信息
终结点:`/_get_vip_info`
From 1843bd6a4e04aa0383e75bec851b909644abbc15 Mon Sep 17 00:00:00 2001
From: Mrs4s
Date: Wed, 6 Jan 2021 22:08:02 +0800
Subject: [PATCH 279/367] fix reconnect loop on account banned.
---
server/apiAdmin.go | 3 +++
1 file changed, 3 insertions(+)
diff --git a/server/apiAdmin.go b/server/apiAdmin.go
index a24b24d..64af4d6 100644
--- a/server/apiAdmin.go
+++ b/server/apiAdmin.go
@@ -295,6 +295,9 @@ func (s *webServer) Dologin() {
log.Fatalf("重连失败: 设备锁")
default:
log.Errorf("重连失败: %v", rsp.ErrorMessage)
+ if strings.Contains(rsp.ErrorMessage, "冻结") {
+ log.Fatalf("账号被冻结, 放弃重连")
+ }
cli.Disconnect()
continue
}
From 2d020bc7f72ff3ee95e827e641a9dde1cb86a164 Mon Sep 17 00:00:00 2001
From: wdvxdr
Date: Fri, 8 Jan 2021 12:14:09 +0800
Subject: [PATCH 280/367] drop go-silk
---
global/codec.go | 26 ++++-------
global/codec/codec.go | 102 +++++++++++++++++++++++++++++++++++++++++
global/codec/codec2.go | 14 ++++++
go.mod | 1 -
go.sum | 2 -
5 files changed, 126 insertions(+), 19 deletions(-)
create mode 100644 global/codec/codec.go
create mode 100644 global/codec/codec2.go
diff --git a/global/codec.go b/global/codec.go
index bc9b9e0..90d51b4 100644
--- a/global/codec.go
+++ b/global/codec.go
@@ -4,31 +4,25 @@ import (
"crypto/md5"
"errors"
"fmt"
+ "github.com/Mrs4s/go-cqhttp/global/codec"
+ log "github.com/sirupsen/logrus"
"io/ioutil"
"path"
- "sync"
-
- log "github.com/sirupsen/logrus"
- "github.com/wdvxdr1123/go-silk/silk"
)
-var codec silk.Encoder
-var useCodec = true
-var once sync.Once
+var useSilkCodec = true
func InitCodec() {
- once.Do(func() {
- log.Info("正在加载silk编码器...")
- err := codec.Init("data/cache", "codec")
- if err != nil {
- log.Error(err)
- useCodec = false
- }
- })
+ log.Info("正在加载silk编码器...")
+ err := codec.Init("data/cache", "codec")
+ if err != nil {
+ log.Error(err)
+ useSilkCodec = false
+ }
}
func Encoder(data []byte) ([]byte, error) {
- if useCodec == false {
+ if useSilkCodec == false {
return nil, errors.New("no silk encoder")
}
h := md5.New()
diff --git a/global/codec/codec.go b/global/codec/codec.go
new file mode 100644
index 0000000..5f7d2d4
--- /dev/null
+++ b/global/codec/codec.go
@@ -0,0 +1,102 @@
+// +build linux windows darwin
+// +build 386 amd64 arm
+
+package codec
+
+import (
+ "errors"
+ "io/ioutil"
+ "net/http"
+ "os"
+ "os/exec"
+ "path"
+ "runtime"
+)
+
+var (
+ codecDir string
+ encoderPath string
+ cachePath string
+)
+
+func downloadCodec(url string, path string) (err error) {
+ resp, err := http.Get(url)
+ if runtime.GOOS == "windows" {
+ path = path + ".exe"
+ }
+ if err != nil {
+ return
+ }
+ defer resp.Body.Close()
+ body, err := ioutil.ReadAll(resp.Body)
+ if err != nil {
+ return
+ }
+ err = ioutil.WriteFile(path, body, os.ModePerm)
+ return
+}
+
+func Init(cachePath, codecPath string) error {
+ appPath, err := os.Executable()
+ appPath = path.Dir(appPath)
+ if err != nil {
+ return err
+ }
+ cachePath = path.Join(appPath, cachePath)
+ codecDir = path.Join(appPath, codecPath)
+ if !fileExist(codecDir) {
+ _ = os.MkdirAll(codecDir, os.ModePerm)
+ }
+ if !fileExist(cachePath) {
+ _ = os.MkdirAll(cachePath, os.ModePerm)
+ }
+ encoderFile := runtime.GOOS + "-" + runtime.GOARCH + "-encoder"
+ encoderPath = path.Join(codecDir, encoderFile)
+ if !fileExist(encoderPath) {
+ if err = downloadCodec("https://cdn.jsdelivr.net/gh/wdvxdr1123/tosilk/codec/"+encoderFile, encoderPath); err != nil {
+ return errors.New("下载依赖失败")
+ }
+ }
+ if runtime.GOOS == "windows" {
+ encoderPath = encoderPath + ".exe"
+ }
+ return nil
+}
+
+func EncodeToSilk(record []byte, tempName string, useCache bool) ([]byte, error) {
+ // 1. 写入缓存文件
+ rawPath := path.Join(cachePath, tempName+".wav")
+ err := ioutil.WriteFile(rawPath, record, os.ModePerm)
+ if err != nil {
+ return nil, err
+ }
+ defer os.Remove(rawPath)
+
+ // 2.转换pcm
+ pcmPath := path.Join(cachePath, tempName+".pcm")
+ cmd := exec.Command("ffmpeg", "-i", rawPath, "-f", "s16le", "-ar", "24000", "-ac", "1", pcmPath)
+ if err = cmd.Run(); err != nil {
+ return nil, err
+ }
+ defer os.Remove(pcmPath)
+
+ // 3. 转silk
+ silkPath := path.Join(cachePath, tempName+".silk")
+ cmd = exec.Command(encoderPath, pcmPath, silkPath, "-rate", "24000", "-quiet", "-tencent")
+ if err = cmd.Run(); err != nil {
+ return nil, err
+ }
+ if useCache == false {
+ defer os.Remove(silkPath)
+ }
+ return ioutil.ReadFile(silkPath)
+}
+
+// FileExist 检查文件是否存在
+func fileExist(path string) bool {
+ if runtime.GOOS == "windows" {
+ path = path + ".exe"
+ }
+ _, err := os.Lstat(path)
+ return !os.IsNotExist(err)
+}
diff --git a/global/codec/codec2.go b/global/codec/codec2.go
new file mode 100644
index 0000000..e50133e
--- /dev/null
+++ b/global/codec/codec2.go
@@ -0,0 +1,14 @@
+// +build !linux,!windows,!darwin
+// +build !386,!amd64,!arm
+
+package codec
+
+import "errors"
+
+func Init() error {
+ return errors.New("not support now")
+}
+
+func EncodeToSilk(record []byte, tempName string, useCache bool) ([]byte, error) {
+ return nil, errors.New("not support now")
+}
diff --git a/go.mod b/go.mod
index ea327d8..c2043a8 100644
--- a/go.mod
+++ b/go.mod
@@ -20,7 +20,6 @@ require (
github.com/syndtr/goleveldb v1.0.0
github.com/t-tomalak/logrus-easy-formatter v0.0.0-20190827215021-c074f06c5816
github.com/tidwall/gjson v1.6.7
- github.com/wdvxdr1123/go-silk v0.0.0-20201210140933-bcdbcb2f1093
github.com/yinghau76/go-ascii-art v0.0.0-20190517192627-e7f465a30189
golang.org/x/crypto v0.0.0-20201221181555-eec23a3978ad
golang.org/x/time v0.0.0-20201208040808-7e3f01d25324
diff --git a/go.sum b/go.sum
index 2f1571a..3554dd5 100644
--- a/go.sum
+++ b/go.sum
@@ -110,8 +110,6 @@ github.com/ugorji/go v1.1.7 h1:/68gy2h+1mWMrwZFeD1kQialdSzAb432dtpeJ42ovdo=
github.com/ugorji/go v1.1.7/go.mod h1:kZn38zHttfInRq0xu/PH0az30d+z6vm202qpg1oXVMw=
github.com/ugorji/go/codec v1.1.7 h1:2SvQaVZ1ouYrrKKwoSk2pzd4A9evlKJb9oTL+OaLUSs=
github.com/ugorji/go/codec v1.1.7/go.mod h1:Ax+UKWsSmolVDwsd+7N3ZtXu+yMGCf907BLYF3GoBXY=
-github.com/wdvxdr1123/go-silk v0.0.0-20201210140933-bcdbcb2f1093 h1:t38EBwI2hFJz1sQJ402VqzdA3eMidkY1c3w/8z0SftA=
-github.com/wdvxdr1123/go-silk v0.0.0-20201210140933-bcdbcb2f1093/go.mod h1:5q9LFlBr+yX/J8Jd/9wHdXwkkjFkNyQIS7kX2Lgx/Zs=
github.com/yinghau76/go-ascii-art v0.0.0-20190517192627-e7f465a30189 h1:4UJw9if55Fu3HOwbfcaQlJ27p3oeJU2JZqoeT3ITJQk=
github.com/yinghau76/go-ascii-art v0.0.0-20190517192627-e7f465a30189/go.mod h1:rIrm5geMiBhPQkdfUm8gDFi/WiHneOp1i9KjmJqc+9I=
golang.org/x/crypto v0.0.0-20190308221718-c2843e01d9a2/go.mod h1:djNgcEr1/C05ACkg1iLfiJU5Ep61QUkGW8qpdssI0+w=
From f501b311527281a10b8000c84a8a2dfa9260ae67 Mon Sep 17 00:00:00 2001
From: wdvxdr
Date: Fri, 8 Jan 2021 14:12:25 +0800
Subject: [PATCH 281/367] encode mp4
---
.gitignore | 5 +++++
coolq/cqcode.go | 3 +--
global/codec.go | 13 ++++++++++++-
3 files changed, 18 insertions(+), 3 deletions(-)
diff --git a/.gitignore b/.gitignore
index 31e3ac6..4b43257 100644
--- a/.gitignore
+++ b/.gitignore
@@ -1,2 +1,7 @@
vendor/
.idea
+config.hjson
+device.json
+codec/
+data/
+logs/
\ No newline at end of file
diff --git a/coolq/cqcode.go b/coolq/cqcode.go
index 16cd7d5..ba472ff 100644
--- a/coolq/cqcode.go
+++ b/coolq/cqcode.go
@@ -605,7 +605,6 @@ func (bot *CQBot) ToElement(t string, d map[string]string, group bool) (m interf
}
}()
data, err := bot.Client.GetTts(d["text"])
- ioutil.WriteFile("tts.silk", data, 777)
if err != nil {
return nil, err
}
@@ -620,7 +619,7 @@ func (bot *CQBot) ToElement(t string, d map[string]string, group bool) (m interf
return nil, err
}
if !global.IsAMRorSILK(data) {
- data, err = global.Encoder(data)
+ data, err = global.EncoderSilk(data)
if err != nil {
return nil, err
}
diff --git a/global/codec.go b/global/codec.go
index 90d51b4..346166c 100644
--- a/global/codec.go
+++ b/global/codec.go
@@ -7,6 +7,7 @@ import (
"github.com/Mrs4s/go-cqhttp/global/codec"
log "github.com/sirupsen/logrus"
"io/ioutil"
+ "os/exec"
"path"
)
@@ -21,7 +22,7 @@ func InitCodec() {
}
}
-func Encoder(data []byte) ([]byte, error) {
+func EncoderSilk(data []byte) ([]byte, error) {
if useSilkCodec == false {
return nil, errors.New("no silk encoder")
}
@@ -37,3 +38,13 @@ func Encoder(data []byte) ([]byte, error) {
}
return slk, nil
}
+
+func EncodeMP4(src string, dst string) error {
+ cmd := exec.Command("ffmpeg", "-i", src, "-c", "copy", "-map", "0", dst)
+ return cmd.Run()
+}
+
+func ExtractCover(src string, dst string) error {
+ cmd := exec.Command("ffmpeg", "-i", src, "-y", "-r", "1", "-f", "image2", dst)
+ return cmd.Run()
+}
From b717e2362657ca973079795dd89436330b3bd31f Mon Sep 17 00:00:00 2001
From: wdvxdr
Date: Fri, 8 Jan 2021 15:40:32 +0800
Subject: [PATCH 282/367] feat CQ:video
---
coolq/api.go | 2 +-
coolq/bot.go | 11 ++++-
coolq/cqcode.go | 129 +++++++++++++++++++++++++++++++++++++-----------
global/codec.go | 2 +-
go.mod | 2 +-
go.sum | 2 +
6 files changed, 116 insertions(+), 32 deletions(-)
diff --git a/coolq/api.go b/coolq/api.go
index b453c78..583122a 100644
--- a/coolq/api.go
+++ b/coolq/api.go
@@ -837,7 +837,7 @@ func (bot *CQBot) CQCanSendRecord() MSG {
}
func (bot *CQBot) CQOcrImage(imageId string) MSG {
- img, err := bot.makeImageElem(map[string]string{"file": imageId}, true)
+ img, err := bot.makeImageOrVideoElem(map[string]string{"file": imageId}, false, true)
if err != nil {
log.Warnf("load image error: %v", err)
return Failed(100, "LOAD_FILE_ERROR", err.Error())
diff --git a/coolq/bot.go b/coolq/bot.go
index 0fc72fa..a0d0130 100644
--- a/coolq/bot.go
+++ b/coolq/bot.go
@@ -158,6 +158,15 @@ func (bot *CQBot) SendGroupMessage(groupId int64, m *message.SendingMessage) int
newElem = append(newElem, gv)
continue
}
+ if i, ok := elem.(*LocalVideoElement); ok { // todo:cache & multiThread
+ gv, err := bot.Client.UploadGroupShortVideo(groupId, i.video, i.thumb)
+ if err != nil {
+ log.Warnf("警告: 群 %v 消息短视频上传失败: %v", groupId, err)
+ continue
+ }
+ newElem = append(newElem, gv)
+ continue
+ }
if i, ok := elem.(*PokeElement); ok {
if group := bot.Client.FindGroup(groupId); group != nil {
if mem := group.FindMember(i.Target); mem != nil {
@@ -272,7 +281,7 @@ func (bot *CQBot) SendPrivateMessage(target int64, m *message.SendingMessage) in
if i, ok := elem.(*message.VoiceElement); ok {
fv, err := bot.Client.UploadPrivatePtt(target, i.Data)
if err != nil {
- log.Warnf("警告: 好友 %v 消息语音上传失败: %v", target, err)
+ log.Warnf("警告: 群 %v 消息语音上传失败: %v", target, err)
continue
}
newElem = append(newElem, fv)
diff --git a/coolq/cqcode.go b/coolq/cqcode.go
index ba472ff..c2d250e 100644
--- a/coolq/cqcode.go
+++ b/coolq/cqcode.go
@@ -21,6 +21,7 @@ import (
"github.com/Mrs4s/MiraiGo/binary"
"github.com/Mrs4s/MiraiGo/message"
+ "github.com/Mrs4s/MiraiGo/utils"
"github.com/Mrs4s/go-cqhttp/global"
log "github.com/sirupsen/logrus"
"github.com/tidwall/gjson"
@@ -35,7 +36,8 @@ var paramReg = regexp.MustCompile(`,([\w\-.]+?)=([^,\]]+)`)
var IgnoreInvalidCQCode = false
var SplitUrl = false
-const maxImageSize = 1024 * 1024 * 30 // 30MB
+const maxImageSize = 1024 * 1024 * 30 // 30MB
+const maxVideoSize = 1024 * 1024 * 100 // 100MB
type PokeElement struct {
Target int64
@@ -77,6 +79,13 @@ type LocalVoiceElement struct {
Stream io.ReadSeeker
}
+type LocalVideoElement struct {
+ message.ShortVideoElement
+ File string
+ video io.ReadSeeker
+ thumb io.ReadSeeker
+}
+
func (e *GiftElement) Type() message.ElementType {
return message.At
}
@@ -426,7 +435,7 @@ func (bot *CQBot) ConvertStringMessage(msg string, group bool) (r []message.IMes
}
elem, err := bot.ToElement(t, params, group)
if err != nil {
- org := "[" + string(cqCode) + "]"
+ org := "[CQ:" + string(cqCode) + "]"
if !IgnoreInvalidCQCode {
log.Warnf("转换CQ码 %v 时出现错误: %v 将原样发送.", org, err)
r = append(r, message.NewText(org))
@@ -547,7 +556,7 @@ func (bot *CQBot) ToElement(t string, d map[string]string, group bool) (m interf
}
return message.NewText(d["text"]), nil
case "image":
- img, err := bot.makeImageElem(d, group)
+ img, err := bot.makeImageOrVideoElem(d, false, group)
if err != nil {
return nil, err
}
@@ -769,11 +778,55 @@ func (bot *CQBot) ToElement(t string, d map[string]string, group bool) (m interf
if maxHeight == 0 {
maxHeight = 1000
}
- img, err := bot.makeImageElem(d, group)
+ img, err := bot.makeImageOrVideoElem(d, false, group)
if err != nil {
return nil, errors.New("send cardimage faild")
}
return bot.makeShowPic(img, source, icon, minWidth, minHeight, maxWidth, maxHeight, group)
+ case "video":
+ if !group {
+ return nil, errors.New("unsupported private short video")
+ }
+ cache := d["cache"]
+ if cache == "" {
+ cache = "1"
+ }
+ file, err := bot.makeImageOrVideoElem(d, true, group)
+ if err != nil {
+ return nil, err
+ }
+ v := file.(*LocalVideoElement)
+ if cover, ok := d["cover"]; ok {
+ data, _ := global.FindFile(cover, cache, global.IMAGE_PATH)
+ v.thumb = bytes.NewReader(data)
+ }
+ if v.thumb == nil {
+ _ = global.ExtractCover(v.File, v.File+".jpg")
+ v.thumb, _ = os.Open(v.File + ".jpg")
+ }
+ v.video, _ = os.Open(v.File)
+ _, err = v.video.Seek(4, io.SeekStart)
+ if err != nil {
+ return nil, err
+ }
+ var header = make([]byte, 4)
+ _, err = v.video.Read(header)
+ if !bytes.Equal(header, []byte{0x66, 0x74, 0x79, 0x70}) { // ftyp
+ _, _ = v.video.Seek(0, io.SeekStart)
+ hash, _ := utils.GetMd5AndLength(v.video)
+ cacheFile := path.Join(global.CACHE_PATH, hex.EncodeToString(hash[:])+".mp4")
+ if global.PathExists(cacheFile) {
+ goto ok
+ }
+ err = global.EncodeMP4(v.File, cacheFile)
+ if err != nil {
+ return nil, err
+ }
+ ok:
+ v.video, _ = os.Open(cacheFile)
+ }
+ _, _ = v.video.Seek(0, io.SeekStart)
+ return v, nil
default:
return nil, errors.New("unsupported cq code: " + t)
}
@@ -815,7 +868,7 @@ func CQCodeUnescapeValue(content string) string {
}
// 图片 elem 生成器,单独拎出来,用于公用
-func (bot *CQBot) makeImageElem(d map[string]string, group bool) (message.IMessageElement, error) {
+func (bot *CQBot) makeImageOrVideoElem(d map[string]string, video, group bool) (message.IMessageElement, error) {
f := d["file"]
if strings.HasPrefix(f, "http") || strings.HasPrefix(f, "https") {
cache := d["cache"]
@@ -832,18 +885,22 @@ func (bot *CQBot) makeImageElem(d map[string]string, group bool) (message.IMessa
_ = os.Remove(cacheFile)
}
thread, _ := strconv.Atoi(c)
- if err := global.DownloadFileMultiThreading(f, cacheFile, maxImageSize, thread, nil); err != nil {
+ var maxSize = func() int64 {
+ if video {
+ return maxVideoSize
+ }
+ return maxImageSize
+ }()
+ if err := global.DownloadFileMultiThreading(f, cacheFile, maxSize, thread, nil); err != nil {
return nil, err
}
+ if video {
+ return &LocalVideoElement{
+ File: cacheFile,
+ }, nil
+ }
return &LocalImageElement{File: cacheFile}, nil
}
- if strings.HasPrefix(f, "base64") {
- b, err := base64.StdEncoding.DecodeString(strings.ReplaceAll(f, "base64://", ""))
- if err != nil {
- return nil, err
- }
- return &LocalImageElement{Stream: bytes.NewReader(b)}, nil
- }
if strings.HasPrefix(f, "file") {
fu, err := url.Parse(f)
if err != nil {
@@ -856,10 +913,28 @@ func (bot *CQBot) makeImageElem(d map[string]string, group bool) (message.IMessa
if err != nil {
return nil, err
}
+ if video {
+ goto videos
+ }
if info.Size() == 0 || info.Size() >= maxImageSize {
return nil, errors.New("invalid image size")
}
return &LocalImageElement{File: fu.Path}, nil
+ videos:
+ if info.Size() == 0 || info.Size() >= maxVideoSize {
+ return nil, errors.New("invalid video size")
+ }
+ return &LocalVideoElement{File: fu.Path}, nil
+ }
+ if video { // 短视频视频只支持以上两种
+ return nil, errors.New("invalid video")
+ }
+ if strings.HasPrefix(f, "base64") {
+ b, err := base64.StdEncoding.DecodeString(strings.ReplaceAll(f, "base64://", ""))
+ if err != nil {
+ return nil, err
+ }
+ return &LocalImageElement{Stream: bytes.NewReader(b)}, nil
}
rawPath := path.Join(global.IMAGE_PATH, f)
if !global.PathExists(rawPath) && global.PathExists(path.Join(global.IMAGE_PATH_OLD, f)) {
@@ -869,7 +944,7 @@ func (bot *CQBot) makeImageElem(d map[string]string, group bool) (message.IMessa
rawPath += ".cqimg"
}
if !global.PathExists(rawPath) && d["url"] != "" {
- return bot.makeImageElem(map[string]string{"file": d["url"]}, group)
+ return bot.makeImageOrVideoElem(map[string]string{"file": d["url"]}, false, group)
}
if global.PathExists(rawPath) {
file, err := os.Open(rawPath)
@@ -886,9 +961,11 @@ func (bot *CQBot) makeImageElem(d map[string]string, group bool) (message.IMessa
if len(b) < 20 {
return nil, errors.New("invalid local file")
}
- var size int32
- var hash []byte
- var url string
+ var (
+ size int32
+ hash []byte
+ url string
+ )
if path.Ext(rawPath) == ".cqimg" {
for _, line := range strings.Split(global.ReadAllText(rawPath), "\n") {
kv := strings.SplitN(line, "=", 2)
@@ -909,27 +986,23 @@ func (bot *CQBot) makeImageElem(d map[string]string, group bool) (message.IMessa
}
if size == 0 {
if url != "" {
- return bot.makeImageElem(map[string]string{"file": url}, group)
+ return bot.makeImageOrVideoElem(map[string]string{"file": url}, false, group)
}
return nil, errors.New("img size is 0")
}
if len(hash) != 16 {
return nil, errors.New("invalid hash")
}
+ var rsp message.IMessageElement
if group {
- rsp, err := bot.Client.QueryGroupImage(int64(rand.Uint32()), hash, size)
- if err != nil {
- if url != "" {
- return bot.makeImageElem(map[string]string{"file": url}, group)
- }
- return nil, err
- }
- return rsp, nil
+ rsp, err = bot.Client.QueryGroupImage(int64(rand.Uint32()), hash, size)
+ goto ok
}
- rsp, err := bot.Client.QueryFriendImage(int64(rand.Uint32()), hash, size)
+ rsp, err = bot.Client.QueryFriendImage(int64(rand.Uint32()), hash, size)
+ ok:
if err != nil {
if url != "" {
- return bot.makeImageElem(map[string]string{"file": url}, group)
+ return bot.makeImageOrVideoElem(map[string]string{"file": url}, false, group)
}
return nil, err
}
diff --git a/global/codec.go b/global/codec.go
index 346166c..26cd2dd 100644
--- a/global/codec.go
+++ b/global/codec.go
@@ -40,7 +40,7 @@ func EncoderSilk(data []byte) ([]byte, error) {
}
func EncodeMP4(src string, dst string) error {
- cmd := exec.Command("ffmpeg", "-i", src, "-c", "copy", "-map", "0", dst)
+ cmd := exec.Command("ffmpeg", "-i", src, "-y", "-c", "copy", "-map", "0", dst)
return cmd.Run()
}
diff --git a/go.mod b/go.mod
index c2043a8..12ccf04 100644
--- a/go.mod
+++ b/go.mod
@@ -3,7 +3,7 @@ module github.com/Mrs4s/go-cqhttp
go 1.15
require (
- github.com/Mrs4s/MiraiGo v0.0.0-20210105173234-72521dec9b56
+ github.com/Mrs4s/MiraiGo v0.0.0-20210107163750-ce4834c2ba71
github.com/dustin/go-humanize v1.0.0
github.com/gin-contrib/pprof v1.3.0
github.com/gin-gonic/gin v1.6.3
diff --git a/go.sum b/go.sum
index 3554dd5..ced49d9 100644
--- a/go.sum
+++ b/go.sum
@@ -2,6 +2,8 @@ cloud.google.com/go v0.26.0/go.mod h1:aQUYkXzVsufM+DwF1aE+0xfcU+56JwCaLick0ClmMT
github.com/BurntSushi/toml v0.3.1/go.mod h1:xHWCNGjB5oqiDr8zfno3MHue2Ht5sIBksp03qcyfWMU=
github.com/Mrs4s/MiraiGo v0.0.0-20210105173234-72521dec9b56 h1:U7kObHDk3RfaD81+1hA29gxHf3PfRGpX7dqR2UPNO0c=
github.com/Mrs4s/MiraiGo v0.0.0-20210105173234-72521dec9b56/go.mod h1:HW2e375lCQiRwtuA/LV6ZVTsi7co1TRfBn+L5Ow77Bo=
+github.com/Mrs4s/MiraiGo v0.0.0-20210107163750-ce4834c2ba71 h1:WAVoBY4G2BC5Dyw1A45r/sVua65hsBVYcncR42hEGrk=
+github.com/Mrs4s/MiraiGo v0.0.0-20210107163750-ce4834c2ba71/go.mod h1:HW2e375lCQiRwtuA/LV6ZVTsi7co1TRfBn+L5Ow77Bo=
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=
From 87ada9c57eebf93de0946348e36e0813d0b6716a Mon Sep 17 00:00:00 2001
From: wdvxdr
Date: Fri, 8 Jan 2021 16:06:53 +0800
Subject: [PATCH 283/367] update docs
---
docs/cqhttp.md | 14 ++++++++++++++
1 file changed, 14 insertions(+)
diff --git a/docs/cqhttp.md b/docs/cqhttp.md
index 2ecbc67..0a511ac 100644
--- a/docs/cqhttp.md
+++ b/docs/cqhttp.md
@@ -270,6 +270,20 @@ Type: `node`
}
]
````
+### 短视频消息
+
+Type: `video`
+
+范围: **发送/接收**
+
+参数:
+
+| 参数名 | 类型 | 说明 |
+| ------- | ------ | ------------------------------------------------|
+| `file` | string | 支持http和file发送 |
+| `cover` | string | 视频封面,支持http,file和base64发送,格式必须为jpg |
+| `c` | `2` `3`| 通过网络下载视频时的线程数, 默认单线程. (在资源不支持并发时会自动处理)|
+示例: `[CQ:image,file=file:///C:\\Users\Richard\Pictures\1.mp4]`
### XML 消息
From 2e2002668b00fc238debc31cdd1b314fa79f288c Mon Sep 17 00:00:00 2001
From: wdvxdr
Date: Fri, 8 Jan 2021 22:14:14 +0800
Subject: [PATCH 284/367] fix video
---
coolq/cqcode.go | 15 ++++++++-------
1 file changed, 8 insertions(+), 7 deletions(-)
diff --git a/coolq/cqcode.go b/coolq/cqcode.go
index c2d250e..ec69ef2 100644
--- a/coolq/cqcode.go
+++ b/coolq/cqcode.go
@@ -878,22 +878,23 @@ func (bot *CQBot) makeImageOrVideoElem(d map[string]string, video, group bool) (
}
hash := md5.Sum([]byte(f))
cacheFile := path.Join(global.CACHE_PATH, hex.EncodeToString(hash[:])+".cache")
- if global.PathExists(cacheFile) && cache == "1" {
- return &LocalImageElement{File: cacheFile}, nil
- }
- if global.PathExists(cacheFile) {
- _ = os.Remove(cacheFile)
- }
- thread, _ := strconv.Atoi(c)
var maxSize = func() int64 {
if video {
return maxVideoSize
}
return maxImageSize
}()
+ thread, _ := strconv.Atoi(c)
+ if global.PathExists(cacheFile) && cache == "1" {
+ goto hasCacheFile
+ }
+ if global.PathExists(cacheFile) {
+ _ = os.Remove(cacheFile)
+ }
if err := global.DownloadFileMultiThreading(f, cacheFile, maxSize, thread, nil); err != nil {
return nil, err
}
+ hasCacheFile:
if video {
return &LocalVideoElement{
File: cacheFile,
From a4c3ef8923dc4d0ea8a39bf000c0733f004aa445 Mon Sep 17 00:00:00 2001
From: wdvxdr
Date: Fri, 8 Jan 2021 22:34:57 +0800
Subject: [PATCH 285/367] fix private video
---
coolq/bot.go | 10 ++++++++++
coolq/cqcode.go | 3 ---
2 files changed, 10 insertions(+), 3 deletions(-)
diff --git a/coolq/bot.go b/coolq/bot.go
index a0d0130..46d2297 100644
--- a/coolq/bot.go
+++ b/coolq/bot.go
@@ -5,6 +5,7 @@ import (
"encoding/gob"
"fmt"
"hash/crc32"
+ "math/rand"
"os"
"path"
"runtime/debug"
@@ -287,6 +288,15 @@ func (bot *CQBot) SendPrivateMessage(target int64, m *message.SendingMessage) in
newElem = append(newElem, fv)
continue
}
+ if i, ok := elem.(*LocalVideoElement); ok { // todo:cache & multiThread
+ gv, err := bot.Client.UploadGroupShortVideo(target, i.video, i.thumb)
+ if err != nil {
+ log.Warnf("警告: 群 %v 消息短视频上传失败: %v", int64(rand.Uint32()), err)
+ continue
+ }
+ newElem = append(newElem, gv)
+ continue
+ }
if i, ok := elem.(*QQMusicElement); ok {
var msgStyle uint32 = 4
if i.MusicUrl == "" {
diff --git a/coolq/cqcode.go b/coolq/cqcode.go
index ec69ef2..0475e01 100644
--- a/coolq/cqcode.go
+++ b/coolq/cqcode.go
@@ -784,9 +784,6 @@ func (bot *CQBot) ToElement(t string, d map[string]string, group bool) (m interf
}
return bot.makeShowPic(img, source, icon, minWidth, minHeight, maxWidth, maxHeight, group)
case "video":
- if !group {
- return nil, errors.New("unsupported private short video")
- }
cache := d["cache"]
if cache == "" {
cache = "1"
From 392904f144637eb6367ffa5f140b2806e5a20205 Mon Sep 17 00:00:00 2001
From: wdvxdr
Date: Fri, 8 Jan 2021 22:37:51 +0800
Subject: [PATCH 286/367] fix typo
---
coolq/bot.go | 4 ++--
1 file changed, 2 insertions(+), 2 deletions(-)
diff --git a/coolq/bot.go b/coolq/bot.go
index 46d2297..ba120bd 100644
--- a/coolq/bot.go
+++ b/coolq/bot.go
@@ -282,7 +282,7 @@ func (bot *CQBot) SendPrivateMessage(target int64, m *message.SendingMessage) in
if i, ok := elem.(*message.VoiceElement); ok {
fv, err := bot.Client.UploadPrivatePtt(target, i.Data)
if err != nil {
- log.Warnf("警告: 群 %v 消息语音上传失败: %v", target, err)
+ log.Warnf("警告: 私聊 %v 消息语音上传失败: %v", target, err)
continue
}
newElem = append(newElem, fv)
@@ -291,7 +291,7 @@ func (bot *CQBot) SendPrivateMessage(target int64, m *message.SendingMessage) in
if i, ok := elem.(*LocalVideoElement); ok { // todo:cache & multiThread
gv, err := bot.Client.UploadGroupShortVideo(target, i.video, i.thumb)
if err != nil {
- log.Warnf("警告: 群 %v 消息短视频上传失败: %v", int64(rand.Uint32()), err)
+ log.Warnf("警告: 私聊 %v 消息短视频上传失败: %v", int64(rand.Uint32()), err)
continue
}
newElem = append(newElem, gv)
From a5a842a3378da264edcf17d38cdb92565c6e5d10 Mon Sep 17 00:00:00 2001
From: Mrs4s
Date: Sat, 9 Jan 2021 03:12:16 +0800
Subject: [PATCH 287/367] update MiraiGo.
---
go.mod | 2 +-
go.sum | 6 ++----
2 files changed, 3 insertions(+), 5 deletions(-)
diff --git a/go.mod b/go.mod
index 12ccf04..596999c 100644
--- a/go.mod
+++ b/go.mod
@@ -3,7 +3,7 @@ module github.com/Mrs4s/go-cqhttp
go 1.15
require (
- github.com/Mrs4s/MiraiGo v0.0.0-20210107163750-ce4834c2ba71
+ github.com/Mrs4s/MiraiGo v0.0.0-20210108162828-29f670b7201f
github.com/dustin/go-humanize v1.0.0
github.com/gin-contrib/pprof v1.3.0
github.com/gin-gonic/gin v1.6.3
diff --git a/go.sum b/go.sum
index ced49d9..d70f8d8 100644
--- a/go.sum
+++ b/go.sum
@@ -1,9 +1,7 @@
cloud.google.com/go v0.26.0/go.mod h1:aQUYkXzVsufM+DwF1aE+0xfcU+56JwCaLick0ClmMTw=
github.com/BurntSushi/toml v0.3.1/go.mod h1:xHWCNGjB5oqiDr8zfno3MHue2Ht5sIBksp03qcyfWMU=
-github.com/Mrs4s/MiraiGo v0.0.0-20210105173234-72521dec9b56 h1:U7kObHDk3RfaD81+1hA29gxHf3PfRGpX7dqR2UPNO0c=
-github.com/Mrs4s/MiraiGo v0.0.0-20210105173234-72521dec9b56/go.mod h1:HW2e375lCQiRwtuA/LV6ZVTsi7co1TRfBn+L5Ow77Bo=
-github.com/Mrs4s/MiraiGo v0.0.0-20210107163750-ce4834c2ba71 h1:WAVoBY4G2BC5Dyw1A45r/sVua65hsBVYcncR42hEGrk=
-github.com/Mrs4s/MiraiGo v0.0.0-20210107163750-ce4834c2ba71/go.mod h1:HW2e375lCQiRwtuA/LV6ZVTsi7co1TRfBn+L5Ow77Bo=
+github.com/Mrs4s/MiraiGo v0.0.0-20210108162828-29f670b7201f h1:I+rP4wxfLXZw6UpYCeNXWTItmeO4FPw1ZUrRjTVbAME=
+github.com/Mrs4s/MiraiGo v0.0.0-20210108162828-29f670b7201f/go.mod h1:HW2e375lCQiRwtuA/LV6ZVTsi7co1TRfBn+L5Ow77Bo=
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=
From fe83ce716e95fdd2bab5362bb8efb5de636373d5 Mon Sep 17 00:00:00 2001
From: Mrs4s
Date: Sat, 9 Jan 2021 04:25:18 +0800
Subject: [PATCH 288/367] update MiraiGo & fix user-agent & fix file lock.
---
coolq/bot.go | 1 +
coolq/cqcode.go | 2 +-
global/net.go | 24 ++++++++++++++++++++----
go.mod | 2 +-
go.sum | 4 ++--
5 files changed, 25 insertions(+), 8 deletions(-)
diff --git a/coolq/bot.go b/coolq/bot.go
index ba120bd..979bfa3 100644
--- a/coolq/bot.go
+++ b/coolq/bot.go
@@ -135,6 +135,7 @@ func (bot *CQBot) UploadLocalImageAsPrivate(userId int64, img *LocalImageElement
if err != nil {
return nil, err
}
+ defer f.Close()
return bot.Client.UploadPrivateImage(userId, f)
}
diff --git a/coolq/cqcode.go b/coolq/cqcode.go
index 0475e01..6e3023f 100644
--- a/coolq/cqcode.go
+++ b/coolq/cqcode.go
@@ -810,7 +810,7 @@ func (bot *CQBot) ToElement(t string, d map[string]string, group bool) (m interf
_, err = v.video.Read(header)
if !bytes.Equal(header, []byte{0x66, 0x74, 0x79, 0x70}) { // ftyp
_, _ = v.video.Seek(0, io.SeekStart)
- hash, _ := utils.GetMd5AndLength(v.video)
+ hash, _ := utils.ComputeMd5AndLength(v.video)
cacheFile := path.Join(global.CACHE_PATH, hex.EncodeToString(hash[:])+".mp4")
if global.PathExists(cacheFile) {
goto ok
diff --git a/global/net.go b/global/net.go
index 715b1a0..7bdf83f 100644
--- a/global/net.go
+++ b/global/net.go
@@ -23,7 +23,7 @@ import (
var (
client = &http.Client{
- Timeout: time.Second * 30,
+ Timeout: time.Second * 120,
Transport: &http.Transport{
Proxy: func(request *http.Request) (u *url.URL, e error) {
if Proxy == "" {
@@ -47,6 +47,8 @@ var (
Proxy string
ErrOverSize = errors.New("oversize")
+
+ UserAgent = "Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/87.0.4280.88 Safari/537.36 Edg/87.0.664.66"
)
func GetBytes(url string) ([]byte, error) {
@@ -54,7 +56,7 @@ func GetBytes(url string) ([]byte, error) {
if err != nil {
return nil, err
}
- req.Header["User-Agent"] = []string{"Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/83.0.4103.116 Safari/537.36 Edg/83.0.478.61"}
+ req.Header["User-Agent"] = []string{UserAgent}
resp, err := client.Do(req)
if err != nil {
return nil, err
@@ -74,7 +76,7 @@ func GetBytes(url string) ([]byte, error) {
return body, nil
}
-func DownloadFile(url, path string, limit int64) error {
+func DownloadFile(url, path string, limit int64, headers map[string]string) error {
file, err := os.OpenFile(path, os.O_WRONLY|os.O_CREATE, 0666)
if err != nil {
return err
@@ -84,6 +86,14 @@ func DownloadFile(url, path string, limit int64) error {
if err != nil {
return err
}
+ if headers != nil {
+ for k, v := range headers {
+ req.Header.Set(k, v)
+ }
+ }
+ if _, ok := headers["User-Agent"]; ok {
+ req.Header["User-Agent"] = []string{UserAgent}
+ }
resp, err := client.Do(req)
if err != nil {
return err
@@ -101,7 +111,7 @@ func DownloadFile(url, path string, limit int64) error {
func DownloadFileMultiThreading(url, path string, limit int64, threadCount int, headers map[string]string) error {
if threadCount < 2 {
- return DownloadFile(url, path, limit)
+ return DownloadFile(url, path, limit, headers)
}
type BlockMetaData struct {
BeginOffset int64
@@ -133,6 +143,9 @@ func DownloadFileMultiThreading(url, path string, limit int64, threadCount int,
req.Header.Set(k, v)
}
}
+ if _, ok := headers["User-Agent"]; ok {
+ req.Header["User-Agent"] = []string{UserAgent}
+ }
req.Header.Set("range", "bytes=0-")
resp, err := client.Do(req)
if err != nil {
@@ -194,6 +207,9 @@ func DownloadFileMultiThreading(url, path string, limit int64, threadCount int,
req.Header.Set(k, v)
}
}
+ if _, ok := headers["User-Agent"]; ok {
+ req.Header["User-Agent"] = []string{UserAgent}
+ }
req.Header.Set("range", "bytes="+strconv.FormatInt(block.BeginOffset, 10)+"-"+strconv.FormatInt(block.EndOffset, 10))
resp, err := client.Do(req)
if err != nil {
diff --git a/go.mod b/go.mod
index 596999c..edf8397 100644
--- a/go.mod
+++ b/go.mod
@@ -3,7 +3,7 @@ module github.com/Mrs4s/go-cqhttp
go 1.15
require (
- github.com/Mrs4s/MiraiGo v0.0.0-20210108162828-29f670b7201f
+ github.com/Mrs4s/MiraiGo v0.0.0-20210108202403-fb15970f2606
github.com/dustin/go-humanize v1.0.0
github.com/gin-contrib/pprof v1.3.0
github.com/gin-gonic/gin v1.6.3
diff --git a/go.sum b/go.sum
index d70f8d8..fc51ca3 100644
--- a/go.sum
+++ b/go.sum
@@ -1,7 +1,7 @@
cloud.google.com/go v0.26.0/go.mod h1:aQUYkXzVsufM+DwF1aE+0xfcU+56JwCaLick0ClmMTw=
github.com/BurntSushi/toml v0.3.1/go.mod h1:xHWCNGjB5oqiDr8zfno3MHue2Ht5sIBksp03qcyfWMU=
-github.com/Mrs4s/MiraiGo v0.0.0-20210108162828-29f670b7201f h1:I+rP4wxfLXZw6UpYCeNXWTItmeO4FPw1ZUrRjTVbAME=
-github.com/Mrs4s/MiraiGo v0.0.0-20210108162828-29f670b7201f/go.mod h1:HW2e375lCQiRwtuA/LV6ZVTsi7co1TRfBn+L5Ow77Bo=
+github.com/Mrs4s/MiraiGo v0.0.0-20210108202403-fb15970f2606 h1:SD8GLZcVmgbvYiojJhv698AJNVB1YHqx2QI63Qz4zHo=
+github.com/Mrs4s/MiraiGo v0.0.0-20210108202403-fb15970f2606/go.mod h1:HW2e375lCQiRwtuA/LV6ZVTsi7co1TRfBn+L5Ow77Bo=
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=
From 1eeae13b4a8b63724847c20fc080d0006d20c3ba Mon Sep 17 00:00:00 2001
From: wdvxdr
Date: Sat, 9 Jan 2021 12:23:24 +0800
Subject: [PATCH 289/367] fix file close
---
coolq/bot.go | 29 +++++++++++++++++++++++------
coolq/cqcode.go | 29 ++++++++++++++---------------
global/codec.go | 2 +-
3 files changed, 38 insertions(+), 22 deletions(-)
diff --git a/coolq/bot.go b/coolq/bot.go
index 979bfa3..267b054 100644
--- a/coolq/bot.go
+++ b/coolq/bot.go
@@ -5,7 +5,6 @@ import (
"encoding/gob"
"fmt"
"hash/crc32"
- "math/rand"
"os"
"path"
"runtime/debug"
@@ -126,6 +125,24 @@ func (bot *CQBot) UploadLocalImageAsGroup(groupCode int64, img *LocalImageElemen
return bot.Client.UploadGroupImageByFile(groupCode, img.File)
}
+func (bot *CQBot) UploadLocalVideo(target int64, v *LocalVideoElement) (*message.ShortVideoElement, error) {
+ if v.File != "" {
+ video, err := os.Open(v.File)
+ if err != nil {
+ return nil, err
+ }
+ defer video.Close()
+ // todo 加缓存上传失败:短视频上传失败: resp is empty 迷
+ /*
+ hash1, _ := utils.ComputeMd5AndLength(video)
+ hash2, _ := utils.ComputeMd5AndLength(v.thumb)
+ cacheFile := path.Join(global.CACHE_PATH, hex.EncodeToString(hash1[:])+hex.EncodeToString(hash2[:])+".video")
+ */
+ return bot.Client.UploadGroupShortVideo(target, video, v.thumb)
+ }
+ return &v.ShortVideoElement, nil
+}
+
func (bot *CQBot) UploadLocalImageAsPrivate(userId int64, img *LocalImageElement) (*message.FriendImageElement, error) {
if img.Stream != nil {
return bot.Client.UploadPrivateImage(userId, img.Stream)
@@ -160,8 +177,8 @@ func (bot *CQBot) SendGroupMessage(groupId int64, m *message.SendingMessage) int
newElem = append(newElem, gv)
continue
}
- if i, ok := elem.(*LocalVideoElement); ok { // todo:cache & multiThread
- gv, err := bot.Client.UploadGroupShortVideo(groupId, i.video, i.thumb)
+ if i, ok := elem.(*LocalVideoElement); ok {
+ gv, err := bot.UploadLocalVideo(groupId, i)
if err != nil {
log.Warnf("警告: 群 %v 消息短视频上传失败: %v", groupId, err)
continue
@@ -289,10 +306,10 @@ func (bot *CQBot) SendPrivateMessage(target int64, m *message.SendingMessage) in
newElem = append(newElem, fv)
continue
}
- if i, ok := elem.(*LocalVideoElement); ok { // todo:cache & multiThread
- gv, err := bot.Client.UploadGroupShortVideo(target, i.video, i.thumb)
+ if i, ok := elem.(*LocalVideoElement); ok {
+ gv, err := bot.UploadLocalVideo(target, i)
if err != nil {
- log.Warnf("警告: 私聊 %v 消息短视频上传失败: %v", int64(rand.Uint32()), err)
+ log.Warnf("警告: 私聊 %v 消息短视频上传失败: %v", target, err)
continue
}
newElem = append(newElem, gv)
diff --git a/coolq/cqcode.go b/coolq/cqcode.go
index 6e3023f..cc9c2a1 100644
--- a/coolq/cqcode.go
+++ b/coolq/cqcode.go
@@ -82,7 +82,6 @@ type LocalVoiceElement struct {
type LocalVideoElement struct {
message.ShortVideoElement
File string
- video io.ReadSeeker
thumb io.ReadSeeker
}
@@ -793,26 +792,27 @@ func (bot *CQBot) ToElement(t string, d map[string]string, group bool) (m interf
return nil, err
}
v := file.(*LocalVideoElement)
+ var data []byte
if cover, ok := d["cover"]; ok {
- data, _ := global.FindFile(cover, cache, global.IMAGE_PATH)
- v.thumb = bytes.NewReader(data)
- }
- if v.thumb == nil {
+ data, _ = global.FindFile(cover, cache, global.IMAGE_PATH)
+ } else {
_ = global.ExtractCover(v.File, v.File+".jpg")
- v.thumb, _ = os.Open(v.File + ".jpg")
+ data, _ = ioutil.ReadFile(v.File + ".jpg")
}
- v.video, _ = os.Open(v.File)
- _, err = v.video.Seek(4, io.SeekStart)
+ v.thumb = bytes.NewReader(data)
+ video, _ := os.Open(v.File)
+ defer video.Close()
+ _, err = video.Seek(4, io.SeekStart)
if err != nil {
return nil, err
}
var header = make([]byte, 4)
- _, err = v.video.Read(header)
- if !bytes.Equal(header, []byte{0x66, 0x74, 0x79, 0x70}) { // ftyp
- _, _ = v.video.Seek(0, io.SeekStart)
- hash, _ := utils.ComputeMd5AndLength(v.video)
+ _, err = video.Read(header)
+ if !bytes.Equal(header, []byte{0x66, 0x74, 0x79, 0x70}) { // check file header ftyp
+ _, _ = video.Seek(0, io.SeekStart)
+ hash, _ := utils.ComputeMd5AndLength(video)
cacheFile := path.Join(global.CACHE_PATH, hex.EncodeToString(hash[:])+".mp4")
- if global.PathExists(cacheFile) {
+ if global.PathExists(cacheFile) && cache == "1" {
goto ok
}
err = global.EncodeMP4(v.File, cacheFile)
@@ -820,9 +820,8 @@ func (bot *CQBot) ToElement(t string, d map[string]string, group bool) (m interf
return nil, err
}
ok:
- v.video, _ = os.Open(cacheFile)
+ v.File = cacheFile
}
- _, _ = v.video.Seek(0, io.SeekStart)
return v, nil
default:
return nil, errors.New("unsupported cq code: " + t)
diff --git a/global/codec.go b/global/codec.go
index 26cd2dd..4f2648d 100644
--- a/global/codec.go
+++ b/global/codec.go
@@ -39,7 +39,7 @@ func EncoderSilk(data []byte) ([]byte, error) {
return slk, nil
}
-func EncodeMP4(src string, dst string) error {
+func EncodeMP4(src string, dst string) error { // -y 覆盖文件
cmd := exec.Command("ffmpeg", "-i", src, "-y", "-c", "copy", "-map", "0", dst)
return cmd.Run()
}
From 249e5284578088e496a1d5fc6e4bb3e064094bd1 Mon Sep 17 00:00:00 2001
From: wdvxdr
Date: Sat, 9 Jan 2021 14:26:21 +0800
Subject: [PATCH 290/367] support video cache file
---
coolq/bot.go | 9 +++------
coolq/cqcode.go | 26 +++++++++++++++++++++++---
2 files changed, 26 insertions(+), 9 deletions(-)
diff --git a/coolq/bot.go b/coolq/bot.go
index 267b054..de8cd7b 100644
--- a/coolq/bot.go
+++ b/coolq/bot.go
@@ -132,12 +132,9 @@ func (bot *CQBot) UploadLocalVideo(target int64, v *LocalVideoElement) (*message
return nil, err
}
defer video.Close()
- // todo 加缓存上传失败:短视频上传失败: resp is empty 迷
- /*
- hash1, _ := utils.ComputeMd5AndLength(video)
- hash2, _ := utils.ComputeMd5AndLength(v.thumb)
- cacheFile := path.Join(global.CACHE_PATH, hex.EncodeToString(hash1[:])+hex.EncodeToString(hash2[:])+".video")
- */
+ // todo 多线程上传失败: 短视频上传失败: resp is empty (upload video file error: upload failed: 70
+ //hash, _ := utils.ComputeMd5AndLength(io.MultiReader(video, v.thumb))
+ //cacheFile := path.Join(global.CACHE_PATH, hex.EncodeToString(hash[:])+".cache")
return bot.Client.UploadGroupShortVideo(target, video, v.thumb)
}
return &v.ShortVideoElement, nil
diff --git a/coolq/cqcode.go b/coolq/cqcode.go
index cc9c2a1..fedb87b 100644
--- a/coolq/cqcode.go
+++ b/coolq/cqcode.go
@@ -792,6 +792,9 @@ func (bot *CQBot) ToElement(t string, d map[string]string, group bool) (m interf
return nil, err
}
v := file.(*LocalVideoElement)
+ if v.File == "" {
+ return v, nil
+ }
var data []byte
if cover, ok := d["cover"]; ok {
data, _ = global.FindFile(cover, cache, global.IMAGE_PATH)
@@ -923,8 +926,9 @@ func (bot *CQBot) makeImageOrVideoElem(d map[string]string, video, group bool) (
}
return &LocalVideoElement{File: fu.Path}, nil
}
- if video { // 短视频视频只支持以上两种
- return nil, errors.New("invalid video")
+ rawPath := path.Join(global.IMAGE_PATH, f)
+ if video {
+ goto video
}
if strings.HasPrefix(f, "base64") {
b, err := base64.StdEncoding.DecodeString(strings.ReplaceAll(f, "base64://", ""))
@@ -933,7 +937,6 @@ func (bot *CQBot) makeImageOrVideoElem(d map[string]string, video, group bool) (
}
return &LocalImageElement{Stream: bytes.NewReader(b)}, nil
}
- rawPath := path.Join(global.IMAGE_PATH, f)
if !global.PathExists(rawPath) && global.PathExists(path.Join(global.IMAGE_PATH_OLD, f)) {
rawPath = path.Join(global.IMAGE_PATH_OLD, f)
}
@@ -1006,6 +1009,23 @@ func (bot *CQBot) makeImageOrVideoElem(d map[string]string, video, group bool) (
return rsp, nil
}
return nil, errors.New("invalid image")
+video:
+ rawPath = path.Join(global.VIDEO_PATH, f)
+ if !global.PathExists(rawPath) {
+ return nil, errors.New("invalid video")
+ }
+ if path.Ext(rawPath) == ".video" {
+ b, _ := ioutil.ReadFile(rawPath)
+ r := binary.NewReader(b)
+ return &LocalVideoElement{ShortVideoElement: message.ShortVideoElement{// todo 检查缓存是否有效
+ Md5: r.ReadBytes(16),
+ Size: r.ReadInt32(),
+ Name: r.ReadString(),
+ Uuid: r.ReadAvailable(),
+ }}, nil
+ } else {
+ return &LocalVideoElement{File: rawPath}, nil
+ }
}
//makeShowPic 一种xml 方式发送的群消息图片
From e03a989083a7e162205ca9adec5515358c0e051e Mon Sep 17 00:00:00 2001
From: Ink33 <51873347+Ink-33@users.noreply.github.com>
Date: Sat, 9 Jan 2021 20:38:33 +0800
Subject: [PATCH 291/367] Fix misspell
---
global/fs.go | 2 +-
1 file changed, 1 insertion(+), 1 deletion(-)
diff --git a/global/fs.go b/global/fs.go
index fe6fbea..4a00ffb 100644
--- a/global/fs.go
+++ b/global/fs.go
@@ -216,7 +216,7 @@ func UpdateFromStream(updateWith io.Reader) (err error, errRecover error) {
return
}
- // move the new exectuable in to become the new program
+ // move the new executable in to become the new program
err = os.Rename(newPath, updatePath)
if err != nil {
From 7737fc8457266d544b9622b14e1cced57570fd7d Mon Sep 17 00:00:00 2001
From: Mrs4s <1844812067@qq.com>
Date: Sun, 10 Jan 2021 21:30:35 +0800
Subject: [PATCH 292/367] update MiraiGo & qid support.
---
coolq/api.go | 1 +
go.mod | 2 +-
go.sum | 2 ++
3 files changed, 4 insertions(+), 1 deletion(-)
diff --git a/coolq/api.go b/coolq/api.go
index 583122a..3421903 100644
--- a/coolq/api.go
+++ b/coolq/api.go
@@ -649,6 +649,7 @@ func (bot *CQBot) CQGetStrangerInfo(userId int64) MSG {
return OK(MSG{
"user_id": info.Uin,
"nickname": info.Nickname,
+ "qid": info.Qid,
"sex": func() string {
if info.Sex == 1 {
return "female"
diff --git a/go.mod b/go.mod
index edf8397..126a357 100644
--- a/go.mod
+++ b/go.mod
@@ -3,7 +3,7 @@ module github.com/Mrs4s/go-cqhttp
go 1.15
require (
- github.com/Mrs4s/MiraiGo v0.0.0-20210108202403-fb15970f2606
+ github.com/Mrs4s/MiraiGo v0.0.0-20210110132502-6ed080344bd6
github.com/dustin/go-humanize v1.0.0
github.com/gin-contrib/pprof v1.3.0
github.com/gin-gonic/gin v1.6.3
diff --git a/go.sum b/go.sum
index fc51ca3..21f1e1d 100644
--- a/go.sum
+++ b/go.sum
@@ -2,6 +2,8 @@ cloud.google.com/go v0.26.0/go.mod h1:aQUYkXzVsufM+DwF1aE+0xfcU+56JwCaLick0ClmMT
github.com/BurntSushi/toml v0.3.1/go.mod h1:xHWCNGjB5oqiDr8zfno3MHue2Ht5sIBksp03qcyfWMU=
github.com/Mrs4s/MiraiGo v0.0.0-20210108202403-fb15970f2606 h1:SD8GLZcVmgbvYiojJhv698AJNVB1YHqx2QI63Qz4zHo=
github.com/Mrs4s/MiraiGo v0.0.0-20210108202403-fb15970f2606/go.mod h1:HW2e375lCQiRwtuA/LV6ZVTsi7co1TRfBn+L5Ow77Bo=
+github.com/Mrs4s/MiraiGo v0.0.0-20210110132502-6ed080344bd6 h1:9lWjzq0dkjllgrhQ7rpih8oBssBPkPi0rzanDn1t8+E=
+github.com/Mrs4s/MiraiGo v0.0.0-20210110132502-6ed080344bd6/go.mod h1:HW2e375lCQiRwtuA/LV6ZVTsi7co1TRfBn+L5Ow77Bo=
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=
From 620ecdbdbb547eef9bd57d7ab3dd547ef36b1a41 Mon Sep 17 00:00:00 2001
From: Mrs4s <1844812067@qq.com>
Date: Mon, 11 Jan 2021 00:22:59 +0800
Subject: [PATCH 293/367] update MiraiGo.
---
go.mod | 2 +-
go.sum | 6 ++----
2 files changed, 3 insertions(+), 5 deletions(-)
diff --git a/go.mod b/go.mod
index 126a357..ed66a25 100644
--- a/go.mod
+++ b/go.mod
@@ -3,7 +3,7 @@ module github.com/Mrs4s/go-cqhttp
go 1.15
require (
- github.com/Mrs4s/MiraiGo v0.0.0-20210110132502-6ed080344bd6
+ github.com/Mrs4s/MiraiGo v0.0.0-20210110160231-b83dd4cf38a5
github.com/dustin/go-humanize v1.0.0
github.com/gin-contrib/pprof v1.3.0
github.com/gin-gonic/gin v1.6.3
diff --git a/go.sum b/go.sum
index 21f1e1d..b5ad233 100644
--- a/go.sum
+++ b/go.sum
@@ -1,9 +1,7 @@
cloud.google.com/go v0.26.0/go.mod h1:aQUYkXzVsufM+DwF1aE+0xfcU+56JwCaLick0ClmMTw=
github.com/BurntSushi/toml v0.3.1/go.mod h1:xHWCNGjB5oqiDr8zfno3MHue2Ht5sIBksp03qcyfWMU=
-github.com/Mrs4s/MiraiGo v0.0.0-20210108202403-fb15970f2606 h1:SD8GLZcVmgbvYiojJhv698AJNVB1YHqx2QI63Qz4zHo=
-github.com/Mrs4s/MiraiGo v0.0.0-20210108202403-fb15970f2606/go.mod h1:HW2e375lCQiRwtuA/LV6ZVTsi7co1TRfBn+L5Ow77Bo=
-github.com/Mrs4s/MiraiGo v0.0.0-20210110132502-6ed080344bd6 h1:9lWjzq0dkjllgrhQ7rpih8oBssBPkPi0rzanDn1t8+E=
-github.com/Mrs4s/MiraiGo v0.0.0-20210110132502-6ed080344bd6/go.mod h1:HW2e375lCQiRwtuA/LV6ZVTsi7co1TRfBn+L5Ow77Bo=
+github.com/Mrs4s/MiraiGo v0.0.0-20210110160231-b83dd4cf38a5 h1:ee6LafOcoVM0nox2UxiIJgomgRP4pDJe5aeT/rq2o/U=
+github.com/Mrs4s/MiraiGo v0.0.0-20210110160231-b83dd4cf38a5/go.mod h1:HW2e375lCQiRwtuA/LV6ZVTsi7co1TRfBn+L5Ow77Bo=
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=
From 36532a87821ff3c45ff69fb1b0349a47c1f82787 Mon Sep 17 00:00:00 2001
From: Mrs4s <1844812067@qq.com>
Date: Mon, 11 Jan 2021 00:33:41 +0800
Subject: [PATCH 294/367] fix message.
---
coolq/cqcode.go | 5 ++++-
1 file changed, 4 insertions(+), 1 deletion(-)
diff --git a/coolq/cqcode.go b/coolq/cqcode.go
index fedb87b..5f8c956 100644
--- a/coolq/cqcode.go
+++ b/coolq/cqcode.go
@@ -911,6 +911,9 @@ func (bot *CQBot) makeImageOrVideoElem(d map[string]string, video, group bool) (
}
info, err := os.Stat(fu.Path)
if err != nil {
+ if !os.IsExist(err) {
+ return nil, errors.New("file not found")
+ }
return nil, err
}
if video {
@@ -1017,7 +1020,7 @@ video:
if path.Ext(rawPath) == ".video" {
b, _ := ioutil.ReadFile(rawPath)
r := binary.NewReader(b)
- return &LocalVideoElement{ShortVideoElement: message.ShortVideoElement{// todo 检查缓存是否有效
+ return &LocalVideoElement{ShortVideoElement: message.ShortVideoElement{ // todo 检查缓存是否有效
Md5: r.ReadBytes(16),
Size: r.ReadInt32(),
Name: r.ReadString(),
From 50f0f572bceafdf2c87ad9fa241575c1f25ab6bf Mon Sep 17 00:00:00 2001
From: Mrs4s <1844812067@qq.com>
Date: Mon, 11 Jan 2021 00:45:49 +0800
Subject: [PATCH 295/367] fix multi-threading upload.
---
coolq/bot.go | 12 ++++++++----
1 file changed, 8 insertions(+), 4 deletions(-)
diff --git a/coolq/bot.go b/coolq/bot.go
index de8cd7b..f8791e6 100644
--- a/coolq/bot.go
+++ b/coolq/bot.go
@@ -3,8 +3,11 @@ package coolq
import (
"bytes"
"encoding/gob"
+ "encoding/hex"
"fmt"
+ "github.com/Mrs4s/MiraiGo/utils"
"hash/crc32"
+ "io"
"os"
"path"
"runtime/debug"
@@ -132,10 +135,11 @@ func (bot *CQBot) UploadLocalVideo(target int64, v *LocalVideoElement) (*message
return nil, err
}
defer video.Close()
- // todo 多线程上传失败: 短视频上传失败: resp is empty (upload video file error: upload failed: 70
- //hash, _ := utils.ComputeMd5AndLength(io.MultiReader(video, v.thumb))
- //cacheFile := path.Join(global.CACHE_PATH, hex.EncodeToString(hash[:])+".cache")
- return bot.Client.UploadGroupShortVideo(target, video, v.thumb)
+ hash, _ := utils.ComputeMd5AndLength(io.MultiReader(video, v.thumb))
+ cacheFile := path.Join(global.CACHE_PATH, hex.EncodeToString(hash[:])+".cache")
+ _, _ = video.Seek(0, io.SeekStart)
+ _, _ = v.thumb.Seek(0, io.SeekStart)
+ return bot.Client.UploadGroupShortVideo(target, video, v.thumb, cacheFile)
}
return &v.ShortVideoElement, nil
}
From eaec0e545ffc441d6d2dcb4356261a2834f62c48 Mon Sep 17 00:00:00 2001
From: Mrs4s <1844812067@qq.com>
Date: Mon, 11 Jan 2021 00:50:50 +0800
Subject: [PATCH 296/367] fix thumb.
---
coolq/cqcode.go | 10 ++++++----
coolq/event.go | 2 ++
2 files changed, 8 insertions(+), 4 deletions(-)
diff --git a/coolq/cqcode.go b/coolq/cqcode.go
index 5f8c956..7cd8c9b 100644
--- a/coolq/cqcode.go
+++ b/coolq/cqcode.go
@@ -1021,10 +1021,12 @@ video:
b, _ := ioutil.ReadFile(rawPath)
r := binary.NewReader(b)
return &LocalVideoElement{ShortVideoElement: message.ShortVideoElement{ // todo 检查缓存是否有效
- Md5: r.ReadBytes(16),
- Size: r.ReadInt32(),
- Name: r.ReadString(),
- Uuid: r.ReadAvailable(),
+ Md5: r.ReadBytes(16),
+ ThumbMd5: r.ReadBytes(16),
+ Size: r.ReadInt32(),
+ ThumbSize: r.ReadInt32(),
+ Name: r.ReadString(),
+ Uuid: r.ReadAvailable(),
}}, nil
} else {
return &LocalVideoElement{File: rawPath}, nil
diff --git a/coolq/event.go b/coolq/event.go
index 5b9dd79..86fb713 100644
--- a/coolq/event.go
+++ b/coolq/event.go
@@ -566,7 +566,9 @@ func (bot *CQBot) checkMedia(e []message.IMessageElement) {
if !global.PathExists(path.Join(global.VIDEO_PATH, filename)) {
_ = ioutil.WriteFile(path.Join(global.VIDEO_PATH, filename), binary.NewWriterF(func(w *binary.Writer) {
w.Write(i.Md5)
+ w.Write(i.ThumbMd5)
w.WriteUInt32(uint32(i.Size))
+ w.WriteUInt32(uint32(i.ThumbSize))
w.WriteString(i.Name)
w.Write(i.Uuid)
}), 0644)
From b2d8a61a99985393c919417fe123ae60b9617994 Mon Sep 17 00:00:00 2001
From: Mrs4s
Date: Mon, 11 Jan 2021 14:36:29 +0800
Subject: [PATCH 297/367] fix show pic error.
---
coolq/cqcode.go | 4 ++--
1 file changed, 2 insertions(+), 2 deletions(-)
diff --git a/coolq/cqcode.go b/coolq/cqcode.go
index 7cd8c9b..171c92f 100644
--- a/coolq/cqcode.go
+++ b/coolq/cqcode.go
@@ -1039,7 +1039,7 @@ func (bot *CQBot) makeShowPic(elem message.IMessageElement, source string, icon
var suf message.IMessageElement
if i, ok := elem.(*LocalImageElement); ok {
if group == false {
- gm, err := bot.Client.UploadPrivateImage(1, i.Stream)
+ gm, err := bot.UploadLocalImageAsPrivate(1, i)
if err != nil {
log.Warnf("警告: 好友消息 %v 消息图片上传失败: %v", 1, err)
return nil, err
@@ -1047,7 +1047,7 @@ func (bot *CQBot) makeShowPic(elem message.IMessageElement, source string, icon
suf = gm
xml = fmt.Sprintf(` `, "", gm.Md5, gm.Md5, len(i.Data), "", minWidth, minHeight, maxWidth, maxHeight, source, icon)
} else {
- gm, err := bot.Client.UploadGroupImage(1, i.Stream)
+ gm, err := bot.UploadLocalImageAsGroup(1, i)
if err != nil {
log.Warnf("警告: 群 %v 消息图片上传失败: %v", 1, err)
return nil, err
From 85624d1a27018f984d142167b1270e1484dc1014 Mon Sep 17 00:00:00 2001
From: Mrs4s
Date: Mon, 11 Jan 2021 16:58:07 +0800
Subject: [PATCH 298/367] fix forward img & video upload.
---
coolq/api.go | 11 ++++++++++-
1 file changed, 10 insertions(+), 1 deletion(-)
diff --git a/coolq/api.go b/coolq/api.go
index 3421903..69dcc3f 100644
--- a/coolq/api.go
+++ b/coolq/api.go
@@ -303,7 +303,7 @@ func (bot *CQBot) CQSendGroupForwardMessage(groupId int64, m gjson.Result) MSG {
var newElem []message.IMessageElement
for _, elem := range content {
if img, ok := elem.(*LocalImageElement); ok {
- gm, err := bot.Client.UploadGroupImage(groupId, img.Stream)
+ gm, err := bot.UploadLocalImageAsGroup(groupId, img)
if err != nil {
log.Warnf("警告:群 %v 图片上传失败: %v", groupId, err)
continue
@@ -311,6 +311,15 @@ func (bot *CQBot) CQSendGroupForwardMessage(groupId int64, m gjson.Result) MSG {
newElem = append(newElem, gm)
continue
}
+ if video, ok := elem.(*LocalVideoElement); ok {
+ gm, err := bot.UploadLocalVideo(groupId, video)
+ if err != nil {
+ log.Warnf("警告:群 %v 视频上传失败: %v", groupId, err)
+ continue
+ }
+ newElem = append(newElem, gm)
+ continue
+ }
newElem = append(newElem, elem)
}
nodes = append(nodes, &message.ForwardNode{
From ef713bc59cc1edd75407ddaef7cc66b516606265 Mon Sep 17 00:00:00 2001
From: Mrs4s
Date: Mon, 11 Jan 2021 14:36:29 +0800
Subject: [PATCH 299/367] fix show pic error.
---
coolq/cqcode.go | 4 ++--
1 file changed, 2 insertions(+), 2 deletions(-)
diff --git a/coolq/cqcode.go b/coolq/cqcode.go
index 7cd8c9b..171c92f 100644
--- a/coolq/cqcode.go
+++ b/coolq/cqcode.go
@@ -1039,7 +1039,7 @@ func (bot *CQBot) makeShowPic(elem message.IMessageElement, source string, icon
var suf message.IMessageElement
if i, ok := elem.(*LocalImageElement); ok {
if group == false {
- gm, err := bot.Client.UploadPrivateImage(1, i.Stream)
+ gm, err := bot.UploadLocalImageAsPrivate(1, i)
if err != nil {
log.Warnf("警告: 好友消息 %v 消息图片上传失败: %v", 1, err)
return nil, err
@@ -1047,7 +1047,7 @@ func (bot *CQBot) makeShowPic(elem message.IMessageElement, source string, icon
suf = gm
xml = fmt.Sprintf(` `, "", gm.Md5, gm.Md5, len(i.Data), "", minWidth, minHeight, maxWidth, maxHeight, source, icon)
} else {
- gm, err := bot.Client.UploadGroupImage(1, i.Stream)
+ gm, err := bot.UploadLocalImageAsGroup(1, i)
if err != nil {
log.Warnf("警告: 群 %v 消息图片上传失败: %v", 1, err)
return nil, err
From 1f7dcc4e918c0bd57efa1c3c803df452d908f271 Mon Sep 17 00:00:00 2001
From: Mrs4s
Date: Mon, 11 Jan 2021 16:58:07 +0800
Subject: [PATCH 300/367] fix forward img & video upload.
---
coolq/api.go | 11 ++++++++++-
1 file changed, 10 insertions(+), 1 deletion(-)
diff --git a/coolq/api.go b/coolq/api.go
index 3421903..69dcc3f 100644
--- a/coolq/api.go
+++ b/coolq/api.go
@@ -303,7 +303,7 @@ func (bot *CQBot) CQSendGroupForwardMessage(groupId int64, m gjson.Result) MSG {
var newElem []message.IMessageElement
for _, elem := range content {
if img, ok := elem.(*LocalImageElement); ok {
- gm, err := bot.Client.UploadGroupImage(groupId, img.Stream)
+ gm, err := bot.UploadLocalImageAsGroup(groupId, img)
if err != nil {
log.Warnf("警告:群 %v 图片上传失败: %v", groupId, err)
continue
@@ -311,6 +311,15 @@ func (bot *CQBot) CQSendGroupForwardMessage(groupId int64, m gjson.Result) MSG {
newElem = append(newElem, gm)
continue
}
+ if video, ok := elem.(*LocalVideoElement); ok {
+ gm, err := bot.UploadLocalVideo(groupId, video)
+ if err != nil {
+ log.Warnf("警告:群 %v 视频上传失败: %v", groupId, err)
+ continue
+ }
+ newElem = append(newElem, gm)
+ continue
+ }
newElem = append(newElem, elem)
}
nodes = append(nodes, &message.ForwardNode{
From 0c3ba714f7fc93614779e87966cb6e7388ea57b5 Mon Sep 17 00:00:00 2001
From: Ink-33
Date: Wed, 13 Jan 2021 03:52:49 +0800
Subject: [PATCH 301/367] fix #558
---
global/codec/codec.go | 2 +-
global/codec/codec2.go | 14 --------------
2 files changed, 1 insertion(+), 15 deletions(-)
delete mode 100644 global/codec/codec2.go
diff --git a/global/codec/codec.go b/global/codec/codec.go
index 5f7d2d4..c6dcd1a 100644
--- a/global/codec/codec.go
+++ b/global/codec/codec.go
@@ -1,5 +1,5 @@
// +build linux windows darwin
-// +build 386 amd64 arm
+// +build 386 amd64 arm arm64
package codec
diff --git a/global/codec/codec2.go b/global/codec/codec2.go
deleted file mode 100644
index e50133e..0000000
--- a/global/codec/codec2.go
+++ /dev/null
@@ -1,14 +0,0 @@
-// +build !linux,!windows,!darwin
-// +build !386,!amd64,!arm
-
-package codec
-
-import "errors"
-
-func Init() error {
- return errors.New("not support now")
-}
-
-func EncodeToSilk(record []byte, tempName string, useCache bool) ([]byte, error) {
- return nil, errors.New("not support now")
-}
From c9c6e48b8c466b2e5e07eab3846f8c6dc6a48cb7 Mon Sep 17 00:00:00 2001
From: Ink-33
Date: Wed, 13 Jan 2021 03:55:28 +0800
Subject: [PATCH 302/367] add codec/codec_unsupported.go
---
global/codec/codec_unsupportedarch.go | 13 +++++++++++++
global/codec/codec_unsupportedos.go | 13 +++++++++++++
2 files changed, 26 insertions(+)
create mode 100644 global/codec/codec_unsupportedarch.go
create mode 100644 global/codec/codec_unsupportedos.go
diff --git a/global/codec/codec_unsupportedarch.go b/global/codec/codec_unsupportedarch.go
new file mode 100644
index 0000000..f905017
--- /dev/null
+++ b/global/codec/codec_unsupportedarch.go
@@ -0,0 +1,13 @@
+// +build !386,!arm64,!amd64,!arm
+
+package codec
+
+import "errors"
+
+func Init() error {
+ return errors.New("Unsupport arch now")
+}
+
+func EncodeToSilk(record []byte, tempName string, useCache bool) ([]byte, error) {
+ return nil, errors.New("Unsupport arch now")
+}
diff --git a/global/codec/codec_unsupportedos.go b/global/codec/codec_unsupportedos.go
new file mode 100644
index 0000000..89c415e
--- /dev/null
+++ b/global/codec/codec_unsupportedos.go
@@ -0,0 +1,13 @@
+// +build !windows,!linux,!darwin
+
+package codec
+
+import "errors"
+
+func Init() error {
+ return errors.New("not support now")
+}
+
+func EncodeToSilk(record []byte, tempName string, useCache bool) ([]byte, error) {
+ return nil, errors.New("not support now")
+}
From 7ac31a8b762157b7d1f756a330f20b800cf188ea Mon Sep 17 00:00:00 2001
From: Ink-33
Date: Wed, 13 Jan 2021 04:00:01 +0800
Subject: [PATCH 303/367] Update github action
---
.github/workflows/ci.yml | 2 +-
.github/workflows/release.yml | 4 ++--
2 files changed, 3 insertions(+), 3 deletions(-)
diff --git a/.github/workflows/ci.yml b/.github/workflows/ci.yml
index 7c7a90c..1df0747 100644
--- a/.github/workflows/ci.yml
+++ b/.github/workflows/ci.yml
@@ -16,7 +16,7 @@ jobs:
matrix:
# build and publish in parallel: linux/386, linux/amd64, windows/386, windows/amd64, darwin/amd64
goos: [linux, windows, darwin]
- goarch: ["386", amd64, arm]
+ goarch: ["386", amd64, arm, arm64]
exclude:
- goos: darwin
goarch: arm
diff --git a/.github/workflows/release.yml b/.github/workflows/release.yml
index 93fc465..d8b61de 100644
--- a/.github/workflows/release.yml
+++ b/.github/workflows/release.yml
@@ -10,7 +10,7 @@ jobs:
matrix:
# build and publish in parallel: linux/386, linux/amd64, windows/386, windows/amd64, darwin/386, darwin/amd64
goos: [linux, windows, darwin]
- goarch: ["386", amd64, arm]
+ goarch: ["386", amd64, arm, arm64]
exclude:
- goos: darwin
goarch: arm
@@ -30,4 +30,4 @@ jobs:
goarch: ${{ matrix.goarch }}
goversion: "https://golang.org/dl/go1.15.3.linux-amd64.tar.gz"
ldflags: -w -s -X "github.com/Mrs4s/go-cqhttp/coolq.Version=${{ env.RELEASE_VERSION }}"
-
\ No newline at end of file
+
From 0cd06daf088e9b3be5f1d82d7283c3fbcfe59371 Mon Sep 17 00:00:00 2001
From: Ink-33
Date: Wed, 13 Jan 2021 04:05:50 +0800
Subject: [PATCH 304/367] Update github action
---
.github/workflows/ci.yml | 4 ++++
.github/workflows/release.yml | 4 ++++
2 files changed, 8 insertions(+)
diff --git a/.github/workflows/ci.yml b/.github/workflows/ci.yml
index 1df0747..336a3cc 100644
--- a/.github/workflows/ci.yml
+++ b/.github/workflows/ci.yml
@@ -20,8 +20,12 @@ jobs:
exclude:
- goos: darwin
goarch: arm
+ - goos: darwin
+ goarch: arm64
- goos: darwin
goarch: "386"
+ - goos: windows
+ goarch: arm64
fail-fast: true
steps:
diff --git a/.github/workflows/release.yml b/.github/workflows/release.yml
index d8b61de..589d51a 100644
--- a/.github/workflows/release.yml
+++ b/.github/workflows/release.yml
@@ -14,8 +14,12 @@ jobs:
exclude:
- goos: darwin
goarch: arm
+ - goos: darwin
+ goarch: arm64
- goos: darwin
goarch: "386"
+ - goos: windows
+ goarch: arm64
steps:
- uses: actions/checkout@v2
From b075280d2b75aaf914c1e3ba55aed04dd5c28bc1 Mon Sep 17 00:00:00 2001
From: wdvxdr
Date: Wed, 13 Jan 2021 11:22:59 +0800
Subject: [PATCH 305/367] fix build
---
global/codec/codec_unsupportedarch.go | 2 +-
global/codec/codec_unsupportedos.go | 2 +-
2 files changed, 2 insertions(+), 2 deletions(-)
diff --git a/global/codec/codec_unsupportedarch.go b/global/codec/codec_unsupportedarch.go
index f905017..62dfc5a 100644
--- a/global/codec/codec_unsupportedarch.go
+++ b/global/codec/codec_unsupportedarch.go
@@ -4,7 +4,7 @@ package codec
import "errors"
-func Init() error {
+func Init(cachePath, codecPath string) error {
return errors.New("Unsupport arch now")
}
diff --git a/global/codec/codec_unsupportedos.go b/global/codec/codec_unsupportedos.go
index 89c415e..c045d14 100644
--- a/global/codec/codec_unsupportedos.go
+++ b/global/codec/codec_unsupportedos.go
@@ -4,7 +4,7 @@ package codec
import "errors"
-func Init() error {
+func Init(cachePath, codecPath string) error {
return errors.New("not support now")
}
From de4de5052d2539efb6f1af72fe447d514e8ca56d Mon Sep 17 00:00:00 2001
From: wdvxdr
Date: Wed, 13 Jan 2021 11:43:39 +0800
Subject: [PATCH 306/367] fix #557 & remove some goto
---
coolq/api.go | 2 +-
coolq/cqcode.go | 52 ++++++++++++++++++++++---------------------------
2 files changed, 24 insertions(+), 30 deletions(-)
diff --git a/coolq/api.go b/coolq/api.go
index 69dcc3f..c6a3295 100644
--- a/coolq/api.go
+++ b/coolq/api.go
@@ -354,7 +354,7 @@ func (bot *CQBot) CQSendPrivateMessage(userId int64, i interface{}, autoEscape b
var str string
if m, ok := i.(gjson.Result); ok {
if m.Type == gjson.JSON {
- elem := bot.ConvertObjectMessage(m, true)
+ elem := bot.ConvertObjectMessage(m, false)
mid := bot.SendPrivateMessage(userId, &message.SendingMessage{Elements: elem})
if mid == -1 {
return Failed(100, "SEND_MSG_API_ERROR", "请参考输出")
diff --git a/coolq/cqcode.go b/coolq/cqcode.go
index 171c92f..52866cd 100644
--- a/coolq/cqcode.go
+++ b/coolq/cqcode.go
@@ -895,9 +895,7 @@ func (bot *CQBot) makeImageOrVideoElem(d map[string]string, video, group bool) (
}
hasCacheFile:
if video {
- return &LocalVideoElement{
- File: cacheFile,
- }, nil
+ return &LocalVideoElement{File: cacheFile}, nil
}
return &LocalImageElement{File: cacheFile}, nil
}
@@ -917,21 +915,36 @@ func (bot *CQBot) makeImageOrVideoElem(d map[string]string, video, group bool) (
return nil, err
}
if video {
- goto videos
+ if info.Size() == 0 || info.Size() >= maxVideoSize {
+ return nil, errors.New("invalid video size")
+ }
+ return &LocalVideoElement{File: fu.Path}, nil
}
if info.Size() == 0 || info.Size() >= maxImageSize {
return nil, errors.New("invalid image size")
}
return &LocalImageElement{File: fu.Path}, nil
- videos:
- if info.Size() == 0 || info.Size() >= maxVideoSize {
- return nil, errors.New("invalid video size")
- }
- return &LocalVideoElement{File: fu.Path}, nil
}
rawPath := path.Join(global.IMAGE_PATH, f)
if video {
- goto video
+ rawPath = path.Join(global.VIDEO_PATH, f)
+ if !global.PathExists(rawPath) {
+ return nil, errors.New("invalid video")
+ }
+ if path.Ext(rawPath) == ".video" {
+ b, _ := ioutil.ReadFile(rawPath)
+ r := binary.NewReader(b)
+ return &LocalVideoElement{ShortVideoElement: message.ShortVideoElement{ // todo 检查缓存是否有效
+ Md5: r.ReadBytes(16),
+ ThumbMd5: r.ReadBytes(16),
+ Size: r.ReadInt32(),
+ ThumbSize: r.ReadInt32(),
+ Name: r.ReadString(),
+ Uuid: r.ReadAvailable(),
+ }}, nil
+ } else {
+ return &LocalVideoElement{File: rawPath}, nil
+ }
}
if strings.HasPrefix(f, "base64") {
b, err := base64.StdEncoding.DecodeString(strings.ReplaceAll(f, "base64://", ""))
@@ -1012,25 +1025,6 @@ func (bot *CQBot) makeImageOrVideoElem(d map[string]string, video, group bool) (
return rsp, nil
}
return nil, errors.New("invalid image")
-video:
- rawPath = path.Join(global.VIDEO_PATH, f)
- if !global.PathExists(rawPath) {
- return nil, errors.New("invalid video")
- }
- if path.Ext(rawPath) == ".video" {
- b, _ := ioutil.ReadFile(rawPath)
- r := binary.NewReader(b)
- return &LocalVideoElement{ShortVideoElement: message.ShortVideoElement{ // todo 检查缓存是否有效
- Md5: r.ReadBytes(16),
- ThumbMd5: r.ReadBytes(16),
- Size: r.ReadInt32(),
- ThumbSize: r.ReadInt32(),
- Name: r.ReadString(),
- Uuid: r.ReadAvailable(),
- }}, nil
- } else {
- return &LocalVideoElement{File: rawPath}, nil
- }
}
//makeShowPic 一种xml 方式发送的群消息图片
From 7a9a021c540ae45741cfcbda5158caa11a7d6a5f Mon Sep 17 00:00:00 2001
From: wdvxdr
Date: Wed, 13 Jan 2021 22:35:44 +0800
Subject: [PATCH 307/367] fix codec path
---
global/codec/codec.go | 16 ++++------------
1 file changed, 4 insertions(+), 12 deletions(-)
diff --git a/global/codec/codec.go b/global/codec/codec.go
index c6dcd1a..ef16cf7 100644
--- a/global/codec/codec.go
+++ b/global/codec/codec.go
@@ -14,7 +14,6 @@ import (
)
var (
- codecDir string
encoderPath string
cachePath string
)
@@ -37,23 +36,16 @@ func downloadCodec(url string, path string) (err error) {
}
func Init(cachePath, codecPath string) error {
- appPath, err := os.Executable()
- appPath = path.Dir(appPath)
- if err != nil {
- return err
- }
- cachePath = path.Join(appPath, cachePath)
- codecDir = path.Join(appPath, codecPath)
- if !fileExist(codecDir) {
- _ = os.MkdirAll(codecDir, os.ModePerm)
+ if !fileExist(codecPath) {
+ _ = os.MkdirAll(codecPath, os.ModePerm)
}
if !fileExist(cachePath) {
_ = os.MkdirAll(cachePath, os.ModePerm)
}
encoderFile := runtime.GOOS + "-" + runtime.GOARCH + "-encoder"
- encoderPath = path.Join(codecDir, encoderFile)
+ encoderPath = path.Join(codecPath, encoderFile)
if !fileExist(encoderPath) {
- if err = downloadCodec("https://cdn.jsdelivr.net/gh/wdvxdr1123/tosilk/codec/"+encoderFile, encoderPath); err != nil {
+ if err := downloadCodec("https://cdn.jsdelivr.net/gh/wdvxdr1123/tosilk/codec/"+encoderFile, encoderPath); err != nil {
return errors.New("下载依赖失败")
}
}
From 59cd986050025cc754bd46aff4784cfaa33a1d68 Mon Sep 17 00:00:00 2001
From: wdvxdr
Date: Wed, 13 Jan 2021 22:56:28 +0800
Subject: [PATCH 308/367] fix #561
---
global/codec.go | 2 +-
global/codec/codec.go | 47 ++++++++++++++-------------
global/codec/codec_unsupportedarch.go | 2 +-
global/codec/codec_unsupportedos.go | 2 +-
4 files changed, 27 insertions(+), 26 deletions(-)
diff --git a/global/codec.go b/global/codec.go
index 4f2648d..4bb9cfd 100644
--- a/global/codec.go
+++ b/global/codec.go
@@ -15,7 +15,7 @@ var useSilkCodec = true
func InitCodec() {
log.Info("正在加载silk编码器...")
- err := codec.Init("data/cache", "codec")
+ err := codec.Init()
if err != nil {
log.Error(err)
useSilkCodec = false
diff --git a/global/codec/codec.go b/global/codec/codec.go
index ef16cf7..695bbc9 100644
--- a/global/codec/codec.go
+++ b/global/codec/codec.go
@@ -13,16 +13,13 @@ import (
"runtime"
)
-var (
- encoderPath string
- cachePath string
+const (
+ silkCachePath = "data/cache"
+ encoderPath = "codec"
)
-func downloadCodec(url string, path string) (err error) {
+func downloadCodec(url string) (err error) {
resp, err := http.Get(url)
- if runtime.GOOS == "windows" {
- path = path + ".exe"
- }
if err != nil {
return
}
@@ -31,33 +28,37 @@ func downloadCodec(url string, path string) (err error) {
if err != nil {
return
}
- err = ioutil.WriteFile(path, body, os.ModePerm)
+ err = ioutil.WriteFile(getEncoderFilePath(), body, os.ModePerm)
return
}
-func Init(cachePath, codecPath string) error {
- if !fileExist(codecPath) {
- _ = os.MkdirAll(codecPath, os.ModePerm)
+func getEncoderFilePath() string {
+ encoderFile := path.Join(encoderPath, runtime.GOOS+"-"+runtime.GOARCH+"-encoder")
+ if runtime.GOOS == "windows" {
+ encoderFile = encoderFile + ".exe"
}
- if !fileExist(cachePath) {
- _ = os.MkdirAll(cachePath, os.ModePerm)
+ return encoderFile
+}
+
+func Init() error {
+ if !fileExist(silkCachePath) {
+ _ = os.MkdirAll(silkCachePath, os.ModePerm)
}
- encoderFile := runtime.GOOS + "-" + runtime.GOARCH + "-encoder"
- encoderPath = path.Join(codecPath, encoderFile)
if !fileExist(encoderPath) {
- if err := downloadCodec("https://cdn.jsdelivr.net/gh/wdvxdr1123/tosilk/codec/"+encoderFile, encoderPath); err != nil {
+ _ = os.MkdirAll(encoderPath, os.ModePerm)
+ }
+ p := getEncoderFilePath()
+ if !fileExist(p) {
+ if err := downloadCodec("https://cdn.jsdelivr.net/gh/wdvxdr1123/tosilk/codec/" + runtime.GOOS + "-" + runtime.GOARCH + "-encoder"); err != nil {
return errors.New("下载依赖失败")
}
}
- if runtime.GOOS == "windows" {
- encoderPath = encoderPath + ".exe"
- }
return nil
}
func EncodeToSilk(record []byte, tempName string, useCache bool) ([]byte, error) {
// 1. 写入缓存文件
- rawPath := path.Join(cachePath, tempName+".wav")
+ rawPath := path.Join(silkCachePath, tempName+".wav")
err := ioutil.WriteFile(rawPath, record, os.ModePerm)
if err != nil {
return nil, err
@@ -65,7 +66,7 @@ func EncodeToSilk(record []byte, tempName string, useCache bool) ([]byte, error)
defer os.Remove(rawPath)
// 2.转换pcm
- pcmPath := path.Join(cachePath, tempName+".pcm")
+ pcmPath := path.Join(silkCachePath, tempName+".pcm")
cmd := exec.Command("ffmpeg", "-i", rawPath, "-f", "s16le", "-ar", "24000", "-ac", "1", pcmPath)
if err = cmd.Run(); err != nil {
return nil, err
@@ -73,8 +74,8 @@ func EncodeToSilk(record []byte, tempName string, useCache bool) ([]byte, error)
defer os.Remove(pcmPath)
// 3. 转silk
- silkPath := path.Join(cachePath, tempName+".silk")
- cmd = exec.Command(encoderPath, pcmPath, silkPath, "-rate", "24000", "-quiet", "-tencent")
+ silkPath := path.Join(silkCachePath, tempName+".silk")
+ cmd = exec.Command(getEncoderFilePath(), pcmPath, silkPath, "-rate", "24000", "-quiet", "-tencent")
if err = cmd.Run(); err != nil {
return nil, err
}
diff --git a/global/codec/codec_unsupportedarch.go b/global/codec/codec_unsupportedarch.go
index 62dfc5a..f905017 100644
--- a/global/codec/codec_unsupportedarch.go
+++ b/global/codec/codec_unsupportedarch.go
@@ -4,7 +4,7 @@ package codec
import "errors"
-func Init(cachePath, codecPath string) error {
+func Init() error {
return errors.New("Unsupport arch now")
}
diff --git a/global/codec/codec_unsupportedos.go b/global/codec/codec_unsupportedos.go
index c045d14..89c415e 100644
--- a/global/codec/codec_unsupportedos.go
+++ b/global/codec/codec_unsupportedos.go
@@ -4,7 +4,7 @@ package codec
import "errors"
-func Init(cachePath, codecPath string) error {
+func Init() error {
return errors.New("not support now")
}
From 2156b6083bef400e351f4b3ad0bd1403bad3270a Mon Sep 17 00:00:00 2001
From: Mrs4s <1844812067@qq.com>
Date: Sat, 16 Jan 2021 06:00:33 +0800
Subject: [PATCH 309/367] update MiraiGo.
---
go.mod | 2 +-
go.sum | 2 ++
2 files changed, 3 insertions(+), 1 deletion(-)
diff --git a/go.mod b/go.mod
index ed66a25..dd55138 100644
--- a/go.mod
+++ b/go.mod
@@ -3,7 +3,7 @@ module github.com/Mrs4s/go-cqhttp
go 1.15
require (
- github.com/Mrs4s/MiraiGo v0.0.0-20210110160231-b83dd4cf38a5
+ github.com/Mrs4s/MiraiGo v0.0.0-20210115215446-8ee19f60514b
github.com/dustin/go-humanize v1.0.0
github.com/gin-contrib/pprof v1.3.0
github.com/gin-gonic/gin v1.6.3
diff --git a/go.sum b/go.sum
index b5ad233..ee2f971 100644
--- a/go.sum
+++ b/go.sum
@@ -2,6 +2,8 @@ cloud.google.com/go v0.26.0/go.mod h1:aQUYkXzVsufM+DwF1aE+0xfcU+56JwCaLick0ClmMT
github.com/BurntSushi/toml v0.3.1/go.mod h1:xHWCNGjB5oqiDr8zfno3MHue2Ht5sIBksp03qcyfWMU=
github.com/Mrs4s/MiraiGo v0.0.0-20210110160231-b83dd4cf38a5 h1:ee6LafOcoVM0nox2UxiIJgomgRP4pDJe5aeT/rq2o/U=
github.com/Mrs4s/MiraiGo v0.0.0-20210110160231-b83dd4cf38a5/go.mod h1:HW2e375lCQiRwtuA/LV6ZVTsi7co1TRfBn+L5Ow77Bo=
+github.com/Mrs4s/MiraiGo v0.0.0-20210115215446-8ee19f60514b h1:am1XzFc9Q5wSLLkrhjyDf5/IWq3qgNwJl2zzIRp2haw=
+github.com/Mrs4s/MiraiGo v0.0.0-20210115215446-8ee19f60514b/go.mod h1:HW2e375lCQiRwtuA/LV6ZVTsi7co1TRfBn+L5Ow77Bo=
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=
From bbd85eb219cd44139fdd866bddaaded104b7f5c8 Mon Sep 17 00:00:00 2001
From: ishkong
Date: Sun, 17 Jan 2021 00:28:31 +0800
Subject: [PATCH 310/367] Try force transcoding
Attempt to brute force ffmpeg transcoding after failure
---
global/codec.go | 9 +++++++--
1 file changed, 7 insertions(+), 2 deletions(-)
diff --git a/global/codec.go b/global/codec.go
index 4bb9cfd..b393f33 100644
--- a/global/codec.go
+++ b/global/codec.go
@@ -40,8 +40,13 @@ func EncoderSilk(data []byte) ([]byte, error) {
}
func EncodeMP4(src string, dst string) error { // -y 覆盖文件
- cmd := exec.Command("ffmpeg", "-i", src, "-y", "-c", "copy", "-map", "0", dst)
- return cmd.Run()
+ cmd1 := exec.Command("ffmpeg", "-i", src, "-y", "-c", "copy", "-map", "0", dst)
+ err := cmd1.Run()
+ if err != nil {
+ cmd2 := exec.Command("ffmpeg", "-i", src, "-y", "-c:v", "h264", "-c:a", "mp3", dst)
+ return cmd2.Run()
+ }
+ return err
}
func ExtractCover(src string, dst string) error {
From 77445fe96e0be5d32ad16cb02f7e5ad00c36f9d0 Mon Sep 17 00:00:00 2001
From: Ink-33
Date: Sun, 17 Jan 2021 01:03:43 +0800
Subject: [PATCH 311/367] update go.mod
---
coolq/bot.go | 2 +-
go.mod | 23 +++++++++++-
go.sum | 98 +++++++++++++++++++++++++++++++++++++++++++++++++---
3 files changed, 117 insertions(+), 6 deletions(-)
diff --git a/coolq/bot.go b/coolq/bot.go
index f8791e6..f033771 100644
--- a/coolq/bot.go
+++ b/coolq/bot.go
@@ -456,7 +456,7 @@ func (bot *CQBot) Release() {
}
func (bot *CQBot) dispatchEventMessage(m MSG) {
- if global.EventFilter != nil && global.EventFilter.Eval(global.MSG(m)) == false {
+ if global.EventFilter != nil && !global.EventFilter.Eval(global.MSG(m)){
log.Debug("Event filtered!")
return
}
diff --git a/go.mod b/go.mod
index dd55138..2c308e5 100644
--- a/go.mod
+++ b/go.mod
@@ -7,20 +7,41 @@ require (
github.com/dustin/go-humanize v1.0.0
github.com/gin-contrib/pprof v1.3.0
github.com/gin-gonic/gin v1.6.3
+ github.com/go-playground/validator/v10 v10.4.1 // indirect
+ github.com/golang/snappy v0.0.2 // indirect
+ github.com/google/go-cmp v0.5.4 // indirect
+ github.com/google/uuid v1.1.5 // indirect
github.com/gorilla/websocket v1.4.2
github.com/guonaihong/gout v0.1.4
github.com/hjson/hjson-go v3.1.0+incompatible
+ github.com/jonboulle/clockwork v0.2.2 // indirect
github.com/json-iterator/go v1.1.10
github.com/kardianos/osext v0.0.0-20190222173326-2bc1f35cddc0
+ github.com/kr/text v0.2.0 // indirect
+ github.com/leodido/go-urn v1.2.1 // indirect
github.com/lestrrat-go/file-rotatelogs v2.4.0+incompatible
- github.com/lestrrat-go/strftime v1.0.3 // indirect
+ github.com/lestrrat-go/strftime v1.0.4 // indirect
+ github.com/modern-go/concurrent v0.0.0-20180306012644-bacd9c7ef1dd // indirect
+ github.com/modern-go/reflect2 v1.0.1 // indirect
+ github.com/nxadm/tail v1.4.6 // indirect
+ github.com/onsi/ginkgo v1.14.2 // indirect
+ github.com/onsi/gomega v1.10.4 // indirect
github.com/pkg/errors v0.9.1
github.com/rifflock/lfshook v0.0.0-20180920164130-b9218ef580f5
github.com/sirupsen/logrus v1.7.0
+ github.com/stretchr/testify v1.7.0 // indirect
github.com/syndtr/goleveldb v1.0.0
github.com/t-tomalak/logrus-easy-formatter v0.0.0-20190827215021-c074f06c5816
github.com/tidwall/gjson v1.6.7
+ github.com/ugorji/go v1.2.3 // indirect
github.com/yinghau76/go-ascii-art v0.0.0-20190517192627-e7f465a30189
golang.org/x/crypto v0.0.0-20201221181555-eec23a3978ad
+ golang.org/x/net v0.0.0-20201224014010-6772e930b67b // indirect
+ golang.org/x/sys v0.0.0-20210113181707-4bcb84eeeb78 // indirect
+ golang.org/x/term v0.0.0-20201210144234-2321bbc49cbf // indirect
+ golang.org/x/text v0.3.5 // indirect
golang.org/x/time v0.0.0-20201208040808-7e3f01d25324
+ gopkg.in/check.v1 v1.0.0-20201130134442-10cb98267c6c // indirect
+ gopkg.in/yaml.v2 v2.4.0 // indirect
+ gopkg.in/yaml.v3 v3.0.0-20210107192922-496545a6307b // indirect
)
diff --git a/go.sum b/go.sum
index ee2f971..1f500c5 100644
--- a/go.sum
+++ b/go.sum
@@ -1,18 +1,21 @@
cloud.google.com/go v0.26.0/go.mod h1:aQUYkXzVsufM+DwF1aE+0xfcU+56JwCaLick0ClmMTw=
github.com/BurntSushi/toml v0.3.1/go.mod h1:xHWCNGjB5oqiDr8zfno3MHue2Ht5sIBksp03qcyfWMU=
-github.com/Mrs4s/MiraiGo v0.0.0-20210110160231-b83dd4cf38a5 h1:ee6LafOcoVM0nox2UxiIJgomgRP4pDJe5aeT/rq2o/U=
-github.com/Mrs4s/MiraiGo v0.0.0-20210110160231-b83dd4cf38a5/go.mod h1:HW2e375lCQiRwtuA/LV6ZVTsi7co1TRfBn+L5Ow77Bo=
github.com/Mrs4s/MiraiGo v0.0.0-20210115215446-8ee19f60514b h1:am1XzFc9Q5wSLLkrhjyDf5/IWq3qgNwJl2zzIRp2haw=
github.com/Mrs4s/MiraiGo v0.0.0-20210115215446-8ee19f60514b/go.mod h1:HW2e375lCQiRwtuA/LV6ZVTsi7co1TRfBn+L5Ow77Bo=
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/creack/pty v1.1.9/go.mod h1:oKZEueFk5CKHvIhNR5MUki03XCEU+Q6VDXinZuGJ33E=
github.com/davecgh/go-spew v1.1.0/go.mod h1:J7Y8YcW2NihsgmVo/mv3lAwl/skON4iLHjSsI+c5H38=
+github.com/davecgh/go-spew v1.1.1 h1:vj9j/u1bqnvCEfJOwUhtlOARqs3+rkHYY13jYWTU97c=
github.com/davecgh/go-spew v1.1.1/go.mod h1:J7Y8YcW2NihsgmVo/mv3lAwl/skON4iLHjSsI+c5H38=
github.com/dustin/go-humanize v1.0.0 h1:VSnTsYCnlFHaM2/igO1h6X3HA71jcobQuxemgkq4zYo=
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/fsnotify/fsnotify v1.4.7 h1:IXs+QLmnXW2CcXuY+8Mzv/fWEsPGWxqefPtCP5CnV9I=
github.com/fsnotify/fsnotify v1.4.7/go.mod h1:jwhsz4b93w/PPRr/qN1Yymfu8t87LnFCMoQvtojpjFo=
+github.com/fsnotify/fsnotify v1.4.9 h1:hsms1Qyu0jgnwNXIxa+/V/PDsU6CfLf6CNO8H7IWoS4=
+github.com/fsnotify/fsnotify v1.4.9/go.mod h1:znqG4EE+3YCdAaPaxE2ZRY/06pZUdp0tY4IgpuI1SZQ=
github.com/gin-contrib/pprof v1.3.0 h1:G9eK6HnbkSqDZBYbzG4wrjCsA4e+cvYAHUZw6W+W9K0=
github.com/gin-contrib/pprof v1.3.0/go.mod h1:waMjT1H9b179t3CxuG1cV3DHpga6ybizwfBaM5OXaB0=
github.com/gin-contrib/sse v0.1.0 h1:Y/yl/+YNO8GZSjAhjMsSuLt29uWRFHdHYUb5lYOV9qE=
@@ -21,6 +24,7 @@ github.com/gin-gonic/gin v1.6.0/go.mod h1:75u5sXoLsGZoRN5Sgbi1eraJ4GU3++wFwWzhwv
github.com/gin-gonic/gin v1.6.2/go.mod h1:75u5sXoLsGZoRN5Sgbi1eraJ4GU3++wFwWzhwvtwp4M=
github.com/gin-gonic/gin v1.6.3 h1:ahKqKTFpO5KTPHxWZjEdPScmYaGtLo8Y4DMHoEsnp14=
github.com/gin-gonic/gin v1.6.3/go.mod h1:75u5sXoLsGZoRN5Sgbi1eraJ4GU3++wFwWzhwvtwp4M=
+github.com/go-playground/assert/v2 v2.0.1 h1:MsBgLAaY856+nPRTKrp3/OZK38U/wa0CcBYNjji3q3A=
github.com/go-playground/assert/v2 v2.0.1/go.mod h1:VDjEfimB/XKnb+ZQfWdccd7VUvScMdVu0Titje2rxJ4=
github.com/go-playground/locales v0.13.0 h1:HyWk6mgj5qFqCT5fjGBuRArbVDfE4hi8+e8ceBS/t7Q=
github.com/go-playground/locales v0.13.0/go.mod h1:taPMhCMXrRLJO55olJkUXHZBHCxTMfnGwq/HNwmWNS8=
@@ -28,6 +32,8 @@ github.com/go-playground/universal-translator v0.17.0 h1:icxd5fm+REJzpZx7ZfpaD87
github.com/go-playground/universal-translator v0.17.0/go.mod h1:UkSxE5sNxxRwHyU+Scu5vgOQjsIJAF8j9muTVoKLVtA=
github.com/go-playground/validator/v10 v10.2.0 h1:KgJ0snyC2R9VXYN2rneOtQcw5aHQB1Vv0sFl1UcHBOY=
github.com/go-playground/validator/v10 v10.2.0/go.mod h1:uOYAAleCW8F/7oMFd6aG0GOhaH6EGOAJShg8Id5JGkI=
+github.com/go-playground/validator/v10 v10.4.1 h1:pH2c5ADXtd66mxoE0Zm9SUhxE20r7aM3F26W0hOn+GE=
+github.com/go-playground/validator/v10 v10.4.1/go.mod h1:nlOn6nFhuKACm19sB/8EGNn9GlaMV7XkbRSipzJ0Ii4=
github.com/golang/glog v0.0.0-20160126235308-23def4e6c14b/go.mod h1:SBH7ygxi8pfUlaOkMMuAQtPIUF8ecWP5IEl/CR7VP2Q=
github.com/golang/mock v1.1.1/go.mod h1:oTYuIxOrZwtPieC+H1uAHpcLFnEyAGVDL/k47Jfbm0A=
github.com/golang/protobuf v1.2.0/go.mod h1:6lQm79b+lXiMfvg/cZm0SGofjICqVBUtrP5yJMmIC1U=
@@ -39,51 +45,91 @@ github.com/golang/protobuf v1.4.0-rc.2/go.mod h1:LlEzMj4AhA7rCAGe4KMBDvJI+AwstrU
github.com/golang/protobuf v1.4.0-rc.4.0.20200313231945-b860323f09d0/go.mod h1:WU3c8KckQ9AFe+yFwt9sWVRKCVIyN9cPHBJSNnbL67w=
github.com/golang/protobuf v1.4.0/go.mod h1:jodUvKwWbYaEsadDk5Fwe5c77LiNKVO9IDvqG2KuDX0=
github.com/golang/protobuf v1.4.1/go.mod h1:U8fpvMrcmy5pZrNK1lt4xCsGvpyWQ/VVv6QDs8UjoX8=
+github.com/golang/protobuf v1.4.2/go.mod h1:oDoupMAO8OvCJWAcko0GGGIgR6R6ocIYbsSw735rRwI=
github.com/golang/protobuf v1.4.3 h1:JjCZWpVbqXDqFVmTfYWEVTMIYrL/NPdPSCHPJ0T/raM=
github.com/golang/protobuf v1.4.3/go.mod h1:oDoupMAO8OvCJWAcko0GGGIgR6R6ocIYbsSw735rRwI=
github.com/golang/snappy v0.0.0-20180518054509-2e65f85255db h1:woRePGFeVFfLKN/pOkfl+p/TAqKOfFu+7KPlMVpok/w=
github.com/golang/snappy v0.0.0-20180518054509-2e65f85255db/go.mod h1:/XxbfmMg8lxefKM7IXC3fBNl/7bRcc72aCRzEWrmP2Q=
+github.com/golang/snappy v0.0.2 h1:aeE13tS0IiQgFjYdoL8qN3K1N2bXXtI6Vi51/y7BpMw=
+github.com/golang/snappy v0.0.2/go.mod h1:/XxbfmMg8lxefKM7IXC3fBNl/7bRcc72aCRzEWrmP2Q=
github.com/google/go-cmp v0.2.0/go.mod h1:oXzfMopK8JAjlY9xF4vHSVASa0yLyX7SntLO5aqRK0M=
github.com/google/go-cmp v0.3.0/go.mod h1:8QqcDgzrUqlUb/G2PQTWiueGozuR1884gddMywk6iLU=
github.com/google/go-cmp v0.3.1/go.mod h1:8QqcDgzrUqlUb/G2PQTWiueGozuR1884gddMywk6iLU=
github.com/google/go-cmp v0.4.0/go.mod h1:v8dTdLbMG2kIc/vJvl+f65V22dbkXbowE6jgT/gNBxE=
+github.com/google/go-cmp v0.5.0 h1:/QaMHBdZ26BB3SSst0Iwl10Epc+xhTquomWX0oZEB6w=
github.com/google/go-cmp v0.5.0/go.mod h1:v8dTdLbMG2kIc/vJvl+f65V22dbkXbowE6jgT/gNBxE=
+github.com/google/go-cmp v0.5.4 h1:L8R9j+yAqZuZjsqh/z+F1NCffTKKLShY6zXTItVIZ8M=
+github.com/google/go-cmp v0.5.4/go.mod h1:v8dTdLbMG2kIc/vJvl+f65V22dbkXbowE6jgT/gNBxE=
github.com/google/gofuzz v1.0.0/go.mod h1:dBl0BpW6vV/+mYPU4Po3pmUjxk6FQPldtuIdl/M65Eg=
+github.com/google/uuid v1.1.1 h1:Gkbcsh/GbpXz7lPftLA3P6TYMwjCLYm83jiFQZF/3gY=
github.com/google/uuid v1.1.1/go.mod h1:TIyPZe4MgqvfeYDBFedMoGGpEw/LqOeaOT+nhxU+yHo=
+github.com/google/uuid v1.1.5 h1:kxhtnfFVi+rYdOALN0B3k9UT86zVJKfBimRaciULW4I=
+github.com/google/uuid v1.1.5/go.mod h1:TIyPZe4MgqvfeYDBFedMoGGpEw/LqOeaOT+nhxU+yHo=
github.com/gorilla/websocket v1.4.2 h1:+/TMaTYc4QFitKJxsQ7Yye35DkWvkdLcvGKqM+x0Ufc=
github.com/gorilla/websocket v1.4.2/go.mod h1:YR8l580nyteQvAITg2hZ9XVh4b55+EU/adAjf1fMHhE=
github.com/guonaihong/gout v0.1.4 h1:uBBoyztMX9okC27OQxqhn6bZ0ROkGyvnEIHwtp3TM4g=
github.com/guonaihong/gout v0.1.4/go.mod h1:0rFYAYyzbcxEg11eY2qUbffJs7hHRPeugAnlVYSp8Ic=
github.com/hjson/hjson-go v3.1.0+incompatible h1:DY/9yE8ey8Zv22bY+mHV1uk2yRy0h8tKhZ77hEdi0Aw=
github.com/hjson/hjson-go v3.1.0+incompatible/go.mod h1:qsetwF8NlsTsOTwZTApNlTCerV+b2GjYRRcIk4JMFio=
+github.com/hpcloud/tail v1.0.0 h1:nfCOvKYfkgYP8hkirhJocXT2+zOD8yUNjXaWfTlyFKI=
github.com/hpcloud/tail v1.0.0/go.mod h1:ab1qPbhIpdTxEkNHXyeSf5vhxWSCs/tWer42PpOxQnU=
+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.9/go.mod h1:KdQUCv79m/52Kvf8AW2vK1V8akMuk1QjK/uOdHXbAo4=
github.com/json-iterator/go v1.1.10 h1:Kz6Cvnvv2wGdaG/V8yMvfkmNiXq9Ya2KUv4rouJJr68=
github.com/json-iterator/go v1.1.10/go.mod h1:KdQUCv79m/52Kvf8AW2vK1V8akMuk1QjK/uOdHXbAo4=
github.com/kardianos/osext v0.0.0-20190222173326-2bc1f35cddc0 h1:iQTw/8FWTuc7uiaSepXwyf3o52HaUYcV+Tu66S3F5GA=
github.com/kardianos/osext v0.0.0-20190222173326-2bc1f35cddc0/go.mod h1:1NbS8ALrpOvjt0rHPNLyCIeMtbizbir8U//inJ+zuB8=
github.com/konsorten/go-windows-terminal-sequences v1.0.1/go.mod h1:T0+1ngSBFLxvqU3pZ+m/2kptfBszLMUkC4ZK/EgS/cQ=
+github.com/kr/pretty v0.2.1 h1:Fmg33tUaq4/8ym9TJN1x7sLJnHVwhP33CNkpYV/7rwI=
+github.com/kr/pretty v0.2.1/go.mod h1:ipq/a2n7PKx3OHsz4KJII5eveXtPO4qwEXGdVfWzfnI=
+github.com/kr/pty v1.1.1/go.mod h1:pFQYn66WHrOpPYNljwOMqo10TkYh1fy3cYio2l3bCsQ=
+github.com/kr/text v0.1.0 h1:45sCR5RtlFHMR4UwH9sdQ5TC8v0qDQCHnXt+kaKSTVE=
+github.com/kr/text v0.1.0/go.mod h1:4Jbv+DJW3UT/LiOwJeYQe1efqtUx/iVham/4vfdArNI=
+github.com/kr/text v0.2.0 h1:5Nx0Ya0ZqY2ygV366QzturHI13Jq95ApcVaJBhpS+AY=
+github.com/kr/text v0.2.0/go.mod h1:eLer722TekiGuMkidMxC/pM04lWEeraHUUmBw8l2grE=
github.com/leodido/go-urn v1.2.0 h1:hpXL4XnriNwQ/ABnpepYM/1vCLWNDfUNts8dX3xTG6Y=
github.com/leodido/go-urn v1.2.0/go.mod h1:+8+nEpDfqqsY+g338gtMEUOtuK+4dEMhiQEgxpxOKII=
+github.com/leodido/go-urn v1.2.1 h1:BqpAaACuzVSgi/VLzGZIobT2z4v53pjosyNd9Yv6n/w=
+github.com/leodido/go-urn v1.2.1/go.mod h1:zt4jvISO2HfUBqxjfIshjdMTYS56ZS/qv49ictyFfxY=
+github.com/lestrrat-go/envload v0.0.0-20180220234015-a3eb8ddeffcc h1:RKf14vYWi2ttpEmkA4aQ3j4u9dStX2t4M8UM6qqNsG8=
github.com/lestrrat-go/envload v0.0.0-20180220234015-a3eb8ddeffcc/go.mod h1:kopuH9ugFRkIXf3YoqHKyrJ9YfUFsckUU9S7B+XP+is=
github.com/lestrrat-go/file-rotatelogs v2.4.0+incompatible h1:Y6sqxHMyB1D2YSzWkLibYKgg+SwmyFU9dF2hn6MdTj4=
github.com/lestrrat-go/file-rotatelogs v2.4.0+incompatible/go.mod h1:ZQnN8lSECaebrkQytbHj4xNgtg8CR7RYXnPok8e0EHA=
-github.com/lestrrat-go/strftime v1.0.3 h1:qqOPU7y+TM8Y803I8fG9c/DyKG3xH/xkng6keC1015Q=
-github.com/lestrrat-go/strftime v1.0.3/go.mod h1:E1nN3pCbtMSu1yjSVeyuRFVm/U0xoR76fd03sz+Qz4g=
+github.com/lestrrat-go/strftime v1.0.4 h1:T1Rb9EPkAhgxKqbcMIPguPq8glqXTA1koF8n9BHElA8=
+github.com/lestrrat-go/strftime v1.0.4/go.mod h1:E1nN3pCbtMSu1yjSVeyuRFVm/U0xoR76fd03sz+Qz4g=
github.com/mattn/go-isatty v0.0.12 h1:wuysRhFDzyxgEmMf5xjvJ2M9dZoWAXNNr5LSBS7uHXY=
github.com/mattn/go-isatty v0.0.12/go.mod h1:cbi8OIDigv2wuxKPP5vlRcQ1OAZbq2CE4Kysco4FUpU=
github.com/modern-go/concurrent v0.0.0-20180228061459-e0a39a4cb421 h1:ZqeYNhU3OHLH3mGKHDcjJRFFRrJa6eAM5H+CtDdOsPc=
github.com/modern-go/concurrent v0.0.0-20180228061459-e0a39a4cb421/go.mod h1:6dJC0mAP4ikYIbvyc7fijjWJddQyLn8Ig3JB5CqoB9Q=
+github.com/modern-go/concurrent v0.0.0-20180306012644-bacd9c7ef1dd h1:TRLaZ9cD/w8PVh93nsPXa1VrQ6jlwL5oN8l14QlcNfg=
+github.com/modern-go/concurrent v0.0.0-20180306012644-bacd9c7ef1dd/go.mod h1:6dJC0mAP4ikYIbvyc7fijjWJddQyLn8Ig3JB5CqoB9Q=
github.com/modern-go/reflect2 v0.0.0-20180701023420-4b7aa43c6742 h1:Esafd1046DLDQ0W1YjYsBW+p8U2u7vzgW2SQVmlNazg=
github.com/modern-go/reflect2 v0.0.0-20180701023420-4b7aa43c6742/go.mod h1:bx2lNnkwVCuqBIxFjflWJWanXIb3RllmbCylyMrvgv0=
+github.com/modern-go/reflect2 v1.0.1 h1:9f412s+6RmYXLWZSEzVVgPGK7C2PphHj5RJrvfx9AWI=
+github.com/modern-go/reflect2 v1.0.1/go.mod h1:bx2lNnkwVCuqBIxFjflWJWanXIb3RllmbCylyMrvgv0=
github.com/nfnt/resize v0.0.0-20180221191011-83c6a9932646 h1:zYyBkD/k9seD2A7fsi6Oo2LfFZAehjjQMERAvZLEDnQ=
github.com/nfnt/resize v0.0.0-20180221191011-83c6a9932646/go.mod h1:jpp1/29i3P1S/RLdc7JQKbRpFeM1dOBd8T9ki5s+AY8=
+github.com/nxadm/tail v1.4.4 h1:DQuhQpB1tVlglWS2hLQ5OV6B5r8aGxSrPc5Qo6uTN78=
+github.com/nxadm/tail v1.4.4/go.mod h1:kenIhsEOeOJmVchQTgglprH7qJGnHDVpk1VPCcaMI8A=
+github.com/nxadm/tail v1.4.6 h1:11TGpSHY7Esh/i/qnq02Jo5oVrI1Gue8Slbq0ujPZFQ=
+github.com/nxadm/tail v1.4.6/go.mod h1:+ncqLTQzXmGhMZNUePPaPqPvBxHAIsmXswZKocGu+AU=
github.com/onsi/ginkgo v1.6.0/go.mod h1:lLunBs/Ym6LB5Z9jYTR76FiuTmxDTDusOGeTQH+WWjE=
+github.com/onsi/ginkgo v1.7.0 h1:WSHQ+IS43OoUrWtD1/bbclrwK8TTH5hzp+umCiuxHgs=
github.com/onsi/ginkgo v1.7.0/go.mod h1:lLunBs/Ym6LB5Z9jYTR76FiuTmxDTDusOGeTQH+WWjE=
+github.com/onsi/ginkgo v1.12.1/go.mod h1:zj2OWP4+oCPe1qIXoGWkgMRwljMUYCdkwsT2108oapk=
+github.com/onsi/ginkgo v1.14.2 h1:8mVmC9kjFFmA8H4pKMUhcblgifdkOIXPvbhN1T36q1M=
+github.com/onsi/ginkgo v1.14.2/go.mod h1:iSB4RoI2tjJc9BBv4NKIKWKya62Rps+oPG/Lv9klQyY=
+github.com/onsi/gomega v1.4.3 h1:RE1xgDvH7imwFD45h+u2SgIfERHlS2yNG4DObb5BSKU=
github.com/onsi/gomega v1.4.3/go.mod h1:ex+gbHU/CVuBBDIJjb2X0qEXbFg53c61hWP/1CpauHY=
+github.com/onsi/gomega v1.7.1/go.mod h1:XdKZgCCFLUoM/7CFJVPcG8C1xQ1AJ0vpAezJrB7JYyY=
+github.com/onsi/gomega v1.10.1/go.mod h1:iN09h71vgCQne3DLsj+A5owkum+a2tYe+TOCB1ybHNo=
+github.com/onsi/gomega v1.10.4 h1:NiTx7EEvBzu9sFOD1zORteLSt3o8gnlvZZwSE9TnY9U=
+github.com/onsi/gomega v1.10.4/go.mod h1:g/HbgYopi++010VEqkFgJHKC09uJiW9UkXvMUuKHUCQ=
github.com/pkg/errors v0.8.1/go.mod h1:bwawxfHBFNV+L2hUp1rHADufV3IMtnDRdf1r5NINEl0=
github.com/pkg/errors v0.9.1 h1:FEBLx1zS214owpjy7qsBeixbURkuhQAwrK5UwLGTwt4=
github.com/pkg/errors v0.9.1/go.mod h1:bwawxfHBFNV+L2hUp1rHADufV3IMtnDRdf1r5NINEl0=
+github.com/pmezard/go-difflib v1.0.0 h1:4DBwDE0NGyQoBHbLQYPwSUPoCMWR5BEzIk/f1lZbAQM=
github.com/pmezard/go-difflib v1.0.0/go.mod h1:iKH77koFhYxTK1pcRnkKkqfTogsbg7gZNVY4sRDYZ/4=
github.com/prometheus/client_model v0.0.0-20190812154241-14fe0d1b01d4/go.mod h1:xMI15A0UPsDsEKsMN9yxemIoYk6Tm2C1GtYGdfGttqA=
github.com/rifflock/lfshook v0.0.0-20180920164130-b9218ef580f5 h1:mZHayPoR0lNmnHyvtYjDeq0zlVHn9K/ZXoy17ylucdo=
@@ -95,7 +141,11 @@ github.com/stretchr/objx v0.1.0/go.mod h1:HFkY916IF+rwdDfMAkV7OtwuqBVzrE8GR6GFx+
github.com/stretchr/objx v0.1.1/go.mod h1:HFkY916IF+rwdDfMAkV7OtwuqBVzrE8GR6GFx+wExME=
github.com/stretchr/testify v1.2.2/go.mod h1:a8OnRcib4nhh0OaRAV+Yts87kKdq0PP7pXfy6kDkUVs=
github.com/stretchr/testify v1.3.0/go.mod h1:M5WIy9Dh21IEIfnGCwXGc5bZfKNJtfHm1UVUgZn+9EI=
+github.com/stretchr/testify v1.4.0 h1:2E4SXV/wtOkTonXsotYi4li6zVWxYlZuYNCXe9XRJyk=
github.com/stretchr/testify v1.4.0/go.mod h1:j7eGeouHqKxXV5pUuKE4zz7dFj8WfuZ+81PSLYec5m4=
+github.com/stretchr/testify v1.6.1/go.mod h1:6Fq8oRcR53rry900zMqJjRRixrwX3KX962/h/Wwjteg=
+github.com/stretchr/testify v1.7.0 h1:nwc3DEeHmmLAfoZucVR881uASk0Mfjw8xYJ99tb5CcY=
+github.com/stretchr/testify v1.7.0/go.mod h1:6Fq8oRcR53rry900zMqJjRRixrwX3KX962/h/Wwjteg=
github.com/syndtr/goleveldb v1.0.0 h1:fBdIW9lB4Iz0n9khmH8w27SJ3QEJ7+IgjPEwGSZiFdE=
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=
@@ -110,11 +160,16 @@ github.com/tidwall/pretty v1.0.2 h1:Z7S3cePv9Jwm1KwS0513MRaoUe3S01WPbLNV40pwWZU=
github.com/tidwall/pretty v1.0.2/go.mod h1:XNkn88O1ChpSDQmQeStsy+sBenx6DDtFZJxhVysOjyk=
github.com/ugorji/go v1.1.7 h1:/68gy2h+1mWMrwZFeD1kQialdSzAb432dtpeJ42ovdo=
github.com/ugorji/go v1.1.7/go.mod h1:kZn38zHttfInRq0xu/PH0az30d+z6vm202qpg1oXVMw=
+github.com/ugorji/go v1.2.3 h1:WbFSXLxDFKVN69Sk8t+XHGzVCD7R8UoAATR8NqZgTbk=
+github.com/ugorji/go v1.2.3/go.mod h1:5l8GZ8hZvmL4uMdy+mhCO1LjswGRYco9Q3HfuisB21A=
github.com/ugorji/go/codec v1.1.7 h1:2SvQaVZ1ouYrrKKwoSk2pzd4A9evlKJb9oTL+OaLUSs=
github.com/ugorji/go/codec v1.1.7/go.mod h1:Ax+UKWsSmolVDwsd+7N3ZtXu+yMGCf907BLYF3GoBXY=
+github.com/ugorji/go/codec v1.2.3 h1:/mVYEV+Jo3IZKeA5gBngN0AvNnQltEDkR+eQikkWQu0=
+github.com/ugorji/go/codec v1.2.3/go.mod h1:5FxzDJIgeiWJZslYHPj+LS1dq1ZBQVelZFnjsFGI/Uc=
github.com/yinghau76/go-ascii-art v0.0.0-20190517192627-e7f465a30189 h1:4UJw9if55Fu3HOwbfcaQlJ27p3oeJU2JZqoeT3ITJQk=
github.com/yinghau76/go-ascii-art v0.0.0-20190517192627-e7f465a30189/go.mod h1:rIrm5geMiBhPQkdfUm8gDFi/WiHneOp1i9KjmJqc+9I=
golang.org/x/crypto v0.0.0-20190308221718-c2843e01d9a2/go.mod h1:djNgcEr1/C05ACkg1iLfiJU5Ep61QUkGW8qpdssI0+w=
+golang.org/x/crypto v0.0.0-20200622213623-75b288015ac9/go.mod h1:LzIPMQfyMNhhGPhUkYOs5KpL4U8rLKemX1yGLhDgUto=
golang.org/x/crypto v0.0.0-20201221181555-eec23a3978ad h1:DN0cp81fZ3njFcrLCytUHRSUkqBjfTo4Tx9RJTWs0EY=
golang.org/x/crypto v0.0.0-20201221181555-eec23a3978ad/go.mod h1:jdWPYTVW3xRLrWPugEBEK3UY2ZEsg3UU495nc5E+M+I=
golang.org/x/exp v0.0.0-20190121172915-509febef88a4/go.mod h1:CJ0aWSM057203Lf6IL+f9T1iT9GByDxfZKAQTCR3kQA=
@@ -129,6 +184,10 @@ golang.org/x/net v0.0.0-20190311183353-d8887717615a/go.mod h1:t9HGtf8HONx5eT2rtn
golang.org/x/net v0.0.0-20190404232315-eb5bcb51f2a3/go.mod h1:t9HGtf8HONx5eT2rtn7q6eTqICYqUVnKs3thJo3Qplg=
golang.org/x/net v0.0.0-20200114155413-6afb5195e5aa h1:F+8P+gmewFQYRk6JoLQLwjBCTu3mcIURZfNkVweuRKA=
golang.org/x/net v0.0.0-20200114155413-6afb5195e5aa/go.mod h1:z5CRVTTTmAJ677TzLLGU+0bjPO0LkuOLi4/5GtJWs/s=
+golang.org/x/net v0.0.0-20200520004742-59133d7f0dd7/go.mod h1:qpuaurCH72eLCgpAm/N6yyVIVM9cpaDIP3A8BGJEC5A=
+golang.org/x/net v0.0.0-20201202161906-c7110b5ffcbb/go.mod h1:sp8m0HH+o8qH0wwXwYZr8TS3Oi6o0r6Gce1SSxlDquU=
+golang.org/x/net v0.0.0-20201224014010-6772e930b67b h1:iFwSg7t5GZmB/Q5TjiEAsdoLDrdJRC1RiF2WhuV29Qw=
+golang.org/x/net v0.0.0-20201224014010-6772e930b67b/go.mod h1:m0MpNAwzfU5UDzcl9v0D8zg8gWTRqZa9RBIspLL5mdg=
golang.org/x/oauth2 v0.0.0-20180821212333-d2e6202438be/go.mod h1:N/0e6XlmueqKjAGxoOufVs8QHGRruUQn6yWY3a++T0U=
golang.org/x/sync v0.0.0-20180314180146-1d60e4601c6f/go.mod h1:RxMgew5VJxzue5/jJTE5uejpjVlOe/izrB70Jof72aM=
golang.org/x/sync v0.0.0-20181108010431-42b317875d0f/go.mod h1:RxMgew5VJxzue5/jJTE5uejpjVlOe/izrB70Jof72aM=
@@ -136,14 +195,31 @@ golang.org/x/sync v0.0.0-20190423024810-112230192c58/go.mod h1:RxMgew5VJxzue5/jJ
golang.org/x/sys v0.0.0-20180830151530-49385e6e1522/go.mod h1:STP8DvDyc/dI5b8T5hshtkjS+E42TnysNCUPdjciGhY=
golang.org/x/sys v0.0.0-20180909124046-d0be0721c37e/go.mod h1:STP8DvDyc/dI5b8T5hshtkjS+E42TnysNCUPdjciGhY=
golang.org/x/sys v0.0.0-20190215142949-d0b11bdaac8a/go.mod h1:STP8DvDyc/dI5b8T5hshtkjS+E42TnysNCUPdjciGhY=
+golang.org/x/sys v0.0.0-20190412213103-97732733099d/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs=
golang.org/x/sys v0.0.0-20190422165155-953cdadca894/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs=
+golang.org/x/sys v0.0.0-20190904154756-749cb33beabd/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs=
+golang.org/x/sys v0.0.0-20191005200804-aed5e4c7ecf9/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs=
golang.org/x/sys v0.0.0-20191026070338-33540a1f6037/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs=
+golang.org/x/sys v0.0.0-20191120155948-bd437916bb0e/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs=
golang.org/x/sys v0.0.0-20200116001909-b77594299b42 h1:vEOn+mP2zCOVzKckCZy6YsCtDblrpj/w7B9nxGNELpg=
golang.org/x/sys v0.0.0-20200116001909-b77594299b42/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs=
+golang.org/x/sys v0.0.0-20200323222414-85ca7c5b95cd/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs=
+golang.org/x/sys v0.0.0-20200519105757-fe76b779f299/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs=
+golang.org/x/sys v0.0.0-20200930185726-fdedc70b468f/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs=
+golang.org/x/sys v0.0.0-20201119102817-f84b799fce68/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs=
+golang.org/x/sys v0.0.0-20210113181707-4bcb84eeeb78 h1:nVuTkr9L6Bq62qpUqKo/RnZCFfzDBL0bYo6w9OJUqZY=
+golang.org/x/sys v0.0.0-20210113181707-4bcb84eeeb78/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs=
golang.org/x/term v0.0.0-20201117132131-f5c789dd3221 h1:/ZHdbVpdR/jk3g30/d4yUL0JU9kksj8+F/bnQUVLGDM=
golang.org/x/term v0.0.0-20201117132131-f5c789dd3221/go.mod h1:Nr5EML6q2oocZ2LXRh80K7BxOlk5/8JxuGnuhpl+muw=
+golang.org/x/term v0.0.0-20201126162022-7de9c90e9dd1/go.mod h1:bj7SfCRtBDWHUb9snDiAeCFNEtKQo2Wmx5Cou7ajbmo=
+golang.org/x/term v0.0.0-20201210144234-2321bbc49cbf h1:MZ2shdL+ZM/XzY3ZGOnh4Nlpnxz5GSOhOmtHo3iPU6M=
+golang.org/x/term v0.0.0-20201210144234-2321bbc49cbf/go.mod h1:bj7SfCRtBDWHUb9snDiAeCFNEtKQo2Wmx5Cou7ajbmo=
golang.org/x/text v0.3.0/go.mod h1:NqM8EUOU14njkJ3fqMW+pc6Ldnwhi/IjpwHt7yyuwOQ=
+golang.org/x/text v0.3.2 h1:tW2bmiBqwgJj/UpqtC8EpXEZVYOwU0yG4iWbprSVAcs=
golang.org/x/text v0.3.2/go.mod h1:bEr9sfX3Q8Zfm5fL9x+3itogRgK3+ptLWKqgva+5dAk=
+golang.org/x/text v0.3.3/go.mod h1:5Zoc/QRtKVWzQhOtBMvqHzDpF6irO9z98xDceosuGiQ=
+golang.org/x/text v0.3.5 h1:i6eZZ+zk0SOf0xgBpEpPD18qWcJda6q1sxt3S0kzyUQ=
+golang.org/x/text v0.3.5/go.mod h1:5Zoc/QRtKVWzQhOtBMvqHzDpF6irO9z98xDceosuGiQ=
golang.org/x/time v0.0.0-20201208040808-7e3f01d25324 h1:Hir2P/De0WpUhtrKGGjvSb2YxUgyZ7EFOSLIcSSpiwE=
golang.org/x/time v0.0.0-20201208040808-7e3f01d25324/go.mod h1:tRJNPiyCQ0inRvYxbN9jk5I+vvW/OXSQhTDSoE431IQ=
golang.org/x/tools v0.0.0-20180917221912-90fa682c2a6e/go.mod h1:n7NCudcB/nEzxVGmLbDWY5pfWTLqBcC2KZ6jyYvM4mQ=
@@ -152,6 +228,7 @@ golang.org/x/tools v0.0.0-20190226205152-f727befe758c/go.mod h1:9Yl7xja0Znq3iFh3
golang.org/x/tools v0.0.0-20190311212946-11955173bddd/go.mod h1:LCzVGOaR6xXOjkQ3onu1FJEFr0SW1gC7cKk1uF8kGRs=
golang.org/x/tools v0.0.0-20190524140312-2c0ae7006135/go.mod h1:RgjU9mgBXZiqYHBnxXauZ1Gv1EHHAz9KjViQ78xBX0Q=
golang.org/x/xerrors v0.0.0-20191204190536-9bdfabe68543/go.mod h1:I/5z698sn9Ka8TeJc9MKroUUfqBBauWjQqLJ2OPfmY0=
+golang.org/x/xerrors v0.0.0-20200804184101-5ec99f83aff1 h1:go1bK/D/BFZV2I8cIQd1NKEZ+0owSTG1fDTci4IqFcE=
golang.org/x/xerrors v0.0.0-20200804184101-5ec99f83aff1/go.mod h1:I/5z698sn9Ka8TeJc9MKroUUfqBBauWjQqLJ2OPfmY0=
google.golang.org/appengine v1.1.0/go.mod h1:EbEs0AVv82hx2wNQdGPgUI5lhzA/G0D9YwlJXL52JkM=
google.golang.org/appengine v1.4.0/go.mod h1:xpcJRLb0r/rnEns0DIKYYv+WjYCduHsrkT7/EB5XEv4=
@@ -171,12 +248,25 @@ google.golang.org/protobuf v1.23.0/go.mod h1:EGpADcykh3NcUnDUJcl1+ZksZNG86OlYog2
google.golang.org/protobuf v1.23.1-0.20200526195155-81db48ad09cc/go.mod h1:EGpADcykh3NcUnDUJcl1+ZksZNG86OlYog2l/sGQquU=
google.golang.org/protobuf v1.25.0 h1:Ejskq+SyPohKW+1uil0JJMtmHCgJPJ/qWTxr8qp+R4c=
google.golang.org/protobuf v1.25.0/go.mod h1:9JNX74DMeImyA3h4bdi1ymwjUzf21/xIlbajtzgsN7c=
+gopkg.in/check.v1 v0.0.0-20161208181325-20d25e280405 h1:yhCVgyC4o1eVCa2tZl7eS0r+SDo693bJlVdllGtEeKM=
gopkg.in/check.v1 v0.0.0-20161208181325-20d25e280405/go.mod h1:Co6ibVJAznAaIkqp8huTwlJQCZ016jof/cbN4VW5Yz0=
+gopkg.in/check.v1 v1.0.0-20201130134442-10cb98267c6c h1:Hei/4ADfdWqJk1ZMxUNpqntNwaWcugrBjAiHlqqRiVk=
+gopkg.in/check.v1 v1.0.0-20201130134442-10cb98267c6c/go.mod h1:JHkPIbrfpd72SG/EVd6muEfDQjcINNoR0C8j2r3qZ4Q=
+gopkg.in/fsnotify.v1 v1.4.7 h1:xOHLXZwVvI9hhs+cLKq5+I5onOuwQLhQwiu63xxlHs4=
gopkg.in/fsnotify.v1 v1.4.7/go.mod h1:Tz8NjZHkW78fSQdbUxIjBTcgA1z1m8ZHf0WmKUhAMys=
+gopkg.in/tomb.v1 v1.0.0-20141024135613-dd632973f1e7 h1:uRGJdciOHaEIrze2W8Q3AKkepLTh2hOroT7a+7czfdQ=
gopkg.in/tomb.v1 v1.0.0-20141024135613-dd632973f1e7/go.mod h1:dt/ZhP58zS4L8KSrWDmTeBkI65Dw0HsyUHuEVlX15mw=
gopkg.in/yaml.v2 v2.2.1/go.mod h1:hI93XBmqTisBFMUTm0b8Fm+jr3Dg1NNxqwp+5A1VGuI=
gopkg.in/yaml.v2 v2.2.2/go.mod h1:hI93XBmqTisBFMUTm0b8Fm+jr3Dg1NNxqwp+5A1VGuI=
+gopkg.in/yaml.v2 v2.2.4/go.mod h1:hI93XBmqTisBFMUTm0b8Fm+jr3Dg1NNxqwp+5A1VGuI=
gopkg.in/yaml.v2 v2.2.8 h1:obN1ZagJSUGI0Ek/LBmuj4SNLPfIny3KsKFopxRdj10=
gopkg.in/yaml.v2 v2.2.8/go.mod h1:hI93XBmqTisBFMUTm0b8Fm+jr3Dg1NNxqwp+5A1VGuI=
+gopkg.in/yaml.v2 v2.3.0/go.mod h1:hI93XBmqTisBFMUTm0b8Fm+jr3Dg1NNxqwp+5A1VGuI=
+gopkg.in/yaml.v2 v2.4.0 h1:D8xgwECY7CYvx+Y2n4sBz93Jn9JRvxdiyyo8CTfuKaY=
+gopkg.in/yaml.v2 v2.4.0/go.mod h1:RDklbk79AGWmwhnvt/jBztapEOGDOx6ZbXqjP6csGnQ=
+gopkg.in/yaml.v3 v3.0.0-20200313102051-9f266ea9e77c h1:dUUwHk2QECo/6vqA44rthZ8ie2QXMNeKRTHCNY2nXvo=
+gopkg.in/yaml.v3 v3.0.0-20200313102051-9f266ea9e77c/go.mod h1:K4uyk7z7BCEPqu6E+C64Yfv1cQ7kz7rIZviUmN+EgEM=
+gopkg.in/yaml.v3 v3.0.0-20210107192922-496545a6307b h1:h8qDotaEPuJATrMmW04NCwg7v22aHH28wwpauUhK9Oo=
+gopkg.in/yaml.v3 v3.0.0-20210107192922-496545a6307b/go.mod h1:K4uyk7z7BCEPqu6E+C64Yfv1cQ7kz7rIZviUmN+EgEM=
honnef.co/go/tools v0.0.0-20190102054323-c2f93a96b099/go.mod h1:rf3lG4BRIbNafJWhAfAdb/ePZxsR/4RtNHQocxwk9r4=
honnef.co/go/tools v0.0.0-20190523083050-ea95bdfd59fc/go.mod h1:rf3lG4BRIbNafJWhAfAdb/ePZxsR/4RtNHQocxwk9r4=
From 9f99b1571df99d90235b52c5b118051b0a849b5f Mon Sep 17 00:00:00 2001
From: Ink-33
Date: Sun, 17 Jan 2021 01:47:45 +0800
Subject: [PATCH 312/367] fix: golangci-lint gosimple
---
coolq/cqcode.go | 2 +-
global/codec.go | 2 +-
global/codec/codec.go | 2 +-
global/filter.go | 4 ++--
global/net.go | 24 ++++++++++++------------
server/apiAdmin.go | 2 --
server/http.go | 6 ++----
7 files changed, 19 insertions(+), 23 deletions(-)
diff --git a/coolq/cqcode.go b/coolq/cqcode.go
index 52866cd..7b7e697 100644
--- a/coolq/cqcode.go
+++ b/coolq/cqcode.go
@@ -1032,7 +1032,7 @@ func (bot *CQBot) makeShowPic(elem message.IMessageElement, source string, icon
xml := ""
var suf message.IMessageElement
if i, ok := elem.(*LocalImageElement); ok {
- if group == false {
+ if !group {
gm, err := bot.UploadLocalImageAsPrivate(1, i)
if err != nil {
log.Warnf("警告: 好友消息 %v 消息图片上传失败: %v", 1, err)
diff --git a/global/codec.go b/global/codec.go
index 4bb9cfd..22df9fa 100644
--- a/global/codec.go
+++ b/global/codec.go
@@ -23,7 +23,7 @@ func InitCodec() {
}
func EncoderSilk(data []byte) ([]byte, error) {
- if useSilkCodec == false {
+ if !useSilkCodec {
return nil, errors.New("no silk encoder")
}
h := md5.New()
diff --git a/global/codec/codec.go b/global/codec/codec.go
index 695bbc9..139a964 100644
--- a/global/codec/codec.go
+++ b/global/codec/codec.go
@@ -79,7 +79,7 @@ func EncodeToSilk(record []byte, tempName string, useCache bool) ([]byte, error)
if err = cmd.Run(); err != nil {
return nil, err
}
- if useCache == false {
+ if !useCache {
defer os.Remove(silkPath)
}
return ioutil.ReadFile(silkPath)
diff --git a/global/filter.go b/global/filter.go
index c617167..85ed6b2 100644
--- a/global/filter.go
+++ b/global/filter.go
@@ -104,7 +104,7 @@ func (andOperator *AndOperator) Eval(payload MSG) bool {
res = res && operand.filter.Eval(val)
}
- if res == false {
+ if !res {
break
}
}
@@ -131,7 +131,7 @@ func (op *OrOperator) Eval(payload MSG) bool {
res := false
for _, operand := range op.operands {
res = res || operand.Eval(payload)
- if res == true {
+ if res {
break
}
}
diff --git a/global/net.go b/global/net.go
index 7bdf83f..e9d6069 100644
--- a/global/net.go
+++ b/global/net.go
@@ -86,11 +86,11 @@ func DownloadFile(url, path string, limit int64, headers map[string]string) erro
if err != nil {
return err
}
- if headers != nil {
- for k, v := range headers {
- req.Header.Set(k, v)
- }
+
+ for k, v := range headers {
+ req.Header.Set(k, v)
}
+
if _, ok := headers["User-Agent"]; ok {
req.Header["User-Agent"] = []string{UserAgent}
}
@@ -138,10 +138,10 @@ func DownloadFileMultiThreading(url, path string, limit int64, threadCount int,
if err != nil {
return err
}
- if headers != nil {
- for k, v := range headers {
- req.Header.Set(k, v)
- }
+
+ for k, v := range headers {
+ req.Header.Set(k, v)
+
}
if _, ok := headers["User-Agent"]; ok {
req.Header["User-Agent"] = []string{UserAgent}
@@ -202,11 +202,11 @@ func DownloadFileMultiThreading(url, path string, limit int64, threadCount int,
_, _ = file.Seek(block.BeginOffset, io.SeekStart)
writer := bufio.NewWriter(file)
defer writer.Flush()
- if headers != nil {
- for k, v := range headers {
- req.Header.Set(k, v)
- }
+
+ for k, v := range headers {
+ req.Header.Set(k, v)
}
+
if _, ok := headers["User-Agent"]; ok {
req.Header["User-Agent"] = []string{UserAgent}
}
diff --git a/server/apiAdmin.go b/server/apiAdmin.go
index 64af4d6..3b0aae6 100644
--- a/server/apiAdmin.go
+++ b/server/apiAdmin.go
@@ -472,7 +472,6 @@ func AdminDoRestart(s *webServer, c *gin.Context) {
s.Cli = nil
s.DoReLogin()
c.JSON(200, coolq.OK(coolq.MSG{}))
- return
}
// 进程重启
@@ -485,7 +484,6 @@ func AdminProcessRestart(s *webServer, c *gin.Context) {
func AdminDoRestartDocker(s *webServer, c *gin.Context) {
Console <- os.Kill
c.JSON(200, coolq.OK(coolq.MSG{}))
- return
}
// web输入 html 页面
diff --git a/server/http.go b/server/http.go
index b312d82..f3900f8 100644
--- a/server/http.go
+++ b/server/http.go
@@ -576,9 +576,7 @@ func (s *httpServer) ShutDown() {
if err := s.Http.Shutdown(ctx); err != nil {
log.Fatal("http Server Shutdown:", err)
}
- select {
- case <-ctx.Done():
- log.Println("timeout of 5 seconds.")
- }
+ <-ctx.Done()
+ log.Println("timeout of 5 seconds.")
log.Println("http Server exiting")
}
From 468befb0fd62e0afb2de4466b53f2a2f354a9929 Mon Sep 17 00:00:00 2001
From: Ink-33
Date: Sun, 17 Jan 2021 01:48:48 +0800
Subject: [PATCH 313/367] update import
---
go.mod | 4 ++--
main.go | 6 +++---
2 files changed, 5 insertions(+), 5 deletions(-)
diff --git a/go.mod b/go.mod
index 2c308e5..5145157 100644
--- a/go.mod
+++ b/go.mod
@@ -35,10 +35,10 @@ require (
github.com/tidwall/gjson v1.6.7
github.com/ugorji/go v1.2.3 // indirect
github.com/yinghau76/go-ascii-art v0.0.0-20190517192627-e7f465a30189
- golang.org/x/crypto v0.0.0-20201221181555-eec23a3978ad
+ golang.org/x/crypto v0.0.0-20201221181555-eec23a3978ad // indirect
golang.org/x/net v0.0.0-20201224014010-6772e930b67b // indirect
golang.org/x/sys v0.0.0-20210113181707-4bcb84eeeb78 // indirect
- golang.org/x/term v0.0.0-20201210144234-2321bbc49cbf // indirect
+ golang.org/x/term v0.0.0-20201210144234-2321bbc49cbf
golang.org/x/text v0.3.5 // indirect
golang.org/x/time v0.0.0-20201208040808-7e3f01d25324
gopkg.in/check.v1 v1.0.0-20201130134442-10cb98267c6c // indirect
diff --git a/main.go b/main.go
index a525964..835c4f1 100644
--- a/main.go
+++ b/main.go
@@ -21,7 +21,7 @@ import (
"github.com/Mrs4s/go-cqhttp/server"
"github.com/guonaihong/gout"
"github.com/tidwall/gjson"
- "golang.org/x/crypto/ssh/terminal"
+ "golang.org/x/term"
"github.com/Mrs4s/MiraiGo/binary"
"github.com/Mrs4s/MiraiGo/client"
@@ -231,7 +231,7 @@ func main() {
}
if conf.EncryptPassword && conf.PasswordEncrypted == "" {
log.Infof("密码加密已启用, 请输入Key对密码进行加密: (Enter 提交)")
- byteKey, _ := terminal.ReadPassword(int(os.Stdin.Fd()))
+ byteKey, _ := term.ReadPassword(int(os.Stdin.Fd()))
key := md5.Sum(byteKey)
if encrypted := EncryptPwd(conf.Password, key[:]); encrypted != "" {
conf.Password = ""
@@ -255,7 +255,7 @@ func main() {
os.Exit(0)
}
}()
- byteKey, _ = terminal.ReadPassword(int(os.Stdin.Fd()))
+ byteKey, _ = term.ReadPassword(int(os.Stdin.Fd()))
cancel <- struct{}{}
} else {
log.Infof("密码加密已启用, 使用运行时传递的参数进行解密,按 Ctrl+C 取消.")
From 1d9f719d139c303834fdd974b892ef28b8575cf7 Mon Sep 17 00:00:00 2001
From: Ink-33
Date: Sun, 17 Jan 2021 02:16:29 +0800
Subject: [PATCH 314/367] fix: golangci-lint ineffassign
---
coolq/cqcode.go | 5 ++++-
server/websocket.go | 2 +-
2 files changed, 5 insertions(+), 2 deletions(-)
diff --git a/coolq/cqcode.go b/coolq/cqcode.go
index 7b7e697..fbcd8cf 100644
--- a/coolq/cqcode.go
+++ b/coolq/cqcode.go
@@ -132,7 +132,7 @@ func ToArrayMessage(e []message.IMessageElement, code int64, raw ...bool) (r []M
})
}
for _, elem := range e {
- m := MSG{}
+ var m MSG
switch o := elem.(type) {
case *message.TextElement:
m = MSG{
@@ -811,6 +811,9 @@ func (bot *CQBot) ToElement(t string, d map[string]string, group bool) (m interf
}
var header = make([]byte, 4)
_, err = video.Read(header)
+ if err != nil {
+ return nil, err
+ }
if !bytes.Equal(header, []byte{0x66, 0x74, 0x79, 0x70}) { // check file header ftyp
_, _ = video.Seek(0, io.SeekStart)
hash, _ := utils.ComputeMd5AndLength(video)
diff --git a/server/websocket.go b/server/websocket.go
index 0ab5789..5bcd460 100644
--- a/server/websocket.go
+++ b/server/websocket.go
@@ -516,7 +516,7 @@ var wsApi = map[string]func(*coolq.CQBot, 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
+ var delay int64
delay = p.Get("delay").Int()
if delay < 0 {
delay = 0
From 1001cefb6fa51a7fb7d90eeaddd30e0452c320b2 Mon Sep 17 00:00:00 2001
From: Ink-33
Date: Sun, 17 Jan 2021 02:46:25 +0800
Subject: [PATCH 315/367] fix: golangci-lint staticcheck
---
main.go | 6 ++++--
server/apiAdmin.go | 14 ++++++++++----
2 files changed, 14 insertions(+), 6 deletions(-)
diff --git a/main.go b/main.go
index 835c4f1..03ce5ab 100644
--- a/main.go
+++ b/main.go
@@ -16,6 +16,7 @@ import (
"runtime"
"strconv"
"strings"
+ "syscall"
"time"
"github.com/Mrs4s/go-cqhttp/server"
@@ -97,6 +98,7 @@ func init() {
}
func main() {
+
var byteKey []byte
var isFastStart = false
arg := os.Args
@@ -327,7 +329,7 @@ func main() {
c := server.Console
r := server.Restart
go checkUpdate()
- signal.Notify(c, os.Interrupt, os.Kill)
+ signal.Notify(c, os.Interrupt, syscall.SIGTERM)
select {
case <-c:
b.Release()
@@ -458,7 +460,7 @@ func selfUpdate(imageUrl string) {
}
func restart(Args []string) {
- cmd := &exec.Cmd{}
+ var cmd *exec.Cmd
if runtime.GOOS == "windows" {
file, err := exec.LookPath(Args[0])
if err != nil {
diff --git a/server/apiAdmin.go b/server/apiAdmin.go
index 3b0aae6..85764d1 100644
--- a/server/apiAdmin.go
+++ b/server/apiAdmin.go
@@ -5,8 +5,6 @@ import (
"bytes"
"encoding/base64"
"fmt"
- "github.com/Mrs4s/MiraiGo/utils"
- "github.com/gin-contrib/pprof"
"image"
"io/ioutil"
"net/http"
@@ -14,8 +12,12 @@ import (
"os/signal"
"strconv"
"strings"
+ "syscall"
"time"
+ "github.com/Mrs4s/MiraiGo/utils"
+ "github.com/gin-contrib/pprof"
+
"github.com/Mrs4s/MiraiGo/client"
"github.com/Mrs4s/go-cqhttp/coolq"
"github.com/Mrs4s/go-cqhttp/global"
@@ -91,14 +93,14 @@ func (s *webServer) Run(addr string, cli *client.QQClient) *coolq.CQBot {
log.Error(err)
log.Infof("请检查端口是否被占用.")
c := make(chan os.Signal, 1)
- signal.Notify(c, os.Interrupt, os.Kill)
+ signal.Notify(c, os.Interrupt, syscall.SIGTERM)
<-c
os.Exit(1)
}
} else {
//关闭端口监听
c := make(chan os.Signal, 1)
- signal.Notify(c, os.Interrupt, os.Kill)
+ signal.Notify(c, os.Interrupt, syscall.SIGTERM)
<-c
os.Exit(1)
}
@@ -155,6 +157,10 @@ func (s *webServer) Dologin() {
os.Exit(0)
}
rsp, err = cli.SubmitTicket(ticket)
+ if err != nil {
+ log.Warnf("错误: " + err.Error())
+ os.Exit(0)
+ }
continue
case client.NeedCaptcha:
_ = ioutil.WriteFile("captcha.jpg", rsp.CaptchaImage, 0644)
From d16fd6f34dea747cdd019f1690d0da577a7c4d72 Mon Sep 17 00:00:00 2001
From: Ink-33
Date: Sun, 17 Jan 2021 02:52:43 +0800
Subject: [PATCH 316/367] fix: golangci-lint errcheck
---
global/codec.go | 5 ++++-
main.go | 4 ++--
server/http.go | 6 +++++-
3 files changed, 11 insertions(+), 4 deletions(-)
diff --git a/global/codec.go b/global/codec.go
index 22df9fa..3d50e14 100644
--- a/global/codec.go
+++ b/global/codec.go
@@ -27,7 +27,10 @@ func EncoderSilk(data []byte) ([]byte, error) {
return nil, errors.New("no silk encoder")
}
h := md5.New()
- h.Write(data)
+ _, err := h.Write(data)
+ if err != nil {
+ return nil, err
+ }
tempName := fmt.Sprintf("%x", h.Sum(nil))
if silkPath := path.Join("data/cache", tempName+".silk"); PathExists(silkPath) {
return ioutil.ReadFile(silkPath)
diff --git a/main.go b/main.go
index 03ce5ab..9d00052 100644
--- a/main.go
+++ b/main.go
@@ -98,7 +98,7 @@ func init() {
}
func main() {
-
+
var byteKey []byte
var isFastStart = false
arg := os.Args
@@ -487,5 +487,5 @@ func restart(Args []string) {
Stdout: os.Stdout,
}
}
- cmd.Start()
+ _ = cmd.Start()
}
diff --git a/server/http.go b/server/http.go
index f3900f8..b3a35cb 100644
--- a/server/http.go
+++ b/server/http.go
@@ -123,7 +123,11 @@ func (c *httpClient) onBotPushEvent(m coolq.MSG) {
}
if c.secret != "" {
mac := hmac.New(sha1.New, []byte(c.secret))
- mac.Write([]byte(m.ToJson()))
+ _, err := mac.Write([]byte(m.ToJson()))
+ if err != nil {
+ log.Error(err)
+ return nil
+ }
h["X-Signature"] = "sha1=" + hex.EncodeToString(mac.Sum(nil))
}
return h
From 46cae8644290adecfd5979b2da52da2ea169714e Mon Sep 17 00:00:00 2001
From: Diving-Fish
Date: Sun, 17 Jan 2021 12:48:54 +0800
Subject: [PATCH 317/367] fix get gender of group member
---
coolq/api.go | 7 ++++++-
1 file changed, 6 insertions(+), 1 deletion(-)
diff --git a/coolq/api.go b/coolq/api.go
index c6a3295..1c2b0ce 100644
--- a/coolq/api.go
+++ b/coolq/api.go
@@ -962,7 +962,12 @@ func convertGroupMemberInfo(groupId int64, m *client.GroupMemberInfo) MSG {
"user_id": m.Uin,
"nickname": m.Nickname,
"card": m.CardName,
- "sex": "unknown",
+ "sex": func() string {
+ if m.Gender == 1 {
+ return "female"
+ }
+ return "male"
+ }(),
"age": 0,
"area": "",
"join_time": m.JoinTime,
From ddd303375d684a0ab5fa8749e81a4b424ad57468 Mon Sep 17 00:00:00 2001
From: Diving-Fish
Date: Sun, 17 Jan 2021 13:14:35 +0800
Subject: [PATCH 318/367] fix get gender of group member
---
coolq/api.go | 10 ++++++++--
1 file changed, 8 insertions(+), 2 deletions(-)
diff --git a/coolq/api.go b/coolq/api.go
index 1c2b0ce..296a65c 100644
--- a/coolq/api.go
+++ b/coolq/api.go
@@ -662,8 +662,11 @@ func (bot *CQBot) CQGetStrangerInfo(userId int64) MSG {
"sex": func() string {
if info.Sex == 1 {
return "female"
+ } else if info.Sex == 0 {
+ return "male"
}
- return "male"
+ // unknown = 0x2
+ return "unknown"
}(),
"age": info.Age,
"level": info.Level,
@@ -965,8 +968,11 @@ func convertGroupMemberInfo(groupId int64, m *client.GroupMemberInfo) MSG {
"sex": func() string {
if m.Gender == 1 {
return "female"
+ } else if m.Gender == 0 {
+ return "male"
}
- return "male"
+ // unknown = 0xff
+ return "unknown"
}(),
"age": 0,
"area": "",
From 61f4e7826ae3b1fa610dd3a4c4375b010d33a7e7 Mon Sep 17 00:00:00 2001
From: Ink-33
Date: Sun, 17 Jan 2021 16:39:01 +0800
Subject: [PATCH 319/367] fix golint
---
coolq/api.go | 10 +--
coolq/bot.go | 9 ++-
coolq/cqcode.go | 22 +++---
coolq/event.go | 36 +++++----
global/codec.go | 17 ++--
global/codec/codec.go | 2 +
global/codec/codec_unsupportedarch.go | 2 +
global/codec/codec_unsupportedos.go | 2 +
global/config.go | 78 +++++++++++--------
global/filter.go | 27 +++++++
global/fs.go | 85 ++++++++++++--------
global/net.go | 21 +++--
global/param.go | 18 ++++-
global/ratelimit.go | 6 +-
main.go | 68 ++++++++--------
server/apiAdmin.go | 78 +++++++++----------
server/websocket.go | 108 +++++++++++++-------------
17 files changed, 348 insertions(+), 241 deletions(-)
diff --git a/coolq/api.go b/coolq/api.go
index c6a3295..71c3ae5 100644
--- a/coolq/api.go
+++ b/coolq/api.go
@@ -730,10 +730,10 @@ func (bot *CQBot) CQHandleQuickOperation(context, operation gjson.Result) MSG {
}
func (bot *CQBot) CQGetImage(file string) MSG {
- if !global.PathExists(path.Join(global.IMAGE_PATH, file)) {
+ if !global.PathExists(path.Join(global.ImagePath, file)) {
return Failed(100)
}
- if b, err := ioutil.ReadFile(path.Join(global.IMAGE_PATH, file)); err == nil {
+ if b, err := ioutil.ReadFile(path.Join(global.ImagePath, file)); err == nil {
r := binary.NewReader(b)
r.ReadBytes(16)
msg := MSG{
@@ -741,7 +741,7 @@ func (bot *CQBot) CQGetImage(file string) MSG {
"filename": r.ReadString(),
"url": r.ReadString(),
}
- local := path.Join(global.CACHE_PATH, file+"."+path.Ext(msg["filename"].(string)))
+ local := path.Join(global.CachePath, file+"."+path.Ext(msg["filename"].(string)))
if !global.PathExists(local) {
if data, err := global.GetBytes(msg["url"].(string)); err == nil {
_ = ioutil.WriteFile(local, data, 0644)
@@ -756,7 +756,7 @@ func (bot *CQBot) CQGetImage(file string) MSG {
func (bot *CQBot) CQDownloadFile(url string, headers map[string]string, threadCount int) MSG {
hash := md5.Sum([]byte(url))
- file := path.Join(global.CACHE_PATH, hex.EncodeToString(hash[:])+".cache")
+ file := path.Join(global.CachePath, hex.EncodeToString(hash[:])+".cache")
if global.PathExists(file) {
if err := os.Remove(file); err != nil {
log.Warnf("删除缓存文件 %v 时出现错误: %v", file, err)
@@ -867,7 +867,7 @@ func (bot *CQBot) CQReloadEventFilter() MSG {
func (bot *CQBot) CQSetGroupPortrait(groupId int64, file, cache string) MSG {
if g := bot.Client.FindGroup(groupId); g != nil {
- img, err := global.FindFile(file, cache, global.IMAGE_PATH)
+ img, err := global.FindFile(file, cache, global.ImagePath)
if err != nil {
log.Warnf("set group portrait error: %v", err)
return Failed(100, "LOAD_FILE_ERROR", err.Error())
diff --git a/coolq/bot.go b/coolq/bot.go
index f033771..1b842c9 100644
--- a/coolq/bot.go
+++ b/coolq/bot.go
@@ -5,7 +5,6 @@ import (
"encoding/gob"
"encoding/hex"
"fmt"
- "github.com/Mrs4s/MiraiGo/utils"
"hash/crc32"
"io"
"os"
@@ -14,6 +13,8 @@ import (
"sync"
"time"
+ "github.com/Mrs4s/MiraiGo/utils"
+
"github.com/syndtr/goleveldb/leveldb"
"github.com/Mrs4s/MiraiGo/binary"
@@ -41,7 +42,7 @@ type MSG map[string]interface{}
var ForceFragmented = false
-func NewQQBot(cli *client.QQClient, conf *global.JsonConfig) *CQBot {
+func NewQQBot(cli *client.QQClient, conf *global.JSONConfig) *CQBot {
bot := &CQBot{
Client: cli,
}
@@ -136,7 +137,7 @@ func (bot *CQBot) UploadLocalVideo(target int64, v *LocalVideoElement) (*message
}
defer video.Close()
hash, _ := utils.ComputeMd5AndLength(io.MultiReader(video, v.thumb))
- cacheFile := path.Join(global.CACHE_PATH, hex.EncodeToString(hash[:])+".cache")
+ cacheFile := path.Join(global.CachePath, hex.EncodeToString(hash[:])+".cache")
_, _ = video.Seek(0, io.SeekStart)
_, _ = v.thumb.Seek(0, io.SeekStart)
return bot.Client.UploadGroupShortVideo(target, video, v.thumb, cacheFile)
@@ -456,7 +457,7 @@ func (bot *CQBot) Release() {
}
func (bot *CQBot) dispatchEventMessage(m MSG) {
- if global.EventFilter != nil && !global.EventFilter.Eval(global.MSG(m)){
+ if global.EventFilter != nil && !global.EventFilter.Eval(global.MSG(m)) {
log.Debug("Event filtered!")
return
}
diff --git a/coolq/cqcode.go b/coolq/cqcode.go
index fbcd8cf..84f01c8 100644
--- a/coolq/cqcode.go
+++ b/coolq/cqcode.go
@@ -369,7 +369,7 @@ func (bot *CQBot) ConvertStringMessage(msg string, group bool) (r []message.IMes
saveTempText := func() {
if len(tempText) != 0 {
if SplitUrl {
- for _, t := range global.SplitUrl(CQCodeUnescapeValue(string(tempText))) {
+ for _, t := range global.SplitURL(CQCodeUnescapeValue(string(tempText))) {
r = append(r, message.NewText(t))
}
} else {
@@ -548,7 +548,7 @@ func (bot *CQBot) ToElement(t string, d map[string]string, group bool) (m interf
case "text":
if SplitUrl {
var ret []message.IMessageElement
- for _, text := range global.SplitUrl(d["text"]) {
+ for _, text := range global.SplitURL(d["text"]) {
ret = append(ret, message.NewText(text))
}
return ret, nil
@@ -619,9 +619,9 @@ func (bot *CQBot) ToElement(t string, d map[string]string, group bool) (m interf
return &message.VoiceElement{Data: data}, nil
case "record":
f := d["file"]
- data, err := global.FindFile(f, d["cache"], global.VOICE_PATH)
+ data, err := global.FindFile(f, d["cache"], global.VoicePath)
if err == global.ErrSyntax {
- data, err = global.FindFile(f, d["cache"], global.VOICE_PATH_OLD)
+ data, err = global.FindFile(f, d["cache"], global.VoicePathOld)
}
if err != nil {
return nil, err
@@ -797,7 +797,7 @@ func (bot *CQBot) ToElement(t string, d map[string]string, group bool) (m interf
}
var data []byte
if cover, ok := d["cover"]; ok {
- data, _ = global.FindFile(cover, cache, global.IMAGE_PATH)
+ data, _ = global.FindFile(cover, cache, global.ImagePath)
} else {
_ = global.ExtractCover(v.File, v.File+".jpg")
data, _ = ioutil.ReadFile(v.File + ".jpg")
@@ -817,7 +817,7 @@ func (bot *CQBot) ToElement(t string, d map[string]string, group bool) (m interf
if !bytes.Equal(header, []byte{0x66, 0x74, 0x79, 0x70}) { // check file header ftyp
_, _ = video.Seek(0, io.SeekStart)
hash, _ := utils.ComputeMd5AndLength(video)
- cacheFile := path.Join(global.CACHE_PATH, hex.EncodeToString(hash[:])+".mp4")
+ cacheFile := path.Join(global.CachePath, hex.EncodeToString(hash[:])+".mp4")
if global.PathExists(cacheFile) && cache == "1" {
goto ok
}
@@ -879,7 +879,7 @@ func (bot *CQBot) makeImageOrVideoElem(d map[string]string, video, group bool) (
cache = "1"
}
hash := md5.Sum([]byte(f))
- cacheFile := path.Join(global.CACHE_PATH, hex.EncodeToString(hash[:])+".cache")
+ cacheFile := path.Join(global.CachePath, hex.EncodeToString(hash[:])+".cache")
var maxSize = func() int64 {
if video {
return maxVideoSize
@@ -928,9 +928,9 @@ func (bot *CQBot) makeImageOrVideoElem(d map[string]string, video, group bool) (
}
return &LocalImageElement{File: fu.Path}, nil
}
- rawPath := path.Join(global.IMAGE_PATH, f)
+ rawPath := path.Join(global.ImagePath, f)
if video {
- rawPath = path.Join(global.VIDEO_PATH, f)
+ rawPath = path.Join(global.VideoPath, f)
if !global.PathExists(rawPath) {
return nil, errors.New("invalid video")
}
@@ -956,8 +956,8 @@ func (bot *CQBot) makeImageOrVideoElem(d map[string]string, video, group bool) (
}
return &LocalImageElement{Stream: bytes.NewReader(b)}, nil
}
- if !global.PathExists(rawPath) && global.PathExists(path.Join(global.IMAGE_PATH_OLD, f)) {
- rawPath = path.Join(global.IMAGE_PATH_OLD, f)
+ if !global.PathExists(rawPath) && global.PathExists(path.Join(global.ImagePathOld, f)) {
+ rawPath = path.Join(global.ImagePathOld, f)
}
if !global.PathExists(rawPath) && global.PathExists(rawPath+".cqimg") {
rawPath += ".cqimg"
diff --git a/coolq/event.go b/coolq/event.go
index 86fb713..c12427a 100644
--- a/coolq/event.go
+++ b/coolq/event.go
@@ -17,15 +17,17 @@ import (
var format = "string"
+//SetMessageFormat 设置消息上报格式,默认为string
func SetMessageFormat(f string) {
format = f
}
-func ToFormattedMessage(e []message.IMessageElement, code int64, raw ...bool) (r interface{}) {
+//ToFormattedMessage 将给定[]message.IMessageElement转换为通过coolq.SetMessageFormat所定义的消息上报格式
+func ToFormattedMessage(e []message.IMessageElement, id int64, raw ...bool) (r interface{}) {
if format == "string" {
- r = ToStringMessage(e, code, raw...)
+ r = ToStringMessage(e, id, raw...)
} else if format == "array" {
- r = ToArrayMessage(e, code, raw...)
+ r = ToArrayMessage(e, id, raw...)
}
return
}
@@ -499,8 +501,8 @@ func (bot *CQBot) checkMedia(e []message.IMessageElement) {
switch i := elem.(type) {
case *message.ImageElement:
filename := hex.EncodeToString(i.Md5) + ".image"
- if !global.PathExists(path.Join(global.IMAGE_PATH, filename)) {
- _ = ioutil.WriteFile(path.Join(global.IMAGE_PATH, filename), binary.NewWriterF(func(w *binary.Writer) {
+ if !global.PathExists(path.Join(global.ImagePath, filename)) {
+ _ = ioutil.WriteFile(path.Join(global.ImagePath, filename), binary.NewWriterF(func(w *binary.Writer) {
w.Write(i.Md5)
w.WriteUInt32(uint32(i.Size))
w.WriteString(i.Filename)
@@ -510,8 +512,8 @@ func (bot *CQBot) checkMedia(e []message.IMessageElement) {
i.Filename = filename
case *message.GroupImageElement:
filename := hex.EncodeToString(i.Md5) + ".image"
- if !global.PathExists(path.Join(global.IMAGE_PATH, filename)) {
- _ = ioutil.WriteFile(path.Join(global.IMAGE_PATH, filename), binary.NewWriterF(func(w *binary.Writer) {
+ if !global.PathExists(path.Join(global.ImagePath, filename)) {
+ _ = ioutil.WriteFile(path.Join(global.ImagePath, filename), binary.NewWriterF(func(w *binary.Writer) {
w.Write(i.Md5)
w.WriteUInt32(uint32(i.Size))
w.WriteString(filename)
@@ -520,8 +522,8 @@ func (bot *CQBot) checkMedia(e []message.IMessageElement) {
}
case *message.FriendImageElement:
filename := hex.EncodeToString(i.Md5) + ".image"
- if !global.PathExists(path.Join(global.IMAGE_PATH, filename)) {
- _ = ioutil.WriteFile(path.Join(global.IMAGE_PATH, filename), binary.NewWriterF(func(w *binary.Writer) {
+ if !global.PathExists(path.Join(global.ImagePath, filename)) {
+ _ = ioutil.WriteFile(path.Join(global.ImagePath, filename), binary.NewWriterF(func(w *binary.Writer) {
w.Write(i.Md5)
w.WriteUInt32(uint32(0)) // 发送时会调用url, 大概没事
w.WriteString(filename)
@@ -530,8 +532,8 @@ func (bot *CQBot) checkMedia(e []message.IMessageElement) {
}
case *message.GroupFlashImgElement:
filename := hex.EncodeToString(i.Md5) + ".image"
- if !global.PathExists(path.Join(global.IMAGE_PATH, filename)) {
- _ = ioutil.WriteFile(path.Join(global.IMAGE_PATH, filename), binary.NewWriterF(func(w *binary.Writer) {
+ if !global.PathExists(path.Join(global.ImagePath, filename)) {
+ _ = ioutil.WriteFile(path.Join(global.ImagePath, filename), binary.NewWriterF(func(w *binary.Writer) {
w.Write(i.Md5)
w.WriteUInt32(uint32(i.Size))
w.WriteString(i.Filename)
@@ -541,8 +543,8 @@ func (bot *CQBot) checkMedia(e []message.IMessageElement) {
i.Filename = filename
case *message.FriendFlashImgElement:
filename := hex.EncodeToString(i.Md5) + ".image"
- if !global.PathExists(path.Join(global.IMAGE_PATH, filename)) {
- _ = ioutil.WriteFile(path.Join(global.IMAGE_PATH, filename), binary.NewWriterF(func(w *binary.Writer) {
+ if !global.PathExists(path.Join(global.ImagePath, filename)) {
+ _ = ioutil.WriteFile(path.Join(global.ImagePath, filename), binary.NewWriterF(func(w *binary.Writer) {
w.Write(i.Md5)
w.WriteUInt32(uint32(i.Size))
w.WriteString(i.Filename)
@@ -553,18 +555,18 @@ func (bot *CQBot) checkMedia(e []message.IMessageElement) {
case *message.VoiceElement:
i.Name = strings.ReplaceAll(i.Name, "{", "")
i.Name = strings.ReplaceAll(i.Name, "}", "")
- if !global.PathExists(path.Join(global.VOICE_PATH, i.Name)) {
+ if !global.PathExists(path.Join(global.VoicePath, i.Name)) {
b, err := global.GetBytes(i.Url)
if err != nil {
log.Warnf("语音文件 %v 下载失败: %v", i.Name, err)
continue
}
- _ = ioutil.WriteFile(path.Join(global.VOICE_PATH, i.Name), b, 0644)
+ _ = ioutil.WriteFile(path.Join(global.VoicePath, i.Name), b, 0644)
}
case *message.ShortVideoElement:
filename := hex.EncodeToString(i.Md5) + ".video"
- if !global.PathExists(path.Join(global.VIDEO_PATH, filename)) {
- _ = ioutil.WriteFile(path.Join(global.VIDEO_PATH, filename), binary.NewWriterF(func(w *binary.Writer) {
+ if !global.PathExists(path.Join(global.VideoPath, filename)) {
+ _ = ioutil.WriteFile(path.Join(global.VideoPath, filename), binary.NewWriterF(func(w *binary.Writer) {
w.Write(i.Md5)
w.Write(i.ThumbMd5)
w.WriteUInt32(uint32(i.Size))
diff --git a/global/codec.go b/global/codec.go
index 3d50e14..3942843 100644
--- a/global/codec.go
+++ b/global/codec.go
@@ -4,15 +4,17 @@ import (
"crypto/md5"
"errors"
"fmt"
- "github.com/Mrs4s/go-cqhttp/global/codec"
- log "github.com/sirupsen/logrus"
"io/ioutil"
"os/exec"
"path"
+
+ "github.com/Mrs4s/go-cqhttp/global/codec"
+ log "github.com/sirupsen/logrus"
)
var useSilkCodec = true
+//InitCodec 初始化Silk编码器
func InitCodec() {
log.Info("正在加载silk编码器...")
err := codec.Init()
@@ -22,6 +24,7 @@ func InitCodec() {
}
}
+//EncoderSilk 将音频编码为Silk
func EncoderSilk(data []byte) ([]byte, error) {
if !useSilkCodec {
return nil, errors.New("no silk encoder")
@@ -42,12 +45,14 @@ func EncoderSilk(data []byte) ([]byte, error) {
return slk, nil
}
-func EncodeMP4(src string, dst string) error { // -y 覆盖文件
- cmd := exec.Command("ffmpeg", "-i", src, "-y", "-c", "copy", "-map", "0", dst)
+//EncodeMP4 将给定视频文件编码为MP4
+func EncodeMP4(src string, target string) error { // -y 覆盖文件
+ cmd := exec.Command("ffmpeg", "-i", src, "-y", "-c", "copy", "-map", "0", target)
return cmd.Run()
}
-func ExtractCover(src string, dst string) error {
- cmd := exec.Command("ffmpeg", "-i", src, "-y", "-r", "1", "-f", "image2", dst)
+//ExtractCover 获取给定视频文件的Cover
+func ExtractCover(src string, target string) error {
+ cmd := exec.Command("ffmpeg", "-i", src, "-y", "-r", "1", "-f", "image2", target)
return cmd.Run()
}
diff --git a/global/codec/codec.go b/global/codec/codec.go
index 139a964..6b053db 100644
--- a/global/codec/codec.go
+++ b/global/codec/codec.go
@@ -40,6 +40,7 @@ func getEncoderFilePath() string {
return encoderFile
}
+//Init 下载Silk编码器
func Init() error {
if !fileExist(silkCachePath) {
_ = os.MkdirAll(silkCachePath, os.ModePerm)
@@ -56,6 +57,7 @@ func Init() error {
return nil
}
+//EncodeToSilk 将音频编码为Silk
func EncodeToSilk(record []byte, tempName string, useCache bool) ([]byte, error) {
// 1. 写入缓存文件
rawPath := path.Join(silkCachePath, tempName+".wav")
diff --git a/global/codec/codec_unsupportedarch.go b/global/codec/codec_unsupportedarch.go
index f905017..b0e9890 100644
--- a/global/codec/codec_unsupportedarch.go
+++ b/global/codec/codec_unsupportedarch.go
@@ -4,10 +4,12 @@ package codec
import "errors"
+//Init 下载silk编码器
func Init() error {
return errors.New("Unsupport arch now")
}
+//EncodeToSilk 将音频编码为Silk
func EncodeToSilk(record []byte, tempName string, useCache bool) ([]byte, error) {
return nil, errors.New("Unsupport arch now")
}
diff --git a/global/codec/codec_unsupportedos.go b/global/codec/codec_unsupportedos.go
index 89c415e..9428fe0 100644
--- a/global/codec/codec_unsupportedos.go
+++ b/global/codec/codec_unsupportedos.go
@@ -4,10 +4,12 @@ package codec
import "errors"
+//Init 下载silk编码器
func Init() error {
return errors.New("not support now")
}
+//EncodeToSilk 将音频编码为Silk
func EncodeToSilk(record []byte, tempName string, useCache bool) ([]byte, error) {
return nil, errors.New("not support now")
}
diff --git a/global/config.go b/global/config.go
index d476ace..0396534 100644
--- a/global/config.go
+++ b/global/config.go
@@ -12,6 +12,7 @@ import (
var json = jsoniter.ConfigCompatibleWithStandardLibrary
+//DefaultConfigWithComments 为go-cqhttp的默认配置文件
var DefaultConfigWithComments = `
/*
go-cqhttp 默认配置文件
@@ -134,7 +135,8 @@ var DefaultConfigWithComments = `
}
`
-type JsonConfig struct {
+//JSONConfig Config对应的结构体
+type JSONConfig struct {
Uin int64 `json:"uin"`
Password string `json:"password"`
EncryptPassword bool `json:"encrypt_password"`
@@ -153,39 +155,41 @@ type JsonConfig struct {
} `json:"_rate_limit"`
IgnoreInvalidCQCode bool `json:"ignore_invalid_cqcode"`
ForceFragmented bool `json:"force_fragmented"`
- FixUrl bool `json:"fix_url"`
+ FixURL bool `json:"fix_url"`
ProxyRewrite string `json:"proxy_rewrite"`
HeartbeatInterval time.Duration `json:"heartbeat_interval"`
- HttpConfig *GoCQHttpConfig `json:"http_config"`
- WSConfig *GoCQWebsocketConfig `json:"ws_config"`
- ReverseServers []*GoCQReverseWebsocketConfig `json:"ws_reverse_servers"`
+ HTTPConfig *GoCQHTTPConfig `json:"http_config"`
+ WSConfig *GoCQWebSocketConfig `json:"ws_config"`
+ ReverseServers []*GoCQReverseWebSocketConfig `json:"ws_reverse_servers"`
PostMessageFormat string `json:"post_message_format"`
UseSSOAddress bool `json:"use_sso_address"`
Debug bool `json:"debug"`
LogLevel string `json:"log_level"`
- WebUi *GoCqWebUi `json:"web_ui"`
+ WebUI *GoCQWebUI `json:"web_ui"`
}
-type CQHttpApiConfig struct {
+//CQHTTPAPIConfig HTTPAPI对应的Config结构体
+type CQHTTPAPIConfig struct {
Host string `json:"host"`
Port uint16 `json:"port"`
- UseHttp bool `json:"use_http"`
+ UseHTTP bool `json:"use_http"`
WSHost string `json:"ws_host"`
WSPort uint16 `json:"ws_port"`
UseWS bool `json:"use_ws"`
- WSReverseUrl string `json:"ws_reverse_url"`
- WSReverseApiUrl string `json:"ws_reverse_api_url"`
- WSReverseEventUrl string `json:"ws_reverse_event_url"`
+ WSReverseURL string `json:"ws_reverse_url"`
+ WSReverseAPIURL string `json:"ws_reverse_api_url"`
+ WSReverseEventURL string `json:"ws_reverse_event_url"`
WSReverseReconnectInterval uint16 `json:"ws_reverse_reconnect_interval"`
WSReverseReconnectOnCode1000 bool `json:"ws_reverse_reconnect_on_code_1000"`
UseWsReverse bool `json:"use_ws_reverse"`
- PostUrl string `json:"post_url"`
+ PostURL string `json:"post_url"`
AccessToken string `json:"access_token"`
Secret string `json:"secret"`
PostMessageFormat string `json:"post_message_format"`
}
-type GoCQHttpConfig struct {
+//GoCQHTTPConfig 正向HTTP对应config结构体
+type GoCQHTTPConfig struct {
Enabled bool `json:"enabled"`
Host string `json:"host"`
Port uint16 `json:"port"`
@@ -193,29 +197,33 @@ type GoCQHttpConfig struct {
PostUrls map[string]string `json:"post_urls"`
}
-type GoCQWebsocketConfig struct {
+//GoCQWebSocketConfig 正向WebSocket对应Config结构体
+type GoCQWebSocketConfig struct {
Enabled bool `json:"enabled"`
Host string `json:"host"`
Port uint16 `json:"port"`
}
-type GoCQReverseWebsocketConfig struct {
+//GoCQReverseWebSocketConfig 反向WebSocket对应Config结构体
+type GoCQReverseWebSocketConfig struct {
Enabled bool `json:"enabled"`
- ReverseUrl string `json:"reverse_url"`
- ReverseApiUrl string `json:"reverse_api_url"`
- ReverseEventUrl string `json:"reverse_event_url"`
+ ReverseURL string `json:"reverse_url"`
+ ReverseAPIURL string `json:"reverse_api_url"`
+ ReverseEventURL string `json:"reverse_event_url"`
ReverseReconnectInterval uint16 `json:"reverse_reconnect_interval"`
}
-type GoCqWebUi struct {
+//GoCQWebUI WebUI对应Config结构体
+type GoCQWebUI struct {
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"`
}
-func DefaultConfig() *JsonConfig {
- return &JsonConfig{
+//DefaultConfig 返回一份默认配置对应结构体
+func DefaultConfig() *JSONConfig {
+ return &JSONConfig{
EnableDB: true,
ReLogin: struct {
Enabled bool `json:"enabled"`
@@ -237,42 +245,43 @@ func DefaultConfig() *JsonConfig {
},
PostMessageFormat: "string",
ForceFragmented: false,
- HttpConfig: &GoCQHttpConfig{
+ HTTPConfig: &GoCQHTTPConfig{
Enabled: true,
Host: "0.0.0.0",
Port: 5700,
PostUrls: map[string]string{},
},
- WSConfig: &GoCQWebsocketConfig{
+ WSConfig: &GoCQWebSocketConfig{
Enabled: true,
Host: "0.0.0.0",
Port: 6700,
},
- ReverseServers: []*GoCQReverseWebsocketConfig{
+ ReverseServers: []*GoCQReverseWebSocketConfig{
{
Enabled: false,
- ReverseUrl: "ws://you_websocket_universal.server",
- ReverseApiUrl: "ws://you_websocket_api.server",
- ReverseEventUrl: "ws://you_websocket_event.server",
+ ReverseURL: "ws://you_websocket_universal.server",
+ ReverseAPIURL: "ws://you_websocket_api.server",
+ ReverseEventURL: "ws://you_websocket_event.server",
ReverseReconnectInterval: 3000,
},
},
- WebUi: &GoCqWebUi{
+ WebUI: &GoCQWebUI{
Enabled: true,
Host: "127.0.0.1",
WebInput: false,
- WebUiPort: 9999,
+ WebUIPort: 9999,
},
}
}
-func Load(p string) *JsonConfig {
+//Load 加载配置文件
+func Load(p string) *JSONConfig {
if !PathExists(p) {
log.Warnf("尝试加载配置文件 %v 失败: 文件不存在", p)
return nil
}
var dat map[string]interface{}
- var c = JsonConfig{}
+ var c = JSONConfig{}
err := hjson.Unmarshal([]byte(ReadAllText(p)), &dat)
if err == nil {
b, _ := json.Marshal(dat)
@@ -287,7 +296,8 @@ func Load(p string) *JsonConfig {
return &c
}
-func (c *JsonConfig) Save(p string) error {
+//Save 写入配置文件至path
+func (c *JSONConfig) Save(path string) error {
data, err := hjson.MarshalWithOptions(c, hjson.EncoderOptions{
Eol: "\n",
BracesSameLine: true,
@@ -296,5 +306,5 @@ func (c *JsonConfig) Save(p string) error {
if err != nil {
return err
}
- return WriteAllText(p, string(data))
+ return WriteAllText(path, string(data))
}
diff --git a/global/filter.go b/global/filter.go
index 85ed6b2..ef8588a 100644
--- a/global/filter.go
+++ b/global/filter.go
@@ -10,8 +10,14 @@ import (
"github.com/tidwall/gjson"
)
+//MSG 消息Map
type MSG map[string]interface{}
+//Get 尝试从消息Map中取出key为s的值,若不存在则返回MSG{}
+//
+//若所给key对应的值的类型是global.MSG,则返回此值
+//
+//若所给key对应值的类型不是global.MSG,则返回MSG{"__str__": Val}
func (m MSG) Get(s string) MSG {
if v, ok := m[s]; ok {
if msg, ok := v.(MSG); ok {
@@ -22,6 +28,7 @@ func (m MSG) Get(s string) MSG {
return MSG{}
}
+//String 将消息Map转化为String。若Map存在key "__str__",则返回此key对应的值,否则将输出整张消息Map对应的JSON字符串
func (m MSG) String() string {
if str, ok := m["__str__"]; ok {
return fmt.Sprint(str)
@@ -30,6 +37,7 @@ func (m MSG) String() string {
return str
}
+//Filter 定义了一个消息上报过滤接口
type Filter interface {
Eval(payload MSG) bool
}
@@ -39,6 +47,7 @@ type operationNode struct {
filter Filter
}
+//NotOperator 定义了过滤器中Not操作符
type NotOperator struct {
operand Filter
}
@@ -52,10 +61,12 @@ func notOperatorConstruct(argument gjson.Result) *NotOperator {
return op
}
+//Eval 对payload执行Not过滤
func (op *NotOperator) Eval(payload MSG) bool {
return !op.operand.Eval(payload)
}
+//AndOperator 定义了过滤器中And操作符
type AndOperator struct {
operands []operationNode
}
@@ -91,6 +102,7 @@ func andOperatorConstruct(argument gjson.Result) *AndOperator {
return op
}
+//Eval 对payload执行And过滤
func (andOperator *AndOperator) Eval(payload MSG) bool {
res := true
for _, operand := range andOperator.operands {
@@ -111,6 +123,7 @@ func (andOperator *AndOperator) Eval(payload MSG) bool {
return res
}
+//OrOperator 定义了过滤器中Or操作符
type OrOperator struct {
operands []Filter
}
@@ -127,6 +140,7 @@ func orOperatorConstruct(argument gjson.Result) *OrOperator {
return op
}
+//Eval 对payload执行Or过滤
func (op *OrOperator) Eval(payload MSG) bool {
res := false
for _, operand := range op.operands {
@@ -138,6 +152,7 @@ func (op *OrOperator) Eval(payload MSG) bool {
return res
}
+//EqualOperator 定义了过滤器中Equal操作符
type EqualOperator struct {
operand string
}
@@ -148,10 +163,12 @@ func equalOperatorConstruct(argument gjson.Result) *EqualOperator {
return op
}
+//Eval 对payload执行Equal过滤
func (op *EqualOperator) Eval(payload MSG) bool {
return payload.String() == op.operand
}
+//NotEqualOperator 定义了过滤器中NotEqual操作符
type NotEqualOperator struct {
operand string
}
@@ -162,10 +179,12 @@ func notEqualOperatorConstruct(argument gjson.Result) *NotEqualOperator {
return op
}
+//Eval 对payload执行NotEqual过滤
func (op *NotEqualOperator) Eval(payload MSG) bool {
return !(payload.String() == op.operand)
}
+//InOperator 定义了过滤器中In操作符
type InOperator struct {
operandString string
operandArray []string
@@ -188,6 +207,7 @@ func inOperatorConstruct(argument gjson.Result) *InOperator {
return op
}
+//Eval 对payload执行In过滤
func (op *InOperator) Eval(payload MSG) bool {
payloadStr := payload.String()
if op.operandArray != nil {
@@ -201,6 +221,7 @@ func (op *InOperator) Eval(payload MSG) bool {
return strings.Contains(op.operandString, payloadStr)
}
+//ContainsOperator 定义了过滤器中Contains操作符
type ContainsOperator struct {
operand string
}
@@ -214,10 +235,12 @@ func containsOperatorConstruct(argument gjson.Result) *ContainsOperator {
return op
}
+//Eval 对payload执行Contains过滤
func (op *ContainsOperator) Eval(payload MSG) bool {
return strings.Contains(payload.String(), op.operand)
}
+//RegexOperator 定义了过滤器中Regex操作符
type RegexOperator struct {
regex *regexp.Regexp
}
@@ -231,11 +254,13 @@ func regexOperatorConstruct(argument gjson.Result) *RegexOperator {
return op
}
+//Eval 对payload执行RegexO过滤
func (op *RegexOperator) Eval(payload MSG) bool {
matched := op.regex.MatchString(payload.String())
return matched
}
+//Generate 根据给定操作符名opName及操作符参数argument创建一个过滤器实例
func Generate(opName string, argument gjson.Result) Filter {
switch opName {
case "not":
@@ -259,8 +284,10 @@ func Generate(opName string, argument gjson.Result) Filter {
}
}
+//EventFilter 初始化一个nil过滤器
var EventFilter Filter = nil
+//BootFilter 启动事件过滤器
func BootFilter() {
defer func() {
if e := recover(); e != nil {
diff --git a/global/fs.go b/global/fs.go
index 4a00ffb..a6760a6 100644
--- a/global/fs.go
+++ b/global/fs.go
@@ -9,7 +9,6 @@ import (
"encoding/hex"
"errors"
"fmt"
- "github.com/kardianos/osext"
"io"
"io/ioutil"
"net"
@@ -21,75 +20,95 @@ import (
"strconv"
"strings"
+ "github.com/kardianos/osext"
+
"github.com/dustin/go-humanize"
log "github.com/sirupsen/logrus"
)
-var (
- IMAGE_PATH = path.Join("data", "images")
- IMAGE_PATH_OLD = path.Join("data", "image")
- VOICE_PATH = path.Join("data", "voices")
- VOICE_PATH_OLD = path.Join("data", "record")
- VIDEO_PATH = path.Join("data", "videos")
- CACHE_PATH = path.Join("data", "cache")
-
- HEADER_AMR = []byte("#!AMR")
- HEADER_SILK = []byte("\x02#!SILK_V3")
-
- ErrSyntax = errors.New("syntax error")
+const (
+ //ImagePath go-cqhttp使用的图片缓存目录
+ ImagePath = "data/images"
+ //ImagePathOld 兼容旧版go-cqhtto使用的图片缓存目录
+ ImagePathOld = "data/image"
+ //VoicePath go-cqhttp使用的语音缓存目录
+ VoicePath = "data/voices"
+ //VoicePathOld 兼容旧版go-cqhtto使用的语音缓存目录
+ VoicePathOld = "data/record"
+ //VideoPath go-cqhttp使用的视频缓存目录
+ VideoPath = "data/videos"
+ //CachePath go-cqhttp使用的缓存目录
+ CachePath = "data/cache"
)
+var (
+ //ErrSyntax Path语法错误时返回的错误
+ ErrSyntax = errors.New("syntax error")
+ //HeaderAmr AMR文件头
+ HeaderAmr = []byte("#!AMR")
+ //HeaderSilk Silkv3文件头
+ HeaderSilk = []byte("\x02#!SILK_V3")
+)
+
+//PathExists 判断给定path是否存在
func PathExists(path string) bool {
_, err := os.Stat(path)
return err == nil || os.IsExist(err)
}
+//ReadAllText 读取给定path对应文件,无法读取时返回空值
func ReadAllText(path string) string {
b, err := ioutil.ReadFile(path)
if err != nil {
+ log.Error(err)
return ""
}
return string(b)
}
+//WriteAllText 将给定text写入给定path
func WriteAllText(path, text string) error {
return ioutil.WriteFile(path, []byte(text), 0644)
}
+//Check 检测err是否为nil
func Check(err error) {
if err != nil {
log.Fatalf("遇到错误: %v", err)
}
}
+//IsAMRorSILK 判断给定文件是否为Amr或Silk格式
func IsAMRorSILK(b []byte) bool {
- return bytes.HasPrefix(b, HEADER_AMR) || bytes.HasPrefix(b, HEADER_SILK)
+ return bytes.HasPrefix(b, HeaderAmr) || bytes.HasPrefix(b, HeaderSilk)
}
-func FindFile(f, cache, PATH string) (data []byte, err error) {
+//FindFile 从给定的File寻找文件,并返回文件byte数组。File是一个合法的URL。Path为文件寻找位置。
+//对于HTTP/HTTPS形式的URL,Cache为"1"或空时表示启用缓存
+func FindFile(file, cache, PATH string) (data []byte, err error) {
data, err = nil, ErrSyntax
- if strings.HasPrefix(f, "http") || strings.HasPrefix(f, "https") {
+ if strings.HasPrefix(file, "http") || strings.HasPrefix(file, "https") {
if cache == "" {
cache = "1"
}
- hash := md5.Sum([]byte(f))
- cacheFile := path.Join(CACHE_PATH, hex.EncodeToString(hash[:])+".cache")
+ hash := md5.Sum([]byte(file))
+ cacheFile := path.Join(CachePath, hex.EncodeToString(hash[:])+".cache")
if PathExists(cacheFile) && cache == "1" {
return ioutil.ReadFile(cacheFile)
}
- data, err = GetBytes(f)
+ data, err = GetBytes(file)
_ = ioutil.WriteFile(cacheFile, data, 0644)
if err != nil {
return nil, err
}
- } else if strings.HasPrefix(f, "base64") {
- data, err = base64.StdEncoding.DecodeString(strings.ReplaceAll(f, "base64://", ""))
+ } else if strings.HasPrefix(file, "base64") {
+ data, err = base64.StdEncoding.DecodeString(strings.ReplaceAll(file, "base64://", ""))
if err != nil {
return nil, err
}
- } else if strings.HasPrefix(f, "file") {
+ } else if strings.HasPrefix(file, "file") {
var fu *url.URL
- fu, err = url.Parse(f)
+ fu, err = url.Parse(file)
if err != nil {
return nil, err
}
@@ -100,8 +119,8 @@ func FindFile(f, cache, PATH string) (data []byte, err error) {
if err != nil {
return nil, err
}
- } else if PathExists(path.Join(PATH, f)) {
- data, err = ioutil.ReadFile(path.Join(PATH, f))
+ } else if PathExists(path.Join(PATH, file)) {
+ data, err = ioutil.ReadFile(path.Join(PATH, file))
if err != nil {
return nil, err
}
@@ -109,19 +128,20 @@ func FindFile(f, cache, PATH string) (data []byte, err error) {
return
}
+//DelFile 删除一个给定path,并返回删除结果
func DelFile(path string) bool {
err := os.Remove(path)
if err != nil {
// 删除失败
log.Error(err)
return false
- } else {
- // 删除成功
- log.Info(path + "删除成功")
- return true
}
+ // 删除成功
+ log.Info(path + "删除成功")
+ return true
}
+//ReadAddrFile 从给定path中读取合法的IP地址与端口,每个IP地址以换行符"\n"作为分隔
func ReadAddrFile(path string) []*net.TCPAddr {
d, err := ioutil.ReadFile(path)
if err != nil {
@@ -140,10 +160,12 @@ func ReadAddrFile(path string) []*net.TCPAddr {
return ret
}
+//WriteCounter 写入量计算实例
type WriteCounter struct {
Total uint64
}
+//Write 方法将写入的byte长度追加至写入的总长度Total中
func (wc *WriteCounter) Write(p []byte) (int, error) {
n := len(p)
wc.Total += uint64(n)
@@ -151,12 +173,13 @@ func (wc *WriteCounter) Write(p []byte) (int, error) {
return n, nil
}
-func (wc WriteCounter) PrintProgress() {
+//PrintProgress 方法将打印当前的总写入量
+func (wc *WriteCounter) PrintProgress() {
fmt.Printf("\r%s", strings.Repeat(" ", 35))
fmt.Printf("\rDownloading... %s complete", humanize.Bytes(wc.Total))
}
-// UpdateFromStream copy form getlantern/go-update
+//UpdateFromStream copy form getlantern/go-update
func UpdateFromStream(updateWith io.Reader) (err error, errRecover error) {
updatePath, err := osext.Executable()
if err != nil {
diff --git a/global/net.go b/global/net.go
index e9d6069..93756ed 100644
--- a/global/net.go
+++ b/global/net.go
@@ -5,8 +5,6 @@ import (
"bytes"
"compress/gzip"
"fmt"
- "github.com/guonaihong/gout"
- "github.com/pkg/errors"
"io"
"io/ioutil"
"net"
@@ -18,6 +16,9 @@ import (
"sync"
"time"
+ "github.com/guonaihong/gout"
+ "github.com/pkg/errors"
+
"github.com/tidwall/gjson"
)
@@ -44,13 +45,18 @@ var (
MaxIdleConnsPerHost: 999,
},
}
+
+ //Proxy 存储Config.proxy_rewrite,用于设置代理
Proxy string
+ //ErrOverSize 响应主体过大时返回此错误
ErrOverSize = errors.New("oversize")
+ //UserAgent HTTP请求时使用的UA
UserAgent = "Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/87.0.4280.88 Safari/537.36 Edg/87.0.664.66"
)
+//GetBytes 对给定URL发送Get请求,返回响应主体
func GetBytes(url string) ([]byte, error) {
req, err := http.NewRequest("GET", url, nil)
if err != nil {
@@ -76,6 +82,7 @@ func GetBytes(url string) ([]byte, error) {
return body, nil
}
+//DownloadFile 将给定URL对应的文件下载至给定Path
func DownloadFile(url, path string, limit int64, headers map[string]string) error {
file, err := os.OpenFile(path, os.O_WRONLY|os.O_CREATE, 0666)
if err != nil {
@@ -109,6 +116,7 @@ func DownloadFile(url, path string, limit int64, headers map[string]string) erro
return nil
}
+//DownloadFileMultiThreading 使用threadCount个线程将给定URL对应的文件下载至给定Path
func DownloadFileMultiThreading(url, path string, limit int64, threadCount int, headers map[string]string) error {
if threadCount < 2 {
return DownloadFile(url, path, limit, headers)
@@ -168,9 +176,9 @@ func DownloadFileMultiThreading(url, path string, limit int64, threadCount int,
blockSize := func() int64 {
if contentLength > 1024*1024 {
return (contentLength / int64(threadCount)) - 10
- } else {
- return contentLength
}
+ return contentLength
+
}()
if blockSize == contentLength {
return copyStream(resp.Body)
@@ -189,7 +197,7 @@ func DownloadFileMultiThreading(url, path string, limit int64, threadCount int,
})
return nil
}
- return errors.New("unknown status code.")
+ return errors.New("unknown status code")
}
// 下载分块
downloadBlock := func(block *BlockMetaData) error {
@@ -266,6 +274,7 @@ func DownloadFileMultiThreading(url, path string, limit int64, threadCount int,
return lastErr
}
+//GetSliderTicket 通过给定的验证链接raw和id,获取验证结果Ticket
func GetSliderTicket(raw, id string) (string, error) {
var rsp string
if err := gout.POST("https://api.shkong.com/gocqhttpapi/task").SetJSON(gout.H{
@@ -281,6 +290,7 @@ func GetSliderTicket(raw, id string) (string, error) {
return g.Get("ticket").Str, nil
}
+//QQMusicSongInfo 通过给定id在QQ音乐上查找曲目信息
func QQMusicSongInfo(id string) (gjson.Result, error) {
d, err := GetBytes(`https://u.y.qq.com/cgi-bin/musicu.fcg?format=json&inCharset=utf8&outCharset=utf-8¬ice=0&platform=yqq.json&needNewCode=0&data={%22comm%22:{%22ct%22:24,%22cv%22:0},%22songinfo%22:{%22method%22:%22get_song_detail_yqq%22,%22param%22:{%22song_type%22:0,%22song_mid%22:%22%22,%22song_id%22:` + id + `},%22module%22:%22music.pf_song_detail_svr%22}}`)
if err != nil {
@@ -289,6 +299,7 @@ func QQMusicSongInfo(id string) (gjson.Result, error) {
return gjson.ParseBytes(d).Get("songinfo.data"), nil
}
+//NeteaseMusicSongInfo 通过给定id在wdd音乐上查找曲目信息
func NeteaseMusicSongInfo(id string) (gjson.Result, error) {
d, err := GetBytes(fmt.Sprintf("http://music.163.com/api/song/detail/?id=%s&ids=%%5B%s%%5D", id, id))
if err != nil {
diff --git a/global/param.go b/global/param.go
index 3d18273..d89d7d2 100644
--- a/global/param.go
+++ b/global/param.go
@@ -21,6 +21,15 @@ var falseSet = map[string]struct{}{
"0": {},
}
+//EnsureBool 判断给定的p是否可表示为合法Bool类型,否则返回defaultVal
+//
+//支持的合法类型有
+//
+//type bool
+//
+//type gjson.True or gjson.False
+//
+//type string "true","yes","1" or "false","no","0" (case insensitive)
func EnsureBool(p interface{}, defaultVal bool) bool {
var str string
if b, ok := p.(bool); ok {
@@ -54,9 +63,13 @@ func EnsureBool(p interface{}, defaultVal bool) bool {
}
// VersionNameCompare 检查版本名是否需要更新, 仅适用于 go-cqhttp 的版本命名规则
+//
// 例: v0.9.29-fix2 == v0.9.29-fix2 -> false
+//
// v0.9.29-fix1 < v0.9.29-fix2 -> true
+//
// v0.9.29-fix2 > v0.9.29-fix1 -> false
+//
// v0.9.29-fix2 < v0.9.30 -> true
func VersionNameCompare(current, remote string) bool {
sp := regexp.MustCompile(`[0-9]\d*`)
@@ -72,8 +85,9 @@ func VersionNameCompare(current, remote string) bool {
return len(cur) < len(re)
}
-func SplitUrl(s string) []string {
- reg := regexp.MustCompile(`[a-zA-Z0-9][-a-zA-Z0-9]{0,62}(\.[a-zA-Z0-9][-a-zA-Z0-9]{0,62})+\.?`)
+//SplitURL 将给定URL字符串分割为两部分,用于URL预处理防止风控
+func SplitURL(s string) []string {
+ reg := regexp.MustCompile(`(?i)[a-z\d][-a-z\d]{0,62}(\.[a-z\d][-a-z\d]{0,62})+\.?`)
idx := reg.FindAllStringIndex(s, -1)
if len(idx) == 0 {
return []string{s}
diff --git a/global/ratelimit.go b/global/ratelimit.go
index b8bfb2a..5983922 100644
--- a/global/ratelimit.go
+++ b/global/ratelimit.go
@@ -9,13 +9,15 @@ import (
var limiter *rate.Limiter
var limitEnable = false
+//RateLimit 执行API调用速率限制
func RateLimit(ctx context.Context) {
if limitEnable {
_ = limiter.Wait(ctx)
}
}
-func InitLimiter(r float64, b int) {
+//InitLimiter 初始化速率限制器
+func InitLimiter(frequency float64, bucketSize int) {
limitEnable = true
- limiter = rate.NewLimiter(rate.Limit(r), b)
+ limiter = rate.NewLimiter(rate.Limit(frequency), bucketSize)
}
diff --git a/main.go b/main.go
index 9d00052..63a756c 100644
--- a/main.go
+++ b/main.go
@@ -46,23 +46,23 @@ func init() {
if err == nil {
log.SetOutput(io.MultiWriter(os.Stderr, w))
}
- if !global.PathExists(global.IMAGE_PATH) {
- if err := os.MkdirAll(global.IMAGE_PATH, 0755); err != nil {
+ if !global.PathExists(global.ImagePath) {
+ if err := os.MkdirAll(global.ImagePath, 0755); err != nil {
log.Fatalf("创建图片缓存文件夹失败: %v", err)
}
}
- if !global.PathExists(global.VOICE_PATH) {
- if err := os.MkdirAll(global.VOICE_PATH, 0755); err != nil {
+ if !global.PathExists(global.VoicePath) {
+ if err := os.MkdirAll(global.VoicePath, 0755); err != nil {
log.Fatalf("创建语音缓存文件夹失败: %v", err)
}
}
- if !global.PathExists(global.VIDEO_PATH) {
- if err := os.MkdirAll(global.VIDEO_PATH, 0755); err != nil {
+ if !global.PathExists(global.VideoPath) {
+ if err := os.MkdirAll(global.VideoPath, 0755); err != nil {
log.Fatalf("创建视频缓存文件夹失败: %v", err)
}
}
- if !global.PathExists(global.CACHE_PATH) {
- if err := os.MkdirAll(global.CACHE_PATH, 0755); err != nil {
+ if !global.PathExists(global.CachePath) {
+ if err := os.MkdirAll(global.CachePath, 0755); err != nil {
log.Fatalf("创建发送图片缓存文件夹失败: %v", err)
}
}
@@ -70,24 +70,24 @@ func init() {
log.Info("发现 cqhttp.json 将在五秒后尝试导入配置,按 Ctrl+C 取消.")
log.Warn("警告: 该操作会删除 cqhttp.json 并覆盖 config.hjson 文件.")
time.Sleep(time.Second * 5)
- conf := global.CQHttpApiConfig{}
+ conf := global.CQHTTPAPIConfig{}
if err := json.Unmarshal([]byte(global.ReadAllText("cqhttp.json")), &conf); err != nil {
log.Fatalf("读取文件 cqhttp.json 失败: %v", err)
}
goConf := global.DefaultConfig()
goConf.AccessToken = conf.AccessToken
- goConf.HttpConfig.Host = conf.Host
- goConf.HttpConfig.Port = conf.Port
+ goConf.HTTPConfig.Host = conf.Host
+ goConf.HTTPConfig.Port = conf.Port
goConf.WSConfig.Host = conf.WSHost
goConf.WSConfig.Port = conf.WSPort
- if conf.PostUrl != "" {
- goConf.HttpConfig.PostUrls[conf.PostUrl] = conf.Secret
+ if conf.PostURL != "" {
+ goConf.HTTPConfig.PostUrls[conf.PostURL] = conf.Secret
}
if conf.UseWsReverse {
goConf.ReverseServers[0].Enabled = true
- goConf.ReverseServers[0].ReverseUrl = conf.WSReverseUrl
- goConf.ReverseServers[0].ReverseApiUrl = conf.WSReverseApiUrl
- goConf.ReverseServers[0].ReverseEventUrl = conf.WSReverseEventUrl
+ goConf.ReverseServers[0].ReverseURL = conf.WSReverseURL
+ goConf.ReverseServers[0].ReverseAPIURL = conf.WSReverseAPIURL
+ goConf.ReverseServers[0].ReverseEventURL = conf.WSReverseEventURL
goConf.ReverseServers[0].ReverseReconnectInterval = conf.WSReverseReconnectInterval
}
if err := goConf.Save("config.hjson"); err != nil {
@@ -122,7 +122,7 @@ func main() {
}
}
- var conf *global.JsonConfig
+ var conf *global.JSONConfig
if global.PathExists("config.json") {
conf = global.Load("config.json")
_ = conf.Save("config.hjson")
@@ -132,16 +132,16 @@ func main() {
uin, _ := strconv.ParseInt(os.Getenv("UIN"), 10, 64)
pwd := os.Getenv("PASS")
post := os.Getenv("HTTP_POST")
- conf = &global.JsonConfig{
+ conf = &global.JSONConfig{
Uin: uin,
Password: pwd,
- HttpConfig: &global.GoCQHttpConfig{
+ HTTPConfig: &global.GoCQHTTPConfig{
Enabled: true,
Host: "0.0.0.0",
Port: 5700,
PostUrls: map[string]string{},
},
- WSConfig: &global.GoCQWebsocketConfig{
+ WSConfig: &global.GoCQWebSocketConfig{
Enabled: true,
Host: "0.0.0.0",
Port: 6700,
@@ -150,7 +150,7 @@ func main() {
Debug: os.Getenv("DEBUG") == "true",
}
if post != "" {
- conf.HttpConfig.PostUrls[post] = os.Getenv("HTTP_SECRET")
+ conf.HTTPConfig.PostUrls[post] = os.Getenv("HTTP_SECRET")
}
} else {
conf = global.Load("config.hjson")
@@ -215,7 +215,7 @@ func main() {
log.Warnf("已开启Debug模式.")
log.Debugf("开发交流群: 192548878")
server.Debug = true
- if conf.WebUi == nil || !conf.WebUi.Enabled {
+ if conf.WebUI == nil || !conf.WebUI.Enabled {
log.Warnf("警告: 在Debug模式下未启用WebUi服务, 将无法进行性能分析.")
}
}
@@ -310,22 +310,22 @@ func main() {
log.Infof("收到服务器地址更新通知, 将在下一次重连时应用. ")
return true
})
- if conf.WebUi == nil {
- conf.WebUi = &global.GoCqWebUi{
+ if conf.WebUI == nil {
+ conf.WebUI = &global.GoCQWebUI{
Enabled: true,
WebInput: false,
Host: "0.0.0.0",
- WebUiPort: 9999,
+ WebUIPort: 9999,
}
}
- if conf.WebUi.WebUiPort <= 0 {
- conf.WebUi.WebUiPort = 9999
+ if conf.WebUI.WebUIPort <= 0 {
+ conf.WebUI.WebUIPort = 9999
}
- if conf.WebUi.Host == "" {
- conf.WebUi.Host = "127.0.0.1"
+ if conf.WebUI.Host == "" {
+ conf.WebUI.Host = "127.0.0.1"
}
global.Proxy = conf.ProxyRewrite
- b := server.WebServer.Run(fmt.Sprintf("%s:%d", conf.WebUi.Host, conf.WebUi.WebUiPort), cli)
+ b := server.WebServer.Run(fmt.Sprintf("%s:%d", conf.WebUI.Host, conf.WebUI.WebUIPort), cli)
c := server.Console
r := server.Restart
go checkUpdate()
@@ -340,6 +340,7 @@ func main() {
}
}
+//EncryptPwd 通过给定key加密给定pwd
func EncryptPwd(pwd string, key []byte) string {
tea := binary.NewTeaCipher(key)
if tea == nil {
@@ -348,6 +349,7 @@ func EncryptPwd(pwd string, key []byte) string {
return base64.StdEncoding.EncodeToString(tea.Encrypt([]byte(pwd)))
}
+//DecryptPwd 通过给定key解密给定ePwd
func DecryptPwd(ePwd string, key []byte) string {
defer func() {
if pan := recover(); pan != nil {
@@ -389,7 +391,7 @@ func checkUpdate() {
log.Infof("检查更新完成. 当前已运行最新版本.")
}
-func selfUpdate(imageUrl string) {
+func selfUpdate(imageURL string) {
console := bufio.NewReader(os.Stdin)
readLine := func() (str string) {
str, _ = console.ReadString('\n')
@@ -417,8 +419,8 @@ func selfUpdate(imageUrl string) {
url := fmt.Sprintf(
"%v/Mrs4s/go-cqhttp/releases/download/%v/go-cqhttp-%v-%v-%v",
func() string {
- if imageUrl != "" {
- return imageUrl
+ if imageURL != "" {
+ return imageURL
}
return "https://github.com"
}(),
diff --git a/server/apiAdmin.go b/server/apiAdmin.go
index 85764d1..deab769 100644
--- a/server/apiAdmin.go
+++ b/server/apiAdmin.go
@@ -36,13 +36,13 @@ var Console = make(chan os.Signal, 1)
var Restart = make(chan struct{}, 1)
-var JsonConfig *global.JsonConfig
+var JSONConfig *global.JSONConfig
type webServer struct {
engine *gin.Engine
bot *coolq.CQBot
Cli *client.QQClient
- Conf *global.JsonConfig //old config
+ Conf *global.JSONConfig //old config
Console *bufio.Reader
}
@@ -70,7 +70,7 @@ func Failed(code int, msg string) coolq.MSG {
func (s *webServer) Run(addr string, cli *client.QQClient) *coolq.CQBot {
s.Cli = cli
s.Conf = GetConf()
- JsonConfig = s.Conf
+ JSONConfig = s.Conf
gin.SetMode(gin.ReleaseMode)
s.engine = gin.New()
@@ -81,7 +81,7 @@ func (s *webServer) Run(addr string, cli *client.QQClient) *coolq.CQBot {
go func() {
//开启端口监听
- if s.Conf.WebUi != nil && s.Conf.WebUi.Enabled {
+ if s.Conf.WebUI != nil && s.Conf.WebUI.Enabled {
if Debug {
pprof.Register(s.engine)
log.Debugf("pprof 性能分析服务已启动在 http://%v/debug/pprof, 如果有任何性能问题请下载报告并提交给开发者", addr)
@@ -166,8 +166,8 @@ func (s *webServer) Dologin() {
_ = ioutil.WriteFile("captcha.jpg", rsp.CaptchaImage, 0644)
img, _, _ := image.Decode(bytes.NewReader(rsp.CaptchaImage))
fmt.Println(asciiart.New("image", img).Art)
- if conf.WebUi != nil && conf.WebUi.WebInput {
- log.Warnf("请输入验证码 (captcha.jpg): (http://%s:%d/admin/do_web_write 输入)", conf.WebUi.Host, conf.WebUi.WebUiPort)
+ if conf.WebUI != nil && conf.WebUI.WebInput {
+ log.Warnf("请输入验证码 (captcha.jpg): (http://%s:%d/admin/do_web_write 输入)", conf.WebUI.Host, conf.WebUI.WebUIPort)
text = <-WebInput
} else {
log.Warn("请输入验证码 (captcha.jpg): (Enter 提交)")
@@ -212,8 +212,8 @@ func (s *webServer) Dologin() {
return
case client.UnsafeDeviceError:
log.Warnf("账号已开启设备锁,请前往 -> %v <- 验证并重启Bot.", rsp.VerifyUrl)
- if conf.WebUi != nil && conf.WebUi.WebInput {
- log.Infof(" (http://%s:%d/admin/do_web_write 确认后继续)....", conf.WebUi.Host, conf.WebUi.WebUiPort)
+ if conf.WebUI != nil && conf.WebUI.WebInput {
+ log.Infof(" (http://%s:%d/admin/do_web_write 确认后继续)....", conf.WebUI.Host, conf.WebUI.WebUIPort)
text = <-WebInput
} else {
log.Infof("按 Enter 继续....")
@@ -266,7 +266,7 @@ func (s *webServer) Dologin() {
global.BootFilter()
global.InitCodec()
coolq.IgnoreInvalidCQCode = conf.IgnoreInvalidCQCode
- coolq.SplitUrl = conf.FixUrl
+ coolq.SplitUrl = conf.FixURL
coolq.ForceFragmented = conf.ForceFragmented
log.Info("资源初始化完成, 开始处理信息.")
log.Info("アトリは、高性能ですから!")
@@ -329,9 +329,9 @@ func (s *webServer) admin(c *gin.Context) {
}
// 获取当前配置文件信息
-func GetConf() *global.JsonConfig {
- if JsonConfig != nil {
- return JsonConfig
+func GetConf() *global.JSONConfig {
+ if JSONConfig != nil {
+ return JSONConfig
}
conf := global.Load("config.hjson")
return conf
@@ -391,7 +391,7 @@ func AuthMiddleWare() gin.HandlerFunc {
}
func (s *webServer) DoReLogin() { // TODO: 协议层的 ReLogin
- JsonConfig = nil
+ JSONConfig = nil
conf := GetConf()
OldConf := s.Conf
cli := client.NewClient(conf.Uin, conf.Password)
@@ -430,7 +430,7 @@ func (s *webServer) DoReLogin() { // TODO: 协议层的 ReLogin
s.Cli = cli
s.Dologin()
//关闭之前的 server
- if OldConf.HttpConfig != nil && OldConf.HttpConfig.Enabled {
+ if OldConf.HTTPConfig != nil && OldConf.HTTPConfig.Enabled {
HttpServer.ShutDown()
}
//if OldConf.WSConfig != nil && OldConf.WSConfig.Enabled {
@@ -443,31 +443,31 @@ func (s *webServer) DoReLogin() { // TODO: 协议层的 ReLogin
func (s *webServer) UpServer() {
conf := GetConf()
- if conf.HttpConfig != nil && conf.HttpConfig.Enabled {
- go HttpServer.Run(fmt.Sprintf("%s:%d", conf.HttpConfig.Host, conf.HttpConfig.Port), conf.AccessToken, s.bot)
- for k, v := range conf.HttpConfig.PostUrls {
- NewHttpClient().Run(k, v, conf.HttpConfig.Timeout, s.bot)
+ if conf.HTTPConfig != nil && conf.HTTPConfig.Enabled {
+ go HttpServer.Run(fmt.Sprintf("%s:%d", conf.HTTPConfig.Host, conf.HTTPConfig.Port), conf.AccessToken, s.bot)
+ for k, v := range conf.HTTPConfig.PostUrls {
+ NewHttpClient().Run(k, v, conf.HTTPConfig.Timeout, s.bot)
}
}
if conf.WSConfig != nil && conf.WSConfig.Enabled {
- go WebsocketServer.Run(fmt.Sprintf("%s:%d", conf.WSConfig.Host, conf.WSConfig.Port), conf.AccessToken, s.bot)
+ go WebSocketServer.Run(fmt.Sprintf("%s:%d", conf.WSConfig.Host, conf.WSConfig.Port), conf.AccessToken, s.bot)
}
for _, rc := range conf.ReverseServers {
- go NewWebsocketClient(rc, conf.AccessToken, s.bot).Run()
+ go NewWebSocketClient(rc, conf.AccessToken, s.bot).Run()
}
}
// 暂不支持ws服务的重启
func (s *webServer) ReloadServer() {
conf := GetConf()
- if conf.HttpConfig != nil && conf.HttpConfig.Enabled {
- go HttpServer.Run(fmt.Sprintf("%s:%d", conf.HttpConfig.Host, conf.HttpConfig.Port), conf.AccessToken, s.bot)
- for k, v := range conf.HttpConfig.PostUrls {
- NewHttpClient().Run(k, v, conf.HttpConfig.Timeout, s.bot)
+ if conf.HTTPConfig != nil && conf.HTTPConfig.Enabled {
+ go HttpServer.Run(fmt.Sprintf("%s:%d", conf.HTTPConfig.Host, conf.HTTPConfig.Port), conf.AccessToken, s.bot)
+ for k, v := range conf.HTTPConfig.PostUrls {
+ NewHttpClient().Run(k, v, conf.HTTPConfig.Timeout, s.bot)
}
}
for _, rc := range conf.ReverseServers {
- go NewWebsocketClient(rc, conf.AccessToken, s.bot).Run()
+ go NewWebSocketClient(rc, conf.AccessToken, s.bot).Run()
}
}
@@ -531,7 +531,7 @@ func AdminDoConfigBase(s *webServer, c *gin.Context) {
log.Fatalf("保存 config.hjson 时出现错误: %v", err)
c.JSON(200, Failed(502, "保存 config.hjson 时出现错误:"+fmt.Sprintf("%v", err)))
} else {
- JsonConfig = nil
+ JSONConfig = nil
c.JSON(200, coolq.OK(coolq.MSG{}))
}
}
@@ -540,23 +540,23 @@ func AdminDoConfigBase(s *webServer, c *gin.Context) {
func AdminDoConfigHttp(s *webServer, c *gin.Context) {
conf := GetConf()
p, _ := strconv.ParseUint(c.PostForm("port"), 10, 16)
- conf.HttpConfig.Port = uint16(p)
- conf.HttpConfig.Host = c.PostForm("host")
+ conf.HTTPConfig.Port = uint16(p)
+ conf.HTTPConfig.Host = c.PostForm("host")
if c.PostForm("enable") == "true" {
- conf.HttpConfig.Enabled = true
+ conf.HTTPConfig.Enabled = true
} else {
- conf.HttpConfig.Enabled = false
+ conf.HTTPConfig.Enabled = false
}
t, _ := strconv.ParseInt(c.PostForm("timeout"), 10, 32)
- conf.HttpConfig.Timeout = int32(t)
+ conf.HTTPConfig.Timeout = int32(t)
if c.PostForm("post_url") != "" {
- conf.HttpConfig.PostUrls[c.PostForm("post_url")] = c.PostForm("post_secret")
+ conf.HTTPConfig.PostUrls[c.PostForm("post_url")] = c.PostForm("post_secret")
}
if err := conf.Save("config.hjson"); err != nil {
log.Fatalf("保存 config.hjson 时出现错误: %v", err)
c.JSON(200, Failed(502, "保存 config.hjson 时出现错误:"+fmt.Sprintf("%v", err)))
} else {
- JsonConfig = nil
+ JSONConfig = nil
c.JSON(200, coolq.OK(coolq.MSG{}))
}
}
@@ -576,7 +576,7 @@ func AdminDoConfigWs(s *webServer, c *gin.Context) {
log.Fatalf("保存 config.hjson 时出现错误: %v", err)
c.JSON(200, Failed(502, "保存 config.hjson 时出现错误:"+fmt.Sprintf("%v", err)))
} else {
- JsonConfig = nil
+ JSONConfig = nil
c.JSON(200, coolq.OK(coolq.MSG{}))
}
}
@@ -584,9 +584,9 @@ func AdminDoConfigWs(s *webServer, c *gin.Context) {
// 反向ws配置修改
func AdminDoConfigReverse(s *webServer, c *gin.Context) {
conf := GetConf()
- conf.ReverseServers[0].ReverseApiUrl = c.PostForm("reverse_api_url")
- conf.ReverseServers[0].ReverseUrl = c.PostForm("reverse_url")
- conf.ReverseServers[0].ReverseEventUrl = c.PostForm("reverse_event_url")
+ conf.ReverseServers[0].ReverseAPIURL = c.PostForm("reverse_api_url")
+ conf.ReverseServers[0].ReverseURL = c.PostForm("reverse_url")
+ conf.ReverseServers[0].ReverseEventURL = c.PostForm("reverse_event_url")
t, _ := strconv.ParseUint(c.PostForm("reverse_reconnect_interval"), 10, 16)
conf.ReverseServers[0].ReverseReconnectInterval = uint16(t)
if c.PostForm("enable") == "true" {
@@ -598,7 +598,7 @@ func AdminDoConfigReverse(s *webServer, c *gin.Context) {
log.Fatalf("保存 config.hjson 时出现错误: %v", err)
c.JSON(200, Failed(502, "保存 config.hjson 时出现错误:"+fmt.Sprintf("%v", err)))
} else {
- JsonConfig = nil
+ JSONConfig = nil
c.JSON(200, coolq.OK(coolq.MSG{}))
}
}
@@ -617,7 +617,7 @@ func AdminDoConfigJson(s *webServer, c *gin.Context) {
log.Fatalf("保存 config.hjson 时出现错误: %v", err)
c.JSON(200, Failed(502, "保存 config.hjson 时出现错误:"+fmt.Sprintf("%v", err)))
} else {
- JsonConfig = nil
+ JSONConfig = nil
c.JSON(200, coolq.OK(coolq.MSG{}))
}
}
diff --git a/server/websocket.go b/server/websocket.go
index 5bcd460..6fb1d14 100644
--- a/server/websocket.go
+++ b/server/websocket.go
@@ -17,36 +17,38 @@ import (
"github.com/tidwall/gjson"
)
-type websocketServer struct {
+type webSocketServer struct {
bot *coolq.CQBot
token string
- eventConn []*websocketConn
+ eventConn []*webSocketConn
eventConnMutex sync.Mutex
handshake string
}
-type websocketClient struct {
- conf *global.GoCQReverseWebsocketConfig
+//WebSocketClient Websocket客户端实例
+type WebSocketClient struct {
+ conf *global.GoCQReverseWebSocketConfig
token string
bot *coolq.CQBot
- universalConn *websocketConn
- eventConn *websocketConn
+ universalConn *webSocketConn
+ eventConn *webSocketConn
}
-type websocketConn struct {
+type webSocketConn struct {
*websocket.Conn
sync.Mutex
}
-var WebsocketServer = &websocketServer{}
+//WebSocketServer 初始化一个WebSocketServer实例
+var WebSocketServer = &webSocketServer{}
var upgrader = websocket.Upgrader{
CheckOrigin: func(r *http.Request) bool {
return true
},
}
-func (s *websocketServer) Run(addr, authToken string, b *coolq.CQBot) {
+func (s *webSocketServer) Run(addr, authToken string, b *coolq.CQBot) {
s.token = authToken
s.bot = b
s.handshake = fmt.Sprintf(`{"_post_method":2,"meta_event_type":"lifecycle","post_type":"meta_event","self_id":%d,"sub_type":"connect","time":%d}`,
@@ -61,29 +63,31 @@ func (s *websocketServer) Run(addr, authToken string, b *coolq.CQBot) {
}()
}
-func NewWebsocketClient(conf *global.GoCQReverseWebsocketConfig, authToken string, b *coolq.CQBot) *websocketClient {
- return &websocketClient{conf: conf, token: authToken, bot: b}
+//NewWebSocketClient 初始化一个NWebSocket客户端
+func NewWebSocketClient(conf *global.GoCQReverseWebSocketConfig, authToken string, b *coolq.CQBot) *WebSocketClient {
+ return &WebSocketClient{conf: conf, token: authToken, bot: b}
}
-func (c *websocketClient) Run() {
+//Run 运行实例
+func (c *WebSocketClient) Run() {
if !c.conf.Enabled {
return
}
- if c.conf.ReverseUrl != "" {
+ if c.conf.ReverseURL != "" {
c.connectUniversal()
} else {
- if c.conf.ReverseApiUrl != "" {
- c.connectApi()
+ if c.conf.ReverseAPIURL != "" {
+ c.connectAPI()
}
- if c.conf.ReverseEventUrl != "" {
+ if c.conf.ReverseEventURL != "" {
c.connectEvent()
}
}
c.bot.OnEventPush(c.onBotPushEvent)
}
-func (c *websocketClient) connectApi() {
- log.Infof("开始尝试连接到反向Websocket API服务器: %v", c.conf.ReverseApiUrl)
+func (c *WebSocketClient) connectAPI() {
+ log.Infof("开始尝试连接到反向Websocket API服务器: %v", c.conf.ReverseAPIURL)
header := http.Header{
"X-Client-Role": []string{"API"},
"X-Self-ID": []string{strconv.FormatInt(c.bot.Client.Uin, 10)},
@@ -92,22 +96,22 @@ func (c *websocketClient) connectApi() {
if c.token != "" {
header["Authorization"] = []string{"Token " + c.token}
}
- conn, _, err := websocket.DefaultDialer.Dial(c.conf.ReverseApiUrl, header)
+ conn, _, err := websocket.DefaultDialer.Dial(c.conf.ReverseAPIURL, header)
if err != nil {
- log.Warnf("连接到反向Websocket API服务器 %v 时出现错误: %v", c.conf.ReverseApiUrl, err)
+ log.Warnf("连接到反向Websocket API服务器 %v 时出现错误: %v", c.conf.ReverseAPIURL, err)
if c.conf.ReverseReconnectInterval != 0 {
time.Sleep(time.Millisecond * time.Duration(c.conf.ReverseReconnectInterval))
- c.connectApi()
+ c.connectAPI()
}
return
}
- log.Infof("已连接到反向Websocket API服务器 %v", c.conf.ReverseApiUrl)
- wrappedConn := &websocketConn{Conn: conn}
- go c.listenApi(wrappedConn, false)
+ log.Infof("已连接到反向Websocket API服务器 %v", c.conf.ReverseAPIURL)
+ wrappedConn := &webSocketConn{Conn: conn}
+ go c.listenAPI(wrappedConn, false)
}
-func (c *websocketClient) connectEvent() {
- log.Infof("开始尝试连接到反向Websocket Event服务器: %v", c.conf.ReverseEventUrl)
+func (c *WebSocketClient) connectEvent() {
+ log.Infof("开始尝试连接到反向Websocket Event服务器: %v", c.conf.ReverseEventURL)
header := http.Header{
"X-Client-Role": []string{"Event"},
"X-Self-ID": []string{strconv.FormatInt(c.bot.Client.Uin, 10)},
@@ -116,9 +120,9 @@ func (c *websocketClient) connectEvent() {
if c.token != "" {
header["Authorization"] = []string{"Token " + c.token}
}
- conn, _, err := websocket.DefaultDialer.Dial(c.conf.ReverseEventUrl, header)
+ conn, _, err := websocket.DefaultDialer.Dial(c.conf.ReverseEventURL, header)
if err != nil {
- log.Warnf("连接到反向Websocket Event服务器 %v 时出现错误: %v", c.conf.ReverseEventUrl, err)
+ log.Warnf("连接到反向Websocket Event服务器 %v 时出现错误: %v", c.conf.ReverseEventURL, err)
if c.conf.ReverseReconnectInterval != 0 {
time.Sleep(time.Millisecond * time.Duration(c.conf.ReverseReconnectInterval))
c.connectEvent()
@@ -133,12 +137,12 @@ func (c *websocketClient) connectEvent() {
log.Warnf("反向Websocket 握手时出现错误: %v", err)
}
- log.Infof("已连接到反向Websocket Event服务器 %v", c.conf.ReverseEventUrl)
- c.eventConn = &websocketConn{Conn: conn}
+ log.Infof("已连接到反向Websocket Event服务器 %v", c.conf.ReverseEventURL)
+ c.eventConn = &webSocketConn{Conn: conn}
}
-func (c *websocketClient) connectUniversal() {
- log.Infof("开始尝试连接到反向Websocket Universal服务器: %v", c.conf.ReverseUrl)
+func (c *WebSocketClient) connectUniversal() {
+ log.Infof("开始尝试连接到反向Websocket Universal服务器: %v", c.conf.ReverseURL)
header := http.Header{
"X-Client-Role": []string{"Universal"},
"X-Self-ID": []string{strconv.FormatInt(c.bot.Client.Uin, 10)},
@@ -147,9 +151,9 @@ func (c *websocketClient) connectUniversal() {
if c.token != "" {
header["Authorization"] = []string{"Token " + c.token}
}
- conn, _, err := websocket.DefaultDialer.Dial(c.conf.ReverseUrl, header)
+ conn, _, err := websocket.DefaultDialer.Dial(c.conf.ReverseURL, header)
if err != nil {
- log.Warnf("连接到反向Websocket Universal服务器 %v 时出现错误: %v", c.conf.ReverseUrl, err)
+ log.Warnf("连接到反向Websocket Universal服务器 %v 时出现错误: %v", c.conf.ReverseURL, err)
if c.conf.ReverseReconnectInterval != 0 {
time.Sleep(time.Millisecond * time.Duration(c.conf.ReverseReconnectInterval))
c.connectUniversal()
@@ -164,12 +168,12 @@ func (c *websocketClient) connectUniversal() {
log.Warnf("反向Websocket 握手时出现错误: %v", err)
}
- wrappedConn := &websocketConn{Conn: conn}
- go c.listenApi(wrappedConn, true)
+ wrappedConn := &webSocketConn{Conn: conn}
+ go c.listenAPI(wrappedConn, true)
c.universalConn = wrappedConn
}
-func (c *websocketClient) listenApi(conn *websocketConn, u bool) {
+func (c *WebSocketClient) listenAPI(conn *webSocketConn, u bool) {
defer conn.Close()
for {
_, buf, err := conn.ReadMessage()
@@ -184,12 +188,12 @@ func (c *websocketClient) listenApi(conn *websocketConn, u bool) {
if c.conf.ReverseReconnectInterval != 0 {
time.Sleep(time.Millisecond * time.Duration(c.conf.ReverseReconnectInterval))
if !u {
- go c.connectApi()
+ go c.connectAPI()
}
}
}
-func (c *websocketClient) onBotPushEvent(m coolq.MSG) {
+func (c *WebSocketClient) onBotPushEvent(m coolq.MSG) {
if c.eventConn != nil {
log.Debugf("向WS服务器 %v 推送Event: %v", c.eventConn.RemoteAddr().String(), m.ToJson())
conn := c.eventConn
@@ -222,7 +226,7 @@ func (c *websocketClient) onBotPushEvent(m coolq.MSG) {
}
}
-func (s *websocketServer) event(w http.ResponseWriter, r *http.Request) {
+func (s *webSocketServer) event(w http.ResponseWriter, r *http.Request) {
if s.token != "" {
if auth := r.URL.Query().Get("access_token"); auth != s.token {
if auth := strings.SplitN(r.Header.Get("Authorization"), " ", 2); len(auth) != 2 || auth[1] != s.token {
@@ -246,14 +250,14 @@ func (s *websocketServer) event(w http.ResponseWriter, r *http.Request) {
log.Infof("接受 Websocket 连接: %v (/event)", r.RemoteAddr)
- conn := &websocketConn{Conn: c}
+ conn := &webSocketConn{Conn: c}
s.eventConnMutex.Lock()
s.eventConn = append(s.eventConn, conn)
s.eventConnMutex.Unlock()
}
-func (s *websocketServer) api(w http.ResponseWriter, r *http.Request) {
+func (s *webSocketServer) api(w http.ResponseWriter, r *http.Request) {
if s.token != "" {
if auth := r.URL.Query().Get("access_token"); auth != s.token {
if auth := strings.SplitN(r.Header.Get("Authorization"), " ", 2); len(auth) != 2 || auth[1] != s.token {
@@ -269,11 +273,11 @@ func (s *websocketServer) api(w http.ResponseWriter, r *http.Request) {
return
}
log.Infof("接受 Websocket 连接: %v (/api)", r.RemoteAddr)
- conn := &websocketConn{Conn: c}
- go s.listenApi(conn)
+ conn := &webSocketConn{Conn: c}
+ go s.listenAPI(conn)
}
-func (s *websocketServer) any(w http.ResponseWriter, r *http.Request) {
+func (s *webSocketServer) any(w http.ResponseWriter, r *http.Request) {
if s.token != "" {
if auth := r.URL.Query().Get("access_token"); auth != s.token {
if auth := strings.SplitN(r.Header.Get("Authorization"), " ", 2); len(auth) != 2 || auth[1] != s.token {
@@ -295,12 +299,12 @@ func (s *websocketServer) any(w http.ResponseWriter, r *http.Request) {
return
}
log.Infof("接受 Websocket 连接: %v (/)", r.RemoteAddr)
- conn := &websocketConn{Conn: c}
+ conn := &webSocketConn{Conn: c}
s.eventConn = append(s.eventConn, conn)
- s.listenApi(conn)
+ s.listenAPI(conn)
}
-func (s *websocketServer) listenApi(c *websocketConn) {
+func (s *webSocketServer) listenAPI(c *webSocketConn) {
defer c.Close()
for {
t, payload, err := c.ReadMessage()
@@ -314,7 +318,7 @@ func (s *websocketServer) listenApi(c *websocketConn) {
}
}
-func (c *websocketConn) handleRequest(bot *coolq.CQBot, payload []byte) {
+func (c *webSocketConn) handleRequest(bot *coolq.CQBot, payload []byte) {
defer func() {
if err := recover(); err != nil {
log.Printf("处置WS命令时发生无法恢复的异常:%v\n%s", err, debug.Stack())
@@ -325,7 +329,7 @@ func (c *websocketConn) handleRequest(bot *coolq.CQBot, payload []byte) {
j := gjson.ParseBytes(payload)
t := strings.ReplaceAll(j.Get("action").Str, "_async", "")
log.Debugf("WS接收到API调用: %v 参数: %v", t, j.Get("params").Raw)
- if f, ok := wsApi[t]; ok {
+ if f, ok := wsAPI[t]; ok {
ret := f(bot, j.Get("params"))
if j.Get("echo").Exists() {
ret["echo"] = j.Get("echo").Value()
@@ -344,7 +348,7 @@ func (c *websocketConn) handleRequest(bot *coolq.CQBot, payload []byte) {
}
}
-func (s *websocketServer) onBotPushEvent(m coolq.MSG) {
+func (s *webSocketServer) onBotPushEvent(m coolq.MSG) {
s.eventConnMutex.Lock()
defer s.eventConnMutex.Unlock()
for i, l := 0, len(s.eventConn); i < l; i++ {
@@ -368,7 +372,7 @@ func (s *websocketServer) onBotPushEvent(m coolq.MSG) {
}
}
-var wsApi = map[string]func(*coolq.CQBot, gjson.Result) coolq.MSG{
+var wsAPI = map[string]func(*coolq.CQBot, gjson.Result) coolq.MSG{
"get_login_info": func(bot *coolq.CQBot, p gjson.Result) coolq.MSG {
return bot.CQGetLoginInfo()
},
From 7e49ed4869e95fa7b84708f25827b9f95c5cdd73 Mon Sep 17 00:00:00 2001
From: sam01101
Date: Mon, 18 Jan 2021 21:29:25 +0800
Subject: [PATCH 320/367] Make send_group_forward_msg can use on get_msg
MIME-Version: 1.0
Content-Type: text/plain; charset=UTF-8
Content-Transfer-Encoding: 8bit
理论上这个是正常支持的, Fix https://github.com/Mrs4s/go-cqhttp/issues/542
---
coolq/api.go | 2 +-
1 file changed, 1 insertion(+), 1 deletion(-)
diff --git a/coolq/api.go b/coolq/api.go
index c6a3295..8ee05c9 100644
--- a/coolq/api.go
+++ b/coolq/api.go
@@ -343,7 +343,7 @@ func (bot *CQBot) CQSendGroupForwardMessage(groupId int64, m gjson.Result) MSG {
if len(sendNodes) > 0 {
gm := bot.Client.SendGroupForwardMessage(groupId, &message.ForwardMessage{Nodes: sendNodes})
return OK(MSG{
- "message_id": ToGlobalId(groupId, gm.Id),
+ "message_id": bot.InsertGroupMessage(gm),
})
}
return Failed(100)
From bdc2b0369014fdbcea06c48a8b65a81033fc770c Mon Sep 17 00:00:00 2001
From: sam01101
Date: Mon, 18 Jan 2021 23:01:54 +0800
Subject: [PATCH 321/367] Added unbreakable feature - Reply message
customizable - Forward message able to customize time
Signed-off-by: Sam
---
coolq/api.go | 13 ++++++++-----
coolq/cqcode.go | 41 +++++++++++++++++++++++++++++++++++++++++
docs/cqhttp.md | 23 ++++++++++++++++++++---
3 files changed, 69 insertions(+), 8 deletions(-)
diff --git a/coolq/api.go b/coolq/api.go
index c6a3295..ba117e2 100644
--- a/coolq/api.go
+++ b/coolq/api.go
@@ -260,10 +260,11 @@ func (bot *CQBot) CQSendGroupForwardMessage(groupId int64, m gjson.Result) MSG {
SenderId: sender.Uin,
SenderName: (&sender).DisplayName(),
Time: func() int32 {
- if hasCustom {
+ msgTime := m["time"].(int32)
+ if hasCustom && msgTime == 0 {
return int32(ts.Unix())
}
- return m["time"].(int32)
+ return msgTime
}(),
Message: bot.ConvertStringMessage(m["message"].(string), true),
})
@@ -273,6 +274,8 @@ func (bot *CQBot) CQSendGroupForwardMessage(groupId int64, m gjson.Result) MSG {
return
}
uin, _ := strconv.ParseInt(e.Get("data.uin").Str, 10, 64)
+ msgTime, err := strconv.ParseInt(e.Get("data.time").Str, 10, 64)
+ if err != nil { msgTime = ts.Unix()}
name := e.Get("data.name").Str
c := e.Get("data.content")
if c.IsArray() {
@@ -292,7 +295,7 @@ func (bot *CQBot) CQSendGroupForwardMessage(groupId int64, m gjson.Result) MSG {
nodes = append(nodes, &message.ForwardNode{
SenderId: uin,
SenderName: name,
- Time: int32(ts.Unix()),
+ Time: int32(msgTime),
Message: []message.IMessageElement{bot.Client.UploadGroupForwardMessage(groupId, &message.ForwardMessage{Nodes: taowa})},
})
return
@@ -325,7 +328,7 @@ func (bot *CQBot) CQSendGroupForwardMessage(groupId int64, m gjson.Result) MSG {
nodes = append(nodes, &message.ForwardNode{
SenderId: uin,
SenderName: name,
- Time: int32(ts.Unix()),
+ Time: int32(msgTime),
Message: newElem,
})
return
@@ -343,7 +346,7 @@ func (bot *CQBot) CQSendGroupForwardMessage(groupId int64, m gjson.Result) MSG {
if len(sendNodes) > 0 {
gm := bot.Client.SendGroupForwardMessage(groupId, &message.ForwardMessage{Nodes: sendNodes})
return OK(MSG{
- "message_id": ToGlobalId(groupId, gm.Id),
+ "message_id": bot.InsertGroupMessage(gm),
})
}
return Failed(100)
diff --git a/coolq/cqcode.go b/coolq/cqcode.go
index 52866cd..2b33477 100644
--- a/coolq/cqcode.go
+++ b/coolq/cqcode.go
@@ -18,6 +18,7 @@ import (
"runtime"
"strconv"
"strings"
+ "time"
"github.com/Mrs4s/MiraiGo/binary"
"github.com/Mrs4s/MiraiGo/message"
@@ -411,6 +412,7 @@ func (bot *CQBot) ConvertStringMessage(msg string, group bool) (r []message.IMes
}
}
mid, err := strconv.Atoi(params["id"])
+ customText := params["text"]
if err == nil {
org := bot.GetMessage(int32(mid))
if org != nil {
@@ -424,6 +426,25 @@ func (bot *CQBot) ConvertStringMessage(msg string, group bool) (r []message.IMes
}, r...)
return
}
+ } else if customText != "" {
+ sender, err := strconv.ParseInt(params["qq"], 10, 64)
+ if err != nil {
+ log.Warnf("警告:自定义Reply 元素中必须包含QQ的Uin")
+ return
+ }
+ msgTime, err := strconv.ParseInt(params["time"], 10, 64)
+ if err != nil {
+ msgTime = time.Now().Unix()
+ }
+ r = append([]message.IMessageElement{
+ &message.ReplyElement{
+ ReplySeq: int32(0),
+ Sender: sender,
+ Time: int32(msgTime),
+ Elements: bot.ConvertStringMessage(customText, group),
+ },
+ }, r...)
+ return
}
}
if t == "forward" { // 单独处理转发
@@ -490,6 +511,7 @@ func (bot *CQBot) ConvertObjectMessage(m gjson.Result, group bool) (r []message.
}
}
mid, err := strconv.Atoi(e.Get("data").Get("id").String())
+ customText := e.Get("data").Get("text").String()
if err == nil {
org := bot.GetMessage(int32(mid))
if org != nil {
@@ -503,6 +525,25 @@ func (bot *CQBot) ConvertObjectMessage(m gjson.Result, group bool) (r []message.
}, r...)
return
}
+ } else if customText != "" {
+ sender, err := strconv.ParseInt(e.Get("data").Get("qq").String(), 10, 64)
+ if err != nil {
+ log.Warnf("警告:自定义Reply 元素中必须包含QQ的Uin")
+ return
+ }
+ msgTime, err := strconv.ParseInt(e.Get("data").Get("time").String(), 10, 64)
+ if err != nil {
+ msgTime = time.Now().Unix()
+ }
+ r = append([]message.IMessageElement{
+ &message.ReplyElement{
+ ReplySeq: int32(0),
+ Sender: sender,
+ Time: int32(msgTime),
+ Elements: bot.ConvertStringMessage(customText, group),
+ },
+ }, r...)
+ return
}
}
if t == "forward" {
diff --git a/docs/cqhttp.md b/docs/cqhttp.md
index 0a511ac..c17dda6 100644
--- a/docs/cqhttp.md
+++ b/docs/cqhttp.md
@@ -94,13 +94,23 @@ Type : `reply`
范围: **发送/接收**
+> 注意: 如果id存在则优先处理id
+
参数:
| 参数名 | 类型 | 说明 |
| ------ | ---- | ------------------------------------- |
| `id` | int | 回复时所引用的消息id, 必须为本群消息. |
+| `text` | string | 自定义回复的信息 |
+| `qq` | int64 | 自定义回复时的自定义QQ, 如果使用自定义信息必须指定. |
+| `time` | int64 | 自定义回复时的时间, 格式为Unix时间 |
+
+
+
+示例: `[CQ:reply,id=123456]`
+\
+自定义回复示例: `[CQ:reply,text=Hello World,qq=10086,time=3376656000]`
-示例: `[CQ:reply,id=123456]`
### 红包
@@ -197,7 +207,7 @@ Type: `node`
| `id` | int32 | 转发消息id | 直接引用他人的消息合并转发, 实际查看顺序为原消息发送顺序 **与下面的自定义消息二选一** |
| `name` | string | 发送者显示名字 | 用于自定义消息 (自定义消息并合并转发,实际查看顺序为自定义消息段顺序) |
| `uin` | int64 | 发送者QQ号 | 用于自定义消息 |
-| `content` | message | 具体消息 | 用于自定义消息 **不支持引用回复** |
+| `content` | message | 具体消息 | 用于自定义消息 |
特殊说明: **需要使用单独的API `/send_group_forward_msg` 发送,并且由于消息段较为复杂,仅支持Array形式入参。 如果引用消息和自定义消息同时出现,实际查看顺序将取消息段顺序. 另外按 [CQHTTP](https://cqhttp.cc/docs/4.15/#/Message?id=格式) 文档说明, `data` 应全为字符串, 但由于需要接收`message` 类型的消息, 所以 *仅限此Type的content字段* 支持Array套娃**
@@ -259,7 +269,8 @@ Type: `node`
"data": {
"name": "自定义发送者",
"uin": "10086",
- "content": "我是自定义消息"
+ "content": "我是自定义消息",
+ "time": "3376656000"
}
},
{
@@ -539,6 +550,12 @@ Type: `tts`
| `group_id` | int64 | 群号 |
| `messages` | forward node[] | 自定义转发消息, 具体看CQCode |
+响应数据
+
+| 字段 | 类型 | 说明 |
+| ------------ | ------ | ------ |
+| `message_id` | string | 消息id |
+
### 获取中文分词
终结点: `/.get_word_slices`
From eb618393e52946c13910d8d7d70f2bff7597c0ae Mon Sep 17 00:00:00 2001
From: sam01101
Date: Mon, 18 Jan 2021 23:22:46 +0800
Subject: [PATCH 322/367] update string message
---
coolq/cqcode.go | 4 ++--
1 file changed, 2 insertions(+), 2 deletions(-)
diff --git a/coolq/cqcode.go b/coolq/cqcode.go
index 2b33477..af1ec50 100644
--- a/coolq/cqcode.go
+++ b/coolq/cqcode.go
@@ -429,7 +429,7 @@ func (bot *CQBot) ConvertStringMessage(msg string, group bool) (r []message.IMes
} else if customText != "" {
sender, err := strconv.ParseInt(params["qq"], 10, 64)
if err != nil {
- log.Warnf("警告:自定义Reply 元素中必须包含QQ的Uin")
+ log.Warnf("警告:自定义 Reply 元素中必须包含Uin")
return
}
msgTime, err := strconv.ParseInt(params["time"], 10, 64)
@@ -528,7 +528,7 @@ func (bot *CQBot) ConvertObjectMessage(m gjson.Result, group bool) (r []message.
} else if customText != "" {
sender, err := strconv.ParseInt(e.Get("data").Get("qq").String(), 10, 64)
if err != nil {
- log.Warnf("警告:自定义Reply 元素中必须包含QQ的Uin")
+ log.Warnf("警告:自定义 Reply 元素中必须包含Uin")
return
}
msgTime, err := strconv.ParseInt(e.Get("data").Get("time").String(), 10, 64)
From 297284f957889128a9b6a2cdcec54a9a5b4f78cd Mon Sep 17 00:00:00 2001
From: Mrs4s <1844812067@qq.com>
Date: Tue, 19 Jan 2021 01:18:28 +0800
Subject: [PATCH 323/367] update MiraiGo.
---
go.mod | 23 +------------
go.sum | 103 ++-------------------------------------------------------
2 files changed, 4 insertions(+), 122 deletions(-)
diff --git a/go.mod b/go.mod
index 5145157..892b2fd 100644
--- a/go.mod
+++ b/go.mod
@@ -3,45 +3,24 @@ module github.com/Mrs4s/go-cqhttp
go 1.15
require (
- github.com/Mrs4s/MiraiGo v0.0.0-20210115215446-8ee19f60514b
+ github.com/Mrs4s/MiraiGo v0.0.0-20210118164518-b007a4d0d68c
github.com/dustin/go-humanize v1.0.0
github.com/gin-contrib/pprof v1.3.0
github.com/gin-gonic/gin v1.6.3
- github.com/go-playground/validator/v10 v10.4.1 // indirect
- github.com/golang/snappy v0.0.2 // indirect
- github.com/google/go-cmp v0.5.4 // indirect
- github.com/google/uuid v1.1.5 // indirect
github.com/gorilla/websocket v1.4.2
github.com/guonaihong/gout v0.1.4
github.com/hjson/hjson-go v3.1.0+incompatible
- github.com/jonboulle/clockwork v0.2.2 // indirect
github.com/json-iterator/go v1.1.10
github.com/kardianos/osext v0.0.0-20190222173326-2bc1f35cddc0
- github.com/kr/text v0.2.0 // indirect
- github.com/leodido/go-urn v1.2.1 // indirect
github.com/lestrrat-go/file-rotatelogs v2.4.0+incompatible
github.com/lestrrat-go/strftime v1.0.4 // indirect
- github.com/modern-go/concurrent v0.0.0-20180306012644-bacd9c7ef1dd // indirect
- github.com/modern-go/reflect2 v1.0.1 // indirect
- github.com/nxadm/tail v1.4.6 // indirect
- github.com/onsi/ginkgo v1.14.2 // indirect
- github.com/onsi/gomega v1.10.4 // indirect
github.com/pkg/errors v0.9.1
github.com/rifflock/lfshook v0.0.0-20180920164130-b9218ef580f5
github.com/sirupsen/logrus v1.7.0
- github.com/stretchr/testify v1.7.0 // indirect
github.com/syndtr/goleveldb v1.0.0
github.com/t-tomalak/logrus-easy-formatter v0.0.0-20190827215021-c074f06c5816
github.com/tidwall/gjson v1.6.7
- github.com/ugorji/go v1.2.3 // indirect
github.com/yinghau76/go-ascii-art v0.0.0-20190517192627-e7f465a30189
- golang.org/x/crypto v0.0.0-20201221181555-eec23a3978ad // indirect
- golang.org/x/net v0.0.0-20201224014010-6772e930b67b // indirect
- golang.org/x/sys v0.0.0-20210113181707-4bcb84eeeb78 // indirect
golang.org/x/term v0.0.0-20201210144234-2321bbc49cbf
- golang.org/x/text v0.3.5 // indirect
golang.org/x/time v0.0.0-20201208040808-7e3f01d25324
- gopkg.in/check.v1 v1.0.0-20201130134442-10cb98267c6c // indirect
- gopkg.in/yaml.v2 v2.4.0 // indirect
- gopkg.in/yaml.v3 v3.0.0-20210107192922-496545a6307b // indirect
)
diff --git a/go.sum b/go.sum
index 1f500c5..a922cb7 100644
--- a/go.sum
+++ b/go.sum
@@ -1,21 +1,16 @@
cloud.google.com/go v0.26.0/go.mod h1:aQUYkXzVsufM+DwF1aE+0xfcU+56JwCaLick0ClmMTw=
github.com/BurntSushi/toml v0.3.1/go.mod h1:xHWCNGjB5oqiDr8zfno3MHue2Ht5sIBksp03qcyfWMU=
-github.com/Mrs4s/MiraiGo v0.0.0-20210115215446-8ee19f60514b h1:am1XzFc9Q5wSLLkrhjyDf5/IWq3qgNwJl2zzIRp2haw=
-github.com/Mrs4s/MiraiGo v0.0.0-20210115215446-8ee19f60514b/go.mod h1:HW2e375lCQiRwtuA/LV6ZVTsi7co1TRfBn+L5Ow77Bo=
+github.com/Mrs4s/MiraiGo v0.0.0-20210118164518-b007a4d0d68c h1:HNyjAEK3nj+h8EMqoFEARnE+G/rlJDlh1BFEIShA6lk=
+github.com/Mrs4s/MiraiGo v0.0.0-20210118164518-b007a4d0d68c/go.mod h1:9V7DdSwpEfCKQNvLZhRnFJFkelTU0tPLfwR5l6UFF1Y=
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/creack/pty v1.1.9/go.mod h1:oKZEueFk5CKHvIhNR5MUki03XCEU+Q6VDXinZuGJ33E=
github.com/davecgh/go-spew v1.1.0/go.mod h1:J7Y8YcW2NihsgmVo/mv3lAwl/skON4iLHjSsI+c5H38=
-github.com/davecgh/go-spew v1.1.1 h1:vj9j/u1bqnvCEfJOwUhtlOARqs3+rkHYY13jYWTU97c=
github.com/davecgh/go-spew v1.1.1/go.mod h1:J7Y8YcW2NihsgmVo/mv3lAwl/skON4iLHjSsI+c5H38=
github.com/dustin/go-humanize v1.0.0 h1:VSnTsYCnlFHaM2/igO1h6X3HA71jcobQuxemgkq4zYo=
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/fsnotify/fsnotify v1.4.7 h1:IXs+QLmnXW2CcXuY+8Mzv/fWEsPGWxqefPtCP5CnV9I=
github.com/fsnotify/fsnotify v1.4.7/go.mod h1:jwhsz4b93w/PPRr/qN1Yymfu8t87LnFCMoQvtojpjFo=
-github.com/fsnotify/fsnotify v1.4.9 h1:hsms1Qyu0jgnwNXIxa+/V/PDsU6CfLf6CNO8H7IWoS4=
-github.com/fsnotify/fsnotify v1.4.9/go.mod h1:znqG4EE+3YCdAaPaxE2ZRY/06pZUdp0tY4IgpuI1SZQ=
github.com/gin-contrib/pprof v1.3.0 h1:G9eK6HnbkSqDZBYbzG4wrjCsA4e+cvYAHUZw6W+W9K0=
github.com/gin-contrib/pprof v1.3.0/go.mod h1:waMjT1H9b179t3CxuG1cV3DHpga6ybizwfBaM5OXaB0=
github.com/gin-contrib/sse v0.1.0 h1:Y/yl/+YNO8GZSjAhjMsSuLt29uWRFHdHYUb5lYOV9qE=
@@ -24,7 +19,6 @@ github.com/gin-gonic/gin v1.6.0/go.mod h1:75u5sXoLsGZoRN5Sgbi1eraJ4GU3++wFwWzhwv
github.com/gin-gonic/gin v1.6.2/go.mod h1:75u5sXoLsGZoRN5Sgbi1eraJ4GU3++wFwWzhwvtwp4M=
github.com/gin-gonic/gin v1.6.3 h1:ahKqKTFpO5KTPHxWZjEdPScmYaGtLo8Y4DMHoEsnp14=
github.com/gin-gonic/gin v1.6.3/go.mod h1:75u5sXoLsGZoRN5Sgbi1eraJ4GU3++wFwWzhwvtwp4M=
-github.com/go-playground/assert/v2 v2.0.1 h1:MsBgLAaY856+nPRTKrp3/OZK38U/wa0CcBYNjji3q3A=
github.com/go-playground/assert/v2 v2.0.1/go.mod h1:VDjEfimB/XKnb+ZQfWdccd7VUvScMdVu0Titje2rxJ4=
github.com/go-playground/locales v0.13.0 h1:HyWk6mgj5qFqCT5fjGBuRArbVDfE4hi8+e8ceBS/t7Q=
github.com/go-playground/locales v0.13.0/go.mod h1:taPMhCMXrRLJO55olJkUXHZBHCxTMfnGwq/HNwmWNS8=
@@ -32,8 +26,6 @@ github.com/go-playground/universal-translator v0.17.0 h1:icxd5fm+REJzpZx7ZfpaD87
github.com/go-playground/universal-translator v0.17.0/go.mod h1:UkSxE5sNxxRwHyU+Scu5vgOQjsIJAF8j9muTVoKLVtA=
github.com/go-playground/validator/v10 v10.2.0 h1:KgJ0snyC2R9VXYN2rneOtQcw5aHQB1Vv0sFl1UcHBOY=
github.com/go-playground/validator/v10 v10.2.0/go.mod h1:uOYAAleCW8F/7oMFd6aG0GOhaH6EGOAJShg8Id5JGkI=
-github.com/go-playground/validator/v10 v10.4.1 h1:pH2c5ADXtd66mxoE0Zm9SUhxE20r7aM3F26W0hOn+GE=
-github.com/go-playground/validator/v10 v10.4.1/go.mod h1:nlOn6nFhuKACm19sB/8EGNn9GlaMV7XkbRSipzJ0Ii4=
github.com/golang/glog v0.0.0-20160126235308-23def4e6c14b/go.mod h1:SBH7ygxi8pfUlaOkMMuAQtPIUF8ecWP5IEl/CR7VP2Q=
github.com/golang/mock v1.1.1/go.mod h1:oTYuIxOrZwtPieC+H1uAHpcLFnEyAGVDL/k47Jfbm0A=
github.com/golang/protobuf v1.2.0/go.mod h1:6lQm79b+lXiMfvg/cZm0SGofjICqVBUtrP5yJMmIC1U=
@@ -45,54 +37,32 @@ github.com/golang/protobuf v1.4.0-rc.2/go.mod h1:LlEzMj4AhA7rCAGe4KMBDvJI+AwstrU
github.com/golang/protobuf v1.4.0-rc.4.0.20200313231945-b860323f09d0/go.mod h1:WU3c8KckQ9AFe+yFwt9sWVRKCVIyN9cPHBJSNnbL67w=
github.com/golang/protobuf v1.4.0/go.mod h1:jodUvKwWbYaEsadDk5Fwe5c77LiNKVO9IDvqG2KuDX0=
github.com/golang/protobuf v1.4.1/go.mod h1:U8fpvMrcmy5pZrNK1lt4xCsGvpyWQ/VVv6QDs8UjoX8=
-github.com/golang/protobuf v1.4.2/go.mod h1:oDoupMAO8OvCJWAcko0GGGIgR6R6ocIYbsSw735rRwI=
github.com/golang/protobuf v1.4.3 h1:JjCZWpVbqXDqFVmTfYWEVTMIYrL/NPdPSCHPJ0T/raM=
github.com/golang/protobuf v1.4.3/go.mod h1:oDoupMAO8OvCJWAcko0GGGIgR6R6ocIYbsSw735rRwI=
github.com/golang/snappy v0.0.0-20180518054509-2e65f85255db h1:woRePGFeVFfLKN/pOkfl+p/TAqKOfFu+7KPlMVpok/w=
github.com/golang/snappy v0.0.0-20180518054509-2e65f85255db/go.mod h1:/XxbfmMg8lxefKM7IXC3fBNl/7bRcc72aCRzEWrmP2Q=
-github.com/golang/snappy v0.0.2 h1:aeE13tS0IiQgFjYdoL8qN3K1N2bXXtI6Vi51/y7BpMw=
-github.com/golang/snappy v0.0.2/go.mod h1:/XxbfmMg8lxefKM7IXC3fBNl/7bRcc72aCRzEWrmP2Q=
github.com/google/go-cmp v0.2.0/go.mod h1:oXzfMopK8JAjlY9xF4vHSVASa0yLyX7SntLO5aqRK0M=
github.com/google/go-cmp v0.3.0/go.mod h1:8QqcDgzrUqlUb/G2PQTWiueGozuR1884gddMywk6iLU=
github.com/google/go-cmp v0.3.1/go.mod h1:8QqcDgzrUqlUb/G2PQTWiueGozuR1884gddMywk6iLU=
github.com/google/go-cmp v0.4.0/go.mod h1:v8dTdLbMG2kIc/vJvl+f65V22dbkXbowE6jgT/gNBxE=
-github.com/google/go-cmp v0.5.0 h1:/QaMHBdZ26BB3SSst0Iwl10Epc+xhTquomWX0oZEB6w=
github.com/google/go-cmp v0.5.0/go.mod h1:v8dTdLbMG2kIc/vJvl+f65V22dbkXbowE6jgT/gNBxE=
-github.com/google/go-cmp v0.5.4 h1:L8R9j+yAqZuZjsqh/z+F1NCffTKKLShY6zXTItVIZ8M=
-github.com/google/go-cmp v0.5.4/go.mod h1:v8dTdLbMG2kIc/vJvl+f65V22dbkXbowE6jgT/gNBxE=
github.com/google/gofuzz v1.0.0/go.mod h1:dBl0BpW6vV/+mYPU4Po3pmUjxk6FQPldtuIdl/M65Eg=
-github.com/google/uuid v1.1.1 h1:Gkbcsh/GbpXz7lPftLA3P6TYMwjCLYm83jiFQZF/3gY=
github.com/google/uuid v1.1.1/go.mod h1:TIyPZe4MgqvfeYDBFedMoGGpEw/LqOeaOT+nhxU+yHo=
-github.com/google/uuid v1.1.5 h1:kxhtnfFVi+rYdOALN0B3k9UT86zVJKfBimRaciULW4I=
-github.com/google/uuid v1.1.5/go.mod h1:TIyPZe4MgqvfeYDBFedMoGGpEw/LqOeaOT+nhxU+yHo=
github.com/gorilla/websocket v1.4.2 h1:+/TMaTYc4QFitKJxsQ7Yye35DkWvkdLcvGKqM+x0Ufc=
github.com/gorilla/websocket v1.4.2/go.mod h1:YR8l580nyteQvAITg2hZ9XVh4b55+EU/adAjf1fMHhE=
github.com/guonaihong/gout v0.1.4 h1:uBBoyztMX9okC27OQxqhn6bZ0ROkGyvnEIHwtp3TM4g=
github.com/guonaihong/gout v0.1.4/go.mod h1:0rFYAYyzbcxEg11eY2qUbffJs7hHRPeugAnlVYSp8Ic=
github.com/hjson/hjson-go v3.1.0+incompatible h1:DY/9yE8ey8Zv22bY+mHV1uk2yRy0h8tKhZ77hEdi0Aw=
github.com/hjson/hjson-go v3.1.0+incompatible/go.mod h1:qsetwF8NlsTsOTwZTApNlTCerV+b2GjYRRcIk4JMFio=
-github.com/hpcloud/tail v1.0.0 h1:nfCOvKYfkgYP8hkirhJocXT2+zOD8yUNjXaWfTlyFKI=
github.com/hpcloud/tail v1.0.0/go.mod h1:ab1qPbhIpdTxEkNHXyeSf5vhxWSCs/tWer42PpOxQnU=
-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.9/go.mod h1:KdQUCv79m/52Kvf8AW2vK1V8akMuk1QjK/uOdHXbAo4=
github.com/json-iterator/go v1.1.10 h1:Kz6Cvnvv2wGdaG/V8yMvfkmNiXq9Ya2KUv4rouJJr68=
github.com/json-iterator/go v1.1.10/go.mod h1:KdQUCv79m/52Kvf8AW2vK1V8akMuk1QjK/uOdHXbAo4=
github.com/kardianos/osext v0.0.0-20190222173326-2bc1f35cddc0 h1:iQTw/8FWTuc7uiaSepXwyf3o52HaUYcV+Tu66S3F5GA=
github.com/kardianos/osext v0.0.0-20190222173326-2bc1f35cddc0/go.mod h1:1NbS8ALrpOvjt0rHPNLyCIeMtbizbir8U//inJ+zuB8=
github.com/konsorten/go-windows-terminal-sequences v1.0.1/go.mod h1:T0+1ngSBFLxvqU3pZ+m/2kptfBszLMUkC4ZK/EgS/cQ=
-github.com/kr/pretty v0.2.1 h1:Fmg33tUaq4/8ym9TJN1x7sLJnHVwhP33CNkpYV/7rwI=
-github.com/kr/pretty v0.2.1/go.mod h1:ipq/a2n7PKx3OHsz4KJII5eveXtPO4qwEXGdVfWzfnI=
-github.com/kr/pty v1.1.1/go.mod h1:pFQYn66WHrOpPYNljwOMqo10TkYh1fy3cYio2l3bCsQ=
-github.com/kr/text v0.1.0 h1:45sCR5RtlFHMR4UwH9sdQ5TC8v0qDQCHnXt+kaKSTVE=
-github.com/kr/text v0.1.0/go.mod h1:4Jbv+DJW3UT/LiOwJeYQe1efqtUx/iVham/4vfdArNI=
-github.com/kr/text v0.2.0 h1:5Nx0Ya0ZqY2ygV366QzturHI13Jq95ApcVaJBhpS+AY=
-github.com/kr/text v0.2.0/go.mod h1:eLer722TekiGuMkidMxC/pM04lWEeraHUUmBw8l2grE=
github.com/leodido/go-urn v1.2.0 h1:hpXL4XnriNwQ/ABnpepYM/1vCLWNDfUNts8dX3xTG6Y=
github.com/leodido/go-urn v1.2.0/go.mod h1:+8+nEpDfqqsY+g338gtMEUOtuK+4dEMhiQEgxpxOKII=
-github.com/leodido/go-urn v1.2.1 h1:BqpAaACuzVSgi/VLzGZIobT2z4v53pjosyNd9Yv6n/w=
-github.com/leodido/go-urn v1.2.1/go.mod h1:zt4jvISO2HfUBqxjfIshjdMTYS56ZS/qv49ictyFfxY=
-github.com/lestrrat-go/envload v0.0.0-20180220234015-a3eb8ddeffcc h1:RKf14vYWi2ttpEmkA4aQ3j4u9dStX2t4M8UM6qqNsG8=
github.com/lestrrat-go/envload v0.0.0-20180220234015-a3eb8ddeffcc/go.mod h1:kopuH9ugFRkIXf3YoqHKyrJ9YfUFsckUU9S7B+XP+is=
github.com/lestrrat-go/file-rotatelogs v2.4.0+incompatible h1:Y6sqxHMyB1D2YSzWkLibYKgg+SwmyFU9dF2hn6MdTj4=
github.com/lestrrat-go/file-rotatelogs v2.4.0+incompatible/go.mod h1:ZQnN8lSECaebrkQytbHj4xNgtg8CR7RYXnPok8e0EHA=
@@ -102,34 +72,16 @@ github.com/mattn/go-isatty v0.0.12 h1:wuysRhFDzyxgEmMf5xjvJ2M9dZoWAXNNr5LSBS7uHX
github.com/mattn/go-isatty v0.0.12/go.mod h1:cbi8OIDigv2wuxKPP5vlRcQ1OAZbq2CE4Kysco4FUpU=
github.com/modern-go/concurrent v0.0.0-20180228061459-e0a39a4cb421 h1:ZqeYNhU3OHLH3mGKHDcjJRFFRrJa6eAM5H+CtDdOsPc=
github.com/modern-go/concurrent v0.0.0-20180228061459-e0a39a4cb421/go.mod h1:6dJC0mAP4ikYIbvyc7fijjWJddQyLn8Ig3JB5CqoB9Q=
-github.com/modern-go/concurrent v0.0.0-20180306012644-bacd9c7ef1dd h1:TRLaZ9cD/w8PVh93nsPXa1VrQ6jlwL5oN8l14QlcNfg=
-github.com/modern-go/concurrent v0.0.0-20180306012644-bacd9c7ef1dd/go.mod h1:6dJC0mAP4ikYIbvyc7fijjWJddQyLn8Ig3JB5CqoB9Q=
github.com/modern-go/reflect2 v0.0.0-20180701023420-4b7aa43c6742 h1:Esafd1046DLDQ0W1YjYsBW+p8U2u7vzgW2SQVmlNazg=
github.com/modern-go/reflect2 v0.0.0-20180701023420-4b7aa43c6742/go.mod h1:bx2lNnkwVCuqBIxFjflWJWanXIb3RllmbCylyMrvgv0=
-github.com/modern-go/reflect2 v1.0.1 h1:9f412s+6RmYXLWZSEzVVgPGK7C2PphHj5RJrvfx9AWI=
-github.com/modern-go/reflect2 v1.0.1/go.mod h1:bx2lNnkwVCuqBIxFjflWJWanXIb3RllmbCylyMrvgv0=
github.com/nfnt/resize v0.0.0-20180221191011-83c6a9932646 h1:zYyBkD/k9seD2A7fsi6Oo2LfFZAehjjQMERAvZLEDnQ=
github.com/nfnt/resize v0.0.0-20180221191011-83c6a9932646/go.mod h1:jpp1/29i3P1S/RLdc7JQKbRpFeM1dOBd8T9ki5s+AY8=
-github.com/nxadm/tail v1.4.4 h1:DQuhQpB1tVlglWS2hLQ5OV6B5r8aGxSrPc5Qo6uTN78=
-github.com/nxadm/tail v1.4.4/go.mod h1:kenIhsEOeOJmVchQTgglprH7qJGnHDVpk1VPCcaMI8A=
-github.com/nxadm/tail v1.4.6 h1:11TGpSHY7Esh/i/qnq02Jo5oVrI1Gue8Slbq0ujPZFQ=
-github.com/nxadm/tail v1.4.6/go.mod h1:+ncqLTQzXmGhMZNUePPaPqPvBxHAIsmXswZKocGu+AU=
github.com/onsi/ginkgo v1.6.0/go.mod h1:lLunBs/Ym6LB5Z9jYTR76FiuTmxDTDusOGeTQH+WWjE=
-github.com/onsi/ginkgo v1.7.0 h1:WSHQ+IS43OoUrWtD1/bbclrwK8TTH5hzp+umCiuxHgs=
github.com/onsi/ginkgo v1.7.0/go.mod h1:lLunBs/Ym6LB5Z9jYTR76FiuTmxDTDusOGeTQH+WWjE=
-github.com/onsi/ginkgo v1.12.1/go.mod h1:zj2OWP4+oCPe1qIXoGWkgMRwljMUYCdkwsT2108oapk=
-github.com/onsi/ginkgo v1.14.2 h1:8mVmC9kjFFmA8H4pKMUhcblgifdkOIXPvbhN1T36q1M=
-github.com/onsi/ginkgo v1.14.2/go.mod h1:iSB4RoI2tjJc9BBv4NKIKWKya62Rps+oPG/Lv9klQyY=
-github.com/onsi/gomega v1.4.3 h1:RE1xgDvH7imwFD45h+u2SgIfERHlS2yNG4DObb5BSKU=
github.com/onsi/gomega v1.4.3/go.mod h1:ex+gbHU/CVuBBDIJjb2X0qEXbFg53c61hWP/1CpauHY=
-github.com/onsi/gomega v1.7.1/go.mod h1:XdKZgCCFLUoM/7CFJVPcG8C1xQ1AJ0vpAezJrB7JYyY=
-github.com/onsi/gomega v1.10.1/go.mod h1:iN09h71vgCQne3DLsj+A5owkum+a2tYe+TOCB1ybHNo=
-github.com/onsi/gomega v1.10.4 h1:NiTx7EEvBzu9sFOD1zORteLSt3o8gnlvZZwSE9TnY9U=
-github.com/onsi/gomega v1.10.4/go.mod h1:g/HbgYopi++010VEqkFgJHKC09uJiW9UkXvMUuKHUCQ=
github.com/pkg/errors v0.8.1/go.mod h1:bwawxfHBFNV+L2hUp1rHADufV3IMtnDRdf1r5NINEl0=
github.com/pkg/errors v0.9.1 h1:FEBLx1zS214owpjy7qsBeixbURkuhQAwrK5UwLGTwt4=
github.com/pkg/errors v0.9.1/go.mod h1:bwawxfHBFNV+L2hUp1rHADufV3IMtnDRdf1r5NINEl0=
-github.com/pmezard/go-difflib v1.0.0 h1:4DBwDE0NGyQoBHbLQYPwSUPoCMWR5BEzIk/f1lZbAQM=
github.com/pmezard/go-difflib v1.0.0/go.mod h1:iKH77koFhYxTK1pcRnkKkqfTogsbg7gZNVY4sRDYZ/4=
github.com/prometheus/client_model v0.0.0-20190812154241-14fe0d1b01d4/go.mod h1:xMI15A0UPsDsEKsMN9yxemIoYk6Tm2C1GtYGdfGttqA=
github.com/rifflock/lfshook v0.0.0-20180920164130-b9218ef580f5 h1:mZHayPoR0lNmnHyvtYjDeq0zlVHn9K/ZXoy17ylucdo=
@@ -141,37 +93,24 @@ github.com/stretchr/objx v0.1.0/go.mod h1:HFkY916IF+rwdDfMAkV7OtwuqBVzrE8GR6GFx+
github.com/stretchr/objx v0.1.1/go.mod h1:HFkY916IF+rwdDfMAkV7OtwuqBVzrE8GR6GFx+wExME=
github.com/stretchr/testify v1.2.2/go.mod h1:a8OnRcib4nhh0OaRAV+Yts87kKdq0PP7pXfy6kDkUVs=
github.com/stretchr/testify v1.3.0/go.mod h1:M5WIy9Dh21IEIfnGCwXGc5bZfKNJtfHm1UVUgZn+9EI=
-github.com/stretchr/testify v1.4.0 h1:2E4SXV/wtOkTonXsotYi4li6zVWxYlZuYNCXe9XRJyk=
github.com/stretchr/testify v1.4.0/go.mod h1:j7eGeouHqKxXV5pUuKE4zz7dFj8WfuZ+81PSLYec5m4=
-github.com/stretchr/testify v1.6.1/go.mod h1:6Fq8oRcR53rry900zMqJjRRixrwX3KX962/h/Wwjteg=
-github.com/stretchr/testify v1.7.0 h1:nwc3DEeHmmLAfoZucVR881uASk0Mfjw8xYJ99tb5CcY=
-github.com/stretchr/testify v1.7.0/go.mod h1:6Fq8oRcR53rry900zMqJjRRixrwX3KX962/h/Wwjteg=
github.com/syndtr/goleveldb v1.0.0 h1:fBdIW9lB4Iz0n9khmH8w27SJ3QEJ7+IgjPEwGSZiFdE=
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/tidwall/gjson v1.6.3/go.mod h1:BaHyNc5bjzYkPqgLq7mdVzeiRtULKULXLgZFKsxEHI0=
github.com/tidwall/gjson v1.6.7 h1:Mb1M9HZCRWEcXQ8ieJo7auYyyiSux6w9XN3AdTpxJrE=
github.com/tidwall/gjson v1.6.7/go.mod h1:zeFuBCIqD4sN/gmqBzZ4j7Jd6UcA2Fc56x7QFsv+8fI=
-github.com/tidwall/match v1.0.1/go.mod h1:LujAq0jyVjBy028G1WhWfIzbpQfMO8bBZ6Tyb0+pL9E=
github.com/tidwall/match v1.0.3 h1:FQUVvBImDutD8wJLN6c5eMzWtjgONK9MwIBCOrUJKeE=
github.com/tidwall/match v1.0.3/go.mod h1:eRSPERbgtNPcGhD8UCthc6PmLEQXEWd3PRB5JTxsfmM=
github.com/tidwall/pretty v1.0.2 h1:Z7S3cePv9Jwm1KwS0513MRaoUe3S01WPbLNV40pwWZU=
github.com/tidwall/pretty v1.0.2/go.mod h1:XNkn88O1ChpSDQmQeStsy+sBenx6DDtFZJxhVysOjyk=
github.com/ugorji/go v1.1.7 h1:/68gy2h+1mWMrwZFeD1kQialdSzAb432dtpeJ42ovdo=
github.com/ugorji/go v1.1.7/go.mod h1:kZn38zHttfInRq0xu/PH0az30d+z6vm202qpg1oXVMw=
-github.com/ugorji/go v1.2.3 h1:WbFSXLxDFKVN69Sk8t+XHGzVCD7R8UoAATR8NqZgTbk=
-github.com/ugorji/go v1.2.3/go.mod h1:5l8GZ8hZvmL4uMdy+mhCO1LjswGRYco9Q3HfuisB21A=
github.com/ugorji/go/codec v1.1.7 h1:2SvQaVZ1ouYrrKKwoSk2pzd4A9evlKJb9oTL+OaLUSs=
github.com/ugorji/go/codec v1.1.7/go.mod h1:Ax+UKWsSmolVDwsd+7N3ZtXu+yMGCf907BLYF3GoBXY=
-github.com/ugorji/go/codec v1.2.3 h1:/mVYEV+Jo3IZKeA5gBngN0AvNnQltEDkR+eQikkWQu0=
-github.com/ugorji/go/codec v1.2.3/go.mod h1:5FxzDJIgeiWJZslYHPj+LS1dq1ZBQVelZFnjsFGI/Uc=
github.com/yinghau76/go-ascii-art v0.0.0-20190517192627-e7f465a30189 h1:4UJw9if55Fu3HOwbfcaQlJ27p3oeJU2JZqoeT3ITJQk=
github.com/yinghau76/go-ascii-art v0.0.0-20190517192627-e7f465a30189/go.mod h1:rIrm5geMiBhPQkdfUm8gDFi/WiHneOp1i9KjmJqc+9I=
golang.org/x/crypto v0.0.0-20190308221718-c2843e01d9a2/go.mod h1:djNgcEr1/C05ACkg1iLfiJU5Ep61QUkGW8qpdssI0+w=
-golang.org/x/crypto v0.0.0-20200622213623-75b288015ac9/go.mod h1:LzIPMQfyMNhhGPhUkYOs5KpL4U8rLKemX1yGLhDgUto=
-golang.org/x/crypto v0.0.0-20201221181555-eec23a3978ad h1:DN0cp81fZ3njFcrLCytUHRSUkqBjfTo4Tx9RJTWs0EY=
-golang.org/x/crypto v0.0.0-20201221181555-eec23a3978ad/go.mod h1:jdWPYTVW3xRLrWPugEBEK3UY2ZEsg3UU495nc5E+M+I=
golang.org/x/exp v0.0.0-20190121172915-509febef88a4/go.mod h1:CJ0aWSM057203Lf6IL+f9T1iT9GByDxfZKAQTCR3kQA=
golang.org/x/lint v0.0.0-20181026193005-c67002cb31c3/go.mod h1:UVdnD1Gm6xHRNCYTkRU2/jEulfH38KcIWyp/GAMgvoE=
golang.org/x/lint v0.0.0-20190227174305-5b3e6a55c961/go.mod h1:wehouNa3lNwaWXcvxsM5YxQ5yQlVC4a0KAMCusXpPoU=
@@ -181,13 +120,8 @@ golang.org/x/net v0.0.0-20180826012351-8a410e7b638d/go.mod h1:mL1N/T3taQHkDXs73r
golang.org/x/net v0.0.0-20180906233101-161cd47e91fd/go.mod h1:mL1N/T3taQHkDXs73rZJwtUhF3w3ftmwwsq0BUmARs4=
golang.org/x/net v0.0.0-20190213061140-3a22650c66bd/go.mod h1:mL1N/T3taQHkDXs73rZJwtUhF3w3ftmwwsq0BUmARs4=
golang.org/x/net v0.0.0-20190311183353-d8887717615a/go.mod h1:t9HGtf8HONx5eT2rtn7q6eTqICYqUVnKs3thJo3Qplg=
-golang.org/x/net v0.0.0-20190404232315-eb5bcb51f2a3/go.mod h1:t9HGtf8HONx5eT2rtn7q6eTqICYqUVnKs3thJo3Qplg=
golang.org/x/net v0.0.0-20200114155413-6afb5195e5aa h1:F+8P+gmewFQYRk6JoLQLwjBCTu3mcIURZfNkVweuRKA=
golang.org/x/net v0.0.0-20200114155413-6afb5195e5aa/go.mod h1:z5CRVTTTmAJ677TzLLGU+0bjPO0LkuOLi4/5GtJWs/s=
-golang.org/x/net v0.0.0-20200520004742-59133d7f0dd7/go.mod h1:qpuaurCH72eLCgpAm/N6yyVIVM9cpaDIP3A8BGJEC5A=
-golang.org/x/net v0.0.0-20201202161906-c7110b5ffcbb/go.mod h1:sp8m0HH+o8qH0wwXwYZr8TS3Oi6o0r6Gce1SSxlDquU=
-golang.org/x/net v0.0.0-20201224014010-6772e930b67b h1:iFwSg7t5GZmB/Q5TjiEAsdoLDrdJRC1RiF2WhuV29Qw=
-golang.org/x/net v0.0.0-20201224014010-6772e930b67b/go.mod h1:m0MpNAwzfU5UDzcl9v0D8zg8gWTRqZa9RBIspLL5mdg=
golang.org/x/oauth2 v0.0.0-20180821212333-d2e6202438be/go.mod h1:N/0e6XlmueqKjAGxoOufVs8QHGRruUQn6yWY3a++T0U=
golang.org/x/sync v0.0.0-20180314180146-1d60e4601c6f/go.mod h1:RxMgew5VJxzue5/jJTE5uejpjVlOe/izrB70Jof72aM=
golang.org/x/sync v0.0.0-20181108010431-42b317875d0f/go.mod h1:RxMgew5VJxzue5/jJTE5uejpjVlOe/izrB70Jof72aM=
@@ -195,31 +129,15 @@ golang.org/x/sync v0.0.0-20190423024810-112230192c58/go.mod h1:RxMgew5VJxzue5/jJ
golang.org/x/sys v0.0.0-20180830151530-49385e6e1522/go.mod h1:STP8DvDyc/dI5b8T5hshtkjS+E42TnysNCUPdjciGhY=
golang.org/x/sys v0.0.0-20180909124046-d0be0721c37e/go.mod h1:STP8DvDyc/dI5b8T5hshtkjS+E42TnysNCUPdjciGhY=
golang.org/x/sys v0.0.0-20190215142949-d0b11bdaac8a/go.mod h1:STP8DvDyc/dI5b8T5hshtkjS+E42TnysNCUPdjciGhY=
-golang.org/x/sys v0.0.0-20190412213103-97732733099d/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs=
golang.org/x/sys v0.0.0-20190422165155-953cdadca894/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs=
-golang.org/x/sys v0.0.0-20190904154756-749cb33beabd/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs=
-golang.org/x/sys v0.0.0-20191005200804-aed5e4c7ecf9/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs=
golang.org/x/sys v0.0.0-20191026070338-33540a1f6037/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs=
-golang.org/x/sys v0.0.0-20191120155948-bd437916bb0e/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs=
-golang.org/x/sys v0.0.0-20200116001909-b77594299b42 h1:vEOn+mP2zCOVzKckCZy6YsCtDblrpj/w7B9nxGNELpg=
golang.org/x/sys v0.0.0-20200116001909-b77594299b42/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs=
-golang.org/x/sys v0.0.0-20200323222414-85ca7c5b95cd/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs=
-golang.org/x/sys v0.0.0-20200519105757-fe76b779f299/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs=
-golang.org/x/sys v0.0.0-20200930185726-fdedc70b468f/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs=
+golang.org/x/sys v0.0.0-20201119102817-f84b799fce68 h1:nxC68pudNYkKU6jWhgrqdreuFiOQWj1Fs7T3VrH4Pjw=
golang.org/x/sys v0.0.0-20201119102817-f84b799fce68/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs=
-golang.org/x/sys v0.0.0-20210113181707-4bcb84eeeb78 h1:nVuTkr9L6Bq62qpUqKo/RnZCFfzDBL0bYo6w9OJUqZY=
-golang.org/x/sys v0.0.0-20210113181707-4bcb84eeeb78/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs=
-golang.org/x/term v0.0.0-20201117132131-f5c789dd3221 h1:/ZHdbVpdR/jk3g30/d4yUL0JU9kksj8+F/bnQUVLGDM=
-golang.org/x/term v0.0.0-20201117132131-f5c789dd3221/go.mod h1:Nr5EML6q2oocZ2LXRh80K7BxOlk5/8JxuGnuhpl+muw=
-golang.org/x/term v0.0.0-20201126162022-7de9c90e9dd1/go.mod h1:bj7SfCRtBDWHUb9snDiAeCFNEtKQo2Wmx5Cou7ajbmo=
golang.org/x/term v0.0.0-20201210144234-2321bbc49cbf h1:MZ2shdL+ZM/XzY3ZGOnh4Nlpnxz5GSOhOmtHo3iPU6M=
golang.org/x/term v0.0.0-20201210144234-2321bbc49cbf/go.mod h1:bj7SfCRtBDWHUb9snDiAeCFNEtKQo2Wmx5Cou7ajbmo=
golang.org/x/text v0.3.0/go.mod h1:NqM8EUOU14njkJ3fqMW+pc6Ldnwhi/IjpwHt7yyuwOQ=
-golang.org/x/text v0.3.2 h1:tW2bmiBqwgJj/UpqtC8EpXEZVYOwU0yG4iWbprSVAcs=
golang.org/x/text v0.3.2/go.mod h1:bEr9sfX3Q8Zfm5fL9x+3itogRgK3+ptLWKqgva+5dAk=
-golang.org/x/text v0.3.3/go.mod h1:5Zoc/QRtKVWzQhOtBMvqHzDpF6irO9z98xDceosuGiQ=
-golang.org/x/text v0.3.5 h1:i6eZZ+zk0SOf0xgBpEpPD18qWcJda6q1sxt3S0kzyUQ=
-golang.org/x/text v0.3.5/go.mod h1:5Zoc/QRtKVWzQhOtBMvqHzDpF6irO9z98xDceosuGiQ=
golang.org/x/time v0.0.0-20201208040808-7e3f01d25324 h1:Hir2P/De0WpUhtrKGGjvSb2YxUgyZ7EFOSLIcSSpiwE=
golang.org/x/time v0.0.0-20201208040808-7e3f01d25324/go.mod h1:tRJNPiyCQ0inRvYxbN9jk5I+vvW/OXSQhTDSoE431IQ=
golang.org/x/tools v0.0.0-20180917221912-90fa682c2a6e/go.mod h1:n7NCudcB/nEzxVGmLbDWY5pfWTLqBcC2KZ6jyYvM4mQ=
@@ -228,8 +146,6 @@ golang.org/x/tools v0.0.0-20190226205152-f727befe758c/go.mod h1:9Yl7xja0Znq3iFh3
golang.org/x/tools v0.0.0-20190311212946-11955173bddd/go.mod h1:LCzVGOaR6xXOjkQ3onu1FJEFr0SW1gC7cKk1uF8kGRs=
golang.org/x/tools v0.0.0-20190524140312-2c0ae7006135/go.mod h1:RgjU9mgBXZiqYHBnxXauZ1Gv1EHHAz9KjViQ78xBX0Q=
golang.org/x/xerrors v0.0.0-20191204190536-9bdfabe68543/go.mod h1:I/5z698sn9Ka8TeJc9MKroUUfqBBauWjQqLJ2OPfmY0=
-golang.org/x/xerrors v0.0.0-20200804184101-5ec99f83aff1 h1:go1bK/D/BFZV2I8cIQd1NKEZ+0owSTG1fDTci4IqFcE=
-golang.org/x/xerrors v0.0.0-20200804184101-5ec99f83aff1/go.mod h1:I/5z698sn9Ka8TeJc9MKroUUfqBBauWjQqLJ2OPfmY0=
google.golang.org/appengine v1.1.0/go.mod h1:EbEs0AVv82hx2wNQdGPgUI5lhzA/G0D9YwlJXL52JkM=
google.golang.org/appengine v1.4.0/go.mod h1:xpcJRLb0r/rnEns0DIKYYv+WjYCduHsrkT7/EB5XEv4=
google.golang.org/genproto v0.0.0-20180817151627-c66870c02cf8/go.mod h1:JiN7NxoALGmiZfu7CAH4rXhgtRTLTxftemlI0sWmxmc=
@@ -248,25 +164,12 @@ google.golang.org/protobuf v1.23.0/go.mod h1:EGpADcykh3NcUnDUJcl1+ZksZNG86OlYog2
google.golang.org/protobuf v1.23.1-0.20200526195155-81db48ad09cc/go.mod h1:EGpADcykh3NcUnDUJcl1+ZksZNG86OlYog2l/sGQquU=
google.golang.org/protobuf v1.25.0 h1:Ejskq+SyPohKW+1uil0JJMtmHCgJPJ/qWTxr8qp+R4c=
google.golang.org/protobuf v1.25.0/go.mod h1:9JNX74DMeImyA3h4bdi1ymwjUzf21/xIlbajtzgsN7c=
-gopkg.in/check.v1 v0.0.0-20161208181325-20d25e280405 h1:yhCVgyC4o1eVCa2tZl7eS0r+SDo693bJlVdllGtEeKM=
gopkg.in/check.v1 v0.0.0-20161208181325-20d25e280405/go.mod h1:Co6ibVJAznAaIkqp8huTwlJQCZ016jof/cbN4VW5Yz0=
-gopkg.in/check.v1 v1.0.0-20201130134442-10cb98267c6c h1:Hei/4ADfdWqJk1ZMxUNpqntNwaWcugrBjAiHlqqRiVk=
-gopkg.in/check.v1 v1.0.0-20201130134442-10cb98267c6c/go.mod h1:JHkPIbrfpd72SG/EVd6muEfDQjcINNoR0C8j2r3qZ4Q=
-gopkg.in/fsnotify.v1 v1.4.7 h1:xOHLXZwVvI9hhs+cLKq5+I5onOuwQLhQwiu63xxlHs4=
gopkg.in/fsnotify.v1 v1.4.7/go.mod h1:Tz8NjZHkW78fSQdbUxIjBTcgA1z1m8ZHf0WmKUhAMys=
-gopkg.in/tomb.v1 v1.0.0-20141024135613-dd632973f1e7 h1:uRGJdciOHaEIrze2W8Q3AKkepLTh2hOroT7a+7czfdQ=
gopkg.in/tomb.v1 v1.0.0-20141024135613-dd632973f1e7/go.mod h1:dt/ZhP58zS4L8KSrWDmTeBkI65Dw0HsyUHuEVlX15mw=
gopkg.in/yaml.v2 v2.2.1/go.mod h1:hI93XBmqTisBFMUTm0b8Fm+jr3Dg1NNxqwp+5A1VGuI=
gopkg.in/yaml.v2 v2.2.2/go.mod h1:hI93XBmqTisBFMUTm0b8Fm+jr3Dg1NNxqwp+5A1VGuI=
-gopkg.in/yaml.v2 v2.2.4/go.mod h1:hI93XBmqTisBFMUTm0b8Fm+jr3Dg1NNxqwp+5A1VGuI=
gopkg.in/yaml.v2 v2.2.8 h1:obN1ZagJSUGI0Ek/LBmuj4SNLPfIny3KsKFopxRdj10=
gopkg.in/yaml.v2 v2.2.8/go.mod h1:hI93XBmqTisBFMUTm0b8Fm+jr3Dg1NNxqwp+5A1VGuI=
-gopkg.in/yaml.v2 v2.3.0/go.mod h1:hI93XBmqTisBFMUTm0b8Fm+jr3Dg1NNxqwp+5A1VGuI=
-gopkg.in/yaml.v2 v2.4.0 h1:D8xgwECY7CYvx+Y2n4sBz93Jn9JRvxdiyyo8CTfuKaY=
-gopkg.in/yaml.v2 v2.4.0/go.mod h1:RDklbk79AGWmwhnvt/jBztapEOGDOx6ZbXqjP6csGnQ=
-gopkg.in/yaml.v3 v3.0.0-20200313102051-9f266ea9e77c h1:dUUwHk2QECo/6vqA44rthZ8ie2QXMNeKRTHCNY2nXvo=
-gopkg.in/yaml.v3 v3.0.0-20200313102051-9f266ea9e77c/go.mod h1:K4uyk7z7BCEPqu6E+C64Yfv1cQ7kz7rIZviUmN+EgEM=
-gopkg.in/yaml.v3 v3.0.0-20210107192922-496545a6307b h1:h8qDotaEPuJATrMmW04NCwg7v22aHH28wwpauUhK9Oo=
-gopkg.in/yaml.v3 v3.0.0-20210107192922-496545a6307b/go.mod h1:K4uyk7z7BCEPqu6E+C64Yfv1cQ7kz7rIZviUmN+EgEM=
honnef.co/go/tools v0.0.0-20190102054323-c2f93a96b099/go.mod h1:rf3lG4BRIbNafJWhAfAdb/ePZxsR/4RtNHQocxwk9r4=
honnef.co/go/tools v0.0.0-20190523083050-ea95bdfd59fc/go.mod h1:rf3lG4BRIbNafJWhAfAdb/ePZxsR/4RtNHQocxwk9r4=
From 0bd5afbf212decddc19da8437c8b39a4d127d433 Mon Sep 17 00:00:00 2001
From: Mrs4s <1844812067@qq.com>
Date: Tue, 19 Jan 2021 01:23:09 +0800
Subject: [PATCH 324/367] fix #562.
---
coolq/bot.go | 8 +-------
1 file changed, 1 insertion(+), 7 deletions(-)
diff --git a/coolq/bot.go b/coolq/bot.go
index 1b842c9..8bb5991 100644
--- a/coolq/bot.go
+++ b/coolq/bot.go
@@ -272,13 +272,7 @@ func (bot *CQBot) SendGroupMessage(groupId int64, m *message.SendingMessage) int
ret := bot.Client.SendGroupMessage(groupId, m, ForceFragmented)
if ret == nil || ret.Id == -1 {
log.Warnf("群消息发送失败: 账号可能被风控.")
- if !ForceFragmented {
- log.Warnf("将尝试分片发送...")
- ret = bot.Client.SendGroupMessage(groupId, m, true)
- }
- if ret == nil || ret.Id == -1 {
- return -1
- }
+ return -1
}
return bot.InsertGroupMessage(ret)
}
From 5480deff4bb3d4a3a4fb4a2e0ac1d74c6c49a2f9 Mon Sep 17 00:00:00 2001
From: Mrs4s <1844812067@qq.com>
Date: Tue, 19 Jan 2021 01:59:41 +0800
Subject: [PATCH 325/367] fix ua.
---
global/net.go | 4 ++--
1 file changed, 2 insertions(+), 2 deletions(-)
diff --git a/global/net.go b/global/net.go
index 93756ed..f8470f4 100644
--- a/global/net.go
+++ b/global/net.go
@@ -98,7 +98,7 @@ func DownloadFile(url, path string, limit int64, headers map[string]string) erro
req.Header.Set(k, v)
}
- if _, ok := headers["User-Agent"]; ok {
+ if _, ok := headers["User-Agent"]; !ok {
req.Header["User-Agent"] = []string{UserAgent}
}
resp, err := client.Do(req)
@@ -151,7 +151,7 @@ func DownloadFileMultiThreading(url, path string, limit int64, threadCount int,
req.Header.Set(k, v)
}
- if _, ok := headers["User-Agent"]; ok {
+ if _, ok := headers["User-Agent"]; !ok {
req.Header["User-Agent"] = []string{UserAgent}
}
req.Header.Set("range", "bytes=0-")
From 0002185e45fe8a56440ee88e59aa055cadcda6a8 Mon Sep 17 00:00:00 2001
From: Mrs4s <1844812067@qq.com>
Date: Tue, 19 Jan 2021 12:07:06 +0800
Subject: [PATCH 326/367] feature get_group_msg_history.
---
coolq/api.go | 37 +++++++++++++++++++++++++++-----
coolq/bot.go | 51 +++++++++++++++++++++++++++++++++++++++++++++
coolq/event.go | 48 ++----------------------------------------
server/http.go | 7 +++++++
server/websocket.go | 3 +++
5 files changed, 95 insertions(+), 51 deletions(-)
diff --git a/coolq/api.go b/coolq/api.go
index 9001742..1ed1d26 100644
--- a/coolq/api.go
+++ b/coolq/api.go
@@ -275,7 +275,9 @@ func (bot *CQBot) CQSendGroupForwardMessage(groupId int64, m gjson.Result) MSG {
}
uin, _ := strconv.ParseInt(e.Get("data.uin").Str, 10, 64)
msgTime, err := strconv.ParseInt(e.Get("data.time").Str, 10, 64)
- if err != nil { msgTime = ts.Unix()}
+ if err != nil {
+ msgTime = ts.Unix()
+ }
name := e.Get("data.name").Str
c := e.Get("data.content")
if c.IsArray() {
@@ -807,10 +809,11 @@ func (bot *CQBot) CQGetMessage(messageId int32) MSG {
gid, isGroup := msg["group"]
raw := msg["message"].(string)
return OK(MSG{
- "message_id": messageId,
- "real_id": msg["message-id"],
- "group": isGroup,
- "group_id": gid,
+ "message_id": messageId,
+ "real_id": msg["message-id"],
+ "message_seq": msg["message-id"],
+ "group": isGroup,
+ "group_id": gid,
"message_type": func() string {
if isGroup {
return "group"
@@ -841,6 +844,30 @@ func (bot *CQBot) CQGetGroupSystemMessages() MSG {
return OK(msg)
}
+func (bot *CQBot) CQGetGroupMessageHistory(groupId int64, seq int64) MSG {
+ if g := bot.Client.FindGroup(groupId); g == nil {
+ return Failed(100, "GROUP_NOT_FOUND", "群聊不存在")
+ }
+ msg, err := bot.Client.GetGroupMessages(groupId, seq-19, seq)
+ if err != nil {
+ log.Warnf("获取群历史消息失败: %v", err)
+ return Failed(100, "MESSAGES_API_ERROR", err.Error())
+ }
+ var ms []MSG
+ for _, m := range msg {
+ id := m.Id
+ if bot.db != nil {
+ id = bot.InsertGroupMessage(m)
+ }
+ t := bot.formatGroupMessage(m)
+ t["message_id"] = id
+ ms = append(ms, t)
+ }
+ return OK(MSG{
+ "messages": ms,
+ })
+}
+
func (bot *CQBot) CQCanSendImage() MSG {
return OK(MSG{"yes": true})
}
diff --git a/coolq/bot.go b/coolq/bot.go
index 8bb5991..7377be9 100644
--- a/coolq/bot.go
+++ b/coolq/bot.go
@@ -472,6 +472,57 @@ func (bot *CQBot) dispatchEventMessage(m MSG) {
}
}
+func (bot *CQBot) formatGroupMessage(m *message.GroupMessage) MSG {
+ cqm := ToStringMessage(m.Elements, m.GroupCode, true)
+ gm := MSG{
+ "anonymous": nil,
+ "font": 0,
+ "group_id": m.GroupCode,
+ "message": ToFormattedMessage(m.Elements, m.GroupCode, false),
+ "message_type": "group",
+ "message_seq": m.Id,
+ "post_type": "message",
+ "raw_message": cqm,
+ "self_id": bot.Client.Uin,
+ "sender": MSG{
+ "age": 0,
+ "area": "",
+ "level": "",
+ "sex": "unknown",
+ "user_id": m.Sender.Uin,
+ },
+ "sub_type": "normal",
+ "time": time.Now().Unix(),
+ "user_id": m.Sender.Uin,
+ }
+ if m.Sender.IsAnonymous() {
+ gm["anonymous"] = MSG{
+ "flag": m.Sender.AnonymousInfo.AnonymousId + "|" + m.Sender.AnonymousInfo.AnonymousNick,
+ "id": m.Sender.Uin,
+ "name": m.Sender.AnonymousInfo.AnonymousNick,
+ }
+ gm["sender"].(MSG)["nickname"] = "匿名消息"
+ gm["sub_type"] = "anonymous"
+ } else {
+ mem := bot.Client.FindGroup(m.GroupCode).FindMember(m.Sender.Uin)
+ ms := gm["sender"].(MSG)
+ ms["role"] = func() string {
+ switch mem.Permission {
+ case client.Owner:
+ return "owner"
+ case client.Administrator:
+ return "admin"
+ default:
+ return "member"
+ }
+ }()
+ ms["nickname"] = mem.Nickname
+ ms["card"] = mem.CardName
+ ms["title"] = mem.SpecialTitle
+ }
+ return gm
+}
+
func formatGroupName(group *client.GroupInfo) string {
return fmt.Sprintf("%s(%d)", group.Name, group.Code)
}
diff --git a/coolq/event.go b/coolq/event.go
index c12427a..30d718f 100644
--- a/coolq/event.go
+++ b/coolq/event.go
@@ -93,52 +93,8 @@ func (bot *CQBot) groupMessageEvent(c *client.QQClient, m *message.GroupMessage)
id = bot.InsertGroupMessage(m)
}
log.Infof("收到群 %v(%v) 内 %v(%v) 的消息: %v (%v)", m.GroupName, m.GroupCode, m.Sender.DisplayName(), m.Sender.Uin, cqm, id)
- gm := MSG{
- "anonymous": nil,
- "font": 0,
- "group_id": m.GroupCode,
- "message": ToFormattedMessage(m.Elements, m.GroupCode, false),
- "message_id": id,
- "message_type": "group",
- "post_type": "message",
- "raw_message": cqm,
- "self_id": c.Uin,
- "sender": MSG{
- "age": 0,
- "area": "",
- "level": "",
- "sex": "unknown",
- "user_id": m.Sender.Uin,
- },
- "sub_type": "normal",
- "time": time.Now().Unix(),
- "user_id": m.Sender.Uin,
- }
- if m.Sender.IsAnonymous() {
- gm["anonymous"] = MSG{
- "flag": m.Sender.AnonymousInfo.AnonymousId + "|" + m.Sender.AnonymousInfo.AnonymousNick,
- "id": m.Sender.Uin,
- "name": m.Sender.AnonymousInfo.AnonymousNick,
- }
- gm["sender"].(MSG)["nickname"] = "匿名消息"
- gm["sub_type"] = "anonymous"
- } else {
- mem := c.FindGroup(m.GroupCode).FindMember(m.Sender.Uin)
- ms := gm["sender"].(MSG)
- ms["role"] = func() string {
- switch mem.Permission {
- case client.Owner:
- return "owner"
- case client.Administrator:
- return "admin"
- default:
- return "member"
- }
- }()
- ms["nickname"] = mem.Nickname
- ms["card"] = mem.CardName
- ms["title"] = mem.SpecialTitle
- }
+ gm := bot.formatGroupMessage(m)
+ gm["message_id"] = id
bot.dispatchEventMessage(gm)
}
diff --git a/server/http.go b/server/http.go
index b3a35cb..14e0eea 100644
--- a/server/http.go
+++ b/server/http.go
@@ -421,6 +421,12 @@ func SetGroupAnonymousBan(s *httpServer, c *gin.Context) {
c.JSON(200, s.bot.CQSetGroupAnonymousBan(gid, flag, int32(d)))
}
+func GetGroupMessageHistory(s *httpServer, c *gin.Context) {
+ gid, _ := strconv.ParseInt(getParam(c, "group_id"), 10, 64)
+ seq, _ := strconv.ParseInt(getParam(c, "message_seq"), 10, 64)
+ c.JSON(200, s.bot.CQGetGroupMessageHistory(gid, seq))
+}
+
func HandleQuickOperation(s *httpServer, c *gin.Context) {
if c.Request.Method != "POST" {
c.AbortWithStatus(404)
@@ -566,6 +572,7 @@ var httpApi = map[string]func(s *httpServer, c *gin.Context){
"reload_event_filter": ReloadEventFilter,
"set_group_portrait": SetGroupPortrait,
"set_group_anonymous_ban": SetGroupAnonymousBan,
+ "get_group_msg_history": GetGroupMessageHistory,
"download_file": DownloadFile,
".handle_quick_operation": HandleQuickOperation,
".ocr_image": OcrImage,
diff --git a/server/websocket.go b/server/websocket.go
index 6fb1d14..77f6465 100644
--- a/server/websocket.go
+++ b/server/websocket.go
@@ -562,6 +562,9 @@ var wsAPI = map[string]func(*coolq.CQBot, gjson.Result) coolq.MSG{
"get_group_file_url": func(bot *coolq.CQBot, p gjson.Result) coolq.MSG {
return bot.CQGetGroupFileUrl(p.Get("group_id").Int(), p.Get("file_id").Str, int32(p.Get("busid").Int()))
},
+ "get_group_msg_history": func(bot *coolq.CQBot, p gjson.Result) coolq.MSG {
+ return bot.CQGetGroupMessageHistory(p.Get("group_id").Int(), p.Get("message_seq").Int())
+ },
"_get_vip_info": func(bot *coolq.CQBot, p gjson.Result) coolq.MSG {
return bot.CQGetVipInfo(p.Get("user_id").Int())
},
From 360f7188e16fef699d5f09e0a429bc2d24c0f568 Mon Sep 17 00:00:00 2001
From: xuthus5
Date: Tue, 19 Jan 2021 22:07:28 +0800
Subject: [PATCH 327/367] local log hook
---
global/log_hook.go | 152 +++++++++++++++++++++++++++++++++++
main.go | 195 ++++++++++++++++++++-------------------------
2 files changed, 237 insertions(+), 110 deletions(-)
create mode 100644 global/log_hook.go
diff --git a/global/log_hook.go b/global/log_hook.go
new file mode 100644
index 0000000..add40d5
--- /dev/null
+++ b/global/log_hook.go
@@ -0,0 +1,152 @@
+package global
+
+import (
+ "fmt"
+ "github.com/sirupsen/logrus"
+ "io"
+ "os"
+ "path/filepath"
+ "reflect"
+ "sync"
+)
+
+type LocalHook struct {
+ lock *sync.Mutex
+ levels []logrus.Level // hook级别
+ formatter logrus.Formatter // 格式
+ path string // 写入path
+ writer io.Writer // io
+}
+
+// ref: logrus/hooks.go. impl Hook interface
+func (hook *LocalHook) Levels() []logrus.Level {
+ if len(hook.levels) == 0 {
+ return logrus.AllLevels
+ }
+ return hook.levels
+}
+
+func (hook *LocalHook) ioWrite(entry *logrus.Entry) error {
+ log, err := hook.formatter.Format(entry)
+ if err != nil {
+ return err
+ }
+
+ _, err = hook.writer.Write(log)
+ if err != nil {
+ return err
+ }
+ return nil
+}
+
+func (hook *LocalHook) pathWrite(entry *logrus.Entry) error {
+ dir := filepath.Dir(hook.path)
+ if err := os.MkdirAll(dir, os.ModePerm); err != nil {
+ return err
+ }
+
+ fd, err := os.OpenFile(hook.path, os.O_WRONLY|os.O_APPEND|os.O_CREATE, 0666)
+ if err != nil {
+ return err
+ }
+ defer fd.Close()
+
+ log, err := hook.formatter.Format(entry)
+
+ if err != nil {
+ return err
+ }
+
+ _, err = fd.Write(log)
+ return err
+}
+
+func (hook *LocalHook) Fire(entry *logrus.Entry) error {
+ hook.lock.Lock()
+ defer hook.lock.Unlock()
+
+ if hook.writer != nil {
+ return hook.ioWrite(entry)
+ }
+
+ if hook.path != "" {
+ return hook.pathWrite(entry)
+ }
+
+ return nil
+}
+
+func (hook *LocalHook) SetFormatter(formatter logrus.Formatter) {
+ hook.lock.Lock()
+ defer hook.lock.Unlock()
+
+ if formatter == nil {
+ // 用默认的
+ formatter = &logrus.TextFormatter{DisableColors: true}
+ } else {
+ switch formatter.(type) {
+ case *logrus.TextFormatter:
+ textFormatter := formatter.(*logrus.TextFormatter)
+ textFormatter.DisableColors = true
+ default:
+ // todo
+ }
+ }
+
+ hook.formatter = formatter
+}
+
+func (hook *LocalHook) SetWriter(writer io.Writer) {
+ hook.lock.Lock()
+ defer hook.lock.Unlock()
+ hook.writer = writer
+}
+
+func (hook *LocalHook) SetPath(path string) {
+ hook.lock.Lock()
+ defer hook.lock.Unlock()
+ hook.path = path
+}
+
+func NewLocalHook(args interface{}, formatter logrus.Formatter, levels ...logrus.Level) *LocalHook {
+ hook := &LocalHook{
+ lock: new(sync.Mutex),
+ }
+ hook.SetFormatter(formatter)
+ hook.levels = append(hook.levels, levels...)
+
+ switch args.(type) {
+ case string:
+ hook.SetPath(args.(string))
+ case io.Writer:
+ hook.SetWriter(args.(io.Writer))
+ default:
+ panic(fmt.Sprintf("unsupported type: %v", reflect.TypeOf(args)))
+ }
+
+ return hook
+}
+
+func GetLogLevel(level string) []logrus.Level {
+ switch level {
+ case "trace":
+ return []logrus.Level{logrus.TraceLevel, logrus.DebugLevel,
+ logrus.InfoLevel, logrus.WarnLevel, logrus.ErrorLevel,
+ logrus.FatalLevel, logrus.PanicLevel}
+ case "debug":
+ return []logrus.Level{logrus.DebugLevel, logrus.InfoLevel,
+ logrus.WarnLevel, logrus.ErrorLevel,
+ logrus.FatalLevel, logrus.PanicLevel}
+ case "info":
+ return []logrus.Level{logrus.InfoLevel, logrus.WarnLevel,
+ logrus.ErrorLevel, logrus.FatalLevel, logrus.PanicLevel}
+ case "warn":
+ return []logrus.Level{logrus.WarnLevel, logrus.ErrorLevel,
+ logrus.FatalLevel, logrus.PanicLevel}
+ case "error":
+ return []logrus.Level{logrus.ErrorLevel, logrus.FatalLevel,
+ logrus.PanicLevel}
+ default:
+ return logrus.AllLevels
+ }
+}
diff --git a/main.go b/main.go
index a525964..d61ef75 100644
--- a/main.go
+++ b/main.go
@@ -29,42 +29,14 @@ import (
"github.com/Mrs4s/go-cqhttp/global"
jsoniter "github.com/json-iterator/go"
rotatelogs "github.com/lestrrat-go/file-rotatelogs"
- "github.com/rifflock/lfshook"
log "github.com/sirupsen/logrus"
easy "github.com/t-tomalak/logrus-easy-formatter"
)
var json = jsoniter.ConfigCompatibleWithStandardLibrary
+var conf *global.JsonConfig
func init() {
- log.SetFormatter(&easy.Formatter{
- TimestampFormat: "2006-01-02 15:04:05",
- LogFormat: "[%time%] [%lvl%]: %msg% \n",
- })
- w, err := rotatelogs.New(path.Join("logs", "%Y-%m-%d.log"), rotatelogs.WithRotationTime(time.Hour*24))
- if err == nil {
- log.SetOutput(io.MultiWriter(os.Stderr, w))
- }
- if !global.PathExists(global.IMAGE_PATH) {
- if err := os.MkdirAll(global.IMAGE_PATH, 0755); err != nil {
- log.Fatalf("创建图片缓存文件夹失败: %v", err)
- }
- }
- if !global.PathExists(global.VOICE_PATH) {
- if err := os.MkdirAll(global.VOICE_PATH, 0755); err != nil {
- log.Fatalf("创建语音缓存文件夹失败: %v", err)
- }
- }
- if !global.PathExists(global.VIDEO_PATH) {
- if err := os.MkdirAll(global.VIDEO_PATH, 0755); err != nil {
- log.Fatalf("创建视频缓存文件夹失败: %v", err)
- }
- }
- if !global.PathExists(global.CACHE_PATH) {
- if err := os.MkdirAll(global.CACHE_PATH, 0755); err != nil {
- log.Fatalf("创建发送图片缓存文件夹失败: %v", err)
- }
- }
if global.PathExists("cqhttp.json") {
log.Info("发现 cqhttp.json 将在五秒后尝试导入配置,按 Ctrl+C 取消.")
log.Warn("警告: 该操作会删除 cqhttp.json 并覆盖 config.hjson 文件.")
@@ -94,6 +66,44 @@ func init() {
}
_ = os.Remove("cqhttp.json")
}
+
+ conf = getConfig()
+ if conf == nil {
+ return
+ }
+
+ logFormatter := &easy.Formatter{
+ TimestampFormat: "2006-01-02 15:04:05",
+ LogFormat: "[%time%] [%lvl%]: %msg% \n",
+ }
+ w, err := rotatelogs.New(path.Join("logs", "%Y-%m-%d.log"), rotatelogs.WithRotationTime(time.Hour*24))
+ if err != nil {
+ log.Errorf("rotatelogs init err: %v", err)
+ panic(err)
+ }
+
+ log.AddHook(global.NewLocalHook(w, logFormatter, global.GetLogLevel(conf.LogLevel)...))
+
+ if !global.PathExists(global.IMAGE_PATH) {
+ if err := os.MkdirAll(global.IMAGE_PATH, 0755); err != nil {
+ log.Fatalf("创建图片缓存文件夹失败: %v", err)
+ }
+ }
+ if !global.PathExists(global.VOICE_PATH) {
+ if err := os.MkdirAll(global.VOICE_PATH, 0755); err != nil {
+ log.Fatalf("创建语音缓存文件夹失败: %v", err)
+ }
+ }
+ if !global.PathExists(global.VIDEO_PATH) {
+ if err := os.MkdirAll(global.VIDEO_PATH, 0755); err != nil {
+ log.Fatalf("创建视频缓存文件夹失败: %v", err)
+ }
+ }
+ if !global.PathExists(global.CACHE_PATH) {
+ if err := os.MkdirAll(global.CACHE_PATH, 0755); err != nil {
+ log.Fatalf("创建发送图片缓存文件夹失败: %v", err)
+ }
+ }
}
func main() {
@@ -120,93 +130,12 @@ func main() {
}
}
- var conf *global.JsonConfig
- if global.PathExists("config.json") {
- conf = global.Load("config.json")
- _ = conf.Save("config.hjson")
- _ = os.Remove("config.json")
- } else if os.Getenv("UIN") != "" {
- log.Infof("将从环境变量加载配置.")
- uin, _ := strconv.ParseInt(os.Getenv("UIN"), 10, 64)
- pwd := os.Getenv("PASS")
- post := os.Getenv("HTTP_POST")
- conf = &global.JsonConfig{
- Uin: uin,
- Password: pwd,
- HttpConfig: &global.GoCQHttpConfig{
- Enabled: true,
- Host: "0.0.0.0",
- Port: 5700,
- PostUrls: map[string]string{},
- },
- WSConfig: &global.GoCQWebsocketConfig{
- Enabled: true,
- Host: "0.0.0.0",
- Port: 6700,
- },
- PostMessageFormat: "string",
- Debug: os.Getenv("DEBUG") == "true",
- }
- if post != "" {
- conf.HttpConfig.PostUrls[post] = os.Getenv("HTTP_SECRET")
- }
- } else {
- conf = global.Load("config.hjson")
- }
- if conf == nil {
- err := global.WriteAllText("config.hjson", global.DefaultConfigWithComments)
- if err != nil {
- log.Fatalf("创建默认配置文件时出现错误: %v", err)
- return
- }
- log.Infof("默认配置文件已生成, 请编辑 config.hjson 后重启程序.")
- time.Sleep(time.Second * 5)
- return
- }
if conf.Uin == 0 || (conf.Password == "" && conf.PasswordEncrypted == "") {
log.Warnf("请修改 config.hjson 以添加账号密码.")
time.Sleep(time.Second * 5)
return
}
- // log classified by level
- // Collect all records up to the specified level (default level: warn)
- logLevel := conf.LogLevel
- if logLevel != "" {
- date := time.Now().Format("2006-01-02")
- var logPathMap lfshook.PathMap
- switch conf.LogLevel {
- case "warn":
- logPathMap = lfshook.PathMap{
- log.WarnLevel: path.Join("logs", date+"-warn.log"),
- log.ErrorLevel: path.Join("logs", date+"-warn.log"),
- log.FatalLevel: path.Join("logs", date+"-warn.log"),
- log.PanicLevel: path.Join("logs", date+"-warn.log"),
- }
- case "error":
- logPathMap = lfshook.PathMap{
- log.ErrorLevel: path.Join("logs", date+"-error.log"),
- log.FatalLevel: path.Join("logs", date+"-error.log"),
- log.PanicLevel: path.Join("logs", date+"-error.log"),
- }
- default:
- logPathMap = lfshook.PathMap{
- log.WarnLevel: path.Join("logs", date+"-warn.log"),
- log.ErrorLevel: path.Join("logs", date+"-warn.log"),
- log.FatalLevel: path.Join("logs", date+"-warn.log"),
- log.PanicLevel: path.Join("logs", date+"-warn.log"),
- }
- }
-
- log.AddHook(lfshook.NewHook(
- logPathMap,
- &easy.Formatter{
- TimestampFormat: "2006-01-02 15:04:05",
- LogFormat: "[%time%] [%lvl%]: %msg% \n",
- },
- ))
- }
-
log.Info("当前版本:", coolq.Version)
if conf.Debug {
log.SetLevel(log.DebugLevel)
@@ -487,3 +416,49 @@ func restart(Args []string) {
}
cmd.Start()
}
+
+func getConfig() *global.JsonConfig {
+ if global.PathExists("config.json") {
+ conf = global.Load("config.json")
+ _ = conf.Save("config.hjson")
+ _ = os.Remove("config.json")
+ } else if os.Getenv("UIN") != "" {
+ log.Infof("将从环境变量加载配置.")
+ uin, _ := strconv.ParseInt(os.Getenv("UIN"), 10, 64)
+ pwd := os.Getenv("PASS")
+ post := os.Getenv("HTTP_POST")
+ conf = &global.JsonConfig{
+ Uin: uin,
+ Password: pwd,
+ HttpConfig: &global.GoCQHttpConfig{
+ Enabled: true,
+ Host: "0.0.0.0",
+ Port: 5700,
+ PostUrls: map[string]string{},
+ },
+ WSConfig: &global.GoCQWebsocketConfig{
+ Enabled: true,
+ Host: "0.0.0.0",
+ Port: 6700,
+ },
+ PostMessageFormat: "string",
+ Debug: os.Getenv("DEBUG") == "true",
+ }
+ if post != "" {
+ conf.HttpConfig.PostUrls[post] = os.Getenv("HTTP_SECRET")
+ }
+ } else {
+ conf = global.Load("config.hjson")
+ }
+ if conf == nil {
+ err := global.WriteAllText("config.hjson", global.DefaultConfigWithComments)
+ if err != nil {
+ log.Fatalf("创建默认配置文件时出现错误: %v", err)
+ return nil
+ }
+ log.Infof("默认配置文件已生成, 请编辑 config.hjson 后重启程序.")
+ time.Sleep(time.Second * 5)
+ return nil
+ }
+ return conf
+}
From aa54ed56104ac5fb1647e0be17be33c2f839adfd Mon Sep 17 00:00:00 2001
From: xuthus5
Date: Tue, 19 Jan 2021 22:17:12 +0800
Subject: [PATCH 328/367] reset default config log_level
---
global/config.go | 4 ++--
1 file changed, 2 insertions(+), 2 deletions(-)
diff --git a/global/config.go b/global/config.go
index d476ace..71abbf0 100644
--- a/global/config.go
+++ b/global/config.go
@@ -118,8 +118,8 @@ var DefaultConfigWithComments = `
use_sso_address: false
// 是否启用 DEBUG
debug: false
- // 日志等级
- log_level: ""
+ // 日志等级 trace,debug,info,warn,error
+ log_level: "info"
// WebUi 设置
web_ui: {
// 是否启用 WebUi
From e19e797aaccf138dc84f48e3a16c685ae3f9f7c7 Mon Sep 17 00:00:00 2001
From: xuthus5
Date: Tue, 19 Jan 2021 22:33:05 +0800
Subject: [PATCH 329/367] log support print report_line
---
main.go | 7 ++++++-
1 file changed, 6 insertions(+), 1 deletion(-)
diff --git a/main.go b/main.go
index d61ef75..a87ee8a 100644
--- a/main.go
+++ b/main.go
@@ -69,7 +69,7 @@ func init() {
conf = getConfig()
if conf == nil {
- return
+ os.Exit(1)
}
logFormatter := &easy.Formatter{
@@ -82,6 +82,11 @@ func init() {
panic(err)
}
+ // 更加彻底的调试 将在标准输出中打印执行行数
+ if conf.Debug {
+ log.SetReportCaller(true)
+ }
+
log.AddHook(global.NewLocalHook(w, logFormatter, global.GetLogLevel(conf.LogLevel)...))
if !global.PathExists(global.IMAGE_PATH) {
From 219005d384d4695f09edb9588dfe9599c0933806 Mon Sep 17 00:00:00 2001
From: Mrs4s <1844812067@qq.com>
Date: Wed, 20 Jan 2021 01:30:18 +0800
Subject: [PATCH 330/367] fix #540.
---
global/net.go | 17 ++++-------------
1 file changed, 4 insertions(+), 13 deletions(-)
diff --git a/global/net.go b/global/net.go
index f8470f4..33ebb66 100644
--- a/global/net.go
+++ b/global/net.go
@@ -7,7 +7,6 @@ import (
"fmt"
"io"
"io/ioutil"
- "net"
"net/http"
"net/url"
"os"
@@ -24,7 +23,6 @@ import (
var (
client = &http.Client{
- Timeout: time.Second * 120,
Transport: &http.Transport{
Proxy: func(request *http.Request) (u *url.URL, e error) {
if Proxy == "" {
@@ -32,17 +30,10 @@ var (
}
return url.Parse(Proxy)
},
- DialContext: (&net.Dialer{
- Timeout: 30 * time.Second,
- KeepAlive: 30 * time.Second,
- }).DialContext,
- ForceAttemptHTTP2: true,
- IdleConnTimeout: 90 * time.Second,
- TLSHandshakeTimeout: 10 * time.Second,
- ExpectContinueTimeout: 1 * time.Second,
- MaxConnsPerHost: 0,
- MaxIdleConns: 0,
- MaxIdleConnsPerHost: 999,
+ ForceAttemptHTTP2: true,
+ MaxConnsPerHost: 0,
+ MaxIdleConns: 0,
+ MaxIdleConnsPerHost: 999,
},
}
From 2ac94a7e95e632f960e0aff56eea0845caf20d21 Mon Sep 17 00:00:00 2001
From: Mrs4s <1844812067@qq.com>
Date: Wed, 20 Jan 2021 23:33:25 +0800
Subject: [PATCH 331/367] update MiraiGo.
---
go.mod | 2 +-
go.sum | 2 ++
2 files changed, 3 insertions(+), 1 deletion(-)
diff --git a/go.mod b/go.mod
index 892b2fd..9b6d825 100644
--- a/go.mod
+++ b/go.mod
@@ -3,7 +3,7 @@ module github.com/Mrs4s/go-cqhttp
go 1.15
require (
- github.com/Mrs4s/MiraiGo v0.0.0-20210118164518-b007a4d0d68c
+ github.com/Mrs4s/MiraiGo v0.0.0-20210120152724-83f2eb02e6be
github.com/dustin/go-humanize v1.0.0
github.com/gin-contrib/pprof v1.3.0
github.com/gin-gonic/gin v1.6.3
diff --git a/go.sum b/go.sum
index a922cb7..23c9d6c 100644
--- a/go.sum
+++ b/go.sum
@@ -2,6 +2,8 @@ cloud.google.com/go v0.26.0/go.mod h1:aQUYkXzVsufM+DwF1aE+0xfcU+56JwCaLick0ClmMT
github.com/BurntSushi/toml v0.3.1/go.mod h1:xHWCNGjB5oqiDr8zfno3MHue2Ht5sIBksp03qcyfWMU=
github.com/Mrs4s/MiraiGo v0.0.0-20210118164518-b007a4d0d68c h1:HNyjAEK3nj+h8EMqoFEARnE+G/rlJDlh1BFEIShA6lk=
github.com/Mrs4s/MiraiGo v0.0.0-20210118164518-b007a4d0d68c/go.mod h1:9V7DdSwpEfCKQNvLZhRnFJFkelTU0tPLfwR5l6UFF1Y=
+github.com/Mrs4s/MiraiGo v0.0.0-20210120152724-83f2eb02e6be h1:S52Ht2a/fHLiZS83dC0ciygzm0TWzfzfOru6e1qpYGU=
+github.com/Mrs4s/MiraiGo v0.0.0-20210120152724-83f2eb02e6be/go.mod h1:9V7DdSwpEfCKQNvLZhRnFJFkelTU0tPLfwR5l6UFF1Y=
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=
From 164feca7c72c4c121f2ae6707ba084e518ee74ef Mon Sep 17 00:00:00 2001
From: Mrs4s <1844812067@qq.com>
Date: Sat, 23 Jan 2021 00:04:57 +0800
Subject: [PATCH 332/367] feature get_online_clients.
---
coolq/api.go | 20 ++++++++++++++++++++
server/http.go | 5 +++++
server/websocket.go | 3 +++
3 files changed, 28 insertions(+)
diff --git a/coolq/api.go b/coolq/api.go
index 1ed1d26..be8ca76 100644
--- a/coolq/api.go
+++ b/coolq/api.go
@@ -868,6 +868,26 @@ func (bot *CQBot) CQGetGroupMessageHistory(groupId int64, seq int64) MSG {
})
}
+func (bot *CQBot) CQGetOnlineClients(noCache bool) MSG {
+ if noCache {
+ if err := bot.Client.RefreshStatus(); err != nil {
+ log.Warnf("刷新客户端状态时出现问题 %v", err)
+ return Failed(100, "REFRESH_STATUS_ERROR", err.Error())
+ }
+ }
+ var d []MSG
+ for _, oc := range bot.Client.OnlineClients {
+ d = append(d, MSG{
+ "app_id": oc.AppId,
+ "device_name": oc.DeviceName,
+ "device_kind": oc.DeviceKind,
+ })
+ }
+ return OK(MSG{
+ "clients": d,
+ })
+}
+
func (bot *CQBot) CQCanSendImage() MSG {
return OK(MSG{"yes": true})
}
diff --git a/server/http.go b/server/http.go
index 14e0eea..8b6832c 100644
--- a/server/http.go
+++ b/server/http.go
@@ -427,6 +427,10 @@ func GetGroupMessageHistory(s *httpServer, c *gin.Context) {
c.JSON(200, s.bot.CQGetGroupMessageHistory(gid, seq))
}
+func GetOnlineClients(s *httpServer, c *gin.Context) {
+ c.JSON(200, s.bot.CQGetOnlineClients(getParamOrDefault(c, "no_cache", "false") == "true"))
+}
+
func HandleQuickOperation(s *httpServer, c *gin.Context) {
if c.Request.Method != "POST" {
c.AbortWithStatus(404)
@@ -578,6 +582,7 @@ var httpApi = map[string]func(s *httpServer, c *gin.Context){
".ocr_image": OcrImage,
"ocr_image": OcrImage,
"get_group_at_all_remain": GetGroupAtAllRemain,
+ "get_online_clients": GetOnlineClients,
".get_word_slices": GetWordSlices,
}
diff --git a/server/websocket.go b/server/websocket.go
index 77f6465..78e0ae0 100644
--- a/server/websocket.go
+++ b/server/websocket.go
@@ -580,6 +580,9 @@ var wsAPI = map[string]func(*coolq.CQBot, gjson.Result) coolq.MSG{
"get_group_at_all_remain": func(bot *coolq.CQBot, p gjson.Result) coolq.MSG {
return bot.CQGetAtAllRemain(p.Get("group_id").Int())
},
+ "get_online_clients": func(bot *coolq.CQBot, p gjson.Result) coolq.MSG {
+ return bot.CQGetOnlineClients(p.Get("no_cache").Bool())
+ },
".get_word_slices": func(bot *coolq.CQBot, p gjson.Result) coolq.MSG {
return bot.CQGetWordSlices(p.Get("content").Str)
},
From 8a81b675111339a63bf292a03de54cbaaf4a66f5 Mon Sep 17 00:00:00 2001
From: Mrs4s <1844812067@qq.com>
Date: Sat, 23 Jan 2021 00:11:43 +0800
Subject: [PATCH 333/367] doc update.
---
docs/cqhttp.md | 19 +++++++++++++++++++
1 file changed, 19 insertions(+)
diff --git a/docs/cqhttp.md b/docs/cqhttp.md
index c17dda6..f5686b6 100644
--- a/docs/cqhttp.md
+++ b/docs/cqhttp.md
@@ -831,6 +831,25 @@ JSON数组:
> 通过这个API下载的文件能直接放入CQ码作为图片或语音发送
> 调用后会阻塞直到下载完成后才会返回数据,请注意下载大文件时的超时
+### 获取群消息历史记录
+
+终结点:`/get_group_msg_history`
+
+**参数**
+
+| 字段 | 类型 | 说明 |
+| ---------- | ------ | ------------------------- |
+| `message_seq` | int64 | 起始消息序号, 可通过 `get_msg` 获得 |
+| `group_id` | int64 | 群号 |
+
+**响应数据**
+
+| 字段 | 类型 | 说明 |
+| ---------- | ---------- | ------------ |
+| `messages` | []Message | 从起始序号开始的前19条消息 |
+
+> 不提供起始序号将默认获取最新的消息
+
### 获取用户VIP信息
终结点:`/_get_vip_info`
From 61625f2e32ba8f79586859d4080c6fbe65786c57 Mon Sep 17 00:00:00 2001
From: Mrs4s <1844812067@qq.com>
Date: Sat, 23 Jan 2021 00:19:48 +0800
Subject: [PATCH 334/367] feature client status updated event.
---
coolq/bot.go | 1 +
coolq/event.go | 21 +++++++++++++++++++++
2 files changed, 22 insertions(+)
diff --git a/coolq/bot.go b/coolq/bot.go
index 7377be9..162a893 100644
--- a/coolq/bot.go
+++ b/coolq/bot.go
@@ -77,6 +77,7 @@ func NewQQBot(cli *client.QQClient, conf *global.JSONConfig) *CQBot {
bot.Client.OnNewFriendAdded(bot.friendAddedEvent)
bot.Client.OnGroupInvited(bot.groupInvitedEvent)
bot.Client.OnUserWantJoinGroup(bot.groupJoinReqEvent)
+ bot.Client.OnOtherClientStatusChanged(bot.otherClientStatusChangedEvent)
go func() {
i := conf.HeartbeatInterval
if i < 0 {
diff --git a/coolq/event.go b/coolq/event.go
index 30d718f..5555563 100644
--- a/coolq/event.go
+++ b/coolq/event.go
@@ -413,6 +413,27 @@ func (bot *CQBot) groupJoinReqEvent(c *client.QQClient, e *client.UserJoinGroupR
})
}
+func (bot *CQBot) otherClientStatusChangedEvent(c *client.QQClient, e *client.OtherClientStatusChangedEvent) {
+ if e.Online {
+ log.Infof("Bot 账号在客户端 %v (%v) 登录.", e.Client.DeviceName, e.Client.DeviceKind)
+ } else {
+ log.Infof("Bot 账号在客户端 %v (%v) 登出.", e.Client.DeviceName, e.Client.DeviceKind)
+ }
+ bot.dispatchEventMessage(MSG{
+ "post_type": "notice",
+ "notice_type": "client_status",
+ "client": MSG{
+ "online": e.Online,
+ "app_id": e.Client.AppId,
+ "device_name": e.Client.DeviceName,
+ "device_kind": e.Client.DeviceKind,
+ },
+ "self_id": c.Uin,
+ "time": time.Now().Unix(),
+ })
+
+}
+
func (bot *CQBot) groupIncrease(groupCode, operatorUin, userUin int64) MSG {
return MSG{
"post_type": "notice",
From 7c794d113fe291008dba250e17c47526e4e4f703 Mon Sep 17 00:00:00 2001
From: Mrs4s <1844812067@qq.com>
Date: Sun, 24 Jan 2021 02:33:39 +0800
Subject: [PATCH 335/367] update MiraiGo. fix #586
---
go.mod | 2 +-
go.sum | 6 ++----
2 files changed, 3 insertions(+), 5 deletions(-)
diff --git a/go.mod b/go.mod
index 9b6d825..bf682d3 100644
--- a/go.mod
+++ b/go.mod
@@ -3,7 +3,7 @@ module github.com/Mrs4s/go-cqhttp
go 1.15
require (
- github.com/Mrs4s/MiraiGo v0.0.0-20210120152724-83f2eb02e6be
+ github.com/Mrs4s/MiraiGo v0.0.0-20210123183059-e4bd8979bc0c
github.com/dustin/go-humanize v1.0.0
github.com/gin-contrib/pprof v1.3.0
github.com/gin-gonic/gin v1.6.3
diff --git a/go.sum b/go.sum
index 23c9d6c..346f6b8 100644
--- a/go.sum
+++ b/go.sum
@@ -1,9 +1,7 @@
cloud.google.com/go v0.26.0/go.mod h1:aQUYkXzVsufM+DwF1aE+0xfcU+56JwCaLick0ClmMTw=
github.com/BurntSushi/toml v0.3.1/go.mod h1:xHWCNGjB5oqiDr8zfno3MHue2Ht5sIBksp03qcyfWMU=
-github.com/Mrs4s/MiraiGo v0.0.0-20210118164518-b007a4d0d68c h1:HNyjAEK3nj+h8EMqoFEARnE+G/rlJDlh1BFEIShA6lk=
-github.com/Mrs4s/MiraiGo v0.0.0-20210118164518-b007a4d0d68c/go.mod h1:9V7DdSwpEfCKQNvLZhRnFJFkelTU0tPLfwR5l6UFF1Y=
-github.com/Mrs4s/MiraiGo v0.0.0-20210120152724-83f2eb02e6be h1:S52Ht2a/fHLiZS83dC0ciygzm0TWzfzfOru6e1qpYGU=
-github.com/Mrs4s/MiraiGo v0.0.0-20210120152724-83f2eb02e6be/go.mod h1:9V7DdSwpEfCKQNvLZhRnFJFkelTU0tPLfwR5l6UFF1Y=
+github.com/Mrs4s/MiraiGo v0.0.0-20210123183059-e4bd8979bc0c h1:A7F1fymsG7UEbmmXGElpA/Wmq75gInenB0MbFFJ1CAw=
+github.com/Mrs4s/MiraiGo v0.0.0-20210123183059-e4bd8979bc0c/go.mod h1:9V7DdSwpEfCKQNvLZhRnFJFkelTU0tPLfwR5l6UFF1Y=
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=
From 3c309a8e067c832d52fe6d0dd1fef3895ffbb6cc Mon Sep 17 00:00:00 2001
From: Mrs4s <1844812067@qq.com>
Date: Sun, 24 Jan 2021 14:38:21 +0800
Subject: [PATCH 336/367] update MiraiGo. fix #577
---
go.mod | 2 +-
go.sum | 4 ++--
2 files changed, 3 insertions(+), 3 deletions(-)
diff --git a/go.mod b/go.mod
index bf682d3..760ad91 100644
--- a/go.mod
+++ b/go.mod
@@ -3,7 +3,7 @@ module github.com/Mrs4s/go-cqhttp
go 1.15
require (
- github.com/Mrs4s/MiraiGo v0.0.0-20210123183059-e4bd8979bc0c
+ github.com/Mrs4s/MiraiGo v0.0.0-20210124063508-a401ed3ef104
github.com/dustin/go-humanize v1.0.0
github.com/gin-contrib/pprof v1.3.0
github.com/gin-gonic/gin v1.6.3
diff --git a/go.sum b/go.sum
index 346f6b8..6f50907 100644
--- a/go.sum
+++ b/go.sum
@@ -1,7 +1,7 @@
cloud.google.com/go v0.26.0/go.mod h1:aQUYkXzVsufM+DwF1aE+0xfcU+56JwCaLick0ClmMTw=
github.com/BurntSushi/toml v0.3.1/go.mod h1:xHWCNGjB5oqiDr8zfno3MHue2Ht5sIBksp03qcyfWMU=
-github.com/Mrs4s/MiraiGo v0.0.0-20210123183059-e4bd8979bc0c h1:A7F1fymsG7UEbmmXGElpA/Wmq75gInenB0MbFFJ1CAw=
-github.com/Mrs4s/MiraiGo v0.0.0-20210123183059-e4bd8979bc0c/go.mod h1:9V7DdSwpEfCKQNvLZhRnFJFkelTU0tPLfwR5l6UFF1Y=
+github.com/Mrs4s/MiraiGo v0.0.0-20210124063508-a401ed3ef104 h1:dIKRhxzCrt/jdWRFdJupIU3BM94IYoicgqRzjN+2Bw4=
+github.com/Mrs4s/MiraiGo v0.0.0-20210124063508-a401ed3ef104/go.mod h1:9V7DdSwpEfCKQNvLZhRnFJFkelTU0tPLfwR5l6UFF1Y=
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=
From 8532c4ecbecebc16b7b7aded389bc8e7265f7c62 Mon Sep 17 00:00:00 2001
From: Mrs4s <1844812067@qq.com>
Date: Sun, 24 Jan 2021 15:04:09 +0800
Subject: [PATCH 337/367] update MiraiGo.
---
coolq/api.go | 20 ++++++++++++++------
go.mod | 2 +-
go.sum | 4 ++--
3 files changed, 17 insertions(+), 9 deletions(-)
diff --git a/coolq/api.go b/coolq/api.go
index 5fdbd74..b59e538 100644
--- a/coolq/api.go
+++ b/coolq/api.go
@@ -4,6 +4,7 @@ import (
"crypto/md5"
"encoding/hex"
"io/ioutil"
+ "math"
"os"
"path"
"path/filepath"
@@ -851,7 +852,14 @@ func (bot *CQBot) CQGetGroupMessageHistory(groupId int64, seq int64) MSG {
if g := bot.Client.FindGroup(groupId); g == nil {
return Failed(100, "GROUP_NOT_FOUND", "群聊不存在")
}
- msg, err := bot.Client.GetGroupMessages(groupId, seq-19, seq)
+ if seq == 0 {
+ g, err := bot.Client.GetGroupInfo(groupId)
+ if err != nil {
+ return Failed(100, "GROUP_INFO_API_ERROR", err.Error())
+ }
+ seq = g.LastMsgSeq
+ }
+ msg, err := bot.Client.GetGroupMessages(groupId, int64(math.Max(float64(seq-19), 1)), seq)
if err != nil {
log.Warnf("获取群历史消息失败: %v", err)
return Failed(100, "MESSAGES_API_ERROR", err.Error())
@@ -1011,11 +1019,11 @@ func Failed(code int, msg ...string) MSG {
func convertGroupMemberInfo(groupId int64, m *client.GroupMemberInfo) MSG {
return MSG{
- "group_id": groupId,
- "user_id": m.Uin,
- "nickname": m.Nickname,
- "card": m.CardName,
- "sex": func() string {
+ "group_id": groupId,
+ "user_id": m.Uin,
+ "nickname": m.Nickname,
+ "card": m.CardName,
+ "sex": func() string {
if m.Gender == 1 {
return "female"
} else if m.Gender == 0 {
diff --git a/go.mod b/go.mod
index 760ad91..36da045 100644
--- a/go.mod
+++ b/go.mod
@@ -3,7 +3,7 @@ module github.com/Mrs4s/go-cqhttp
go 1.15
require (
- github.com/Mrs4s/MiraiGo v0.0.0-20210124063508-a401ed3ef104
+ github.com/Mrs4s/MiraiGo v0.0.0-20210124065645-9549a32d954a
github.com/dustin/go-humanize v1.0.0
github.com/gin-contrib/pprof v1.3.0
github.com/gin-gonic/gin v1.6.3
diff --git a/go.sum b/go.sum
index 6f50907..29bc881 100644
--- a/go.sum
+++ b/go.sum
@@ -1,7 +1,7 @@
cloud.google.com/go v0.26.0/go.mod h1:aQUYkXzVsufM+DwF1aE+0xfcU+56JwCaLick0ClmMTw=
github.com/BurntSushi/toml v0.3.1/go.mod h1:xHWCNGjB5oqiDr8zfno3MHue2Ht5sIBksp03qcyfWMU=
-github.com/Mrs4s/MiraiGo v0.0.0-20210124063508-a401ed3ef104 h1:dIKRhxzCrt/jdWRFdJupIU3BM94IYoicgqRzjN+2Bw4=
-github.com/Mrs4s/MiraiGo v0.0.0-20210124063508-a401ed3ef104/go.mod h1:9V7DdSwpEfCKQNvLZhRnFJFkelTU0tPLfwR5l6UFF1Y=
+github.com/Mrs4s/MiraiGo v0.0.0-20210124065645-9549a32d954a h1:ov5QCDpZpsr+geKLVON7E63UqrpNF0oTiKuZwbKwEmo=
+github.com/Mrs4s/MiraiGo v0.0.0-20210124065645-9549a32d954a/go.mod h1:9V7DdSwpEfCKQNvLZhRnFJFkelTU0tPLfwR5l6UFF1Y=
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=
From a2a0b4c86f63268d0cebdb8bdf164e5351607a16 Mon Sep 17 00:00:00 2001
From: Mrs4s <1844812067@qq.com>
Date: Sun, 24 Jan 2021 15:15:09 +0800
Subject: [PATCH 338/367] update doc.
---
coolq/event.go | 2 +-
docs/cqhttp.md | 35 +++++++++++++++++++++++++++++++++++
2 files changed, 36 insertions(+), 1 deletion(-)
diff --git a/coolq/event.go b/coolq/event.go
index 5555563..a2dfcd1 100644
--- a/coolq/event.go
+++ b/coolq/event.go
@@ -422,8 +422,8 @@ func (bot *CQBot) otherClientStatusChangedEvent(c *client.QQClient, e *client.Ot
bot.dispatchEventMessage(MSG{
"post_type": "notice",
"notice_type": "client_status",
+ "online": e.Online,
"client": MSG{
- "online": e.Online,
"app_id": e.Client.AppId,
"device_name": e.Client.DeviceName,
"device_kind": e.Client.DeviceKind,
diff --git a/docs/cqhttp.md b/docs/cqhttp.md
index f5686b6..f660e64 100644
--- a/docs/cqhttp.md
+++ b/docs/cqhttp.md
@@ -850,6 +850,30 @@ JSON数组:
> 不提供起始序号将默认获取最新的消息
+### 获取当前账号在线客户端列表
+
+终结点:`/get_online_clients`
+
+**参数**
+
+| 字段 | 类型 | 说明 |
+| ---------- | ------ | ------------------------- |
+| `no_cache` | bool | 是否无视缓存 |
+
+**响应数据**
+
+| 字段 | 类型 | 说明 |
+| ---------- | ---------- | ------------ |
+| `clients` | []Device | 在线客户端列表 |
+
+**Device**
+
+| 字段 | 类型 | 说明 |
+| ---------- | ---------- | ------------ |
+| `app_id` | int64 | 客户端ID |
+| `device_name` | string | 设备名称 |
+| `device_kind` | string | 设备类型 |
+
### 获取用户VIP信息
终结点:`/_get_vip_info`
@@ -1013,3 +1037,14 @@ JSON数组:
| `name` | string | | 文件名 |
| `size` | int64 | | 文件大小 |
| `url` | string | | 下载链接 |
+
+### 其他客户端在线状态变更
+
+**上报数据**
+
+| 字段 | 类型 | 可能的值 | 说明 |
+| ------------- | ------ | -------------- | -------- |
+| `post_type` | string | `notice` | 上报类型 |
+| `notice_type` | string | `client_status` | 消息类型 |
+| `client` | Device | | 客户端信息 |
+| `online` | bool | | 当前是否在线 |
\ No newline at end of file
From 13df58331cdafd77fe5975875319e65689039f5b Mon Sep 17 00:00:00 2001
From: xuye
Date: Sun, 24 Jan 2021 17:40:38 +0800
Subject: [PATCH 339/367] fix
---
global/log_hook.go | 10 +++++-----
go.mod | 2 +-
go.sum | 20 ++++++++++++++++++--
main.go | 2 +-
4 files changed, 25 insertions(+), 9 deletions(-)
diff --git a/global/log_hook.go b/global/log_hook.go
index add40d5..8c50050 100644
--- a/global/log_hook.go
+++ b/global/log_hook.go
@@ -84,9 +84,9 @@ func (hook *LocalHook) SetFormatter(formatter logrus.Formatter) {
// 用默认的
formatter = &logrus.TextFormatter{DisableColors: true}
} else {
- switch formatter.(type) {
+ switch f := formatter.(type) {
case *logrus.TextFormatter:
- textFormatter := formatter.(*logrus.TextFormatter)
+ textFormatter := f
textFormatter.DisableColors = true
default:
// todo
@@ -115,11 +115,11 @@ func NewLocalHook(args interface{}, formatter logrus.Formatter, levels ...logrus
hook.SetFormatter(formatter)
hook.levels = append(hook.levels, levels...)
- switch args.(type) {
+ switch arg := args.(type) {
case string:
- hook.SetPath(args.(string))
+ hook.SetPath(arg)
case io.Writer:
- hook.SetWriter(args.(io.Writer))
+ hook.SetWriter(arg)
default:
panic(fmt.Sprintf("unsupported type: %v", reflect.TypeOf(args)))
}
diff --git a/go.mod b/go.mod
index 36da045..9431599 100644
--- a/go.mod
+++ b/go.mod
@@ -10,12 +10,12 @@ require (
github.com/gorilla/websocket v1.4.2
github.com/guonaihong/gout v0.1.4
github.com/hjson/hjson-go v3.1.0+incompatible
+ github.com/jonboulle/clockwork v0.2.2 // indirect
github.com/json-iterator/go v1.1.10
github.com/kardianos/osext v0.0.0-20190222173326-2bc1f35cddc0
github.com/lestrrat-go/file-rotatelogs v2.4.0+incompatible
github.com/lestrrat-go/strftime v1.0.4 // indirect
github.com/pkg/errors v0.9.1
- github.com/rifflock/lfshook v0.0.0-20180920164130-b9218ef580f5
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
diff --git a/go.sum b/go.sum
index 29bc881..371e679 100644
--- a/go.sum
+++ b/go.sum
@@ -5,11 +5,13 @@ github.com/Mrs4s/MiraiGo v0.0.0-20210124065645-9549a32d954a/go.mod h1:9V7DdSwpEf
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=
+github.com/davecgh/go-spew v1.1.1 h1:vj9j/u1bqnvCEfJOwUhtlOARqs3+rkHYY13jYWTU97c=
github.com/davecgh/go-spew v1.1.1/go.mod h1:J7Y8YcW2NihsgmVo/mv3lAwl/skON4iLHjSsI+c5H38=
github.com/dustin/go-humanize v1.0.0 h1:VSnTsYCnlFHaM2/igO1h6X3HA71jcobQuxemgkq4zYo=
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/fsnotify/fsnotify v1.4.7 h1:IXs+QLmnXW2CcXuY+8Mzv/fWEsPGWxqefPtCP5CnV9I=
github.com/fsnotify/fsnotify v1.4.7/go.mod h1:jwhsz4b93w/PPRr/qN1Yymfu8t87LnFCMoQvtojpjFo=
github.com/gin-contrib/pprof v1.3.0 h1:G9eK6HnbkSqDZBYbzG4wrjCsA4e+cvYAHUZw6W+W9K0=
github.com/gin-contrib/pprof v1.3.0/go.mod h1:waMjT1H9b179t3CxuG1cV3DHpga6ybizwfBaM5OXaB0=
@@ -19,6 +21,7 @@ github.com/gin-gonic/gin v1.6.0/go.mod h1:75u5sXoLsGZoRN5Sgbi1eraJ4GU3++wFwWzhwv
github.com/gin-gonic/gin v1.6.2/go.mod h1:75u5sXoLsGZoRN5Sgbi1eraJ4GU3++wFwWzhwvtwp4M=
github.com/gin-gonic/gin v1.6.3 h1:ahKqKTFpO5KTPHxWZjEdPScmYaGtLo8Y4DMHoEsnp14=
github.com/gin-gonic/gin v1.6.3/go.mod h1:75u5sXoLsGZoRN5Sgbi1eraJ4GU3++wFwWzhwvtwp4M=
+github.com/go-playground/assert/v2 v2.0.1 h1:MsBgLAaY856+nPRTKrp3/OZK38U/wa0CcBYNjji3q3A=
github.com/go-playground/assert/v2 v2.0.1/go.mod h1:VDjEfimB/XKnb+ZQfWdccd7VUvScMdVu0Titje2rxJ4=
github.com/go-playground/locales v0.13.0 h1:HyWk6mgj5qFqCT5fjGBuRArbVDfE4hi8+e8ceBS/t7Q=
github.com/go-playground/locales v0.13.0/go.mod h1:taPMhCMXrRLJO55olJkUXHZBHCxTMfnGwq/HNwmWNS8=
@@ -45,8 +48,10 @@ github.com/google/go-cmp v0.2.0/go.mod h1:oXzfMopK8JAjlY9xF4vHSVASa0yLyX7SntLO5a
github.com/google/go-cmp v0.3.0/go.mod h1:8QqcDgzrUqlUb/G2PQTWiueGozuR1884gddMywk6iLU=
github.com/google/go-cmp v0.3.1/go.mod h1:8QqcDgzrUqlUb/G2PQTWiueGozuR1884gddMywk6iLU=
github.com/google/go-cmp v0.4.0/go.mod h1:v8dTdLbMG2kIc/vJvl+f65V22dbkXbowE6jgT/gNBxE=
+github.com/google/go-cmp v0.5.0 h1:/QaMHBdZ26BB3SSst0Iwl10Epc+xhTquomWX0oZEB6w=
github.com/google/go-cmp v0.5.0/go.mod h1:v8dTdLbMG2kIc/vJvl+f65V22dbkXbowE6jgT/gNBxE=
github.com/google/gofuzz v1.0.0/go.mod h1:dBl0BpW6vV/+mYPU4Po3pmUjxk6FQPldtuIdl/M65Eg=
+github.com/google/uuid v1.1.1 h1:Gkbcsh/GbpXz7lPftLA3P6TYMwjCLYm83jiFQZF/3gY=
github.com/google/uuid v1.1.1/go.mod h1:TIyPZe4MgqvfeYDBFedMoGGpEw/LqOeaOT+nhxU+yHo=
github.com/gorilla/websocket v1.4.2 h1:+/TMaTYc4QFitKJxsQ7Yye35DkWvkdLcvGKqM+x0Ufc=
github.com/gorilla/websocket v1.4.2/go.mod h1:YR8l580nyteQvAITg2hZ9XVh4b55+EU/adAjf1fMHhE=
@@ -54,7 +59,10 @@ github.com/guonaihong/gout v0.1.4 h1:uBBoyztMX9okC27OQxqhn6bZ0ROkGyvnEIHwtp3TM4g
github.com/guonaihong/gout v0.1.4/go.mod h1:0rFYAYyzbcxEg11eY2qUbffJs7hHRPeugAnlVYSp8Ic=
github.com/hjson/hjson-go v3.1.0+incompatible h1:DY/9yE8ey8Zv22bY+mHV1uk2yRy0h8tKhZ77hEdi0Aw=
github.com/hjson/hjson-go v3.1.0+incompatible/go.mod h1:qsetwF8NlsTsOTwZTApNlTCerV+b2GjYRRcIk4JMFio=
+github.com/hpcloud/tail v1.0.0 h1:nfCOvKYfkgYP8hkirhJocXT2+zOD8yUNjXaWfTlyFKI=
github.com/hpcloud/tail v1.0.0/go.mod h1:ab1qPbhIpdTxEkNHXyeSf5vhxWSCs/tWer42PpOxQnU=
+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.9/go.mod h1:KdQUCv79m/52Kvf8AW2vK1V8akMuk1QjK/uOdHXbAo4=
github.com/json-iterator/go v1.1.10 h1:Kz6Cvnvv2wGdaG/V8yMvfkmNiXq9Ya2KUv4rouJJr68=
github.com/json-iterator/go v1.1.10/go.mod h1:KdQUCv79m/52Kvf8AW2vK1V8akMuk1QjK/uOdHXbAo4=
@@ -63,6 +71,7 @@ github.com/kardianos/osext v0.0.0-20190222173326-2bc1f35cddc0/go.mod h1:1NbS8ALr
github.com/konsorten/go-windows-terminal-sequences v1.0.1/go.mod h1:T0+1ngSBFLxvqU3pZ+m/2kptfBszLMUkC4ZK/EgS/cQ=
github.com/leodido/go-urn v1.2.0 h1:hpXL4XnriNwQ/ABnpepYM/1vCLWNDfUNts8dX3xTG6Y=
github.com/leodido/go-urn v1.2.0/go.mod h1:+8+nEpDfqqsY+g338gtMEUOtuK+4dEMhiQEgxpxOKII=
+github.com/lestrrat-go/envload v0.0.0-20180220234015-a3eb8ddeffcc h1:RKf14vYWi2ttpEmkA4aQ3j4u9dStX2t4M8UM6qqNsG8=
github.com/lestrrat-go/envload v0.0.0-20180220234015-a3eb8ddeffcc/go.mod h1:kopuH9ugFRkIXf3YoqHKyrJ9YfUFsckUU9S7B+XP+is=
github.com/lestrrat-go/file-rotatelogs v2.4.0+incompatible h1:Y6sqxHMyB1D2YSzWkLibYKgg+SwmyFU9dF2hn6MdTj4=
github.com/lestrrat-go/file-rotatelogs v2.4.0+incompatible/go.mod h1:ZQnN8lSECaebrkQytbHj4xNgtg8CR7RYXnPok8e0EHA=
@@ -77,15 +86,16 @@ github.com/modern-go/reflect2 v0.0.0-20180701023420-4b7aa43c6742/go.mod h1:bx2lN
github.com/nfnt/resize v0.0.0-20180221191011-83c6a9932646 h1:zYyBkD/k9seD2A7fsi6Oo2LfFZAehjjQMERAvZLEDnQ=
github.com/nfnt/resize v0.0.0-20180221191011-83c6a9932646/go.mod h1:jpp1/29i3P1S/RLdc7JQKbRpFeM1dOBd8T9ki5s+AY8=
github.com/onsi/ginkgo v1.6.0/go.mod h1:lLunBs/Ym6LB5Z9jYTR76FiuTmxDTDusOGeTQH+WWjE=
+github.com/onsi/ginkgo v1.7.0 h1:WSHQ+IS43OoUrWtD1/bbclrwK8TTH5hzp+umCiuxHgs=
github.com/onsi/ginkgo v1.7.0/go.mod h1:lLunBs/Ym6LB5Z9jYTR76FiuTmxDTDusOGeTQH+WWjE=
+github.com/onsi/gomega v1.4.3 h1:RE1xgDvH7imwFD45h+u2SgIfERHlS2yNG4DObb5BSKU=
github.com/onsi/gomega v1.4.3/go.mod h1:ex+gbHU/CVuBBDIJjb2X0qEXbFg53c61hWP/1CpauHY=
github.com/pkg/errors v0.8.1/go.mod h1:bwawxfHBFNV+L2hUp1rHADufV3IMtnDRdf1r5NINEl0=
github.com/pkg/errors v0.9.1 h1:FEBLx1zS214owpjy7qsBeixbURkuhQAwrK5UwLGTwt4=
github.com/pkg/errors v0.9.1/go.mod h1:bwawxfHBFNV+L2hUp1rHADufV3IMtnDRdf1r5NINEl0=
+github.com/pmezard/go-difflib v1.0.0 h1:4DBwDE0NGyQoBHbLQYPwSUPoCMWR5BEzIk/f1lZbAQM=
github.com/pmezard/go-difflib v1.0.0/go.mod h1:iKH77koFhYxTK1pcRnkKkqfTogsbg7gZNVY4sRDYZ/4=
github.com/prometheus/client_model v0.0.0-20190812154241-14fe0d1b01d4/go.mod h1:xMI15A0UPsDsEKsMN9yxemIoYk6Tm2C1GtYGdfGttqA=
-github.com/rifflock/lfshook v0.0.0-20180920164130-b9218ef580f5 h1:mZHayPoR0lNmnHyvtYjDeq0zlVHn9K/ZXoy17ylucdo=
-github.com/rifflock/lfshook v0.0.0-20180920164130-b9218ef580f5/go.mod h1:GEXHk5HgEKCvEIIrSpFI3ozzG5xOKA2DVlEX/gGnewM=
github.com/sirupsen/logrus v1.4.2/go.mod h1:tLMulIdttU9McNUspp0xgXVQah82FyeX6MwdIuYE2rE=
github.com/sirupsen/logrus v1.7.0 h1:ShrD1U9pZB12TX0cVy0DtePoCH97K8EtX+mg7ZARUtM=
github.com/sirupsen/logrus v1.7.0/go.mod h1:yWOB1SBYBC5VeMP7gHvWumXLIWorT60ONWic61uBYv0=
@@ -93,6 +103,7 @@ github.com/stretchr/objx v0.1.0/go.mod h1:HFkY916IF+rwdDfMAkV7OtwuqBVzrE8GR6GFx+
github.com/stretchr/objx v0.1.1/go.mod h1:HFkY916IF+rwdDfMAkV7OtwuqBVzrE8GR6GFx+wExME=
github.com/stretchr/testify v1.2.2/go.mod h1:a8OnRcib4nhh0OaRAV+Yts87kKdq0PP7pXfy6kDkUVs=
github.com/stretchr/testify v1.3.0/go.mod h1:M5WIy9Dh21IEIfnGCwXGc5bZfKNJtfHm1UVUgZn+9EI=
+github.com/stretchr/testify v1.4.0 h1:2E4SXV/wtOkTonXsotYi4li6zVWxYlZuYNCXe9XRJyk=
github.com/stretchr/testify v1.4.0/go.mod h1:j7eGeouHqKxXV5pUuKE4zz7dFj8WfuZ+81PSLYec5m4=
github.com/syndtr/goleveldb v1.0.0 h1:fBdIW9lB4Iz0n9khmH8w27SJ3QEJ7+IgjPEwGSZiFdE=
github.com/syndtr/goleveldb v1.0.0/go.mod h1:ZVVdQEZoIme9iO1Ch2Jdy24qqXrMMOU6lpPAyBWyWuQ=
@@ -137,6 +148,7 @@ golang.org/x/sys v0.0.0-20201119102817-f84b799fce68/go.mod h1:h1NjWce9XRLGQEsW7w
golang.org/x/term v0.0.0-20201210144234-2321bbc49cbf h1:MZ2shdL+ZM/XzY3ZGOnh4Nlpnxz5GSOhOmtHo3iPU6M=
golang.org/x/term v0.0.0-20201210144234-2321bbc49cbf/go.mod h1:bj7SfCRtBDWHUb9snDiAeCFNEtKQo2Wmx5Cou7ajbmo=
golang.org/x/text v0.3.0/go.mod h1:NqM8EUOU14njkJ3fqMW+pc6Ldnwhi/IjpwHt7yyuwOQ=
+golang.org/x/text v0.3.2 h1:tW2bmiBqwgJj/UpqtC8EpXEZVYOwU0yG4iWbprSVAcs=
golang.org/x/text v0.3.2/go.mod h1:bEr9sfX3Q8Zfm5fL9x+3itogRgK3+ptLWKqgva+5dAk=
golang.org/x/time v0.0.0-20201208040808-7e3f01d25324 h1:Hir2P/De0WpUhtrKGGjvSb2YxUgyZ7EFOSLIcSSpiwE=
golang.org/x/time v0.0.0-20201208040808-7e3f01d25324/go.mod h1:tRJNPiyCQ0inRvYxbN9jk5I+vvW/OXSQhTDSoE431IQ=
@@ -145,6 +157,7 @@ golang.org/x/tools v0.0.0-20190114222345-bf090417da8b/go.mod h1:n7NCudcB/nEzxVGm
golang.org/x/tools v0.0.0-20190226205152-f727befe758c/go.mod h1:9Yl7xja0Znq3iFh3HoIrodX9oNMXvdceNzlUR8zjMvY=
golang.org/x/tools v0.0.0-20190311212946-11955173bddd/go.mod h1:LCzVGOaR6xXOjkQ3onu1FJEFr0SW1gC7cKk1uF8kGRs=
golang.org/x/tools v0.0.0-20190524140312-2c0ae7006135/go.mod h1:RgjU9mgBXZiqYHBnxXauZ1Gv1EHHAz9KjViQ78xBX0Q=
+golang.org/x/xerrors v0.0.0-20191204190536-9bdfabe68543 h1:E7g+9GITq07hpfrRu66IVDexMakfv52eLZ2CXBWiKr4=
golang.org/x/xerrors v0.0.0-20191204190536-9bdfabe68543/go.mod h1:I/5z698sn9Ka8TeJc9MKroUUfqBBauWjQqLJ2OPfmY0=
google.golang.org/appengine v1.1.0/go.mod h1:EbEs0AVv82hx2wNQdGPgUI5lhzA/G0D9YwlJXL52JkM=
google.golang.org/appengine v1.4.0/go.mod h1:xpcJRLb0r/rnEns0DIKYYv+WjYCduHsrkT7/EB5XEv4=
@@ -164,8 +177,11 @@ google.golang.org/protobuf v1.23.0/go.mod h1:EGpADcykh3NcUnDUJcl1+ZksZNG86OlYog2
google.golang.org/protobuf v1.23.1-0.20200526195155-81db48ad09cc/go.mod h1:EGpADcykh3NcUnDUJcl1+ZksZNG86OlYog2l/sGQquU=
google.golang.org/protobuf v1.25.0 h1:Ejskq+SyPohKW+1uil0JJMtmHCgJPJ/qWTxr8qp+R4c=
google.golang.org/protobuf v1.25.0/go.mod h1:9JNX74DMeImyA3h4bdi1ymwjUzf21/xIlbajtzgsN7c=
+gopkg.in/check.v1 v0.0.0-20161208181325-20d25e280405 h1:yhCVgyC4o1eVCa2tZl7eS0r+SDo693bJlVdllGtEeKM=
gopkg.in/check.v1 v0.0.0-20161208181325-20d25e280405/go.mod h1:Co6ibVJAznAaIkqp8huTwlJQCZ016jof/cbN4VW5Yz0=
+gopkg.in/fsnotify.v1 v1.4.7 h1:xOHLXZwVvI9hhs+cLKq5+I5onOuwQLhQwiu63xxlHs4=
gopkg.in/fsnotify.v1 v1.4.7/go.mod h1:Tz8NjZHkW78fSQdbUxIjBTcgA1z1m8ZHf0WmKUhAMys=
+gopkg.in/tomb.v1 v1.0.0-20141024135613-dd632973f1e7 h1:uRGJdciOHaEIrze2W8Q3AKkepLTh2hOroT7a+7czfdQ=
gopkg.in/tomb.v1 v1.0.0-20141024135613-dd632973f1e7/go.mod h1:dt/ZhP58zS4L8KSrWDmTeBkI65Dw0HsyUHuEVlX15mw=
gopkg.in/yaml.v2 v2.2.1/go.mod h1:hI93XBmqTisBFMUTm0b8Fm+jr3Dg1NNxqwp+5A1VGuI=
gopkg.in/yaml.v2 v2.2.2/go.mod h1:hI93XBmqTisBFMUTm0b8Fm+jr3Dg1NNxqwp+5A1VGuI=
diff --git a/main.go b/main.go
index 9ec4b9c..a9c00bf 100644
--- a/main.go
+++ b/main.go
@@ -83,7 +83,7 @@ func init() {
panic(err)
}
- // 更加彻底的调试 将在标准输出中打印执行行数
+ // 在debug模式下,将在标准输出中打印当前执行行数
if conf.Debug {
log.SetReportCaller(true)
}
From d2529a04c9768fef9f0187a170210aa0cf68f9d5 Mon Sep 17 00:00:00 2001
From: zkonge
Date: Mon, 25 Jan 2021 05:56:27 +0800
Subject: [PATCH 340/367] Enhance password security
No plain password left in memory, except first run
Attacker can't verify password correctness offline
---
global/config.go | 2 ++
go.mod | 1 +
go.sum | 1 +
main.go | 82 +++++++++++++++++++++++++++++++++++-------------
4 files changed, 64 insertions(+), 22 deletions(-)
diff --git a/global/config.go b/global/config.go
index 0396534..3d39648 100644
--- a/global/config.go
+++ b/global/config.go
@@ -135,6 +135,8 @@ var DefaultConfigWithComments = `
}
`
+var PasswordHash [16]byte
+
//JSONConfig Config对应的结构体
type JSONConfig struct {
Uin int64 `json:"uin"`
diff --git a/go.mod b/go.mod
index 36da045..dcf8a63 100644
--- a/go.mod
+++ b/go.mod
@@ -21,6 +21,7 @@ require (
github.com/t-tomalak/logrus-easy-formatter v0.0.0-20190827215021-c074f06c5816
github.com/tidwall/gjson v1.6.7
github.com/yinghau76/go-ascii-art v0.0.0-20190517192627-e7f465a30189
+ golang.org/x/crypto v0.0.0-20190308221718-c2843e01d9a2
golang.org/x/term v0.0.0-20201210144234-2321bbc49cbf
golang.org/x/time v0.0.0-20201208040808-7e3f01d25324
)
diff --git a/go.sum b/go.sum
index 29bc881..4a055af 100644
--- a/go.sum
+++ b/go.sum
@@ -110,6 +110,7 @@ github.com/ugorji/go/codec v1.1.7 h1:2SvQaVZ1ouYrrKKwoSk2pzd4A9evlKJb9oTL+OaLUSs
github.com/ugorji/go/codec v1.1.7/go.mod h1:Ax+UKWsSmolVDwsd+7N3ZtXu+yMGCf907BLYF3GoBXY=
github.com/yinghau76/go-ascii-art v0.0.0-20190517192627-e7f465a30189 h1:4UJw9if55Fu3HOwbfcaQlJ27p3oeJU2JZqoeT3ITJQk=
github.com/yinghau76/go-ascii-art v0.0.0-20190517192627-e7f465a30189/go.mod h1:rIrm5geMiBhPQkdfUm8gDFi/WiHneOp1i9KjmJqc+9I=
+golang.org/x/crypto v0.0.0-20190308221718-c2843e01d9a2 h1:VklqNMn3ovrHsnt90PveolxSbWFaJdECFbxSq0Mqo2M=
golang.org/x/crypto v0.0.0-20190308221718-c2843e01d9a2/go.mod h1:djNgcEr1/C05ACkg1iLfiJU5Ep61QUkGW8qpdssI0+w=
golang.org/x/exp v0.0.0-20190121172915-509febef88a4/go.mod h1:CJ0aWSM057203Lf6IL+f9T1iT9GByDxfZKAQTCR3kQA=
golang.org/x/lint v0.0.0-20181026193005-c67002cb31c3/go.mod h1:UVdnD1Gm6xHRNCYTkRU2/jEulfH38KcIWyp/GAMgvoE=
diff --git a/main.go b/main.go
index 63a756c..5f519f3 100644
--- a/main.go
+++ b/main.go
@@ -2,8 +2,11 @@ package main
import (
"bufio"
+ "crypto/aes"
"crypto/md5"
+ "crypto/sha1"
"encoding/base64"
+ "encoding/hex"
"fmt"
"io"
"io/ioutil"
@@ -23,6 +26,7 @@ import (
"github.com/guonaihong/gout"
"github.com/tidwall/gjson"
"golang.org/x/term"
+ "golang.org/x/crypto/pbkdf2"
"github.com/Mrs4s/MiraiGo/binary"
"github.com/Mrs4s/MiraiGo/client"
@@ -233,15 +237,11 @@ func main() {
}
if conf.EncryptPassword && conf.PasswordEncrypted == "" {
log.Infof("密码加密已启用, 请输入Key对密码进行加密: (Enter 提交)")
- byteKey, _ := term.ReadPassword(int(os.Stdin.Fd()))
- key := md5.Sum(byteKey)
- if encrypted := EncryptPwd(conf.Password, key[:]); encrypted != "" {
- conf.Password = ""
- conf.PasswordEncrypted = encrypted
- _ = conf.Save("config.hjson")
- } else {
- log.Warnf("加密时出现问题.")
- }
+ byteKey, _ = term.ReadPassword(int(os.Stdin.Fd()))
+ global.PasswordHash = md5.Sum([]byte(conf.Password))
+ conf.Password = ""
+ conf.PasswordEncrypted = "AES:" + PasswordHashEncrypt(global.PasswordHash[:], byteKey)
+ _ = conf.Save("config.hjson")
}
if conf.PasswordEncrypted != "" {
if len(byteKey) == 0 {
@@ -262,8 +262,23 @@ func main() {
} else {
log.Infof("密码加密已启用, 使用运行时传递的参数进行解密,按 Ctrl+C 取消.")
}
- key := md5.Sum(byteKey)
- conf.Password = DecryptPwd(conf.PasswordEncrypted, key[:])
+
+ //升级客户端密码加密方案,MD5+TEA 加密密码 -> PBKDF2+AES 加密 MD5
+ //升级后的 PasswordEncrypted 字符串以"AES:"开始,其后为 Hex 编码的16字节加密 MD5
+ if !strings.HasPrefix(conf.PasswordEncrypted, "AES:") {
+ password := OldPasswordDecrypt(conf.PasswordEncrypted, byteKey)
+ passwordHash := md5.Sum([]byte(password))
+ newPasswordHash := PasswordHashEncrypt(passwordHash[:], byteKey)
+ conf.PasswordEncrypted = "AES:" + newPasswordHash
+ _ = conf.Save("config.hjson")
+ log.Debug("密码加密方案升级完成")
+ }
+
+ ph, err := PasswordHashDecrypt(conf.PasswordEncrypted[4:], byteKey)
+ if err != nil {
+ log.Fatalf("加密存储的密码损坏,请尝试重新配置密码")
+ }
+ copy(global.PasswordHash[:], ph)
}
if !isFastStart {
log.Info("Bot将在5秒后登录并开始信息处理, 按 Ctrl+C 取消.")
@@ -283,7 +298,7 @@ func main() {
}
return "未知"
}())
- cli := client.NewClient(conf.Uin, conf.Password)
+ cli := client.NewClientMd5(conf.Uin, global.PasswordHash)
cli.OnLog(func(c *client.QQClient, e *client.LogEvent) {
switch e.Type {
case "INFO":
@@ -340,27 +355,50 @@ func main() {
}
}
-//EncryptPwd 通过给定key加密给定pwd
-func EncryptPwd(pwd string, key []byte) string {
- tea := binary.NewTeaCipher(key)
- if tea == nil {
- return ""
+// PasswordHashEncrypt 使用key加密给定passwordHash
+func PasswordHashEncrypt(passwordHash []byte, key []byte) string {
+ if len(passwordHash) != 16 {
+ panic("密码加密参数错误")
}
- return base64.StdEncoding.EncodeToString(tea.Encrypt([]byte(pwd)))
+
+ key = pbkdf2.Key(key, key, 114514, 32, sha1.New)
+
+ cipher, _ := aes.NewCipher(key)
+ result := make([]byte, 16)
+ cipher.Encrypt(result, passwordHash)
+
+ return hex.EncodeToString(result)
}
-//DecryptPwd 通过给定key解密给定ePwd
-func DecryptPwd(ePwd string, key []byte) string {
+// PasswordHashDecrypt 使用key解密给定passwordHash
+func PasswordHashDecrypt(encryptedPasswordHash string, key []byte) ([]byte, error) {
+ ciphertext, err := hex.DecodeString(encryptedPasswordHash)
+ if err != nil {
+ return nil, err
+ }
+
+ key = pbkdf2.Key(key, key, 114514, 32, sha1.New)
+
+ cipher, _ := aes.NewCipher(key)
+ result := make([]byte, 16)
+ cipher.Decrypt(result, ciphertext)
+
+ return result, nil
+}
+
+// OldPasswordDecrypt 使用key解密老password,仅供兼容使用
+func OldPasswordDecrypt(encryptedPassword string, key []byte) string {
defer func() {
if pan := recover(); pan != nil {
log.Fatalf("密码解密失败: %v", pan)
}
}()
- encrypted, err := base64.StdEncoding.DecodeString(ePwd)
+ encKey := md5.Sum(key)
+ encrypted, err := base64.StdEncoding.DecodeString(encryptedPassword)
if err != nil {
panic(err)
}
- tea := binary.NewTeaCipher(key)
+ tea := binary.NewTeaCipher(encKey[:])
if tea == nil {
panic("密钥错误")
}
From 817bb0e493ae8514f2a377810c8146e250edbe98 Mon Sep 17 00:00:00 2001
From: wdvxdr
Date: Mon, 25 Jan 2021 15:06:30 +0800
Subject: [PATCH 341/367] simplify music share support Kugou,Kuwo custom
---
coolq/bot.go | 106 ++----------------------------------------------
coolq/cqcode.go | 74 +++++++++++----------------------
2 files changed, 27 insertions(+), 153 deletions(-)
diff --git a/coolq/bot.go b/coolq/bot.go
index 162a893..81eee07 100644
--- a/coolq/bot.go
+++ b/coolq/bot.go
@@ -201,61 +201,8 @@ func (bot *CQBot) SendGroupMessage(groupId int64, m *message.SendingMessage) int
bot.Client.SendGroupGift(uint64(groupId), uint64(i.Target), i.GiftId)
return 0
}
- if i, ok := elem.(*QQMusicElement); ok {
- var msgStyle uint32 = 4
- if i.MusicUrl == "" {
- msgStyle = 0 // fix vip song
- }
- ret, err := bot.Client.SendGroupRichMessage(groupId, 100497308, 1, msgStyle, client.RichClientInfo{
- Platform: 1,
- SdkVersion: "0.0.0",
- PackageName: "com.tencent.qqmusic",
- Signature: "cbd27cd7c861227d013a25b2d10f0799",
- }, &message.RichMessage{
- Title: i.Title,
- Summary: i.Summary,
- Url: i.Url,
- PictureUrl: i.PictureUrl,
- MusicUrl: i.MusicUrl,
- })
- if err != nil {
- log.Warnf("警告: 群 %v 富文本消息发送失败: %v", groupId, err)
- return -1
- }
- return bot.InsertGroupMessage(ret)
- }
- if i, ok := elem.(*CloudMusicElement); ok {
- ret, err := bot.Client.SendGroupRichMessage(groupId, 100495085, 1, 4, client.RichClientInfo{
- Platform: 1,
- SdkVersion: "0.0.0",
- PackageName: "com.netease.cloudmusic",
- Signature: "da6b069da1e2982db3e386233f68d76d",
- }, &message.RichMessage{
- Title: i.Title,
- Summary: i.Summary,
- Url: i.Url,
- PictureUrl: i.PictureUrl,
- MusicUrl: i.MusicUrl,
- })
- if err != nil {
- log.Warnf("警告: 群 %v 富文本消息发送失败: %v", groupId, err)
- return -1
- }
- return bot.InsertGroupMessage(ret)
- }
- if i, ok := elem.(*MiguMusicElement); ok {
- ret, err := bot.Client.SendGroupRichMessage(groupId, 1101053067, 1, 4, client.RichClientInfo{
- Platform: 1,
- SdkVersion: "0.0.0",
- PackageName: "cmccwm.mobilemusic",
- Signature: "6cdc72a439cef99a3418d2a78aa28c73",
- }, &message.RichMessage{
- Title: i.Title,
- Summary: i.Summary,
- Url: i.Url,
- PictureUrl: i.PictureUrl,
- MusicUrl: i.MusicUrl,
- })
+ if i, ok := elem.(*message.MusicShareElement); ok {
+ ret, err := bot.Client.SendGroupMusicShare(groupId, i)
if err != nil {
log.Warnf("警告: 群 %v 富文本消息发送失败: %v", groupId, err)
return -1
@@ -312,53 +259,8 @@ func (bot *CQBot) SendPrivateMessage(target int64, m *message.SendingMessage) in
newElem = append(newElem, gv)
continue
}
- if i, ok := elem.(*QQMusicElement); ok {
- var msgStyle uint32 = 4
- if i.MusicUrl == "" {
- msgStyle = 0 // fix vip song
- }
- bot.Client.SendFriendRichMessage(target, 100497308, 1, msgStyle, client.RichClientInfo{
- Platform: 1,
- SdkVersion: "0.0.0",
- PackageName: "com.tencent.qqmusic",
- Signature: "cbd27cd7c861227d013a25b2d10f0799",
- }, &message.RichMessage{
- Title: i.Title,
- Summary: i.Summary,
- Url: i.Url,
- PictureUrl: i.PictureUrl,
- MusicUrl: i.MusicUrl,
- })
- return 0
- }
- if i, ok := elem.(*CloudMusicElement); ok {
- bot.Client.SendFriendRichMessage(target, 100495085, 1, 4, client.RichClientInfo{
- Platform: 1,
- SdkVersion: "0.0.0",
- PackageName: "com.netease.cloudmusic",
- Signature: "da6b069da1e2982db3e386233f68d76d",
- }, &message.RichMessage{
- Title: i.Title,
- Summary: i.Summary,
- Url: i.Url,
- PictureUrl: i.PictureUrl,
- MusicUrl: i.MusicUrl,
- })
- return 0
- }
- if i, ok := elem.(*MiguMusicElement); ok {
- bot.Client.SendFriendRichMessage(target, 1101053067, 1, 4, client.RichClientInfo{
- Platform: 1,
- SdkVersion: "0.0.0",
- PackageName: "cmccwm.mobilemusic",
- Signature: "6cdc72a439cef99a3418d2a78aa28c73",
- }, &message.RichMessage{
- Title: i.Title,
- Summary: i.Summary,
- Url: i.Url,
- PictureUrl: i.PictureUrl,
- MusicUrl: i.MusicUrl,
- })
+ if i, ok := elem.(*message.MusicShareElement); ok {
+ bot.Client.SendFriendMusicShare(target, i)
return 0
}
newElem = append(newElem, elem)
diff --git a/coolq/cqcode.go b/coolq/cqcode.go
index 4032e1a..cdfe09e 100644
--- a/coolq/cqcode.go
+++ b/coolq/cqcode.go
@@ -49,26 +49,6 @@ type GiftElement struct {
GiftId message.GroupGift
}
-type MusicElement struct {
- Title string
- Summary string
- Url string
- PictureUrl string
- MusicUrl string
-}
-
-type QQMusicElement struct {
- MusicElement
-}
-
-type CloudMusicElement struct {
- MusicElement
-}
-
-type MiguMusicElement struct {
- MusicElement
-}
-
type LocalImageElement struct {
message.ImageElement
Stream io.ReadSeeker
@@ -90,10 +70,6 @@ func (e *GiftElement) Type() message.ElementType {
return message.At
}
-func (e *MusicElement) Type() message.ElementType {
- return message.Service
-}
-
var GiftId = [...]message.GroupGift{
message.SweetWink,
message.HappyCola,
@@ -699,7 +675,7 @@ func (bot *CQBot) ToElement(t string, d map[string]string, group bool) (m interf
return nil, errors.New("song not found")
}
aid := strconv.FormatInt(info.Get("track_info.album.id").Int(), 10)
- name := info.Get("track_info.name").Str + " - " + info.Get("track_info.singer.0.name").Str
+ name := info.Get("track_info.name").Str
mid := info.Get("track_info.mid").Str
albumMid := info.Get("track_info.album.mid").Str
pinfo, _ := global.GetBytes("http://u.y.qq.com/cgi-bin/musicu.fcg?g_tk=2034008533&uin=0&format=json&data={\"comm\":{\"ct\":23,\"cv\":0},\"url_mid\":{\"module\":\"vkey.GetVkeyServer\",\"method\":\"CgiGetVkey\",\"param\":{\"guid\":\"4311206557\",\"songmid\":[\"" + mid + "\"],\"songtype\":[0],\"uin\":\"0\",\"loginflag\":1,\"platform\":\"23\"}}}&_=1599039471576")
@@ -709,17 +685,18 @@ func (bot *CQBot) ToElement(t string, d map[string]string, group bool) (m interf
if len(aid) < 2 {
return nil, errors.New("song error")
}
- content := "来自go-cqhttp"
+ content := info.Get("track_info.singer.0.name").Str
if d["content"] != "" {
content = d["content"]
}
- return &QQMusicElement{MusicElement: MusicElement{
+ return &message.MusicShareElement{
+ MusicType: message.QQMusic,
Title: name,
Summary: content,
Url: jumpUrl,
PictureUrl: preview,
MusicUrl: purl,
- }}, nil
+ }, nil
}
if d["type"] == "163" {
info, err := global.NeteaseMusicSongInfo(d["id"])
@@ -737,41 +714,36 @@ func (bot *CQBot) ToElement(t string, d map[string]string, group bool) (m interf
if info.Get("artists.0").Exists() {
artistName = info.Get("artists.0.name").Str
}
- return &CloudMusicElement{MusicElement{
+ return &message.MusicShareElement{
+ MusicType: message.CloudMusic,
Title: name,
Summary: artistName,
Url: jumpUrl,
PictureUrl: picUrl,
MusicUrl: musicUrl,
- }}, nil
+ }, nil
}
if d["type"] == "custom" {
- if d["subtype"] == "qq" {
- return &QQMusicElement{MusicElement{
+ if d["subtype"] != "" {
+ var subtype = map[string]int{
+ "qq": message.QQMusic,
+ "163": message.CloudMusic,
+ "migu": message.MiguMusic,
+ "kugou": message.KugouMusic,
+ "kuwo": message.KuwoMusic,
+ }
+ var musicType = 0
+ if tp, ok := subtype[d["subtype"]]; ok {
+ musicType = tp
+ }
+ return &message.MusicShareElement{
+ MusicType: musicType,
Title: d["title"],
Summary: d["content"],
Url: d["url"],
PictureUrl: d["image"],
MusicUrl: d["purl"],
- }}, nil
- }
- if d["subtype"] == "163" {
- return &CloudMusicElement{MusicElement{
- Title: d["title"],
- Summary: d["content"],
- Url: d["url"],
- PictureUrl: d["image"],
- MusicUrl: d["purl"],
- }}, nil
- }
- if d["subtype"] == "migu" {
- return &MiguMusicElement{MusicElement{
- Title: d["title"],
- Summary: d["content"],
- Url: d["url"],
- PictureUrl: d["image"],
- MusicUrl: d["purl"],
- }}, nil
+ }, nil
}
xml := fmt.Sprintf(`- %s
%s
`,
XmlEscape(d["title"]), d["url"], d["image"], d["audio"], XmlEscape(d["title"]), XmlEscape(d["content"]))
From bf65b576f34e6f0a61cfe8f1011e90ace81ef76b Mon Sep 17 00:00:00 2001
From: wdvxdr
Date: Mon, 25 Jan 2021 15:27:45 +0800
Subject: [PATCH 342/367] update docs
---
docs/cqhttp.md | 48 ++++++++++++++++++++++++++++++++++++++++++++++++
1 file changed, 48 insertions(+)
diff --git a/docs/cqhttp.md b/docs/cqhttp.md
index f660e64..f1da613 100644
--- a/docs/cqhttp.md
+++ b/docs/cqhttp.md
@@ -111,6 +111,54 @@ Type : `reply`
\
自定义回复示例: `[CQ:reply,text=Hello World,qq=10086,time=3376656000]`
+### 音乐分享
+
+```json
+{
+ "type": "music",
+ "data": {
+ "type": "163",
+ "id": "28949129"
+ }
+}
+```
+
+```
+[CQ:music,type=163,id=28949129]
+```
+
+| 参数名 | 收 | 发 | 可能的值 | 说明 |
+| --- | --- | --- | --- | --- |
+| `type` | | ✓ | `qq` `163` | 分别表示使用 QQ 音乐、网易云音乐 |
+| `id` | | ✓ | - | 歌曲 ID |
+
+### 音乐自定义分享
+
+```json
+{
+ "type": "music",
+ "data": {
+ "type": "custom",
+ "url": "http://baidu.com",
+ "audio": "http://baidu.com/1.mp3",
+ "title": "音乐标题"
+ }
+}
+```
+
+```
+[CQ:music,type=custom,url=http://baidu.com,audio=http://baidu.com/1.mp3,title=音乐标题]
+```
+
+| 参数名 | 收 | 发 | 可能的值 | 说明 |
+| --- | --- | --- | --- | --- |
+| `type` | | ✓ | `custom` | 表示音乐自定义分享 |
+| `subtype` | | ✓ | `qq,163,migu,kugou,kuwo` | 表示分享类型,不填写发送为xml卡片,推荐填写提高稳定性 |
+| `url` | | ✓ | - | 点击后跳转目标 URL |
+| `audio` | | ✓ | - | 音乐 URL |
+| `title` | | ✓ | - | 标题 |
+| `content` | | ✓ | - | 内容描述 |
+| `image` | | ✓ | - | 图片 URL |
### 红包
From 22c9a6728bcec73e86da1c431479efd42b7dbcd8 Mon Sep 17 00:00:00 2001
From: zkonge
Date: Mon, 25 Jan 2021 17:05:42 +0800
Subject: [PATCH 343/367] Make golint happy
---
global/config.go | 1 +
1 file changed, 1 insertion(+)
diff --git a/global/config.go b/global/config.go
index 3d39648..82f4cee 100644
--- a/global/config.go
+++ b/global/config.go
@@ -135,6 +135,7 @@ var DefaultConfigWithComments = `
}
`
+//PasswordHash 存储QQ密码哈希供登录使用
var PasswordHash [16]byte
//JSONConfig Config对应的结构体
From 23b90e288c2dcd8ce39cc318b36c25f5acb8af75 Mon Sep 17 00:00:00 2001
From: wdvxdr
Date: Mon, 25 Jan 2021 17:34:23 +0800
Subject: [PATCH 344/367] better error
---
global/codec.go | 10 +++++-----
global/codec/codec.go | 8 ++++----
2 files changed, 9 insertions(+), 9 deletions(-)
diff --git a/global/codec.go b/global/codec.go
index 188504f..1a6b35f 100644
--- a/global/codec.go
+++ b/global/codec.go
@@ -2,13 +2,13 @@ package global
import (
"crypto/md5"
- "errors"
"fmt"
"io/ioutil"
"os/exec"
"path"
"github.com/Mrs4s/go-cqhttp/global/codec"
+ "github.com/pkg/errors"
log "github.com/sirupsen/logrus"
)
@@ -32,7 +32,7 @@ func EncoderSilk(data []byte) ([]byte, error) {
h := md5.New()
_, err := h.Write(data)
if err != nil {
- return nil, err
+ return nil, errors.Wrap(err, "calc md5 failed")
}
tempName := fmt.Sprintf("%x", h.Sum(nil))
if silkPath := path.Join("data/cache", tempName+".silk"); PathExists(silkPath) {
@@ -40,7 +40,7 @@ func EncoderSilk(data []byte) ([]byte, error) {
}
slk, err := codec.EncodeToSilk(data, tempName, true)
if err != nil {
- return nil, err
+ return nil, errors.Wrap(err, "encode silk failed")
}
return slk, nil
}
@@ -51,7 +51,7 @@ func EncodeMP4(src string, dst string) error { // -y 覆盖文件
err := cmd1.Run()
if err != nil {
cmd2 := exec.Command("ffmpeg", "-i", src, "-y", "-c:v", "h264", "-c:a", "mp3", dst)
- return cmd2.Run()
+ return errors.Wrap(cmd2.Run(), "convert mp4 failed")
}
return err
}
@@ -59,5 +59,5 @@ func EncodeMP4(src string, dst string) error { // -y 覆盖文件
//ExtractCover 获取给定视频文件的Cover
func ExtractCover(src string, target string) error {
cmd := exec.Command("ffmpeg", "-i", src, "-y", "-r", "1", "-f", "image2", target)
- return cmd.Run()
+ return errors.Wrap(cmd.Run(), "extract video cover failed")
}
diff --git a/global/codec/codec.go b/global/codec/codec.go
index 6b053db..9b6115c 100644
--- a/global/codec/codec.go
+++ b/global/codec/codec.go
@@ -4,7 +4,7 @@
package codec
import (
- "errors"
+ "github.com/pkg/errors"
"io/ioutil"
"net/http"
"os"
@@ -63,7 +63,7 @@ func EncodeToSilk(record []byte, tempName string, useCache bool) ([]byte, error)
rawPath := path.Join(silkCachePath, tempName+".wav")
err := ioutil.WriteFile(rawPath, record, os.ModePerm)
if err != nil {
- return nil, err
+ return nil, errors.Wrap(err, "write temp file error")
}
defer os.Remove(rawPath)
@@ -71,7 +71,7 @@ func EncodeToSilk(record []byte, tempName string, useCache bool) ([]byte, error)
pcmPath := path.Join(silkCachePath, tempName+".pcm")
cmd := exec.Command("ffmpeg", "-i", rawPath, "-f", "s16le", "-ar", "24000", "-ac", "1", pcmPath)
if err = cmd.Run(); err != nil {
- return nil, err
+ return nil, errors.Wrap(err, "convert pcm file error")
}
defer os.Remove(pcmPath)
@@ -79,7 +79,7 @@ func EncodeToSilk(record []byte, tempName string, useCache bool) ([]byte, error)
silkPath := path.Join(silkCachePath, tempName+".silk")
cmd = exec.Command(getEncoderFilePath(), pcmPath, silkPath, "-rate", "24000", "-quiet", "-tencent")
if err = cmd.Run(); err != nil {
- return nil, err
+ return nil, errors.Wrap(err, "convert silk file error")
}
if !useCache {
defer os.Remove(silkPath)
From 18a839b699ea3ea090fea6dd06f81aa0a64823f7 Mon Sep 17 00:00:00 2001
From: wdvxdr
Date: Mon, 25 Jan 2021 17:41:15 +0800
Subject: [PATCH 345/367] update MiraiGo
---
go.mod | 2 +-
go.sum | 22 ++++++++++++++++++++--
2 files changed, 21 insertions(+), 3 deletions(-)
diff --git a/go.mod b/go.mod
index 36da045..e1909d2 100644
--- a/go.mod
+++ b/go.mod
@@ -3,7 +3,7 @@ module github.com/Mrs4s/go-cqhttp
go 1.15
require (
- github.com/Mrs4s/MiraiGo v0.0.0-20210124065645-9549a32d954a
+ github.com/Mrs4s/MiraiGo v0.0.0-20210125093830-340977eb201f
github.com/dustin/go-humanize v1.0.0
github.com/gin-contrib/pprof v1.3.0
github.com/gin-gonic/gin v1.6.3
diff --git a/go.sum b/go.sum
index 29bc881..ba34858 100644
--- a/go.sum
+++ b/go.sum
@@ -1,15 +1,19 @@
cloud.google.com/go v0.26.0/go.mod h1:aQUYkXzVsufM+DwF1aE+0xfcU+56JwCaLick0ClmMTw=
github.com/BurntSushi/toml v0.3.1/go.mod h1:xHWCNGjB5oqiDr8zfno3MHue2Ht5sIBksp03qcyfWMU=
-github.com/Mrs4s/MiraiGo v0.0.0-20210124065645-9549a32d954a h1:ov5QCDpZpsr+geKLVON7E63UqrpNF0oTiKuZwbKwEmo=
-github.com/Mrs4s/MiraiGo v0.0.0-20210124065645-9549a32d954a/go.mod h1:9V7DdSwpEfCKQNvLZhRnFJFkelTU0tPLfwR5l6UFF1Y=
+github.com/LXY1226/fastrand v0.0.0-20210121160840-7a3db3e79031 h1:DnoCySrXUFvtngW2kSkuBeZoPfvOgctJXjTulCn7eV0=
+github.com/LXY1226/fastrand v0.0.0-20210121160840-7a3db3e79031/go.mod h1:mEFi4jHUsE2sqQGSJ7eQfXnO8esMzEYcftiCGG+L/OE=
+github.com/Mrs4s/MiraiGo v0.0.0-20210125093830-340977eb201f h1:v86jOk27ypxD3gT48KJDy/Y5w7PIaTvabZYdDszr3w0=
+github.com/Mrs4s/MiraiGo v0.0.0-20210125093830-340977eb201f/go.mod h1:JBm2meosyXAASbl8mZ+mFZEkE/2cC7zNZdIOBe7+QhY=
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=
+github.com/davecgh/go-spew v1.1.1 h1:vj9j/u1bqnvCEfJOwUhtlOARqs3+rkHYY13jYWTU97c=
github.com/davecgh/go-spew v1.1.1/go.mod h1:J7Y8YcW2NihsgmVo/mv3lAwl/skON4iLHjSsI+c5H38=
github.com/dustin/go-humanize v1.0.0 h1:VSnTsYCnlFHaM2/igO1h6X3HA71jcobQuxemgkq4zYo=
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/fsnotify/fsnotify v1.4.7 h1:IXs+QLmnXW2CcXuY+8Mzv/fWEsPGWxqefPtCP5CnV9I=
github.com/fsnotify/fsnotify v1.4.7/go.mod h1:jwhsz4b93w/PPRr/qN1Yymfu8t87LnFCMoQvtojpjFo=
github.com/gin-contrib/pprof v1.3.0 h1:G9eK6HnbkSqDZBYbzG4wrjCsA4e+cvYAHUZw6W+W9K0=
github.com/gin-contrib/pprof v1.3.0/go.mod h1:waMjT1H9b179t3CxuG1cV3DHpga6ybizwfBaM5OXaB0=
@@ -19,6 +23,7 @@ github.com/gin-gonic/gin v1.6.0/go.mod h1:75u5sXoLsGZoRN5Sgbi1eraJ4GU3++wFwWzhwv
github.com/gin-gonic/gin v1.6.2/go.mod h1:75u5sXoLsGZoRN5Sgbi1eraJ4GU3++wFwWzhwvtwp4M=
github.com/gin-gonic/gin v1.6.3 h1:ahKqKTFpO5KTPHxWZjEdPScmYaGtLo8Y4DMHoEsnp14=
github.com/gin-gonic/gin v1.6.3/go.mod h1:75u5sXoLsGZoRN5Sgbi1eraJ4GU3++wFwWzhwvtwp4M=
+github.com/go-playground/assert/v2 v2.0.1 h1:MsBgLAaY856+nPRTKrp3/OZK38U/wa0CcBYNjji3q3A=
github.com/go-playground/assert/v2 v2.0.1/go.mod h1:VDjEfimB/XKnb+ZQfWdccd7VUvScMdVu0Titje2rxJ4=
github.com/go-playground/locales v0.13.0 h1:HyWk6mgj5qFqCT5fjGBuRArbVDfE4hi8+e8ceBS/t7Q=
github.com/go-playground/locales v0.13.0/go.mod h1:taPMhCMXrRLJO55olJkUXHZBHCxTMfnGwq/HNwmWNS8=
@@ -45,8 +50,10 @@ github.com/google/go-cmp v0.2.0/go.mod h1:oXzfMopK8JAjlY9xF4vHSVASa0yLyX7SntLO5a
github.com/google/go-cmp v0.3.0/go.mod h1:8QqcDgzrUqlUb/G2PQTWiueGozuR1884gddMywk6iLU=
github.com/google/go-cmp v0.3.1/go.mod h1:8QqcDgzrUqlUb/G2PQTWiueGozuR1884gddMywk6iLU=
github.com/google/go-cmp v0.4.0/go.mod h1:v8dTdLbMG2kIc/vJvl+f65V22dbkXbowE6jgT/gNBxE=
+github.com/google/go-cmp v0.5.0 h1:/QaMHBdZ26BB3SSst0Iwl10Epc+xhTquomWX0oZEB6w=
github.com/google/go-cmp v0.5.0/go.mod h1:v8dTdLbMG2kIc/vJvl+f65V22dbkXbowE6jgT/gNBxE=
github.com/google/gofuzz v1.0.0/go.mod h1:dBl0BpW6vV/+mYPU4Po3pmUjxk6FQPldtuIdl/M65Eg=
+github.com/google/uuid v1.1.1 h1:Gkbcsh/GbpXz7lPftLA3P6TYMwjCLYm83jiFQZF/3gY=
github.com/google/uuid v1.1.1/go.mod h1:TIyPZe4MgqvfeYDBFedMoGGpEw/LqOeaOT+nhxU+yHo=
github.com/gorilla/websocket v1.4.2 h1:+/TMaTYc4QFitKJxsQ7Yye35DkWvkdLcvGKqM+x0Ufc=
github.com/gorilla/websocket v1.4.2/go.mod h1:YR8l580nyteQvAITg2hZ9XVh4b55+EU/adAjf1fMHhE=
@@ -54,6 +61,7 @@ github.com/guonaihong/gout v0.1.4 h1:uBBoyztMX9okC27OQxqhn6bZ0ROkGyvnEIHwtp3TM4g
github.com/guonaihong/gout v0.1.4/go.mod h1:0rFYAYyzbcxEg11eY2qUbffJs7hHRPeugAnlVYSp8Ic=
github.com/hjson/hjson-go v3.1.0+incompatible h1:DY/9yE8ey8Zv22bY+mHV1uk2yRy0h8tKhZ77hEdi0Aw=
github.com/hjson/hjson-go v3.1.0+incompatible/go.mod h1:qsetwF8NlsTsOTwZTApNlTCerV+b2GjYRRcIk4JMFio=
+github.com/hpcloud/tail v1.0.0 h1:nfCOvKYfkgYP8hkirhJocXT2+zOD8yUNjXaWfTlyFKI=
github.com/hpcloud/tail v1.0.0/go.mod h1:ab1qPbhIpdTxEkNHXyeSf5vhxWSCs/tWer42PpOxQnU=
github.com/json-iterator/go v1.1.9/go.mod h1:KdQUCv79m/52Kvf8AW2vK1V8akMuk1QjK/uOdHXbAo4=
github.com/json-iterator/go v1.1.10 h1:Kz6Cvnvv2wGdaG/V8yMvfkmNiXq9Ya2KUv4rouJJr68=
@@ -63,6 +71,7 @@ github.com/kardianos/osext v0.0.0-20190222173326-2bc1f35cddc0/go.mod h1:1NbS8ALr
github.com/konsorten/go-windows-terminal-sequences v1.0.1/go.mod h1:T0+1ngSBFLxvqU3pZ+m/2kptfBszLMUkC4ZK/EgS/cQ=
github.com/leodido/go-urn v1.2.0 h1:hpXL4XnriNwQ/ABnpepYM/1vCLWNDfUNts8dX3xTG6Y=
github.com/leodido/go-urn v1.2.0/go.mod h1:+8+nEpDfqqsY+g338gtMEUOtuK+4dEMhiQEgxpxOKII=
+github.com/lestrrat-go/envload v0.0.0-20180220234015-a3eb8ddeffcc h1:RKf14vYWi2ttpEmkA4aQ3j4u9dStX2t4M8UM6qqNsG8=
github.com/lestrrat-go/envload v0.0.0-20180220234015-a3eb8ddeffcc/go.mod h1:kopuH9ugFRkIXf3YoqHKyrJ9YfUFsckUU9S7B+XP+is=
github.com/lestrrat-go/file-rotatelogs v2.4.0+incompatible h1:Y6sqxHMyB1D2YSzWkLibYKgg+SwmyFU9dF2hn6MdTj4=
github.com/lestrrat-go/file-rotatelogs v2.4.0+incompatible/go.mod h1:ZQnN8lSECaebrkQytbHj4xNgtg8CR7RYXnPok8e0EHA=
@@ -77,11 +86,14 @@ github.com/modern-go/reflect2 v0.0.0-20180701023420-4b7aa43c6742/go.mod h1:bx2lN
github.com/nfnt/resize v0.0.0-20180221191011-83c6a9932646 h1:zYyBkD/k9seD2A7fsi6Oo2LfFZAehjjQMERAvZLEDnQ=
github.com/nfnt/resize v0.0.0-20180221191011-83c6a9932646/go.mod h1:jpp1/29i3P1S/RLdc7JQKbRpFeM1dOBd8T9ki5s+AY8=
github.com/onsi/ginkgo v1.6.0/go.mod h1:lLunBs/Ym6LB5Z9jYTR76FiuTmxDTDusOGeTQH+WWjE=
+github.com/onsi/ginkgo v1.7.0 h1:WSHQ+IS43OoUrWtD1/bbclrwK8TTH5hzp+umCiuxHgs=
github.com/onsi/ginkgo v1.7.0/go.mod h1:lLunBs/Ym6LB5Z9jYTR76FiuTmxDTDusOGeTQH+WWjE=
+github.com/onsi/gomega v1.4.3 h1:RE1xgDvH7imwFD45h+u2SgIfERHlS2yNG4DObb5BSKU=
github.com/onsi/gomega v1.4.3/go.mod h1:ex+gbHU/CVuBBDIJjb2X0qEXbFg53c61hWP/1CpauHY=
github.com/pkg/errors v0.8.1/go.mod h1:bwawxfHBFNV+L2hUp1rHADufV3IMtnDRdf1r5NINEl0=
github.com/pkg/errors v0.9.1 h1:FEBLx1zS214owpjy7qsBeixbURkuhQAwrK5UwLGTwt4=
github.com/pkg/errors v0.9.1/go.mod h1:bwawxfHBFNV+L2hUp1rHADufV3IMtnDRdf1r5NINEl0=
+github.com/pmezard/go-difflib v1.0.0 h1:4DBwDE0NGyQoBHbLQYPwSUPoCMWR5BEzIk/f1lZbAQM=
github.com/pmezard/go-difflib v1.0.0/go.mod h1:iKH77koFhYxTK1pcRnkKkqfTogsbg7gZNVY4sRDYZ/4=
github.com/prometheus/client_model v0.0.0-20190812154241-14fe0d1b01d4/go.mod h1:xMI15A0UPsDsEKsMN9yxemIoYk6Tm2C1GtYGdfGttqA=
github.com/rifflock/lfshook v0.0.0-20180920164130-b9218ef580f5 h1:mZHayPoR0lNmnHyvtYjDeq0zlVHn9K/ZXoy17ylucdo=
@@ -93,6 +105,7 @@ github.com/stretchr/objx v0.1.0/go.mod h1:HFkY916IF+rwdDfMAkV7OtwuqBVzrE8GR6GFx+
github.com/stretchr/objx v0.1.1/go.mod h1:HFkY916IF+rwdDfMAkV7OtwuqBVzrE8GR6GFx+wExME=
github.com/stretchr/testify v1.2.2/go.mod h1:a8OnRcib4nhh0OaRAV+Yts87kKdq0PP7pXfy6kDkUVs=
github.com/stretchr/testify v1.3.0/go.mod h1:M5WIy9Dh21IEIfnGCwXGc5bZfKNJtfHm1UVUgZn+9EI=
+github.com/stretchr/testify v1.4.0 h1:2E4SXV/wtOkTonXsotYi4li6zVWxYlZuYNCXe9XRJyk=
github.com/stretchr/testify v1.4.0/go.mod h1:j7eGeouHqKxXV5pUuKE4zz7dFj8WfuZ+81PSLYec5m4=
github.com/syndtr/goleveldb v1.0.0 h1:fBdIW9lB4Iz0n9khmH8w27SJ3QEJ7+IgjPEwGSZiFdE=
github.com/syndtr/goleveldb v1.0.0/go.mod h1:ZVVdQEZoIme9iO1Ch2Jdy24qqXrMMOU6lpPAyBWyWuQ=
@@ -137,6 +150,7 @@ golang.org/x/sys v0.0.0-20201119102817-f84b799fce68/go.mod h1:h1NjWce9XRLGQEsW7w
golang.org/x/term v0.0.0-20201210144234-2321bbc49cbf h1:MZ2shdL+ZM/XzY3ZGOnh4Nlpnxz5GSOhOmtHo3iPU6M=
golang.org/x/term v0.0.0-20201210144234-2321bbc49cbf/go.mod h1:bj7SfCRtBDWHUb9snDiAeCFNEtKQo2Wmx5Cou7ajbmo=
golang.org/x/text v0.3.0/go.mod h1:NqM8EUOU14njkJ3fqMW+pc6Ldnwhi/IjpwHt7yyuwOQ=
+golang.org/x/text v0.3.2 h1:tW2bmiBqwgJj/UpqtC8EpXEZVYOwU0yG4iWbprSVAcs=
golang.org/x/text v0.3.2/go.mod h1:bEr9sfX3Q8Zfm5fL9x+3itogRgK3+ptLWKqgva+5dAk=
golang.org/x/time v0.0.0-20201208040808-7e3f01d25324 h1:Hir2P/De0WpUhtrKGGjvSb2YxUgyZ7EFOSLIcSSpiwE=
golang.org/x/time v0.0.0-20201208040808-7e3f01d25324/go.mod h1:tRJNPiyCQ0inRvYxbN9jk5I+vvW/OXSQhTDSoE431IQ=
@@ -145,6 +159,7 @@ golang.org/x/tools v0.0.0-20190114222345-bf090417da8b/go.mod h1:n7NCudcB/nEzxVGm
golang.org/x/tools v0.0.0-20190226205152-f727befe758c/go.mod h1:9Yl7xja0Znq3iFh3HoIrodX9oNMXvdceNzlUR8zjMvY=
golang.org/x/tools v0.0.0-20190311212946-11955173bddd/go.mod h1:LCzVGOaR6xXOjkQ3onu1FJEFr0SW1gC7cKk1uF8kGRs=
golang.org/x/tools v0.0.0-20190524140312-2c0ae7006135/go.mod h1:RgjU9mgBXZiqYHBnxXauZ1Gv1EHHAz9KjViQ78xBX0Q=
+golang.org/x/xerrors v0.0.0-20191204190536-9bdfabe68543 h1:E7g+9GITq07hpfrRu66IVDexMakfv52eLZ2CXBWiKr4=
golang.org/x/xerrors v0.0.0-20191204190536-9bdfabe68543/go.mod h1:I/5z698sn9Ka8TeJc9MKroUUfqBBauWjQqLJ2OPfmY0=
google.golang.org/appengine v1.1.0/go.mod h1:EbEs0AVv82hx2wNQdGPgUI5lhzA/G0D9YwlJXL52JkM=
google.golang.org/appengine v1.4.0/go.mod h1:xpcJRLb0r/rnEns0DIKYYv+WjYCduHsrkT7/EB5XEv4=
@@ -164,8 +179,11 @@ google.golang.org/protobuf v1.23.0/go.mod h1:EGpADcykh3NcUnDUJcl1+ZksZNG86OlYog2
google.golang.org/protobuf v1.23.1-0.20200526195155-81db48ad09cc/go.mod h1:EGpADcykh3NcUnDUJcl1+ZksZNG86OlYog2l/sGQquU=
google.golang.org/protobuf v1.25.0 h1:Ejskq+SyPohKW+1uil0JJMtmHCgJPJ/qWTxr8qp+R4c=
google.golang.org/protobuf v1.25.0/go.mod h1:9JNX74DMeImyA3h4bdi1ymwjUzf21/xIlbajtzgsN7c=
+gopkg.in/check.v1 v0.0.0-20161208181325-20d25e280405 h1:yhCVgyC4o1eVCa2tZl7eS0r+SDo693bJlVdllGtEeKM=
gopkg.in/check.v1 v0.0.0-20161208181325-20d25e280405/go.mod h1:Co6ibVJAznAaIkqp8huTwlJQCZ016jof/cbN4VW5Yz0=
+gopkg.in/fsnotify.v1 v1.4.7 h1:xOHLXZwVvI9hhs+cLKq5+I5onOuwQLhQwiu63xxlHs4=
gopkg.in/fsnotify.v1 v1.4.7/go.mod h1:Tz8NjZHkW78fSQdbUxIjBTcgA1z1m8ZHf0WmKUhAMys=
+gopkg.in/tomb.v1 v1.0.0-20141024135613-dd632973f1e7 h1:uRGJdciOHaEIrze2W8Q3AKkepLTh2hOroT7a+7czfdQ=
gopkg.in/tomb.v1 v1.0.0-20141024135613-dd632973f1e7/go.mod h1:dt/ZhP58zS4L8KSrWDmTeBkI65Dw0HsyUHuEVlX15mw=
gopkg.in/yaml.v2 v2.2.1/go.mod h1:hI93XBmqTisBFMUTm0b8Fm+jr3Dg1NNxqwp+5A1VGuI=
gopkg.in/yaml.v2 v2.2.2/go.mod h1:hI93XBmqTisBFMUTm0b8Fm+jr3Dg1NNxqwp+5A1VGuI=
From 717f816294beee9e7482c82f494a2875b2f70f86 Mon Sep 17 00:00:00 2001
From: Mrs4s <1844812067@qq.com>
Date: Tue, 26 Jan 2021 04:51:39 +0800
Subject: [PATCH 346/367] fix bugs.
---
global/log_hook.go | 5 +++--
main.go | 4 +++-
2 files changed, 6 insertions(+), 3 deletions(-)
diff --git a/global/log_hook.go b/global/log_hook.go
index 8c50050..63865f8 100644
--- a/global/log_hook.go
+++ b/global/log_hook.go
@@ -92,7 +92,7 @@ func (hook *LocalHook) SetFormatter(formatter logrus.Formatter) {
// todo
}
}
-
+ logrus.SetFormatter(formatter)
hook.formatter = formatter
}
@@ -147,6 +147,7 @@ func GetLogLevel(level string) []logrus.Level {
return []logrus.Level{logrus.ErrorLevel, logrus.FatalLevel,
logrus.PanicLevel}
default:
- return logrus.AllLevels
+ return []logrus.Level{logrus.InfoLevel, logrus.WarnLevel,
+ logrus.ErrorLevel, logrus.FatalLevel, logrus.PanicLevel}
}
}
diff --git a/main.go b/main.go
index 99c028c..6b0dd23 100644
--- a/main.go
+++ b/main.go
@@ -25,8 +25,8 @@ import (
"github.com/Mrs4s/go-cqhttp/server"
"github.com/guonaihong/gout"
"github.com/tidwall/gjson"
- "golang.org/x/term"
"golang.org/x/crypto/pbkdf2"
+ "golang.org/x/term"
"github.com/Mrs4s/MiraiGo/binary"
"github.com/Mrs4s/MiraiGo/client"
@@ -213,6 +213,8 @@ func main() {
log.Fatalf("加密存储的密码损坏,请尝试重新配置密码")
}
copy(global.PasswordHash[:], ph)
+ } else {
+ global.PasswordHash = md5.Sum([]byte(conf.Password))
}
if !isFastStart {
log.Info("Bot将在5秒后登录并开始信息处理, 按 Ctrl+C 取消.")
From dc18944a986040fe363841d4cfed591c596fc84b Mon Sep 17 00:00:00 2001
From: Mrs4s <1844812067@qq.com>
Date: Tue, 26 Jan 2021 04:52:11 +0800
Subject: [PATCH 347/367] update MiraiGo.
---
go.mod | 2 +-
go.sum | 23 ++---------------------
2 files changed, 3 insertions(+), 22 deletions(-)
diff --git a/go.mod b/go.mod
index 9f43444..0ba6b8e 100644
--- a/go.mod
+++ b/go.mod
@@ -3,7 +3,7 @@ module github.com/Mrs4s/go-cqhttp
go 1.15
require (
- github.com/Mrs4s/MiraiGo v0.0.0-20210125093830-340977eb201f
+ github.com/Mrs4s/MiraiGo v0.0.0-20210125194401-2d334747a256
github.com/dustin/go-humanize v1.0.0
github.com/gin-contrib/pprof v1.3.0
github.com/gin-gonic/gin v1.6.3
diff --git a/go.sum b/go.sum
index 066b742..77a485c 100644
--- a/go.sum
+++ b/go.sum
@@ -1,19 +1,15 @@
cloud.google.com/go v0.26.0/go.mod h1:aQUYkXzVsufM+DwF1aE+0xfcU+56JwCaLick0ClmMTw=
github.com/BurntSushi/toml v0.3.1/go.mod h1:xHWCNGjB5oqiDr8zfno3MHue2Ht5sIBksp03qcyfWMU=
-github.com/LXY1226/fastrand v0.0.0-20210121160840-7a3db3e79031 h1:DnoCySrXUFvtngW2kSkuBeZoPfvOgctJXjTulCn7eV0=
-github.com/LXY1226/fastrand v0.0.0-20210121160840-7a3db3e79031/go.mod h1:mEFi4jHUsE2sqQGSJ7eQfXnO8esMzEYcftiCGG+L/OE=
-github.com/Mrs4s/MiraiGo v0.0.0-20210125093830-340977eb201f h1:v86jOk27ypxD3gT48KJDy/Y5w7PIaTvabZYdDszr3w0=
-github.com/Mrs4s/MiraiGo v0.0.0-20210125093830-340977eb201f/go.mod h1:JBm2meosyXAASbl8mZ+mFZEkE/2cC7zNZdIOBe7+QhY=
+github.com/Mrs4s/MiraiGo v0.0.0-20210125194401-2d334747a256 h1:Hm3fth0RrraFaqZqYoYGXlD6LRokkTqgAmniMfNlzTo=
+github.com/Mrs4s/MiraiGo v0.0.0-20210125194401-2d334747a256/go.mod h1:9V7DdSwpEfCKQNvLZhRnFJFkelTU0tPLfwR5l6UFF1Y=
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=
-github.com/davecgh/go-spew v1.1.1 h1:vj9j/u1bqnvCEfJOwUhtlOARqs3+rkHYY13jYWTU97c=
github.com/davecgh/go-spew v1.1.1/go.mod h1:J7Y8YcW2NihsgmVo/mv3lAwl/skON4iLHjSsI+c5H38=
github.com/dustin/go-humanize v1.0.0 h1:VSnTsYCnlFHaM2/igO1h6X3HA71jcobQuxemgkq4zYo=
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/fsnotify/fsnotify v1.4.7 h1:IXs+QLmnXW2CcXuY+8Mzv/fWEsPGWxqefPtCP5CnV9I=
github.com/fsnotify/fsnotify v1.4.7/go.mod h1:jwhsz4b93w/PPRr/qN1Yymfu8t87LnFCMoQvtojpjFo=
github.com/gin-contrib/pprof v1.3.0 h1:G9eK6HnbkSqDZBYbzG4wrjCsA4e+cvYAHUZw6W+W9K0=
github.com/gin-contrib/pprof v1.3.0/go.mod h1:waMjT1H9b179t3CxuG1cV3DHpga6ybizwfBaM5OXaB0=
@@ -23,7 +19,6 @@ github.com/gin-gonic/gin v1.6.0/go.mod h1:75u5sXoLsGZoRN5Sgbi1eraJ4GU3++wFwWzhwv
github.com/gin-gonic/gin v1.6.2/go.mod h1:75u5sXoLsGZoRN5Sgbi1eraJ4GU3++wFwWzhwvtwp4M=
github.com/gin-gonic/gin v1.6.3 h1:ahKqKTFpO5KTPHxWZjEdPScmYaGtLo8Y4DMHoEsnp14=
github.com/gin-gonic/gin v1.6.3/go.mod h1:75u5sXoLsGZoRN5Sgbi1eraJ4GU3++wFwWzhwvtwp4M=
-github.com/go-playground/assert/v2 v2.0.1 h1:MsBgLAaY856+nPRTKrp3/OZK38U/wa0CcBYNjji3q3A=
github.com/go-playground/assert/v2 v2.0.1/go.mod h1:VDjEfimB/XKnb+ZQfWdccd7VUvScMdVu0Titje2rxJ4=
github.com/go-playground/locales v0.13.0 h1:HyWk6mgj5qFqCT5fjGBuRArbVDfE4hi8+e8ceBS/t7Q=
github.com/go-playground/locales v0.13.0/go.mod h1:taPMhCMXrRLJO55olJkUXHZBHCxTMfnGwq/HNwmWNS8=
@@ -50,10 +45,8 @@ github.com/google/go-cmp v0.2.0/go.mod h1:oXzfMopK8JAjlY9xF4vHSVASa0yLyX7SntLO5a
github.com/google/go-cmp v0.3.0/go.mod h1:8QqcDgzrUqlUb/G2PQTWiueGozuR1884gddMywk6iLU=
github.com/google/go-cmp v0.3.1/go.mod h1:8QqcDgzrUqlUb/G2PQTWiueGozuR1884gddMywk6iLU=
github.com/google/go-cmp v0.4.0/go.mod h1:v8dTdLbMG2kIc/vJvl+f65V22dbkXbowE6jgT/gNBxE=
-github.com/google/go-cmp v0.5.0 h1:/QaMHBdZ26BB3SSst0Iwl10Epc+xhTquomWX0oZEB6w=
github.com/google/go-cmp v0.5.0/go.mod h1:v8dTdLbMG2kIc/vJvl+f65V22dbkXbowE6jgT/gNBxE=
github.com/google/gofuzz v1.0.0/go.mod h1:dBl0BpW6vV/+mYPU4Po3pmUjxk6FQPldtuIdl/M65Eg=
-github.com/google/uuid v1.1.1 h1:Gkbcsh/GbpXz7lPftLA3P6TYMwjCLYm83jiFQZF/3gY=
github.com/google/uuid v1.1.1/go.mod h1:TIyPZe4MgqvfeYDBFedMoGGpEw/LqOeaOT+nhxU+yHo=
github.com/gorilla/websocket v1.4.2 h1:+/TMaTYc4QFitKJxsQ7Yye35DkWvkdLcvGKqM+x0Ufc=
github.com/gorilla/websocket v1.4.2/go.mod h1:YR8l580nyteQvAITg2hZ9XVh4b55+EU/adAjf1fMHhE=
@@ -61,9 +54,7 @@ github.com/guonaihong/gout v0.1.4 h1:uBBoyztMX9okC27OQxqhn6bZ0ROkGyvnEIHwtp3TM4g
github.com/guonaihong/gout v0.1.4/go.mod h1:0rFYAYyzbcxEg11eY2qUbffJs7hHRPeugAnlVYSp8Ic=
github.com/hjson/hjson-go v3.1.0+incompatible h1:DY/9yE8ey8Zv22bY+mHV1uk2yRy0h8tKhZ77hEdi0Aw=
github.com/hjson/hjson-go v3.1.0+incompatible/go.mod h1:qsetwF8NlsTsOTwZTApNlTCerV+b2GjYRRcIk4JMFio=
-github.com/hpcloud/tail v1.0.0 h1:nfCOvKYfkgYP8hkirhJocXT2+zOD8yUNjXaWfTlyFKI=
github.com/hpcloud/tail v1.0.0/go.mod h1:ab1qPbhIpdTxEkNHXyeSf5vhxWSCs/tWer42PpOxQnU=
-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.9/go.mod h1:KdQUCv79m/52Kvf8AW2vK1V8akMuk1QjK/uOdHXbAo4=
github.com/json-iterator/go v1.1.10 h1:Kz6Cvnvv2wGdaG/V8yMvfkmNiXq9Ya2KUv4rouJJr68=
@@ -73,7 +64,6 @@ github.com/kardianos/osext v0.0.0-20190222173326-2bc1f35cddc0/go.mod h1:1NbS8ALr
github.com/konsorten/go-windows-terminal-sequences v1.0.1/go.mod h1:T0+1ngSBFLxvqU3pZ+m/2kptfBszLMUkC4ZK/EgS/cQ=
github.com/leodido/go-urn v1.2.0 h1:hpXL4XnriNwQ/ABnpepYM/1vCLWNDfUNts8dX3xTG6Y=
github.com/leodido/go-urn v1.2.0/go.mod h1:+8+nEpDfqqsY+g338gtMEUOtuK+4dEMhiQEgxpxOKII=
-github.com/lestrrat-go/envload v0.0.0-20180220234015-a3eb8ddeffcc h1:RKf14vYWi2ttpEmkA4aQ3j4u9dStX2t4M8UM6qqNsG8=
github.com/lestrrat-go/envload v0.0.0-20180220234015-a3eb8ddeffcc/go.mod h1:kopuH9ugFRkIXf3YoqHKyrJ9YfUFsckUU9S7B+XP+is=
github.com/lestrrat-go/file-rotatelogs v2.4.0+incompatible h1:Y6sqxHMyB1D2YSzWkLibYKgg+SwmyFU9dF2hn6MdTj4=
github.com/lestrrat-go/file-rotatelogs v2.4.0+incompatible/go.mod h1:ZQnN8lSECaebrkQytbHj4xNgtg8CR7RYXnPok8e0EHA=
@@ -88,14 +78,11 @@ github.com/modern-go/reflect2 v0.0.0-20180701023420-4b7aa43c6742/go.mod h1:bx2lN
github.com/nfnt/resize v0.0.0-20180221191011-83c6a9932646 h1:zYyBkD/k9seD2A7fsi6Oo2LfFZAehjjQMERAvZLEDnQ=
github.com/nfnt/resize v0.0.0-20180221191011-83c6a9932646/go.mod h1:jpp1/29i3P1S/RLdc7JQKbRpFeM1dOBd8T9ki5s+AY8=
github.com/onsi/ginkgo v1.6.0/go.mod h1:lLunBs/Ym6LB5Z9jYTR76FiuTmxDTDusOGeTQH+WWjE=
-github.com/onsi/ginkgo v1.7.0 h1:WSHQ+IS43OoUrWtD1/bbclrwK8TTH5hzp+umCiuxHgs=
github.com/onsi/ginkgo v1.7.0/go.mod h1:lLunBs/Ym6LB5Z9jYTR76FiuTmxDTDusOGeTQH+WWjE=
-github.com/onsi/gomega v1.4.3 h1:RE1xgDvH7imwFD45h+u2SgIfERHlS2yNG4DObb5BSKU=
github.com/onsi/gomega v1.4.3/go.mod h1:ex+gbHU/CVuBBDIJjb2X0qEXbFg53c61hWP/1CpauHY=
github.com/pkg/errors v0.8.1/go.mod h1:bwawxfHBFNV+L2hUp1rHADufV3IMtnDRdf1r5NINEl0=
github.com/pkg/errors v0.9.1 h1:FEBLx1zS214owpjy7qsBeixbURkuhQAwrK5UwLGTwt4=
github.com/pkg/errors v0.9.1/go.mod h1:bwawxfHBFNV+L2hUp1rHADufV3IMtnDRdf1r5NINEl0=
-github.com/pmezard/go-difflib v1.0.0 h1:4DBwDE0NGyQoBHbLQYPwSUPoCMWR5BEzIk/f1lZbAQM=
github.com/pmezard/go-difflib v1.0.0/go.mod h1:iKH77koFhYxTK1pcRnkKkqfTogsbg7gZNVY4sRDYZ/4=
github.com/prometheus/client_model v0.0.0-20190812154241-14fe0d1b01d4/go.mod h1:xMI15A0UPsDsEKsMN9yxemIoYk6Tm2C1GtYGdfGttqA=
github.com/sirupsen/logrus v1.4.2/go.mod h1:tLMulIdttU9McNUspp0xgXVQah82FyeX6MwdIuYE2rE=
@@ -105,7 +92,6 @@ github.com/stretchr/objx v0.1.0/go.mod h1:HFkY916IF+rwdDfMAkV7OtwuqBVzrE8GR6GFx+
github.com/stretchr/objx v0.1.1/go.mod h1:HFkY916IF+rwdDfMAkV7OtwuqBVzrE8GR6GFx+wExME=
github.com/stretchr/testify v1.2.2/go.mod h1:a8OnRcib4nhh0OaRAV+Yts87kKdq0PP7pXfy6kDkUVs=
github.com/stretchr/testify v1.3.0/go.mod h1:M5WIy9Dh21IEIfnGCwXGc5bZfKNJtfHm1UVUgZn+9EI=
-github.com/stretchr/testify v1.4.0 h1:2E4SXV/wtOkTonXsotYi4li6zVWxYlZuYNCXe9XRJyk=
github.com/stretchr/testify v1.4.0/go.mod h1:j7eGeouHqKxXV5pUuKE4zz7dFj8WfuZ+81PSLYec5m4=
github.com/syndtr/goleveldb v1.0.0 h1:fBdIW9lB4Iz0n9khmH8w27SJ3QEJ7+IgjPEwGSZiFdE=
github.com/syndtr/goleveldb v1.0.0/go.mod h1:ZVVdQEZoIme9iO1Ch2Jdy24qqXrMMOU6lpPAyBWyWuQ=
@@ -151,7 +137,6 @@ golang.org/x/sys v0.0.0-20201119102817-f84b799fce68/go.mod h1:h1NjWce9XRLGQEsW7w
golang.org/x/term v0.0.0-20201210144234-2321bbc49cbf h1:MZ2shdL+ZM/XzY3ZGOnh4Nlpnxz5GSOhOmtHo3iPU6M=
golang.org/x/term v0.0.0-20201210144234-2321bbc49cbf/go.mod h1:bj7SfCRtBDWHUb9snDiAeCFNEtKQo2Wmx5Cou7ajbmo=
golang.org/x/text v0.3.0/go.mod h1:NqM8EUOU14njkJ3fqMW+pc6Ldnwhi/IjpwHt7yyuwOQ=
-golang.org/x/text v0.3.2 h1:tW2bmiBqwgJj/UpqtC8EpXEZVYOwU0yG4iWbprSVAcs=
golang.org/x/text v0.3.2/go.mod h1:bEr9sfX3Q8Zfm5fL9x+3itogRgK3+ptLWKqgva+5dAk=
golang.org/x/time v0.0.0-20201208040808-7e3f01d25324 h1:Hir2P/De0WpUhtrKGGjvSb2YxUgyZ7EFOSLIcSSpiwE=
golang.org/x/time v0.0.0-20201208040808-7e3f01d25324/go.mod h1:tRJNPiyCQ0inRvYxbN9jk5I+vvW/OXSQhTDSoE431IQ=
@@ -160,7 +145,6 @@ golang.org/x/tools v0.0.0-20190114222345-bf090417da8b/go.mod h1:n7NCudcB/nEzxVGm
golang.org/x/tools v0.0.0-20190226205152-f727befe758c/go.mod h1:9Yl7xja0Znq3iFh3HoIrodX9oNMXvdceNzlUR8zjMvY=
golang.org/x/tools v0.0.0-20190311212946-11955173bddd/go.mod h1:LCzVGOaR6xXOjkQ3onu1FJEFr0SW1gC7cKk1uF8kGRs=
golang.org/x/tools v0.0.0-20190524140312-2c0ae7006135/go.mod h1:RgjU9mgBXZiqYHBnxXauZ1Gv1EHHAz9KjViQ78xBX0Q=
-golang.org/x/xerrors v0.0.0-20191204190536-9bdfabe68543 h1:E7g+9GITq07hpfrRu66IVDexMakfv52eLZ2CXBWiKr4=
golang.org/x/xerrors v0.0.0-20191204190536-9bdfabe68543/go.mod h1:I/5z698sn9Ka8TeJc9MKroUUfqBBauWjQqLJ2OPfmY0=
google.golang.org/appengine v1.1.0/go.mod h1:EbEs0AVv82hx2wNQdGPgUI5lhzA/G0D9YwlJXL52JkM=
google.golang.org/appengine v1.4.0/go.mod h1:xpcJRLb0r/rnEns0DIKYYv+WjYCduHsrkT7/EB5XEv4=
@@ -180,11 +164,8 @@ google.golang.org/protobuf v1.23.0/go.mod h1:EGpADcykh3NcUnDUJcl1+ZksZNG86OlYog2
google.golang.org/protobuf v1.23.1-0.20200526195155-81db48ad09cc/go.mod h1:EGpADcykh3NcUnDUJcl1+ZksZNG86OlYog2l/sGQquU=
google.golang.org/protobuf v1.25.0 h1:Ejskq+SyPohKW+1uil0JJMtmHCgJPJ/qWTxr8qp+R4c=
google.golang.org/protobuf v1.25.0/go.mod h1:9JNX74DMeImyA3h4bdi1ymwjUzf21/xIlbajtzgsN7c=
-gopkg.in/check.v1 v0.0.0-20161208181325-20d25e280405 h1:yhCVgyC4o1eVCa2tZl7eS0r+SDo693bJlVdllGtEeKM=
gopkg.in/check.v1 v0.0.0-20161208181325-20d25e280405/go.mod h1:Co6ibVJAznAaIkqp8huTwlJQCZ016jof/cbN4VW5Yz0=
-gopkg.in/fsnotify.v1 v1.4.7 h1:xOHLXZwVvI9hhs+cLKq5+I5onOuwQLhQwiu63xxlHs4=
gopkg.in/fsnotify.v1 v1.4.7/go.mod h1:Tz8NjZHkW78fSQdbUxIjBTcgA1z1m8ZHf0WmKUhAMys=
-gopkg.in/tomb.v1 v1.0.0-20141024135613-dd632973f1e7 h1:uRGJdciOHaEIrze2W8Q3AKkepLTh2hOroT7a+7czfdQ=
gopkg.in/tomb.v1 v1.0.0-20141024135613-dd632973f1e7/go.mod h1:dt/ZhP58zS4L8KSrWDmTeBkI65Dw0HsyUHuEVlX15mw=
gopkg.in/yaml.v2 v2.2.1/go.mod h1:hI93XBmqTisBFMUTm0b8Fm+jr3Dg1NNxqwp+5A1VGuI=
gopkg.in/yaml.v2 v2.2.2/go.mod h1:hI93XBmqTisBFMUTm0b8Fm+jr3Dg1NNxqwp+5A1VGuI=
From 69cda4e029225726f5ce193010e11a1fa7f796f3 Mon Sep 17 00:00:00 2001
From: wdvxdr
Date: Wed, 27 Jan 2021 16:08:59 +0800
Subject: [PATCH 348/367] fix null json
---
global/filter.go | 8 +++++++-
1 file changed, 7 insertions(+), 1 deletion(-)
diff --git a/global/filter.go b/global/filter.go
index ef8588a..fdcf5fb 100644
--- a/global/filter.go
+++ b/global/filter.go
@@ -25,12 +25,18 @@ func (m MSG) Get(s string) MSG {
}
return MSG{"__str__": v} // 用这个名字应该没问题吧
}
- return MSG{}
+ return nil // 不存在为空
}
//String 将消息Map转化为String。若Map存在key "__str__",则返回此key对应的值,否则将输出整张消息Map对应的JSON字符串
func (m MSG) String() string {
+ if m == nil {
+ return "" // 空 JSON
+ }
if str, ok := m["__str__"]; ok {
+ if str == nil {
+ return "" // 空 JSON
+ }
return fmt.Sprint(str)
}
str, _ := json.MarshalToString(m)
From ae806c53bbe2de754413f1006a38e31bad847da0 Mon Sep 17 00:00:00 2001
From: Mrs4s <1844812067@qq.com>
Date: Thu, 28 Jan 2021 20:54:38 +0800
Subject: [PATCH 349/367] fix typo.
---
global/config.go | 4 ++--
main.go | 4 ++--
server/apiAdmin.go | 2 +-
3 files changed, 5 insertions(+), 5 deletions(-)
diff --git a/global/config.go b/global/config.go
index 88f5804..0abf933 100644
--- a/global/config.go
+++ b/global/config.go
@@ -277,8 +277,8 @@ func DefaultConfig() *JSONConfig {
}
}
-//Load 加载配置文件
-func Load(p string) *JSONConfig {
+//LoadConfig 加载配置文件
+func LoadConfig(p string) *JSONConfig {
if !PathExists(p) {
log.Warnf("尝试加载配置文件 %v 失败: 文件不存在", p)
return nil
diff --git a/main.go b/main.go
index 6b0dd23..58adfc5 100644
--- a/main.go
+++ b/main.go
@@ -469,7 +469,7 @@ func restart(Args []string) {
func getConfig() *global.JSONConfig {
var conf *global.JSONConfig
if global.PathExists("config.json") {
- conf = global.Load("config.json")
+ conf = global.LoadConfig("config.json")
_ = conf.Save("config.hjson")
_ = os.Remove("config.json")
} else if os.Getenv("UIN") != "" {
@@ -498,7 +498,7 @@ func getConfig() *global.JSONConfig {
conf.HTTPConfig.PostUrls[post] = os.Getenv("HTTP_SECRET")
}
} else {
- conf = global.Load("config.hjson")
+ conf = global.LoadConfig("config.hjson")
}
if conf == nil {
err := global.WriteAllText("config.hjson", global.DefaultConfigWithComments)
diff --git a/server/apiAdmin.go b/server/apiAdmin.go
index deab769..c871e3d 100644
--- a/server/apiAdmin.go
+++ b/server/apiAdmin.go
@@ -333,7 +333,7 @@ func GetConf() *global.JSONConfig {
if JSONConfig != nil {
return JSONConfig
}
- conf := global.Load("config.hjson")
+ conf := global.LoadConfig("config.hjson")
return conf
}
From ccee8ac77a13c108c3f8b7c3b06e66e267733c75 Mon Sep 17 00:00:00 2001
From: sam01101
Date: Fri, 29 Jan 2021 15:13:39 +0800
Subject: [PATCH 350/367] isFastStart setting appiled to config.hjson gen
---
main.go | 8 ++++++--
1 file changed, 6 insertions(+), 2 deletions(-)
diff --git a/main.go b/main.go
index a9c00bf..0b65eeb 100644
--- a/main.go
+++ b/main.go
@@ -139,7 +139,9 @@ func main() {
if conf.Uin == 0 || (conf.Password == "" && conf.PasswordEncrypted == "") {
log.Warnf("请修改 config.hjson 以添加账号密码.")
- time.Sleep(time.Second * 5)
+ if (!isFastStart) {
+ time.Sleep(time.Second * 5)
+ }
return
}
@@ -467,7 +469,9 @@ func getConfig() *global.JSONConfig {
return nil
}
log.Infof("默认配置文件已生成, 请编辑 config.hjson 后重启程序.")
- time.Sleep(time.Second * 5)
+ if (!isFastStart) {
+ time.Sleep(time.Second * 5)
+ }
return nil
}
return conf
From 96a036201db207d3774dd9874895b754a88cc9af Mon Sep 17 00:00:00 2001
From: sam01101
Date: Fri, 29 Jan 2021 15:16:31 +0800
Subject: [PATCH 351/367] Move isFastStart outside
---
main.go | 2 +-
1 file changed, 1 insertion(+), 1 deletion(-)
diff --git a/main.go b/main.go
index 0b65eeb..c40110e 100644
--- a/main.go
+++ b/main.go
@@ -36,6 +36,7 @@ import (
var json = jsoniter.ConfigCompatibleWithStandardLibrary
var conf *global.JSONConfig
+var isFastStart = false
func init() {
if global.PathExists("cqhttp.json") {
@@ -115,7 +116,6 @@ func init() {
func main() {
var byteKey []byte
- var isFastStart = false
arg := os.Args
if len(arg) > 1 {
for i := range arg {
From ca0b931fa419e21a059632adf2c2828cedf58e25 Mon Sep 17 00:00:00 2001
From: Mrs4s <1844812067@qq.com>
Date: Tue, 2 Feb 2021 07:13:42 +0800
Subject: [PATCH 352/367] update MiraiGo.
---
go.mod | 2 +-
go.sum | 4 ++--
2 files changed, 3 insertions(+), 3 deletions(-)
diff --git a/go.mod b/go.mod
index 0ba6b8e..72be767 100644
--- a/go.mod
+++ b/go.mod
@@ -3,7 +3,7 @@ module github.com/Mrs4s/go-cqhttp
go 1.15
require (
- github.com/Mrs4s/MiraiGo v0.0.0-20210125194401-2d334747a256
+ github.com/Mrs4s/MiraiGo v0.0.0-20210201230355-0a256bc3e036
github.com/dustin/go-humanize v1.0.0
github.com/gin-contrib/pprof v1.3.0
github.com/gin-gonic/gin v1.6.3
diff --git a/go.sum b/go.sum
index 77a485c..920f414 100644
--- a/go.sum
+++ b/go.sum
@@ -1,7 +1,7 @@
cloud.google.com/go v0.26.0/go.mod h1:aQUYkXzVsufM+DwF1aE+0xfcU+56JwCaLick0ClmMTw=
github.com/BurntSushi/toml v0.3.1/go.mod h1:xHWCNGjB5oqiDr8zfno3MHue2Ht5sIBksp03qcyfWMU=
-github.com/Mrs4s/MiraiGo v0.0.0-20210125194401-2d334747a256 h1:Hm3fth0RrraFaqZqYoYGXlD6LRokkTqgAmniMfNlzTo=
-github.com/Mrs4s/MiraiGo v0.0.0-20210125194401-2d334747a256/go.mod h1:9V7DdSwpEfCKQNvLZhRnFJFkelTU0tPLfwR5l6UFF1Y=
+github.com/Mrs4s/MiraiGo v0.0.0-20210201230355-0a256bc3e036 h1:ovIC54Ye4ayLdQzHIhIWBrtQlUdvg7WFLue/7wgtU58=
+github.com/Mrs4s/MiraiGo v0.0.0-20210201230355-0a256bc3e036/go.mod h1:yhqA0NyKxUf7I/0HR/1OMchveFggX8wde04gqdGrNfU=
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=
From 252293afb974e3ff0efd48da92b79c57249c3570 Mon Sep 17 00:00:00 2001
From: Mrs4s <1844812067@qq.com>
Date: Tue, 2 Feb 2021 07:22:38 +0800
Subject: [PATCH 353/367] update MiraiGo. fix #605
---
go.mod | 2 +-
go.sum | 4 ++--
2 files changed, 3 insertions(+), 3 deletions(-)
diff --git a/go.mod b/go.mod
index 72be767..da31ad4 100644
--- a/go.mod
+++ b/go.mod
@@ -3,7 +3,7 @@ module github.com/Mrs4s/go-cqhttp
go 1.15
require (
- github.com/Mrs4s/MiraiGo v0.0.0-20210201230355-0a256bc3e036
+ github.com/Mrs4s/MiraiGo v0.0.0-20210201231921-a24c4fbd9022
github.com/dustin/go-humanize v1.0.0
github.com/gin-contrib/pprof v1.3.0
github.com/gin-gonic/gin v1.6.3
diff --git a/go.sum b/go.sum
index 920f414..ec17428 100644
--- a/go.sum
+++ b/go.sum
@@ -1,7 +1,7 @@
cloud.google.com/go v0.26.0/go.mod h1:aQUYkXzVsufM+DwF1aE+0xfcU+56JwCaLick0ClmMTw=
github.com/BurntSushi/toml v0.3.1/go.mod h1:xHWCNGjB5oqiDr8zfno3MHue2Ht5sIBksp03qcyfWMU=
-github.com/Mrs4s/MiraiGo v0.0.0-20210201230355-0a256bc3e036 h1:ovIC54Ye4ayLdQzHIhIWBrtQlUdvg7WFLue/7wgtU58=
-github.com/Mrs4s/MiraiGo v0.0.0-20210201230355-0a256bc3e036/go.mod h1:yhqA0NyKxUf7I/0HR/1OMchveFggX8wde04gqdGrNfU=
+github.com/Mrs4s/MiraiGo v0.0.0-20210201231921-a24c4fbd9022 h1:EB25KxWJqgyhU4S86kaiofZMiGuWzw63bzqE3annr7E=
+github.com/Mrs4s/MiraiGo v0.0.0-20210201231921-a24c4fbd9022/go.mod h1:yhqA0NyKxUf7I/0HR/1OMchveFggX8wde04gqdGrNfU=
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=
From 08dea6dcf1a2448170670ca372cfcaa1cc68713d Mon Sep 17 00:00:00 2001
From: Mrs4s <1844812067@qq.com>
Date: Tue, 2 Feb 2021 07:51:39 +0800
Subject: [PATCH 354/367] update MiraiGo. fix #604
---
go.mod | 2 +-
go.sum | 4 ++--
2 files changed, 3 insertions(+), 3 deletions(-)
diff --git a/go.mod b/go.mod
index da31ad4..9359d85 100644
--- a/go.mod
+++ b/go.mod
@@ -3,7 +3,7 @@ module github.com/Mrs4s/go-cqhttp
go 1.15
require (
- github.com/Mrs4s/MiraiGo v0.0.0-20210201231921-a24c4fbd9022
+ github.com/Mrs4s/MiraiGo v0.0.0-20210201234941-c69e578d0815
github.com/dustin/go-humanize v1.0.0
github.com/gin-contrib/pprof v1.3.0
github.com/gin-gonic/gin v1.6.3
diff --git a/go.sum b/go.sum
index ec17428..673b3be 100644
--- a/go.sum
+++ b/go.sum
@@ -1,7 +1,7 @@
cloud.google.com/go v0.26.0/go.mod h1:aQUYkXzVsufM+DwF1aE+0xfcU+56JwCaLick0ClmMTw=
github.com/BurntSushi/toml v0.3.1/go.mod h1:xHWCNGjB5oqiDr8zfno3MHue2Ht5sIBksp03qcyfWMU=
-github.com/Mrs4s/MiraiGo v0.0.0-20210201231921-a24c4fbd9022 h1:EB25KxWJqgyhU4S86kaiofZMiGuWzw63bzqE3annr7E=
-github.com/Mrs4s/MiraiGo v0.0.0-20210201231921-a24c4fbd9022/go.mod h1:yhqA0NyKxUf7I/0HR/1OMchveFggX8wde04gqdGrNfU=
+github.com/Mrs4s/MiraiGo v0.0.0-20210201234941-c69e578d0815 h1:WW2YfA+0+LSa/0VlWVhnfrXXatcE09paHgPgfPxlIMk=
+github.com/Mrs4s/MiraiGo v0.0.0-20210201234941-c69e578d0815/go.mod h1:yhqA0NyKxUf7I/0HR/1OMchveFggX8wde04gqdGrNfU=
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=
From 08567ec240abb2e254b9cc5609b586dd1be7b042 Mon Sep 17 00:00:00 2001
From: Mrs4s <1844812067@qq.com>
Date: Tue, 2 Feb 2021 07:53:41 +0800
Subject: [PATCH 355/367] fix message history media.
---
coolq/api.go | 1 +
1 file changed, 1 insertion(+)
diff --git a/coolq/api.go b/coolq/api.go
index b59e538..713c0ab 100644
--- a/coolq/api.go
+++ b/coolq/api.go
@@ -867,6 +867,7 @@ func (bot *CQBot) CQGetGroupMessageHistory(groupId int64, seq int64) MSG {
var ms []MSG
for _, m := range msg {
id := m.Id
+ bot.checkMedia(m.Elements)
if bot.db != nil {
id = bot.InsertGroupMessage(m)
}
From 5b57aeb1d1dfc9cb72e8de636e3e2d53dbcd6b43 Mon Sep 17 00:00:00 2001
From: wdvxdr
Date: Tue, 2 Feb 2021 22:12:47 +0800
Subject: [PATCH 356/367] get group info by search
---
coolq/api.go | 17 ++++++++++++++++-
go.mod | 2 +-
go.sum | 2 ++
3 files changed, 19 insertions(+), 2 deletions(-)
diff --git a/coolq/api.go b/coolq/api.go
index 713c0ab..e55afc9 100644
--- a/coolq/api.go
+++ b/coolq/api.go
@@ -62,7 +62,22 @@ func (bot *CQBot) CQGetGroupList(noCache bool) MSG {
func (bot *CQBot) CQGetGroupInfo(groupId int64, noCache bool) MSG {
group := bot.Client.FindGroup(groupId)
if group == nil {
- return Failed(100, "GROUP_NOT_FOUND", "群聊不存在")
+ gid := strconv.FormatInt(groupId, 10)
+ info, err := bot.Client.SearchGroupByKeyword(gid)
+ if err != nil {
+ return Failed(100, "GROUP_SEARCH_ERROR", "群聊搜索失败")
+ }
+ for _, g := range info {
+ if g.Code == groupId {
+ return OK(MSG{
+ "group_id": g.Code,
+ "group_name": g.Name,
+ "max_member_count": 0,
+ "member_count": 0,
+ })
+ }
+ }
+ return Failed(100, "GROUP_NOT_FOUND", "群聊不存在失败")
}
if noCache {
var err error
diff --git a/go.mod b/go.mod
index 9359d85..ded4c99 100644
--- a/go.mod
+++ b/go.mod
@@ -3,7 +3,7 @@ module github.com/Mrs4s/go-cqhttp
go 1.15
require (
- github.com/Mrs4s/MiraiGo v0.0.0-20210201234941-c69e578d0815
+ github.com/Mrs4s/MiraiGo v0.0.0-20210202135946-553229fea92e
github.com/dustin/go-humanize v1.0.0
github.com/gin-contrib/pprof v1.3.0
github.com/gin-gonic/gin v1.6.3
diff --git a/go.sum b/go.sum
index 673b3be..e9741f8 100644
--- a/go.sum
+++ b/go.sum
@@ -2,6 +2,8 @@ cloud.google.com/go v0.26.0/go.mod h1:aQUYkXzVsufM+DwF1aE+0xfcU+56JwCaLick0ClmMT
github.com/BurntSushi/toml v0.3.1/go.mod h1:xHWCNGjB5oqiDr8zfno3MHue2Ht5sIBksp03qcyfWMU=
github.com/Mrs4s/MiraiGo v0.0.0-20210201234941-c69e578d0815 h1:WW2YfA+0+LSa/0VlWVhnfrXXatcE09paHgPgfPxlIMk=
github.com/Mrs4s/MiraiGo v0.0.0-20210201234941-c69e578d0815/go.mod h1:yhqA0NyKxUf7I/0HR/1OMchveFggX8wde04gqdGrNfU=
+github.com/Mrs4s/MiraiGo v0.0.0-20210202135946-553229fea92e h1:5rZXeo+KW1vNq5fM7DowITQgm8r7HuH6w9tScWJ5GQQ=
+github.com/Mrs4s/MiraiGo v0.0.0-20210202135946-553229fea92e/go.mod h1:yhqA0NyKxUf7I/0HR/1OMchveFggX8wde04gqdGrNfU=
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=
From 89d466d3e1fa74fc32bb1da0245bfe41d13a5fda Mon Sep 17 00:00:00 2001
From: wdvxdr
Date: Tue, 2 Feb 2021 23:36:05 +0800
Subject: [PATCH 357/367] feat group essence msg operate
---
coolq/api.go | 63 +++++++++++++++++++++++++++++++++++++++++++++
coolq/bot.go | 1 +
coolq/event.go | 40 ++++++++++++++++++++++++++++
go.mod | 2 +-
go.sum | 21 +++++++++++++--
main.go | 6 ++---
server/http.go | 18 +++++++++++++
server/websocket.go | 9 +++++++
8 files changed, 154 insertions(+), 6 deletions(-)
diff --git a/coolq/api.go b/coolq/api.go
index 713c0ab..4a5995c 100644
--- a/coolq/api.go
+++ b/coolq/api.go
@@ -973,6 +973,69 @@ func (bot *CQBot) CQGetStatus() MSG {
})
}
+// CQSetEssenceMessage 设置精华消息
+func (bot *CQBot) CQSetEssenceMessage(messageID int32) MSG {
+ msg := bot.GetMessage(messageID)
+ if msg == nil {
+ return Failed(100, "MESSAGE_NOT_FOUND", "消息不存在")
+ }
+ if _, ok := msg["group"]; ok {
+ if err := bot.Client.SetEssenceMessage(msg["group"].(int64), msg["message-id"].(int32), msg["internal-id"].(int32)); err != nil {
+ log.Warnf("设置精华消息 %v 失败: %v", messageID, err)
+ return Failed(100, "SET_ESSENCE_MSG_ERROR", err.Error())
+ }
+ } else {
+ log.Warnf("设置精华消息 %v 失败: 非群聊", messageID)
+ return Failed(100, "SET_ESSENCE_MSG_ERROR", "非群聊")
+ }
+ return OK(nil)
+}
+
+// CQDeleteEssenceMessage 移出精华消息
+func (bot *CQBot) CQDeleteEssenceMessage(messageID int32) MSG {
+ msg := bot.GetMessage(messageID)
+ if msg == nil {
+ return Failed(100, "MESSAGE_NOT_FOUND", "消息不存在")
+ }
+ if _, ok := msg["group"]; ok {
+ if err := bot.Client.DeleteEssenceMessage(msg["group"].(int64), msg["message-id"].(int32), msg["internal-id"].(int32)); err != nil {
+ log.Warnf("移出精华消息 %v 失败: %v", messageID, err)
+ return Failed(100, "DEL_ESSENCE_MSG_ERROR", err.Error())
+ }
+ } else {
+ log.Warnf("移出精华消息 %v 失败: 非群聊", messageID)
+ return Failed(100, "DEL_ESSENCE_MSG_ERROR", "非群聊")
+ }
+ return OK(nil)
+}
+
+// CQGetEssenceMessageList 获取精华消息列表
+func (bot *CQBot) CQGetEssenceMessageList(groupCode int64) MSG {
+ g := bot.Client.FindGroup(groupCode)
+ if g == nil {
+ return Failed(100, "GROUP_NOT_FOUND", "群聊不存在")
+ }
+ msgList, err := bot.Client.GetGroupEssenceMsgList(groupCode)
+ if err != nil {
+ return Failed(100, "GET_ESSENCE_LIST_FOUND", err.Error())
+ }
+ list := make([]MSG, 0)
+ for _, m := range msgList {
+ var msg = MSG{
+ "sender_nick": m.SenderNick,
+ "sender_time": m.SenderTime,
+ "operator_time": m.AddDigestTime,
+ "operator_nick": m.AddDigestNick,
+ "group_code": groupCode,
+ }
+ msg["sender_uin"], _ = strconv.ParseUint(m.SenderUin, 10, 64)
+ msg["operator_uin"], _ = strconv.ParseUint(m.AddDigestUin, 10, 64)
+ msg["message_id"] = ToGlobalId(groupCode, int32(m.MessageID))
+ list = append(list, msg)
+ }
+ return OK(list)
+}
+
func (bot *CQBot) CQGetVersionInfo() MSG {
wd, _ := os.Getwd()
return OK(MSG{
diff --git a/coolq/bot.go b/coolq/bot.go
index 81eee07..bad338f 100644
--- a/coolq/bot.go
+++ b/coolq/bot.go
@@ -78,6 +78,7 @@ func NewQQBot(cli *client.QQClient, conf *global.JSONConfig) *CQBot {
bot.Client.OnGroupInvited(bot.groupInvitedEvent)
bot.Client.OnUserWantJoinGroup(bot.groupJoinReqEvent)
bot.Client.OnOtherClientStatusChanged(bot.otherClientStatusChangedEvent)
+ bot.Client.OnGroupDigest(bot.groupEssenceMsg)
go func() {
i := conf.HeartbeatInterval
if i < 0 {
diff --git a/coolq/event.go b/coolq/event.go
index a2dfcd1..9299751 100644
--- a/coolq/event.go
+++ b/coolq/event.go
@@ -431,7 +431,47 @@ func (bot *CQBot) otherClientStatusChangedEvent(c *client.QQClient, e *client.Ot
"self_id": c.Uin,
"time": time.Now().Unix(),
})
+}
+func (bot *CQBot) groupEssenceMsg(c *client.QQClient, e *client.GroupDigestEvent) {
+ g := c.FindGroup(e.GroupCode)
+ gid := ToGlobalId(e.GroupCode, e.MessageID)
+ if e.OperationType == 1 {
+ log.Infof(
+ "群 %v 内 %v 将 %v 的消息(%v)设为了精华消息.",
+ formatGroupName(g),
+ formatMemberName(g.FindMember(e.OperatorUin)),
+ formatMemberName(g.FindMember(e.SenderUin)),
+ gid,
+ )
+ } else {
+ log.Infof(
+ "群 %v 内 %v 将 %v 的消息(%v)移出了精华消息.",
+ formatGroupName(g),
+ formatMemberName(g.FindMember(e.OperatorUin)),
+ formatMemberName(g.FindMember(e.SenderUin)),
+ gid,
+ )
+ }
+ if e.OperatorUin == bot.Client.Uin {
+ return
+ }
+ bot.dispatchEventMessage(MSG{
+ "post_type": "notice",
+ "group_id": e.GroupCode,
+ "notice_type": "essence",
+ "sub_type": func() string {
+ if e.OperationType == 1 {
+ return "add"
+ }
+ return "delete"
+ }(),
+ "self_id": c.Uin,
+ "sender_id": e.SenderUin,
+ "operator_id": e.OperatorUin,
+ "time": time.Now().Unix(),
+ "message_id": gid,
+ })
}
func (bot *CQBot) groupIncrease(groupCode, operatorUin, userUin int64) MSG {
diff --git a/go.mod b/go.mod
index 9359d85..ded4c99 100644
--- a/go.mod
+++ b/go.mod
@@ -3,7 +3,7 @@ module github.com/Mrs4s/go-cqhttp
go 1.15
require (
- github.com/Mrs4s/MiraiGo v0.0.0-20210201234941-c69e578d0815
+ github.com/Mrs4s/MiraiGo v0.0.0-20210202135946-553229fea92e
github.com/dustin/go-humanize v1.0.0
github.com/gin-contrib/pprof v1.3.0
github.com/gin-gonic/gin v1.6.3
diff --git a/go.sum b/go.sum
index 673b3be..213daa2 100644
--- a/go.sum
+++ b/go.sum
@@ -1,15 +1,17 @@
cloud.google.com/go v0.26.0/go.mod h1:aQUYkXzVsufM+DwF1aE+0xfcU+56JwCaLick0ClmMTw=
github.com/BurntSushi/toml v0.3.1/go.mod h1:xHWCNGjB5oqiDr8zfno3MHue2Ht5sIBksp03qcyfWMU=
-github.com/Mrs4s/MiraiGo v0.0.0-20210201234941-c69e578d0815 h1:WW2YfA+0+LSa/0VlWVhnfrXXatcE09paHgPgfPxlIMk=
-github.com/Mrs4s/MiraiGo v0.0.0-20210201234941-c69e578d0815/go.mod h1:yhqA0NyKxUf7I/0HR/1OMchveFggX8wde04gqdGrNfU=
+github.com/Mrs4s/MiraiGo v0.0.0-20210202135946-553229fea92e h1:5rZXeo+KW1vNq5fM7DowITQgm8r7HuH6w9tScWJ5GQQ=
+github.com/Mrs4s/MiraiGo v0.0.0-20210202135946-553229fea92e/go.mod h1:yhqA0NyKxUf7I/0HR/1OMchveFggX8wde04gqdGrNfU=
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=
+github.com/davecgh/go-spew v1.1.1 h1:vj9j/u1bqnvCEfJOwUhtlOARqs3+rkHYY13jYWTU97c=
github.com/davecgh/go-spew v1.1.1/go.mod h1:J7Y8YcW2NihsgmVo/mv3lAwl/skON4iLHjSsI+c5H38=
github.com/dustin/go-humanize v1.0.0 h1:VSnTsYCnlFHaM2/igO1h6X3HA71jcobQuxemgkq4zYo=
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/fsnotify/fsnotify v1.4.7 h1:IXs+QLmnXW2CcXuY+8Mzv/fWEsPGWxqefPtCP5CnV9I=
github.com/fsnotify/fsnotify v1.4.7/go.mod h1:jwhsz4b93w/PPRr/qN1Yymfu8t87LnFCMoQvtojpjFo=
github.com/gin-contrib/pprof v1.3.0 h1:G9eK6HnbkSqDZBYbzG4wrjCsA4e+cvYAHUZw6W+W9K0=
github.com/gin-contrib/pprof v1.3.0/go.mod h1:waMjT1H9b179t3CxuG1cV3DHpga6ybizwfBaM5OXaB0=
@@ -19,6 +21,7 @@ github.com/gin-gonic/gin v1.6.0/go.mod h1:75u5sXoLsGZoRN5Sgbi1eraJ4GU3++wFwWzhwv
github.com/gin-gonic/gin v1.6.2/go.mod h1:75u5sXoLsGZoRN5Sgbi1eraJ4GU3++wFwWzhwvtwp4M=
github.com/gin-gonic/gin v1.6.3 h1:ahKqKTFpO5KTPHxWZjEdPScmYaGtLo8Y4DMHoEsnp14=
github.com/gin-gonic/gin v1.6.3/go.mod h1:75u5sXoLsGZoRN5Sgbi1eraJ4GU3++wFwWzhwvtwp4M=
+github.com/go-playground/assert/v2 v2.0.1 h1:MsBgLAaY856+nPRTKrp3/OZK38U/wa0CcBYNjji3q3A=
github.com/go-playground/assert/v2 v2.0.1/go.mod h1:VDjEfimB/XKnb+ZQfWdccd7VUvScMdVu0Titje2rxJ4=
github.com/go-playground/locales v0.13.0 h1:HyWk6mgj5qFqCT5fjGBuRArbVDfE4hi8+e8ceBS/t7Q=
github.com/go-playground/locales v0.13.0/go.mod h1:taPMhCMXrRLJO55olJkUXHZBHCxTMfnGwq/HNwmWNS8=
@@ -45,8 +48,10 @@ github.com/google/go-cmp v0.2.0/go.mod h1:oXzfMopK8JAjlY9xF4vHSVASa0yLyX7SntLO5a
github.com/google/go-cmp v0.3.0/go.mod h1:8QqcDgzrUqlUb/G2PQTWiueGozuR1884gddMywk6iLU=
github.com/google/go-cmp v0.3.1/go.mod h1:8QqcDgzrUqlUb/G2PQTWiueGozuR1884gddMywk6iLU=
github.com/google/go-cmp v0.4.0/go.mod h1:v8dTdLbMG2kIc/vJvl+f65V22dbkXbowE6jgT/gNBxE=
+github.com/google/go-cmp v0.5.0 h1:/QaMHBdZ26BB3SSst0Iwl10Epc+xhTquomWX0oZEB6w=
github.com/google/go-cmp v0.5.0/go.mod h1:v8dTdLbMG2kIc/vJvl+f65V22dbkXbowE6jgT/gNBxE=
github.com/google/gofuzz v1.0.0/go.mod h1:dBl0BpW6vV/+mYPU4Po3pmUjxk6FQPldtuIdl/M65Eg=
+github.com/google/uuid v1.1.1 h1:Gkbcsh/GbpXz7lPftLA3P6TYMwjCLYm83jiFQZF/3gY=
github.com/google/uuid v1.1.1/go.mod h1:TIyPZe4MgqvfeYDBFedMoGGpEw/LqOeaOT+nhxU+yHo=
github.com/gorilla/websocket v1.4.2 h1:+/TMaTYc4QFitKJxsQ7Yye35DkWvkdLcvGKqM+x0Ufc=
github.com/gorilla/websocket v1.4.2/go.mod h1:YR8l580nyteQvAITg2hZ9XVh4b55+EU/adAjf1fMHhE=
@@ -54,7 +59,9 @@ github.com/guonaihong/gout v0.1.4 h1:uBBoyztMX9okC27OQxqhn6bZ0ROkGyvnEIHwtp3TM4g
github.com/guonaihong/gout v0.1.4/go.mod h1:0rFYAYyzbcxEg11eY2qUbffJs7hHRPeugAnlVYSp8Ic=
github.com/hjson/hjson-go v3.1.0+incompatible h1:DY/9yE8ey8Zv22bY+mHV1uk2yRy0h8tKhZ77hEdi0Aw=
github.com/hjson/hjson-go v3.1.0+incompatible/go.mod h1:qsetwF8NlsTsOTwZTApNlTCerV+b2GjYRRcIk4JMFio=
+github.com/hpcloud/tail v1.0.0 h1:nfCOvKYfkgYP8hkirhJocXT2+zOD8yUNjXaWfTlyFKI=
github.com/hpcloud/tail v1.0.0/go.mod h1:ab1qPbhIpdTxEkNHXyeSf5vhxWSCs/tWer42PpOxQnU=
+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.9/go.mod h1:KdQUCv79m/52Kvf8AW2vK1V8akMuk1QjK/uOdHXbAo4=
github.com/json-iterator/go v1.1.10 h1:Kz6Cvnvv2wGdaG/V8yMvfkmNiXq9Ya2KUv4rouJJr68=
@@ -64,6 +71,7 @@ github.com/kardianos/osext v0.0.0-20190222173326-2bc1f35cddc0/go.mod h1:1NbS8ALr
github.com/konsorten/go-windows-terminal-sequences v1.0.1/go.mod h1:T0+1ngSBFLxvqU3pZ+m/2kptfBszLMUkC4ZK/EgS/cQ=
github.com/leodido/go-urn v1.2.0 h1:hpXL4XnriNwQ/ABnpepYM/1vCLWNDfUNts8dX3xTG6Y=
github.com/leodido/go-urn v1.2.0/go.mod h1:+8+nEpDfqqsY+g338gtMEUOtuK+4dEMhiQEgxpxOKII=
+github.com/lestrrat-go/envload v0.0.0-20180220234015-a3eb8ddeffcc h1:RKf14vYWi2ttpEmkA4aQ3j4u9dStX2t4M8UM6qqNsG8=
github.com/lestrrat-go/envload v0.0.0-20180220234015-a3eb8ddeffcc/go.mod h1:kopuH9ugFRkIXf3YoqHKyrJ9YfUFsckUU9S7B+XP+is=
github.com/lestrrat-go/file-rotatelogs v2.4.0+incompatible h1:Y6sqxHMyB1D2YSzWkLibYKgg+SwmyFU9dF2hn6MdTj4=
github.com/lestrrat-go/file-rotatelogs v2.4.0+incompatible/go.mod h1:ZQnN8lSECaebrkQytbHj4xNgtg8CR7RYXnPok8e0EHA=
@@ -78,11 +86,14 @@ github.com/modern-go/reflect2 v0.0.0-20180701023420-4b7aa43c6742/go.mod h1:bx2lN
github.com/nfnt/resize v0.0.0-20180221191011-83c6a9932646 h1:zYyBkD/k9seD2A7fsi6Oo2LfFZAehjjQMERAvZLEDnQ=
github.com/nfnt/resize v0.0.0-20180221191011-83c6a9932646/go.mod h1:jpp1/29i3P1S/RLdc7JQKbRpFeM1dOBd8T9ki5s+AY8=
github.com/onsi/ginkgo v1.6.0/go.mod h1:lLunBs/Ym6LB5Z9jYTR76FiuTmxDTDusOGeTQH+WWjE=
+github.com/onsi/ginkgo v1.7.0 h1:WSHQ+IS43OoUrWtD1/bbclrwK8TTH5hzp+umCiuxHgs=
github.com/onsi/ginkgo v1.7.0/go.mod h1:lLunBs/Ym6LB5Z9jYTR76FiuTmxDTDusOGeTQH+WWjE=
+github.com/onsi/gomega v1.4.3 h1:RE1xgDvH7imwFD45h+u2SgIfERHlS2yNG4DObb5BSKU=
github.com/onsi/gomega v1.4.3/go.mod h1:ex+gbHU/CVuBBDIJjb2X0qEXbFg53c61hWP/1CpauHY=
github.com/pkg/errors v0.8.1/go.mod h1:bwawxfHBFNV+L2hUp1rHADufV3IMtnDRdf1r5NINEl0=
github.com/pkg/errors v0.9.1 h1:FEBLx1zS214owpjy7qsBeixbURkuhQAwrK5UwLGTwt4=
github.com/pkg/errors v0.9.1/go.mod h1:bwawxfHBFNV+L2hUp1rHADufV3IMtnDRdf1r5NINEl0=
+github.com/pmezard/go-difflib v1.0.0 h1:4DBwDE0NGyQoBHbLQYPwSUPoCMWR5BEzIk/f1lZbAQM=
github.com/pmezard/go-difflib v1.0.0/go.mod h1:iKH77koFhYxTK1pcRnkKkqfTogsbg7gZNVY4sRDYZ/4=
github.com/prometheus/client_model v0.0.0-20190812154241-14fe0d1b01d4/go.mod h1:xMI15A0UPsDsEKsMN9yxemIoYk6Tm2C1GtYGdfGttqA=
github.com/sirupsen/logrus v1.4.2/go.mod h1:tLMulIdttU9McNUspp0xgXVQah82FyeX6MwdIuYE2rE=
@@ -92,6 +103,7 @@ github.com/stretchr/objx v0.1.0/go.mod h1:HFkY916IF+rwdDfMAkV7OtwuqBVzrE8GR6GFx+
github.com/stretchr/objx v0.1.1/go.mod h1:HFkY916IF+rwdDfMAkV7OtwuqBVzrE8GR6GFx+wExME=
github.com/stretchr/testify v1.2.2/go.mod h1:a8OnRcib4nhh0OaRAV+Yts87kKdq0PP7pXfy6kDkUVs=
github.com/stretchr/testify v1.3.0/go.mod h1:M5WIy9Dh21IEIfnGCwXGc5bZfKNJtfHm1UVUgZn+9EI=
+github.com/stretchr/testify v1.4.0 h1:2E4SXV/wtOkTonXsotYi4li6zVWxYlZuYNCXe9XRJyk=
github.com/stretchr/testify v1.4.0/go.mod h1:j7eGeouHqKxXV5pUuKE4zz7dFj8WfuZ+81PSLYec5m4=
github.com/syndtr/goleveldb v1.0.0 h1:fBdIW9lB4Iz0n9khmH8w27SJ3QEJ7+IgjPEwGSZiFdE=
github.com/syndtr/goleveldb v1.0.0/go.mod h1:ZVVdQEZoIme9iO1Ch2Jdy24qqXrMMOU6lpPAyBWyWuQ=
@@ -137,6 +149,7 @@ golang.org/x/sys v0.0.0-20201119102817-f84b799fce68/go.mod h1:h1NjWce9XRLGQEsW7w
golang.org/x/term v0.0.0-20201210144234-2321bbc49cbf h1:MZ2shdL+ZM/XzY3ZGOnh4Nlpnxz5GSOhOmtHo3iPU6M=
golang.org/x/term v0.0.0-20201210144234-2321bbc49cbf/go.mod h1:bj7SfCRtBDWHUb9snDiAeCFNEtKQo2Wmx5Cou7ajbmo=
golang.org/x/text v0.3.0/go.mod h1:NqM8EUOU14njkJ3fqMW+pc6Ldnwhi/IjpwHt7yyuwOQ=
+golang.org/x/text v0.3.2 h1:tW2bmiBqwgJj/UpqtC8EpXEZVYOwU0yG4iWbprSVAcs=
golang.org/x/text v0.3.2/go.mod h1:bEr9sfX3Q8Zfm5fL9x+3itogRgK3+ptLWKqgva+5dAk=
golang.org/x/time v0.0.0-20201208040808-7e3f01d25324 h1:Hir2P/De0WpUhtrKGGjvSb2YxUgyZ7EFOSLIcSSpiwE=
golang.org/x/time v0.0.0-20201208040808-7e3f01d25324/go.mod h1:tRJNPiyCQ0inRvYxbN9jk5I+vvW/OXSQhTDSoE431IQ=
@@ -145,6 +158,7 @@ golang.org/x/tools v0.0.0-20190114222345-bf090417da8b/go.mod h1:n7NCudcB/nEzxVGm
golang.org/x/tools v0.0.0-20190226205152-f727befe758c/go.mod h1:9Yl7xja0Znq3iFh3HoIrodX9oNMXvdceNzlUR8zjMvY=
golang.org/x/tools v0.0.0-20190311212946-11955173bddd/go.mod h1:LCzVGOaR6xXOjkQ3onu1FJEFr0SW1gC7cKk1uF8kGRs=
golang.org/x/tools v0.0.0-20190524140312-2c0ae7006135/go.mod h1:RgjU9mgBXZiqYHBnxXauZ1Gv1EHHAz9KjViQ78xBX0Q=
+golang.org/x/xerrors v0.0.0-20191204190536-9bdfabe68543 h1:E7g+9GITq07hpfrRu66IVDexMakfv52eLZ2CXBWiKr4=
golang.org/x/xerrors v0.0.0-20191204190536-9bdfabe68543/go.mod h1:I/5z698sn9Ka8TeJc9MKroUUfqBBauWjQqLJ2OPfmY0=
google.golang.org/appengine v1.1.0/go.mod h1:EbEs0AVv82hx2wNQdGPgUI5lhzA/G0D9YwlJXL52JkM=
google.golang.org/appengine v1.4.0/go.mod h1:xpcJRLb0r/rnEns0DIKYYv+WjYCduHsrkT7/EB5XEv4=
@@ -164,8 +178,11 @@ google.golang.org/protobuf v1.23.0/go.mod h1:EGpADcykh3NcUnDUJcl1+ZksZNG86OlYog2
google.golang.org/protobuf v1.23.1-0.20200526195155-81db48ad09cc/go.mod h1:EGpADcykh3NcUnDUJcl1+ZksZNG86OlYog2l/sGQquU=
google.golang.org/protobuf v1.25.0 h1:Ejskq+SyPohKW+1uil0JJMtmHCgJPJ/qWTxr8qp+R4c=
google.golang.org/protobuf v1.25.0/go.mod h1:9JNX74DMeImyA3h4bdi1ymwjUzf21/xIlbajtzgsN7c=
+gopkg.in/check.v1 v0.0.0-20161208181325-20d25e280405 h1:yhCVgyC4o1eVCa2tZl7eS0r+SDo693bJlVdllGtEeKM=
gopkg.in/check.v1 v0.0.0-20161208181325-20d25e280405/go.mod h1:Co6ibVJAznAaIkqp8huTwlJQCZ016jof/cbN4VW5Yz0=
+gopkg.in/fsnotify.v1 v1.4.7 h1:xOHLXZwVvI9hhs+cLKq5+I5onOuwQLhQwiu63xxlHs4=
gopkg.in/fsnotify.v1 v1.4.7/go.mod h1:Tz8NjZHkW78fSQdbUxIjBTcgA1z1m8ZHf0WmKUhAMys=
+gopkg.in/tomb.v1 v1.0.0-20141024135613-dd632973f1e7 h1:uRGJdciOHaEIrze2W8Q3AKkepLTh2hOroT7a+7czfdQ=
gopkg.in/tomb.v1 v1.0.0-20141024135613-dd632973f1e7/go.mod h1:dt/ZhP58zS4L8KSrWDmTeBkI65Dw0HsyUHuEVlX15mw=
gopkg.in/yaml.v2 v2.2.1/go.mod h1:hI93XBmqTisBFMUTm0b8Fm+jr3Dg1NNxqwp+5A1VGuI=
gopkg.in/yaml.v2 v2.2.2/go.mod h1:hI93XBmqTisBFMUTm0b8Fm+jr3Dg1NNxqwp+5A1VGuI=
diff --git a/main.go b/main.go
index f6fb1ab..327663b 100644
--- a/main.go
+++ b/main.go
@@ -143,8 +143,8 @@ func main() {
if conf.Uin == 0 || (conf.Password == "" && conf.PasswordEncrypted == "") {
log.Warnf("请修改 config.hjson 以添加账号密码.")
- if (!isFastStart) {
- time.Sleep(time.Second * 5)
+ if !isFastStart {
+ time.Sleep(time.Second * 5)
}
return
}
@@ -509,7 +509,7 @@ func getConfig() *global.JSONConfig {
return nil
}
log.Infof("默认配置文件已生成, 请编辑 config.hjson 后重启程序.")
- if (!isFastStart) {
+ if !isFastStart {
time.Sleep(time.Second * 5)
}
return nil
diff --git a/server/http.go b/server/http.go
index 8b6832c..f63ce2d 100644
--- a/server/http.go
+++ b/server/http.go
@@ -486,6 +486,21 @@ func SetGroupPortrait(s *httpServer, c *gin.Context) {
c.JSON(200, s.bot.CQSetGroupPortrait(gid, file, cache))
}
+func SetEssenceMsg(s *httpServer, c *gin.Context) {
+ mid, _ := strconv.ParseInt(getParam(c, "message_id"), 10, 64)
+ c.JSON(200, s.bot.CQSetEssenceMessage(int32(mid)))
+}
+
+func DeleteEssenceMsg(s *httpServer, c *gin.Context) {
+ mid, _ := strconv.ParseInt(getParam(c, "message_id"), 10, 64)
+ c.JSON(200, s.bot.CQDeleteEssenceMessage(int32(mid)))
+}
+
+func GetEssenceMsgList(s *httpServer, c *gin.Context) {
+ gid, _ := strconv.ParseInt(getParam(c, "group_id"), 10, 64)
+ c.JSON(200, s.bot.CQGetEssenceMessageList(gid))
+}
+
func getParamOrDefault(c *gin.Context, k, def string) string {
r := getParam(c, k)
if r != "" {
@@ -545,11 +560,13 @@ var httpApi = map[string]func(s *httpServer, c *gin.Context){
"get_group_root_files": GetGroupRootFiles,
"get_group_files_by_folder": GetGroupFilesByFolderId,
"get_group_file_url": GetGroupFileUrl,
+ "get_essence_msg_list": GetEssenceMsgList,
"send_msg": SendMessage,
"send_group_msg": SendGroupMessage,
"send_group_forward_msg": SendGroupForwardMessage,
"send_private_msg": SendPrivateMessage,
"delete_msg": DeleteMessage,
+ "delete_essence_msg": DeleteEssenceMsg,
"set_friend_add_request": ProcessFriendRequest,
"set_group_add_request": ProcessGroupRequest,
"set_group_card": SetGroupCard,
@@ -559,6 +576,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_essence_msg": SetEssenceMsg,
"set_restart": SetRestart,
"_send_group_notice": SendGroupNotice,
"set_group_leave": SetGroupLeave,
diff --git a/server/websocket.go b/server/websocket.go
index 78e0ae0..6b7a829 100644
--- a/server/websocket.go
+++ b/server/websocket.go
@@ -589,6 +589,15 @@ var wsAPI = map[string]func(*coolq.CQBot, gjson.Result) coolq.MSG{
"set_group_portrait": func(bot *coolq.CQBot, p gjson.Result) coolq.MSG {
return bot.CQSetGroupPortrait(p.Get("group_id").Int(), p.Get("file").String(), p.Get("cache").String())
},
+ "set_essence_msg": func(bot *coolq.CQBot, p gjson.Result) coolq.MSG {
+ return bot.CQSetEssenceMessage(int32(p.Get("message_id").Int()))
+ },
+ "delete_essence_msg": func(bot *coolq.CQBot, p gjson.Result) coolq.MSG {
+ return bot.CQDeleteEssenceMessage(int32(p.Get("message_id").Int()))
+ },
+ "get_essence_msg_list": func(bot *coolq.CQBot, p gjson.Result) coolq.MSG {
+ return bot.CQGetEssenceMessageList(p.Get("group_id").Int())
+ },
"set_group_anonymous_ban": func(bot *coolq.CQBot, p gjson.Result) coolq.MSG {
obj := p.Get("anonymous")
flag := p.Get("anonymous_flag")
From 7da1918c0cb1fb655e69973e6c123b31d6902137 Mon Sep 17 00:00:00 2001
From: wdvxdr
Date: Tue, 2 Feb 2021 23:59:00 +0800
Subject: [PATCH 358/367] update docs
---
coolq/api.go | 5 ++--
docs/cqhttp.md | 73 ++++++++++++++++++++++++++++++++++++++++++++++++--
2 files changed, 73 insertions(+), 5 deletions(-)
diff --git a/coolq/api.go b/coolq/api.go
index 4a5995c..d4fa848 100644
--- a/coolq/api.go
+++ b/coolq/api.go
@@ -1026,10 +1026,9 @@ func (bot *CQBot) CQGetEssenceMessageList(groupCode int64) MSG {
"sender_time": m.SenderTime,
"operator_time": m.AddDigestTime,
"operator_nick": m.AddDigestNick,
- "group_code": groupCode,
}
- msg["sender_uin"], _ = strconv.ParseUint(m.SenderUin, 10, 64)
- msg["operator_uin"], _ = strconv.ParseUint(m.AddDigestUin, 10, 64)
+ msg["sender_id"], _ = strconv.ParseUint(m.SenderUin, 10, 64)
+ msg["operator_id"], _ = strconv.ParseUint(m.AddDigestUin, 10, 64)
msg["message_id"] = ToGlobalId(groupCode, int32(m.MessageID))
list = append(list, msg)
}
diff --git a/docs/cqhttp.md b/docs/cqhttp.md
index f1da613..4c29eb2 100644
--- a/docs/cqhttp.md
+++ b/docs/cqhttp.md
@@ -39,6 +39,9 @@
- [获取群子目录文件列表](#设置群名)
- [获取用户VIP信息](#获取用户VIP信息)
- [发送群公告](#发送群公告)
+- [设置精华消息](#设置精华消息)
+- [移出精华消息](#移出精华消息)
+- [获取精华消息列表](#获取精华消息列表)
- [重载事件过滤器](#重载事件过滤器)
##### 事件
@@ -50,6 +53,7 @@
- [群成员荣誉变更提示](#群成员荣誉变更提示)
- [群成员名片更新](#群成员名片更新)
- [接收到离线文件](#接收到离线文件)
+- [群精华消息](#精华消息)
@@ -620,11 +624,63 @@ Type: `tts`
| -------- | -------- | ---- |
| `slices` | string[] | 词组 |
+### 设置精华消息
+
+终结点: `/set_essence_msg`
+
+**参数**
+
+| 字段 | 类型 | 说明 |
+| --------- | ------ | ---- |
+| `message_id` | int32 | 消息ID |
+
+**响应数据**
+
+无
+
+### 移出精华消息
+
+终结点: `/delete_essence_msg`
+
+**参数**
+
+| 字段 | 类型 | 说明 |
+| --------- | ------ | ---- |
+| `message_id` | int32 | 消息ID |
+
+**响应数据**
+
+无
+
+### 获取精华消息列表
+
+终结点: `/get_essence_msg_list`
+
+**参数**
+
+| 字段 | 类型 | 说明 |
+| --------- | ------ | ---- |
+| `group_id` | int64 | 群号 |
+
+**响应数据**
+
+响应内容为 JSON 数组,每个元素如下:
+
+| 字段名 | 数据类型 | 说明 |
+| ----- | ------- | --- |
+| `sender_id` |int64 | 发送者QQ 号 |
+| `sender_nick` | string | 发送者昵称 |
+| `sender_time` | int64 | 消息发送时间 |
+| `operator_id` |int64 | 发送者QQ 号 |
+| `operator_nick` | string | 发送者昵称 |
+| `operator_time` | int64 | 消息发送时间|
+| `message_id` | int32 | 消息ID |
+
### 图片OCR
> 注意: 目前图片OCR接口仅支持接受的图片
-终结点: `/.ocr_image`
+终结点: `/ocr_image`
**参数**
@@ -1095,4 +1151,17 @@ JSON数组:
| `post_type` | string | `notice` | 上报类型 |
| `notice_type` | string | `client_status` | 消息类型 |
| `client` | Device | | 客户端信息 |
-| `online` | bool | | 当前是否在线 |
\ No newline at end of file
+| `online` | bool | | 当前是否在线 |
+
+### 精华消息
+
+**上报数据**
+
+| 字段 | 类型 | 可能的值 | 说明 |
+| ------------- | ------ | -------------- | -------- |
+| `post_type` | string | `notice` | 上报类型 |
+| `notice_type` | string | `essence` | 消息类型 |
+| `sub_type` | string | `add`,`delete` | 添加为`add`,移出为`delete` |
+| `sender_id` | int64 | | 消息发送者ID |
+| `operator_id` | int64 | | 操作者ID |
+| `message_id` | int32 | | 消息ID |
From 4445af6ff275bbc81ca2ce6c422c4d9dd1fdcae3 Mon Sep 17 00:00:00 2001
From: Mrs4s <1844812067@qq.com>
Date: Fri, 5 Feb 2021 21:46:25 +0800
Subject: [PATCH 359/367] update MiraiGo.
---
go.mod | 2 +-
go.sum | 23 ++---------------------
2 files changed, 3 insertions(+), 22 deletions(-)
diff --git a/go.mod b/go.mod
index ded4c99..ed7e601 100644
--- a/go.mod
+++ b/go.mod
@@ -3,7 +3,7 @@ module github.com/Mrs4s/go-cqhttp
go 1.15
require (
- github.com/Mrs4s/MiraiGo v0.0.0-20210202135946-553229fea92e
+ github.com/Mrs4s/MiraiGo v0.0.0-20210204122237-7dcda89bd00e
github.com/dustin/go-humanize v1.0.0
github.com/gin-contrib/pprof v1.3.0
github.com/gin-gonic/gin v1.6.3
diff --git a/go.sum b/go.sum
index 03f24d5..50a6163 100644
--- a/go.sum
+++ b/go.sum
@@ -1,19 +1,15 @@
cloud.google.com/go v0.26.0/go.mod h1:aQUYkXzVsufM+DwF1aE+0xfcU+56JwCaLick0ClmMTw=
github.com/BurntSushi/toml v0.3.1/go.mod h1:xHWCNGjB5oqiDr8zfno3MHue2Ht5sIBksp03qcyfWMU=
-github.com/Mrs4s/MiraiGo v0.0.0-20210201234941-c69e578d0815 h1:WW2YfA+0+LSa/0VlWVhnfrXXatcE09paHgPgfPxlIMk=
-github.com/Mrs4s/MiraiGo v0.0.0-20210201234941-c69e578d0815/go.mod h1:yhqA0NyKxUf7I/0HR/1OMchveFggX8wde04gqdGrNfU=
-github.com/Mrs4s/MiraiGo v0.0.0-20210202135946-553229fea92e h1:5rZXeo+KW1vNq5fM7DowITQgm8r7HuH6w9tScWJ5GQQ=
-github.com/Mrs4s/MiraiGo v0.0.0-20210202135946-553229fea92e/go.mod h1:yhqA0NyKxUf7I/0HR/1OMchveFggX8wde04gqdGrNfU=
+github.com/Mrs4s/MiraiGo v0.0.0-20210204122237-7dcda89bd00e h1:CxPsCMdqj6QlP2S7+EbXaY8I1ozAhGv48MmAUypxZ8A=
+github.com/Mrs4s/MiraiGo v0.0.0-20210204122237-7dcda89bd00e/go.mod h1:yhqA0NyKxUf7I/0HR/1OMchveFggX8wde04gqdGrNfU=
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=
-github.com/davecgh/go-spew v1.1.1 h1:vj9j/u1bqnvCEfJOwUhtlOARqs3+rkHYY13jYWTU97c=
github.com/davecgh/go-spew v1.1.1/go.mod h1:J7Y8YcW2NihsgmVo/mv3lAwl/skON4iLHjSsI+c5H38=
github.com/dustin/go-humanize v1.0.0 h1:VSnTsYCnlFHaM2/igO1h6X3HA71jcobQuxemgkq4zYo=
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/fsnotify/fsnotify v1.4.7 h1:IXs+QLmnXW2CcXuY+8Mzv/fWEsPGWxqefPtCP5CnV9I=
github.com/fsnotify/fsnotify v1.4.7/go.mod h1:jwhsz4b93w/PPRr/qN1Yymfu8t87LnFCMoQvtojpjFo=
github.com/gin-contrib/pprof v1.3.0 h1:G9eK6HnbkSqDZBYbzG4wrjCsA4e+cvYAHUZw6W+W9K0=
github.com/gin-contrib/pprof v1.3.0/go.mod h1:waMjT1H9b179t3CxuG1cV3DHpga6ybizwfBaM5OXaB0=
@@ -23,7 +19,6 @@ github.com/gin-gonic/gin v1.6.0/go.mod h1:75u5sXoLsGZoRN5Sgbi1eraJ4GU3++wFwWzhwv
github.com/gin-gonic/gin v1.6.2/go.mod h1:75u5sXoLsGZoRN5Sgbi1eraJ4GU3++wFwWzhwvtwp4M=
github.com/gin-gonic/gin v1.6.3 h1:ahKqKTFpO5KTPHxWZjEdPScmYaGtLo8Y4DMHoEsnp14=
github.com/gin-gonic/gin v1.6.3/go.mod h1:75u5sXoLsGZoRN5Sgbi1eraJ4GU3++wFwWzhwvtwp4M=
-github.com/go-playground/assert/v2 v2.0.1 h1:MsBgLAaY856+nPRTKrp3/OZK38U/wa0CcBYNjji3q3A=
github.com/go-playground/assert/v2 v2.0.1/go.mod h1:VDjEfimB/XKnb+ZQfWdccd7VUvScMdVu0Titje2rxJ4=
github.com/go-playground/locales v0.13.0 h1:HyWk6mgj5qFqCT5fjGBuRArbVDfE4hi8+e8ceBS/t7Q=
github.com/go-playground/locales v0.13.0/go.mod h1:taPMhCMXrRLJO55olJkUXHZBHCxTMfnGwq/HNwmWNS8=
@@ -50,10 +45,8 @@ github.com/google/go-cmp v0.2.0/go.mod h1:oXzfMopK8JAjlY9xF4vHSVASa0yLyX7SntLO5a
github.com/google/go-cmp v0.3.0/go.mod h1:8QqcDgzrUqlUb/G2PQTWiueGozuR1884gddMywk6iLU=
github.com/google/go-cmp v0.3.1/go.mod h1:8QqcDgzrUqlUb/G2PQTWiueGozuR1884gddMywk6iLU=
github.com/google/go-cmp v0.4.0/go.mod h1:v8dTdLbMG2kIc/vJvl+f65V22dbkXbowE6jgT/gNBxE=
-github.com/google/go-cmp v0.5.0 h1:/QaMHBdZ26BB3SSst0Iwl10Epc+xhTquomWX0oZEB6w=
github.com/google/go-cmp v0.5.0/go.mod h1:v8dTdLbMG2kIc/vJvl+f65V22dbkXbowE6jgT/gNBxE=
github.com/google/gofuzz v1.0.0/go.mod h1:dBl0BpW6vV/+mYPU4Po3pmUjxk6FQPldtuIdl/M65Eg=
-github.com/google/uuid v1.1.1 h1:Gkbcsh/GbpXz7lPftLA3P6TYMwjCLYm83jiFQZF/3gY=
github.com/google/uuid v1.1.1/go.mod h1:TIyPZe4MgqvfeYDBFedMoGGpEw/LqOeaOT+nhxU+yHo=
github.com/gorilla/websocket v1.4.2 h1:+/TMaTYc4QFitKJxsQ7Yye35DkWvkdLcvGKqM+x0Ufc=
github.com/gorilla/websocket v1.4.2/go.mod h1:YR8l580nyteQvAITg2hZ9XVh4b55+EU/adAjf1fMHhE=
@@ -61,9 +54,7 @@ github.com/guonaihong/gout v0.1.4 h1:uBBoyztMX9okC27OQxqhn6bZ0ROkGyvnEIHwtp3TM4g
github.com/guonaihong/gout v0.1.4/go.mod h1:0rFYAYyzbcxEg11eY2qUbffJs7hHRPeugAnlVYSp8Ic=
github.com/hjson/hjson-go v3.1.0+incompatible h1:DY/9yE8ey8Zv22bY+mHV1uk2yRy0h8tKhZ77hEdi0Aw=
github.com/hjson/hjson-go v3.1.0+incompatible/go.mod h1:qsetwF8NlsTsOTwZTApNlTCerV+b2GjYRRcIk4JMFio=
-github.com/hpcloud/tail v1.0.0 h1:nfCOvKYfkgYP8hkirhJocXT2+zOD8yUNjXaWfTlyFKI=
github.com/hpcloud/tail v1.0.0/go.mod h1:ab1qPbhIpdTxEkNHXyeSf5vhxWSCs/tWer42PpOxQnU=
-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.9/go.mod h1:KdQUCv79m/52Kvf8AW2vK1V8akMuk1QjK/uOdHXbAo4=
github.com/json-iterator/go v1.1.10 h1:Kz6Cvnvv2wGdaG/V8yMvfkmNiXq9Ya2KUv4rouJJr68=
@@ -73,7 +64,6 @@ github.com/kardianos/osext v0.0.0-20190222173326-2bc1f35cddc0/go.mod h1:1NbS8ALr
github.com/konsorten/go-windows-terminal-sequences v1.0.1/go.mod h1:T0+1ngSBFLxvqU3pZ+m/2kptfBszLMUkC4ZK/EgS/cQ=
github.com/leodido/go-urn v1.2.0 h1:hpXL4XnriNwQ/ABnpepYM/1vCLWNDfUNts8dX3xTG6Y=
github.com/leodido/go-urn v1.2.0/go.mod h1:+8+nEpDfqqsY+g338gtMEUOtuK+4dEMhiQEgxpxOKII=
-github.com/lestrrat-go/envload v0.0.0-20180220234015-a3eb8ddeffcc h1:RKf14vYWi2ttpEmkA4aQ3j4u9dStX2t4M8UM6qqNsG8=
github.com/lestrrat-go/envload v0.0.0-20180220234015-a3eb8ddeffcc/go.mod h1:kopuH9ugFRkIXf3YoqHKyrJ9YfUFsckUU9S7B+XP+is=
github.com/lestrrat-go/file-rotatelogs v2.4.0+incompatible h1:Y6sqxHMyB1D2YSzWkLibYKgg+SwmyFU9dF2hn6MdTj4=
github.com/lestrrat-go/file-rotatelogs v2.4.0+incompatible/go.mod h1:ZQnN8lSECaebrkQytbHj4xNgtg8CR7RYXnPok8e0EHA=
@@ -88,14 +78,11 @@ github.com/modern-go/reflect2 v0.0.0-20180701023420-4b7aa43c6742/go.mod h1:bx2lN
github.com/nfnt/resize v0.0.0-20180221191011-83c6a9932646 h1:zYyBkD/k9seD2A7fsi6Oo2LfFZAehjjQMERAvZLEDnQ=
github.com/nfnt/resize v0.0.0-20180221191011-83c6a9932646/go.mod h1:jpp1/29i3P1S/RLdc7JQKbRpFeM1dOBd8T9ki5s+AY8=
github.com/onsi/ginkgo v1.6.0/go.mod h1:lLunBs/Ym6LB5Z9jYTR76FiuTmxDTDusOGeTQH+WWjE=
-github.com/onsi/ginkgo v1.7.0 h1:WSHQ+IS43OoUrWtD1/bbclrwK8TTH5hzp+umCiuxHgs=
github.com/onsi/ginkgo v1.7.0/go.mod h1:lLunBs/Ym6LB5Z9jYTR76FiuTmxDTDusOGeTQH+WWjE=
-github.com/onsi/gomega v1.4.3 h1:RE1xgDvH7imwFD45h+u2SgIfERHlS2yNG4DObb5BSKU=
github.com/onsi/gomega v1.4.3/go.mod h1:ex+gbHU/CVuBBDIJjb2X0qEXbFg53c61hWP/1CpauHY=
github.com/pkg/errors v0.8.1/go.mod h1:bwawxfHBFNV+L2hUp1rHADufV3IMtnDRdf1r5NINEl0=
github.com/pkg/errors v0.9.1 h1:FEBLx1zS214owpjy7qsBeixbURkuhQAwrK5UwLGTwt4=
github.com/pkg/errors v0.9.1/go.mod h1:bwawxfHBFNV+L2hUp1rHADufV3IMtnDRdf1r5NINEl0=
-github.com/pmezard/go-difflib v1.0.0 h1:4DBwDE0NGyQoBHbLQYPwSUPoCMWR5BEzIk/f1lZbAQM=
github.com/pmezard/go-difflib v1.0.0/go.mod h1:iKH77koFhYxTK1pcRnkKkqfTogsbg7gZNVY4sRDYZ/4=
github.com/prometheus/client_model v0.0.0-20190812154241-14fe0d1b01d4/go.mod h1:xMI15A0UPsDsEKsMN9yxemIoYk6Tm2C1GtYGdfGttqA=
github.com/sirupsen/logrus v1.4.2/go.mod h1:tLMulIdttU9McNUspp0xgXVQah82FyeX6MwdIuYE2rE=
@@ -105,7 +92,6 @@ github.com/stretchr/objx v0.1.0/go.mod h1:HFkY916IF+rwdDfMAkV7OtwuqBVzrE8GR6GFx+
github.com/stretchr/objx v0.1.1/go.mod h1:HFkY916IF+rwdDfMAkV7OtwuqBVzrE8GR6GFx+wExME=
github.com/stretchr/testify v1.2.2/go.mod h1:a8OnRcib4nhh0OaRAV+Yts87kKdq0PP7pXfy6kDkUVs=
github.com/stretchr/testify v1.3.0/go.mod h1:M5WIy9Dh21IEIfnGCwXGc5bZfKNJtfHm1UVUgZn+9EI=
-github.com/stretchr/testify v1.4.0 h1:2E4SXV/wtOkTonXsotYi4li6zVWxYlZuYNCXe9XRJyk=
github.com/stretchr/testify v1.4.0/go.mod h1:j7eGeouHqKxXV5pUuKE4zz7dFj8WfuZ+81PSLYec5m4=
github.com/syndtr/goleveldb v1.0.0 h1:fBdIW9lB4Iz0n9khmH8w27SJ3QEJ7+IgjPEwGSZiFdE=
github.com/syndtr/goleveldb v1.0.0/go.mod h1:ZVVdQEZoIme9iO1Ch2Jdy24qqXrMMOU6lpPAyBWyWuQ=
@@ -151,7 +137,6 @@ golang.org/x/sys v0.0.0-20201119102817-f84b799fce68/go.mod h1:h1NjWce9XRLGQEsW7w
golang.org/x/term v0.0.0-20201210144234-2321bbc49cbf h1:MZ2shdL+ZM/XzY3ZGOnh4Nlpnxz5GSOhOmtHo3iPU6M=
golang.org/x/term v0.0.0-20201210144234-2321bbc49cbf/go.mod h1:bj7SfCRtBDWHUb9snDiAeCFNEtKQo2Wmx5Cou7ajbmo=
golang.org/x/text v0.3.0/go.mod h1:NqM8EUOU14njkJ3fqMW+pc6Ldnwhi/IjpwHt7yyuwOQ=
-golang.org/x/text v0.3.2 h1:tW2bmiBqwgJj/UpqtC8EpXEZVYOwU0yG4iWbprSVAcs=
golang.org/x/text v0.3.2/go.mod h1:bEr9sfX3Q8Zfm5fL9x+3itogRgK3+ptLWKqgva+5dAk=
golang.org/x/time v0.0.0-20201208040808-7e3f01d25324 h1:Hir2P/De0WpUhtrKGGjvSb2YxUgyZ7EFOSLIcSSpiwE=
golang.org/x/time v0.0.0-20201208040808-7e3f01d25324/go.mod h1:tRJNPiyCQ0inRvYxbN9jk5I+vvW/OXSQhTDSoE431IQ=
@@ -160,7 +145,6 @@ golang.org/x/tools v0.0.0-20190114222345-bf090417da8b/go.mod h1:n7NCudcB/nEzxVGm
golang.org/x/tools v0.0.0-20190226205152-f727befe758c/go.mod h1:9Yl7xja0Znq3iFh3HoIrodX9oNMXvdceNzlUR8zjMvY=
golang.org/x/tools v0.0.0-20190311212946-11955173bddd/go.mod h1:LCzVGOaR6xXOjkQ3onu1FJEFr0SW1gC7cKk1uF8kGRs=
golang.org/x/tools v0.0.0-20190524140312-2c0ae7006135/go.mod h1:RgjU9mgBXZiqYHBnxXauZ1Gv1EHHAz9KjViQ78xBX0Q=
-golang.org/x/xerrors v0.0.0-20191204190536-9bdfabe68543 h1:E7g+9GITq07hpfrRu66IVDexMakfv52eLZ2CXBWiKr4=
golang.org/x/xerrors v0.0.0-20191204190536-9bdfabe68543/go.mod h1:I/5z698sn9Ka8TeJc9MKroUUfqBBauWjQqLJ2OPfmY0=
google.golang.org/appengine v1.1.0/go.mod h1:EbEs0AVv82hx2wNQdGPgUI5lhzA/G0D9YwlJXL52JkM=
google.golang.org/appengine v1.4.0/go.mod h1:xpcJRLb0r/rnEns0DIKYYv+WjYCduHsrkT7/EB5XEv4=
@@ -180,11 +164,8 @@ google.golang.org/protobuf v1.23.0/go.mod h1:EGpADcykh3NcUnDUJcl1+ZksZNG86OlYog2
google.golang.org/protobuf v1.23.1-0.20200526195155-81db48ad09cc/go.mod h1:EGpADcykh3NcUnDUJcl1+ZksZNG86OlYog2l/sGQquU=
google.golang.org/protobuf v1.25.0 h1:Ejskq+SyPohKW+1uil0JJMtmHCgJPJ/qWTxr8qp+R4c=
google.golang.org/protobuf v1.25.0/go.mod h1:9JNX74DMeImyA3h4bdi1ymwjUzf21/xIlbajtzgsN7c=
-gopkg.in/check.v1 v0.0.0-20161208181325-20d25e280405 h1:yhCVgyC4o1eVCa2tZl7eS0r+SDo693bJlVdllGtEeKM=
gopkg.in/check.v1 v0.0.0-20161208181325-20d25e280405/go.mod h1:Co6ibVJAznAaIkqp8huTwlJQCZ016jof/cbN4VW5Yz0=
-gopkg.in/fsnotify.v1 v1.4.7 h1:xOHLXZwVvI9hhs+cLKq5+I5onOuwQLhQwiu63xxlHs4=
gopkg.in/fsnotify.v1 v1.4.7/go.mod h1:Tz8NjZHkW78fSQdbUxIjBTcgA1z1m8ZHf0WmKUhAMys=
-gopkg.in/tomb.v1 v1.0.0-20141024135613-dd632973f1e7 h1:uRGJdciOHaEIrze2W8Q3AKkepLTh2hOroT7a+7czfdQ=
gopkg.in/tomb.v1 v1.0.0-20141024135613-dd632973f1e7/go.mod h1:dt/ZhP58zS4L8KSrWDmTeBkI65Dw0HsyUHuEVlX15mw=
gopkg.in/yaml.v2 v2.2.1/go.mod h1:hI93XBmqTisBFMUTm0b8Fm+jr3Dg1NNxqwp+5A1VGuI=
gopkg.in/yaml.v2 v2.2.2/go.mod h1:hI93XBmqTisBFMUTm0b8Fm+jr3Dg1NNxqwp+5A1VGuI=
From 307a09dd11a951228f1dce7f4fc57f56df7957da Mon Sep 17 00:00:00 2001
From: Mrs4s <1844812067@qq.com>
Date: Fri, 5 Feb 2021 22:24:49 +0800
Subject: [PATCH 360/367] feature upload_group_file.
---
coolq/api.go | 20 ++++++++++++++++++++
server/http.go | 6 ++++++
server/websocket.go | 3 +++
3 files changed, 29 insertions(+)
diff --git a/coolq/api.go b/coolq/api.go
index 626a912..470fba8 100644
--- a/coolq/api.go
+++ b/coolq/api.go
@@ -181,6 +181,26 @@ func (bot *CQBot) CQGetGroupFileUrl(groupId int64, fileId string, busId int32) M
})
}
+func (bot *CQBot) CQUploadGroupFile(groupId int64, file, name, folder string) MSG {
+ if !global.PathExists(file) {
+ log.Errorf("上传群文件 %v 失败: 文件不存在", file)
+ return Failed(100, "FILE_NOT_FOUND", "文件不存在")
+ }
+ fs, err := bot.Client.GetGroupFileSystem(groupId)
+ if err != nil {
+ log.Errorf("获取群 %v 文件系统信息失败: %v", groupId, err)
+ return Failed(100, "FILE_SYSTEM_API_ERROR", err.Error())
+ }
+ if folder == "" {
+ folder = "/"
+ }
+ if err = fs.UploadFile(file, name, folder); err != nil {
+ log.Errorf("上传群 %v 文件 %v 失败: %v", groupId, file, err)
+ return Failed(100, "FILE_SYSTEM_UPLOAD_API_ERROR", err.Error())
+ }
+ return OK(nil)
+}
+
func (bot *CQBot) CQGetWordSlices(content string) MSG {
slices, err := bot.Client.GetWordSegmentation(content)
if err != nil {
diff --git a/server/http.go b/server/http.go
index f63ce2d..180d9c5 100644
--- a/server/http.go
+++ b/server/http.go
@@ -215,6 +215,11 @@ func GetGroupFileUrl(s *httpServer, c *gin.Context) {
c.JSON(200, s.bot.CQGetGroupFileUrl(gid, fid, int32(busid)))
}
+func UploadGroupFile(s *httpServer, c *gin.Context) {
+ gid, _ := strconv.ParseInt(getParam(c, "group_id"), 10, 64)
+ c.JSON(200, s.bot.CQUploadGroupFile(gid, getParam(c, "file"), getParam(c, "name"), getParam(c, "folder")))
+}
+
func SendMessage(s *httpServer, c *gin.Context) {
if getParam(c, "message_type") == "private" {
SendPrivateMessage(s, c)
@@ -560,6 +565,7 @@ var httpApi = map[string]func(s *httpServer, c *gin.Context){
"get_group_root_files": GetGroupRootFiles,
"get_group_files_by_folder": GetGroupFilesByFolderId,
"get_group_file_url": GetGroupFileUrl,
+ "upload_group_file": UploadGroupFile,
"get_essence_msg_list": GetEssenceMsgList,
"send_msg": SendMessage,
"send_group_msg": SendGroupMessage,
diff --git a/server/websocket.go b/server/websocket.go
index 6b7a829..bf92628 100644
--- a/server/websocket.go
+++ b/server/websocket.go
@@ -562,6 +562,9 @@ var wsAPI = map[string]func(*coolq.CQBot, gjson.Result) coolq.MSG{
"get_group_file_url": func(bot *coolq.CQBot, p gjson.Result) coolq.MSG {
return bot.CQGetGroupFileUrl(p.Get("group_id").Int(), p.Get("file_id").Str, int32(p.Get("busid").Int()))
},
+ "upload_group_file": func(bot *coolq.CQBot, p gjson.Result) coolq.MSG {
+ return bot.CQUploadGroupFile(p.Get("group_id").Int(), p.Get("file").Str, p.Get("name").Str, p.Get("folder").Str)
+ },
"get_group_msg_history": func(bot *coolq.CQBot, p gjson.Result) coolq.MSG {
return bot.CQGetGroupMessageHistory(p.Get("group_id").Int(), p.Get("message_seq").Int())
},
From d4e8a3df4f734ae8e48ada86afc21ba4115557fb Mon Sep 17 00:00:00 2001
From: Mrs4s <1844812067@qq.com>
Date: Sat, 6 Feb 2021 06:34:29 +0800
Subject: [PATCH 361/367] update MiraiGo.
---
go.mod | 2 +-
go.sum | 4 ++--
2 files changed, 3 insertions(+), 3 deletions(-)
diff --git a/go.mod b/go.mod
index ed7e601..5e77d5a 100644
--- a/go.mod
+++ b/go.mod
@@ -3,7 +3,7 @@ module github.com/Mrs4s/go-cqhttp
go 1.15
require (
- github.com/Mrs4s/MiraiGo v0.0.0-20210204122237-7dcda89bd00e
+ github.com/Mrs4s/MiraiGo v0.0.0-20210205222858-f31fa7a04b5a
github.com/dustin/go-humanize v1.0.0
github.com/gin-contrib/pprof v1.3.0
github.com/gin-gonic/gin v1.6.3
diff --git a/go.sum b/go.sum
index 50a6163..40a1643 100644
--- a/go.sum
+++ b/go.sum
@@ -1,7 +1,7 @@
cloud.google.com/go v0.26.0/go.mod h1:aQUYkXzVsufM+DwF1aE+0xfcU+56JwCaLick0ClmMTw=
github.com/BurntSushi/toml v0.3.1/go.mod h1:xHWCNGjB5oqiDr8zfno3MHue2Ht5sIBksp03qcyfWMU=
-github.com/Mrs4s/MiraiGo v0.0.0-20210204122237-7dcda89bd00e h1:CxPsCMdqj6QlP2S7+EbXaY8I1ozAhGv48MmAUypxZ8A=
-github.com/Mrs4s/MiraiGo v0.0.0-20210204122237-7dcda89bd00e/go.mod h1:yhqA0NyKxUf7I/0HR/1OMchveFggX8wde04gqdGrNfU=
+github.com/Mrs4s/MiraiGo v0.0.0-20210205222858-f31fa7a04b5a h1:4Iu1NwKz/HsaOiWoQnncAlrqzPHdA4c/8GC7ie2Ct7Q=
+github.com/Mrs4s/MiraiGo v0.0.0-20210205222858-f31fa7a04b5a/go.mod h1:yhqA0NyKxUf7I/0HR/1OMchveFggX8wde04gqdGrNfU=
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=
From 4c570bdfe6aa77b9b4f2424da0982c15366c51dd Mon Sep 17 00:00:00 2001
From: Mrs4s <1844812067@qq.com>
Date: Sat, 6 Feb 2021 06:40:39 +0800
Subject: [PATCH 362/367] feature check_url_safely.
---
coolq/api.go | 6 ++++++
server/http.go | 5 +++++
server/websocket.go | 3 +++
3 files changed, 14 insertions(+)
diff --git a/coolq/api.go b/coolq/api.go
index 470fba8..80bab03 100644
--- a/coolq/api.go
+++ b/coolq/api.go
@@ -1070,6 +1070,12 @@ func (bot *CQBot) CQGetEssenceMessageList(groupCode int64) MSG {
return OK(list)
}
+func (bot *CQBot) CQCheckUrlSafely(url string) MSG {
+ return OK(MSG{
+ "level": bot.Client.CheckUrlSafely(url),
+ })
+}
+
func (bot *CQBot) CQGetVersionInfo() MSG {
wd, _ := os.Getwd()
return OK(MSG{
diff --git a/server/http.go b/server/http.go
index 180d9c5..2ddfae2 100644
--- a/server/http.go
+++ b/server/http.go
@@ -506,6 +506,10 @@ func GetEssenceMsgList(s *httpServer, c *gin.Context) {
c.JSON(200, s.bot.CQGetEssenceMessageList(gid))
}
+func CheckUrlSafely(s *httpServer, c *gin.Context) {
+ c.JSON(200, s.bot.CQCheckUrlSafely(getParam(c, "url")))
+}
+
func getParamOrDefault(c *gin.Context, k, def string) string {
r := getParam(c, k)
if r != "" {
@@ -601,6 +605,7 @@ var httpApi = map[string]func(s *httpServer, c *gin.Context){
"set_group_portrait": SetGroupPortrait,
"set_group_anonymous_ban": SetGroupAnonymousBan,
"get_group_msg_history": GetGroupMessageHistory,
+ "check_url_safely": CheckUrlSafely,
"download_file": DownloadFile,
".handle_quick_operation": HandleQuickOperation,
".ocr_image": OcrImage,
diff --git a/server/websocket.go b/server/websocket.go
index bf92628..282f96d 100644
--- a/server/websocket.go
+++ b/server/websocket.go
@@ -601,6 +601,9 @@ var wsAPI = map[string]func(*coolq.CQBot, gjson.Result) coolq.MSG{
"get_essence_msg_list": func(bot *coolq.CQBot, p gjson.Result) coolq.MSG {
return bot.CQGetEssenceMessageList(p.Get("group_id").Int())
},
+ "check_urk_safely": func(bot *coolq.CQBot, p gjson.Result) coolq.MSG {
+ return bot.CQCheckUrlSafely(p.Get("url").String())
+ },
"set_group_anonymous_ban": func(bot *coolq.CQBot, p gjson.Result) coolq.MSG {
obj := p.Get("anonymous")
flag := p.Get("anonymous_flag")
From 8d0a0b7f4d0e4e513d6d3f3a1117be6181d9676c Mon Sep 17 00:00:00 2001
From: Mrs4s <1844812067@qq.com>
Date: Sat, 6 Feb 2021 19:11:24 +0800
Subject: [PATCH 363/367] fix typo.
---
server/websocket.go | 2 +-
1 file changed, 1 insertion(+), 1 deletion(-)
diff --git a/server/websocket.go b/server/websocket.go
index 282f96d..998a9c4 100644
--- a/server/websocket.go
+++ b/server/websocket.go
@@ -601,7 +601,7 @@ var wsAPI = map[string]func(*coolq.CQBot, gjson.Result) coolq.MSG{
"get_essence_msg_list": func(bot *coolq.CQBot, p gjson.Result) coolq.MSG {
return bot.CQGetEssenceMessageList(p.Get("group_id").Int())
},
- "check_urk_safely": func(bot *coolq.CQBot, p gjson.Result) coolq.MSG {
+ "check_url_safely": func(bot *coolq.CQBot, p gjson.Result) coolq.MSG {
return bot.CQCheckUrlSafely(p.Get("url").String())
},
"set_group_anonymous_ban": func(bot *coolq.CQBot, p gjson.Result) coolq.MSG {
From 4a13f350038b4931b3ef8534fe83315e9f796f25 Mon Sep 17 00:00:00 2001
From: Mrs4s <1844812067@qq.com>
Date: Sat, 6 Feb 2021 21:46:28 +0800
Subject: [PATCH 364/367] update MiraiGo.
---
go.mod | 2 +-
go.sum | 4 ++--
2 files changed, 3 insertions(+), 3 deletions(-)
diff --git a/go.mod b/go.mod
index 5e77d5a..c324dd5 100644
--- a/go.mod
+++ b/go.mod
@@ -3,7 +3,7 @@ module github.com/Mrs4s/go-cqhttp
go 1.15
require (
- github.com/Mrs4s/MiraiGo v0.0.0-20210205222858-f31fa7a04b5a
+ github.com/Mrs4s/MiraiGo v0.0.0-20210206134348-800bf525ed0e
github.com/dustin/go-humanize v1.0.0
github.com/gin-contrib/pprof v1.3.0
github.com/gin-gonic/gin v1.6.3
diff --git a/go.sum b/go.sum
index 40a1643..21574d6 100644
--- a/go.sum
+++ b/go.sum
@@ -1,7 +1,7 @@
cloud.google.com/go v0.26.0/go.mod h1:aQUYkXzVsufM+DwF1aE+0xfcU+56JwCaLick0ClmMTw=
github.com/BurntSushi/toml v0.3.1/go.mod h1:xHWCNGjB5oqiDr8zfno3MHue2Ht5sIBksp03qcyfWMU=
-github.com/Mrs4s/MiraiGo v0.0.0-20210205222858-f31fa7a04b5a h1:4Iu1NwKz/HsaOiWoQnncAlrqzPHdA4c/8GC7ie2Ct7Q=
-github.com/Mrs4s/MiraiGo v0.0.0-20210205222858-f31fa7a04b5a/go.mod h1:yhqA0NyKxUf7I/0HR/1OMchveFggX8wde04gqdGrNfU=
+github.com/Mrs4s/MiraiGo v0.0.0-20210206134348-800bf525ed0e h1:SnN+nyRdqN7sULnHUWCofP+Jxs3VJN/y8AlMpcz0nbk=
+github.com/Mrs4s/MiraiGo v0.0.0-20210206134348-800bf525ed0e/go.mod h1:yhqA0NyKxUf7I/0HR/1OMchveFggX8wde04gqdGrNfU=
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=
From ff75b0a2a91cdd86b4b0589c72791e16bdcf73af Mon Sep 17 00:00:00 2001
From: Mrs4s <1844812067@qq.com>
Date: Sat, 6 Feb 2021 21:55:32 +0800
Subject: [PATCH 365/367] update doc.
---
docs/cqhttp.md | 32 ++++++++++++++++++++++++++++++++
1 file changed, 32 insertions(+)
diff --git a/docs/cqhttp.md b/docs/cqhttp.md
index 4c29eb2..53cc24e 100644
--- a/docs/cqhttp.md
+++ b/docs/cqhttp.md
@@ -846,6 +846,22 @@ Type: `tts`
| `creator_name` | string | 创建者名字 |
| `total_file_count` | int32 | 子文件数量 |
+### 上传群文件
+
+终结点: `/upload_group_file`
+
+**参数**
+
+| 字段 | 类型 | 说明 |
+| ---------- | ------ | ------------------------- |
+| `group_id` | int64 | 群号 |
+| `file` | string | 本地文件路径 |
+| `name` | string | 储存名称 |
+| `folder` | string | 父目录ID |
+
+> 在不提供 `folder` 参数的情况下默认上传到根目录
+> 只能上传本地文件, 需要上传 `http` 文件的话请先调用 `download_file` API下载
+
### 获取状态
终结点: `/get_status`
@@ -978,6 +994,22 @@ JSON数组:
| `device_name` | string | 设备名称 |
| `device_kind` | string | 设备类型 |
+### 检查链接安全性
+
+终结点:`/check_url_safely`
+
+**参数**
+
+| 字段 | 类型 | 说明 |
+| ---------- | ------ | ------------------------- |
+| `url` | string | 需要检查的链接 |
+
+**响应数据**
+
+| 字段 | 类型 | 说明 |
+| ---------- | ---------- | ------------ |
+| `level` | int | 安全等级, 1: 安全 2: 未知 3: 危险 |
+
### 获取用户VIP信息
终结点:`/_get_vip_info`
From 22a02542af679ed989e1f78f5b9cff5eaa80885e Mon Sep 17 00:00:00 2001
From: ishkong
Date: Mon, 8 Feb 2021 10:34:51 +0800
Subject: [PATCH 366/367] :memo: Update README.md
---
README.md | 4 ++--
1 file changed, 2 insertions(+), 2 deletions(-)
diff --git a/README.md b/README.md
index d2d4811..db63ab3 100644
--- a/README.md
+++ b/README.md
@@ -26,11 +26,11 @@ _✨ 基于 [Mirai](https://github.com/mamoe/mirai) 以及 [MiraiGo](https://git
- 文档
+ 文档
·
下载
·
- 开始使用
+ 开始使用
---
From 3bbcdc91718e597a14d1a82a01ec8c625eb6d357 Mon Sep 17 00:00:00 2001
From: Mrs4s <1844812067@qq.com>
Date: Mon, 8 Feb 2021 22:48:39 +0800
Subject: [PATCH 367/367] fix null pointer dereference on at.
---
coolq/api.go | 4 ++++
1 file changed, 4 insertions(+)
diff --git a/coolq/api.go b/coolq/api.go
index 80bab03..19b5770 100644
--- a/coolq/api.go
+++ b/coolq/api.go
@@ -214,6 +214,10 @@ func (bot *CQBot) CQGetWordSlices(content string) MSG {
// https://cqhttp.cc/docs/4.15/#/API?id=send_group_msg-%E5%8F%91%E9%80%81%E7%BE%A4%E6%B6%88%E6%81%AF
func (bot *CQBot) CQSendGroupMessage(groupId int64, i interface{}, autoEscape bool) MSG {
+ if bot.Client.FindGroup(groupId) == nil {
+ log.Warnf("群消息发送失败: 群 %v 不存在", groupId)
+ return Failed(100, "GROUP_NOT_FOUND", "群聊不存在")
+ }
var str string
fixAt := func(elem []message.IMessageElement) {
for _, e := range elem {