我的代码中有一个messagereactionremoveevent,每当移除一个React时它就会触发。
但是,我也让bot执行一些自动的React移除(移除用户的React)。
我想阻止 MessageReactionRemoveEvent
当机器人移除React时触发。
我的密码是防止 MessageReactionRemoveEvent
由机器人触发:
if (event.getMember().getUser().equals(event.getJDA().getSelfUser())) return;
但是 MessageReactionRemoveEvent
总是返回作出React的用户的id,而不是bot的id。
我的问题是如何检测机器人是否移除了React?
1条答案
按热度按时间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
.这对我很有效。