我需要让所有成员都加入 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 个人。
编辑 很长一段时间后,第一个块会抛出一个错误,说“成员没有及时到达。” 所以我假设它超时了。
老实说,我很困惑,只想了解一个公会的所有成员;-;
答案 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
而不是对象本身。