Skip to content
New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

使用overflow+Gensokyo尝试获取用户头像出现异常 #118

Closed
Travellerrr opened this issue Dec 20, 2024 · 4 comments
Closed

使用overflow+Gensokyo尝试获取用户头像出现异常 #118

Travellerrr opened this issue Dec 20, 2024 · 4 comments
Labels
question 对错误或其它问题进行提问

Comments

@Travellerrr
Copy link

Travellerrr commented Dec 20, 2024

问题描述

在使用overflow向Gensokyo发出get_avatar请求后Gensokyo端正常回复,Overflow报出异常

[get_avatar] Cannot invoke "top.mrxiaom.overflow.internal.deps.gson.JsonElement.getAsString()" because the return value of "top.mrxiaom.overflow.internal.deps.gson.JsonObject.get(String)" is null如果你认为这是 Overflow 的问题请带上 logs/onebot 中的日志来反馈

Gensokyo端日志

 get_avatar: map[echo:22 message:https://q.qlogo.cn/qqapp/*** retcode:0 user_id:3.780***]

经测试message提供的链接可以正常访问且内容正确

复现

插件尝试获取头像
String response = bot.executeAction("get_avatar", actionParams);

Overflow 版本

1.0.1

其他组件版本

No response

系统日志

2024-12-20 15:47:45 V/Bot.**: Group(**) <- [mirai:at:**] 
老师请稍等!这就为您抽签!
2024-12-20 15:47:45 W/Onebot: 请求失败: [get_avatar] Cannot invoke "top.mrxiaom.overflow.internal.deps.gson.JsonElement.getAsString()" because the return value of "top.mrxiaom.overflow.internal.deps.gson.JsonObject.get(String)" is null。如果你认为这是 Overflow 的问题,请带上 logs/onebot 中的日志来反馈。
2024-12-20 15:47:45 I/AronaBot: 阿洛娜杂项-{
    "message": "Cannot invoke \"top.mrxiaom.overflow.internal.deps.gson.JsonElement.getAsString()\" because the return value of \"top.mrxiaom.overflow.internal.deps.gson.JsonObject.get(String)\" is null",
    "retcode": -1
}

网络日志

2024-12-20 15:47:45 D/Onebot: [Send] --> {"action":"get_avatar","params":{"user_id":37806****,"group_id":95481****},"echo":42}
2024-12-20 15:47:45 D/Onebot: [Recv] <-- {"echo":42,"message":"https://q.qlogo.cn/qqapp/1*","retcode":0,"user_id":37806****}
2024-12-20 15:47:45 W/Onebot: 请求失败: [get_avatar] Cannot invoke "top.mrxiaom.overflow.internal.deps.gson.JsonElement.getAsString()" because the return value of "top.mrxiaom.overflow.internal.deps.gson.JsonObject.get(String)" is null。如果你认为这是 Overflow 的问题,请带上 logs/onebot 中的日志来反馈。
2024-12-20 15:47:45 V/Onebot: Stacktrace: 
java.lang.NullPointerException: Cannot invoke "top.mrxiaom.overflow.internal.deps.gson.JsonElement.getAsString()" because the return value of "top.mrxiaom.overflow.internal.deps.gson.JsonObject.get(String)" is null
	at cn.evolvefield.onebot.client.util.ActionSendRequest.send(ActionSendRequest.kt:46)
	at cn.evolvefield.onebot.client.util.ActionSendRequest$send$1.invokeSuspend(ActionSendRequest.kt)
	at kotlin.coroutines.jvm.internal.BaseContinuationImpl.resumeWith(ContinuationImpl.kt:33)
	at kotlinx.coroutines.internal.ScopeCoroutine.afterResume(Scopes.kt:33)
	at kotlinx.coroutines.AbstractCoroutine.resumeWith(AbstractCoroutine.kt:102)
	at kotlin.coroutines.jvm.internal.BaseContinuationImpl.resumeWith(ContinuationImpl.kt:46)
	at kotlinx.coroutines.DispatchedTaskKt.resume(DispatchedTask.kt:178)
	at kotlinx.coroutines.DispatchedTaskKt.dispatch(DispatchedTask.kt:166)
	at kotlinx.coroutines.CancellableContinuationImpl.dispatchResume(CancellableContinuationImpl.kt:397)
	at kotlinx.coroutines.CancellableContinuationImpl.resumeImpl(CancellableContinuationImpl.kt:431)
	at kotlinx.coroutines.CancellableContinuationImpl.resumeImpl$default(CancellableContinuationImpl.kt:420)
	at kotlinx.coroutines.CancellableContinuationImpl.resumeWith(CancellableContinuationImpl.kt:328)
	at kotlinx.coroutines.ResumeAwaitOnCompletion.invoke(JobSupport.kt:1413)
	at kotlinx.coroutines.JobSupport.completeStateFinalization(JobSupport.kt:318)
	at kotlinx.coroutines.JobSupport.tryFinalizeSimpleState(JobSupport.kt:295)
	at kotlinx.coroutines.JobSupport.tryMakeCompleting(JobSupport.kt:856)
	at kotlinx.coroutines.JobSupport.makeCompleting$kotlinx_coroutines_core(JobSupport.kt:806)
	at kotlinx.coroutines.CompletableDeferredImpl.complete(CompletableDeferred.kt:92)
	at cn.evolvefield.onebot.client.util.ActionSendRequest.onCallback(ActionSendRequest.kt:80)
	at cn.evolvefield.onebot.client.handler.ActionHandler.onReceiveActionResp(ActionHandler.kt:41)
	at cn.evolvefield.onebot.client.connection.IAdapter$DefaultImpls.onReceiveMessage(IAdapter.kt:27)
	at cn.evolvefield.onebot.client.connection.WSClient.onReceiveMessage(WSClient.kt:19)
	at cn.evolvefield.onebot.client.connection.WSClient.onMessage(WSClient.kt:68)
	at top.mrxiaom.overflow.internal.deps.websocket.client.WebSocketClient.onWebsocketMessage(WebSocketClient.java:661)
	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:397)
	at top.mrxiaom.overflow.internal.deps.websocket.WebSocketImpl.decode(WebSocketImpl.java:229)
	at top.mrxiaom.overflow.internal.deps.websocket.client.WebSocketClient.run(WebSocketClient.java:544)
	at java.base/java.lang.Thread.run(Thread.java:840)

补充信息

No response

@Travellerrr Travellerrr added the question 对错误或其它问题进行提问 label Dec 20, 2024
@MrXiaoM
Copy link
Owner

MrXiaoM commented Dec 20, 2024

这说明 Gensokyo 的扩展API不符合onebot标准。

标准的主动 action 返回应该有
status retcode data echo
返回的数据应该放到data里

而你这里返回的却是
echo message retcode user_id

返回的数据全都平铺在根节点了

@MrXiaoM
Copy link
Owner

MrXiaoM commented Dec 20, 2024

以 Overflow 的工作逻辑,即使是自定义调用,返回结果也必须要传 status 和 echo,echo 用于回调,status 用于判断是否成功,失败时抛出异常

@Travellerrr
Copy link
Author

以 Overflow 的工作逻辑,即使是自定义调用,返回结果也必须要传 status 和 echo,echo 用于回调,status 用于判断是否成功,失败时抛出异常

那能否针对gensokyo的拓展API适配呢?或者有没有其他解决方法

@kagg886
Copy link
Contributor

kagg886 commented Jan 6, 2025

这是不是应该让Gensokyo修改一下:D

Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment
Labels
question 对错误或其它问题进行提问
Projects
None yet
Development

No branches or pull requests

3 participants