【问题标题】:Discord bot not getting all usersDiscord bot 没有获得所有用户
【发布时间】:2019-01-12 11:41:01
【问题描述】:

我使用 Discord.js 编写了一个不和谐机器人,它曾经获取不和谐服务器的所有用户(我只有一个不和谐服务器中的机器人),但现在它只获得 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}`);
  }
}

【问题讨论】:

  • 返回的59名成员和其他成员有什么不同吗?
  • 不仅没有总数了,我认为在服务器中达到 250 多个成员后它停止获得总数,只有 59 - 64
  • 我使用的是版本 12,我也有类似的问题。缓存没有保存服务器中的所有用户。我不知道如何加载用户缓存。

标签: javascript node.js discord.js


【解决方案1】:

这里可能有一个不和谐的设置。

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

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

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

【讨论】:

    【解决方案2】:
    var usersCount = client.guilds.cache.reduce((a, g) => a + g.memberCount, 0)
    

    这对我有用...

    【讨论】:

      【解决方案3】:

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

      【讨论】:

      • 我也遇到了同样的问题。但不幸的是,这对我不起作用。我收到一条错误消息,说 Members didn't arrive in time. 并且机器人崩溃了。
      【解决方案4】:

      在这里聚会有点晚了,但&lt;Client&gt;.users 只返回当时的缓存用户。 Discord.js 会在成员发送消息或获取特定成员时缓存成员。您必须使用 &lt;Guild&gt;.fetchMembers() 遍历公会的每个成员,这会返回每个成员的 member 对象。

      【讨论】:

        【解决方案5】:

        对于机器人所在的每个不和谐服务器,您必须使用 .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}`);
              });
            });
          }
        }
        

        【讨论】:

        • 我遇到了一个错误。 (node:4657) UnhandledPromiseRejectionWarning: TypeError: bot.guilds.get(...).fetchMembers(...).array is not a function at getUsers (/home/sexyexploits/Documents/discord bot/Versions/0.0.11 /le.js:98:69) 在 Client.bot.on (/home/sexyexploits/Documents/discord bot/Versions/0.0.11/le.js:21:3)
        • 我更新了我的答案,你可以试试新代码吗? :-)
        • 请注意,自 2021 年 8 月起,.fetchMembers() 已弃用,并已替换为 guild.members.fetch()
        • 欢迎您编辑我的帖子以纠正这个问题@Guy
        • 提示:只需执行r.user.tag,它将显示完整的用户名和标签,并带有标签
        猜你喜欢
        • 2021-06-25
        • 2019-10-31
        • 2021-03-15
        • 2021-10-18
        • 2020-09-12
        • 2021-12-16
        • 2020-09-10
        • 2019-08-22
        相关资源
        最近更新 更多