简体   繁体   English

如何检查用户是否在 discord 上具有角色

[英]How to check is an user has a role on discord

I am struggling to find a way to check if an user has a role.我正在努力寻找一种方法来检查用户是否具有角色。 I know how to find a certain role:我知道如何找到某个角色:

public Role findRole(Guild guild, String name) {
    List<Role> roles = guild.getRolesByName(name, true);

    if (roles.size() <= 0) {
        throw new RuntimeException("Role with name " + name + " on Guild " + guild.getName() + " not found!");
    } else {
        return roles.get(0);
    }
}

and i have a role: Role neededEole=findRole(event.getGuild(),"Admin");我有一个角色: Role neededEole=findRole(event.getGuild(),"Admin");

I know how to search an user: String user=event.getAuthor().getId();我知道如何搜索用户: String user=event.getAuthor().getId(); or: User user=event.getAuthor();或: User user=event.getAuthor();

But i don't know how to get those two work together in JDA to check if that user has that role.但我不知道如何让这两个在 JDA 中一起工作以检查该用户是否具有该角色。

Can please someone help me?可以请人帮助我吗?

The Member object puts a user in the guild context. Member object 将用户置于公会上下文中。 You can get the member with Guild#getMember(user) .您可以使用Guild#getMember(user)获取成员。 This gives you the option to retrieve guild information of this user:这使您可以选择检索此用户的公会信息:

Member member = guild.getMember(user);
Member member = guild.getMemberById(userId);
List<Member> member = guild.getMembersByName(name, true);
List<Member> member = guild.getMembersByRoles(role);
public Role findRole(Member member, String name) {
    List<Role> roles = member.getRoles();
    return roles.stream()
                .filter(role -> role.getName().equals(name)) // filter by role name
                .findFirst() // take first result
                .orElse(null); // else return null
}

Other ways to access a member instance are outlined in the See Also section of the member documentation: Member .访问成员实例的其他方法在成员文档的See Also部分中概述: 成员 Some events also offer a getMember() alternative if the event could happen in a guild context.如果事件可能发生在公会上下文中,某些事件还提供getMember()替代方案。

I know this post is 1+ year old but for the people coming here to check this you can just do this (I did static in this code because I was putting it in another class):我知道这篇文章已有 1 年以上的历史,但对于来这里检查的人来说,你可以这样做(我在这段代码中做了 static,因为我把它放在另一个类中):

public static boolean hasRole(Member member, Role role) {
  List<Role> memberRoles = member.getRoles();
  return memberRoles.contains(role);
}

Since there's no such feature in the doc yet, you can do this:由于文档中还没有这样的功能,您可以这样做:

boolean hasRole;
  for(int i=0; i<builder.getGuildById(guild).getMemberById(userId).getRoles().size(); i++){
    if("RoleName".equals(builder.getGuildById(guild).getMemberById(userId).getRoles().get(i).getName())){
      hasRole = true;
    }
  }

Then, for true if (hasRole) or false if (!hasRole)然后,对于 true if (hasRole)或 false if (!hasRole)

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM