【问题标题】:Checking if a member has a certain role检查成员是否具有特定角色
【发布时间】:2020-07-08 18:56:29
【问题描述】:

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

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;

                }

如果有更好的方法,或者如果您知道如何回答我的问题,请告诉我。 谢谢。

【问题讨论】:

    标签: discord-jda


    【解决方案1】:

    您正在尝试检查 List&lt;Role&gt; 是否包含另一个 List&lt;Role&gt;。这不是contains 的工作方式。正确的用法是使用Role 对象而不是List&lt;Role&gt; 对象。

    由于我假设您正在寻找成员具有名称为 "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()

    【讨论】:

    • 是的,没错。我只是将event.getSelfMember() 用于其他用途,并在两者之间感到困惑。
    • 我也遇到了这个错误:Incompatible types: Role is not convertible to String 有没有办法解决这个问题?
    猜你喜欢
    • 2020-10-12
    • 2020-09-14
    • 2010-12-22
    • 2019-06-16
    • 2019-09-07
    • 2021-10-10
    • 1970-01-01
    • 2020-12-05
    相关资源
    最近更新 更多