#javascript #discord.js
#javascript #discord.js
Вопрос:
Я использую message.client.guilds.members.cache.filter(member => !member.user.bot).size
для вывода количества пользователей во всех гильдиях вместе взятых, но я получаю ошибку TypeError: Cannot read property 'cache' of undefined
, но кэш работает в этом коде для кэширования всех гильдий message.client.guilds.cache.size
. Итак, как я могу это исправить и вывести количество пользователей во всех гильдиях вместе взятых?
Комментарии:
1. можете ли вы console.log(message.client.guilds) и опубликовать его здесь?
2. @RanMarciano я получил
9
Ответ №1:
В вашем коде есть несколько ошибок. Прежде всего, message.client.guilds
возвращает a GuildManager
, у которого нет members
свойства.
Чтобы получить всех участников в каждой гильдии, вам нужен способ перебора каждой гильдии, например Collection.prototype.each()
метод.
message.client.guilds.each((guild) =>
// this function will be executed for every element (guild) in the collection
console.log(`${guild.name} has ${guild.members.cache.size} members`)
);
Если вы хотите сложить все подсчеты вместе, вам следует использовать Collection.prototype.reduce()
message.client.guilds.reduce((acc, guild) => acc guild.members.cache.size, 0);
Разница между приведенным выше фрагментом и вторым фрагментом, который вы предоставили в своем коде:
// this line is looking at the GuildMemberManager cache (`guild.members.cache`)
message.client.guilds.reduce((acc, guild) => acc guild.members.cache.size, 0);
// this line is looking at the GuildManager cache (`client.guilds.cache`)
message.client.guilds.cache.size;
Вам нужно посмотреть оба кэша. Вышеупомянутое GuildManager
не является коллекцией гильдий, поэтому любая попытка перебрать их не сработает.
message.client.guilds.cache.reduce(
(acc, guild) => acc guild.members.cache.size,
0
);
Кроме того, в этом подсчете будут учитываться только кэшированные участники из каждой гильдии, что очень редко бывает со всеми. Лучшим решением будет просмотр количества участников непосредственно из объекта guild, который не подвержен кэшированию.
message.client.guilds.cache.reduce((acc, guild) => acc guild.memberCount, 0);