我已经尝试搜索此问题以及如何在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);
});
});
答案 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);
});
});
还要检查为什么成员不参加提取呼叫。