From fe7a1f502818399678ea21eb27de1c84e8706c7e Mon Sep 17 00:00:00 2001 From: F0ur Date: Wed, 26 Aug 2020 14:30:41 +0800 Subject: [PATCH 01/70] fix(ws): fix concurrent write to ws conn --- server/websocket.go | 3 +++ 1 file changed, 3 insertions(+) diff --git a/server/websocket.go b/server/websocket.go index 8dab69a..7f0cae6 100644 --- a/server/websocket.go +++ b/server/websocket.go @@ -319,6 +319,7 @@ func (s *websocketServer) onBotPushEvent(m coolq.MSG) { for i, l := 0, len(s.eventConn); i < l; i++ { conn := s.eventConn[i] log.Debugf("向WS客户端 %v 推送Event: %v", conn.RemoteAddr().String(), m.ToJson()) + conn.Lock() if err := conn.WriteMessage(websocket.TextMessage, []byte(m.ToJson())); err != nil { _ = conn.Close() next := i + 1 @@ -330,7 +331,9 @@ func (s *websocketServer) onBotPushEvent(m coolq.MSG) { i-- l-- conn = nil + continue } + conn.Unlock() } } From 01988cd3d76979fd3b936434a6eb00ea7399a3d7 Mon Sep 17 00:00:00 2001 From: xuthus5 Date: Thu, 27 Aug 2020 01:21:22 +0800 Subject: [PATCH 02/70] add:errlog file; fix:show version when start program --- .github/workflows/release.yml | 2 +- coolq/api.go | 4 ++-- docs/config.md | 1 + global/config.go | 1 + go.mod | 1 + go.sum | 18 +++++++++++++++ main.go | 41 +++++++++++++++++++++++++++++++++++ 7 files changed, 65 insertions(+), 3 deletions(-) diff --git a/.github/workflows/release.yml b/.github/workflows/release.yml index 888004f..48c5184 100644 --- a/.github/workflows/release.yml +++ b/.github/workflows/release.yml @@ -26,5 +26,5 @@ jobs: github_token: ${{ secrets.GITHUB_TOKEN }} goos: ${{ matrix.goos }} goarch: ${{ matrix.goarch }} - ldflags: -w -s -X "github.com/Mrs4s/go-cqhttp/coolq.version=${{ env.RELEASE_VERSION }}" + ldflags: -w -s -X "github.com/Mrs4s/go-cqhttp/coolq.Version=${{ env.RELEASE_VERSION }}" \ No newline at end of file diff --git a/coolq/api.go b/coolq/api.go index ea4aefa..6be70e9 100644 --- a/coolq/api.go +++ b/coolq/api.go @@ -16,7 +16,7 @@ import ( "github.com/tidwall/gjson" ) -var version = "unknown" +var Version = "unknown" // https://cqhttp.cc/docs/4.15/#/API?id=get_login_info-%E8%8E%B7%E5%8F%96%E7%99%BB%E5%BD%95%E5%8F%B7%E4%BF%A1%E6%81%AF func (bot *CQBot) CQGetLoginInfo() MSG { @@ -590,7 +590,7 @@ func (bot *CQBot) CQGetVersionInfo() MSG { "plugin_build_configuration": "release", "runtime_version": runtime.Version(), "runtime_os": runtime.GOOS, - "version": version, + "version": Version, }) } diff --git a/docs/config.md b/docs/config.md index 245800f..d3f0373 100644 --- a/docs/config.md +++ b/docs/config.md @@ -67,6 +67,7 @@ go-cqhttp 支持导入CQHTTP的配置文件, 具体步骤为: | http_config | object | HTTP API配置 | | ws_config | object | Websocket API 配置 | | ws_reverse_servers | object[] | 反向 Websocket API 配置 | +| log_level | string | 指定日志收集级别,将收集的日志单独存放到固定文件中,便于查看日志线索 当前支持 warn,error| > 注: 开启密码加密后程序将在每次启动时要求输入解密密钥, 密钥错误会导致登录时提示密码错误. > 解密后密码将储存在内存中,用于自动重连等功能. 所以此加密并不能防止内存读取. diff --git a/global/config.go b/global/config.go index 5f13ac4..e384137 100644 --- a/global/config.go +++ b/global/config.go @@ -21,6 +21,7 @@ type JsonConfig struct { ReverseServers []*GoCQReverseWebsocketConfig `json:"ws_reverse_servers"` PostMessageFormat string `json:"post_message_format"` Debug bool `json:"debug"` + LogLevel string `json:"log_level"` } type CQHttpApiConfig struct { diff --git a/go.mod b/go.mod index 426ba6c..c227ae1 100644 --- a/go.mod +++ b/go.mod @@ -13,6 +13,7 @@ require ( github.com/lestrrat-go/file-rotatelogs v2.3.0+incompatible github.com/lestrrat-go/strftime 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/t-tomalak/logrus-easy-formatter v0.0.0-20190827215021-c074f06c5816 github.com/tebeka/strftime v0.1.5 // indirect diff --git a/go.sum b/go.sum index ef1cb9a..49aaf0a 100644 --- a/go.sum +++ b/go.sum @@ -7,15 +7,18 @@ github.com/bwmarrin/snowflake v0.3.0/go.mod h1:NdZxfVWX+oR6y2K0o6qAYv6gIOP9rjG0/ 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= @@ -42,16 +45,21 @@ 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.1 h1:2i3eqQ1KUhTlj7AFeIHqVUFku5QwUhwE2wNgYTVpbxQ= github.com/guonaihong/gout v0.1.1/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 h1:9yzud/Ht36ygwatGx56VwCZtlI/2AD15T1X2sjSuGns= 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= github.com/konsorten/go-windows-terminal-sequences v1.0.3 h1:CE8S1cTafDpPvMhIxNJKvHsGVBgn1xWYf1NbHQhywc8= @@ -59,6 +67,7 @@ github.com/konsorten/go-windows-terminal-sequences v1.0.3/go.mod h1:T0+1ngSBFLxv 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.3.0+incompatible h1:4mNlp+/SvALIPFpbXV3kxNJJno9iKFWGxSDE13Kl66Q= github.com/lestrrat-go/file-rotatelogs v2.3.0+incompatible/go.mod h1:ZQnN8lSECaebrkQytbHj4xNgtg8CR7RYXnPok8e0EHA= @@ -67,15 +76,20 @@ github.com/lestrrat-go/strftime v1.0.1/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/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.6.0 h1:UBcNElsrwanuuMsnGSlYmtmgbb23qDR5dG+6X6Oo89I= github.com/sirupsen/logrus v1.6.0/go.mod h1:7uNnSEd1DgxDLC74fIahvMZmmYsHGZGEOFrfsX/uA88= @@ -83,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.0 h1:9VEQWz6LLMUsUl6PueE49ir4Ka6CzLymOAZDxpFsTDc= github.com/tidwall/gjson v1.6.0/go.mod h1:P256ACg0Mn+j1RXIDXoss50DeIABTYK1PULOJHhxOls= @@ -136,6 +152,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= @@ -155,6 +172,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/main.go b/main.go index b45d6e3..22740c3 100644 --- a/main.go +++ b/main.go @@ -13,6 +13,7 @@ import ( "github.com/Mrs4s/go-cqhttp/global" "github.com/Mrs4s/go-cqhttp/server" 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" @@ -133,6 +134,46 @@ func main() { 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) log.Warnf("已开启Debug模式.") From 46747354c853f222112e038a8cfd7175d778d335 Mon Sep 17 00:00:00 2001 From: yyuueexxiinngg Date: Thu, 27 Aug 2020 01:59:02 +0800 Subject: [PATCH 03/70] Match netease music app id --- coolq/cqcode.go | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/coolq/cqcode.go b/coolq/cqcode.go index 726129d..faa9f7e 100644 --- a/coolq/cqcode.go +++ b/coolq/cqcode.go @@ -473,7 +473,7 @@ 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 } - xml := fmt.Sprintf(``, + xml := fmt.Sprintf(``, name, d["id"], info.Get("album.picUrl").Str, d["id"], name, artistName) return &message.ServiceElement{ Id: 60, From 11592c44831df0e1932e0bef189127292ca314fc Mon Sep 17 00:00:00 2001 From: QianjuNakasumi Date: Thu, 27 Aug 2020 23:15:37 +0800 Subject: [PATCH 04/70] =?UTF-8?q?=E6=96=B0=E5=A2=9E=E8=87=AA=E5=AE=9A?= =?UTF-8?q?=E4=B9=89=E5=BF=83=E8=B7=B3=E6=9C=8D=E5=8A=A1=E9=97=B4=E9=9A=94?= =?UTF-8?q?=E6=97=B6=E9=97=B4=E5=8F=8A=E5=BC=80=E5=85=B3?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- coolq/bot.go | 38 +++++++++++++++++++++++--------------- docs/config.md | 6 +++++- global/config.go | 3 +++ 3 files changed, 31 insertions(+), 16 deletions(-) diff --git a/coolq/bot.go b/coolq/bot.go index 6f36aa2..1aca793 100644 --- a/coolq/bot.go +++ b/coolq/bot.go @@ -5,28 +5,31 @@ import ( "encoding/gob" "encoding/json" "fmt" - "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" - "github.com/tidwall/gjson" - "github.com/xujiajun/nutsdb" "hash/crc32" "path" "sync" "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" + "github.com/tidwall/gjson" + "github.com/xujiajun/nutsdb" ) type CQBot struct { Client *client.QQClient - events []func(MSG) - db *nutsdb.DB - friendReqCache sync.Map - invitedReqCache sync.Map - joinReqCache sync.Map - tempMsgCache sync.Map + events []func(MSG) + db *nutsdb.DB + heartbeatInterval uint16 + friendReqCache sync.Map + invitedReqCache sync.Map + joinReqCache sync.Map + tempMsgCache sync.Map } type MSG map[string]interface{} @@ -67,15 +70,20 @@ func NewQQBot(cli *client.QQClient, conf *global.JsonConfig) *CQBot { bot.Client.OnGroupInvited(bot.groupInvitedEvent) bot.Client.OnUserWantJoinGroup(bot.groupJoinReqEvent) go func() { + i := conf.HeartbeatInterval + if i < 1 { + log.Warn("警告: 心跳功能已关闭,若非预期,请检查配置文件。") + return + } for { - time.Sleep(time.Second * 5) + time.Sleep(time.Second * i) bot.dispatchEventMessage(MSG{ "time": time.Now().Unix(), "self_id": bot.Client.Uin, "post_type": "meta_event", "meta_event_type": "heartbeat", "status": nil, - "interval": 5000, + "interval": 1000 * i, }) } }() diff --git a/docs/config.md b/docs/config.md index d3f0373..eb27e6d 100644 --- a/docs/config.md +++ b/docs/config.md @@ -27,6 +27,7 @@ go-cqhttp 支持导入CQHTTP的配置文件, 具体步骤为: "post_message_format": "string", "ignore_invalid_cqcode": false, "force_fragmented": true, + "heartbeat_interval": 5, "http_config": { "enabled": true, "host": "0.0.0.0", @@ -64,6 +65,7 @@ go-cqhttp 支持导入CQHTTP的配置文件, 具体步骤为: | post_message_format | string | 上报信息类型 | | ignore_invalid_cqcode| bool | 是否忽略错误的CQ码 | | force_fragmented | bool | 是否强制分片发送群长消息 | +| heartbeat_interval | int64 | 心跳间隔时间,单位秒,若0则关闭心跳 | http_config | object | HTTP API配置 | | ws_config | object | Websocket API 配置 | | ws_reverse_servers | object[] | 反向 Websocket API 配置 | @@ -73,4 +75,6 @@ go-cqhttp 支持导入CQHTTP的配置文件, 具体步骤为: > 解密后密码将储存在内存中,用于自动重连等功能. 所以此加密并不能防止内存读取. > 解密密钥在使用完成后并不会留存在内存中, 所以可用相对简单的字符串作为密钥 -> 注2: 分片发送为原酷Q发送长消息的老方案, 发送速度更优/兼容性更好。关闭后将优先使用新方案, 能发送更长的消息, 但发送速度更慢,在部分老客户端将无法解析. \ No newline at end of file +> 注2: 分片发送为原酷Q发送长消息的老方案, 发送速度更优/兼容性更好。关闭后将优先使用新方案, 能发送更长的消息, 但发送速度更慢,在部分老客户端将无法解析. + +> 注3:关闭心跳服务可能引起断线,请谨慎关闭 \ No newline at end of file diff --git a/global/config.go b/global/config.go index e384137..bd57850 100644 --- a/global/config.go +++ b/global/config.go @@ -2,6 +2,8 @@ package global import ( "encoding/json" + "time" + log "github.com/sirupsen/logrus" ) @@ -16,6 +18,7 @@ type JsonConfig struct { ReLoginDelay int `json:"relogin_delay"` IgnoreInvalidCQCode bool `json:"ignore_invalid_cqcode"` ForceFragmented bool `json:"force_fragmented"` + HeartbeatInterval time.Duration `json:"heartbeat_interval"` HttpConfig *GoCQHttpConfig `json:"http_config"` WSConfig *GoCQWebsocketConfig `json:"ws_config"` ReverseServers []*GoCQReverseWebsocketConfig `json:"ws_reverse_servers"` From 41614b9d1617c2a6e64830d19fc9cb53aeda4c3d Mon Sep 17 00:00:00 2001 From: QianjuNakasumi Date: Thu, 27 Aug 2020 23:20:45 +0800 Subject: [PATCH 05/70] =?UTF-8?q?=E6=9B=B4=E6=96=B0=E5=BF=83=E8=B7=B3?= =?UTF-8?q?=E6=9C=8D=E5=8A=A1=E9=97=B4=E9=9A=94=E6=96=87=E6=A1=A3?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- docs/config.md | 20 ++++++++++---------- 1 file changed, 10 insertions(+), 10 deletions(-) diff --git a/docs/config.md b/docs/config.md index eb27e6d..7ee7c56 100644 --- a/docs/config.md +++ b/docs/config.md @@ -56,18 +56,18 @@ go-cqhttp 支持导入CQHTTP的配置文件, 具体步骤为: | ------------------ | -------- | ------------------------------------------------------------------- | | uin | int64 | 登录用QQ号 | | password | string | 登录用密码 | -| encrypt_password | bool | 是否对密码进行加密. | +| encrypt_password | bool | 是否对密码进行加密. | | password_encrypted | string | 加密后的密码(请勿修改) | -| enable_db | bool | 是否开启内置数据库, 关闭后将无法使用 **回复/撤回** 等上下文相关接口 | -| access_token | string | 同CQHTTP的 `access_token` 用于身份验证 | -| relogin | bool | 是否自动重新登录 | -| relogin_delay | int | 重登录延时(秒) | -| post_message_format | string | 上报信息类型 | -| ignore_invalid_cqcode| bool | 是否忽略错误的CQ码 | +| enable_db | bool | 是否开启内置数据库, 关闭后将无法使用 **回复/撤回** 等上下文相关接口 | +| access_token | string | 同CQHTTP的 `access_token` 用于身份验证 | +| relogin | bool | 是否自动重新登录 | +| relogin_delay | int | 重登录延时(秒) | +| post_message_format | string | 上报信息类型 | +| ignore_invalid_cqcode| bool | 是否忽略错误的CQ码 | | force_fragmented | bool | 是否强制分片发送群长消息 | -| heartbeat_interval | int64 | 心跳间隔时间,单位秒,若0则关闭心跳 -| http_config | object | HTTP API配置 | -| ws_config | object | Websocket API 配置 | +| heartbeat_interval | int64 | 心跳间隔时间,单位秒,若0则关闭心跳 | +| http_config | object | HTTP API配置 | +| ws_config | object | Websocket API 配置 | | ws_reverse_servers | object[] | 反向 Websocket API 配置 | | log_level | string | 指定日志收集级别,将收集的日志单独存放到固定文件中,便于查看日志线索 当前支持 warn,error| From 50191fcedf4c9cf5b5ff801ca6b923ebb75407a7 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?=E5=8D=83=E6=A9=98=E9=9B=AB=E9=9C=9E?= <53565118+qianjunakasumi@users.noreply.github.com> Date: Thu, 27 Aug 2020 23:29:10 +0800 Subject: [PATCH 06/70] =?UTF-8?q?=E5=88=A0=E9=99=A4=E9=94=99=E8=AF=AF?= =?UTF-8?q?=E5=8A=A0=E5=85=A5=E7=9A=84=E9=85=8D=E7=BD=AE?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- coolq/bot.go | 1 - 1 file changed, 1 deletion(-) diff --git a/coolq/bot.go b/coolq/bot.go index 1aca793..d27ff7b 100644 --- a/coolq/bot.go +++ b/coolq/bot.go @@ -25,7 +25,6 @@ type CQBot struct { events []func(MSG) db *nutsdb.DB - heartbeatInterval uint16 friendReqCache sync.Map invitedReqCache sync.Map joinReqCache sync.Map From 0e7c30e85452854aff7822be168c095089b913e5 Mon Sep 17 00:00:00 2001 From: Mrs4s <1844812067@qq.com> Date: Thu, 27 Aug 2020 23:51:38 +0800 Subject: [PATCH 07/70] fix image error. --- coolq/cqcode.go | 6 ++++++ 1 file changed, 6 insertions(+) diff --git a/coolq/cqcode.go b/coolq/cqcode.go index faa9f7e..4e3a1a4 100644 --- a/coolq/cqcode.go +++ b/coolq/cqcode.go @@ -367,12 +367,18 @@ func (bot *CQBot) ToElement(t string, d map[string]string, group bool) (message. if group { rsp, err := bot.Client.QueryGroupImage(1, hash, size) if err != nil { + if url != "" { + return bot.ToElement(t, map[string]string{"file": url}, group) + } return nil, err } return rsp, nil } rsp, err := bot.Client.QueryFriendImage(1, hash, size) if err != nil { + if url != "" { + return bot.ToElement(t, map[string]string{"file": url}, group) + } return nil, err } return rsp, nil From 04bcd2e2701625d3f2837c558786a7acd2f78ef0 Mon Sep 17 00:00:00 2001 From: Mrs4s <1844812067@qq.com> Date: Fri, 28 Aug 2020 00:27:40 +0800 Subject: [PATCH 08/70] supported one-way friend msg. close #98 --- coolq/bot.go | 28 ++++++++++++++++------------ coolq/event.go | 3 +++ go.mod | 2 +- go.sum | 2 ++ 4 files changed, 22 insertions(+), 13 deletions(-) diff --git a/coolq/bot.go b/coolq/bot.go index d27ff7b..6d34bda 100644 --- a/coolq/bot.go +++ b/coolq/bot.go @@ -23,12 +23,13 @@ import ( type CQBot struct { Client *client.QQClient - events []func(MSG) - db *nutsdb.DB - friendReqCache sync.Map - invitedReqCache sync.Map - joinReqCache sync.Map - tempMsgCache sync.Map + events []func(MSG) + db *nutsdb.DB + friendReqCache sync.Map + invitedReqCache sync.Map + joinReqCache sync.Map + tempMsgCache sync.Map + oneWayMsgCache sync.Map } type MSG map[string]interface{} @@ -166,12 +167,15 @@ func (bot *CQBot) SendPrivateMessage(target int64, m *message.SendingMessage) in if msg != nil { id = msg.Id } - } 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 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 { + msg := bot.Client.SendPrivateMessage(target, m) + if msg != nil { + id = msg.Id } } if id == -1 { diff --git a/coolq/event.go b/coolq/event.go index 142e096..e91a0ed 100644 --- a/coolq/event.go +++ b/coolq/event.go @@ -32,6 +32,9 @@ 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) + if !m.Sender.IsFriend { + bot.oneWayMsgCache.Store(m.Sender.Uin, "") + } log.Infof("收到好友 %v(%v) 的消息: %v", m.Sender.DisplayName(), m.Sender.Uin, cqm) fm := MSG{ "post_type": "message", diff --git a/go.mod b/go.mod index c227ae1..017cc9d 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-20200825052841-d3b0f5f9e839 + github.com/Mrs4s/MiraiGo v0.0.0-20200827162217-d7e61afdfe07 github.com/fastly/go-utils v0.0.0-20180712184237-d95a45783239 // indirect github.com/gin-gonic/gin v1.6.3 github.com/gorilla/websocket v1.4.2 diff --git a/go.sum b/go.sum index 49aaf0a..7d781a6 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-20200825052841-d3b0f5f9e839 h1:TDhaPfWcubIMKDz1HU+N07SwIUjj7oVUQ7EXZBbDUxs= github.com/Mrs4s/MiraiGo v0.0.0-20200825052841-d3b0f5f9e839/go.mod h1:0je03wji/tSw4bUH4QCF2Z4/EjyNWjSJTyy5tliX6EM= +github.com/Mrs4s/MiraiGo v0.0.0-20200827162217-d7e61afdfe07 h1:AO8HeAS3GbUIfLQHlM7sPfYYN/KsKUpTTB+gVZNvo30= +github.com/Mrs4s/MiraiGo v0.0.0-20200827162217-d7e61afdfe07/go.mod h1:0je03wji/tSw4bUH4QCF2Z4/EjyNWjSJTyy5tliX6EM= 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 cefbfb64ce19253d27d0f3e3497aa7d330eca9b2 Mon Sep 17 00:00:00 2001 From: Mrs4s <1844812067@qq.com> Date: Fri, 28 Aug 2020 02:32:27 +0800 Subject: [PATCH 09/70] update MiraiGo. fix #172 --- coolq/cqcode.go | 2 +- go.mod | 2 +- go.sum | 22 ++-------------------- 3 files changed, 4 insertions(+), 22 deletions(-) diff --git a/coolq/cqcode.go b/coolq/cqcode.go index 4e3a1a4..40ce3c7 100644 --- a/coolq/cqcode.go +++ b/coolq/cqcode.go @@ -458,7 +458,7 @@ func (bot *CQBot) ToElement(t string, d map[string]string, group bool) (message. if len(aid) < 2 { return nil, errors.New("song error") } - xml := fmt.Sprintf(``, + xml := fmt.Sprintf(``, name, d["id"], aid[:len(aid)-2], aid, name, "", info.Get("track_info.singer.name").Str) return &message.ServiceElement{ Id: 60, diff --git a/go.mod b/go.mod index 017cc9d..d32cd0f 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-20200827162217-d7e61afdfe07 + github.com/Mrs4s/MiraiGo v0.0.0-20200827182935-51e155ef20da github.com/fastly/go-utils v0.0.0-20180712184237-d95a45783239 // indirect github.com/gin-gonic/gin v1.6.3 github.com/gorilla/websocket v1.4.2 diff --git a/go.sum b/go.sum index 7d781a6..3eeba5c 100644 --- a/go.sum +++ b/go.sum @@ -1,26 +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-20200825052841-d3b0f5f9e839 h1:TDhaPfWcubIMKDz1HU+N07SwIUjj7oVUQ7EXZBbDUxs= -github.com/Mrs4s/MiraiGo v0.0.0-20200825052841-d3b0f5f9e839/go.mod h1:0je03wji/tSw4bUH4QCF2Z4/EjyNWjSJTyy5tliX6EM= -github.com/Mrs4s/MiraiGo v0.0.0-20200827162217-d7e61afdfe07 h1:AO8HeAS3GbUIfLQHlM7sPfYYN/KsKUpTTB+gVZNvo30= -github.com/Mrs4s/MiraiGo v0.0.0-20200827162217-d7e61afdfe07/go.mod h1:0je03wji/tSw4bUH4QCF2Z4/EjyNWjSJTyy5tliX6EM= +github.com/Mrs4s/MiraiGo v0.0.0-20200827182935-51e155ef20da h1:T2Qz4w6sMrBxw+oiwbUa/c996jWYulCAtM+x1L0l3R8= +github.com/Mrs4s/MiraiGo v0.0.0-20200827182935-51e155ef20da/go.mod h1:0je03wji/tSw4bUH4QCF2Z4/EjyNWjSJTyy5tliX6EM= 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,21 +42,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.1 h1:2i3eqQ1KUhTlj7AFeIHqVUFku5QwUhwE2wNgYTVpbxQ= github.com/guonaihong/gout v0.1.1/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 h1:9yzud/Ht36ygwatGx56VwCZtlI/2AD15T1X2sjSuGns= 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= github.com/konsorten/go-windows-terminal-sequences v1.0.3 h1:CE8S1cTafDpPvMhIxNJKvHsGVBgn1xWYf1NbHQhywc8= @@ -69,7 +59,6 @@ github.com/konsorten/go-windows-terminal-sequences v1.0.3/go.mod h1:T0+1ngSBFLxv 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.3.0+incompatible h1:4mNlp+/SvALIPFpbXV3kxNJJno9iKFWGxSDE13Kl66Q= github.com/lestrrat-go/file-rotatelogs v2.3.0+incompatible/go.mod h1:ZQnN8lSECaebrkQytbHj4xNgtg8CR7RYXnPok8e0EHA= @@ -78,16 +67,13 @@ github.com/lestrrat-go/strftime v1.0.1/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/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= @@ -99,11 +85,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.0 h1:9VEQWz6LLMUsUl6PueE49ir4Ka6CzLymOAZDxpFsTDc= github.com/tidwall/gjson v1.6.0/go.mod h1:P256ACg0Mn+j1RXIDXoss50DeIABTYK1PULOJHhxOls= @@ -154,7 +138,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= @@ -174,7 +157,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= From 027aeca622cdc838312dc34de603cf5c8aaa6152 Mon Sep 17 00:00:00 2001 From: ceerRep <895986658@qq.com> Date: Fri, 28 Aug 2020 15:02:53 +0800 Subject: [PATCH 10/70] Fix indent --- docs/config.md | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/docs/config.md b/docs/config.md index 7ee7c56..bda965c 100644 --- a/docs/config.md +++ b/docs/config.md @@ -27,7 +27,7 @@ go-cqhttp 支持导入CQHTTP的配置文件, 具体步骤为: "post_message_format": "string", "ignore_invalid_cqcode": false, "force_fragmented": true, - "heartbeat_interval": 5, + "heartbeat_interval": 5, "http_config": { "enabled": true, "host": "0.0.0.0", @@ -77,4 +77,4 @@ go-cqhttp 支持导入CQHTTP的配置文件, 具体步骤为: > 注2: 分片发送为原酷Q发送长消息的老方案, 发送速度更优/兼容性更好。关闭后将优先使用新方案, 能发送更长的消息, 但发送速度更慢,在部分老客户端将无法解析. -> 注3:关闭心跳服务可能引起断线,请谨慎关闭 \ No newline at end of file +> 注3:关闭心跳服务可能引起断线,请谨慎关闭 From 4d376c05186a1498692982642f121b024606b7e0 Mon Sep 17 00:00:00 2001 From: QianjuNakasumi Date: Fri, 28 Aug 2020 23:46:29 +0800 Subject: [PATCH 11/70] =?UTF-8?q?=E6=96=B0=E5=A2=9E=E5=A4=9A=E6=AC=A1?= =?UTF-8?q?=E8=87=AA=E5=8A=A8=E9=87=8D=E8=BF=9E?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- docs/config.md | 8 ++++-- global/config.go | 32 +++++++++++++-------- main.go | 73 +++++++++++++++++++++++++++++------------------- 3 files changed, 72 insertions(+), 41 deletions(-) diff --git a/docs/config.md b/docs/config.md index 7ee7c56..f6af0f8 100644 --- a/docs/config.md +++ b/docs/config.md @@ -22,8 +22,11 @@ go-cqhttp 支持导入CQHTTP的配置文件, 具体步骤为: "password_encrypted": "", "enable_db": true, "access_token": "", - "relogin": false, - "relogin_delay": 0, + "relogin": { + "enabled": true, + "relogin_delay": 3, + "max_relogin_times": 0 + }, "post_message_format": "string", "ignore_invalid_cqcode": false, "force_fragmented": true, @@ -62,6 +65,7 @@ go-cqhttp 支持导入CQHTTP的配置文件, 具体步骤为: | access_token | string | 同CQHTTP的 `access_token` 用于身份验证 | | relogin | bool | 是否自动重新登录 | | relogin_delay | int | 重登录延时(秒) | +| max_relogin_times | uint | 最大重登录次数,若0则不设置上限 | | post_message_format | string | 上报信息类型 | | ignore_invalid_cqcode| bool | 是否忽略错误的CQ码 | | force_fragmented | bool | 是否强制分片发送群长消息 | diff --git a/global/config.go b/global/config.go index bd57850..a69f973 100644 --- a/global/config.go +++ b/global/config.go @@ -8,14 +8,17 @@ import ( ) type JsonConfig struct { - Uin int64 `json:"uin"` - Password string `json:"password"` - EncryptPassword bool `json:"encrypt_password"` - PasswordEncrypted string `json:"password_encrypted"` - EnableDB bool `json:"enable_db"` - AccessToken string `json:"access_token"` - ReLogin bool `json:"relogin"` - ReLoginDelay int `json:"relogin_delay"` + Uin int64 `json:"uin"` + Password string `json:"password"` + EncryptPassword bool `json:"encrypt_password"` + PasswordEncrypted string `json:"password_encrypted"` + EnableDB bool `json:"enable_db"` + AccessToken string `json:"access_token"` + ReLogin struct { + Enabled bool `json:"enabled"` + ReLoginDelay int `json:"relogin_delay"` + MaxReloginTimes uint `json:"max_relogin_times"` + } `json:"relogin"` IgnoreInvalidCQCode bool `json:"ignore_invalid_cqcode"` ForceFragmented bool `json:"force_fragmented"` HeartbeatInterval time.Duration `json:"heartbeat_interval"` @@ -70,9 +73,16 @@ type GoCQReverseWebsocketConfig struct { func DefaultConfig() *JsonConfig { return &JsonConfig{ - EnableDB: true, - ReLogin: true, - ReLoginDelay: 3, + EnableDB: true, + ReLogin: struct { + Enabled bool `json:"enabled"` + ReLoginDelay int `json:"relogin_delay"` + MaxReloginTimes uint `json:"max_relogin_times"` + }{ + Enabled: true, + ReLoginDelay: 3, + MaxReloginTimes: 0, + }, PostMessageFormat: "string", ForceFragmented: true, HttpConfig: &GoCQHttpConfig{ diff --git a/main.go b/main.go index 22740c3..f5eae47 100644 --- a/main.go +++ b/main.go @@ -7,16 +7,6 @@ import ( "encoding/base64" "encoding/json" "fmt" - "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/rifflock/lfshook" - log "github.com/sirupsen/logrus" - easy "github.com/t-tomalak/logrus-easy-formatter" - asciiart "github.com/yinghau76/go-ascii-art" "image" "io" "io/ioutil" @@ -26,6 +16,18 @@ import ( "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/rifflock/lfshook" + log "github.com/sirupsen/logrus" + easy "github.com/t-tomalak/logrus-easy-formatter" + asciiart "github.com/yinghau76/go-ascii-art" ) func init() { @@ -144,7 +146,7 @@ func main() { switch conf.LogLevel { case "warn": logPathMap = lfshook.PathMap{ - log.WarnLevel: path.Join("logs", date+"-warn.log"), + 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"), @@ -157,7 +159,7 @@ func main() { } default: logPathMap = lfshook.PathMap{ - log.WarnLevel: path.Join("logs", date+"-warn.log"), + 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"), @@ -278,24 +280,39 @@ func main() { log.Info("资源初始化完成, 开始处理信息.") log.Info("アトリは、高性能ですから!") cli.OnDisconnected(func(bot *client.QQClient, e *client.ClientDisconnectedEvent) { - if conf.ReLogin { - log.Warnf("Bot已离线 (%v),将在 %v 秒后尝试重连.", e.Message, conf.ReLoginDelay) - time.Sleep(time.Second * time.Duration(conf.ReLoginDelay)) - rsp, err := cli.Login() - if err != nil { - log.Fatalf("重连失败: %v", err) - } - if !rsp.Success { - switch rsp.Error { - case client.NeedCaptcha: - log.Fatalf("重连失败: 需要验证码. (验证码处理正在开发中)") - case client.UnsafeDeviceError: - log.Fatalf("重连失败: 设备锁") - default: - log.Fatalf("重连失败: %v", rsp.ErrorMessage) + 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 + } - return + log.Fatal("重连失败: 重连次数达到设置的上限值") } b.Release() log.Fatalf("Bot已离线:%v", e.Message) From 33120b249625061f15c19b601f43436bd72662d7 Mon Sep 17 00:00:00 2001 From: Ink33 <51873347+Ink-33@users.noreply.github.com> Date: Sat, 29 Aug 2020 16:44:31 +0800 Subject: [PATCH 12/70] Update websocket.go --- server/websocket.go | 6 +++--- 1 file changed, 3 insertions(+), 3 deletions(-) diff --git a/server/websocket.go b/server/websocket.go index 7f0cae6..bc917e9 100644 --- a/server/websocket.go +++ b/server/websocket.go @@ -206,7 +206,7 @@ func (c *websocketClient) onBotPushEvent(m coolq.MSG) { func (s *websocketServer) event(w http.ResponseWriter, r *http.Request) { if s.token != "" { - if r.URL.Query().Get("access_token") != s.token && strings.SplitN(r.Header.Get("Authorization"), " ", 2)[1] != s.token { + if r.URL.Query().Get("access_token") != s.token || strings.SplitN(r.Header.Get("Authorization"), " ", 2)[1] != s.token { log.Warnf("已拒绝 %v 的 Websocket 请求: Token错误", r.RemoteAddr) w.WriteHeader(401) return @@ -235,7 +235,7 @@ func (s *websocketServer) event(w http.ResponseWriter, r *http.Request) { func (s *websocketServer) api(w http.ResponseWriter, r *http.Request) { if s.token != "" { - if r.URL.Query().Get("access_token") != s.token && strings.SplitN(r.Header.Get("Authorization"), " ", 2)[1] != s.token { + if r.URL.Query().Get("access_token") != s.token || strings.SplitN(r.Header.Get("Authorization"), " ", 2)[1] != s.token { log.Warnf("已拒绝 %v 的 Websocket 请求: Token错误", r.RemoteAddr) w.WriteHeader(401) return @@ -253,7 +253,7 @@ func (s *websocketServer) api(w http.ResponseWriter, r *http.Request) { func (s *websocketServer) any(w http.ResponseWriter, r *http.Request) { if s.token != "" { - if r.URL.Query().Get("access_token") != s.token && strings.SplitN(r.Header.Get("Authorization"), " ", 2)[1] != s.token { + if r.URL.Query().Get("access_token") != s.token || strings.SplitN(r.Header.Get("Authorization"), " ", 2)[1] != s.token { log.Warnf("已拒绝 %v 的 Websocket 请求: Token错误", r.RemoteAddr) w.WriteHeader(401) return From d0398f30c6c40cc934501db468ff1857ba75c937 Mon Sep 17 00:00:00 2001 From: Ink-33 Date: Sat, 29 Aug 2020 17:06:25 +0800 Subject: [PATCH 13/70] Revert "Update websocket.go" This reverts commit 33120b249625061f15c19b601f43436bd72662d7. revert --- server/websocket.go | 6 +++--- 1 file changed, 3 insertions(+), 3 deletions(-) diff --git a/server/websocket.go b/server/websocket.go index bc917e9..7f0cae6 100644 --- a/server/websocket.go +++ b/server/websocket.go @@ -206,7 +206,7 @@ func (c *websocketClient) onBotPushEvent(m coolq.MSG) { func (s *websocketServer) event(w http.ResponseWriter, r *http.Request) { if s.token != "" { - if r.URL.Query().Get("access_token") != s.token || strings.SplitN(r.Header.Get("Authorization"), " ", 2)[1] != s.token { + if r.URL.Query().Get("access_token") != s.token && strings.SplitN(r.Header.Get("Authorization"), " ", 2)[1] != s.token { log.Warnf("已拒绝 %v 的 Websocket 请求: Token错误", r.RemoteAddr) w.WriteHeader(401) return @@ -235,7 +235,7 @@ func (s *websocketServer) event(w http.ResponseWriter, r *http.Request) { func (s *websocketServer) api(w http.ResponseWriter, r *http.Request) { if s.token != "" { - if r.URL.Query().Get("access_token") != s.token || strings.SplitN(r.Header.Get("Authorization"), " ", 2)[1] != s.token { + if r.URL.Query().Get("access_token") != s.token && strings.SplitN(r.Header.Get("Authorization"), " ", 2)[1] != s.token { log.Warnf("已拒绝 %v 的 Websocket 请求: Token错误", r.RemoteAddr) w.WriteHeader(401) return @@ -253,7 +253,7 @@ func (s *websocketServer) api(w http.ResponseWriter, r *http.Request) { func (s *websocketServer) any(w http.ResponseWriter, r *http.Request) { if s.token != "" { - if r.URL.Query().Get("access_token") != s.token || strings.SplitN(r.Header.Get("Authorization"), " ", 2)[1] != s.token { + if r.URL.Query().Get("access_token") != s.token && strings.SplitN(r.Header.Get("Authorization"), " ", 2)[1] != s.token { log.Warnf("已拒绝 %v 的 Websocket 请求: Token错误", r.RemoteAddr) w.WriteHeader(401) return From 9c65ff4dcd86e1d67dd3f8d3b7a36761c67d7bd1 Mon Sep 17 00:00:00 2001 From: Ink-33 Date: Sat, 29 Aug 2020 17:24:09 +0800 Subject: [PATCH 14/70] =?UTF-8?q?=E5=B0=9D=E8=AF=95=E4=BF=AE=E5=A4=8D?= =?UTF-8?q?=E6=AD=A3=E5=90=91WebSocket=E4=B8=8B=E7=9A=84=E9=89=B4=E6=9D=83?= =?UTF-8?q?panic?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- server/websocket.go | 24 +++++++++++++++++++++--- 1 file changed, 21 insertions(+), 3 deletions(-) diff --git a/server/websocket.go b/server/websocket.go index 7f0cae6..5887d8a 100644 --- a/server/websocket.go +++ b/server/websocket.go @@ -206,10 +206,16 @@ func (c *websocketClient) onBotPushEvent(m coolq.MSG) { func (s *websocketServer) event(w http.ResponseWriter, r *http.Request) { if s.token != "" { - if r.URL.Query().Get("access_token") != s.token && strings.SplitN(r.Header.Get("Authorization"), " ", 2)[1] != s.token { + if r.URL.Query().Get("access_token") != s.token { log.Warnf("已拒绝 %v 的 Websocket 请求: Token错误", r.RemoteAddr) w.WriteHeader(401) return + } else if auth := r.Header.Get("Authorization"); auth != "" { + if strings.SplitN(auth, " ", 2)[1] != s.token { + log.Warnf("已拒绝 %v 的 Websocket 请求: Token错误", r.RemoteAddr) + w.WriteHeader(401) + return + } } } c, err := upgrader.Upgrade(w, r, nil) @@ -235,10 +241,16 @@ func (s *websocketServer) event(w http.ResponseWriter, r *http.Request) { func (s *websocketServer) api(w http.ResponseWriter, r *http.Request) { if s.token != "" { - if r.URL.Query().Get("access_token") != s.token && strings.SplitN(r.Header.Get("Authorization"), " ", 2)[1] != s.token { + if r.URL.Query().Get("access_token") != s.token { log.Warnf("已拒绝 %v 的 Websocket 请求: Token错误", r.RemoteAddr) w.WriteHeader(401) return + } else if auth := r.Header.Get("Authorization"); auth != "" { + if strings.SplitN(auth, " ", 2)[1] != s.token { + log.Warnf("已拒绝 %v 的 Websocket 请求: Token错误", r.RemoteAddr) + w.WriteHeader(401) + return + } } } c, err := upgrader.Upgrade(w, r, nil) @@ -253,10 +265,16 @@ func (s *websocketServer) api(w http.ResponseWriter, r *http.Request) { func (s *websocketServer) any(w http.ResponseWriter, r *http.Request) { if s.token != "" { - if r.URL.Query().Get("access_token") != s.token && strings.SplitN(r.Header.Get("Authorization"), " ", 2)[1] != s.token { + if r.URL.Query().Get("access_token") != s.token { log.Warnf("已拒绝 %v 的 Websocket 请求: Token错误", r.RemoteAddr) w.WriteHeader(401) return + } else if auth := r.Header.Get("Authorization"); auth != "" { + if strings.SplitN(auth, " ", 2)[1] != s.token { + log.Warnf("已拒绝 %v 的 Websocket 请求: Token错误", r.RemoteAddr) + w.WriteHeader(401) + return + } } } c, err := upgrader.Upgrade(w, r, nil) From f5692253050c9ed0fd36557b5d73d515d6b30b3c Mon Sep 17 00:00:00 2001 From: Ink-33 Date: Sat, 29 Aug 2020 17:49:40 +0800 Subject: [PATCH 15/70] =?UTF-8?q?=E5=8A=A0=E8=BD=BD=E9=85=8D=E7=BD=AE?= =?UTF-8?q?=E5=A4=B1=E8=B4=A5=E5=90=8E=E5=A4=87=E4=BB=BD=E6=BA=90=E9=85=8D?= =?UTF-8?q?=E7=BD=AE=E6=96=87=E4=BB=B6=20=E9=85=8D=E7=BD=AE=E7=BB=93?= =?UTF-8?q?=E6=9E=84=E5=8D=87=E7=BA=A7=E4=B8=8D=E5=A4=87=E4=BB=BD=EF=BC=8C?= =?UTF-8?q?=E6=88=91=E9=85=8D=E7=BD=AE=E6=B2=A1=E4=BA=86?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- global/config.go | 4 ++++ 1 file changed, 4 insertions(+) diff --git a/global/config.go b/global/config.go index a69f973..07ba209 100644 --- a/global/config.go +++ b/global/config.go @@ -2,6 +2,8 @@ package global import ( "encoding/json" + "os" + "strconv" "time" log "github.com/sirupsen/logrus" @@ -117,6 +119,8 @@ func Load(p string) *JsonConfig { err := json.Unmarshal([]byte(ReadAllText(p)), &c) if err != nil { log.Warnf("尝试加载配置文件 %v 时出现错误: %v", p, err) + log.Infoln("原文件已备份") + os.Rename(p, p+".backup"+strconv.FormatInt(time.Now().Unix(), 10)) return nil } return &c From 804bd9a711ee5f4d562cadf5956a69092653450b Mon Sep 17 00:00:00 2001 From: Ink-33 Date: Sat, 29 Aug 2020 17:54:39 +0800 Subject: [PATCH 16/70] =?UTF-8?q?=E5=8D=87=E7=BA=A7=E4=BE=9D=E8=B5=96?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- go.mod | 10 ++++++---- go.sum | 18 ++++++++++++++++++ 2 files changed, 24 insertions(+), 4 deletions(-) diff --git a/go.mod b/go.mod index d32cd0f..0c1dda9 100644 --- a/go.mod +++ b/go.mod @@ -7,18 +7,20 @@ require ( github.com/fastly/go-utils v0.0.0-20180712184237-d95a45783239 // indirect github.com/gin-gonic/gin v1.6.3 github.com/gorilla/websocket v1.4.2 - github.com/guonaihong/gout v0.1.1 + 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/lestrrat-go/file-rotatelogs v2.3.0+incompatible - github.com/lestrrat-go/strftime v1.0.1 // indirect + 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.6.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.0 + 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/sys v0.0.0-20200625212154-ddb9806d33ae // indirect + golang.org/x/net v0.0.0-20200822124328-c89045814202 // indirect + golang.org/x/sys v0.0.0-20200828194041-157a740278f4 // indirect + gopkg.in/yaml.v2 v2.3.0 // indirect ) diff --git a/go.sum b/go.sum index 3eeba5c..95a0168 100644 --- a/go.sum +++ b/go.sum @@ -49,6 +49,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.1 h1:2i3eqQ1KUhTlj7AFeIHqVUFku5QwUhwE2wNgYTVpbxQ= github.com/guonaihong/gout v0.1.1/go.mod h1:vXvv5Kxr70eM5wrp4F0+t9lnLWmq+YPW2GByll2f/EA= +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= @@ -64,6 +66,8 @@ github.com/lestrrat-go/file-rotatelogs v2.3.0+incompatible h1:4mNlp+/SvALIPFpbXV github.com/lestrrat-go/file-rotatelogs v2.3.0+incompatible/go.mod h1:ZQnN8lSECaebrkQytbHj4xNgtg8CR7RYXnPok8e0EHA= github.com/lestrrat-go/strftime v1.0.1 h1:o7qz5pmLzPDLyGW4lG6JvTKPUfTFXwe+vOamIYWtnVU= github.com/lestrrat-go/strftime v1.0.1/go.mod h1:E1nN3pCbtMSu1yjSVeyuRFVm/U0xoR76fd03sz+Qz4g= +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= @@ -91,10 +95,14 @@ github.com/t-tomalak/logrus-easy-formatter v0.0.0-20190827215021-c074f06c5816/go github.com/tebeka/strftime v0.1.5/go.mod h1:29/OidkoWHdEKZqzyDLUyC+LmgDgdHo4WAFCDT7D/Ig= github.com/tidwall/gjson v1.6.0 h1:9VEQWz6LLMUsUl6PueE49ir4Ka6CzLymOAZDxpFsTDc= github.com/tidwall/gjson v1.6.0/go.mod h1:P256ACg0Mn+j1RXIDXoss50DeIABTYK1PULOJHhxOls= +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.0 h1:HsD+QiTn7sK6flMKIvNmpqz1qrpP3Ps6jOKIKMooyg4= github.com/tidwall/pretty v1.0.0/go.mod h1:XNkn88O1ChpSDQmQeStsy+sBenx6DDtFZJxhVysOjyk= +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/codec v1.1.7 h1:2SvQaVZ1ouYrrKKwoSk2pzd4A9evlKJb9oTL+OaLUSs= @@ -109,6 +117,7 @@ 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/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= @@ -117,8 +126,11 @@ 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-20200822124328-c89045814202 h1:VvcQYSHwXgi7W+TpUR6A9g6Up98WAHf3f/ulnJ62IyA= +golang.org/x/net v0.0.0-20200822124328-c89045814202/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= @@ -126,11 +138,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-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-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-20200625212154-ddb9806d33ae h1:Ih9Yo4hSPImZOpfGuA4bR/ORKTAbhZo2AbWNRCnevdo= golang.org/x/sys v0.0.0-20200625212154-ddb9806d33ae/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs= +golang.org/x/sys v0.0.0-20200828194041-157a740278f4 h1:kCCpuwSAoYJPkNc6x0xT9yTtV4oKtARo4RGBQWOfg9E= +golang.org/x/sys v0.0.0-20200828194041-157a740278f4/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/tools v0.0.0-20180917221912-90fa682c2a6e/go.mod h1:n7NCudcB/nEzxVGmLbDWY5pfWTLqBcC2KZ6jyYvM4mQ= @@ -163,5 +179,7 @@ gopkg.in/go-playground/validator.v9 v9.29.1/go.mod h1:+c9/zcJMFNgbLvly1L1V+PpxWd 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 047b5208f4f50a543a4a12a7646b5ae28551102a Mon Sep 17 00:00:00 2001 From: Ink-33 Date: Sat, 29 Aug 2020 17:55:08 +0800 Subject: [PATCH 17/70] =?UTF-8?q?Builder=E6=9B=B4=E6=8D=A2=E4=B8=BA1.14.7?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- Dockerfile | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/Dockerfile b/Dockerfile index 62ddbbd..478327d 100644 --- a/Dockerfile +++ b/Dockerfile @@ -1,4 +1,4 @@ -FROM golang:1.14.2-alpine AS builder +FROM golang:1.14.7-alpine AS builder RUN go env -w GO111MODULE=auto \ && go env -w CGO_ENABLED=0 \ From d35ad66adf1f27cbbe99108ba25c82a6b2b91879 Mon Sep 17 00:00:00 2001 From: Ink-33 Date: Sat, 29 Aug 2020 20:24:11 +0800 Subject: [PATCH 18/70] =?UTF-8?q?=E6=8B=92=E7=BB=9D=E7=A9=BAToken?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- server/websocket.go | 18 +++++++++++++++--- 1 file changed, 15 insertions(+), 3 deletions(-) diff --git a/server/websocket.go b/server/websocket.go index 5887d8a..d326665 100644 --- a/server/websocket.go +++ b/server/websocket.go @@ -206,7 +206,7 @@ func (c *websocketClient) onBotPushEvent(m coolq.MSG) { func (s *websocketServer) event(w http.ResponseWriter, r *http.Request) { if s.token != "" { - if r.URL.Query().Get("access_token") != s.token { + if auth := r.URL.Query().Get("access_token"); auth != s.token && auth != "" { log.Warnf("已拒绝 %v 的 Websocket 请求: Token错误", r.RemoteAddr) w.WriteHeader(401) return @@ -216,6 +216,10 @@ func (s *websocketServer) event(w http.ResponseWriter, r *http.Request) { w.WriteHeader(401) return } + } else { + log.Warnf("已拒绝 %v 的 Websocket 请求: 空Token", r.RemoteAddr) + w.WriteHeader(401) + return } } c, err := upgrader.Upgrade(w, r, nil) @@ -241,7 +245,7 @@ func (s *websocketServer) event(w http.ResponseWriter, r *http.Request) { func (s *websocketServer) api(w http.ResponseWriter, r *http.Request) { if s.token != "" { - if r.URL.Query().Get("access_token") != s.token { + if auth := r.URL.Query().Get("access_token"); auth != s.token && auth != "" { log.Warnf("已拒绝 %v 的 Websocket 请求: Token错误", r.RemoteAddr) w.WriteHeader(401) return @@ -251,6 +255,10 @@ func (s *websocketServer) api(w http.ResponseWriter, r *http.Request) { w.WriteHeader(401) return } + } else { + log.Warnf("已拒绝 %v 的 Websocket 请求: 空Token", r.RemoteAddr) + w.WriteHeader(401) + return } } c, err := upgrader.Upgrade(w, r, nil) @@ -265,7 +273,7 @@ func (s *websocketServer) api(w http.ResponseWriter, r *http.Request) { func (s *websocketServer) any(w http.ResponseWriter, r *http.Request) { if s.token != "" { - if r.URL.Query().Get("access_token") != s.token { + if auth := r.URL.Query().Get("access_token"); auth != s.token && auth != "" { log.Warnf("已拒绝 %v 的 Websocket 请求: Token错误", r.RemoteAddr) w.WriteHeader(401) return @@ -275,6 +283,10 @@ func (s *websocketServer) any(w http.ResponseWriter, r *http.Request) { w.WriteHeader(401) return } + } else { + log.Warnf("已拒绝 %v 的 Websocket 请求: 空Token", r.RemoteAddr) + w.WriteHeader(401) + return } } c, err := upgrader.Upgrade(w, r, nil) From 1f7c4cab5072959d24f68c1ebd77524fdfc0c31b Mon Sep 17 00:00:00 2001 From: Ink-33 Date: Sat, 29 Aug 2020 22:24:53 +0800 Subject: [PATCH 19/70] Update --- server/websocket.go | 18 +++++++++--------- 1 file changed, 9 insertions(+), 9 deletions(-) diff --git a/server/websocket.go b/server/websocket.go index d326665..5c04d52 100644 --- a/server/websocket.go +++ b/server/websocket.go @@ -210,14 +210,14 @@ func (s *websocketServer) event(w http.ResponseWriter, r *http.Request) { log.Warnf("已拒绝 %v 的 Websocket 请求: Token错误", r.RemoteAddr) w.WriteHeader(401) return - } else if auth := r.Header.Get("Authorization"); auth != "" { - if strings.SplitN(auth, " ", 2)[1] != s.token { + } else if auth := strings.SplitN(r.Header.Get("Authorization"), " ", 2); len(auth) == 2 { + if auth[1] != s.token { log.Warnf("已拒绝 %v 的 Websocket 请求: Token错误", r.RemoteAddr) w.WriteHeader(401) return } } else { - log.Warnf("已拒绝 %v 的 Websocket 请求: 空Token", r.RemoteAddr) + log.Warnf("已拒绝 %v 的 Websocket 请求: 空Token或传入格式错误", r.RemoteAddr) w.WriteHeader(401) return } @@ -249,14 +249,14 @@ func (s *websocketServer) api(w http.ResponseWriter, r *http.Request) { log.Warnf("已拒绝 %v 的 Websocket 请求: Token错误", r.RemoteAddr) w.WriteHeader(401) return - } else if auth := r.Header.Get("Authorization"); auth != "" { - if strings.SplitN(auth, " ", 2)[1] != s.token { + } else if auth := strings.SplitN(r.Header.Get("Authorization"), " ", 2); len(auth) == 2 { + if auth[1] != s.token { log.Warnf("已拒绝 %v 的 Websocket 请求: Token错误", r.RemoteAddr) w.WriteHeader(401) return } } else { - log.Warnf("已拒绝 %v 的 Websocket 请求: 空Token", r.RemoteAddr) + log.Warnf("已拒绝 %v 的 Websocket 请求: 空Token或传入格式错误", r.RemoteAddr) w.WriteHeader(401) return } @@ -277,14 +277,14 @@ func (s *websocketServer) any(w http.ResponseWriter, r *http.Request) { log.Warnf("已拒绝 %v 的 Websocket 请求: Token错误", r.RemoteAddr) w.WriteHeader(401) return - } else if auth := r.Header.Get("Authorization"); auth != "" { - if strings.SplitN(auth, " ", 2)[1] != s.token { + } else if auth := strings.SplitN(r.Header.Get("Authorization"), " ", 2); len(auth) == 2 { + if auth[1] != s.token { log.Warnf("已拒绝 %v 的 Websocket 请求: Token错误", r.RemoteAddr) w.WriteHeader(401) return } } else { - log.Warnf("已拒绝 %v 的 Websocket 请求: 空Token", r.RemoteAddr) + log.Warnf("已拒绝 %v 的 Websocket 请求: 空Token或传入格式错误", r.RemoteAddr) w.WriteHeader(401) return } From fc18b84d4b15c6dd5e658cd0233af8afdab14495 Mon Sep 17 00:00:00 2001 From: scjtqs Date: Sun, 30 Aug 2020 02:28:01 +0800 Subject: [PATCH 20/70] =?UTF-8?q?=E6=B7=BB=E5=8A=A0=20[CQ:json,data=3D{jso?= =?UTF-8?q?n=E4=BB=A3=E7=A0=81}]=E7=9A=84=E6=94=AF=E6=8C=81?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- coolq/cqcode.go | 3 +++ docs/cqhttp.md | 6 ++++++ global/net.go | 9 +++++++++ 3 files changed, 18 insertions(+) diff --git a/coolq/cqcode.go b/coolq/cqcode.go index 4c5e8b4..cc569ea 100644 --- a/coolq/cqcode.go +++ b/coolq/cqcode.go @@ -470,6 +470,9 @@ func (bot *CQBot) ToElement(t string, d map[string]string, group bool) (message. i, _ := strconv.ParseInt(resId, 10, 64) msg := global.NewXmlMsg(template, i) return msg, nil + case "json": + msg := global.NewJsonMsg(d["data"]) + return msg, nil default: return nil, errors.New("unsupported cq code: " + t) } diff --git a/docs/cqhttp.md b/docs/cqhttp.md index a0f5c42..457cd4a 100644 --- a/docs/cqhttp.md +++ b/docs/cqhttp.md @@ -135,8 +135,11 @@ Type: `xml` 示例: `[CQ:xml,data=xxxx]` ####一些xml样例 + ####ps:重要:xml中的value部分,记得html实体化处理后,再打加入到cq码中 + #### qq音乐 + ```xml ``` @@ -165,6 +168,9 @@ Type: `xml` ``` +###json消息支持 + +json中的","逗号,需要转义成`,`,否则无法正确得到解析 ## API diff --git a/global/net.go b/global/net.go index d3cf1a7..b0bf936 100644 --- a/global/net.go +++ b/global/net.go @@ -59,3 +59,12 @@ func NewXmlMsg(template string,ResId int64) *message.ServiceElement{ SubType: "xml", } } + +func NewJsonMsg(template string) *message.ServiceElement{ + return &message.ServiceElement{ + Id: 1, + Content: template, + ResId: "1", + SubType: "json", + } +} From bcdbefb355b11b783a017114a9e84ebd368b4bb1 Mon Sep 17 00:00:00 2001 From: scjtqs Date: Sun, 30 Aug 2020 02:29:29 +0800 Subject: [PATCH 21/70] go fmt --- global/net.go | 12 ++++++------ server/http.go | 1 - 2 files changed, 6 insertions(+), 7 deletions(-) diff --git a/global/net.go b/global/net.go index b0bf936..9abcbe5 100644 --- a/global/net.go +++ b/global/net.go @@ -44,12 +44,12 @@ func QQMusicSongInfo(id string) (gjson.Result, error) { return gjson.ParseBytes(d).Get("songinfo.data"), nil } -func NewXmlMsg(template string,ResId int64) *message.ServiceElement{ +func NewXmlMsg(template string, ResId int64) *message.ServiceElement { var serviceid string - if ResId == 0{ - serviceid ="2" //默认值2 - }else{ - serviceid = strconv.FormatInt(ResId,10) + if ResId == 0 { + serviceid = "2" //默认值2 + } else { + serviceid = strconv.FormatInt(ResId, 10) } //println(serviceid) return &message.ServiceElement{ @@ -60,7 +60,7 @@ func NewXmlMsg(template string,ResId int64) *message.ServiceElement{ } } -func NewJsonMsg(template string) *message.ServiceElement{ +func NewJsonMsg(template string) *message.ServiceElement { return &message.ServiceElement{ Id: 1, Content: template, diff --git a/server/http.go b/server/http.go index ad864f5..168856b 100644 --- a/server/http.go +++ b/server/http.go @@ -400,7 +400,6 @@ func getParamOrDefault(c *gin.Context, k, def string) string { return def } - func getParam(c *gin.Context, k string) string { p, _ := getParamWithType(c, k) return p From d25674a9ef8931c5b4fa9478b7b9f2115f75da4c Mon Sep 17 00:00:00 2001 From: scjtqs Date: Sun, 30 Aug 2020 03:00:18 +0800 Subject: [PATCH 22/70] =?UTF-8?q?json=20=E5=88=9D=E6=AD=A5=E6=94=AF?= =?UTF-8?q?=E6=8C=81?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- docs/cqhttp.md | 12 +++++++++++- 1 file changed, 11 insertions(+), 1 deletion(-) diff --git a/docs/cqhttp.md b/docs/cqhttp.md index 457cd4a..0c6f17f 100644 --- a/docs/cqhttp.md +++ b/docs/cqhttp.md @@ -170,7 +170,17 @@ Type: `xml` ###json消息支持 -json中的","逗号,需要转义成`,`,否则无法正确得到解析 +json中的字符串需要进行转义: + +>","=>`,`、 + +>"&"=> `&`、 + +>"["=>`[`、 + +>"]"=>`]`、 + +否则无法正确得到解析 ## API From 710a8588b7911f9793baf2bb410341a18bf98c9d Mon Sep 17 00:00:00 2001 From: scjtqs Date: Mon, 31 Aug 2020 00:34:38 +0800 Subject: [PATCH 23/70] =?UTF-8?q?cq:json=20=E6=B6=88=E6=81=AF=E7=9A=84?= =?UTF-8?q?=E5=88=9D=E6=AD=A5=E6=94=AF=E6=8C=81?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- coolq/cqcode.go | 5 +++-- 1 file changed, 3 insertions(+), 2 deletions(-) diff --git a/coolq/cqcode.go b/coolq/cqcode.go index 591dd47..0da592b 100644 --- a/coolq/cqcode.go +++ b/coolq/cqcode.go @@ -502,10 +502,11 @@ func (bot *CQBot) ToElement(t string, d map[string]string, group bool) (message. template := CQCodeEscapeValue(d["data"]) //println(template) i, _ := strconv.ParseInt(resId, 10, 64) - msg := global.NewXmlMsg(template, i) + msg := message.NewXmlMsg(template, i) return msg, nil case "json": - msg := global.NewJsonMsg(d["data"]) + log.Warnf("json msg=%s", d["data"]) + msg := message.NewJsonMsg(CQCodeUnescapeValue(d["data"])) return msg, nil default: return nil, errors.New("unsupported cq code: " + t) From a455aeea392d1e98cb81f40cf9e5e875aa6b2af9 Mon Sep 17 00:00:00 2001 From: scjtqs Date: Mon, 31 Aug 2020 00:36:42 +0800 Subject: [PATCH 24/70] =?UTF-8?q?=E5=8E=BB=E6=8E=89=E4=B8=8D=E9=9C=80?= =?UTF-8?q?=E8=A6=81=E7=9A=84=E6=96=B9=E6=B3=95?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- global/net.go | 26 -------------------------- 1 file changed, 26 deletions(-) diff --git a/global/net.go b/global/net.go index c7341b7..55f27de 100644 --- a/global/net.go +++ b/global/net.go @@ -4,11 +4,9 @@ import ( "bytes" "compress/gzip" "fmt" - "github.com/Mrs4s/MiraiGo/message" "github.com/tidwall/gjson" "io/ioutil" "net/http" - "strconv" "strings" ) @@ -53,27 +51,3 @@ func NeteaseMusicSongInfo(id string) (gjson.Result, error) { return gjson.ParseBytes(d).Get("songs.0"), nil } -func NewXmlMsg(template string, ResId int64) *message.ServiceElement { - var serviceid string - if ResId == 0 { - serviceid = "2" //默认值2 - } else { - serviceid = strconv.FormatInt(ResId, 10) - } - //println(serviceid) - return &message.ServiceElement{ - Id: int32(ResId), - Content: template, - ResId: serviceid, - SubType: "xml", - } -} - -func NewJsonMsg(template string) *message.ServiceElement { - return &message.ServiceElement{ - Id: 1, - Content: template, - ResId: "1", - SubType: "json", - } -} From a0483530670a570ac4372ad252eb371ee18087c9 Mon Sep 17 00:00:00 2001 From: scjtqs Date: Mon, 31 Aug 2020 00:45:36 +0800 Subject: [PATCH 25/70] =?UTF-8?q?json=20cq=20=E7=A0=81=20=E6=B7=BB?= =?UTF-8?q?=E5=8A=A0=20=E8=AF=B4=E6=98=8E?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- docs/cqhttp.md | 15 +++++++++++++++ 1 file changed, 15 insertions(+) diff --git a/docs/cqhttp.md b/docs/cqhttp.md index 0c6f17f..f664276 100644 --- a/docs/cqhttp.md +++ b/docs/cqhttp.md @@ -170,6 +170,16 @@ Type: `xml` ###json消息支持 +Type: `json` + +范围: **发送** + +参数: + +| 参数名 | 类型 | 说明 | +| ------ | ------ | ------------------------------------------------------------ | +| data | string | json内容,json的所有字符串记得实体化处理| + json中的字符串需要进行转义: >","=>`,`、 @@ -182,6 +192,11 @@ json中的字符串需要进行转义: 否则无法正确得到解析 +示例json 的cq码: +```test +[CQ:json,data={"app":"com.tencent.miniapp","desc":"","view":"notification","ver":"0.0.0.1","prompt":"[应用]","appID":"","sourceName":"","actionData":"","actionData_A":"","sourceUrl":"","meta":{"notification":{"appInfo":{"appName":"全国疫情数据统计","appType":4,"appid":1109659848,"iconUrl":"http:\/\/gchat.qpic.cn\/gchatpic_new\/719328335\/-2010394141-6383A777BEB79B70B31CE250142D740F\/0"},"data":[{"title":"确诊","value":"80932"},{"title":"今日确诊","value":"28"},{"title":"疑似","value":"72"},{"title":"今日疑似","value":"5"},{"title":"治愈","value":"60197"},{"title":"今日治愈","value":"1513"},{"title":"死亡","value":"3140"},{"title":"今**亡","value":"17"}],"title":"中国加油,武汉加油","button":[{"name":"病毒:SARS-CoV-2,其导致疾病命名 COVID-19","action":""},{"name":"传染源:新冠肺炎的患者。无症状感染者也可能成为传染源。","action":""}],"emphasis_keyword":""}},"text":"","sourceAd":""}] +``` + ## API ### 设置群名 From 9b5358351f1971ae3f75151846b8baee132cbff0 Mon Sep 17 00:00:00 2001 From: F0ur Date: Mon, 31 Aug 2020 22:58:03 +0800 Subject: [PATCH 26/70] feat(api): make GetFriendList/GetGroupList/GetGroupMemberList/GetForwardMessage json response data as [] instead of null --- coolq/api.go | 8 ++++---- 1 file changed, 4 insertions(+), 4 deletions(-) diff --git a/coolq/api.go b/coolq/api.go index 6be70e9..7f02ac6 100644 --- a/coolq/api.go +++ b/coolq/api.go @@ -25,7 +25,7 @@ func (bot *CQBot) CQGetLoginInfo() MSG { // https://cqhttp.cc/docs/4.15/#/API?id=get_friend_list-%E8%8E%B7%E5%8F%96%E5%A5%BD%E5%8F%8B%E5%88%97%E8%A1%A8 func (bot *CQBot) CQGetFriendList() MSG { - var fs []MSG + fs := make([]MSG, 0) for _, f := range bot.Client.FriendList { fs = append(fs, MSG{ "nickname": f.Nickname, @@ -38,7 +38,7 @@ func (bot *CQBot) CQGetFriendList() MSG { // https://cqhttp.cc/docs/4.15/#/API?id=get_group_list-%E8%8E%B7%E5%8F%96%E7%BE%A4%E5%88%97%E8%A1%A8 func (bot *CQBot) CQGetGroupList(noCache bool) MSG { - var gs []MSG + gs := make([]MSG, 0) if noCache { _ = bot.Client.ReloadGroupList() } @@ -73,7 +73,7 @@ func (bot *CQBot) CQGetGroupMemberList(groupId int64) MSG { if group == nil { return Failed(100) } - var members []MSG + members := make([]MSG, 0) for _, m := range group.Members { members = append(members, convertGroupMemberInfo(groupId, m)) } @@ -525,7 +525,7 @@ func (bot *CQBot) CQGetForwardMessage(resId string) MSG { if m == nil { return Failed(100) } - var r []MSG + r := make([]MSG, 0) for _, n := range m.Nodes { bot.checkMedia(n.Message) r = append(r, MSG{ From f487d12b83178fd7027b414597445cb000ef3bab Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?=E6=98=AF=E7=94=9C=E9=A3=9F=E5=93=87?= <54750485+shitianshiwa@users.noreply.github.com> Date: Tue, 1 Sep 2020 21:12:45 +0900 Subject: [PATCH 27/70] Update config.md --- docs/config.md | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/docs/config.md b/docs/config.md index d3b999c..cc5ff85 100644 --- a/docs/config.md +++ b/docs/config.md @@ -79,6 +79,6 @@ go-cqhttp 支持导入CQHTTP的配置文件, 具体步骤为: > 解密后密码将储存在内存中,用于自动重连等功能. 所以此加密并不能防止内存读取. > 解密密钥在使用完成后并不会留存在内存中, 所以可用相对简单的字符串作为密钥 -> 注2: 分片发送为原酷Q发送长消息的老方案, 发送速度更优/兼容性更好。关闭后将优先使用新方案, 能发送更长的消息, 但发送速度更慢,在部分老客户端将无法解析. +> 注2: 分片发送为原酷Q发送长消息的老方案, 发送速度更优/兼容性更好,但在有发言频率限制的群里,可能无法发送。关闭后将优先使用新方案, 能发送更长的消息, 但发送速度更慢,在部分老客户端将无法解析. > 注3:关闭心跳服务可能引起断线,请谨慎关闭 From 755949fb33a43391e78ac6e5a8d1714d310e0a06 Mon Sep 17 00:00:00 2001 From: Muchan Date: Wed, 2 Sep 2020 14:22:56 +0800 Subject: [PATCH 28/70] =?UTF-8?q?=E5=8F=8D=E5=90=91WS=E8=BF=9E=E6=8E=A5?= =?UTF-8?q?=E6=97=B6=E5=8F=91=E9=80=81connect=E5=85=83=E4=BA=8B=E4=BB=B6?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- server/websocket.go | 16 ++++++++++++++++ 1 file changed, 16 insertions(+) diff --git a/server/websocket.go b/server/websocket.go index 5c04d52..9c6c9c8 100644 --- a/server/websocket.go +++ b/server/websocket.go @@ -123,6 +123,14 @@ func (c *websocketClient) connectEvent() { } return } + + handshake := fmt.Sprintf(`{"meta_event_type":"lifecycle","post_type":"meta_event","self_id":%d,"sub_type":"connect","time":%d}`, + c.bot.Client.Uin, time.Now().Unix()) + err = conn.WriteMessage(websocket.TextMessage, []byte(handshake)) + if err != nil { + log.Warnf("反向Websocket 握手时出现错误: %v", err) + } + log.Infof("已连接到反向Websocket Event服务器 %v", c.conf.ReverseEventUrl) c.eventConn = &websocketConn{Conn: conn} } @@ -146,6 +154,14 @@ func (c *websocketClient) connectUniversal() { } return } + + handshake := fmt.Sprintf(`{"meta_event_type":"lifecycle","post_type":"meta_event","self_id":%d,"sub_type":"connect","time":%d}`, + c.bot.Client.Uin, time.Now().Unix()) + err = conn.WriteMessage(websocket.TextMessage, []byte(handshake)) + if err != nil { + log.Warnf("反向Websocket 握手时出现错误: %v", err) + } + wrappedConn := &websocketConn{Conn: conn} go c.listenApi(wrappedConn, true) c.universalConn = wrappedConn From 993f05bfa6bd827a39a76490975f9283ced12863 Mon Sep 17 00:00:00 2001 From: wdvxdr Date: Wed, 2 Sep 2020 22:26:56 +0800 Subject: [PATCH 29/70] feature [cq:music] send qqmusic share with json MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit 用json代替qq音乐的分享 --- coolq/cqcode.go | 17 +++++++++-------- go.mod | 18 +++++++++++++----- 2 files changed, 22 insertions(+), 13 deletions(-) diff --git a/coolq/cqcode.go b/coolq/cqcode.go index 40ce3c7..7804a0f 100644 --- a/coolq/cqcode.go +++ b/coolq/cqcode.go @@ -454,17 +454,18 @@ func (bot *CQBot) ToElement(t string, d map[string]string, group bool) (message. 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 + name := info.Get("track_info.name").Str + " - " + info.Get("track_info.singer.0.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") + jumpUrl := "https://i.y.qq.com/v8/playsong.html?platform=11&appshare=android_qq&appversion=10030010&hosteuin=oKnlNenz7i-s7c**&songmid="+ mid +"&type=0&appsongtype=1&_wv=1&source=qq&ADTAG=qfshare" + purl := gjson.ParseBytes(pinfo).Get("url_mid.data.midurlinfo.0.purl").Str + preview := "http://y.gtimg.cn/music/photo_new/T002R180x180M000"+ albumMid +".jpg" if len(aid) < 2 { return nil, errors.New("song error") } - xml := fmt.Sprintf(``, - name, d["id"], aid[:len(aid)-2], aid, name, "", info.Get("track_info.singer.name").Str) - return &message.ServiceElement{ - Id: 60, - Content: xml, - SubType: "music", - }, nil + json := fmt.Sprintf("{\"app\": \"com.tencent.structmsg\",\"desc\": \"音乐\",\"meta\": {\"music\": {\"desc\": \"来自MiraiGo\",\"jumpUrl\": \"%s\",\"musicUrl\": \"%s\",\"preview\": \"%s\",\"tag\": \"QQ音乐\",\"title\": \"%s\"}},\"prompt\": \"[分享]%s\",\"ver\": \"0.0.0.1\",\"view\": \"music\"}", jumpUrl, purl, preview, name, name) + return message.NewJsonMsg(json), nil } if d["type"] == "163" { info, err := global.NeteaseMusicSongInfo(d["id"]) diff --git a/go.mod b/go.mod index d32cd0f..92920fd 100644 --- a/go.mod +++ b/go.mod @@ -3,22 +3,30 @@ module github.com/Mrs4s/go-cqhttp go 1.14 require ( - github.com/Mrs4s/MiraiGo v0.0.0-20200827182935-51e155ef20da + github.com/Mrs4s/MiraiGo v0.0.0-20200901081949-6328ae0e93db 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/gorilla/websocket v1.4.2 - github.com/guonaihong/gout v0.1.1 + 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.3.0+incompatible - github.com/lestrrat-go/strftime v1.0.1 // indirect + 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/robertkrimen/otto v0.0.0-20191219234010-c382bd3c16ff github.com/sirupsen/logrus v1.6.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.0 + 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/sys v0.0.0-20200625212154-ddb9806d33ae // indirect + golang.org/x/net v0.0.0-20200822124328-c89045814202 // indirect + golang.org/x/sys v0.0.0-20200831180312-196b9ba8737a // indirect + gopkg.in/sourcemap.v1 v1.0.5 // indirect + gopkg.in/yaml.v2 v2.3.0 // indirect ) From ff8fd92a26ef86f005781038d55023bcacda1ae7 Mon Sep 17 00:00:00 2001 From: wdvxdr Date: Wed, 2 Sep 2020 22:45:17 +0800 Subject: [PATCH 30/70] Auto stash before merge of "master" and "origin/master" --- coolq/cqcode.go | 4 ++++ go.mod | 4 ++++ go.sum | 40 ++++++++++++++++++++++++++++++++++++++++ 3 files changed, 48 insertions(+) diff --git a/coolq/cqcode.go b/coolq/cqcode.go index 7804a0f..70e81f5 100644 --- a/coolq/cqcode.go +++ b/coolq/cqcode.go @@ -465,7 +465,11 @@ func (bot *CQBot) ToElement(t string, d map[string]string, group bool) (message. return nil, errors.New("song error") } json := fmt.Sprintf("{\"app\": \"com.tencent.structmsg\",\"desc\": \"音乐\",\"meta\": {\"music\": {\"desc\": \"来自MiraiGo\",\"jumpUrl\": \"%s\",\"musicUrl\": \"%s\",\"preview\": \"%s\",\"tag\": \"QQ音乐\",\"title\": \"%s\"}},\"prompt\": \"[分享]%s\",\"ver\": \"0.0.0.1\",\"view\": \"music\"}", jumpUrl, purl, preview, name, name) +<<<<<<< Updated upstream return message.NewJsonMsg(json), nil +======= + return message.NewLightApp(json), nil +>>>>>>> Stashed changes } if d["type"] == "163" { info, err := global.NeteaseMusicSongInfo(d["id"]) diff --git a/go.mod b/go.mod index 92920fd..35a38b8 100644 --- a/go.mod +++ b/go.mod @@ -3,7 +3,11 @@ module github.com/Mrs4s/go-cqhttp go 1.14 require ( +<<<<<<< Updated upstream github.com/Mrs4s/MiraiGo v0.0.0-20200901081949-6328ae0e93db +======= + github.com/Mrs4s/MiraiGo v0.0.0-20200902072401-56d3e65e98b5 +>>>>>>> Stashed changes 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 95a0168..4a5664e 100644 --- a/go.sum +++ b/go.sum @@ -2,20 +2,27 @@ 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-20200827182935-51e155ef20da h1:T2Qz4w6sMrBxw+oiwbUa/c996jWYulCAtM+x1L0l3R8= github.com/Mrs4s/MiraiGo v0.0.0-20200827182935-51e155ef20da/go.mod h1:0je03wji/tSw4bUH4QCF2Z4/EjyNWjSJTyy5tliX6EM= +github.com/Mrs4s/MiraiGo v0.0.0-20200901081949-6328ae0e93db h1:Iz5QWqqtwwSJh6A5mOK9Px14eBCv4mynCQDAJLO0x+o= +github.com/Mrs4s/MiraiGo v0.0.0-20200901081949-6328ae0e93db/go.mod h1:0je03wji/tSw4bUH4QCF2Z4/EjyNWjSJTyy5tliX6EM= +github.com/Mrs4s/MiraiGo v0.0.0-20200902072401-56d3e65e98b5 h1:q4nVSNiob0PWiU7gtof5A64mE2e+hCU45KGTqOVgoJg= +github.com/Mrs4s/MiraiGo v0.0.0-20200902072401-56d3e65e98b5/go.mod h1:0je03wji/tSw4bUH4QCF2Z4/EjyNWjSJTyy5tliX6EM= 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= @@ -25,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.3.0 h1:nZU+7q+yJoFmwvNgv/LnPUkwPal62+b2xXj0AU1Es7o= +github.com/go-playground/validator/v10 v10.3.0/go.mod h1:uOYAAleCW8F/7oMFd6aG0GOhaH6EGOAJShg8Id5JGkI= 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= @@ -42,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= @@ -51,16 +62,25 @@ github.com/guonaihong/gout v0.1.1 h1:2i3eqQ1KUhTlj7AFeIHqVUFku5QwUhwE2wNgYTVpbxQ github.com/guonaihong/gout v0.1.1/go.mod h1:vXvv5Kxr70eM5wrp4F0+t9lnLWmq+YPW2GByll2f/EA= github.com/guonaihong/gout v0.1.2 h1:TR2XCRopGgJdj231IayEoeavgbznFXzzzcZVdT/hG10= github.com/guonaihong/gout v0.1.2/go.mod h1:vXvv5Kxr70eM5wrp4F0+t9lnLWmq+YPW2GByll2f/EA= +<<<<<<< Updated upstream +======= +github.com/jehiah/go-strftime v0.0.0-20171201141054-1d33003b3869 h1:IPJ3dvxmJ4uczJe5YQdrYB16oTJlGSC/OyZDqUk9xX4= +>>>>>>> Stashed changes 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 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/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= +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.3.0+incompatible h1:4mNlp+/SvALIPFpbXV3kxNJJno9iKFWGxSDE13Kl66Q= github.com/lestrrat-go/file-rotatelogs v2.3.0+incompatible/go.mod h1:ZQnN8lSECaebrkQytbHj4xNgtg8CR7RYXnPok8e0EHA= @@ -71,17 +91,26 @@ 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/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/robertkrimen/otto v0.0.0-20191219234010-c382bd3c16ff h1:+6NUiITWwE5q1KO6SAfUX918c+Tab0+tGAM/mtdlUyA= +github.com/robertkrimen/otto v0.0.0-20191219234010-c382bd3c16ff/go.mod h1:xvqspoSXJTIpemEonrMDFq6XzwHYYgToXWj5eRX1OtY= 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= @@ -89,9 +118,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.0 h1:9VEQWz6LLMUsUl6PueE49ir4Ka6CzLymOAZDxpFsTDc= github.com/tidwall/gjson v1.6.0/go.mod h1:P256ACg0Mn+j1RXIDXoss50DeIABTYK1PULOJHhxOls= @@ -145,8 +176,13 @@ 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-20200625212154-ddb9806d33ae h1:Ih9Yo4hSPImZOpfGuA4bR/ORKTAbhZo2AbWNRCnevdo= golang.org/x/sys v0.0.0-20200625212154-ddb9806d33ae/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs= +<<<<<<< Updated upstream golang.org/x/sys v0.0.0-20200828194041-157a740278f4 h1:kCCpuwSAoYJPkNc6x0xT9yTtV4oKtARo4RGBQWOfg9E= golang.org/x/sys v0.0.0-20200828194041-157a740278f4/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs= +======= +golang.org/x/sys v0.0.0-20200831180312-196b9ba8737a h1:i47hUS795cOydZI4AwJQCKXOr4BvxzvikwDoDtHhP2Y= +golang.org/x/sys v0.0.0-20200831180312-196b9ba8737a/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs= +>>>>>>> Stashed changes 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/tools v0.0.0-20180917221912-90fa682c2a6e/go.mod h1:n7NCudcB/nEzxVGmLbDWY5pfWTLqBcC2KZ6jyYvM4mQ= @@ -154,6 +190,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= @@ -173,9 +210,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/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/sourcemap.v1 v1.0.5 h1:inv58fC9f9J3TK2Y2R1NPntXEn3/wjWHkonhIUODNTI= +gopkg.in/sourcemap.v1 v1.0.5/go.mod h1:2RlvNNSMglmRrcvhfuzp4hQHwOtjxlbjX7UPY/GXb78= 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 ad5e87c4c7f9a1f1c1cceff379380e68ebe7c208 Mon Sep 17 00:00:00 2001 From: wdvxdr Date: Wed, 2 Sep 2020 22:45:17 +0800 Subject: [PATCH 31/70] Revert "Auto stash before merge of "master" and "origin/master"" This reverts commit ff8fd92a26ef86f005781038d55023bcacda1ae7. --- coolq/cqcode.go | 4 ---- go.mod | 4 ---- go.sum | 40 ---------------------------------------- 3 files changed, 48 deletions(-) diff --git a/coolq/cqcode.go b/coolq/cqcode.go index 70e81f5..7804a0f 100644 --- a/coolq/cqcode.go +++ b/coolq/cqcode.go @@ -465,11 +465,7 @@ func (bot *CQBot) ToElement(t string, d map[string]string, group bool) (message. return nil, errors.New("song error") } json := fmt.Sprintf("{\"app\": \"com.tencent.structmsg\",\"desc\": \"音乐\",\"meta\": {\"music\": {\"desc\": \"来自MiraiGo\",\"jumpUrl\": \"%s\",\"musicUrl\": \"%s\",\"preview\": \"%s\",\"tag\": \"QQ音乐\",\"title\": \"%s\"}},\"prompt\": \"[分享]%s\",\"ver\": \"0.0.0.1\",\"view\": \"music\"}", jumpUrl, purl, preview, name, name) -<<<<<<< Updated upstream return message.NewJsonMsg(json), nil -======= - return message.NewLightApp(json), nil ->>>>>>> Stashed changes } if d["type"] == "163" { info, err := global.NeteaseMusicSongInfo(d["id"]) diff --git a/go.mod b/go.mod index 35a38b8..92920fd 100644 --- a/go.mod +++ b/go.mod @@ -3,11 +3,7 @@ module github.com/Mrs4s/go-cqhttp go 1.14 require ( -<<<<<<< Updated upstream github.com/Mrs4s/MiraiGo v0.0.0-20200901081949-6328ae0e93db -======= - github.com/Mrs4s/MiraiGo v0.0.0-20200902072401-56d3e65e98b5 ->>>>>>> Stashed changes 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 4a5664e..95a0168 100644 --- a/go.sum +++ b/go.sum @@ -2,27 +2,20 @@ 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-20200827182935-51e155ef20da h1:T2Qz4w6sMrBxw+oiwbUa/c996jWYulCAtM+x1L0l3R8= github.com/Mrs4s/MiraiGo v0.0.0-20200827182935-51e155ef20da/go.mod h1:0je03wji/tSw4bUH4QCF2Z4/EjyNWjSJTyy5tliX6EM= -github.com/Mrs4s/MiraiGo v0.0.0-20200901081949-6328ae0e93db h1:Iz5QWqqtwwSJh6A5mOK9Px14eBCv4mynCQDAJLO0x+o= -github.com/Mrs4s/MiraiGo v0.0.0-20200901081949-6328ae0e93db/go.mod h1:0je03wji/tSw4bUH4QCF2Z4/EjyNWjSJTyy5tliX6EM= -github.com/Mrs4s/MiraiGo v0.0.0-20200902072401-56d3e65e98b5 h1:q4nVSNiob0PWiU7gtof5A64mE2e+hCU45KGTqOVgoJg= -github.com/Mrs4s/MiraiGo v0.0.0-20200902072401-56d3e65e98b5/go.mod h1:0je03wji/tSw4bUH4QCF2Z4/EjyNWjSJTyy5tliX6EM= 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= @@ -32,8 +25,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.3.0 h1:nZU+7q+yJoFmwvNgv/LnPUkwPal62+b2xXj0AU1Es7o= -github.com/go-playground/validator/v10 v10.3.0/go.mod h1:uOYAAleCW8F/7oMFd6aG0GOhaH6EGOAJShg8Id5JGkI= 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= @@ -51,10 +42,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,25 +51,16 @@ github.com/guonaihong/gout v0.1.1 h1:2i3eqQ1KUhTlj7AFeIHqVUFku5QwUhwE2wNgYTVpbxQ github.com/guonaihong/gout v0.1.1/go.mod h1:vXvv5Kxr70eM5wrp4F0+t9lnLWmq+YPW2GByll2f/EA= github.com/guonaihong/gout v0.1.2 h1:TR2XCRopGgJdj231IayEoeavgbznFXzzzcZVdT/hG10= github.com/guonaihong/gout v0.1.2/go.mod h1:vXvv5Kxr70eM5wrp4F0+t9lnLWmq+YPW2GByll2f/EA= -<<<<<<< Updated upstream -======= -github.com/jehiah/go-strftime v0.0.0-20171201141054-1d33003b3869 h1:IPJ3dvxmJ4uczJe5YQdrYB16oTJlGSC/OyZDqUk9xX4= ->>>>>>> Stashed changes 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 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/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= -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.3.0+incompatible h1:4mNlp+/SvALIPFpbXV3kxNJJno9iKFWGxSDE13Kl66Q= github.com/lestrrat-go/file-rotatelogs v2.3.0+incompatible/go.mod h1:ZQnN8lSECaebrkQytbHj4xNgtg8CR7RYXnPok8e0EHA= @@ -91,26 +71,17 @@ 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/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/robertkrimen/otto v0.0.0-20191219234010-c382bd3c16ff h1:+6NUiITWwE5q1KO6SAfUX918c+Tab0+tGAM/mtdlUyA= -github.com/robertkrimen/otto v0.0.0-20191219234010-c382bd3c16ff/go.mod h1:xvqspoSXJTIpemEonrMDFq6XzwHYYgToXWj5eRX1OtY= 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= @@ -118,11 +89,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.0 h1:9VEQWz6LLMUsUl6PueE49ir4Ka6CzLymOAZDxpFsTDc= github.com/tidwall/gjson v1.6.0/go.mod h1:P256ACg0Mn+j1RXIDXoss50DeIABTYK1PULOJHhxOls= @@ -176,13 +145,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-20200625212154-ddb9806d33ae h1:Ih9Yo4hSPImZOpfGuA4bR/ORKTAbhZo2AbWNRCnevdo= golang.org/x/sys v0.0.0-20200625212154-ddb9806d33ae/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs= -<<<<<<< Updated upstream golang.org/x/sys v0.0.0-20200828194041-157a740278f4 h1:kCCpuwSAoYJPkNc6x0xT9yTtV4oKtARo4RGBQWOfg9E= golang.org/x/sys v0.0.0-20200828194041-157a740278f4/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs= -======= -golang.org/x/sys v0.0.0-20200831180312-196b9ba8737a h1:i47hUS795cOydZI4AwJQCKXOr4BvxzvikwDoDtHhP2Y= -golang.org/x/sys v0.0.0-20200831180312-196b9ba8737a/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs= ->>>>>>> Stashed changes 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/tools v0.0.0-20180917221912-90fa682c2a6e/go.mod h1:n7NCudcB/nEzxVGmLbDWY5pfWTLqBcC2KZ6jyYvM4mQ= @@ -190,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= @@ -210,12 +173,9 @@ 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= -gopkg.in/sourcemap.v1 v1.0.5 h1:inv58fC9f9J3TK2Y2R1NPntXEn3/wjWHkonhIUODNTI= -gopkg.in/sourcemap.v1 v1.0.5/go.mod h1:2RlvNNSMglmRrcvhfuzp4hQHwOtjxlbjX7UPY/GXb78= 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 9e43d9c2bb6e0d171b5e7f32e0e7b6ac64a0d874 Mon Sep 17 00:00:00 2001 From: wdvxdr Date: Wed, 2 Sep 2020 22:52:57 +0800 Subject: [PATCH 32/70] change into NewLightApp --- coolq/cqcode.go | 2 +- go.mod | 2 +- go.sum | 18 ++++++++++++++++++ 3 files changed, 20 insertions(+), 2 deletions(-) diff --git a/coolq/cqcode.go b/coolq/cqcode.go index 7804a0f..8e807d4 100644 --- a/coolq/cqcode.go +++ b/coolq/cqcode.go @@ -465,7 +465,7 @@ func (bot *CQBot) ToElement(t string, d map[string]string, group bool) (message. return nil, errors.New("song error") } json := fmt.Sprintf("{\"app\": \"com.tencent.structmsg\",\"desc\": \"音乐\",\"meta\": {\"music\": {\"desc\": \"来自MiraiGo\",\"jumpUrl\": \"%s\",\"musicUrl\": \"%s\",\"preview\": \"%s\",\"tag\": \"QQ音乐\",\"title\": \"%s\"}},\"prompt\": \"[分享]%s\",\"ver\": \"0.0.0.1\",\"view\": \"music\"}", jumpUrl, purl, preview, name, name) - return message.NewJsonMsg(json), nil + return message.NewLightApp(json), nil } if d["type"] == "163" { info, err := global.NeteaseMusicSongInfo(d["id"]) diff --git a/go.mod b/go.mod index 92920fd..c22cbec 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-20200901081949-6328ae0e93db + github.com/Mrs4s/MiraiGo v0.0.0-20200902072401-56d3e65e98b5 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 95a0168..3eead0b 100644 --- a/go.sum +++ b/go.sum @@ -2,6 +2,10 @@ 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-20200827182935-51e155ef20da h1:T2Qz4w6sMrBxw+oiwbUa/c996jWYulCAtM+x1L0l3R8= github.com/Mrs4s/MiraiGo v0.0.0-20200827182935-51e155ef20da/go.mod h1:0je03wji/tSw4bUH4QCF2Z4/EjyNWjSJTyy5tliX6EM= +github.com/Mrs4s/MiraiGo v0.0.0-20200901081949-6328ae0e93db h1:Iz5QWqqtwwSJh6A5mOK9Px14eBCv4mynCQDAJLO0x+o= +github.com/Mrs4s/MiraiGo v0.0.0-20200901081949-6328ae0e93db/go.mod h1:0je03wji/tSw4bUH4QCF2Z4/EjyNWjSJTyy5tliX6EM= +github.com/Mrs4s/MiraiGo v0.0.0-20200902072401-56d3e65e98b5 h1:q4nVSNiob0PWiU7gtof5A64mE2e+hCU45KGTqOVgoJg= +github.com/Mrs4s/MiraiGo v0.0.0-20200902072401-56d3e65e98b5/go.mod h1:0je03wji/tSw4bUH4QCF2Z4/EjyNWjSJTyy5tliX6EM= 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= @@ -25,6 +29,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.3.0 h1:nZU+7q+yJoFmwvNgv/LnPUkwPal62+b2xXj0AU1Es7o= +github.com/go-playground/validator/v10 v10.3.0/go.mod h1:uOYAAleCW8F/7oMFd6aG0GOhaH6EGOAJShg8Id5JGkI= 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= @@ -55,6 +61,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= @@ -72,7 +80,11 @@ 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= @@ -82,6 +94,8 @@ github.com/pmezard/go-difflib v1.0.0/go.mod h1:iKH77koFhYxTK1pcRnkKkqfTogsbg7gZN 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/robertkrimen/otto v0.0.0-20191219234010-c382bd3c16ff h1:+6NUiITWwE5q1KO6SAfUX918c+Tab0+tGAM/mtdlUyA= +github.com/robertkrimen/otto v0.0.0-20191219234010-c382bd3c16ff/go.mod h1:xvqspoSXJTIpemEonrMDFq6XzwHYYgToXWj5eRX1OtY= 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= @@ -147,6 +161,8 @@ golang.org/x/sys v0.0.0-20200625212154-ddb9806d33ae h1:Ih9Yo4hSPImZOpfGuA4bR/ORK golang.org/x/sys v0.0.0-20200625212154-ddb9806d33ae/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs= golang.org/x/sys v0.0.0-20200828194041-157a740278f4 h1:kCCpuwSAoYJPkNc6x0xT9yTtV4oKtARo4RGBQWOfg9E= golang.org/x/sys v0.0.0-20200828194041-157a740278f4/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs= +golang.org/x/sys v0.0.0-20200831180312-196b9ba8737a h1:i47hUS795cOydZI4AwJQCKXOr4BvxzvikwDoDtHhP2Y= +golang.org/x/sys v0.0.0-20200831180312-196b9ba8737a/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/tools v0.0.0-20180917221912-90fa682c2a6e/go.mod h1:n7NCudcB/nEzxVGmLbDWY5pfWTLqBcC2KZ6jyYvM4mQ= @@ -176,6 +192,8 @@ google.golang.org/protobuf v1.25.0/go.mod h1:9JNX74DMeImyA3h4bdi1ymwjUzf21/xIlba 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= +gopkg.in/sourcemap.v1 v1.0.5 h1:inv58fC9f9J3TK2Y2R1NPntXEn3/wjWHkonhIUODNTI= +gopkg.in/sourcemap.v1 v1.0.5/go.mod h1:2RlvNNSMglmRrcvhfuzp4hQHwOtjxlbjX7UPY/GXb78= 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 05d8e773f2312a56c2447bbff1b77eda943f21a5 Mon Sep 17 00:00:00 2001 From: scjtqs Date: Thu, 3 Sep 2020 00:34:20 +0800 Subject: [PATCH 33/70] =?UTF-8?q?=E9=85=8D=E5=90=88=20=E6=9C=80=E6=96=B0?= =?UTF-8?q?=E7=9A=84MiraiGo=E8=B0=83=E6=95=B4=E4=BB=A3=E7=A0=81?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- coolq/cqcode.go | 12 ++++++++++-- docs/cqhttp.md | 1 + 2 files changed, 11 insertions(+), 2 deletions(-) diff --git a/coolq/cqcode.go b/coolq/cqcode.go index 090e06a..396a1c8 100644 --- a/coolq/cqcode.go +++ b/coolq/cqcode.go @@ -503,11 +503,19 @@ func (bot *CQBot) ToElement(t string, d map[string]string, group bool) (message. template := CQCodeEscapeValue(d["data"]) //println(template) i, _ := strconv.ParseInt(resId, 10, 64) - msg := message.NewXmlMsg(template, i) + 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"]) - msg := message.NewJsonMsg(CQCodeUnescapeValue(d["data"])) + if i == 0 { + //默认情况下走小程序通道 + msg := message.NewLightApp(CQCodeUnescapeValue(d["data"])) + return msg, nil + } + //resid不为0的情况下走富文本通道,后续补全透传service Id,此处暂时不处理 TODO + msg := message.NewRichJson(CQCodeUnescapeValue(d["data"])) return msg, nil default: return nil, errors.New("unsupported cq code: " + t) diff --git a/docs/cqhttp.md b/docs/cqhttp.md index f664276..f491cb5 100644 --- a/docs/cqhttp.md +++ b/docs/cqhttp.md @@ -179,6 +179,7 @@ Type: `json` | 参数名 | 类型 | 说明 | | ------ | ------ | ------------------------------------------------------------ | | data | string | json内容,json的所有字符串记得实体化处理| +| resid | int32 | 默认不填为0,走小程序通道,填了走富文本通道发送| json中的字符串需要进行转义: From 3bd557d7a0d32ee317f52a59b70aec1f8fa2528d Mon Sep 17 00:00:00 2001 From: scjtqs Date: Thu, 3 Sep 2020 00:37:57 +0800 Subject: [PATCH 34/70] fmt --- coolq/cqcode.go | 6 +++--- 1 file changed, 3 insertions(+), 3 deletions(-) diff --git a/coolq/cqcode.go b/coolq/cqcode.go index 396a1c8..7f194f5 100644 --- a/coolq/cqcode.go +++ b/coolq/cqcode.go @@ -458,13 +458,13 @@ func (bot *CQBot) ToElement(t string, d map[string]string, group bool) (message. 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") - jumpUrl := "https://i.y.qq.com/v8/playsong.html?platform=11&appshare=android_qq&appversion=10030010&hosteuin=oKnlNenz7i-s7c**&songmid="+ mid +"&type=0&appsongtype=1&_wv=1&source=qq&ADTAG=qfshare" + jumpUrl := "https://i.y.qq.com/v8/playsong.html?platform=11&appshare=android_qq&appversion=10030010&hosteuin=oKnlNenz7i-s7c**&songmid=" + mid + "&type=0&appsongtype=1&_wv=1&source=qq&ADTAG=qfshare" purl := gjson.ParseBytes(pinfo).Get("url_mid.data.midurlinfo.0.purl").Str - preview := "http://y.gtimg.cn/music/photo_new/T002R180x180M000"+ albumMid +".jpg" + preview := "http://y.gtimg.cn/music/photo_new/T002R180x180M000" + albumMid + ".jpg" if len(aid) < 2 { return nil, errors.New("song error") } - json := fmt.Sprintf("{\"app\": \"com.tencent.structmsg\",\"desc\": \"音乐\",\"meta\": {\"music\": {\"desc\": \"来自MiraiGo\",\"jumpUrl\": \"%s\",\"musicUrl\": \"%s\",\"preview\": \"%s\",\"tag\": \"QQ音乐\",\"title\": \"%s\"}},\"prompt\": \"[分享]%s\",\"ver\": \"0.0.0.1\",\"view\": \"music\"}", jumpUrl, purl, preview, name, name) + json := fmt.Sprintf("{\"app\": \"com.tencent.structmsg\",\"desc\": \"音乐\",\"meta\": {\"music\": {\"desc\": \"来自MiraiGo\",\"jumpUrl\": \"%s\",\"musicUrl\": \"%s\",\"preview\": \"%s\",\"tag\": \"QQ音乐\",\"title\": \"%s\"}},\"prompt\": \"[分享]%s\",\"ver\": \"0.0.0.1\",\"view\": \"music\"}", jumpUrl, purl, preview, name, name) return message.NewLightApp(json), nil } if d["type"] == "163" { From 0100b85fb161aa2e2b6bdae0012967e4ae2df602 Mon Sep 17 00:00:00 2001 From: Mrs4s <1844812067@qq.com> Date: Thu, 3 Sep 2020 18:05:31 +0800 Subject: [PATCH 35/70] update qq music content. --- coolq/cqcode.go | 10 +++++++--- 1 file changed, 7 insertions(+), 3 deletions(-) diff --git a/coolq/cqcode.go b/coolq/cqcode.go index 8e807d4..2c6f244 100644 --- a/coolq/cqcode.go +++ b/coolq/cqcode.go @@ -458,13 +458,17 @@ func (bot *CQBot) ToElement(t string, d map[string]string, group bool) (message. 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") - jumpUrl := "https://i.y.qq.com/v8/playsong.html?platform=11&appshare=android_qq&appversion=10030010&hosteuin=oKnlNenz7i-s7c**&songmid="+ mid +"&type=0&appsongtype=1&_wv=1&source=qq&ADTAG=qfshare" + jumpUrl := "https://i.y.qq.com/v8/playsong.html?platform=11&appshare=android_qq&appversion=10030010&hosteuin=oKnlNenz7i-s7c**&songmid=" + mid + "&type=0&appsongtype=1&_wv=1&source=qq&ADTAG=qfshare" purl := gjson.ParseBytes(pinfo).Get("url_mid.data.midurlinfo.0.purl").Str - preview := "http://y.gtimg.cn/music/photo_new/T002R180x180M000"+ albumMid +".jpg" + preview := "http://y.gtimg.cn/music/photo_new/T002R180x180M000" + albumMid + ".jpg" if len(aid) < 2 { return nil, errors.New("song error") } - json := fmt.Sprintf("{\"app\": \"com.tencent.structmsg\",\"desc\": \"音乐\",\"meta\": {\"music\": {\"desc\": \"来自MiraiGo\",\"jumpUrl\": \"%s\",\"musicUrl\": \"%s\",\"preview\": \"%s\",\"tag\": \"QQ音乐\",\"title\": \"%s\"}},\"prompt\": \"[分享]%s\",\"ver\": \"0.0.0.1\",\"view\": \"music\"}", jumpUrl, purl, preview, name, name) + content := "来自go-cqhttp" + 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 d["type"] == "163" { From 49e3995129f6adb04445c31951ba07c3cca2b9aa Mon Sep 17 00:00:00 2001 From: Mrs4s Date: Sat, 5 Sep 2020 08:02:31 +0800 Subject: [PATCH 36/70] move reply pos. close #220 --- coolq/cqcode.go | 16 +++++++++++----- 1 file changed, 11 insertions(+), 5 deletions(-) diff --git a/coolq/cqcode.go b/coolq/cqcode.go index 0183c30..323d8ba 100644 --- a/coolq/cqcode.go +++ b/coolq/cqcode.go @@ -32,6 +32,17 @@ func ToArrayMessage(e []message.IMessageElement, code int64, raw ...bool) (r []M if len(raw) != 0 { ur = raw[0] } + m := &message.SendingMessage{Elements: e} + reply := m.FirstOrNil(func(e message.IMessageElement) bool { + _, ok := e.(*message.ReplyElement) + return ok + }) + if reply != nil { + r = append(r, MSG{ + "type": "reply", + "data": map[string]string{"id": fmt.Sprint(ToGlobalId(code, o.ReplySeq))}, + }) + } for _, elem := range e { m := MSG{} switch o := elem.(type) { @@ -52,11 +63,6 @@ func ToArrayMessage(e []message.IMessageElement, code int64, raw ...bool) (r []M "data": map[string]string{"qq": fmt.Sprint(o.Target)}, } } - case *message.ReplyElement: - m = MSG{ - "type": "reply", - "data": map[string]string{"id": fmt.Sprint(ToGlobalId(code, o.ReplySeq))}, - } case *message.ForwardElement: m = MSG{ "type": "forward", From 42434956d963ce6a29fb496283abe582521e5fa7 Mon Sep 17 00:00:00 2001 From: Mrs4s Date: Sat, 5 Sep 2020 08:06:52 +0800 Subject: [PATCH 37/70] fix light app. --- coolq/cqcode.go | 7 +++++++ 1 file changed, 7 insertions(+) diff --git a/coolq/cqcode.go b/coolq/cqcode.go index 323d8ba..939309d 100644 --- a/coolq/cqcode.go +++ b/coolq/cqcode.go @@ -51,6 +51,11 @@ func ToArrayMessage(e []message.IMessageElement, code int64, raw ...bool) (r []M "type": "text", "data": map[string]string{"text": o.Content}, } + case *message.LightAppElement: + m = MSG{ + "type": "text", + "data": map[string]string{"text": o.Content}, + } case *message.AtElement: if o.Target == 0 { m = MSG{ @@ -161,6 +166,8 @@ 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.LightAppElement: + r += CQCodeEscapeText(o.Content) } } return From a991add799feb44ca8f7b4a04f2064ba767b780a Mon Sep 17 00:00:00 2001 From: Mrs4s Date: Sat, 5 Sep 2020 08:09:07 +0800 Subject: [PATCH 38/70] update default heartbeat value. close #232 --- coolq/bot.go | 5 ++++- 1 file changed, 4 insertions(+), 1 deletion(-) diff --git a/coolq/bot.go b/coolq/bot.go index 6d34bda..12a96e8 100644 --- a/coolq/bot.go +++ b/coolq/bot.go @@ -71,10 +71,13 @@ func NewQQBot(cli *client.QQClient, conf *global.JsonConfig) *CQBot { bot.Client.OnUserWantJoinGroup(bot.groupJoinReqEvent) go func() { i := conf.HeartbeatInterval - if i < 1 { + if i < 0 { log.Warn("警告: 心跳功能已关闭,若非预期,请检查配置文件。") return } + if i == 0 { + i = 5 + } for { time.Sleep(time.Second * i) bot.dispatchEventMessage(MSG{ From a9001d5c9e9b366a60da8711643f0568d8506b38 Mon Sep 17 00:00:00 2001 From: Mrs4s Date: Sat, 5 Sep 2020 08:10:45 +0800 Subject: [PATCH 39/70] fix ci. --- coolq/cqcode.go | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/coolq/cqcode.go b/coolq/cqcode.go index 939309d..0b86843 100644 --- a/coolq/cqcode.go +++ b/coolq/cqcode.go @@ -40,7 +40,7 @@ func ToArrayMessage(e []message.IMessageElement, code int64, raw ...bool) (r []M if reply != nil { r = append(r, MSG{ "type": "reply", - "data": map[string]string{"id": fmt.Sprint(ToGlobalId(code, o.ReplySeq))}, + "data": map[string]string{"id": fmt.Sprint(ToGlobalId(code, reply.(*message.ReplyElement).ReplySeq))}, }) } for _, elem := range e { From 6565a19aaa9e8111aca5f209432281215d840755 Mon Sep 17 00:00:00 2001 From: Mrs4s Date: Sat, 5 Sep 2020 08:16:50 +0800 Subject: [PATCH 40/70] fix #238. --- coolq/api.go | 15 ++++++++++++++- 1 file changed, 14 insertions(+), 1 deletion(-) diff --git a/coolq/api.go b/coolq/api.go index 7f02ac6..d20bf6c 100644 --- a/coolq/api.go +++ b/coolq/api.go @@ -198,11 +198,24 @@ func (bot *CQBot) CQSendGroupForwardMessage(groupId int64, m gjson.Result) MSG { name := e.Get("data.name").Str content := bot.ConvertObjectMessage(e.Get("data.content"), true) 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 err != nil { + log.Warnf("警告:群 %v 图片上传失败: %v", groupId, err) + continue + } + newElem = append(newElem, gm) + continue + } + newElem = append(newElem, elem) + } nodes = append(nodes, &message.ForwardNode{ SenderId: uin, SenderName: name, Time: int32(ts.Unix()), - Message: content, + Message: newElem, }) return } From 2b00b49755532b657ba2d90e0d1a6bbe0ffeb026 Mon Sep 17 00:00:00 2001 From: wdvxdr Date: Sat, 5 Sep 2020 17:47:30 +0800 Subject: [PATCH 41/70] fix: fit onebot MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit 适配onebot标准 --- docs/cqhttp.md | 2 +- server/http.go | 2 +- server/websocket.go | 2 +- 3 files changed, 3 insertions(+), 3 deletions(-) diff --git a/docs/cqhttp.md b/docs/cqhttp.md index f491cb5..bdbedef 100644 --- a/docs/cqhttp.md +++ b/docs/cqhttp.md @@ -209,7 +209,7 @@ json中的字符串需要进行转义: | 字段 | 类型 | 说明 | | -------- | ------ | ---- | | group_id | int64 | 群号 | -| name | string | 新名 | +| group_name | string | 新名 | ### 获取图片信息 diff --git a/server/http.go b/server/http.go index 168856b..1bbac8c 100644 --- a/server/http.go +++ b/server/http.go @@ -347,7 +347,7 @@ func (s *httpServer) SetWholeBan(c *gin.Context) { func (s *httpServer) SetGroupName(c *gin.Context) { gid, _ := strconv.ParseInt(getParam(c, "group_id"), 10, 64) - c.JSON(200, s.bot.CQSetGroupName(gid, getParam(c, "name"))) + c.JSON(200, s.bot.CQSetGroupName(gid, getParam(c, "group_name"))) } func (s *httpServer) SetGroupLeave(c *gin.Context) { diff --git a/server/websocket.go b/server/websocket.go index 9c6c9c8..a1f241d 100644 --- a/server/websocket.go +++ b/server/websocket.go @@ -477,7 +477,7 @@ var wsApi = map[string]func(*coolq.CQBot, gjson.Result) coolq.MSG{ }()) }, "set_group_name": func(bot *coolq.CQBot, p gjson.Result) coolq.MSG { - return bot.CQSetGroupName(p.Get("group_id").Int(), p.Get("name").Str) + return bot.CQSetGroupName(p.Get("group_id").Int(), p.Get("group_name").Str) }, "set_group_leave": func(bot *coolq.CQBot, p gjson.Result) coolq.MSG { return bot.CQSetGroupLeave(p.Get("group_id").Int()) From d79cb0b536a2dd8b2f03109ce76d92bab766a05f Mon Sep 17 00:00:00 2001 From: wdvxdr Date: Sat, 5 Sep 2020 18:49:32 +0800 Subject: [PATCH 42/70] feature: send netease with json --- coolq/cqcode.go | 12 +++++------- 1 file changed, 5 insertions(+), 7 deletions(-) diff --git a/coolq/cqcode.go b/coolq/cqcode.go index 0b86843..d6e04a6 100644 --- a/coolq/cqcode.go +++ b/coolq/cqcode.go @@ -493,17 +493,15 @@ func (bot *CQBot) ToElement(t string, d map[string]string, group bool) (message. return nil, errors.New("song not found") } name := info.Get("name").Str + jumpUrl := "https://y.music.163.com/m/song/" + d["id"] + musicUrl := "http://music.163.com/song/media/outer/url?id=" + d["id"] + picUrl := info.Get("album.picUrl").Str artistName := "" if info.Get("artists.0").Exists() { artistName = info.Get("artists.0.name").Str } - xml := fmt.Sprintf(``, - name, d["id"], info.Get("album.picUrl").Str, d["id"], name, artistName) - return &message.ServiceElement{ - Id: 60, - Content: xml, - SubType: "music", - }, nil + 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 } if d["type"] == "custom" { xml := fmt.Sprintf(``, From 5024cc08a79c01a3c6e1d036f30e10830fb16fd5 Mon Sep 17 00:00:00 2001 From: scjtqs Date: Sat, 5 Sep 2020 22:22:57 +0800 Subject: [PATCH 43/70] =?UTF-8?q?=E6=9A=82=E5=AD=98?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- coolq/api.go | 12 +-- coolq/bot.go | 1 + coolq/cqcode.go | 271 +++++++++++++++++++++++++++--------------------- go.sum | 1 + 4 files changed, 161 insertions(+), 124 deletions(-) diff --git a/coolq/api.go b/coolq/api.go index d20bf6c..90b4ade 100644 --- a/coolq/api.go +++ b/coolq/api.go @@ -119,7 +119,7 @@ func (bot *CQBot) CQSendGroupMessage(groupId int64, i interface{}, autoEscape bo } if m, ok := i.(gjson.Result); ok { if m.Type == gjson.JSON { - elem := bot.ConvertObjectMessage(m, true) + elem := bot.ConvertObjectMessage(m, true,groupId) fixAt(elem) mid := bot.SendGroupMessage(groupId, &message.SendingMessage{Elements: elem}) if mid == -1 { @@ -144,7 +144,7 @@ func (bot *CQBot) CQSendGroupMessage(groupId int64, i interface{}, autoEscape bo if autoEscape { elem = append(elem, message.NewText(str)) } else { - elem = bot.ConvertStringMessage(str, true) + elem = bot.ConvertStringMessage(str, true,groupId) } fixAt(elem) mid := bot.SendGroupMessage(groupId, &message.SendingMessage{Elements: elem}) @@ -187,7 +187,7 @@ func (bot *CQBot) CQSendGroupForwardMessage(groupId int64, m gjson.Result) MSG { } return m["time"].(int32) }(), - Message: bot.ConvertStringMessage(m["message"].(string), true), + Message: bot.ConvertStringMessage(m["message"].(string), true,groupId), }) return } @@ -196,7 +196,7 @@ 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 - content := bot.ConvertObjectMessage(e.Get("data.content"), true) + content := bot.ConvertObjectMessage(e.Get("data.content"), true,groupId) if uin != 0 && name != "" && len(content) > 0 { var newElem []message.IMessageElement for _, elem := range content { @@ -242,7 +242,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, true,userId) mid := bot.SendPrivateMessage(userId, &message.SendingMessage{Elements: elem}) if mid == -1 { return Failed(100) @@ -265,7 +265,7 @@ func (bot *CQBot) CQSendPrivateMessage(userId int64, i interface{}, autoEscape b if autoEscape { elem = append(elem, message.NewText(str)) } else { - elem = bot.ConvertStringMessage(str, false) + elem = bot.ConvertStringMessage(str, false,userId) } mid := bot.SendPrivateMessage(userId, &message.SendingMessage{Elements: elem}) if mid == -1 { diff --git a/coolq/bot.go b/coolq/bot.go index 12a96e8..e32ca58 100644 --- a/coolq/bot.go +++ b/coolq/bot.go @@ -259,3 +259,4 @@ func (m MSG) ToJson() string { b, _ := json.Marshal(m) return string(b) } + diff --git a/coolq/cqcode.go b/coolq/cqcode.go index 0b86843..0f8e77f 100644 --- a/coolq/cqcode.go +++ b/coolq/cqcode.go @@ -173,7 +173,7 @@ func ToStringMessage(e []message.IMessageElement, code int64, raw ...bool) (r st return } -func (bot *CQBot) ConvertStringMessage(m string, group bool) (r []message.IMessageElement) { +func (bot *CQBot) ConvertStringMessage(m string, group bool, uid int64) (r []message.IMessageElement) { i := matchReg.FindAllStringSubmatchIndex(m, -1) si := 0 for _, idx := range i { @@ -205,14 +205,14 @@ func (bot *CQBot) ConvertStringMessage(m string, group bool) (r []message.IMessa ReplySeq: org["message-id"].(int32), Sender: org["sender"].(message.Sender).Uin, Time: org["time"].(int32), - Elements: bot.ConvertStringMessage(org["message"].(string), group), + Elements: bot.ConvertStringMessage(org["message"].(string), group, uid), }, }, r...) continue } } } - elem, err := bot.ToElement(t, d, group) + elem, err := bot.ToElement(t, d, group, uid) if err != nil { if !IgnoreInvalidCQCode { log.Warnf("转换CQ码 %v 到MiraiGo Element时出现错误: %v 将原样发送.", code, err) @@ -230,7 +230,7 @@ func (bot *CQBot) ConvertStringMessage(m string, group bool) (r []message.IMessa return } -func (bot *CQBot) ConvertObjectMessage(m gjson.Result, group bool) (r []message.IMessageElement) { +func (bot *CQBot) ConvertObjectMessage(m gjson.Result, group bool, uid int64) (r []message.IMessageElement) { convertElem := func(e gjson.Result) { t := e.Get("type").Str if t == "reply" && group { @@ -249,7 +249,7 @@ func (bot *CQBot) ConvertObjectMessage(m gjson.Result, group bool) (r []message. ReplySeq: org["message-id"].(int32), Sender: org["sender"].(message.Sender).Uin, Time: org["time"].(int32), - Elements: bot.ConvertStringMessage(org["message"].(string), group), + Elements: bot.ConvertStringMessage(org["message"].(string), group, uid), }, }, r...) return @@ -261,7 +261,7 @@ func (bot *CQBot) ConvertObjectMessage(m gjson.Result, group bool) (r []message. d[key.Str] = value.Str return true }) - elem, err := bot.ToElement(t, d, group) + elem, err := bot.ToElement(t, d, group, uid) if err != nil { log.Warnf("转换CQ码到MiraiGo Element时出现错误: %v 将忽略本段CQ码.", err) return @@ -269,7 +269,7 @@ func (bot *CQBot) ConvertObjectMessage(m gjson.Result, group bool) (r []message. r = append(r, elem) } if m.Type == gjson.String { - return bot.ConvertStringMessage(m.Str, group) + return bot.ConvertStringMessage(m.Str, group, uid) } if m.IsArray() { for _, e := range m.Array() { @@ -282,121 +282,12 @@ 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, uid int64) (message.IMessageElement, error) { switch t { case "text": return message.NewText(d["text"]), nil case "image": - f := d["file"] - if strings.HasPrefix(f, "http") || strings.HasPrefix(f, "https") { - cache := d["cache"] - 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) - if err == nil { - return message.NewImage(b), nil - } - } - b, err := global.GetBytes(f) - if err != nil { - return nil, err - } - _ = ioutil.WriteFile(cacheFile, b, 0644) - return message.NewImage(b), nil - } - if strings.HasPrefix(f, "base64") { - b, err := base64.StdEncoding.DecodeString(strings.ReplaceAll(f, "base64://", "")) - if err != nil { - return nil, err - } - return message.NewImage(b), nil - } - 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 - } - return message.NewImage(b), nil - } - rawPath := path.Join(global.IMAGE_PATH, f) - if !global.PathExists(rawPath) && global.PathExists(rawPath+".cqimg") { - rawPath += ".cqimg" - } - if !global.PathExists(rawPath) && d["url"] != "" { - return bot.ToElement(t, map[string]string{"file": d["url"]}, group) - } - if global.PathExists(rawPath) { - b, err := ioutil.ReadFile(rawPath) - if err != nil { - return nil, err - } - if path.Ext(rawPath) != ".image" && path.Ext(rawPath) != ".cqimg" { - return message.NewImage(b), nil - } - if len(b) < 20 { - return nil, errors.New("invalid local file") - } - var size int32 - var hash []byte - var url string - if path.Ext(rawPath) == ".cqimg" { - for _, line := range strings.Split(global.ReadAllText(rawPath), "\n") { - kv := strings.SplitN(line, "=", 2) - switch kv[0] { - case "md5": - hash, _ = hex.DecodeString(strings.ReplaceAll(kv[1], "\r", "")) - case "size": - t, _ := strconv.Atoi(strings.ReplaceAll(kv[1], "\r", "")) - size = int32(t) - } - } - } else { - r := binary.NewReader(b) - hash = r.ReadBytes(16) - size = r.ReadInt32() - r.ReadString() - url = r.ReadString() - } - if size == 0 { - if url != "" { - return bot.ToElement(t, map[string]string{"file": url}, group) - } - return nil, errors.New("img size is 0") - } - if len(hash) != 16 { - return nil, errors.New("invalid hash") - } - if group { - rsp, err := bot.Client.QueryGroupImage(1, hash, size) - if err != nil { - if url != "" { - return bot.ToElement(t, map[string]string{"file": url}, group) - } - return nil, err - } - return rsp, nil - } - rsp, err := bot.Client.QueryFriendImage(1, hash, size) - if err != nil { - if url != "" { - return bot.ToElement(t, map[string]string{"file": url}, group) - } - return nil, err - } - return rsp, nil - } - return nil, errors.New("invalid image") + return bot.makeImageElem(t, d, group, uid) case "record": if !group { return nil, errors.New("private voice unsupported now") @@ -534,6 +425,11 @@ func (bot *CQBot) ToElement(t string, d map[string]string, group bool) (message. //resid不为0的情况下走富文本通道,后续补全透传service Id,此处暂时不处理 TODO msg := message.NewRichJson(CQCodeUnescapeValue(d["data"])) return msg, nil + case "cardimage": + source := d["source"] + icon := d["icon"] + img, _ := bot.makeImageElem(t, d, group, uid) + return bot.SendNewPic(uid, img, source, icon, group) default: return nil, errors.New("unsupported cq code: " + t) } @@ -566,3 +462,142 @@ func CQCodeUnescapeValue(content string) string { ret = CQCodeUnescapeText(ret) return ret } + +// 图片 elem 生成器,单独拎出来,用于公用 +func (bot *CQBot) makeImageElem(t string, d map[string]string, group bool, uid int64) (message.IMessageElement, error) { + f := d["file"] + if strings.HasPrefix(f, "http") || strings.HasPrefix(f, "https") { + cache := d["cache"] + 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) + if err == nil { + return message.NewImage(b), nil + } + } + b, err := global.GetBytes(f) + if err != nil { + return nil, err + } + _ = ioutil.WriteFile(cacheFile, b, 0644) + return message.NewImage(b), nil + } + if strings.HasPrefix(f, "base64") { + b, err := base64.StdEncoding.DecodeString(strings.ReplaceAll(f, "base64://", "")) + if err != nil { + return nil, err + } + return message.NewImage(b), nil + } + 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 + } + return message.NewImage(b), nil + } + rawPath := path.Join(global.IMAGE_PATH, f) + if !global.PathExists(rawPath) && global.PathExists(rawPath+".cqimg") { + rawPath += ".cqimg" + } + if !global.PathExists(rawPath) && d["url"] != "" { + return bot.ToElement(t, map[string]string{"file": d["url"]}, group, uid) + } + if global.PathExists(rawPath) { + b, err := ioutil.ReadFile(rawPath) + if err != nil { + return nil, err + } + if path.Ext(rawPath) != ".image" && path.Ext(rawPath) != ".cqimg" { + return message.NewImage(b), nil + } + if len(b) < 20 { + return nil, errors.New("invalid local file") + } + var size int32 + var hash []byte + var url string + if path.Ext(rawPath) == ".cqimg" { + for _, line := range strings.Split(global.ReadAllText(rawPath), "\n") { + kv := strings.SplitN(line, "=", 2) + switch kv[0] { + case "md5": + hash, _ = hex.DecodeString(strings.ReplaceAll(kv[1], "\r", "")) + case "size": + t, _ := strconv.Atoi(strings.ReplaceAll(kv[1], "\r", "")) + size = int32(t) + } + } + } else { + r := binary.NewReader(b) + hash = r.ReadBytes(16) + size = r.ReadInt32() + r.ReadString() + url = r.ReadString() + } + if size == 0 { + if url != "" { + return bot.ToElement(t, map[string]string{"file": url}, group, uid) + } + return nil, errors.New("img size is 0") + } + if len(hash) != 16 { + return nil, errors.New("invalid hash") + } + if group { + rsp, err := bot.Client.QueryGroupImage(1, hash, size) + if err != nil { + if url != "" { + return bot.ToElement(t, map[string]string{"file": url}, group, uid) + } + return nil, err + } + return rsp, nil + } + rsp, err := bot.Client.QueryFriendImage(1, hash, size) + if err != nil { + if url != "" { + return bot.ToElement(t, map[string]string{"file": url}, group, uid) + } + return nil, err + } + return rsp, nil + } + return nil, errors.New("invalid image") +} + +//SendNewPic 一种xml 方式发送的群消息图片 +func (bot *CQBot) SendNewPic(id int64, i message.ImageElement, source string, icon string, group bool) (*message.ServiceElement, error) { + var xml string + if group == false { + gm, err := bot.Client.UploadPrivateImage(id, i.Data) + if err != nil { + log.Warnf("警告: 群 %v 消息图片上传失败: %v", id, err) + return nil, err + } + xml = fmt.Sprintf(``, "", gm.ImageId, gm.Md5, i.Size, "", source, icon) + + } else { + gm, err := bot.Client.UploadGroupImage(id, i.Data) + if err != nil { + log.Warnf("警告: 群 %v 消息图片上传失败: %v", id, err) + return nil, err + } + xml = fmt.Sprintf(``, "", gm.FileId, gm.Md5, i.Size, "", source, icon) + } + log.Warn(xml) + XmlMsg := message.NewRichXml(xml, 5) + return XmlMsg, nil + return nil, errors.New("发送xml图片消息失败") +} diff --git a/go.sum b/go.sum index 3eead0b..e24e526 100644 --- a/go.sum +++ b/go.sum @@ -35,6 +35,7 @@ github.com/golang/glog v0.0.0-20160126235308-23def4e6c14b/go.mod h1:SBH7ygxi8pfU 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= github.com/golang/protobuf v1.3.2/go.mod h1:6lQm79b+lXiMfvg/cZm0SGofjICqVBUtrP5yJMmIC1U= +github.com/golang/protobuf v1.3.3 h1:gyjaxf+svBWX08ZjK86iN9geUJF0H6gp2IRKX6Nf6/I= github.com/golang/protobuf v1.3.3/go.mod h1:vzj43D7+SQXF/4pzW/hwtAqwc6iTitCiVSaWz5lYuqw= github.com/golang/protobuf v1.4.0-rc.1/go.mod h1:ceaxUfeHdC40wWswd/P6IGgMaK3YpKi5j83Wpe3EHw8= github.com/golang/protobuf v1.4.0-rc.1.0.20200221234624-67d41d38c208/go.mod h1:xKAWHe0F5eneWXFV3EuXVDTCmh+JuBKY0li0aMyXATA= From b104b21ab9bbe98b76900da42584a8d7183f9f4d Mon Sep 17 00:00:00 2001 From: wdvxdr Date: Sat, 5 Sep 2020 23:03:08 +0800 Subject: [PATCH 44/70] add: api _get_vip_info --- coolq/api.go | 18 ++++++++++++++++++ server/http.go | 8 ++++++++ server/websocket.go | 3 +++ 3 files changed, 29 insertions(+) diff --git a/coolq/api.go b/coolq/api.go index d20bf6c..f9ecde2 100644 --- a/coolq/api.go +++ b/coolq/api.go @@ -396,6 +396,24 @@ func (bot *CQBot) CQDeleteMessage(messageId int32) MSG { return OK(nil) } +func (bot *CQBot) CQGetVipInfo(userId int64) MSG { + msg := MSG{} + vip, err := bot.Client.GetVipInfo(userId) + if err != nil { + return Failed(100) + } + msg = MSG{ + "user_id": vip.Uin, + "nickname": vip.Name, + "level": vip.Level, + "level_speed": vip.LevelSpeed, + "vip_level": vip.VipLevel, + "vip_growth_speed": vip.VipGrowthSpeed, + "vip_growth_total": vip.VipGrowthTotal, + } + return OK(msg) +} + // 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 func (bot *CQBot) CQGetGroupHonorInfo(groupId int64, t string) MSG { msg := MSG{"group_id": groupId} diff --git a/server/http.go b/server/http.go index 1bbac8c..aa4d591 100644 --- a/server/http.go +++ b/server/http.go @@ -154,6 +154,9 @@ func (s *httpServer) Run(addr, authToken string, bot *coolq.CQBot) { s.engine.Any("/get_version_info", s.GetVersionInfo) s.engine.Any("/get_version_info_async", s.GetVersionInfo) + s.engine.Any("/_get_vip_info", s.GetVipInfo) + s.engine.Any("/_get_vip_info_async", s.GetVipInfo) + s.engine.Any("/.handle_quick_operation", s.HandleQuickOperation) go func() { @@ -381,6 +384,11 @@ func (s *httpServer) GetVersionInfo(c *gin.Context) { c.JSON(200, s.bot.CQGetVersionInfo()) } +func (s *httpServer) GetVipInfo(c *gin.Context) { + uid, _ := strconv.ParseInt(getParam(c, "user_id"), 10, 64) + c.JSON(200, s.bot.CQGetVipInfo(uid)) +} + func (s *httpServer) HandleQuickOperation(c *gin.Context) { if c.Request.Method != "POST" { c.AbortWithStatus(404) diff --git a/server/websocket.go b/server/websocket.go index a1f241d..9f80ee4 100644 --- a/server/websocket.go +++ b/server/websocket.go @@ -506,6 +506,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_vip_info": func(bot *coolq.CQBot, p gjson.Result) coolq.MSG { + return bot.CQGetVipInfo(p.Get("user_id").Int()) + }, ".handle_quick_operation": func(bot *coolq.CQBot, p gjson.Result) coolq.MSG { return bot.CQHandleQuickOperation(p.Get("context"), p.Get("operation")) }, From 24dad3d6f97acf8a9c42dbb6634875490f91bdb5 Mon Sep 17 00:00:00 2001 From: scjtqs Date: Sat, 5 Sep 2020 23:19:24 +0800 Subject: [PATCH 45/70] fix --- coolq/api.go | 12 +++---- coolq/bot.go | 1 - coolq/cqcode.go | 84 +++++++++++++++++++++++++++++++------------------ 3 files changed, 60 insertions(+), 37 deletions(-) diff --git a/coolq/api.go b/coolq/api.go index 90b4ade..d20bf6c 100644 --- a/coolq/api.go +++ b/coolq/api.go @@ -119,7 +119,7 @@ func (bot *CQBot) CQSendGroupMessage(groupId int64, i interface{}, autoEscape bo } if m, ok := i.(gjson.Result); ok { if m.Type == gjson.JSON { - elem := bot.ConvertObjectMessage(m, true,groupId) + elem := bot.ConvertObjectMessage(m, true) fixAt(elem) mid := bot.SendGroupMessage(groupId, &message.SendingMessage{Elements: elem}) if mid == -1 { @@ -144,7 +144,7 @@ func (bot *CQBot) CQSendGroupMessage(groupId int64, i interface{}, autoEscape bo if autoEscape { elem = append(elem, message.NewText(str)) } else { - elem = bot.ConvertStringMessage(str, true,groupId) + elem = bot.ConvertStringMessage(str, true) } fixAt(elem) mid := bot.SendGroupMessage(groupId, &message.SendingMessage{Elements: elem}) @@ -187,7 +187,7 @@ func (bot *CQBot) CQSendGroupForwardMessage(groupId int64, m gjson.Result) MSG { } return m["time"].(int32) }(), - Message: bot.ConvertStringMessage(m["message"].(string), true,groupId), + Message: bot.ConvertStringMessage(m["message"].(string), true), }) return } @@ -196,7 +196,7 @@ 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 - content := bot.ConvertObjectMessage(e.Get("data.content"), true,groupId) + content := bot.ConvertObjectMessage(e.Get("data.content"), true) if uin != 0 && name != "" && len(content) > 0 { var newElem []message.IMessageElement for _, elem := range content { @@ -242,7 +242,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,userId) + elem := bot.ConvertObjectMessage(m, true) mid := bot.SendPrivateMessage(userId, &message.SendingMessage{Elements: elem}) if mid == -1 { return Failed(100) @@ -265,7 +265,7 @@ func (bot *CQBot) CQSendPrivateMessage(userId int64, i interface{}, autoEscape b if autoEscape { elem = append(elem, message.NewText(str)) } else { - elem = bot.ConvertStringMessage(str, false,userId) + elem = bot.ConvertStringMessage(str, false) } mid := bot.SendPrivateMessage(userId, &message.SendingMessage{Elements: elem}) if mid == -1 { diff --git a/coolq/bot.go b/coolq/bot.go index e32ca58..12a96e8 100644 --- a/coolq/bot.go +++ b/coolq/bot.go @@ -259,4 +259,3 @@ func (m MSG) ToJson() string { b, _ := json.Marshal(m) return string(b) } - diff --git a/coolq/cqcode.go b/coolq/cqcode.go index 0f8e77f..5e28579 100644 --- a/coolq/cqcode.go +++ b/coolq/cqcode.go @@ -6,6 +6,11 @@ import ( "encoding/hex" "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" @@ -13,12 +18,6 @@ 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+?.*?]`) @@ -173,7 +172,7 @@ func ToStringMessage(e []message.IMessageElement, code int64, raw ...bool) (r st return } -func (bot *CQBot) ConvertStringMessage(m string, group bool, uid int64) (r []message.IMessageElement) { +func (bot *CQBot) ConvertStringMessage(m string, group bool) (r []message.IMessageElement) { i := matchReg.FindAllStringSubmatchIndex(m, -1) si := 0 for _, idx := range i { @@ -205,14 +204,14 @@ func (bot *CQBot) ConvertStringMessage(m string, group bool, uid int64) (r []mes ReplySeq: org["message-id"].(int32), Sender: org["sender"].(message.Sender).Uin, Time: org["time"].(int32), - Elements: bot.ConvertStringMessage(org["message"].(string), group, uid), + Elements: bot.ConvertStringMessage(org["message"].(string), group), }, }, r...) continue } } } - elem, err := bot.ToElement(t, d, group, uid) + elem, err := bot.ToElement(t, d, group) if err != nil { if !IgnoreInvalidCQCode { log.Warnf("转换CQ码 %v 到MiraiGo Element时出现错误: %v 将原样发送.", code, err) @@ -230,7 +229,7 @@ func (bot *CQBot) ConvertStringMessage(m string, group bool, uid int64) (r []mes return } -func (bot *CQBot) ConvertObjectMessage(m gjson.Result, group bool, uid int64) (r []message.IMessageElement) { +func (bot *CQBot) ConvertObjectMessage(m gjson.Result, group bool) (r []message.IMessageElement) { convertElem := func(e gjson.Result) { t := e.Get("type").Str if t == "reply" && group { @@ -249,7 +248,7 @@ func (bot *CQBot) ConvertObjectMessage(m gjson.Result, group bool, uid int64) (r ReplySeq: org["message-id"].(int32), Sender: org["sender"].(message.Sender).Uin, Time: org["time"].(int32), - Elements: bot.ConvertStringMessage(org["message"].(string), group, uid), + Elements: bot.ConvertStringMessage(org["message"].(string), group), }, }, r...) return @@ -261,7 +260,7 @@ func (bot *CQBot) ConvertObjectMessage(m gjson.Result, group bool, uid int64) (r d[key.Str] = value.Str return true }) - elem, err := bot.ToElement(t, d, group, uid) + elem, err := bot.ToElement(t, d, group) if err != nil { log.Warnf("转换CQ码到MiraiGo Element时出现错误: %v 将忽略本段CQ码.", err) return @@ -269,7 +268,7 @@ func (bot *CQBot) ConvertObjectMessage(m gjson.Result, group bool, uid int64) (r r = append(r, elem) } if m.Type == gjson.String { - return bot.ConvertStringMessage(m.Str, group, uid) + return bot.ConvertStringMessage(m.Str, group) } if m.IsArray() { for _, e := range m.Array() { @@ -282,12 +281,12 @@ func (bot *CQBot) ConvertObjectMessage(m gjson.Result, group bool, uid int64) (r return } -func (bot *CQBot) ToElement(t string, d map[string]string, group bool, uid int64) (message.IMessageElement, error) { +func (bot *CQBot) ToElement(t string, d map[string]string, group bool) (message.IMessageElement, error) { switch t { case "text": return message.NewText(d["text"]), nil case "image": - return bot.makeImageElem(t, d, group, uid) + return bot.makeImageElem(t, d, group) case "record": if !group { return nil, errors.New("private voice unsupported now") @@ -428,8 +427,27 @@ func (bot *CQBot) ToElement(t string, d map[string]string, group bool, uid int64 case "cardimage": source := d["source"] icon := d["icon"] - img, _ := bot.makeImageElem(t, d, group, uid) - return bot.SendNewPic(uid, img, source, icon, group) + minwidth, _ := strconv.ParseInt(d["minwidth"], 10, 64) + if minwidth == 0 { + minwidth = 400 + } + minheight, _ := strconv.ParseInt(d["minheight"], 10, 64) + if minheight == 0 { + minheight = 400 + } + maxwidth, _ := strconv.ParseInt(d["maxwidth"], 10, 64) + if maxwidth == 0 { + maxwidth = 500 + } + maxheight, _ := strconv.ParseInt(d["maxheight"], 10, 64) + if maxheight == 0 { + maxheight = 1000 + } + img, err := bot.makeImageElem(t, d, group) + if err != nil { + return nil, errors.New("send cardimage faild") + } + return bot.SendNewPic(img, source, icon, minwidth, minheight, maxwidth, maxheight, group) default: return nil, errors.New("unsupported cq code: " + t) } @@ -464,7 +482,7 @@ func CQCodeUnescapeValue(content string) string { } // 图片 elem 生成器,单独拎出来,用于公用 -func (bot *CQBot) makeImageElem(t string, d map[string]string, group bool, uid int64) (message.IMessageElement, error) { +func (bot *CQBot) makeImageElem(t string, d map[string]string, group bool) (message.IMessageElement, error) { f := d["file"] if strings.HasPrefix(f, "http") || strings.HasPrefix(f, "https") { cache := d["cache"] @@ -512,7 +530,7 @@ func (bot *CQBot) makeImageElem(t string, d map[string]string, group bool, uid i rawPath += ".cqimg" } if !global.PathExists(rawPath) && d["url"] != "" { - return bot.ToElement(t, map[string]string{"file": d["url"]}, group, uid) + return bot.ToElement(t, map[string]string{"file": d["url"]}, group) } if global.PathExists(rawPath) { b, err := ioutil.ReadFile(rawPath) @@ -548,7 +566,7 @@ func (bot *CQBot) makeImageElem(t string, d map[string]string, group bool, uid i } if size == 0 { if url != "" { - return bot.ToElement(t, map[string]string{"file": url}, group, uid) + return bot.ToElement(t, map[string]string{"file": url}, group) } return nil, errors.New("img size is 0") } @@ -559,7 +577,7 @@ func (bot *CQBot) makeImageElem(t string, d map[string]string, group bool, uid i rsp, err := bot.Client.QueryGroupImage(1, hash, size) if err != nil { if url != "" { - return bot.ToElement(t, map[string]string{"file": url}, group, uid) + return bot.ToElement(t, map[string]string{"file": url}, group) } return nil, err } @@ -568,7 +586,7 @@ func (bot *CQBot) makeImageElem(t string, d map[string]string, group bool, uid i rsp, err := bot.Client.QueryFriendImage(1, hash, size) if err != nil { if url != "" { - return bot.ToElement(t, map[string]string{"file": url}, group, uid) + return bot.ToElement(t, map[string]string{"file": url}, group) } return nil, err } @@ -578,26 +596,32 @@ func (bot *CQBot) makeImageElem(t string, d map[string]string, group bool, uid i } //SendNewPic 一种xml 方式发送的群消息图片 -func (bot *CQBot) SendNewPic(id int64, i message.ImageElement, source string, icon string, group bool) (*message.ServiceElement, error) { - var xml string +func (bot *CQBot) SendNewPic(elem message.IMessageElement, source string, icon string, minwidth int64, minheigt int64, maxwidth int64, maxheight int64, group bool) (*message.ServiceElement, error) { + var xml string + xml = "" + if i, ok := elem.(*message.ImageElement); ok { if group == false { - gm, err := bot.Client.UploadPrivateImage(id, i.Data) + gm, err := bot.Client.UploadPrivateImage(1, i.Data) if err != nil { - log.Warnf("警告: 群 %v 消息图片上传失败: %v", id, err) + log.Warnf("警告: 群 %v 消息图片上传失败: %v", 1, err) return nil, err } - xml = fmt.Sprintf(``, "", gm.ImageId, gm.Md5, i.Size, "", source, icon) + xml = fmt.Sprintf(``, "", gm.ImageId, gm.Md5, len(i.Data), "", minwidth, minheigt, maxwidth, maxheight, source, icon) } else { - gm, err := bot.Client.UploadGroupImage(id, i.Data) + log.Warnf(" img %d", i.Size) + gm, err := bot.Client.UploadGroupImage(1, i.Data) if err != nil { - log.Warnf("警告: 群 %v 消息图片上传失败: %v", id, err) + log.Warnf("警告: 群 %v 消息图片上传失败: %v", 1, err) return nil, err } - xml = fmt.Sprintf(``, "", gm.FileId, gm.Md5, i.Size, "", source, icon) + xml = fmt.Sprintf(``, "", gm.FileId, gm.Md5, len(i.Data), "", minwidth, minheigt, maxwidth, maxheight, source, icon) } + } + if xml != "" { log.Warn(xml) XmlMsg := message.NewRichXml(xml, 5) return XmlMsg, nil + } return nil, errors.New("发送xml图片消息失败") } From 6a149989284ff4f31bd114fbc32eb90a0c60ec50 Mon Sep 17 00:00:00 2001 From: scjtqs Date: Sat, 5 Sep 2020 23:29:41 +0800 Subject: [PATCH 46/70] =?UTF-8?q?=E6=B7=BB=E5=8A=A0=20=E8=AF=B4=E6=98=8E?= =?UTF-8?q?=E6=96=87=E6=A1=A3?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- docs/cqhttp.md | 29 ++++++++++++++++++++++++++++- 1 file changed, 28 insertions(+), 1 deletion(-) diff --git a/docs/cqhttp.md b/docs/cqhttp.md index f491cb5..fc97bc2 100644 --- a/docs/cqhttp.md +++ b/docs/cqhttp.md @@ -168,7 +168,7 @@ Type: `xml` ``` -###json消息支持 +### json消息支持 Type: `json` @@ -198,6 +198,33 @@ json中的字符串需要进行转义: [CQ:json,data={"app":"com.tencent.miniapp","desc":"","view":"notification","ver":"0.0.0.1","prompt":"[应用]","appID":"","sourceName":"","actionData":"","actionData_A":"","sourceUrl":"","meta":{"notification":{"appInfo":{"appName":"全国疫情数据统计","appType":4,"appid":1109659848,"iconUrl":"http:\/\/gchat.qpic.cn\/gchatpic_new\/719328335\/-2010394141-6383A777BEB79B70B31CE250142D740F\/0"},"data":[{"title":"确诊","value":"80932"},{"title":"今日确诊","value":"28"},{"title":"疑似","value":"72"},{"title":"今日疑似","value":"5"},{"title":"治愈","value":"60197"},{"title":"今日治愈","value":"1513"},{"title":"死亡","value":"3140"},{"title":"今**亡","value":"17"}],"title":"中国加油,武汉加油","button":[{"name":"病毒:SARS-CoV-2,其导致疾病命名 COVID-19","action":""},{"name":"传染源:新冠肺炎的患者。无症状感染者也可能成为传染源。","action":""}],"emphasis_keyword":""}},"text":"","sourceAd":""}] ``` + +### cardimage 一种xml的图片消息(装逼大图) + +ps: xml 接口的消息都存在风控风险,请自行兼容发送失败后的处理(可以失败后走普通图片模式) + +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,可以留空| + + +示例cardimage 的cq码: +```test +[CQ:cardimage,file=https://i.pixiv.cat/img-master/img/2020/03/25/00/00/08/80334602_p0_master1200.jpg]``` +``` + ## API ### 设置群名 From b1fcfc6f97e12aecb7065969b65d59b747ffb8b9 Mon Sep 17 00:00:00 2001 From: scjtqs Date: Sat, 5 Sep 2020 23:30:43 +0800 Subject: [PATCH 47/70] =?UTF-8?q?=E6=B7=BB=E5=8A=A0=20=E8=AF=B4=E6=98=8E?= =?UTF-8?q?=E6=96=87=E6=A1=A3?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- coolq/cqcode.go | 1 - 1 file changed, 1 deletion(-) diff --git a/coolq/cqcode.go b/coolq/cqcode.go index 5e28579..75905fe 100644 --- a/coolq/cqcode.go +++ b/coolq/cqcode.go @@ -609,7 +609,6 @@ func (bot *CQBot) SendNewPic(elem message.IMessageElement, source string, icon s xml = fmt.Sprintf(``, "", gm.ImageId, gm.Md5, len(i.Data), "", minwidth, minheigt, maxwidth, maxheight, source, icon) } else { - log.Warnf(" img %d", i.Size) gm, err := bot.Client.UploadGroupImage(1, i.Data) if err != nil { log.Warnf("警告: 群 %v 消息图片上传失败: %v", 1, err) From f9e2130b9f9590e366ff3f824722343754bf534d Mon Sep 17 00:00:00 2001 From: scjtqs Date: Sun, 6 Sep 2020 00:21:24 +0800 Subject: [PATCH 48/70] =?UTF-8?q?=E4=BF=AE=E5=A4=8D=20=E5=AF=B9=E6=9C=AC?= =?UTF-8?q?=E5=9C=B0=E6=96=87=E4=BB=B6=E6=A0=BC=E5=BC=8F=E7=9A=84=E6=94=AF?= =?UTF-8?q?=E6=8C=81?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- coolq/cqcode.go | 9 ++++++++- 1 file changed, 8 insertions(+), 1 deletion(-) diff --git a/coolq/cqcode.go b/coolq/cqcode.go index 8554d99..8b135f4 100644 --- a/coolq/cqcode.go +++ b/coolq/cqcode.go @@ -390,7 +390,7 @@ 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) + 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 } if d["type"] == "custom" { @@ -615,10 +615,17 @@ func (bot *CQBot) SendNewPic(elem message.IMessageElement, source string, icon s xml = fmt.Sprintf(``, "", gm.FileId, gm.Md5, len(i.Data), "", minwidth, minheigt, maxwidth, maxheight, source, icon) } } + if i, ok := elem.(*message.GroupImageElement); ok { + xml = fmt.Sprintf(``, "", i.ImageId, i.Md5, 0, "", minwidth, minheigt, maxwidth, maxheight, source, icon) + } + if i, ok := elem.(*message.FriendImageElement); ok { + xml = fmt.Sprintf(``, "", i.ImageId, i.Md5, 0, "", minwidth, minheigt, maxwidth, maxheight, source, icon) + } if xml != "" { log.Warn(xml) XmlMsg := message.NewRichXml(xml, 5) return XmlMsg, nil } + log.Warnf("elem: %+v", elem) return nil, errors.New("发送xml图片消息失败") } From 2a56475daf018a6bdad41508455977f46b1faec5 Mon Sep 17 00:00:00 2001 From: scjtqs Date: Sun, 6 Sep 2020 00:24:04 +0800 Subject: [PATCH 49/70] =?UTF-8?q?=E5=8E=BB=E6=8E=89=E4=B8=80=E4=B8=AA?= =?UTF-8?q?=E8=B0=83=E8=AF=95=E6=97=A5=E5=BF=97?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- coolq/cqcode.go | 1 - 1 file changed, 1 deletion(-) diff --git a/coolq/cqcode.go b/coolq/cqcode.go index 8b135f4..f27c5a0 100644 --- a/coolq/cqcode.go +++ b/coolq/cqcode.go @@ -626,6 +626,5 @@ func (bot *CQBot) SendNewPic(elem message.IMessageElement, source string, icon s XmlMsg := message.NewRichXml(xml, 5) return XmlMsg, nil } - log.Warnf("elem: %+v", elem) return nil, errors.New("发送xml图片消息失败") } From 793cf2e2b9548000d95cd9fc54a4fc4840d8267f Mon Sep 17 00:00:00 2001 From: scjtqs Date: Sun, 6 Sep 2020 00:27:24 +0800 Subject: [PATCH 50/70] =?UTF-8?q?=E4=BF=AE=E5=A4=8D=E4=B8=8BLog?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- coolq/cqcode.go | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/coolq/cqcode.go b/coolq/cqcode.go index f27c5a0..e4e1fb8 100644 --- a/coolq/cqcode.go +++ b/coolq/cqcode.go @@ -601,7 +601,7 @@ func (bot *CQBot) SendNewPic(elem message.IMessageElement, source string, icon s if group == false { gm, err := bot.Client.UploadPrivateImage(1, i.Data) if err != nil { - log.Warnf("警告: 群 %v 消息图片上传失败: %v", 1, err) + log.Warnf("警告: 好友消息 %v 消息图片上传失败: %v", 1, err) return nil, err } xml = fmt.Sprintf(``, "", gm.ImageId, gm.Md5, len(i.Data), "", minwidth, minheigt, maxwidth, maxheight, source, icon) From 4d260be76a5b200f70676b8e072b954b6e914c4f Mon Sep 17 00:00:00 2001 From: scjtqs Date: Sun, 6 Sep 2020 01:19:26 +0800 Subject: [PATCH 51/70] =?UTF-8?q?=E8=B0=83=E6=95=B4=20xml?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- coolq/cqcode.go | 12 ++++++------ 1 file changed, 6 insertions(+), 6 deletions(-) diff --git a/coolq/cqcode.go b/coolq/cqcode.go index e4e1fb8..8bcc570 100644 --- a/coolq/cqcode.go +++ b/coolq/cqcode.go @@ -604,22 +604,22 @@ func (bot *CQBot) SendNewPic(elem message.IMessageElement, source string, icon s log.Warnf("警告: 好友消息 %v 消息图片上传失败: %v", 1, err) return nil, err } - xml = fmt.Sprintf(``, "", gm.ImageId, gm.Md5, len(i.Data), "", minwidth, minheigt, maxwidth, maxheight, source, icon) + xml = fmt.Sprintf(``, "", gm.ImageId, gm.Md5, len(i.Data), "", minwidth, minheigt, maxwidth, maxheight, source, icon) } else { - gm, err := bot.Client.UploadGroupImage(1, i.Data) + gm, err := bot.Client.UploadGroupImage(627864759, i.Data) if err != nil { - log.Warnf("警告: 群 %v 消息图片上传失败: %v", 1, err) + log.Warnf("警告: 群 %v 消息图片上传失败: %v", 627864759, err) return nil, err } - xml = fmt.Sprintf(``, "", gm.FileId, gm.Md5, len(i.Data), "", minwidth, minheigt, maxwidth, maxheight, source, icon) + xml = fmt.Sprintf(``, "", gm.ImageId, gm.Md5, len(i.Data), "", minwidth, minheigt, maxwidth, maxheight, source, icon) } } if i, ok := elem.(*message.GroupImageElement); ok { - xml = fmt.Sprintf(``, "", i.ImageId, i.Md5, 0, "", minwidth, minheigt, maxwidth, maxheight, source, icon) + xml = fmt.Sprintf(``, "", i.ImageId, i.Md5, 0, "", minwidth, minheigt, maxwidth, maxheight, source, icon) } if i, ok := elem.(*message.FriendImageElement); ok { - xml = fmt.Sprintf(``, "", i.ImageId, i.Md5, 0, "", minwidth, minheigt, maxwidth, maxheight, source, icon) + xml = fmt.Sprintf(``, "", i.ImageId, i.Md5, 0, "", minwidth, minheigt, maxwidth, maxheight, source, icon) } if xml != "" { log.Warn(xml) From 514f93b527197933388830154821eac920407138 Mon Sep 17 00:00:00 2001 From: scjtqs Date: Sun, 6 Sep 2020 01:28:31 +0800 Subject: [PATCH 52/70] =?UTF-8?q?=E8=B0=83=E6=95=B4=20xml?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- coolq/cqcode.go | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/coolq/cqcode.go b/coolq/cqcode.go index 8bcc570..2944dca 100644 --- a/coolq/cqcode.go +++ b/coolq/cqcode.go @@ -607,9 +607,9 @@ func (bot *CQBot) SendNewPic(elem message.IMessageElement, source string, icon s xml = fmt.Sprintf(``, "", gm.ImageId, gm.Md5, len(i.Data), "", minwidth, minheigt, maxwidth, maxheight, source, icon) } else { - gm, err := bot.Client.UploadGroupImage(627864759, i.Data) + gm, err := bot.Client.UploadGroupImage(1, i.Data) if err != nil { - log.Warnf("警告: 群 %v 消息图片上传失败: %v", 627864759, err) + log.Warnf("警告: 群 %v 消息图片上传失败: %v", 1, err) return nil, err } xml = fmt.Sprintf(``, "", gm.ImageId, gm.Md5, len(i.Data), "", minwidth, minheigt, maxwidth, maxheight, source, icon) From 828ca2ec3c5e65ede1ca6e3dfb3cf40c77ed31cb Mon Sep 17 00:00:00 2001 From: scjtqs Date: Sun, 6 Sep 2020 01:38:41 +0800 Subject: [PATCH 53/70] =?UTF-8?q?=E4=BF=AE=E5=A4=8D=20ios=20=E6=94=AF?= =?UTF-8?q?=E6=8C=81?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- coolq/cqcode.go | 8 ++++---- 1 file changed, 4 insertions(+), 4 deletions(-) diff --git a/coolq/cqcode.go b/coolq/cqcode.go index 2944dca..ddb8119 100644 --- a/coolq/cqcode.go +++ b/coolq/cqcode.go @@ -604,7 +604,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.ImageId, gm.Md5, len(i.Data), "", minwidth, minheigt, maxwidth, maxheight, source, icon) + xml = fmt.Sprintf(``, "", gm.Md5, gm.Md5, len(i.Data), "", minwidth, minheigt, maxwidth, maxheight, source, icon) } else { gm, err := bot.Client.UploadGroupImage(1, i.Data) @@ -612,14 +612,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.ImageId, gm.Md5, len(i.Data), "", minwidth, minheigt, maxwidth, maxheight, source, icon) + xml = fmt.Sprintf(``, "", gm.Md5, gm.Md5, len(i.Data), "", minwidth, minheigt, maxwidth, maxheight, source, icon) } } if i, ok := elem.(*message.GroupImageElement); ok { - xml = fmt.Sprintf(``, "", i.ImageId, i.Md5, 0, "", minwidth, minheigt, maxwidth, maxheight, source, icon) + xml = fmt.Sprintf(``, "", i.Md5, i.Md5, 0, "", minwidth, minheigt, maxwidth, maxheight, source, icon) } if i, ok := elem.(*message.FriendImageElement); ok { - xml = fmt.Sprintf(``, "", i.ImageId, i.Md5, 0, "", minwidth, minheigt, maxwidth, maxheight, source, icon) + xml = fmt.Sprintf(``, "", i.Md5, i.Md5, 0, "", minwidth, minheigt, maxwidth, maxheight, source, icon) } if xml != "" { log.Warn(xml) From ac5803a539c07f94fea3fb3e17016cf265bbd995 Mon Sep 17 00:00:00 2001 From: scjtqs Date: Sun, 6 Sep 2020 10:39:46 +0800 Subject: [PATCH 54/70] =?UTF-8?q?xml=E5=92=8Cjson=E6=B6=88=E6=81=AF?= =?UTF-8?q?=E4=BB=A5=E5=8F=8Acq=E7=A0=81=E4=B8=8A=E6=8A=A5=E6=94=AF?= =?UTF-8?q?=E6=8C=81.=20=E5=AF=8C=E6=96=87=E6=9C=AC=E7=9A=84xml=E5=92=8Cjs?= =?UTF-8?q?on=E7=9A=84=E6=B6=88=E6=81=AF=E8=AF=86=E5=88=AB=EF=BC=8C?= =?UTF-8?q?=E4=BE=9D=E8=B5=96miraigo=E7=9A=84pr?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- coolq/cqcode.go | 29 ++++++++++++++++++++++++++--- 1 file changed, 26 insertions(+), 3 deletions(-) diff --git a/coolq/cqcode.go b/coolq/cqcode.go index ddb8119..ec01798 100644 --- a/coolq/cqcode.go +++ b/coolq/cqcode.go @@ -51,9 +51,13 @@ func ToArrayMessage(e []message.IMessageElement, code int64, raw ...bool) (r []M "data": map[string]string{"text": o.Content}, } case *message.LightAppElement: + //m = MSG{ + // "type": "text", + // "data": map[string]string{"text": o.Content}, + //} m = MSG{ - "type": "text", - "data": map[string]string{"text": o.Content}, + "type": "json", + "data": map[string]string{"data": o.Content}, } case *message.AtElement: if o.Target == 0 { @@ -113,6 +117,18 @@ func ToArrayMessage(e []message.IMessageElement, code int64, raw ...bool) (r []M "data": map[string]string{"file": o.Filename, "url": o.Url}, } } + case *message.ServiceElement: + if isOk := strings.Contains(o.Content, " Date: Sun, 6 Sep 2020 10:42:18 +0800 Subject: [PATCH 55/70] =?UTF-8?q?=E4=BF=AE=E6=94=B9=E5=AF=B9=E5=BA=94?= =?UTF-8?q?=E7=9A=84=20=E6=96=87=E6=A1=A3=E8=8C=83=E5=9B=B4?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- docs/cqhttp.md | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/docs/cqhttp.md b/docs/cqhttp.md index a91beee..6c13a80 100644 --- a/docs/cqhttp.md +++ b/docs/cqhttp.md @@ -123,7 +123,7 @@ Type: `node` Type: `xml` -范围: **发送** +范围: **发送/接收** 参数: @@ -172,7 +172,7 @@ Type: `xml` Type: `json` -范围: **发送** +范围: **发送/接收** 参数: From 5501c6192ff9d87f05b98ed0f0db1299f947dd72 Mon Sep 17 00:00:00 2001 From: wdvxdr Date: Sun, 6 Sep 2020 11:12:23 +0800 Subject: [PATCH 56/70] Update MiraiGo --- go.mod | 8 +++----- go.sum | 45 +++++++++++++++++++-------------------------- 2 files changed, 22 insertions(+), 31 deletions(-) diff --git a/go.mod b/go.mod index c22cbec..85418c5 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-20200902072401-56d3e65e98b5 + github.com/Mrs4s/MiraiGo v0.0.0-20200906025848-23750bb59124 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 @@ -18,15 +18,13 @@ 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/robertkrimen/otto v0.0.0-20191219234010-c382bd3c16ff github.com/sirupsen/logrus v1.6.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-20200822124328-c89045814202 // indirect - golang.org/x/sys v0.0.0-20200831180312-196b9ba8737a // indirect - gopkg.in/sourcemap.v1 v1.0.5 // indirect + golang.org/x/net v0.0.0-20200904194848-62affa334b73 // indirect + golang.org/x/sys v0.0.0-20200905004654-be1d3432aa8f // indirect gopkg.in/yaml.v2 v2.3.0 // indirect ) diff --git a/go.sum b/go.sum index 3eead0b..aff89db 100644 --- a/go.sum +++ b/go.sum @@ -1,25 +1,24 @@ 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-20200827182935-51e155ef20da h1:T2Qz4w6sMrBxw+oiwbUa/c996jWYulCAtM+x1L0l3R8= -github.com/Mrs4s/MiraiGo v0.0.0-20200827182935-51e155ef20da/go.mod h1:0je03wji/tSw4bUH4QCF2Z4/EjyNWjSJTyy5tliX6EM= -github.com/Mrs4s/MiraiGo v0.0.0-20200901081949-6328ae0e93db h1:Iz5QWqqtwwSJh6A5mOK9Px14eBCv4mynCQDAJLO0x+o= -github.com/Mrs4s/MiraiGo v0.0.0-20200901081949-6328ae0e93db/go.mod h1:0je03wji/tSw4bUH4QCF2Z4/EjyNWjSJTyy5tliX6EM= -github.com/Mrs4s/MiraiGo v0.0.0-20200902072401-56d3e65e98b5 h1:q4nVSNiob0PWiU7gtof5A64mE2e+hCU45KGTqOVgoJg= -github.com/Mrs4s/MiraiGo v0.0.0-20200902072401-56d3e65e98b5/go.mod h1:0je03wji/tSw4bUH4QCF2Z4/EjyNWjSJTyy5tliX6EM= +github.com/Mrs4s/MiraiGo v0.0.0-20200906025848-23750bb59124 h1:qqwuCK/U9wzVf4ZmlvXI2BC1+gBESNSUD5yNjTfoExQ= +github.com/Mrs4s/MiraiGo v0.0.0-20200906025848-23750bb59124/go.mod h1:TVEPCV9iayaBPTDLNGO9kc734jXNT/sxbhqo4IYkvko= 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= @@ -48,16 +47,18 @@ 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.1 h1:2i3eqQ1KUhTlj7AFeIHqVUFku5QwUhwE2wNgYTVpbxQ= -github.com/guonaihong/gout v0.1.1/go.mod h1:vXvv5Kxr70eM5wrp4F0+t9lnLWmq+YPW2GByll2f/EA= 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= @@ -69,11 +70,10 @@ github.com/konsorten/go-windows-terminal-sequences v1.0.3/go.mod h1:T0+1ngSBFLxv 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.3.0+incompatible h1:4mNlp+/SvALIPFpbXV3kxNJJno9iKFWGxSDE13Kl66Q= github.com/lestrrat-go/file-rotatelogs v2.3.0+incompatible/go.mod h1:ZQnN8lSECaebrkQytbHj4xNgtg8CR7RYXnPok8e0EHA= -github.com/lestrrat-go/strftime v1.0.1 h1:o7qz5pmLzPDLyGW4lG6JvTKPUfTFXwe+vOamIYWtnVU= -github.com/lestrrat-go/strftime v1.0.1/go.mod h1:E1nN3pCbtMSu1yjSVeyuRFVm/U0xoR76fd03sz+Qz4g= 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= @@ -90,12 +90,11 @@ github.com/nfnt/resize v0.0.0-20180221191011-83c6a9932646/go.mod h1:jpp1/29i3P1S 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/robertkrimen/otto v0.0.0-20191219234010-c382bd3c16ff h1:+6NUiITWwE5q1KO6SAfUX918c+Tab0+tGAM/mtdlUyA= -github.com/robertkrimen/otto v0.0.0-20191219234010-c382bd3c16ff/go.mod h1:xvqspoSXJTIpemEonrMDFq6XzwHYYgToXWj5eRX1OtY= 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= @@ -103,18 +102,16 @@ 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.0 h1:9VEQWz6LLMUsUl6PueE49ir4Ka6CzLymOAZDxpFsTDc= -github.com/tidwall/gjson v1.6.0/go.mod h1:P256ACg0Mn+j1RXIDXoss50DeIABTYK1PULOJHhxOls= 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.0 h1:HsD+QiTn7sK6flMKIvNmpqz1qrpP3Ps6jOKIKMooyg4= -github.com/tidwall/pretty v1.0.0/go.mod h1:XNkn88O1ChpSDQmQeStsy+sBenx6DDtFZJxhVysOjyk= 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= @@ -143,8 +140,8 @@ 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-20200822124328-c89045814202 h1:VvcQYSHwXgi7W+TpUR6A9g6Up98WAHf3f/ulnJ62IyA= -golang.org/x/net v0.0.0-20200822124328-c89045814202/go.mod h1:/O7V0waA8r7cgGh81Ro3o1hOxt32SMVPicZroKQ2sZA= +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/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= @@ -157,12 +154,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-20200625212154-ddb9806d33ae h1:Ih9Yo4hSPImZOpfGuA4bR/ORKTAbhZo2AbWNRCnevdo= -golang.org/x/sys v0.0.0-20200625212154-ddb9806d33ae/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs= -golang.org/x/sys v0.0.0-20200828194041-157a740278f4 h1:kCCpuwSAoYJPkNc6x0xT9yTtV4oKtARo4RGBQWOfg9E= -golang.org/x/sys v0.0.0-20200828194041-157a740278f4/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs= -golang.org/x/sys v0.0.0-20200831180312-196b9ba8737a h1:i47hUS795cOydZI4AwJQCKXOr4BvxzvikwDoDtHhP2Y= -golang.org/x/sys v0.0.0-20200831180312-196b9ba8737a/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/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/tools v0.0.0-20180917221912-90fa682c2a6e/go.mod h1:n7NCudcB/nEzxVGmLbDWY5pfWTLqBcC2KZ6jyYvM4mQ= @@ -170,6 +163,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= @@ -189,11 +183,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/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/sourcemap.v1 v1.0.5 h1:inv58fC9f9J3TK2Y2R1NPntXEn3/wjWHkonhIUODNTI= -gopkg.in/sourcemap.v1 v1.0.5/go.mod h1:2RlvNNSMglmRrcvhfuzp4hQHwOtjxlbjX7UPY/GXb78= 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 6a0f44f6cc707f49aebe6e6c364f3b107679e392 Mon Sep 17 00:00:00 2001 From: wdvxdr Date: Sun, 6 Sep 2020 11:53:31 +0800 Subject: [PATCH 57/70] add _send_group_notice --- coolq/api.go | 8 ++++++++ server/http.go | 8 ++++++++ server/websocket.go | 3 +++ 3 files changed, 19 insertions(+) diff --git a/coolq/api.go b/coolq/api.go index f9ecde2..3670e3d 100644 --- a/coolq/api.go +++ b/coolq/api.go @@ -304,6 +304,14 @@ func (bot *CQBot) CQSetGroupName(groupId int64, name string) MSG { return Failed(100) } +func (bot *CQBot) CQSetGroupMemo(groupId int64, msg string) MSG { + if g := bot.Client.FindGroup(groupId); g != nil { + g.UpdateMemo(msg) + return OK(nil) + } + return Failed(100) +} + // 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 { if g := bot.Client.FindGroup(groupId); g != nil { diff --git a/server/http.go b/server/http.go index aa4d591..64b7599 100644 --- a/server/http.go +++ b/server/http.go @@ -131,6 +131,9 @@ func (s *httpServer) Run(addr, authToken string, bot *coolq.CQBot) { s.engine.Any("/set_group_name", s.SetGroupName) s.engine.Any("/set_group_name_async", s.SetGroupName) + s.engine.Any("/_send_group_notice", s.SendGroupNotice) + s.engine.Any("/_send_group_notice_async", s.SendGroupNotice) + s.engine.Any("/set_group_leave", s.SetGroupLeave) s.engine.Any("/set_group_leave_async", s.SetGroupLeave) @@ -353,6 +356,11 @@ func (s *httpServer) SetGroupName(c *gin.Context) { c.JSON(200, s.bot.CQSetGroupName(gid, getParam(c, "group_name"))) } +func (s *httpServer) SendGroupNotice(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) { gid, _ := strconv.ParseInt(getParam(c, "group_id"), 10, 64) c.JSON(200, s.bot.CQSetGroupLeave(gid)) diff --git a/server/websocket.go b/server/websocket.go index 9f80ee4..20986a4 100644 --- a/server/websocket.go +++ b/server/websocket.go @@ -479,6 +479,9 @@ var wsApi = map[string]func(*coolq.CQBot, gjson.Result) coolq.MSG{ "set_group_name": func(bot *coolq.CQBot, p gjson.Result) coolq.MSG { return bot.CQSetGroupName(p.Get("group_id").Int(), p.Get("group_name").Str) }, + "_send_group_notice": func(bot *coolq.CQBot, p gjson.Result) coolq.MSG { + return bot.CQSetGroupMemo(p.Get("group_id").Int(), p.Get("content").Str) + }, "set_group_leave": func(bot *coolq.CQBot, p gjson.Result) coolq.MSG { return bot.CQSetGroupLeave(p.Get("group_id").Int()) }, From 3dc436b5348273ce08bbbfbaea6f3f2427462a16 Mon Sep 17 00:00:00 2001 From: wdvxdr Date: Sun, 6 Sep 2020 14:47:46 +0800 Subject: [PATCH 58/70] docs : EventFilter --- docs/EventFilter.md | 132 ++++++++++++++++++++++++++++++++++++++++++++ 1 file changed, 132 insertions(+) create mode 100644 docs/EventFilter.md diff --git a/docs/EventFilter.md b/docs/EventFilter.md new file mode 100644 index 0000000..c9ccf05 --- /dev/null +++ b/docs/EventFilter.md @@ -0,0 +1,132 @@ +# 事件过滤器 + +在go-cqhttp同级目录下新建`filter.json`文件即可开启事件过滤器,启动时会读取该文件中定义的过滤规则(使用 JSON 编写),若文件不存在,或过滤规则语法错误,则会暂停所有上报。 +事件过滤器会处理所有事件(包括心跳事件在内的元事件),请谨慎使用!! + +## 示例 + +这节首先给出一些示例,演示过滤器的基本用法,下一节将给出具体语法说明。 + +### 只上报以「!!」开头的消息 + +```json +{ + "raw_message": { + ".regex": "^!!" + } +} +``` + +### 只上报群组的非匿名消息 + +```json +{ + "message_type": "group", + "anonymous": { + ".eq": null + } +} +``` + +### 只上报私聊或特定群组的非匿名消息 + +```json +{ + ".or": [ + { + "message_type": "private" + }, + { + "message_type": "group", + "group_id": { + ".in": [ + 123456 + ] + }, + "anonymous": { + ".eq": null + } + } + ] +} +``` + +### 只上报群组 11111、22222、33333 中不是用户 12345 发送的消息,以及用户 66666 发送的所有消息 + +```json +{ + ".or": [ + { + "group_id": { + ".in": [11111, 22222, 33333] + }, + "user_id": { + ".neq": 12345 + } + }, + { + "user_id": 66666 + } + ] +} +``` + +### 一个更复杂的例子 + +```json +{ + ".or": [ + { + "message_type": "private", + "user_id": { + ".not": { + ".in": [11111, 22222, 33333] + }, + ".neq": 44444 + } + }, + { + "message_type": { + ".regex": "group|discuss" + }, + ".or": [ + { + "group_id": 12345 + }, + { + "raw_message": { + ".contains": "通知" + } + } + ] + } + ] +} +``` + +## 语法说明 + +过滤规则最外层是一个 JSON 对象,其中的键,如果以 `.`(点号)开头,则表示运算符,其值为运算符的参数,如果不以 `.` 开头,则表示对事件数据对象中相应键的过滤。过滤规则中任何一个对象,只有在它的所有项都匹配的情况下,才会让事件通过(等价于一个 `and` 运算);其中,不以 `.` 开头的键,若其值不是对象,则只有在这个值和事件数据相应值相等的情况下,才会通过(等价于一个 `eq` 运算符)。 + +下面列出所有运算符(「要求的参数类型」是指运算符的键所对应的值的类型,「可作用于的类型」是指在过滤时事件对象相应值的类型): + +| 运算符 | 要求的参数类型 | 可作用于的类型 | +| ----- | ------------ | ----------- | +| `.not` | object | 任何 | +| `.and` | object | 若参数中全为运算符,则任何;若不全为运算符,则 object | +| `.or` | array(数组元素为 object) | 任何 | +| `.eq` | 任何 | 任何 | +| `.neq` | 任何 | 任何 | +| `.in` | string/array | 若参数为 string,则 string;若参数为 array,则任何 | +| `.contains` | string | string | +| `.regex` | string | string | + + +## 过滤时的事件数据对象 + +过滤器在go-cqhttp构建好事件数据后运行,各事件的数据字段见[OneBot标准]( https://github.com/howmanybots/onebot/blob/master/v11/specs/event/README.md )。 + +这里有几点需要注意: + +- `message` 字段在运行过滤器时是消息段数组的形式(见 [消息格式]( https://github.com/howmanybots/onebot/blob/master/v11/specs/message/array.md )) +- `raw_message` 字段为未经**CQ码**处理的原始消息字符串,这意味着其中可能会出现形如 `[CQ:face,id=123]` 的 CQ 码 From da8b0931f14aba91c1c2dcdcd7ca733a8185a39e Mon Sep 17 00:00:00 2001 From: scjtqs Date: Sun, 6 Sep 2020 14:57:08 +0800 Subject: [PATCH 59/70] =?UTF-8?q?=E9=BB=98=E8=AE=A4=E6=9C=80=E5=B0=8F?= =?UTF-8?q?=E5=AE=BD=E9=AB=98=E8=B0=83=E6=95=B4=E5=88=B0=20200*200?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- coolq/cqcode.go | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/coolq/cqcode.go b/coolq/cqcode.go index ec01798..76929d5 100644 --- a/coolq/cqcode.go +++ b/coolq/cqcode.go @@ -450,11 +450,11 @@ func (bot *CQBot) ToElement(t string, d map[string]string, group bool) (message. icon := d["icon"] minwidth, _ := strconv.ParseInt(d["minwidth"], 10, 64) if minwidth == 0 { - minwidth = 400 + minwidth = 200 } minheight, _ := strconv.ParseInt(d["minheight"], 10, 64) if minheight == 0 { - minheight = 400 + minheight = 200 } maxwidth, _ := strconv.ParseInt(d["maxwidth"], 10, 64) if maxwidth == 0 { From a26681a4d91e507e2bf4bd6766c7cf038c2f3992 Mon Sep 17 00:00:00 2001 From: Mrs4s Date: Mon, 7 Sep 2020 05:13:38 +0800 Subject: [PATCH 60/70] update post error. --- server/http.go | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/server/http.go b/server/http.go index 64b7599..0d9c0a4 100644 --- a/server/http.go +++ b/server/http.go @@ -205,7 +205,7 @@ func (c *httpClient) onBotPushEvent(m coolq.MSG) { return h }()).SetTimeout(time.Second * time.Duration(c.timeout)).Do() if err != nil { - log.Warnf("上报Event数据到 %v 失败: %v", c.addr, err) + log.Warnf("上报Event数据 %v 到 %v 失败: %v", m.ToJson(), c.addr, err) return } if gjson.Valid(res) { From 4b12bbc1e4596da3e3d436c29ef381c75ea5c700 Mon Sep 17 00:00:00 2001 From: Shigma <33423008+Shigma@users.noreply.github.com> Date: Tue, 8 Sep 2020 02:26:42 +0800 Subject: [PATCH 61/70] docs: use identical indentation --- docs/config.md | 10 +++++----- 1 file changed, 5 insertions(+), 5 deletions(-) diff --git a/docs/config.md b/docs/config.md index cc5ff85..76968a5 100644 --- a/docs/config.md +++ b/docs/config.md @@ -22,11 +22,11 @@ go-cqhttp 支持导入CQHTTP的配置文件, 具体步骤为: "password_encrypted": "", "enable_db": true, "access_token": "", - "relogin": { - "enabled": true, - "relogin_delay": 3, - "max_relogin_times": 0 - }, + "relogin": { + "enabled": true, + "relogin_delay": 3, + "max_relogin_times": 0 + }, "post_message_format": "string", "ignore_invalid_cqcode": false, "force_fragmented": true, From eca396afb3ebf894c25751ca373a8f4eba74eb25 Mon Sep 17 00:00:00 2001 From: Mrs4s <1844812067@qq.com> Date: Tue, 8 Sep 2020 22:41:39 +0800 Subject: [PATCH 62/70] update. --- coolq/api.go | 42 +++++++++++++++++++++--------------------- server/http.go | 6 +++--- server/websocket.go | 3 +-- 3 files changed, 25 insertions(+), 26 deletions(-) diff --git a/coolq/api.go b/coolq/api.go index 3670e3d..0e255ad 100644 --- a/coolq/api.go +++ b/coolq/api.go @@ -68,20 +68,7 @@ func (bot *CQBot) CQGetGroupInfo(groupId int64) MSG { } // https://cqhttp.cc/docs/4.15/#/API?id=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 -func (bot *CQBot) CQGetGroupMemberList(groupId int64) MSG { - group := bot.Client.FindGroup(groupId) - if group == nil { - return Failed(100) - } - members := make([]MSG, 0) - for _, m := range group.Members { - members = append(members, convertGroupMemberInfo(groupId, m)) - } - return OK(members) -} - -// https://cqhttp.cc/docs/4.15/#/API?id=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 -func (bot *CQBot) CQGetGroupMemberInfo(groupId, userId int64, noCache bool) MSG { +func (bot *CQBot) CQGetGroupMemberList(groupId int64, noCache bool) MSG { group := bot.Client.FindGroup(groupId) if group == nil { return Failed(100) @@ -94,6 +81,19 @@ func (bot *CQBot) CQGetGroupMemberInfo(groupId, userId int64, noCache bool) MSG } group.Members = t } + members := make([]MSG, 0) + for _, m := range group.Members { + members = append(members, convertGroupMemberInfo(groupId, m)) + } + return OK(members) +} + +// https://cqhttp.cc/docs/4.15/#/API?id=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 +func (bot *CQBot) CQGetGroupMemberInfo(groupId, userId int64) MSG { + group := bot.Client.FindGroup(groupId) + if group == nil { + return Failed(100) + } member := group.FindMember(userId) if member == nil { return Failed(102) @@ -411,13 +411,13 @@ func (bot *CQBot) CQGetVipInfo(userId int64) MSG { return Failed(100) } msg = MSG{ - "user_id": vip.Uin, - "nickname": vip.Name, - "level": vip.Level, - "level_speed": vip.LevelSpeed, - "vip_level": vip.VipLevel, - "vip_growth_speed": vip.VipGrowthSpeed, - "vip_growth_total": vip.VipGrowthTotal, + "user_id": vip.Uin, + "nickname": vip.Name, + "level": vip.Level, + "level_speed": vip.LevelSpeed, + "vip_level": vip.VipLevel, + "vip_growth_speed": vip.VipGrowthSpeed, + "vip_growth_total": vip.VipGrowthTotal, } return OK(msg) } diff --git a/server/http.go b/server/http.go index 0d9c0a4..1db9789 100644 --- a/server/http.go +++ b/server/http.go @@ -233,14 +233,14 @@ func (s *httpServer) GetGroupInfo(c *gin.Context) { func (s *httpServer) GetGroupMemberList(c *gin.Context) { gid, _ := strconv.ParseInt(getParam(c, "group_id"), 10, 64) - c.JSON(200, s.bot.CQGetGroupMemberList(gid)) + nc := getParamOrDefault(c, "no_cache", "false") + c.JSON(200, s.bot.CQGetGroupMemberList(gid, nc == "true")) } func (s *httpServer) GetGroupMemberInfo(c *gin.Context) { gid, _ := strconv.ParseInt(getParam(c, "group_id"), 10, 64) uid, _ := strconv.ParseInt(getParam(c, "user_id"), 10, 64) - nc := getParamOrDefault(c, "no_cache", "false") - c.JSON(200, s.bot.CQGetGroupMemberInfo(gid, uid, nc == "true")) + c.JSON(200, s.bot.CQGetGroupMemberInfo(gid, uid)) } func (s *httpServer) SendMessage(c *gin.Context) { diff --git a/server/websocket.go b/server/websocket.go index 20986a4..e906ff3 100644 --- a/server/websocket.go +++ b/server/websocket.go @@ -397,12 +397,11 @@ var wsApi = map[string]func(*coolq.CQBot, gjson.Result) coolq.MSG{ return bot.CQGetGroupInfo(p.Get("group_id").Int()) }, "get_group_member_list": func(bot *coolq.CQBot, p gjson.Result) coolq.MSG { - return bot.CQGetGroupMemberList(p.Get("group_id").Int()) + return bot.CQGetGroupMemberList(p.Get("group_id").Int(), p.Get("no_cache").Bool()) }, "get_group_member_info": func(bot *coolq.CQBot, p gjson.Result) coolq.MSG { return bot.CQGetGroupMemberInfo( p.Get("group_id").Int(), p.Get("user_id").Int(), - p.Get("no_cache").Bool(), ) }, "send_msg": func(bot *coolq.CQBot, p gjson.Result) coolq.MSG { From 86da65771de34586233aa04fa75f680b1abeebdf Mon Sep 17 00:00:00 2001 From: Mrs4s Date: Wed, 9 Sep 2020 08:44:47 +0800 Subject: [PATCH 63/70] fix #251. --- server/websocket.go | 43 +++++++++---------------------------------- 1 file changed, 9 insertions(+), 34 deletions(-) diff --git a/server/websocket.go b/server/websocket.go index e906ff3..1ac2401 100644 --- a/server/websocket.go +++ b/server/websocket.go @@ -222,20 +222,12 @@ func (c *websocketClient) onBotPushEvent(m coolq.MSG) { func (s *websocketServer) event(w http.ResponseWriter, r *http.Request) { if s.token != "" { - if auth := r.URL.Query().Get("access_token"); auth != s.token && auth != "" { - log.Warnf("已拒绝 %v 的 Websocket 请求: Token错误", r.RemoteAddr) - w.WriteHeader(401) - return - } else if auth := strings.SplitN(r.Header.Get("Authorization"), " ", 2); len(auth) == 2 { - if auth[1] != s.token { - log.Warnf("已拒绝 %v 的 Websocket 请求: Token错误", r.RemoteAddr) + 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 { + log.Warnf("已拒绝 %v 的 Websocket 请求: Token鉴权失败", r.RemoteAddr) w.WriteHeader(401) return } - } else { - log.Warnf("已拒绝 %v 的 Websocket 请求: 空Token或传入格式错误", r.RemoteAddr) - w.WriteHeader(401) - return } } c, err := upgrader.Upgrade(w, r, nil) @@ -261,20 +253,12 @@ func (s *websocketServer) event(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 && auth != "" { - log.Warnf("已拒绝 %v 的 Websocket 请求: Token错误", r.RemoteAddr) - w.WriteHeader(401) - return - } else if auth := strings.SplitN(r.Header.Get("Authorization"), " ", 2); len(auth) == 2 { - if auth[1] != s.token { - log.Warnf("已拒绝 %v 的 Websocket 请求: Token错误", r.RemoteAddr) + 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 { + log.Warnf("已拒绝 %v 的 Websocket 请求: Token鉴权失败", r.RemoteAddr) w.WriteHeader(401) return } - } else { - log.Warnf("已拒绝 %v 的 Websocket 请求: 空Token或传入格式错误", r.RemoteAddr) - w.WriteHeader(401) - return } } c, err := upgrader.Upgrade(w, r, nil) @@ -289,20 +273,12 @@ func (s *websocketServer) api(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 && auth != "" { - log.Warnf("已拒绝 %v 的 Websocket 请求: Token错误", r.RemoteAddr) - w.WriteHeader(401) - return - } else if auth := strings.SplitN(r.Header.Get("Authorization"), " ", 2); len(auth) == 2 { - if auth[1] != s.token { - log.Warnf("已拒绝 %v 的 Websocket 请求: Token错误", r.RemoteAddr) + 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 { + log.Warnf("已拒绝 %v 的 Websocket 请求: Token鉴权失败", r.RemoteAddr) w.WriteHeader(401) return } - } else { - log.Warnf("已拒绝 %v 的 Websocket 请求: 空Token或传入格式错误", r.RemoteAddr) - w.WriteHeader(401) - return } } c, err := upgrader.Upgrade(w, r, nil) @@ -316,7 +292,6 @@ func (s *websocketServer) any(w http.ResponseWriter, r *http.Request) { c.Close() return } - log.Infof("接受 Websocket 连接: %v (/)", r.RemoteAddr) conn := &websocketConn{Conn: c} s.eventConn = append(s.eventConn, conn) From 5ddb246ab26537823c608e3c43730ab771e9fbaa Mon Sep 17 00:00:00 2001 From: wdvxdr Date: Wed, 9 Sep 2020 10:47:14 +0800 Subject: [PATCH 64/70] feature: _rate_limit MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit api限速 --- docs/config.md | 8 ++ global/config.go | 14 ++++ global/ratelimit.go | 20 +++++ go.mod | 1 + go.sum | 2 + main.go | 3 + server/http.go | 196 ++++++++++++++++++++++++-------------------- server/websocket.go | 3 +- 8 files changed, 159 insertions(+), 88 deletions(-) create mode 100644 global/ratelimit.go diff --git a/docs/config.md b/docs/config.md index 76968a5..ccdff7c 100644 --- a/docs/config.md +++ b/docs/config.md @@ -27,6 +27,11 @@ go-cqhttp 支持导入CQHTTP的配置文件, 具体步骤为: "relogin_delay": 3, "max_relogin_times": 0 }, + "_rate_limit": { + "enabled": false, + "frequency": 1, + "bucket_size": 1 + }, "post_message_format": "string", "ignore_invalid_cqcode": false, "force_fragmented": true, @@ -66,6 +71,9 @@ go-cqhttp 支持导入CQHTTP的配置文件, 具体步骤为: | 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 | 是否强制分片发送群长消息 | diff --git a/global/config.go b/global/config.go index 07ba209..31ed776 100644 --- a/global/config.go +++ b/global/config.go @@ -21,6 +21,11 @@ type JsonConfig struct { ReLoginDelay int `json:"relogin_delay"` MaxReloginTimes uint `json:"max_relogin_times"` } `json:"relogin"` + RateLimit struct { + Enabled bool `json:"enabled"` + Frequency float64 `json:"frequency"` + BucketSize int `json:"bucket_size"` + } `json:"_rate_limit"` IgnoreInvalidCQCode bool `json:"ignore_invalid_cqcode"` ForceFragmented bool `json:"force_fragmented"` HeartbeatInterval time.Duration `json:"heartbeat_interval"` @@ -85,6 +90,15 @@ func DefaultConfig() *JsonConfig { ReLoginDelay: 3, MaxReloginTimes: 0, }, + RateLimit: struct { + Enabled bool `json:"enabled"` + Frequency float64 `json:"frequency"` + BucketSize int `json:"bucket_size"` + }{ + Enabled: false, + Frequency: 1, + BucketSize: 1, + }, PostMessageFormat: "string", ForceFragmented: true, HttpConfig: &GoCQHttpConfig{ diff --git a/global/ratelimit.go b/global/ratelimit.go new file mode 100644 index 0000000..79594be --- /dev/null +++ b/global/ratelimit.go @@ -0,0 +1,20 @@ +package global + +import ( + "context" + "golang.org/x/time/rate" +) + +var limiter *rate.Limiter +var limitEnable = false + +func RateLimit(ctx context.Context) { + if limitEnable { + _ = limiter.Wait(ctx) + } +} + +func InitLimiter(r float64, b int) { + limitEnable = true + limiter = rate.NewLimiter(rate.Limit(r), b) +} diff --git a/go.mod b/go.mod index 85418c5..319ffc2 100644 --- a/go.mod +++ b/go.mod @@ -26,5 +26,6 @@ require ( 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-20200905004654-be1d3432aa8f // 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 7473e10..4a4dada 100644 --- a/go.sum +++ b/go.sum @@ -159,6 +159,8 @@ golang.org/x/sys v0.0.0-20200905004654-be1d3432aa8f h1:Fqb3ao1hUmOR3GkUOg/Y+BadL golang.org/x/sys v0.0.0-20200905004654-be1d3432aa8f/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= +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= 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= diff --git a/main.go b/main.go index f5eae47..3aeaba6 100644 --- a/main.go +++ b/main.go @@ -263,6 +263,9 @@ func main() { } else { coolq.SetMessageFormat(conf.PostMessageFormat) } + if conf.RateLimit.Enabled { + global.InitLimiter(conf.RateLimit.Frequency, conf.RateLimit.BucketSize) + } coolq.IgnoreInvalidCQCode = conf.IgnoreInvalidCQCode coolq.ForceFragmented = conf.ForceFragmented if conf.HttpConfig != nil && conf.HttpConfig.Enabled { diff --git a/server/http.go b/server/http.go index 1db9789..aec1134 100644 --- a/server/http.go +++ b/server/http.go @@ -1,6 +1,7 @@ package server import ( + "context" "crypto/hmac" "crypto/sha1" "encoding/hex" @@ -74,93 +75,7 @@ func (s *httpServer) Run(addr, authToken string, bot *coolq.CQBot) { }) } - s.engine.Any("/get_login_info", s.GetLoginInfo) - s.engine.Any("/get_login_info_async", s.GetLoginInfo) - - s.engine.Any("/get_friend_list", s.GetFriendList) - s.engine.Any("/get_friend_list_async", s.GetFriendList) - - s.engine.Any("/get_group_list", s.GetGroupList) - s.engine.Any("/get_group_list_async", s.GetGroupList) - - s.engine.Any("/get_group_info", s.GetGroupInfo) - s.engine.Any("/get_group_info_async", s.GetGroupInfo) - - s.engine.Any("/get_group_member_list", s.GetGroupMemberList) - s.engine.Any("/get_group_member_list_async", s.GetGroupMemberList) - - s.engine.Any("/get_group_member_info", s.GetGroupMemberInfo) - s.engine.Any("/get_group_member_info_async", s.GetGroupMemberInfo) - - s.engine.Any("/send_msg", s.SendMessage) - s.engine.Any("/send_msg_async", s.SendMessage) - - s.engine.Any("/send_private_msg", s.SendPrivateMessage) - s.engine.Any("/send_private_msg_async", s.SendPrivateMessage) - - s.engine.Any("/send_group_msg", s.SendGroupMessage) - s.engine.Any("/send_group_msg_async", s.SendGroupMessage) - - s.engine.Any("/send_group_forward_msg", s.SendGroupForwardMessage) - s.engine.Any("/send_group_forward_msg_async", s.SendGroupForwardMessage) - - s.engine.Any("/delete_msg", s.DeleteMessage) - s.engine.Any("/delete_msg_async", s.DeleteMessage) - - s.engine.Any("/set_friend_add_request", s.ProcessFriendRequest) - s.engine.Any("/set_friend_add_request_async", s.ProcessFriendRequest) - - s.engine.Any("/set_group_add_request", s.ProcessGroupRequest) - s.engine.Any("/set_group_add_request_async", s.ProcessGroupRequest) - - s.engine.Any("/set_group_card", s.SetGroupCard) - s.engine.Any("/set_group_card_async", s.SetGroupCard) - - s.engine.Any("/set_group_special_title", s.SetSpecialTitle) - s.engine.Any("/set_group_special_title_async", s.SetSpecialTitle) - - s.engine.Any("/set_group_kick", s.SetGroupKick) - s.engine.Any("/set_group_kick_async", s.SetGroupKick) - - s.engine.Any("/set_group_ban", s.SetGroupBan) - s.engine.Any("/set_group_ban_async", s.SetGroupBan) - - s.engine.Any("/set_group_whole_ban", s.SetWholeBan) - s.engine.Any("/set_group_whole_ban_async", s.SetWholeBan) - - s.engine.Any("/set_group_name", s.SetGroupName) - s.engine.Any("/set_group_name_async", s.SetGroupName) - - s.engine.Any("/_send_group_notice", s.SendGroupNotice) - s.engine.Any("/_send_group_notice_async", s.SendGroupNotice) - - s.engine.Any("/set_group_leave", s.SetGroupLeave) - s.engine.Any("/set_group_leave_async", s.SetGroupLeave) - - s.engine.Any("/get_image", s.GetImage) - - s.engine.Any("/get_forward_msg", s.GetForwardMessage) - - s.engine.Any("/get_group_msg", s.GetGroupMessage) - - s.engine.Any("/get_group_honor_info", s.GetGroupHonorInfo) - - s.engine.Any("/can_send_image", s.CanSendImage) - s.engine.Any("/can_send_image_async", s.CanSendImage) - - s.engine.Any("/can_send_record", s.CanSendRecord) - s.engine.Any("/can_send_record_async", s.CanSendRecord) - - s.engine.Any("/get_status", s.GetStatus) - s.engine.Any("/get_status_async", s.GetStatus) - - s.engine.Any("/get_version_info", s.GetVersionInfo) - s.engine.Any("/get_version_info_async", s.GetVersionInfo) - - s.engine.Any("/_get_vip_info", s.GetVipInfo) - s.engine.Any("/_get_vip_info_async", s.GetVipInfo) - - s.engine.Any("/.handle_quick_operation", s.HandleQuickOperation) + s.engine.Any("/:action", s.HandleActions) go func() { log.Infof("CQ HTTP 服务器已启动: %v", addr) @@ -213,6 +128,17 @@ func (c *httpClient) onBotPushEvent(m coolq.MSG) { } } +func (s *httpServer) HandleActions(c *gin.Context) { + global.RateLimit(context.Background()) + action := strings.ReplaceAll(c.Param("action"), "_async", "") + log.Debugf("HTTPServer接收到API调用: %v", action) + if f, ok := httpApi[action]; ok { + f(s, c) + } else { + c.JSON(200, coolq.Failed(404)) + } +} + func (s *httpServer) GetLoginInfo(c *gin.Context) { c.JSON(200, s.bot.CQGetLoginInfo()) } @@ -455,3 +381,99 @@ func getParamWithType(c *gin.Context, k string) (string, gjson.Type) { } return "", gjson.Null } + +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) + }, + "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) + }, + "_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_group_msg": func(s *httpServer, c *gin.Context) { + s.GetGroupMessage(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) + }, + ".handle_quick_operation": func(s *httpServer, c *gin.Context) { + s.HandleQuickOperation(c) + }, +} diff --git a/server/websocket.go b/server/websocket.go index 1ac2401..54fb92a 100644 --- a/server/websocket.go +++ b/server/websocket.go @@ -1,6 +1,7 @@ package server import ( + "context" "fmt" "net/http" "strconv" @@ -319,7 +320,7 @@ func (c *websocketConn) handleRequest(bot *coolq.CQBot, payload []byte) { c.Close() } }() - + global.RateLimit(context.Background()) j := gjson.ParseBytes(payload) t := strings.ReplaceAll(j.Get("action").Str, "_async", "") log.Debugf("WS接收到API调用: %v 参数: %v", t, j.Get("params").Raw) From b1fccbc0a38ce00b293a2aa194d2019632332d16 Mon Sep 17 00:00:00 2001 From: Mrs4s <1844812067@qq.com> Date: Wed, 9 Sep 2020 17:55:50 +0800 Subject: [PATCH 65/70] update MiraiGo. fix #255 --- go.mod | 2 +- go.sum | 24 ++---------------------- 2 files changed, 3 insertions(+), 23 deletions(-) diff --git a/go.mod b/go.mod index 319ffc2..fddace2 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-20200906025848-23750bb59124 + github.com/Mrs4s/MiraiGo v0.0.0-20200909095006-dde8bded28d1 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 4a4dada..4fd90a3 100644 --- a/go.sum +++ b/go.sum @@ -1,24 +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-20200906025848-23750bb59124 h1:qqwuCK/U9wzVf4ZmlvXI2BC1+gBESNSUD5yNjTfoExQ= -github.com/Mrs4s/MiraiGo v0.0.0-20200906025848-23750bb59124/go.mod h1:TVEPCV9iayaBPTDLNGO9kc734jXNT/sxbhqo4IYkvko= +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/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= @@ -26,7 +23,6 @@ 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.3.0 h1:nZU+7q+yJoFmwvNgv/LnPUkwPal62+b2xXj0AU1Es7o= github.com/go-playground/validator/v10 v10.3.0/go.mod h1:uOYAAleCW8F/7oMFd6aG0GOhaH6EGOAJShg8Id5JGkI= @@ -34,7 +30,6 @@ github.com/golang/glog v0.0.0-20160126235308-23def4e6c14b/go.mod h1:SBH7ygxi8pfU 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= github.com/golang/protobuf v1.3.2/go.mod h1:6lQm79b+lXiMfvg/cZm0SGofjICqVBUtrP5yJMmIC1U= -github.com/golang/protobuf v1.3.3 h1:gyjaxf+svBWX08ZjK86iN9geUJF0H6gp2IRKX6Nf6/I= github.com/golang/protobuf v1.3.3/go.mod h1:vzj43D7+SQXF/4pzW/hwtAqwc6iTitCiVSaWz5lYuqw= github.com/golang/protobuf v1.4.0-rc.1/go.mod h1:ceaxUfeHdC40wWswd/P6IGgMaK3YpKi5j83Wpe3EHw8= github.com/golang/protobuf v1.4.0-rc.1.0.20200221234624-67d41d38c208/go.mod h1:xKAWHe0F5eneWXFV3EuXVDTCmh+JuBKY0li0aMyXATA= @@ -48,22 +43,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.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/konsorten/go-windows-terminal-sequences v1.0.3 h1:CE8S1cTafDpPvMhIxNJKvHsGVBgn1xWYf1NbHQhywc8= @@ -71,7 +61,6 @@ github.com/konsorten/go-windows-terminal-sequences v1.0.3/go.mod h1:T0+1ngSBFLxv 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.3.0+incompatible h1:4mNlp+/SvALIPFpbXV3kxNJJno9iKFWGxSDE13Kl66Q= github.com/lestrrat-go/file-rotatelogs v2.3.0+incompatible/go.mod h1:ZQnN8lSECaebrkQytbHj4xNgtg8CR7RYXnPok8e0EHA= @@ -81,17 +70,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 +89,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= @@ -139,7 +123,6 @@ golang.org/x/net v0.0.0-20180826012351-8a410e7b638d/go.mod h1:mL1N/T3taQHkDXs73r 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-20200904194848-62affa334b73 h1:MXfv8rhZWmFeqX3GNZRsd6vOLoaCHjYEX3qkRo3YBUA= golang.org/x/net v0.0.0-20200904194848-62affa334b73/go.mod h1:/O7V0waA8r7cgGh81Ro3o1hOxt32SMVPicZroKQ2sZA= @@ -166,7 +149,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= @@ -186,12 +168,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/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= From 8c63a420a3a8f40cba32dced589027d23f562d20 Mon Sep 17 00:00:00 2001 From: Mrs4s <1844812067@qq.com> Date: Wed, 9 Sep 2020 19:02:36 +0800 Subject: [PATCH 66/70] feature: set_group_admin. --- coolq/api.go | 20 ++++++++++++++++++++ go.mod | 2 +- go.sum | 2 ++ server/http.go | 9 +++++++++ server/websocket.go | 8 ++++++++ 5 files changed, 40 insertions(+), 1 deletion(-) diff --git a/coolq/api.go b/coolq/api.go index 0e255ad..f929289 100644 --- a/coolq/api.go +++ b/coolq/api.go @@ -404,6 +404,26 @@ func (bot *CQBot) CQDeleteMessage(messageId int32) MSG { return OK(nil) } +// 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 +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) + } + mem := group.FindMember(userId) + if mem == nil { + return Failed(100) + } + mem.SetAdmin(enable) + t, err := bot.Client.GetGroupMembers(group) + if err != nil { + log.Warnf("刷新群 %v 成员列表失败: %v", groupId, err) + return Failed(100) + } + group.Members = t + return OK(nil) +} + func (bot *CQBot) CQGetVipInfo(userId int64) MSG { msg := MSG{} vip, err := bot.Client.GetVipInfo(userId) diff --git a/go.mod b/go.mod index fddace2..deb1262 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-20200909095006-dde8bded28d1 + github.com/Mrs4s/MiraiGo v0.0.0-20200909103204-808a63a78efe 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 4fd90a3..8706704 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-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/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 aec1134..8ca0c29 100644 --- a/server/http.go +++ b/server/http.go @@ -282,6 +282,12 @@ func (s *httpServer) SetGroupName(c *gin.Context) { c.JSON(200, s.bot.CQSetGroupName(gid, getParam(c, "group_name"))) } +func (s *httpServer) SetGroupAdmin(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) { gid, _ := strconv.ParseInt(getParam(c, "group_id"), 10, 64) c.JSON(200, s.bot.CQSetGroupMemo(gid, getParam(c, "content"))) @@ -440,6 +446,9 @@ var httpApi = map[string]func(s *httpServer, c *gin.Context){ "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) }, diff --git a/server/websocket.go b/server/websocket.go index 54fb92a..eafe0a7 100644 --- a/server/websocket.go +++ b/server/websocket.go @@ -454,6 +454,14 @@ var wsApi = map[string]func(*coolq.CQBot, gjson.Result) coolq.MSG{ "set_group_name": func(bot *coolq.CQBot, p gjson.Result) coolq.MSG { return bot.CQSetGroupName(p.Get("group_id").Int(), p.Get("group_name").Str) }, + "set_group_admin": func(bot *coolq.CQBot, p gjson.Result) coolq.MSG { + return bot.CQSetGroupAdmin(p.Get("group_id").Int(), p.Get("user_id").Int(), func() bool { + if p.Get("enable").Exists() { + return p.Get("enable").Bool() + } + return true + }()) + }, "_send_group_notice": func(bot *coolq.CQBot, p gjson.Result) coolq.MSG { return bot.CQSetGroupMemo(p.Get("group_id").Int(), p.Get("content").Str) }, From e4a458e7c83b79abdf48cedd2a9deef798b787c0 Mon Sep 17 00:00:00 2001 From: Mrs4s Date: Thu, 10 Sep 2020 09:13:54 +0800 Subject: [PATCH 67/70] update MiraiGo. try to fix group list limit. --- go.mod | 2 +- go.sum | 2 ++ 2 files changed, 3 insertions(+), 1 deletion(-) diff --git a/go.mod b/go.mod index deb1262..7289b70 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-20200909103204-808a63a78efe + github.com/Mrs4s/MiraiGo v0.0.0-20200910010455-37409b1f6b9c 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 8706704..58cccc8 100644 --- a/go.sum +++ b/go.sum @@ -4,6 +4,8 @@ github.com/Mrs4s/MiraiGo v0.0.0-20200909095006-dde8bded28d1 h1:3cmUqA5RaikLx+59S 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/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 50ebfe476611f50404625d7fb306405cf6275eda Mon Sep 17 00:00:00 2001 From: Mrs4s Date: Thu, 10 Sep 2020 09:47:53 +0800 Subject: [PATCH 68/70] update MiraiGo. fix #253 --- go.mod | 2 +- go.sum | 2 ++ 2 files changed, 3 insertions(+), 1 deletion(-) diff --git a/go.mod b/go.mod index 7289b70..b71b7a8 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-20200910010455-37409b1f6b9c + github.com/Mrs4s/MiraiGo v0.0.0-20200910013944-236c0f629099 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 58cccc8..912714c 100644 --- a/go.sum +++ b/go.sum @@ -6,6 +6,8 @@ github.com/Mrs4s/MiraiGo v0.0.0-20200909103204-808a63a78efe h1:O2BW87BwpwZDsn7YF 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/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 faba3e042f2ffff5a39a577e8cd50c1cbb708c91 Mon Sep 17 00:00:00 2001 From: wdvxdr Date: Thu, 10 Sep 2020 19:28:20 +0800 Subject: [PATCH 69/70] Fix EventFilter & Add reload_event_filter MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit 修复憨批错误 --- coolq/api.go | 5 +++ coolq/bot.go | 2 +- global/filter.go | 94 +++++++++++++++++++-------------------------- go.mod | 4 +- go.sum | 4 ++ main.go | 2 + server/http.go | 7 ++++ server/websocket.go | 3 ++ 8 files changed, 63 insertions(+), 58 deletions(-) diff --git a/coolq/api.go b/coolq/api.go index f929289..486c069 100644 --- a/coolq/api.go +++ b/coolq/api.go @@ -627,6 +627,11 @@ func (bot *CQBot) CQCanSendRecord() MSG { return OK(MSG{"yes": true}) } +func (bot *CQBot) CQReloadEventFilter() MSG { + global.BootFilter() + return OK(nil) +} + func (bot *CQBot) CQGetStatus() MSG { return OK(MSG{ "app_initialized": true, diff --git a/coolq/bot.go b/coolq/bot.go index 12a96e8..063b94d 100644 --- a/coolq/bot.go +++ b/coolq/bot.go @@ -226,7 +226,7 @@ func (bot *CQBot) Release() { func (bot *CQBot) dispatchEventMessage(m MSG) { payload := gjson.Parse(m.ToJson()) - filter := global.GetFilter() + filter := global.EventFilter if filter != nil && (*filter).Eval(payload) == false { log.Debug("Event filtered!") return diff --git a/global/filter.go b/global/filter.go index e7fdad6..b2ac4cb 100644 --- a/global/filter.go +++ b/global/filter.go @@ -6,7 +6,6 @@ import ( "io/ioutil" "regexp" "strings" - "sync" ) type Filter interface { @@ -14,7 +13,7 @@ type Filter interface { } type OperationNode struct { - key string + key string filter Filter } @@ -24,15 +23,14 @@ type NotOperator struct { func notOperatorConstruct(argument gjson.Result) *NotOperator { if !argument.IsObject() { - log.Error("the argument of 'not' operator must be an object") + panic("the argument of 'not' operator must be an object") } op := new(NotOperator) - op.operand_ = GetOperatorFactory().Generate("and", argument) + op.operand_ = Generate("and", argument) return op } func (notOperator NotOperator) Eval(payload gjson.Result) bool { - log.Debug("not " + payload.Str) return !(notOperator.operand_).Eval(payload) } @@ -42,7 +40,7 @@ type AndOperator struct { func andOperatorConstruct(argument gjson.Result) *AndOperator { if !argument.IsObject() { - log.Error("the argument of 'and' operator must be an object") + panic("the argument of 'and' operator must be an object") } op := new(AndOperator) argument.ForEach(func(key, value gjson.Result) bool { @@ -52,19 +50,19 @@ func andOperatorConstruct(argument gjson.Result) *AndOperator { // "bar": "baz" // } opKey := key.Str[1:] - op.operands = append(op.operands, OperationNode{"", GetOperatorFactory().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.Str - op.operands = append(op.operands, OperationNode{opKey, GetOperatorFactory().Generate("and", value)}) + opKey := key.String() + 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.Str - op.operands = append(op.operands, OperationNode{opKey, GetOperatorFactory().Generate("eq", value)}) + opKey := key.String() + op.operands = append(op.operands, OperationNode{opKey, Generate("eq", value)}) } return true }) @@ -72,7 +70,6 @@ func andOperatorConstruct(argument gjson.Result) *AndOperator { } func (andOperator *AndOperator) Eval(payload gjson.Result) bool { - log.Debug("and " + payload.Str) res := true for _, operand := range andOperator.operands { @@ -98,19 +95,18 @@ type OrOperator struct { func orOperatorConstruct(argument gjson.Result) *OrOperator { if !argument.IsArray() { - log.Error("the argument of 'or' operator must be an array") + panic("the argument of 'or' operator must be an array") } op := new(OrOperator) argument.ForEach(func(_, value gjson.Result) bool { - op.operands = append(op.operands, GetOperatorFactory().Generate("and", value)) + op.operands = append(op.operands, Generate("and", value)) return true }) return op } func (orOperator OrOperator) Eval(payload gjson.Result) bool { - log.Debug("or "+ payload.Str) - res:= false + res := false for _, operand := range orOperator.operands { res = res || operand.Eval(payload) @@ -132,8 +128,7 @@ func equalOperatorConstruct(argument gjson.Result) *EqualOperator { } func (equalOperator EqualOperator) Eval(payload gjson.Result) bool { - log.Debug("eq "+ payload.Str + "==" + equalOperator.value.Str) - return payload.Str == equalOperator.value.Str + return payload.String() == equalOperator.value.String() } type NotEqualOperator struct { @@ -147,18 +142,16 @@ func notEqualOperatorConstruct(argument gjson.Result) *NotEqualOperator { } func (notEqualOperator NotEqualOperator) Eval(payload gjson.Result) bool { - log.Debug("neq " + payload.Str) - return !(payload.Str == notEqualOperator.value.Str) + return !(payload.String() == notEqualOperator.value.String()) } - type InOperator struct { operand gjson.Result } func inOperatorConstruct(argument gjson.Result) *InOperator { if argument.IsObject() { - log.Error("the argument of 'in' operator must be an array or a string") + panic("the argument of 'in' operator must be an array or a string") } op := new(InOperator) op.operand = argument @@ -166,16 +159,15 @@ func inOperatorConstruct(argument gjson.Result) *InOperator { } func (inOperator InOperator) Eval(payload gjson.Result) bool { - log.Debug("in " + payload.Str) if inOperator.operand.IsArray() { res := false inOperator.operand.ForEach(func(key, value gjson.Result) bool { - res = res || value.Str == payload.Str + res = res || value.String() == payload.String() return true }) return res } - return strings.Contains(inOperator.operand.Str, payload.Str) + return strings.Contains(inOperator.operand.String(), payload.String()) } type ContainsOperator struct { @@ -184,15 +176,14 @@ type ContainsOperator struct { func containsOperatorConstruct(argument gjson.Result) *ContainsOperator { if argument.IsArray() || argument.IsObject() { - log.Error("the argument of 'contains' operator must be a string") + panic("the argument of 'contains' operator must be a string") } op := new(ContainsOperator) - op.operand = argument.Str + op.operand = argument.String() return op } func (containsOperator ContainsOperator) Eval(payload gjson.Result) bool { - log.Debug("contains "+ payload.Str) if payload.IsObject() || payload.IsArray() { return false } @@ -205,29 +196,19 @@ type RegexOperator struct { func regexOperatorConstruct(argument gjson.Result) *RegexOperator { if argument.IsArray() || argument.IsObject() { - log.Error("the argument of 'regex' operator must be a string") + panic("the argument of 'regex' operator must be a string") } op := new(RegexOperator) - op.regex = argument.Str + op.regex = argument.String() return op } func (containsOperator RegexOperator) Eval(payload gjson.Result) bool { - log.Debug("regex " + payload.Str) - matched, _ := regexp.MatchString(containsOperator.regex, payload.Str) + matched, _ := regexp.MatchString(containsOperator.regex, payload.String()) return matched } -// 单例工厂 -type operatorFactory struct{ -} -var instance *operatorFactory = &operatorFactory{} - -func GetOperatorFactory() *operatorFactory { - return instance -} - -func (o operatorFactory) Generate(opName string, argument gjson.Result) Filter { +func Generate(opName string, argument gjson.Result) Filter { switch opName { case "not": return notOperatorConstruct(argument) @@ -246,22 +227,25 @@ func (o operatorFactory) Generate(opName string, argument gjson.Result) Filter { case "regex": return regexOperatorConstruct(argument) default: - log.Warnf("the operator '%s' is not supported", opName) - return nil + panic("the operator " + opName + " is not supported") } } -var filter = new(Filter) -var once sync.Once // 过滤器单例模式 +var EventFilter = new(Filter) -func GetFilter() *Filter { - once.Do(func() { - f, err := ioutil.ReadFile("filter.json") - if err != nil { - filter = nil +func BootFilter() { + defer func() { + if e := recover(); e != nil { + log.Warnf("事件过滤器启动失败: %v", e) + EventFilter = nil } else { - *filter = GetOperatorFactory().Generate("and", gjson.ParseBytes(f)) + log.Info("事件过滤器启动成功.") } - }) - return filter -} \ No newline at end of file + }() + f, err := ioutil.ReadFile("filter.json") + if err != nil { + panic(err) + } else { + *EventFilter = Generate("and", gjson.ParseBytes(f)) + } +} diff --git a/go.mod b/go.mod index b71b7a8..5a5723f 100644 --- a/go.mod +++ b/go.mod @@ -12,7 +12,7 @@ require ( 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.3.0+incompatible + 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 @@ -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-20200905004654-be1d3432aa8f // indirect + golang.org/x/sys v0.0.0-20200909081042-eff7692f9009 // 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 912714c..7d5ff26 100644 --- a/go.sum +++ b/go.sum @@ -70,6 +70,8 @@ github.com/leodido/go-urn v1.2.0/go.mod h1:+8+nEpDfqqsY+g338gtMEUOtuK+4dEMhiQEgx 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= 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= @@ -146,6 +148,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-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= 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= diff --git a/main.go b/main.go index 3aeaba6..307e630 100644 --- a/main.go +++ b/main.go @@ -280,6 +280,8 @@ func main() { for _, rc := range conf.ReverseServers { server.NewWebsocketClient(rc, conf.AccessToken, b).Run() } + log.Info("正在加载事件过滤器.") + global.BootFilter() log.Info("资源初始化完成, 开始处理信息.") log.Info("アトリは、高性能ですから!") cli.OnDisconnected(func(bot *client.QQClient, e *client.ClientDisconnectedEvent) { diff --git a/server/http.go b/server/http.go index 8ca0c29..9b10904 100644 --- a/server/http.go +++ b/server/http.go @@ -324,6 +324,10 @@ func (s *httpServer) GetVersionInfo(c *gin.Context) { c.JSON(200, s.bot.CQGetVersionInfo()) } +func (s *httpServer) ReloadEventFilter(c *gin.Context) { + c.JSON(200, s.bot.CQReloadEventFilter()) +} + func (s *httpServer) GetVipInfo(c *gin.Context) { uid, _ := strconv.ParseInt(getParam(c, "user_id"), 10, 64) c.JSON(200, s.bot.CQGetVipInfo(uid)) @@ -482,6 +486,9 @@ var httpApi = map[string]func(s *httpServer, c *gin.Context){ "_get_vip_info": func(s *httpServer, c *gin.Context) { s.GetVipInfo(c) }, + "reload_event_filter": func(s *httpServer, c *gin.Context) { + s.ReloadEventFilter(c) + }, ".handle_quick_operation": func(s *httpServer, c *gin.Context) { s.HandleQuickOperation(c) }, diff --git a/server/websocket.go b/server/websocket.go index eafe0a7..ecad98a 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_vip_info": func(bot *coolq.CQBot, p gjson.Result) coolq.MSG { return bot.CQGetVipInfo(p.Get("user_id").Int()) }, + "reload_event_filter": func(bot *coolq.CQBot, p gjson.Result) coolq.MSG { + return bot.CQReloadEventFilter() + }, ".handle_quick_operation": func(bot *coolq.CQBot, p gjson.Result) coolq.MSG { return bot.CQHandleQuickOperation(p.Get("context"), p.Get("operation")) }, From 0cfaa4c7ad2b11873bc04f71416436d464081e02 Mon Sep 17 00:00:00 2001 From: wdvxdr Date: Thu, 10 Sep 2020 20:56:38 +0800 Subject: [PATCH 70/70] fix bug MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit 修复当无法连接WS时未初始化EventFilter的bug --- main.go | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/main.go b/main.go index 307e630..b8a8271 100644 --- a/main.go +++ b/main.go @@ -266,6 +266,8 @@ func main() { 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 { @@ -280,8 +282,6 @@ func main() { for _, rc := range conf.ReverseServers { server.NewWebsocketClient(rc, conf.AccessToken, b).Run() } - log.Info("正在加载事件过滤器.") - global.BootFilter() log.Info("资源初始化完成, 开始处理信息.") log.Info("アトリは、高性能ですから!") cli.OnDisconnected(func(bot *client.QQClient, e *client.ClientDisconnectedEvent) {