5秒后,如何让我自动删除Java Discord机器人?

时间:2020-06-04 15:23:23

标签: java discord-jda

例如,如何让我的不和谐Java机器人在5秒钟后删除消息?

String[] messageArgs = event.getMessage().getContentRaw().toLowerCase().split(" ");
for (String args : messageArgs) {
    if (blacklistWords.contains(args)) {
        if (memberRoles.contains(warn0)) {                          
            event.getMessage().delete().queue();            
            event.getMessage().getChannel().sendMessage
            ("**" + MemberMention + "** unterlasse bitte diese **Wortwahl.**"
             + "\nBei **3 Verwarnungen** wirst du **gekickt!**").queue();

            event.getGuild().addRoleToMember(user, warn1).complete();
            event.getJDA().getGuildById(Secrets.guildID).removeRoleFromMember(user, warn0).complete();

            break;
        }
    }
}

3 个答案:

答案 0 :(得分:0)

执行此操作的正确方法是在发送消息时将使用者传递给您的.queue方法。连同使用RestAction#queue之后,您将得到

channel.sendMessage("message").queue(message -> message.delete().queueAfter(5, 
TIMEUNIT.SECONDS);

请参见queue with ConsumerqueueAfter

还有另一种使用RestAction#delay

的方法

答案 1 :(得分:-1)

在调用删除消息的函数之前,只需先暂停Thread.sleep(5000);之类的内容即可。这将暂停5000毫秒或5秒。

答案 2 :(得分:-1)

您可以启动新线程并暂停该线程,然后对消息运行delete命令。这样,您就不会导致其他代码行出现问题。

String[] messageArgs = event.getMessage().getContentRaw().toLowerCase().split(" ");
for (String args : messageArgs) {
    if (blacklistWords.contains(args)) {
        if (memberRoles.contains(warn0)) {

            Runnable r = new Runnable() {
                @Override
                public void run() {
                    try {
                        // pause for 5 seconds
                        wait(5000);

                        event.getMessage().delete().queue();

                        event.getMessage().getChannel().sendMessage
                            ("**" + MemberMention + "** unterlasse bitte diese **Wortwahl.**"
                                > here + "\nBei **3 Verwarnungen** wirst du **gekickt!**").queue();

                        event.getGuild().addRoleToMember(user, warn1).complete();
                        event.getJDA().getGuildById(Secrets.guildID).removeRoleFromMember(user, warn0)
                            .complete();
                    } catch (InterruptedException e) {
                        e.printStackTrace();
                    }
                }
            };

            Thread t = new Thread(r);
            t.start();

            break;
        }
    }
}