【问题标题】:How to get all members in a Guild using discord.js如何使用 discord.js 让公会中的所有成员
【发布时间】:2021-05-29 11:15:25
【问题描述】:

我需要让所有成员加入 Discord 服务器/公会。而且这个解决方案必须在人数最多的不和谐服务器上运行。

我已经尝试了以下

async function getMembers(message){
    console.log('getting members')
    let members = await message.guild.members.fetch();
    console.log('members are \n'+members);
}

和

message.guild.members.cache.array().forEach(member => {})

但是第一个代码块永远不会得到承诺,如果我在没有等待的情况下尝试它,它会说它以 {} 的形式等待。虽然第二种解决方案不会让每个人都进入服务器,但我很确定只有缓存中​​的人。 IE。在我有 6 人的测试服务器中,它只会得到其中 2 人。

编辑很长一段时间后,第一个块会抛出一个错误,说“成员没有及时到达。”所以我假设它正在超时。

老实说,我很困惑,只想知道公会的所有成员;-;

【问题讨论】:

  • 非常不建议在公会内部拉取所有成员,因为拉取一个人的过程需要一段时间,而拉取数十、数百甚至数千人只是一个真实的机器人过量。如今,大多数 Discord 用户已经被缓存,因此我强烈建议使用 message.guild.members.cache.forEach(member => console.log(member.user.username))(只需输入 member 就会向您的控制台发送数百个对象及其属性的垃圾邮件)。

标签: node.js discord.js


【解决方案1】:

花了很多时间寻找答案后,我终于偶然发现了这篇文章

https://www.publish0x.com/bala/how-i-fixed-an-issue-with-discord-bot-not-caching-all-users-xjjndxy

对我来说,我无法以其他方式获取所有用户。

【讨论】:

    【解决方案2】:

    如上所述,不建议在公会中获取大量成员,除非您需要它们,这与性能没有特别的关系,它可以获取多快取决于您的主机连接的稳定程度。如果您的连接速度很快,那么获取所有成员可能不会花费任何时间。

    大部分成员都会被缓存,所以你可以使用上面的解决方案:

    message.guild.members.cache.forEach(member => console.log(member.user.username));
    //credit to @Bqre
    

    您上面的代码可能会因为控制台中记录的 guildMember 对象的数量而超时,请确保您记录的是 member.username 而不是对象本身。

    【讨论】:

    • 是的,我后来意识到我需要做的是,我实际上并不需要公会中的每个人都工作,我使用了缓存。谢谢!
    猜你喜欢
    • 2021-05-26
    • 2021-06-26
    • 2020-08-15
    • 1970-01-01
    • 1970-01-01
    • 2023-04-09
    • 2021-10-24
    • 2020-11-21
    • 1970-01-01
    相关资源
    最近更新 更多