Discord JDA. Дать юзерам Permission на созданном канале

125
09 января 2020, 00:20

Я создаю канал с помощью команды + упомнинанием от 1 и более участника сервер и хочу сделать его частным, и чтобы только определенные люди могли в Discord его видеть (включая упомянутых) и сам бот.

Имя чата должно быть как имя первого упомянутого участника.

Не удалось реализовать от 2 и более пользователей отмеченных. Пока получается добавлять статически, но хотелось бы динамически, чтобы сократить число строк, так же, возможно, брать данные из БД.

List<Permission> List = Arrays.asList(Permission.MESSAGE_READ, Permission.MESSAGE_WRITE);
String name = event.getMessage().getMentionedMembers().get(0).getEffectiveName().toLowerCase().replaceAll(" ", "");
event.getGuild().getCategoriesByName("Hall", true).get(0)
                .createVoiceChannel(name)
                .addPermissionOverride(event.getGuild().getPublicRole(), Collections.emptyList(), List)
                .addPermissionOverride(event.getMessage().getMentionedMembers().get(0), List, Collections.emptyList())
                .addPermissionOverride(event.getGuild().getRolesByName("Admin", true).get(0), List, Collections.emptyList())
                .addPermissionOverride(event.getGuild().getRolesByName("Moderator", true).get(0), List, Collections.emptyList())
                .addPermissionOverride(event.getGuild().getRolesByName("LPA", true).get(0), List, Collections.emptyList())
                .addPermissionOverride(event.getGuild().getRolesByName("Tech", true).get(0), List, Collections.emptyList())
                .addPermissionOverride(event.getGuild().getSelfMember(), List, Collections.emptyList())
                .queue();
Answer 1

Ответ прост, но не очевиден.

Первые две строчки кода оставляем без изменений, а остальное удаляем и вставляем вначале это:

event.getGuild().getCategoriesByName("Hall", true).get(0).createTextChannel(name).queue();

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

пишем внутри переменную channel и дальше, если действий будет много, открываем фигурные скобки и добавляем следующие данные:

  1. Чтобы добавить Permission одному юзеру/боту (в нашем случае я использую @everyone) просто пишем channel.putPermissionOverride(event.getGuild().getPublicRole()).setDeny(list).queue();
  2. Чтобы прописать упомянутым юзерам/ботам (от 1 и более) - я использую for-loop.
  3. Чтобы взять данные из БД, тоже используем for-loop.
  4. Чтобы добавить Permissions нашему боту - используем строчку channel.putPermissionOverride(data.getGuild().getSelfMember()).setAllow(list).queue();
List<Permission> list = Arrays.asList(Permission.MESSAGE_READ, Permission.MESSAGE_WRITE);
String name = data.getEvent().getMessage().getMentionedMembers().get(0).getEffectiveName().toLowerCase().replaceAll(" ", "");
event.getGuild().getCategoriesByName("Hall", true).get(0).createTextChannel(name).queue(
                channel -> {
                    channel.putPermissionOverride(event.getGuild().getPublicRole()).setDeny(list).queue();
                    for (Member member : event.getMentionedMembers()) {
                        try {
                            channel.putPermissionOverride(member).setAllow(list).queue();
                        } catch (Exception ignore){}
                    }
                    for(Access access : new Database().getAccess("WHERE access_high=1")){
                        try {
                            channel.putPermissionOverride(data.getGuild().getRolesByName(access.getRole(), true).get(0)).setAllow(list).queue();
                        } catch (Exception ignore){}
                    }
                    channel.putPermissionOverride(data.getGuild().getSelfMember()).setAllow(list).queue();
                }
        );
READ ALSO
Как добавить LinearLayout (horizontal) программно в LinearLayout (vertical)? [закрыт]

Как добавить LinearLayout (horizontal) программно в LinearLayout (vertical)? [закрыт]

Хотите улучшить этот вопрос? Переформулируйте вопрос, чтобы он был сосредоточен только на одной проблеме, отредактировав его

120
Java проверка открытости UDP порта

Java проверка открытости UDP порта

Не могу написать код, который проверяет открыт UDP порт или нетМне нужно, чтобы мой код обрабатывал ICMP пакеты от системы о том, что порт недоступен

136
No Network Security Config specified

No Network Security Config specified

знаю, что тут уйма ответов на мой вопрос, но я либо неправильно пробую, либо опять же неправильно пробуюРазрабатываю приложение на android

150
Grid Layout in Sass

Grid Layout in Sass

Всем Доброго дня! Подскажите как применить правило Grid к всем child элементам в Sass

136