I'm using discord.js v13 and I receive the following error when trying to use the member presence to check their status:
Error:
TypeError: Cannot read properties of null (reading 'status')
at /home/runner/DinBot-Slash-CMDS/slashcmds/utilidad/serverinfo.js:59:76
at Map.filter (/home/runner/DinBot-Slash-CMDS/node_modules/discord.js/node_modules/@discordjs/collection/dist/index.js:1:2066)
at Object.run (/home/runner/DinBot-Slash-CMDS/slashcmds/utilidad/serverinfo.js:59:43)
at Client.<anonymous> (/home/runner/DinBot-Slash-CMDS/index.js:43:18)
at Client.emit (node:events:390:28)
at InteractionCreateAction.handle (/home/runner/DinBot-Slash-CMDS/node_modules/discord.js/src/client/actions/InteractionCreate.js:70:12)
at Object.module.exports [as INTERACTION_CREATE] (/home/runner/DinBot-Slash-CMDS/node_modules/discord.js/src/client/websocket/handlers/INTERACTION_CREATE.js:4:36)
at WebSocketManager.handlePacket (/home/runner/DinBot-Slash-CMDS/node_modules/discord.js/src/client/websocket/WebSocketManager.js:350:31)
at WebSocketShard.onPacket (/home/runner/DinBot-Slash-CMDS/node_modules/discord.js/src/client/websocket/WebSocketShard.js:443:22)
at WebSocketShard.onMessage (/home/runner/DinBot-Slash-CMDS/node_modules/discord.js/src/client/websocket/WebSocketShard.js:300:10)*
Code:
const members = interaction.guild.members.cache;
.addField('Presencia',
`**Conectado:** ${members.filter(member => member.presence.status === 'online').size}\n` +
`**Ausentes:** ${members.filter(member => member.presence.status === 'idle').size}\n` +
`**No Molestar:** ${members.filter(member => member.presence.status === 'dnd').size}\n` +
`**Desconectado:** ${members.filter(member => member.presence.status === 'offline').size}\n` + '\u200b'
)
First, make sure GUILD_PRESENCES intent is enabled: https://stackoverflow.com/a/68528046/6126373
In v13, the presence property can now be null, so make sure you also check that by using the optional chaining operator or by checking if member.presence is truthy:
members.filter((member) => member.presence?.status === 'online').size;
// OR
members.filter((member) => member.presence && member.presence.status === 'online').size;