Java Discord API:已添加响应

时间:2020-08-11 20:34:54

标签: java discord bots discord-jda

我找不到解决问题的方法。我想检查成员是否已添加特定反应(✅)。如果他已经对该反应做出了反应,则无法删除它,也无法将其放回原处。有人能帮助我吗 ?谢谢。

有我的代码,也许会对您有帮助:

头等舱:

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.
            
        }
        
    }
    
}

1 个答案:

答案 0 :(得分:0)

我非常确定这是不可能的。

为了限制用户消除其反应,您必须取消其操作。 GuildMessageReactionRemoveEvent仅在反应消失后才会触发。

一种变通方法是,如果用户删除他们的反应或之后做出反应,则使其变得无关紧要。

例如,您可以在用户第一次做出反应后将布尔值设置为true,并且如果该布尔值是false(并且当然是正确的表情),则仅在GuildMessageReactionAddEvent中执行代码。