Discord JDA 无法创建角色

Posted

技术标签:

【中文标题】Discord JDA 无法创建角色【英文标题】:Discord JDA can't create Role 【发布时间】:2021-12-20 16:01:31 【问题描述】:

我目前正在使用 dv8tion 的 Discord JDA 用 Ja​​va 编写 Discord 机器人。 在公会中创建角色时我遇到了很大的问题。然后,当我尝试创建角色时,它会卡住并且不会创建角色,但没有错误。我尝试使用两种不同的方法来创建角色。第一个:

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()。由于速率限制,为每个 setter 调用队列只会使更新变慢。

【讨论】:

感谢您的回答,尽管错误是由 dv8tion JDA 造成的。它现在正在工作。

以上是关于Discord JDA 无法创建角色的主要内容,如果未能解决你的问题,请参考以下文章

如何使用 JDA 在 Discord 中创建文本通道:Java Discord Api

Discord bot 无法使用 JDA 在 java 中发送消息

Discord JDA 依赖缺失

Kotlin discord jda 无法通过 id 获取消息

如何对命令中的表情做出反应 (Discord JDA)?

Discord JDA OnReady 不起作用