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(``, 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(``, 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(``, 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(``, - 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(``, - 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 +

+ +
+ # 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 下载 +
-# 兼容性 +

+ + license + + + release + + + cqhttp + + + action + +

+ +

+ 文档 + · + 下载 + · + 开始使用 +

+ +--- + +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* 同理. + +![image.png](https://i.loli.net/2020/12/27/yXdomOnQ8tkauMe.png) + +首先选择 `1` 并提取链接在浏览器中打开 + +![image.png](https://i.loli.net/2020/12/27/HYhmZv1wARMV7Uq.png) + +![image.png](https://i.loli.net/2020/12/27/otk9Hz7lBCaRFMV.png) + +此时不要滑动验证码, 首先按下 `F12` (键盘右上角退格键上方) 打开 *开发者工具* + +![image.png](https://i.loli.net/2020/12/27/JDioadLPwcKWpt1.png) + +点击 `Network` 选项卡 (在某些浏览器它可能叫做 `网络`) + +![image.png](https://i.loli.net/2020/12/27/qEzTB5jrDZUWSwp.png) + +点开 `Filter` (箭头) 按钮以确定您能看到下面的工具栏, 勾选 `Preserve log`(红框) + +此时可以滑动并通过验证码 + +![image.png](https://i.loli.net/2020/12/27/Id4hxzyDprQuF2G.png) + +回到 *开发者工具*, 我们可以看到已经有了一个请求. + +![image.png](https://i.loli.net/2020/12/27/3C6Y2XVKBRv1z9E.png) + +此时如果有多个请求, 请不要慌张. 看到上面的 `Filter` 没? 此时在 `Filter` 输入框中输入 `cap_union_new`, 就应该只剩一个请求了. + +然后点击该请求. 点开 `Preview` 选项卡 (箭头): + +![image.png](https://i.loli.net/2020/12/27/P1VtxRWpjY8524Z.png) + +此时就能看到一个标准的 `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) + +解压并打开工具: + +![image.png](https://i.loli.net/2020/12/27/winG4SkxhgLoNDZ.png) + +打开 `go-cqhttp` 并选择 `2`: + +![image.png](https://i.loli.net/2020/12/27/yXdomOnQ8tkauMe.png) + +复制 `ID` 并前往工具粘贴: + +![image.png](https://i.loli.net/2020/12/27/fIwXx5nN9r8Zbc7.png) + +![image.png](https://i.loli.net/2020/12/27/WZsTCyGwSjc9mb5.png) + +点击 `OK` 并处理滑块, 完成即可登录成功. (OK可能反应稍微慢点, 请不要多次点击) + +![image.png](https://i.loli.net/2020/12/27/UnvAuxreijYzgLC.png) + 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(``, 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 {