【问题标题】:Discord JDA can't create RoleDiscord JDA 无法创建角色
【发布时间】: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 的错误。 我希望有人可以帮助我。

【问题讨论】:

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

    【讨论】:

    • 感谢您的回答,尽管错误是由 dv8tion JDA 造成的。它现在正在工作。
    猜你喜欢
    • 2021-02-06
    • 2020-09-09
    • 1970-01-01
    • 2017-11-03
    • 2022-11-23
    • 2021-08-11
    • 2021-03-06
    • 2015-11-05
    • 2020-09-16
    相关资源
    最近更新 更多