Бот JDA не прослушивает сообщения

#java #discord #discord-jda

#java #Discord #discord-jda

Вопрос:

Я пытаюсь создать очень простого бота discord, и я впервые создаю его на Java (с IntelliJ IDE). Он входит в систему и выходит в Интернет правильно, но не получает никаких сообщений, которые я отправляю в гильдию. Код приведен ниже:

 import net.dv8tion.jda.api.AccountType;
import net.dv8tion.jda.api.JDABuilder;
import net.dv8tion.jda.api.events.message.MessageReceivedEvent;
import net.dv8tion.jda.api.hooks.ListenerAdapter;
import org.jetbrains.annotations.NotNull;

public class Main extends ListenerAdapter {
    public static void main(String[] args) throws Exception{
        JDABuilder bot = new JDABuilder(AccountType.BOT);
        String token = "token";
        bot.setToken(token);
        bot.build();
    }

    @Override
    public void onMessageReceived(@NotNull MessageReceivedEvent event) {
        System.out.println("message received");
        event.getChannel().sendMessage("reeeeeeee");
        super.onMessageReceived(event);
    }
}
  

Я думаю, что ошибочная часть находится где-то в районе «public void onMessageReceived». Я пробовал много вещей, таких как перестановка моего кода или его перезапись, но, похоже, ничего не работает.

Ответ №1:

Вы не вызывали queue() сообщение, MessageAction возвращенное sendMessage .

При использовании X ничего не происходит

В JDA мы используем асинхронную обработку с ограничением скорости с помощью общего класса RestAction. Если у вас есть код, такой как channel.SendMessage(«привет»); или сообщение.удалить(); на самом деле ничего не происходит. Это потому, что как SendMessage(…), так и delete() возвращают экземпляр RestAction. Вы здесь не закончили, поскольку этот класс является лишь промежуточным шагом к выполнению вашего запроса. Здесь вы можете выбрать, использовать ли асинхронную очередь () (рекомендуется) или отправить () или завершить блокировку () (не рекомендуется).

Вы можете заметить, что queue() возвращает void. Это потому, что он асинхронный и вместо этого использует обратные вызовы. Читать дальше

Из Вики по устранению неполадок JDA

Вы также никогда не регистрировали свой прослушиватель событий. И вы используете устаревший конструктор для JDABuilder.

 public class Main extends ListenerAdapter {
    public static void main(String[] args) throws Exception{
        JDABuilder.createDefault(token) // don't use the deprecated constructor
                  .addEventListeners(new Main()) // register your listener
                  .build();
    }

    @Override
    public void onMessageReceived(@NotNull MessageReceivedEvent event) {
        System.out.println("message received");
        event.getChannel().sendMessage("reeeeeeee").queue(); // call queue
    }
}
  

И вы должны никогда нигде не сливать свой токен бота!