user17712850
user17712850

Reputation:

Why is member.user.presence.status returning undefined? | discord.js v13

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

Answers (1)

MrMythical
MrMythical

Reputation: 9041

Users don't have presences. Only GuildMembers 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

Related Questions