如何使用discord.js获取公会中的所有成员

时间:2021-02-27 07:32:33

标签: node.js discord.js

我需要让所有成员都加入 Discord 服务器/公会。而且这个解决方案必须适用于人数最多的 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 个人。

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

老实说,我很困惑,只想了解一个公会的所有成员;-;

2 个答案:

答案 0 :(得分:1)

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

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

对我来说,我不能用另一种方式来获取所有用户。

答案 1 :(得分:0)

如上所述,除非需要,否则不建议在公会中获取大量成员,这与性能没有特别关系,获取速度取决于主机连接的稳定性。如果您的连接速度很快,那么获取所有成员根本不需要时间。

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

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

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