如何授予新创建的角色权限以使用 JDA 库加入新创建的语音聊天?

Posted

技术标签:

【中文标题】如何授予新创建的角色权限以使用 JDA 库加入新创建的语音聊天?【英文标题】:How do I give a newly created role permissions to join a newly created voice chat with the JDA library? 【发布时间】:2019-10-15 14:03:10 【问题描述】:

我正在尝试创建用户可以自己分配的角色,然后创建只有该角色才能看到的隐藏语音聊天。到目前为止,我已经创建了一个角色并使用下面的代码创建了一个隐藏的语音聊天。但是现在不知道怎么给新创建的角色添加权限来加入新创建的语音聊天。

event.getGuild().getController().createCopyOfRole(event.getGuild().getRoleById("582333645948452874")).setMentionable(true).setName(messageSent[1]).queue();

event.getGuild().getController().createCopyOfChannel(event.getGuild().getVoiceChannelById("583088218145292298")).setName(messageSent[1]).queue();

【问题讨论】:

【参考方案1】:

您可以在createCopyOfChannel 返回的ChannelAction 上使用addPermissionOverride。

EnumSet<Permission> permissions = EnumSet.of(Permission.VIEW_CHANNEL);
Role role = event.getGuild().getRoleById(582333645948452874L);
VoiceChannel channel = event.getGuild().getVoiceChannelById(583088218145292298L);
GuildController controller = event.getGuild().getController();
controller.createCopyOfRole(role)
          .setMentionable(true)
          .setName(messageSent[1])
          .queue((r) -> 
              controller.createCopyOfChannel(channel)
                        .setName(messageSent[1])
                        // allow the new role to view the channel
                        .addPermissionOverride(r, permissions, null)
                        // Don't allow the everyone role to view the channel
                        .addPermissionOverride(guild.getPublicRole(), null, permissions)
                        .queue();
          );

创建的新角色在队列回调中可用。就我而言,我将其命名为r。然后,您可以使用该角色 r 在创建通道之前向通道添加权限覆盖。要拒绝其他人访问,您只需使用公共角色 (@everyone) 并拒绝来自它的查看访问。

【讨论】:

以上是关于如何授予新创建的角色权限以使用 JDA 库加入新创建的语音聊天?的主要内容,如果未能解决你的问题,请参考以下文章

如何根据反应发送消息,然后根据用户消息发送另一个消息?使用 JDA

Oracle:如何授予角色读取和创建视图权限?

给立即加入 JDA 的用户 jda 一个角色最好的方法是啥

PostgreSQL 8.4 将所有表的 DML 权限授予一个角色

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

Chef:如何为多个服务器提供文件库访问权限