Discord bot并未吸引所有用户

时间:2018-08-05 06:26:09

标签: javascript node.js discord.js

我已经使用Discord.js编写了一个discord bot,它用来获取discord服务器的所有用户(我仅在一个discord服务器中拥有该bot),但是现在它仅获得59个成员。我的服务器中有300多个不和谐的用户。

var Discord = require('discord.js');
var bot = new Discord.Client();

function getUsers() {
  let users = bot.users.array();

  for (let i = 0; i < users.length; i++) {
    let username = `${users[i].username}#${users[i].discriminator}`;
    console.log(`[${i}] ${username}`);
  }
}

5 个答案:

答案 0 :(得分:3)

这里有一个不和谐方面的设置可能与此相关。

<块引用>

如果您的机器人跟踪服务器成员或下载整个成员列表,您可能需要服务器成员意图接收成员事件和成员列表。

转到 https://discord.com/developers/ 并选择您的 Discord 应用程序,转到机器人设置,然后在“特权网关意图”下启用“服务器成员意图”。

Priviliged Gateway Intents > Server Members Intent

来源:https://github.com/discordjs/discord.js/issues/3774#issuecomment-717824144

答案 1 :(得分:2)

您必须对机器人所在的每个不和谐服务器使用方法.fetchMembers()

尝试使用以下代码:

function getUsers() {
  let guilds = bot.guilds.array();

  for (let i = 0; i < guilds.length; i++) {
    bot.guilds.get(guilds[i].id).fetchMembers().then(r => {
      r.members.array().forEach(r => {
        let username = `${r.user.username}#${r.user.discriminator}`;
        console.log(`${username}`);
      });
    });
  }
}

答案 2 :(得分:0)

在这里晚点参加聚会,但是<Client>.users仅返回此时的缓存用户。例如,Discord.js在成员发送消息或获取特定成员时会对其进行缓存。您将必须使用<Guild>.fetchMembers()浏览公会的每个成员,该公会返回每个成员的member对象。

答案 3 :(得分:0)

如果您使用discord.js v12,则应该为guild.members.fetch(),它将缓存所有成员。

答案 4 :(得分:0)

var usersCount = client.guilds.cache.reduce((a, g) => a + g.memberCount, 0)

这对我有用...