如何显示角色和角色的成员数

时间:2021-06-18 11:35:50

标签: javascript discord.js bots

我正在尝试使用 discord.js 制作一个命令,该命令将显示公会的角色和每个角色的成员数量!到目前为止我正在尝试的一切,它总是让我返回一个错误!

这是我正在尝试的代码:

const roles = message.guild.roles.cache.map(role => role).sort((a, b) => b.position - a.position).slice().join('')

我正在努力寻找一种方法来显示每个角色的成员数量! 我一直在尝试这个:

const size = message.guild.roles.cache.get(roles).members.map(m=>`${m}`).size;

但它返回一个错误:

TypeError: Cannot read property 'members' of undefined

我想显示的就像照片一样: All I want to display is like the photo:

3 个答案:

答案 0 :(得分:1)

您可以做的是获取服务器角色,并将它们从最高位置到最低位置进行排序,然后将它们映射成您想要的样子。

这是一个例子:

let roles = await message.guild.roles.fetch();
message.channel.send(
    roles.cache.sort((a, b) => a.position - b.position).map((r) => `${r.name} - ${r.members.size}`),
  { split: true, code: true }
)

这应该像图片中的那样发送消息

答案 1 :(得分:0)

使用这个:

await <message>.guild.roles.fetch(); //<message> is a placeholder for whatever variable you use for message
const roleArray = <message>.guild.roles.cache.array().sort((a, b) => b.position - a.position)
var members = roleArray.map((r) => {
members.push(r.members.size) //idk if this is right
});
//Now members and roleArray will have paired indexes (roleArray[0] has as many members as members[0])

抱歉,如果它不起作用,我有时会搞砸 .toArray() 和 .array(),我没有测试它。

答案 2 :(得分:0)

我猜这会做到

function getRoleCount() { 
  message.channel.send(message.guild.roles.cache.map(x => `${x.name} - ${x.members.size}`).join('\n'));
}

getRoleCount();

message.channel.send(message.guild.roles.cache 的每个元素都有 namemembers 属性,它们对应于角色名称和角色成员。 members.size 返回拥有该角色的人数。因此该函数的输出将是

roleA - 10
roleB - 15

公会中的每个角色等