我找不到解决问题的方法。我想检查成员是否已添加特定反应(✅)。如果他已经对该反应做出了反应,则无法删除它,也无法将其放回原处。有人能帮助我吗 ?谢谢。
有我的代码,也许会对您有帮助:
头等舱:
public class TimingStart extends ListenerAdapter{
public static long ID;
public static long begin;
public static long end;
public void onGuildMessageReceived(GuildMessageReceivedEvent event) {
String[] args = event.getMessage().getContentRaw().split("\\s");
Random value = new Random();
int time = value.nextInt(25);
time += 5;
if (args[0].equals("!timing")) {
if (!event.getChannel().getId().equals("730784510932811859")) {
event.getChannel().sendMessage(event.getMember().getAsMention() + ", if you want to play, go to " + event.getGuild().getTextChannelById(730784510932811859l).getAsMention()).queue();
} else if (event.getChannel().getId().equals("730784510932811859")) {
EmbedBuilder eb = new EmbedBuilder();
eb.setColor(0xfcdf03);
eb.setTitle(Integer.toString(time) + " seconds");
eb.setDescription("React with ✅ when you think the time is up !");
event.getChannel().sendMessage(eb.build()).queue(msg -> {
msg.addReaction("✅").queue();
ID = msg.getIdLong();
});
begin = System.currentTimeMillis();
}
}
}
}
第二堂课,我要在这里检查他是否已经做出反应:
public class TimingReaction extends ListenerAdapter {
public void onGuildMessageReactionAdd(GuildMessageReactionAddEvent event) {
if (event.getMessageIdLong() == TimingStart.ID && event.getReactionEmote().getName().equals("✅")) {
TimingStart.end = System.currentTimeMillis();
double tempsEcoule = ( (double) (TimingStart.end - TimingStart.begin) ) / 1000;
event.getChannel().sendMessage(event.getMember().getAsMention() + ", you reacted after " + tempsEcoule + " seconds !").queue();
// If the user already reacted, he can't remove the reaction and put it back.
}
}
}
答案 0 :(得分:0)
我非常确定这是不可能的。
为了限制用户消除其反应,您必须取消其操作。 GuildMessageReactionRemoveEvent
仅在反应消失后才会触发。
一种变通方法是,如果用户删除他们的反应或之后做出反应,则使其变得无关紧要。
例如,您可以在用户第一次做出反应后将布尔值设置为true,并且如果该布尔值是false(并且当然是正确的表情),则仅在GuildMessageReactionAddEvent
中执行代码。