Así que actualmente estoy tratando de obtener a todos los miembros en línea en un gremio específico y contarlos. Ya probé estos métodos:
let onlineMembers = (await interaction.guild.members.fetch()).filter( (member) => !member.user.bot && member.user.presence.status !== "offline" );y
let onlineMembers = interaction.guild.members.cache.filter(member => member.presence.status !== "offline").sizeTambién intenté buscar a todos los miembros primero y filtrar el resultado de esta manera:
const allMembers = await interaction.guild.members.fetch(); const onlineMembers = allMembers.filter(member => !member.user.bot && member.presence.status !== "offline");Pero siempre obtengo esta excepción:
TypeError: no se puede leer la propiedad 'estado' de indefinido
Así que busqué una solución y noté que tengo que activar manualmente todas las intenciones que quiero que use mi bot. "Activé" las intenciones necesarias en mi index.js así:
const client = new Client({ intents: [ Intents.FLAGS.GUILDS, Intents.FLAGS.GUILD_MESSAGES, Intents.FLAGS.GUILD_MEMBERS, Intents.FLAGS.GUILD_PRESENCES ], });Pero esto tampoco solucionó mi problema.
En el Portal para desarrolladores de Discord también habilité ambos intentos de puerta de enlace privilegiados:
Y quién podría haberlo adivinado... todavía no funciona. Es extraño, porque para algunos miembros funciona, pero necesito que funcione para todos los miembros.
¿Alguien sabe cómo arreglar esto?
Obtener esta información cambió en V13
Este código generará un Objeto con las propiedades online , idle y dnd :
let GUILD_MEMBERS = await client.guilds.cache.get(config.ids.serverID).members.fetch({ withPresences: true }) var onlineMembers = { online: await GUILD_MEMBERS.filter((online) => online.presence?.status === "online").size, idle: await GUILD_MEMBERS.filter((online) => online.presence?.status === "idle").size, dnd: await GUILD_MEMBERS.filter((online) => online.presence?.status === "dnd").size }Hazme saber si esto funciona para ti