如何检查用户是否在不和谐中扮演角色
How to check is an user has a role on discord
我正在努力寻找一种方法来检查用户是否有角色。
我知道如何找到某个角色:
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 中协同工作以检查该用户是否具有该角色。
有人可以帮助我吗?
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()
替代方案。
由于文档中还没有这样的功能,您可以这样做:
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)
我正在努力寻找一种方法来检查用户是否有角色。 我知道如何找到某个角色:
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 中协同工作以检查该用户是否具有该角色。
有人可以帮助我吗?
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()
替代方案。
由于文档中还没有这样的功能,您可以这样做:
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)