MrXiaoM / Overflow

替换 mirai 实现为 Onebot 以进行无缝迁移
https://mirai.mrxiaom.top
GNU Affero General Public License v3.0
330 stars 25 forks source link

正向连接到napcat会断开连接 #94

Closed dokurorz closed 1 month ago

dokurorz commented 1 month ago

问题描述

napcat版本2.4.4,系统为Debian 11.9 (5.10.209-2),overflow正向连接到napcat,会断开连接,overflow报错如下,napcat内无日志

2024-09-11 14:47:29 I/Onebot: Overflow v2.16.0-795845b-SNAPSHOT 正在运行
2024-09-11 14:47:29 I/Onebot: 连接到 WebSocket: ws://172.18.0.1:3001
2024-09-11 14:47:29 I/Onebot: ▌ 已连接到服务器 ┈━═☆
2024-09-11 14:47:29 E/top.mrxiaom.overflow.internal.deps.websocket.drafts.Draft_6455: Runtime exception during onWebsocketMessage
java.lang.UnsupportedOperationException: JsonNull
        at top.mrxiaom.overflow.internal.deps.gson.JsonElement.getAsString(JsonElement.java:187)
        at cn.evole.onebot.sdk.util.json.JsonsObject.optString(JsonsObject.java:68)
        at cn.evole.onebot.sdk.util.json.JsonsObject.optString(JsonsObject.java:64)
        at cn.evolvefield.onebot.client.handler.ActionHandler.onReceiveActionResp(ActionHandler.kt:36)
        at cn.evolvefield.onebot.client.connection.WSClient.onMessage(WSClient.kt:61)
        at top.mrxiaom.overflow.internal.deps.websocket.client.WebSocketClient.onWebsocketMessage(WebSocketClient.java:636)
        at top.mrxiaom.overflow.internal.deps.websocket.drafts.Draft_6455.processFrameText(Draft_6455.java:986)
        at top.mrxiaom.overflow.internal.deps.websocket.drafts.Draft_6455.processFrame(Draft_6455.java:910)
        at top.mrxiaom.overflow.internal.deps.websocket.WebSocketImpl.decodeFrames(WebSocketImpl.java:402)
        at top.mrxiaom.overflow.internal.deps.websocket.WebSocketImpl.decode(WebSocketImpl.java:241)
        at top.mrxiaom.overflow.internal.deps.websocket.client.WebSocketClient.run(WebSocketClient.java:516)
        at java.base/java.lang.Thread.run(Thread.java:829)

2024-09-11 14:47:29 E/Onebot: ▌ 出现错误 JsonNull 或未连接 ┈━═☆
2024-09-11 14:47:29 I/Onebot: ▌ 服务器连接因 未知原因 已关闭 (关闭码: NORMAL)
2024-09-11 14:47:39 W/Onebot: Request failed: [get_version_info, echo=0] Mutex is not locked
2024-09-11 14:47:39 E/Onebot: 未连接到 Onebot

尝试了反向连接,没有问题

2024-09-11 15:15:58 I/Onebot: Overflow v2.16.0-795845b-SNAPSHOT 正在运行
2024-09-11 15:15:58 I/Onebot: 在端口 3003 开启反向 WebSocket 服务端
2024-09-11 15:15:58 I/Onebot: ▌ 反向 WebSocket 服务端已在 0.0.0.0/0.0.0.0:3003 启动
2024-09-11 15:15:58 I/Onebot: ▌ 正在等待客户端连接...
2024-09-11 15:19:00 I/Onebot: ▌ 反向 WebSocket 客户端 /172.18.0.2:42920 已连接 ┈━═☆
2024-09-11 15:19:00 I/Onebot: 服务端版本信息
{
  "status": "ok",
  "retcode": 0,
  "data": {
    "app_name": "NapCat.Onebot",
    "protocol_version": "v11",
    "app_version": "2.4.4"
  },
  "message": "",
  "wording": "",
  "echo": 0
}
2024-09-11 15:19:01 V/Bot.114514: Event: BotOnlineEvent(bot=Bot(114514))

napcat 1.8.6版本正向连接正常

复现

napcat正向连接配置

{
...
...
"ws": {
    "enable": true,
    "host": "0.0.0.0",
    "port": 3001
  },
...
...
 "token": "114514",
}

overflow正向连接配置

{
    "ws_host": "ws://172.18.0.1:3001",
    "reversed_ws_port": -1,
    "token": "114514",
    "retry_times": 5,
    "retry_wait_mills": 5000,
    "retry_rest_mills": 60000
}

Overflow 版本

Overflow v2.16.0-795845b-SNAPSHOT

其他组件版本

No response

系统日志

No response

网络日志

No response

补充信息

No response

MrXiaoM commented 1 month ago

网络日志。 还有,建议你看一下你用的版本是什么时候发布的

dokurorz commented 1 month ago

网络日志。 还有,建议你看一下你用的版本是什么时候发布的

我天,我还用mcl -u更新了下overflow,怎么更新到旧版本去了

dokurorz commented 1 month ago

更新到最新版本后,正向连接依然报错,反向连接正常,对java不是很熟悉,网络日志是要怎么抓取

2024-09-11 15:53:06 I/Onebot: Overflow v0.9.9.499-fc0a336-SNAPSHOT.499 正在运行
2024-09-11 15:53:06 I/Onebot: 连接到 WebSocket: ws://172.18.0.1:3001
2024-09-11 15:53:06 I/Onebot: ▌ 已连接到服务器 ┈━═☆
2024-09-11 15:53:06 I/Onebot: ▌ 服务器连接因 未知原因 已关闭 (关闭码: NORMAL)
2024-09-11 15:53:06 W/Onebot: 等待 5.0 秒后重连 (第 1/5 次)
2024-09-11 15:53:06 E/main: Exception in coroutine MiraiConsoleImplementationTerminal
java.lang.IllegalStateException: 无法获取该 Onebot 实现的版本信息 [unknown (12 request)],确定你连接的 Onebot 实现为 Onebot 11 或 Onebot 12 吗?
        at cn.evolvefield.onebot.client.core.Bot.getVersionInfo(Bot.kt:1355)
        at top.mrxiaom.overflow.internal.Overflow.start0(Overflow.kt:265)
        at top.mrxiaom.overflow.internal.Overflow.start0$default(Overflow.kt:213)
        at top.mrxiaom.overflow.internal.Overflow.startWithConfig(Overflow.kt:195)
        at top.mrxiaom.overflow.internal.Overflow.startWithConfig$default(Overflow.kt:190)
        at top.mrxiaom.overflow.internal.plugin.OverflowCoreAsPlugin.startWithConfig$overflow_core(OverflowCoreAsPlugin.kt:329)
        at top.mrxiaom.overflow.internal.plugin.OverflowCoreAsPlugin.startWithConfig$overflow_core$default(OverflowCoreAsPlugin.kt:328)
        at top.mrxiaom.overflow.internal.plugin.OverflowCoreAsPlugin.onPostStartup(OverflowCoreAsPlugin.kt:325)
        at top.mrxiaom.overflow.internal.plugin.OverflowCoreAsPlugin.access$onPostStartup(OverflowCoreAsPlugin.kt:50)
        at top.mrxiaom.overflow.internal.plugin.OverflowCoreAsPlugin$onEnable$1.invokeSuspend(OverflowCoreAsPlugin.kt:116)
        at top.mrxiaom.overflow.internal.plugin.OverflowCoreAsPlugin$onEnable$1.invoke(OverflowCoreAsPlugin.kt)
        at top.mrxiaom.overflow.internal.plugin.OverflowCoreAsPlugin$onEnable$1.invoke(OverflowCoreAsPlugin.kt)
        at net.mamoe.mirai.event.EventChannel$subscribeOnce$1.invokeSuspend(EventChannel.kt:515)
        at net.mamoe.mirai.event.EventChannel$subscribeOnce$1.invoke(EventChannel.kt)
        at net.mamoe.mirai.event.EventChannel$subscribeOnce$1.invoke(EventChannel.kt)
        at net.mamoe.mirai.internal.event.SafeListener$onEvent$2.invokeSuspend(SafeListener.kt:59)
        at net.mamoe.mirai.internal.event.SafeListener$onEvent$2.invoke(SafeListener.kt)
        at net.mamoe.mirai.internal.event.SafeListener$onEvent$2.invoke(SafeListener.kt)
        at kotlinx.coroutines.intrinsics.UndispatchedKt.startUndispatchedOrReturn(Undispatched.kt:89)
        at kotlinx.coroutines.BuildersKt__Builders_commonKt.withContext(Builders.common.kt:169)
        at kotlinx.coroutines.BuildersKt.withContext(Unknown Source)
        at net.mamoe.mirai.internal.event.SafeListener.onEvent(SafeListener.kt:59)
        at net.mamoe.mirai.internal.event.EventListeners.process(EventListeners.kt:113)
        at net.mamoe.mirai.internal.event.EventListeners.callListeners$overflow_core(EventListeners.kt:67)
        at net.mamoe.mirai.internal.event.EventChannelImpl.callListeners(EventChannelImpl.kt:86)
        at net.mamoe.mirai.internal.event.EventChannelImpl.broadcastEventImpl(EventChannelImpl.kt:76)
        at top.mrxiaom.overflow.internal.Overflow.broadcastEvent(Overflow.kt:387)
        at net.mamoe.mirai.event.EventKt.broadcast(Event.kt:161)
        at net.mamoe.mirai.console.internal.MiraiConsoleImplementationBridge$doStart$13$1.invokeSuspend(MiraiConsoleImplementationBridge.kt:457)
        at kotlin.coroutines.jvm.internal.BaseContinuationImpl.resumeWith(ContinuationImpl.kt:33)
        at kotlinx.coroutines.DispatchedTask.run(DispatchedTask.kt:106)
        at kotlinx.coroutines.scheduling.CoroutineScheduler.runSafely(CoroutineScheduler.kt:570)
        at kotlinx.coroutines.scheduling.CoroutineScheduler$Worker.executeTask(CoroutineScheduler.kt:750)
        at kotlinx.coroutines.scheduling.CoroutineScheduler$Worker.runWorker(CoroutineScheduler.kt:677)
        at kotlinx.coroutines.scheduling.CoroutineScheduler$Worker.run(CoroutineScheduler.kt:664)

2024-09-11 15:53:11 I/Onebot: 正在重连...
2024-09-11 15:53:11 I/Onebot: ▌ 已连接到服务器 ┈━═☆
2024-09-11 15:53:11 I/Onebot: ▌ 服务器连接因 未知原因 已关闭 (关闭码: NORMAL)
MrXiaoM commented 1 month ago

a9e4be90-6056-46bf-bf89-8a0f54d8fa0b 这就打算把网络日志设为反馈bug必选选项

dokurorz commented 1 month ago

😁我的,看了眼网络日志,报的是token错误,应该是token带特殊字符的问题

2024-09-11 16:07:26 I/Onebot: Overflow v0.9.9.499-fc0a336-SNAPSHOT.499 正在运行
2024-09-11 16:07:26 I/Onebot: 连接到 WebSocket: ws://172.18.0.1:3001
2024-09-11 16:07:26 I/Onebot: ▌ 已连接到服务器 ┈━═☆
2024-09-11 16:07:26 D/Onebot: [Send] --> {"action":"get_version_info","echo":0}
2024-09-11 16:07:26 D/Onebot: [Recv] <-- {"status":"failed","retcode":1403,"data":null,"message":"token验证失败","wording":"token验证失败","echo":null}

去掉特殊字符正向和反向就OK了,但是带特殊字符时反向又是OK的,原token是类似以下这样的

lhrC&Oynae9&&0W*lU1V