contextexception:无法捕获未知禁令(discord java)

qzlgjiam  于 2021-06-30  发布在  Java
关注(0)|答案(2)|浏览(383)

我的 unban 命令有时会抛出contextexception,当您取消对未被禁止的人的绑定时。我想用一只手抓住它 try catch 阻止以通知用户他们尝试取消绑定的人未被禁止。这就是我所尝试的:

try {
   event.getGuild().unban(event.getMessage().getContentRaw().substring(8)).queue();
} catch(ContextException e) {
   event.getChannel().sendMessage("This user isn't banned!").queue();
   return;
}

但是 catch() 台词只是说 Exception 'net.dv8tion.jda.api.exceptions.ContextException' is never thrown in the corresponding try block .

ijxebb2r

ijxebb2r1#

你的例外,在这种情况下甚至不是 ContextException 但是一个错误React例外。自 queue(...) 如果在不同的线程中执行异步操作,则不能从此处抛出异常。相反,您应该使用文档中描述的失败回调。
您可以使用errorhandler来处理特定的错误响应。
例子:

String userId = event.getMessage().getContentRaw().substring(8);
ErrorHandler handler = new ErrorHandler().handle(ErrorResponse.UNKNOWN_BAN, (error) -> {
    event.getChannel().sendMessage("This user isn't banned!").queue();
});

event.getGuild()
     .unban(userId)
     .queue(null, handler);

这个 ContextException 只是告诉你错误是从哪里来的。因为实际的异常发生在其他线程上,因此没有上下文来查找问题。

eivgtgni

eivgtgni2#

contextexception处理异步异常。所以try块无法捕获异常。
你可以这样修改你的代码。

event.getGuild().unban(event.getMessage().getContentRaw().substring(8)).queue(
    null,
    (error) -> {
        if (error.getMessage().equals("10026: Unknown Ban")) {
            event.getChannel().sendMessage("This user isn't banned!").queue();
        }
    }
);

相关问题