无法发送消息,love.forte.simbot.kook.api.ApiResultException: result.code is not success(40000) #181
-
涉及的编程语言Java 涉及的组件库kook 疑问描述最初尝试使用stdlib标准库跟随开发者文档编写机器人,可以监听到所在频道消息,但在尝试发送消息时会出现报错 Exception in thread "main" love.forte.simbot.kook.api.ApiResultException: result.code is not success(40000) ,随后程序退出。
代码: package org.NailBot;
import io.ktor.client.engine.java.Java;
import love.forte.simbot.kook.BotConfiguration;
import love.forte.simbot.kook.BotFactory;
import love.forte.simbot.kook.Ticket;
import love.forte.simbot.kook.api.message.SendChannelMessageApi;
import love.forte.simbot.kook.api.message.SendMessageResult;
import love.forte.simbot.kook.api.message.SendMessageType;
import love.forte.simbot.kook.event.Event;
import love.forte.simbot.kook.event.TextExtra;
public class Main {
public static void main(String[] args) {
final var ticket = Ticket.botWsTicket("[Id去敏]", "[Token去敏]");
final var botConfiguration = new BotConfiguration();
botConfiguration.setClientEngineFactory(Java.INSTANCE);
botConfiguration.setWsEngineFactory(Java.INSTANCE);
botConfiguration.setCompress(true);
botConfiguration.disableTimeout();
//尝试延长了超时设置,无用
final var timeoutConfiguration = new BotConfiguration.TimeoutConfiguration();
timeoutConfiguration.setRequestTimeoutMillis(500000L);
timeoutConfiguration.setConnectTimeoutMillis(500000L);
botConfiguration.setTimeout(timeoutConfiguration);
var bot = BotFactory.create(ticket, botConfiguration);
bot.blockingProcessor((event, raw) -> {
System.out.println("event = " + event);
System.out.println("raw = " + raw);
});
final var me = bot.getMe();
System.out.println("me = " + me);
var api = SendChannelMessageApi.create("1180022343308375", "你好,残酷的世界。");//频道ID应该是正确的
var result = api.requestByBlocking(bot);
System.out.println("result.getMsgId() = " + result.getMsgId());
System.out.println("result.getNonce() = " + result.getNonce());
System.out.println("result.getMsgTimestamp() = " + result.getMsgTimestamp());
bot.startBlocking();
bot.joinBlocking();
}
} 相关报错:
在此之后我尝试使用了SpringBoot和核心库,监听功能仍然工作,但在尝试发送消息时,类似的报错信息仍然会出现。下面的代码来源于文档中SpringBoot监听事件的案例,当用户在频道发出“@bot名称 你好”的消息时,日志会出现消息 love.forte.simbot.kook.api.ApiResultException: result.code is not success(40000) ,回复将不被发出。 依赖版本:
代码(基本上照搬自文档): import love.forte.simboot.annotation.ContentTrim;
import love.forte.simboot.annotation.Filter;
import love.forte.simboot.annotation.Listener;
import love.forte.simbot.event.ChannelMessageEvent;
import org.springframework.stereotype.Component;
@Component
public class HelloWorld {
@Listener
@Filter(value = "你好", targets = @Filter.Targets(atBot = true))
@ContentTrim // 当匹配被at时,将'at'这个特殊消息移除后,剩余的文本消息大概率存在前后空格,通过此注解在匹配的时候忽略前后空格
public void onChannelMessage(ChannelMessageEvent event) { // 将要监听的事件类型放在参数里,即代表监听此类型的消息
// Java中的阻塞式API
event.replyBlocking("111");
}
} 完整日志信息:
相关报错(在“@bot名称 你好”发出的一瞬间后出现,可能证明监听功能正常运作):
我在试图寻找错误码列表以自行解决该问题,目前并没有找到。个人怀疑可能是因为网络环境导致,因为我人在海外,使用kook还算稳定,但也有时会出现消息延迟的情况。如果是出于网络原因等不可抗力,是否还有什么其他解决方法? 如果需要其他信息,我会尽力提供,提前十分感谢。 |
Beta Was this translation helpful? Give feedback.
Replies: 2 comments 4 replies
-
这是发送消息的时候服务器响应了一个 code=40000 的错误,你可以尝试捕获 |
Beta Was this translation helpful? Give feedback.
-
更新一下,在开发者反馈服翻到其他人反馈相同问题,找到可能的答案了。原因是kook限制海外IP与文字频道的互动,并非由代码问题或SDK问题导致。现在在考虑尝试租一个内地服务器,应该没有其他可行的解决方法了。 |
Beta Was this translation helpful? Give feedback.
唔,抱歉花了这么久,我真的爱死IntelliJ了,花了半小时解决文件编码导致日志中文输出是乱码的问题。这是报错信息说明的结果:
由于服务器维护,暂时无法进行此操作,带来不便请谅解
看来应该是Kook服务器端的问题,应该没有什么能解决的方法。