【问题标题】:Java Discord API : Reaction already addedJava Discord API:已添加反应
【发布时间】:2020-12-01 13:57:24
【问题描述】:

我找不到我的问题的解决方案。我想检查成员是否已经添加了特定反应 (✅)。如果他已经对那个反应产生了反应,他就不能把它去掉,也不能把它放回去。有人能帮助我吗 ?谢谢。

这是我的代码,也许它会帮助你:

头等舱:

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

【问题讨论】:

  • 欢迎来到 Stackoverflow。请编辑您的问题并附加您到目前为止编写的代码并遇到问题。
  • 我刚刚编辑添加了代码。

标签: java discord bots discord-jda


【解决方案1】:

我很确定这是不可能的。

为了限制用户删除他们的反应,您必须取消他们的操作。 GuildMessageReactionRemoveEvent 只会在反应消失后触发。

如果用户删除他们的反应或事后做出反应,解决方法可能是让它变得无关紧要。

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

【讨论】:

    猜你喜欢
    • 2021-03-11
    • 2020-02-16
    • 2020-12-27
    • 2020-11-28
    • 2017-11-01
    • 2021-08-26
    • 2021-06-04
    • 2018-03-04
    • 2021-06-03
    相关资源
    最近更新 更多