如何判断使用jda的discord bot是否删除了一个React?

pcrecxhr  于 2021-07-12  发布在  Java
关注(0)|答案(1)|浏览(488)

我的代码中有一个messagereactionremoveevent,每当移除一个React时它就会触发。
但是,我也让bot执行一些自动的React移除(移除用户的React)。
我想阻止 MessageReactionRemoveEvent 当机器人移除React时触发。
我的密码是防止 MessageReactionRemoveEvent 由机器人触发:

if (event.getMember().getUser().equals(event.getJDA().getSelfUser())) return;

但是 MessageReactionRemoveEvent 总是返回作出React的用户的id,而不是bot的id。
我的问题是如何检测机器人是否移除了React?

nxagd54h

nxagd54h1#

自从 MessageReactionRemoveEvent 不会返回bot id,因此我无法验证bot是否删除了React。我用另一种方法来实现防止messagereactionremoveevent在bot移除React时触发。
方法如下:
添加一个布尔值,我们称之为触发器 boolean trigger = true; .
确保使用 .complete() 消除React而不是 .queue() ,差异可以在这里看到:https://ci.dv8tion.net/job/jda/javadoc/net/dv8tion/jda/api/requests/restaction.html#queue()
消除React后,做 trigger = false; .
由于.complete()方法将阻止当前线程, MessageReactionRemoveEvent 不会在中的代码之前调用 MessageReactionAddEvent 完成了。
MessageReactionRemoveEvent ,仅适用于 if (!trigger) // do something ,这意味着如果bot删除了React,if语句后面的代码将不会被执行,如果用户删除了React,那么您就需要执行一些操作。
在方法的末尾,确保包含 trigger = true; 重置触发器。
(可选)包括 trigger = true; 年初 MessageReactionAddEvent .
这对我很有效。

相关问题