我的代码中有一个 MessageReactionRemoveEvent,它会在反应被移除时触发。
但是,我也让我的机器人执行一些自动反应删除(删除用户的反应)。
我想防止 MessageReactionRemoveEvent
在被机器人移除反应时触发。
我用于防止机器人触发 MessageReactionRemoveEvent
的代码:
if (event.getMember().getUser().equals(event.getJDA().getSelfUser())) return;
但是 MessageReactionRemoveEvent
中的 getUser() 方法总是返回做出反应的用户的 ID,而不是机器人的 ID。
我的问题是如何检测某个反应是否被机器人移除?
答案 0 :(得分:0)
由于 MessageReactionRemoveEvent
不会返回机器人 ID,因此我无法验证反应是否被机器人移除。我反过来工作以实现防止在反应被机器人删除时触发的 MessageReactionRemoveEvent。
方法如下:
boolean trigger = true;
。.complete()
而不是 .queue()
来删除反应,差异可以在这里看到:https://ci.dv8tion.net/job/JDA/javadoc/net/dv8tion/jda/api/requests/RestAction.html#queue()trigger = false;
。MessageReactionRemoveEvent
中的代码完成之前不会调用 MessageReactionAddEvent
。MessageReactionRemoveEvent
中,简单地应用if (!trigger) // do something
,这意味着如果反应被机器人移除,则不会执行if语句之后的代码,这就是你想做的事情如果反应被用户删除。trigger = true;
以重置触发器。trigger = true;
开头包含 MessageReactionAddEvent
。这对我来说就像魔法一样。