Mrs4s / go-cqhttp

cqhttp的golang实现,轻量、原生跨平台.
GNU Affero General Public License v3.0
10.38k stars 1.63k forks source link

[Bug]: QQ频道发送消息报错(概率性) #2329

Closed MRDHR closed 1 year ago

MRDHR commented 1 year ago

请确保您已阅读以上注意事项,并勾选下方的确认框。

go-cqhttp 版本

1.1.0

运行环境

Ubuntu

运行架构

AMD64

连接方式

WebSocket (反向)

使用协议

1 | Android Phone

重现步骤

bot.send_guild_channel_msg(guild_id=guildChannelId[0], channel_id=guildChannelId[1],message="测试消息")

期望的结果是什么?

发送成功,不会出现错误

实际的结果是什么?

发送QQ频道消息报错

简单的复现代码/链接(可选)

No response

日志记录(可选)

处置WS命令时发生无法恢复的异常:runtime error: invalid memory address or nil pointer dereference
07-27 16:48:49 [STDOUT] nonebot_plugin_gocqhttp | [QQ号] goroutine 339 [running]:
07-27 16:48:49 [STDOUT] nonebot_plugin_gocqhttp | [QQ号] runtime/debug.Stack()
07-27 16:48:49 [STDOUT] nonebot_plugin_gocqhttp | [QQ号] runtime/debug/stack.go:24 +0x65
07-27 16:48:49 [STDOUT] nonebot_plugin_gocqhttp | [QQ号] github.com/Mrs4s/go-cqhttp/server.(*wsConn).handleRequest.func1()
07-27 16:48:49 [STDOUT] nonebot_plugin_gocqhttp | [QQ号] github.com/Mrs4s/go-cqhttp/server/websocket.go:471 +0x46
07-27 16:48:49 [STDOUT] nonebot_plugin_gocqhttp | [QQ号] panic({0xa40cc0, 0xf82ea0})
07-27 16:48:49 [STDOUT] nonebot_plugin_gocqhttp | [QQ号] runtime/panic.go:884 +0x213
07-27 16:48:49 [STDOUT] nonebot_plugin_gocqhttp | [QQ号] github.com/Mrs4s/MiraiGo/client.(*GuildService).SendGuildChannelMessage(0xc0005abb30, 0x85d9393746a5d6, 0xbd801e, 0xc0002959a0)
07-27 16:48:49 [STDOUT] nonebot_plugin_gocqhttp | [QQ号] github.com/Mrs4s/MiraiGo@v0.0.0-20230627090859-19e3d172596e/client/guild_msg.go:69 +0x47d
07-27 16:48:49 [STDOUT] nonebot_plugin_gocqhttp | [QQ号] github.com/Mrs4s/go-cqhttp/coolq.(*CQBot).SendGuildChannelMessage(0xc00011a000, 0x2?, 0x3bb?, 0xc0002959a0)
07-27 16:48:49 [STDOUT] nonebot_plugin_gocqhttp | [QQ号] github.com/Mrs4s/go-cqhttp/coolq/bot.go:437 +0x371
07-27 16:48:49 [STDOUT] nonebot_plugin_gocqhttp | [QQ号] github.com/Mrs4s/go-cqhttp/coolq.(*CQBot).CQSendGuildChannelMessage(0xc00011a000, 0x85d9393746a5d6, 0xbd801e, {0x5, {0xc0006e2076, 0x3bb}, {0x0, 0x0}, 0x0, 0x76, ...}, ...)
07-27 16:48:49 [STDOUT] nonebot_plugin_gocqhttp | [QQ号] github.com/Mrs4s/go-cqhttp/coolq/api.go:826 +0x5ce
07-27 16:48:49 [STDOUT] nonebot_plugin_gocqhttp | [QQ号] github.com/Mrs4s/go-cqhttp/modules/api.(*Caller).call(0xc000305da0, {0xc0006e200c, 0x16?}, 0xf84ce0, {0xbece00, 0xc000076230})
07-27 16:48:49 [STDOUT] nonebot_plugin_gocqhttp | [QQ号] github.com/Mrs4s/go-cqhttp/modules/api/api.go:264 +0xadcd
07-27 16:48:49 [STDOUT] nonebot_plugin_gocqhttp | [QQ号] github.com/Mrs4s/go-cqhttp/modules/api.(*Caller).Call(0xc000305da0, {0xc0006e200c, 0x16}, 0xc0006e2000?, {0xbece00, 0xc000076230})07-27 16:48:49 [STDOUT] nonebot_plugin_gocqhttp | [QQ号] github.com/Mrs4s/go-cqhttp/modules/api/caller.go:35 +0xc5
07-27 16:48:49 [STDOUT] nonebot_plugin_gocqhttp | [QQ号] github.com/Mrs4s/go-cqhttp/server.(*wsConn).handleRequest(0xc0005eaa98, 0xa5f4c0?, {0xc0006e2000?, 0xc000499f38?, 0xc000499fd0?})
07-27 16:48:49 [STDOUT] nonebot_plugin_gocqhttp | [QQ号] github.com/Mrs4s/go-cqhttp/server/websocket.go:480 +0x41c
07-27 16:48:49 [STDOUT] nonebot_plugin_gocqhttp | [QQ号] github.com/Mrs4s/go-cqhttp/server.(*websocketClient).listenAPI.func2(0xc000499fb8?)
07-27 16:48:49 [STDOUT] nonebot_plugin_gocqhttp | [QQ号] github.com/Mrs4s/go-cqhttp/server/websocket.go:325 +0x95
07-27 16:48:49 [STDOUT] nonebot_plugin_gocqhttp | [QQ号] created by github.com/Mrs4s/go-cqhttp/server.(*websocketClient).listenAPI
07-27 16:48:49 [STDOUT] nonebot_plugin_gocqhttp | [QQ号] github.com/Mrs4s/go-cqhttp/server/websocket.go:323 +0x1b2
07-27 16:48:49 [STDOUT] nonebot_plugin_gocqhttp | [QQ号] 
07-27 16:48:49 [WARNING] nonebot_plugin_gocqhttp | [QQ号] 监听反向WS Universal时出现错误: read tcp 127.0.0.1:33716->127.0.0.1:17130: use of closed network connection

补充说明(可选)

No response

hnuuhc commented 1 year ago

实测是频道消息被风控,出现这个异常就代表该消息别人看不到

MRDHR commented 1 year ago

实测是频道消息被风控,出现这个异常就代表该消息别人看不到

那有什么办法可以捕获这个异常或者解决这个风控么?

当出现这个异常的时候,bot会重连。我是做了一个定时任务的,当bot上线之后会自动执行。现在是反复重连 定时任务就又重新开始了 反复循环。

MRDHR commented 1 year ago

我尝试过try,只能输出日志。无法阻止bot重连的过程。

我也使用过定时任务那个插件,不太好用。我的任务(可能超过一分钟)需要执行完后再延迟1分钟重复执行,无法简单的使用定时任务去执行。

Mubanjun commented 1 year ago

先尝试换个签名服务器?或者删掉device.json生成个新的?

重要:请上传go-cqhttp完整日志.log文档来帮助我们判断问题,并且删掉隐私信息

如果正在使用WSL(适用于Linux的Windows子系统),请更新WSL至2.0,并在控制面板放通防火墙,并修改Host文件

如果正在使用原生(直接装在机器上的)Ubuntu,请尝试自行修改Host文件,并监视系统异常

如果正在使用腾讯云的服务器,请放通相应端口,或者干脆只留DDos等必要防护,并且检查私有网络配置

看上去是内存异常呢,可以尝试扩大一些Swap分区大小(至少为本机物理内存的两倍),或者尝试监视系统,观察是否有异常进程过度消耗内存,不排除中毒的可能性

最后补充,关于频道模块,开发者初心就是抛弃不维护,如果正常聊天没有同样的毛病就先正常用吧

hnuuhc commented 1 year ago

我尝试过try,只能输出日志。无法阻止bot重连的过程。

我也使用过定时任务那个插件,不太好用。我的任务(可能超过一分钟)需要执行完后再延迟1分钟重复执行,无法简单的使用定时任务去执行。

就是单纯的被风控了,经常出现这个异常,应该立刻停止发消息,否则会越来越频繁,你可以尝试登陆电脑在频道发消息,自己是看着正常发送,别人是看不到的,这是账号级别的风控,

MRDHR commented 1 year ago

我尝试过try,只能输出日志。无法阻止bot重连的过程。 我也使用过定时任务那个插件,不太好用。我的任务(可能超过一分钟)需要执行完后再延迟1分钟重复执行,无法简单的使用定时任务去执行。

就是单纯的被风控了,经常出现这个异常,应该立刻停止发消息,否则会越来越频繁,你可以尝试登陆电脑在频道发消息,自己是看着正常发送,别人是看不到的,这是账号级别的风控,

尝试登录了,QQ频道居然成了只读模式。主QQ号正常

MRDHR commented 1 year ago

谢谢大佬们的提醒