Discord bot 没有获得所有用户

Posted

技术标签:

【中文标题】Discord bot 没有获得所有用户【英文标题】:Discord bot not getting all users 【发布时间】: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,我也有类似的问题。缓存没有保存服务器中的所有用户。我不知道如何加载用户缓存。 【参考方案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,它将显示完整的用户名和标签,并带有标签

以上是关于Discord bot 没有获得所有用户的主要内容,如果未能解决你的问题,请参考以下文章

Discord.py 重写 get_member() 函数,为除 bot 之外的所有用户返回 None

Discord Bot 选择角色不会将角色授予用户

我如何获得由 discord bot maker 创建的 Discord Bot 在 Heroku 上工作

Discord Bot- 使用 YAGPDB bot 的反应投票

使用 Codeforces API 通过 discord bot (discord.py) 获取有关用户在 CF 问题上的所有 AC 的信息 - python 中的 json 文件处理错误

Discord Bot 删除特定频道中的消息