Проверка, играет ли участник определенную роль - PullRequest
0 голосов
/ 28 марта 2020

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

List<Role> staff = event.getGuild().getRolesByName("Staff", true);

                if (event.getGuild().getSelfMember().getRoles().contains(staff)) {

                    final EmbedBuilder ahelp = new EmbedBuilder();

                    ahelp.setTitle("Commands List", null);
                    ahelp.setColor(Color.CYAN);
                    ahelp.addField("Member:", "*help: Returns with this message." +
                            "\n*bugreport <Bug>: Creates a new bug report." +
                            "\n*suggest <Suggestion>: Creates a new suggestion."
                            , false);
                    ahelp.addField("Staff:", "*ban <Member> [Reason]: Bans a member." +
                            "\n*mute <Member> [Reason]: Mutes a member." +
                            "\n*kick <Member> [Reason]: Kicks a member." +
                            "\n*unmute <Member>: Unmutes a member."
                            , false);
                    ahelp.setFooter("Bot • " + dtf.format(now));

                    event.getChannel().sendTyping().queue();
                    event.getChannel().sendMessage(ahelp.build()).queue();
                    return;

                } else {

                    final EmbedBuilder help = new EmbedBuilder();

                    help.setTitle("Commands List", null);
                    help.setColor(Color.CYAN);
                    help.addField("Member:", "*help: Returns with this message." +
                            "\n*bugreport <Bug>: Creates a new bug report." +
                            "\n*suggest <Suggestion>: Creates a new suggestion."
                            , false);
                    help.setFooter("Bot • " + dtf.format(now));

                    event.getChannel().sendTyping().queue();
                    event.getChannel().sendMessage(help.build()).queue();
                    return;

                }

Если есть лучший способ, или если вы знаете, как ответить на мой вопрос, пожалуйста, дай мне знать. Спасибо.

1 Ответ

1 голос
/ 28 марта 2020

Вы пытаетесь проверить, содержит ли List<Role> другой List<Role>. Это не то, как contains работает. Правильное использование будет с объектом Role, а не с объектом List<Role>.

Поскольку я предполагаю, что вы ищете только тот факт, что член имеет роль с именем "Staff", которую вы можете использовать Stream API:

public boolean hasRole(Member member, String name) {
    return member.getRoles().stream().map(Role::getName).anyMatch(name::equalsIgnoreCase);
}

if (hasRole(event.getGuild().getSelfMember(), "Staff")) {
   // ... your code here ...
}

Вы также проверяете только «self member», что означает, что вы проверяете только роли самого бота, а не роли пользователя. Я думаю, что вы можете использовать event.getMember() вместо этого?

...