如何检查用户是不是在不和谐中扮演角色

Posted

技术标签:

【中文标题】如何检查用户是不是在不和谐中扮演角色【英文标题】:How to check is an user has a role on discord如何检查用户是否在不和谐中扮演角色 【发布时间】:2020-03-14 09:39:36 【问题描述】:

我正在努力寻找一种方法来检查用户是否具有角色。 我知道如何找到某个角色:

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);
    

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

我知道如何搜索用户:String user=event.getAuthor().getId(); 或:User user=event.getAuthor();

但我不知道如何让这两者在 JDA 中协同工作以检查该用户是否具有该角色。

有人可以帮帮我吗?

【问题讨论】:

【参考方案1】:

Member 对象将用户置于公会上下文中。您可以通过Guild#getMember(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

成员文档的See Also 部分概述了访问成员实例的其他方法:Member。如果事件可能发生在公会环境中,某些事件还提供getMember() 替代方案。

【讨论】:

非常感谢您,这几天的搜索,您帮了我很多,它有效,再次感谢您!【参考方案2】:

由于文档中还没有这样的功能,你可以这样做:

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;
    
  

那么,为真if (hasRole) 或假if (!hasRole) ?

【讨论】:

以上是关于如何检查用户是不是在不和谐中扮演角色的主要内容,如果未能解决你的问题,请参考以下文章

向在不和谐中扮演角色的每个人发送私人消息

检查提到的用户是不是在 discord.js 中具有角色

如何检查未登录用户是不是有角色?

如何检查用户是不是在 Meteor 中具有特定角色

DNN 检查用户是不是在角色组中

如何检查用户是不是具有特定角色并因此允许某些操作?