Как дать вновь созданной роли разрешения присоединиться к вновь созданному голосовому чату с библиотекой JDA? - PullRequest
0 голосов
/ 30 мая 2019

Я пытаюсь создать роли, которые пользователи могут назначить себе, а затем создать скрытые голосовые чаты, которые может видеть только эта роль.Пока что я создал роль и создал скрытый голосовой чат с кодом ниже.Но теперь я не знаю, как добавить разрешения для вновь созданной роли, чтобы присоединиться к недавно созданному голосовому чату.

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 Ответ

1 голос
/ 30 мая 2019

Вы можете использовать addPermissionOverride на ChannelAction, который возвращается createCopyOfChannel.

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) и запрещаете доступ к ней из нее.

...