Discord Bot не будет удалять сообщения (Eclipse IDE Java с JDA API) - PullRequest
1 голос
/ 11 июня 2019

Я попытался сделать команду очистки, где она удаляет количество сообщений, которые пользователь хочет в канале диссонанса.Однако, это не сработало.

public void onGuildReceived(GuildMessageReceivedEvent event) {
        Message objMsg = event.getMessage();
        String[] args = objMsg.getContentRaw().split("");
        if(args[0].equalsIgnoreCase(Ref.prefix + "purge")) {
            if(args.length <= 2) {
                //TODO
            }else {
                event.getMessage().delete().queue();
                TextChannel target = event.getMessage().getMentionedChannels().get(0);
                purgeMessages(target, Integer.parseInt(args[2]));
            }
        }
    }
    private void purgeMessages(TextChannel channel, int numberofMessages) {
        MessageHistory history = new MessageHistory(channel);
        List<Message> msgs;

        msgs = history.retrievePast(numberofMessages).complete();
        channel.deleteMessages(msgs).queue();

    }

Я ожидал, что бот удалит указанное количество сообщений.Тем не менее, он не имеет ответа.Я использовал этот метод операторов if для других команд, таких как проверка вашего пинга, так что это скорее всего будет что-то с удаляющими сообщениями.

1 Ответ

0 голосов
/ 13 июля 2019

channel.deleteMessages(msgs).queue();, как указано в документации JDA: «Массовое удаление списка сообщений. Это не то же самое, что вызов Message.delete () в цикле». Одна вещь, о которой JDA docs не упоминает об этом, - то, что разногласия ограничивают массовое удаление только сообщениями, которые менее чем 2 недели. Таким образом, чтобы удалить старые сообщения, вы должны будете удалить их одно за другим. Это было ограничение, наложенное несколько месяцев назад.

Другие возможные проблемы, о которых я знаю, изложены в документах, наиболее распространенными из которых являются несоблюдение следующих правил:

  • "Должно быть не менее 2 сообщений и не более 100 сообщений одновременно. Если у вас есть только 1 сообщение, используйте вместо этого метод Message.delete ()."
  • "Для использования этой функции у вас должно быть разрешение MESSAGE_MANAGE в этом канале."
...