我正在尝试使用 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
答案 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
的每个元素都有 name
和 members
属性,它们对应于角色名称和角色成员。 members.size
返回拥有该角色的人数。因此该函数的输出将是
roleA - 10
roleB - 15
公会中的每个角色等