#discord #bots #discord-jda
#Discord #боты #раздор-jda
Вопрос:
То, что я пытаюсь сделать, это :
Когда парень покидает определенный голосовой канал, и этот канал теперь пуст, бот :
- удалите все сообщения, кроме 1, в определенном текстовом канале
- удалите голосовой канал, который он только что покинул
Проблема :
- голосовой канал успешно удален, но сообщения в текстовом канале не удаляются ботом
Код :
@Override public void onGuildVoiceUpdate(GuildVoiceUpdateEvent event) { VoiceChannel channelLeft = event.getChannelLeft(); if (channelLeft.getName().startsWith("🎒 Coaching de")) { if (channelLeft.getMembers().isEmpty()) { channelLeft.delete().queue(); //The bot delete de channel successfully Listlt;Messagegt; messagesCoaching = event.getChannelLeft().getGuild().getTextChannelById("489420943991635988").getHistory().retrievePast(20).complete(); // Using a list to store the retrieved messages messagesCoaching.removeIf(m -gt; m.getId().equals("490567304971812885")); // Removing from the list the message i want to keep event.getChannelLeft().getGuild().getTextChannelById("489420943991635988").deleteMessages(messagesCoaching).complete(); // Deleting all the messages (not working) } }
Ответ №1:
Я не уверен на 100%, в чем заключается ваша ошибка, но я заверяю, что вы пытаетесь удалить все сообщения, отправленные в текстовом канале.
В настоящее время ваш код получает последние 20 сообщений из текстового канала, которые вы получили по идентификатору. Если у вас более 20 сообщений, бот их не удалит. И если сообщения старше 2 недель, он также не удалит их. Кроме того, не используйте complete (), так как это остановит основной поток бота. Я бы предложил использовать такой код:
@Override public void onGuildVoiceUpdate(GuildVoiceUpdateEvent event) { VoiceChannel channelLeft = event.getChannelLeft(); if (channelLeft.getName().startsWith("🎒 Coaching de")) { if (channelLeft.getMembers().isEmpty()) { channelLeft.delete().queue(); // Telling the bot to delete the channel. MessageHistory history = event.getGuild().getTextChannelById("489420943991635988").getHistory(); // Pulling up the history from a text channel history.retrievePast(100).queue(messages -gt; { // Putting the past 100 messages in a queue, and using a lamba to do something with the returned messages messages.removeIf(m -gt; m.getId().equals("490567304971812885")); // If a message contains the same ID as told here, it removes it. event.getGuild().getTextChannelById("489420943991635988").deleteMessages(messages).queue(); // And now, delete all messages. }); } } }
Комментарии:
1. Это немного лучше, потому что он использует механизм очереди, чтобы предотвратить остановку всего бота до тех пор, пока ему не удастся выполнить вышеуказанные задачи