whitechi73 / OpenShamrock

A Bot Framework based on Lsposed with OneBot11(停止维护/禁用于违法用途)
https://whitechi73.github.io/OpenShamrock
GNU General Public License v3.0
1.41k stars 185 forks source link

Bug:使用被动WebSocket时,调用频道相关接口没有回复 #223

Closed MoRanYue closed 7 months ago

MoRanYue commented 7 months ago

警告: 在进一步操作之前,请检查下列选项。如果您忽视此模板或者没有提供关键信息,您的 Issue 将直接被关闭

描述 Bug

使用被动WebSocket时,调用频道相关接口没有回复。

OpenShamrock日志:

[16:47:09] INFO 群消息 (group = BotTest (xxx), uin = 2627706725, id = xxx, seq = 3458, msg = 621267883988015100)
[16:47:12] DEBUG ReceivePacket (cmd = trpc.msg.olpush.OlPushService.MsgPush)
[16:47:12] INFO 群消息 (group = BotTest (xxx), uin = 2627706725, id = xxx, seq = 3459, msg = .testapi get_guild_channel_list {"guild_id": 621267883988015100, "refresh": true})
[16:47:12] DEBUG ReceivePacket [818144588](cmd = OidbSvc.0x480_9_IMCore, seq = 89326)
[16:47:13] DEBUG ReceivePacket [290112411](cmd = TianShu.UserActionMultiReport, seq = 89327)
[16:47:19] DEBUG WebSocketClient 心跳: xxx
[16:47:34] DEBUG WebSocketClient 心跳: xxx

Bot后端日志:

[2024年02月05日 16:47:14.050][调试] [反向 WebSocket @ 0.0.0.0:3007] 接收到“192.168.40.88:40504”的事件上报
[2024年02月05日 16:47:14.050][调试] [反向 WebSocket @ 0.0.0.0:3007] 类型:消息(Message)
[2024年02月05日 16:47:14.050][调试] [反向 WebSocket @ 0.0.0.0:3007] {"time":1707122832,"self_id":xxx,"post_type":"message","message_type":"group","sub_type":"normal","message_id":2048459502,"group_id":xxx,"peer_id":xxx,"user_id":2627706725,"message":[{"data":{"text":".testapi get_guild_channel_list {\"guild_id\": 621267883988015100, \"refresh\": true}"},"type":"text"}],"raw_message":".testapi get_guild_channel_list {\"guild_id\": 621267883988015100, \"refresh\": true}","font":0,"sender":{"user_id":2627706725,"nickname":"owner","card":"owner","role":"owner","title":"","level":""}}
[2024年02月05日 16:47:14.050][信息] [内置插件] 接收到消息:.testapi get_guild_channel_list {"guild_id": 621267883988015100, "refresh": true}(2048459502) 来自群聊:BotTest(xxx) 发送者:xxx
[2024年02月05日 16:47:14.050][信息] [内置插件] 接收到命令:.testapi get_guild_channel_list {"guild_id": 621267883988015100, "refresh": true}(2048459502) 来自群聊:BotTest(xxx) 发送者:xxx
[2024年02月05日 16:47:14.050][调试] [调试器] 正在调用接口:get_guild_channel_list
[2024年02月05日 16:47:14.050][调试] [调试器] 数据:{"guild_id": 621267883988015100, "refresh": true}
[2024年02月05日 16:47:24.058][错误] 错误:动作请求失败: 动作:get_guild_channel_list 原因:动作超时
调用堆栈:
Error: 动作请求失败: 动作:get_guild_channel_list 原因:动作超时
    at Timeout._onTimeout (H:\HTMLCODE\MomoonBot\dist\src\connections\ReverseWsClient.js:61:27)
    at listOnTimeout (node:internal/timers:573:17)
    at process.processTimers (node:internal/timers:514:7)

复现 Bug

向OpenShamrock通过被动WebSocket,调用诸如get_guild_channel_list get_guild_roles get_guild_member_list等动作。

系统信息

whitechi73 commented 7 months ago

请求示例

{
  "action": "get_guild_channel_list",
  "params": {
    "guild_id": 652778324010301988,
    "refresh": true
  },
  "echo": 111
}

无法复现!

whitechi73 commented 7 months ago

请提供QQ版本,或者查看错误日志

MoRanYue commented 7 months ago

这里正在使用8.9.83版本呀

whitechi73 commented 7 months ago

该API是在QQ 9.0.15 测试实现,低版本不知道。

MoRanYue commented 7 months ago

该API是在QQ 9.0.15 测试实现,低版本不知道。

(这个版本,亦支持频道功能呀 emm,考虑到大版本的架构更改,应该,会有一些不同)

emmmm,OpenShamrock,即使在调试模式下,亦没有任何异常抛出呀

而且,这里可以使用get_guild_list接口呀

whitechi73 commented 7 months ago

该API是在QQ 9.0.15 测试实现,低版本不知道。

(这个版本,亦支持频道功能呀 emm,考虑到大版本的架构更改,应该,会有一些不同)

emmmm,OpenShamrock,即使在调试模式下,亦没有任何异常抛出呀

而且,这里可以使用get_guild_list接口呀

可能API不一样?Guild功能现在还在重做,腾讯还在摇摆。

whitechi73 commented 7 months ago
    fun getGuildList(refresh: Boolean = false, forceOldApi: Boolean): ArrayList<GuildInfo> {
        val kernelGProService = NTServiceFetcher.kernelService.wrapperSession.guildService
        if (refresh) {
            kernelGProService.refreshGuildList(true)
            kernelGProService.guildListFromCache.forEach {
                refreshGuildInfo(it.guildId.toULong())
            }
        }
        val result = arrayListOf<GuildInfo>()
        if (PlatformUtils.getQQVersionCode() < PlatformUtils.QQ_9_0_8_VER || forceOldApi) {
            getGuildListByOldApi(result)
        } else {
            runCatching {
                getGuildListByNt(result)
            }.onFailure {
                LogCenter.log("GetGuildListByNt failed: ${it.stackTraceToString()}", Level.ERROR)
                getGuildListByOldApi(result) // 防止QQ更新API导致无法获取
            }
        }

        return result
    }

获取频道列表有一个容错代码。

MoRanYue commented 7 months ago

该API是在QQ 9.0.15 测试实现,低版本不知道。

(这个版本,亦支持频道功能呀 emm,考虑到大版本的架构更改,应该,会有一些不同)

emmmm,OpenShamrock,即使在调试模式下,亦没有任何异常抛出呀

而且,这里可以使用get_guild_list接口呀

可能API不一样?Guild功能现在还在重做,腾讯还在摇摆。

那…… 好吧,若频道功能还在重制,还是等到稳定版,再来解决此提议吧。

whitechi73 commented 6 months ago

get_guild_member_list: fixed