ContextException:无法捕获未知禁令(Discord Java)
Posted
技术标签:
【中文标题】ContextException:无法捕获未知禁令(Discord Java)【英文标题】:ContextException: Unknown Ban can't be caught (Discord Java) 【发布时间】:2021-03-24 20:41:55 【问题描述】:我的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
。
【问题讨论】:
【参考方案1】:您的例外,在这种情况下甚至不是ContextException
,而是ErrorResponseException。由于queue(...)
在不同的线程中进行异步操作,所以不能从这里抛出异常。相反,您应该使用documentation 中描述的失败回调。
您可以使用ErrorHandler 来处理特定的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
只是用来告诉您您的 代码中错误源自何处。由于实际异常发生在其他线程上,因此您无法找到问题所在的上下文。
【讨论】:
【参考方案2】: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();
);
【讨论】:
最好使用ErrorHandler。以上是关于ContextException:无法捕获未知禁令(Discord Java)的主要内容,如果未能解决你的问题,请参考以下文章