提问者:小点点

Discord bot未获得所有成员


我想做一个命令,告诉我机器人所在的服务器中的用户总数。我搜索了一下怎么做,发现是这样的:

const users = await client.users.cache.size

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


共1个答案

匿名用户

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

我不认为有一个单一的方法或属性来获取bot所在的每个服务器的成员总数。您可能可以迭代客户机当前处理的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);