diff --git a/.github/workflows/ci.yml b/.github/workflows/ci.yml index 984a8f6..1718858 100644 --- a/.github/workflows/ci.yml +++ b/.github/workflows/ci.yml @@ -14,14 +14,12 @@ jobs: runs-on: ubuntu-latest strategy: matrix: - # build and publish in parallel: linux/386, linux/amd64, windows/386, windows/amd64, darwin/amd64 + # build and publish in parallel: linux/386, linux/amd64, windows/386, windows/amd64, darwin/amd64, darwin/arm64 goos: [linux, windows, darwin] goarch: ["386", amd64, arm, arm64] exclude: - goos: darwin goarch: arm - - goos: darwin - goarch: arm64 - goos: darwin goarch: "386" - goos: windows @@ -32,7 +30,7 @@ jobs: - name: Setup Go environment uses: actions/setup-go@v2.1.3 with: - go-version: 1.15 + go-version: 1.16 - name: Build binary file env: GOOS: ${{ matrix.goos }} diff --git a/.github/workflows/release.yml b/.github/workflows/release.yml index 589d51a..e59aa90 100644 --- a/.github/workflows/release.yml +++ b/.github/workflows/release.yml @@ -8,14 +8,12 @@ jobs: runs-on: ubuntu-latest strategy: matrix: - # build and publish in parallel: linux/386, linux/amd64, windows/386, windows/amd64, darwin/386, darwin/amd64 + # build and publish in parallel: linux/386, linux/amd64, windows/386, windows/amd64, darwin/386, darwin/amd64, darwin/arm64 goos: [linux, windows, darwin] goarch: ["386", amd64, arm, arm64] exclude: - goos: darwin goarch: arm - - goos: darwin - goarch: arm64 - goos: darwin goarch: "386" - goos: windows @@ -32,6 +30,6 @@ jobs: github_token: ${{ secrets.GITHUB_TOKEN }} goos: ${{ matrix.goos }} goarch: ${{ matrix.goarch }} - goversion: "https://golang.org/dl/go1.15.3.linux-amd64.tar.gz" + goversion: "https://golang.org/dl/go1.16.linux-amd64.tar.gz" ldflags: -w -s -X "github.com/Mrs4s/go-cqhttp/coolq.Version=${{ env.RELEASE_VERSION }}" diff --git a/coolq/api.go b/coolq/api.go index 607e71a..71ef9a2 100644 --- a/coolq/api.go +++ b/coolq/api.go @@ -1252,6 +1252,10 @@ func (bot *CQBot) CQCheckURLSafely(url string) MSG { func (bot *CQBot) CQGetVersionInfo() MSG { wd, _ := os.Getwd() return OK(MSG{ + "app_name": "go-cqhttp", + "app_version": Version, + "app_full_name": fmt.Sprintf("go-cqhttp-%s_%s_%s-%s", Version, runtime.GOOS, runtime.GOARCH, runtime.Version()), + "protocol_version": "v11", "coolq_directory": wd, "coolq_edition": "pro", "go-cqhttp": true, diff --git a/coolq/bot.go b/coolq/bot.go index da884ab..f01727c 100644 --- a/coolq/bot.go +++ b/coolq/bot.go @@ -420,7 +420,21 @@ func (bot *CQBot) formatGroupMessage(m *message.GroupMessage) MSG { gm["sender"].(MSG)["nickname"] = "匿名消息" gm["sub_type"] = "anonymous" } else { - mem := bot.Client.FindGroup(m.GroupCode).FindMember(m.Sender.Uin) + group := bot.Client.FindGroup(m.GroupCode) + mem := group.FindMember(m.Sender.Uin) + if mem == nil{ + log.Warnf("获取 %v 成员信息失败,尝试刷新成员列表", m.Sender.Uin) + t, err := bot.Client.GetGroupMembers(group) + if err != nil { + log.Warnf("刷新群 %v 成员列表失败: %v", group.Uin, err) + return Failed(100, "GET_MEMBERS_API_ERROR", err.Error()) + } + group.Members = t + mem = group.FindMember(m.Sender.Uin) + if mem != nil{ + return Failed(100,"MEMBER_NOT_FOUND","群员不存在") + } + } ms := gm["sender"].(MSG) ms["role"] = func() string { switch mem.Permission { diff --git a/global/codec/codec.go b/global/codec/codec.go index d37b683..8b3c4fc 100644 --- a/global/codec/codec.go +++ b/global/codec/codec.go @@ -1,4 +1,4 @@ -// +build linux windows,!arm darwin +// +build linux windows,!arm darwin,!arm64 // +build 386 amd64 arm arm64 // Package codec Slik编码核心模块 diff --git a/global/codec/codec_darwin_arm64.go b/global/codec/codec_darwin_arm64.go new file mode 100644 index 0000000..0712cf6 --- /dev/null +++ b/global/codec/codec_darwin_arm64.go @@ -0,0 +1,8 @@ +package codec + +import "github.com/pkg/errors" + +//EncodeToSilk 将音频编码为Silk +func EncodeToSilk(record []byte, tempName string, useCache bool) ([]byte, error) { + return nil, errors.New("not supported now") +} diff --git a/global/codec/codec__windows_arm.go b/global/codec/codec_windows_arm.go similarity index 100% rename from global/codec/codec__windows_arm.go rename to global/codec/codec_windows_arm.go diff --git a/go.mod b/go.mod index 45acf79..c170291 100644 --- a/go.mod +++ b/go.mod @@ -1,9 +1,9 @@ module github.com/Mrs4s/go-cqhttp -go 1.15 +go 1.16 require ( - github.com/Mrs4s/MiraiGo v0.0.0-20210206134348-800bf525ed0e + github.com/Mrs4s/MiraiGo v0.0.0-20210219090120-c4288bd213f3 github.com/dustin/go-humanize v1.0.0 github.com/gin-contrib/pprof v1.3.0 github.com/gin-gonic/gin v1.6.3 diff --git a/go.sum b/go.sum index cea2100..e310669 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-20210206134348-800bf525ed0e h1:SnN+nyRdqN7sULnHUWCofP+Jxs3VJN/y8AlMpcz0nbk= github.com/Mrs4s/MiraiGo v0.0.0-20210206134348-800bf525ed0e/go.mod h1:yhqA0NyKxUf7I/0HR/1OMchveFggX8wde04gqdGrNfU= +github.com/Mrs4s/MiraiGo v0.0.0-20210219090120-c4288bd213f3 h1:hsO/cT00Nxyi5FrnXImimBlcHKrdFh8yWEwp0OR88z8= +github.com/Mrs4s/MiraiGo v0.0.0-20210219090120-c4288bd213f3/go.mod h1:yhqA0NyKxUf7I/0HR/1OMchveFggX8wde04gqdGrNfU= github.com/census-instrumentation/opencensus-proto v0.2.1/go.mod h1:f6KPmirojxKA12rnyqOA5BBL4O983OfeGPqjHWSTneU= github.com/client9/misspell v0.3.4/go.mod h1:qj6jICC3Q7zFZvVWo7KLAzC3yx5G7kyvSDkc90ppPyw= github.com/davecgh/go-spew v1.1.0/go.mod h1:J7Y8YcW2NihsgmVo/mv3lAwl/skON4iLHjSsI+c5H38= diff --git a/server/apiAdmin.go b/server/apiAdmin.go index 0ec1b7f..be62817 100644 --- a/server/apiAdmin.go +++ b/server/apiAdmin.go @@ -148,7 +148,6 @@ func (s *webServer) logincore(relogin bool) { } else if err == client.ErrAlreadyOnline { break } - log.Error("登录遇到错误: " + err.Error()) switch res.Error { case client.SliderNeededError: @@ -157,12 +156,22 @@ func (s *webServer) logincore(relogin bool) { log.Warnf("2. 使用Cef自动处理.") log.Warnf("3. 不提交滑块并继续.(可能会导致上网环境异常错误)") log.Warnf("详细信息请参考文档 -> https://github.com/Mrs4s/go-cqhttp/blob/master/docs/slider.md <-") - log.Warn("请输入(1 - 3): ") - text = readLine() + if s.Conf.WebUI != nil && s.Conf.WebUI.WebInput { + log.Warnf("请输入(1 - 3): (http://%s:%d/admin/do_web_write 输入)", s.Conf.WebUI.Host, s.Conf.WebUI.WebUIPort) + text = <-WebInput + } else { + log.Warn("请输入(1 - 3):") + text = readLine() + } if strings.Contains(text, "1") { log.Warnf("请用浏览器打开 -> %v <- 并获取Ticket.", res.VerifyUrl) - log.Warn("请输入Ticket: (Enter 提交)") - text = readLine() + if s.Conf.WebUI != nil && s.Conf.WebUI.WebInput { + log.Warnf("请输入Ticket: (http://%s:%d/admin/do_web_write 输入)", s.Conf.WebUI.Host, s.Conf.WebUI.WebUIPort) + text = <-WebInput + } else { + log.Warn("请输入Ticket: (Enter 提交)") + text = readLine() + } res, err = s.Cli.SubmitTicket(strings.TrimSpace(text)) goto Again } @@ -199,31 +208,50 @@ func (s *webServer) logincore(relogin bool) { res, err = s.Cli.SubmitCaptcha(strings.ReplaceAll(text, "\n", ""), res.CaptchaSign) goto Again case client.SMSNeededError: - log.Warnf("账号已开启设备锁, 按下 Enter 向手机 %v 发送短信验证码.", res.SMSPhone) - readLine() + if s.Conf.WebUI != nil && s.Conf.WebUI.WebInput { + log.Warnf("账号已开启设备锁, 已向手机 %v 发送短信验证码.", res.SMSPhone) + } else { + log.Warnf("账号已开启设备锁, 按下 Enter 向手机 %v 发送短信验证码.", res.SMSPhone) + readLine() + } if !s.Cli.RequestSMS() { log.Warnf("发送验证码失败,可能是请求过于频繁.") time.Sleep(time.Second * 5) continue } - log.Warn("请输入短信验证码: (Enter 提交)") - text = readLine() + if s.Conf.WebUI != nil && s.Conf.WebUI.WebInput { + log.Warnf("请输入短信验证码: (http://%s:%d/admin/do_web_write 输入)", s.Conf.WebUI.Host, s.Conf.WebUI.WebUIPort) + text = <-WebInput + } else { + log.Warn("请输入短信验证码: (Enter 提交)") + text = readLine() + } res, err = s.Cli.SubmitSMS(strings.ReplaceAll(strings.ReplaceAll(text, "\n", ""), "\r", "")) goto Again case client.SMSOrVerifyNeededError: log.Warnf("账号已开启设备锁,请选择验证方式:") log.Warnf("1. 向手机 %v 发送短信验证码", res.SMSPhone) log.Warnf("2. 使用手机QQ扫码验证.") - log.Warn("请输入(1 - 2): ") - text = readLine() + if s.Conf.WebUI != nil && s.Conf.WebUI.WebInput { + log.Warnf("请输入(1 - 2): (http://%s:%d/admin/do_web_write 输入)", s.Conf.WebUI.Host, s.Conf.WebUI.WebUIPort) + text = <-WebInput + } else { + log.Warn("请输入(1 - 2):") + text = readLine() + } if strings.Contains(text, "1") { if !s.Cli.RequestSMS() { log.Warnf("发送验证码失败,可能是请求过于频繁.") time.Sleep(time.Second * 5) os.Exit(0) } - log.Warn("请输入短信验证码: (Enter 提交)") - text = readLine() + if s.Conf.WebUI != nil && s.Conf.WebUI.WebInput { + log.Warnf("请输入短信验证码: (http://%s:%d/admin/do_web_write 输入)....", s.Conf.WebUI.Host, s.Conf.WebUI.WebUIPort) + text = <-WebInput + } else { + log.Warn("请输入短信验证码: (Enter 提交)") + text = readLine() + } res, err = s.Cli.SubmitSMS(strings.ReplaceAll(strings.ReplaceAll(text, "\n", ""), "\r", "")) goto Again }