ContextException:无法捕获未知禁令(Discord Java)
ContextException: Unknown Ban can't be caught (Discord Java)
我的 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
。
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();
}
}
);
你的例外,在这种情况下甚至不是 ContextException
,而是 ErrorResponseException. Since queue(...)
does asynchronous operations in a different thread, the exceptions cannot be thrown from here. Instead, you should use the failure callback as described by the documentation。
您可以使用 ErrorHandler to handle specific ErrorResponses.
示例:
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
只是告诉您 您的 代码中错误的来源。由于实际异常发生在其他线程上,因此您没有上下文可以找到问题。
我的 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
。
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();
}
}
);
你的例外,在这种情况下甚至不是 ContextException
,而是 ErrorResponseException. Since queue(...)
does asynchronous operations in a different thread, the exceptions cannot be thrown from here. Instead, you should use the failure callback as described by the documentation。
您可以使用 ErrorHandler to handle specific ErrorResponses.
示例:
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
只是告诉您 您的 代码中错误的来源。由于实际异常发生在其他线程上,因此您没有上下文可以找到问题。