Discord JDA 无法创建角色
Posted
技术标签:
【中文标题】Discord JDA 无法创建角色【英文标题】:Discord JDA can't create Role 【发布时间】:2021-12-20 16:01:31 【问题描述】:我目前正在使用 dv8tion 的 Discord JDA 用 Java 编写 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 中发送消息