检查成员是否具有特定角色

时间:2020-03-28 01:05:12

标签: discord-jda

我试图仅允许某个角色查看help命令的一部分。 我已经尝试了以下方法,但是它似乎不起作用,它只是显示默认的帮助嵌入:

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 个答案:

答案 0 :(得分:2)

您正在尝试检查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 ...
}

您还仅检查“自我成员”,这意味着您仅检查机器人本身的角色,而不是用户的角色。我认为您可能想改用event.getMember()