Reputation:
I'm trying to get the total of online, offline, idle and DND members in the server. Presence intents are enabled in the developers panel and are included in the code:
const client = new discord.Client({ partials: ["CHANNEL"], intents: [discord.Intents.FLAGS.GUILDS, discord.Intents.FLAGS.GUILD_MESSAGES, discord.Intents.FLAGS.GUILD_MESSAGE_REACTIONS, discord.Intents.FLAGS.GUILD_MEMBERS, discord.Intents.FLAGS.GUILD_PRESENCES, discord.Intents.FLAGS.DIRECT_MESSAGES, discord.Intents.FLAGS.DIRECT_MESSAGE_TYPING, discord.Intents.FLAGS.GUILD_MESSAGE_TYPING]});
And I keep getting this error:
TypeError: Cannot read properties of undefined (reading 'status')
Code:
let onlineMembers = (await guild.members.fetch()).filter((member) => !member.user.bot && member.user.presence.status == 'online');
let offlineMembers = (await guild.members.fetch()).filter((member) => !member.user.bot && member.user.presence.status == 'dnd');
let awayMembers = (await guild.members.fetch()).filter((member) => !member.user.bot && member.user.presence.status == 'offline');
let dndMembers = (await guild.members.fetch()).filter((member) => !member.user.bot && member.user.presence.status == 'idle');
I'm not understanding what could be the issue, even though status
does exist
EDIT:
Also tried this, doesn't work, same error:
let onlineMembers = message.guild.members.cache.filter(member => member.presence.status == "online").size;
let offlineMembers = message.guild.members.cache.filter(member => member.presence.status == "offline").size;
let awayMembers = message.guild.members.cache.filter(member => member.presence.status == "idle").size;
let dndMembers = message.guild.members.cache.filter(member => member.presence.status == "dnd").size;
EDIT 2: using member?.presence.status
doesn't work for both codes attempted
Upvotes: 1
Views: 1288
Reputation: 9041
User
s don't have presences. Only GuildMember
s do. The member's presence is either null
or offline
when they are offline
let onlineMembers = message.guild.members.cache.filter(member => member.presence?.status == "online").size
let offlineMembers = message.guild.members.cache.filter(member => !member.presence || member.presence.status == "offline").size
let awayMembers = message.guild.members.cache.filter(member => member.presence?.status == "idle").size
let dndMembers = message.guild.members.cache.filter(member => member.presence?.status == "dnd").size
Use optional chaining (?.
) to check if it's nullish
Upvotes: 1