简体   繁体   English

列出具有特定角色的用户(discord.js v12)

[英]Listing users who has specific roles (discord.js v12)

I am trying to list all users who have a specific role.我正在尝试列出所有具有特定角色的用户。 I am trying to list the number of users who have that role and the users who have the role.我正在尝试列出具有该角色的用户数和具有该角色的用户数。

Error: TypeError: Cannot read property 'members' of null错误:类型错误: TypeError: Cannot read property 'members' of null

module.exports = {
    name: "list",
    description: "Lists all users with roles",
    async execute(message, client, args) {
        let roleName = message.content.split(" ").slice(1).join(" ");

        if (!roleName) return message.channel.send("Please mention or provide a role ID.");

        message.guild.members.fetch().then((members) => {
            let membersWithRole = members
                .filter((mmbr) => mmbr.roles.cache.get(roleName))
                .map((m) => m.user.tag)
                .join("\n");

            const sizes = message.guild.roles.resolve(roleName).members.size;

            const embed1 = new Discord.MessageEmbed()
                .setTitle(`Users with ${roleName} (${sizes})`) // Users with RoleX, (1 users)
                .setDescription(membersWithRole) //
                .setColor("RANDOM");

            message.channel.send(embed1);
        });
    },
};

RoleManager#resolve accepts a RoleResolvable ( Role , Snowflake ), not a name. RoleManager#resolve接受RoleResolvableRoleSnowflake ),而不是名称。 You'll have to try and find the Role by name.您必须尝试按名称查找Role


module.exports = {
    name: "list",
    description: "Lists all users with roles",
    async execute(message, client, args) {
        const role = message.mentions.roles.first() ? message.mentions.roles.first() : message.guild.roles.cache.find(role => role.name === message.content.split(" ").slice(1).join(" ") || role.id === message.content.split(" ").slice(1).join(" "));
        if (!role) return message.channel.send("Please mention or provide a role ID.");

        const embed = new Discord.MessageEmbed()
            .setTitle(`Users with ${role.name} (${role.members.size})`)
            .setDescription(role.members.map(member => member.user.tag).join(', '))
            .setColor("RANDOM");
        message.channel.send(embed)
    },
};

Note that Role has a property called members , so you don't have to fetch all of the members and check if each of them has the role.请注意Role有一个名为members的属性,因此您不必获取所有成员并检查他们是否每个人都具有该角色。

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

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