不和谐机器人没有得到所有的成员

2022-02-23 00:00:00 node.js javascript discord.js

我想要执行一个命令,告诉我机器人所在的服务器中的用户总数。我搜索了一下如何制作它,找到了这个:

const users = await client.users.cache.size

但当我使用它时,机器人告诉我它只为一个用户服务。


解决方案

client.users是已在任何点缓存的所有用户对象,由其ID映射。

我认为没有一个方法或属性可以获取机器人所在的每台服务器的成员总数。您可能会迭代客户端当前正在处理的guilds并取回成员。

以下内容应可用:

async function getTotalNumberOfMembers(client) {
  const guilds = client.guilds.cache;
  let numberOfMembers = 0;

  // resolves once members from every guild is fetched
  await Promise.all(
    guilds.map(async (guild) => {
      const members = await guild.members.fetch();
      numberOfMembers += members.size;
    }),
  );

  return numberOfMembers;
}

// ...

const total = await getTotalNumberOfMembers(client);
console.log(total);

编辑:可以,您也可以使用.memberCount属性:

function getTotalNumberOfMembers(client) {
  const guilds = client.guilds.cache;
  let numberOfMembers = 0;

  guilds.each((guild) => {
    numberOfMembers += guild.memberCount;
  });

  return numberOfMembers;
}

const total = getTotalNumberOfMembers(client);

相关文章