Первое, что я заметил, что может быть неправильно в вашем образце, это написание имени вашего метода. Он называется получено , а не получено . Обратите внимание, что Guild MessageReceivedEvent запускается только для сообщений, полученных в гильдии , если вы используете прямые сообщения, оно не будет запущено.
Существует два способа реализации обработки событий в JDA.
InterfacedEventManager (по умолчанию)
Документация: InterfacedEventManager , ListenerAdapter
Создание класса слушателя
public class MessageListener extends ListenerAdapter {
@Override // this is good practice, it fails compilation if the method doesn't overeride
public void onMessageReceived(MessageReceivedEvent event) {
// your code here
}
@Override
public void onGuildMessageReceived(GuildMessageReceivedEvent event) {
// your code here
}
}
Ваш метод должен иметь то же имя, видимость и параметры, чтобы правильно переопределить определение из ListenerAdapter
. Использование @Override
гарантирует это, генерируя ошибку компиляции, если переопределение некорректно сформировано.
Регистрация ListenerAdapter
JDABuilder builder = new JDABuilder(BOT_TOKEN);
builder.setEventManager(new InterfacedEventManager()); // this can be omitted, its the default
builder.addEventListener(new MessageListener());
JDA api = builder.build();
Требуется, чтобы каждый слушатель реализовал интерфейс EventListener
для этого менеджера событий. Это делается транзитивно ListenerAdapter
.
AnnotatedEventManager
Документация: AnnotatedEventManager , SubscribeEvent
Создание метода слушателя
public class MessageSubscriber {
@SubscribeEvent // required annotation
public void onMessage(MessageReceivedEvent event) {
// your code here
}
@SubscribeEvent // required annotation
public void onGuildMessage(GuildMessageReceivedEvent event) {
// your code here
}
}
Вы можете добавить аннотацию @SubscribeEvent
для методов-членов и методов класса (статических методов).
Регистрация подписчика
JDABuilder builder = new JDABuilder(BOT_TOKEN);
builder.setEventManager(new AnnotatedEventManager());
builder.addEventListener(new MessageSubscriber());
JDA api = builder.build();
Если вы аннотировали методы класса, вы можете просто использовать addEventListener(MessageSubscriber.class)
, для методов-членов это должен быть новый экземпляр new MessageSubscriber()
!
Если это не отвечает на ваш вопрос, возможно, у вас есть проблема, которая не может быть интерпретирована из вашего текущего вопроса. Пожалуйста, ограничьте ее конкретной проблемой, отладив код и создав MCVE .
.