Discord JDA не может создать роль

#java #discord #discord-jda

Вопрос:

В настоящее время я кодирую бота Discord на Java, используя Discord JDA от dv8tion. Там у меня огромная проблема с созданием ролей в гильдии. Когда я затем пытаюсь создать роль, она застревает и не создает роль, но ошибок нет. Я пробовал использовать два разных метода создания роли. Первый из них:

 Guild g = bot.getGuildById(816744384925663275L);
Role rle;
try {
    rle = g.createRole().setName("Owner").submit().get();
    rle.getManager().setColor(Color.red).queue();
    rle.getManager().setHoisted(true).queue();
    rle.getManager().setMentionable(false).queue();
    rle.getManager().setPermissions(Permission.ADMINISTRATOR).queue();
} catch (InterruptedException e) {
    e.printStackTrace();
} catch (ExecutionException e) {
    e.printStackTrace();
}
 

и второй:

 Guild g = bot.getGuildById(816744384925663275L);
Role rle = g.createRole().setName("Owner").complete();
    rle.getManager().setColor(Color.red).queue();
    rle.getManager().setHoisted(true).queue();
    rle.getManager().setMentionable(false).queue();
    rle.getManager().setPermissions(Permission.ADMINISTRATOR).queue();
 

Печатая что-то в консоли после каждой строки кода, я замечаю, что оно застревает после строки с g.createRole() в ней. Я не знаю, что там происходит или это ошибка JDA.
Я надеюсь, что кто — нибудь сможет мне в этом помочь.

Ответ №1:

Вы должны использовать это для создания роли:

 guild.createRole()
  .setName("Owner")
  .setColor(Color.red)
  .setHoisted(true)
  .setMentionable(false)
  .setPermissions(Permission.ADMINISTRATOR)
  .queue(role -> {
    System.out.println("Created role");
  });
 

Если это не сработает, есть три возможные причины:

  1. createRole выдал исключение (используйте try/catch)
  2. queue() сбой из-за ошибки подключения или разногласий (убедитесь, что журналы JDA не отключены)
  3. Ваш код не запускается (используйте отладчик)

Вы всегда должны пытаться настроить все поля и вызвать очередь один раз. В вашем коде с getManager вы отправляете запросы на редактирование для каждого отдельного изменения , что совершенно необязательно, так как менеджер может обновить несколько полей одновременно, позвонив queue() только после установки всех изменений. Очередь вызовов для каждого установщика только замедлит обновление из-за ограничений скорости.

Комментарии:

1. Спасибо за ваш ответ, хотя ошибка была допущена dv8tion JDA. Сейчас это работает.