#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");
});
Если это не сработает, есть три возможные причины:
createRole
выдал исключение (используйте try/catch)queue()
сбой из-за ошибки подключения или разногласий (убедитесь, что журналы JDA не отключены)- Ваш код не запускается (используйте отладчик)
Вы всегда должны пытаться настроить все поля и вызвать очередь один раз. В вашем коде с getManager
вы отправляете запросы на редактирование для каждого отдельного изменения , что совершенно необязательно, так как менеджер может обновить несколько полей одновременно, позвонив queue()
только после установки всех изменений. Очередь вызовов для каждого установщика только замедлит обновление из-за ограничений скорости.
Комментарии:
1. Спасибо за ваш ответ, хотя ошибка была допущена dv8tion JDA. Сейчас это работает.