'无法读取未定义的属性'缓存'

时间:2020-06-09 11:14:18

标签: javascript discord.js

我已经尝试搜索此问题以及如何在StackOverflow上对其进行修复,但是在我的情况下找不到有效的答案。

我正在尝试创建我的机器人状态显示,其中每台服务器中有多少用户。说,一台服务器有5个,第二台服务器有5个。它将用户计数加在一起并显示“我正在监视2台服务器中的10个用户”。

代码:

            bot.guilds.cache.forEach((guild) => {
              guild.members.fetch().then(g => {
                  let count = 0;
                  g.members.cache.forEach((member) => { <--- error occurs here
                      count++;
                  });
                  console.log(count);
              });
            });

2 个答案:

答案 0 :(得分:2)

您可以为此使用属性guild.memberCount。只需映射公会集合并使用reduce即可获得汇总。

const totalMembers = bot.guilds.cache.map(guild => guild.memberCount).reduce((accumulator, currentValue) => {
    return accumulator + currentValue
}, 0)

完整解决方案

const Discord = require('discord.js')
const bot = new Discord.Client();

bot.on('ready', () => {
    setInterval(() => {
        const totalMembers = bot.guilds.cache.map(guild => guild.memberCount).reduce((accumulator, currentValue) => {
            return accumulator + currentValue
        }, 0)
        const totalGuilds = bot.guilds.cache.size
        bot.user.setPresence({ activity: { name: `${totalMembers} members in ${totalGuilds} servers`, type: 'WATCHING' }});
    }, 1000 * 60 * 10);
})

答案 1 :(得分:-1)

@ Str8,您需要在访问g.members之前对其进行检查。您收到的错误是因为g.members没有成员。


bot.guilds.cache.forEach((guild) => {
              guild.members.fetch().then(g => {
                  let count = 0;
                  g?.members?.cache?.forEach((member) => {
                      count++;
                  });
                  console.log(count);
              });
            });

还要检查为什么成员不参加提取呼叫。