【问题标题】:Discord.js memberCount and members++ return different valuesDiscord.js memberCount 和 members++ 返回不同的值
【发布时间】:2018-09-29 09:55:55
【问题描述】:

目前我正在开发一个 Discord 机器人功能,用于计算公会中使用我的机器人的用户。 奇怪的是,我注意到 countMembers 和遍历 guild 并增加成员计数器返回不同的值

client.guilds.forEach((guild) => {
    var cnt = 0;
    console.log(guild.name + " " +guild['memberCount'])
    guild.members.forEach((member) => {
        cnt = cnt +1;
            if(member.presence.status == 'online' || member.presence.status == 'idle' || member.presence.status == 'dnd'){
                var data = guild.name + ":@" + member.id + "\n";
                fs.appendFile('guild-audit.txt', data, function (err) {
                  if (err) throw err;
                }); 
            }else{
                var data = guild.name + ":" + member.id + "\n";
                fs.appendFile('guild-audit.txt', data, function (err) {
                  if (err) throw err;
                }); 
            }
    })
    console.log(guild.name + " " + cnt.toString());
})

例如:

memberCount = GuildX 1596
cnt = GuildX 175

memberCount = GuildY 2385
cnt = GuildY 2365

memberCount 和遍历成员的区别在哪里? 我检查了文档,我认为两者都应该返回完全相同的值

【问题讨论】:

    标签: node.js discord discord.js


    【解决方案1】:

    不太确定,但guild.members 可能只有缓存的成员。您可以尝试获取所有成员并使用以下方式计算它们:

    client.guilds.forEach((guild) => {
        guild.fetchMembers().then(g => {
            let count = 0;
            g.members.forEach((member) => {
                count++;
            });
            console.log(count);
        });
    
    });
    

    【讨论】:

    • 看起来这可能有效。你是对的,我联系了 Discordjs 官方频道的成员,他们说它只有缓存的成员。看起来获取成员需要很长时间,并且在获取完成之前其他进程仍在继续。您认为在获取完成之前可以等待写入文件吗?不幸的是,我需要这样做,因为我需要用户/组关系。
    • 你可以让整个函数异步等待结果
    • 我已经用异步等待方法更新了我的问题。它看起来像这样吗?
    • 不完全。您将需要更新您通过单位的所有功能。
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2016-03-23
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2018-10-17
    • 2021-02-02
    • 2021-08-13
    相关资源
    最近更新 更多