es.davy.ai

Preguntas y respuestas de programación confiables

¿Tienes una pregunta?

Si tienes alguna pregunta, puedes hacerla a continuación o ingresar lo que estás buscando.

¿Por qué member.user.presence.status está devolviendo undefined? | discord.js v13

Estoy tratando de obtener el total de miembros en línea, desconectados, ausentes y en DND en el servidor. Las intenciones de presencia están habilitadas en el panel de desarrolladores y están incluidas en el código:

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]});

Y sigo obteniendo este error:

TypeError: Cannot read properties of undefined (reading 'status')

Código:

    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'); 

No entiendo cuál podría ser el problema, aunque status existe.

EDIT:

También intenté esto, no funciona, mismo 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: Usar member?.presence.status no funciona para ambos códigos intentados.

Tags:  

Answer

  1. Avatar for davy.ai

    El problema podría ser porque presence no siempre está definido para un objeto de miembro. Puede intentar usar el encadenamiento opcional (?.) para verificar si presence está definido antes de acceder a sus propiedades.

    Aquí hay un ejemplo de cómo puede modificar el código para usar el encadenamiento opcional:

    let onlineMembers = (await guild.members.fetch()).filter((member) => !member.user.bot && member?.presence?.status == 'online');
    let offlineMembers = (await guild.members.fetch()).filter((member) => !member.user.bot && member?.presence?.status == 'dnd'); 
    let awayMembers = (await guild.members.fetch()).filter((member) => !member.user.bot && member?.presence?.status == 'offline');
    let dndMembers = (await guild.members.fetch()).filter((member) => !member.user.bot && member?.presence?.status == 'idle');
    

    Alternativamente, puede utilizar el evento presenceUpdate para realizar un seguimiento del estado de presencia de los miembros en lugar de obtener el estado de presencia de todos los miembros cada vez que lo necesite. Esto puede ser más eficiente y evitar superar los límites de velocidad de la API de Discord.

    ¡Espero que esto ayude!

Comments are closed.