Столкнулся с такой проблемой: нужно удалить N сообщений на канале в дискорде. Как это сделать?
Данная проблема частая и выход в ней не всегда очевиден.
Пообщавшись с разработчиками, они предлогают использовать purgeMessages. С данным методом я еще лично не разобрался до конца, но знаю разные вариант удаления сообщений.
Примеры ниже показывают удаление всей истории сообщений на канале. Удаление N сообщений будет основана на данных примерах кода:
Данный вариант является самым примитивным (и где-то надежным):
for (Message mes : event.getChannel().getIterableHistory()) {
try {
event.getChannel().deleteMessageById(mes.getId()).queue();
} catch (Exception e) {
e.printStackTrace();
}
}
Плюсы:
Минусы:
Данный вариант является немного продвинутым и его можно часто увидеть на просторах Youtube-уроков по Discord JDA, но у него есть огромные НО:
event.getChannel().getHistory().retrievePast(100).queue(
m -> data.getGuild()
.getTextChannelById(event.getChannel().getId())
.deleteMessages(m).queue()
);
Плюсы:
Минусы:
Данный вариант еще не обкатан мною, но совмещает в себе плюсы двух предыдущих вариантов:
P.S. честно, я ничего не понял в этом коде, но знаю одно - оно удаляет достаточно быстро 500 сообщений.
event.getChannel().getIterableHistory().takeAsync(500).thenAccept(event.getChannel()::purgeMessages);
Плюсы:
Минусы:
Сборка персонального компьютера от Artline: умный выбор для современных пользователей