例如,如何让我的不和谐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;
}
}
}
答案 0 :(得分:0)
执行此操作的正确方法是在发送消息时将使用者传递给您的.queue方法。连同使用RestAction#queue之后,您将得到
channel.sendMessage("message").queue(message -> message.delete().queueAfter(5,
TIMEUNIT.SECONDS);
请参见queue with Consumer和queueAfter。
还有另一种使用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;
}
}
}