Empresas
Empleos
  • Sobre nosotros
  • Soluciones
    • Publicación de vacantes
      Publica tu vacante y recibe candidatos calificados en 48h.
    • Evaluación de candidatos
      500+ pruebas técnicas y psicológicas, más anti-fraude.
    • Headhunting
      Búsqueda ejecutiva a la medida de principio a fin.
    • Nómina + EOR
      Dispersión de nómina y EOR en más de 15 países de LATAM.
  • Precios
  • Empleos

0

254
Vistas
Obtener el número de personas con precencia especificada (Discord.js)

Así que tengo este fragmento de código que funcionó para d.js v12 pero ahora está roto en v13, he estado tratando durante un tiempo de encontrar una solución, también pregunté en su servidor de discordia pero nadie sabe, el problema es que el el código simplemente deja de ejecutarse cuando la cantidad de personas en línea está desconectada, etc., no hay errores, simplemente deja de ejecutarse.

cuando solo se obtiene 1 usuario y se registra su estado, no cuando se obtienen los estados de todos.

 const members = message.guild.members.cache; const online = members.filter((m) => m.presence.status === 'online').length; const offline = members.filter((m) => m.presence.status === 'offline').length; const dnd = members.filter((m) => m.presence.status === 'dnd').length; const afk = members.filter((m) => m.presence.status === 'idle').length;
about 4 years ago · Juan Pablo Isaza
1 Respuestas
Responde la pregunta

0

Hay dos problemas en su código, pero son tan sutiles que la mayoría no los notaría. La mayoría de la gente asumiría de inmediato que el problema son las intenciones, pero las intenciones no son el verdadero problema aquí.

El primer problema es que GuildMember.presence puede no estar undefined cuando se usa guild.members.cache . Eso significa que intentar hacer m.presence.status cuando m.presence no está undefined provocará un error. Por ejemplo, mientras jugaba con el comando eval de mi bot de discordia, intenté filtrar las ID de todos los miembros de mi gremio de prueba que tienen presencias undefined o null . Descubrí que todos los miembros que habían estado desconectados/invisibles desde antes de que el bot se conectara (como yo), tenían presencias undefined . Cuando configuré mi estado para no molestar y luego volví a invisible, el caché se actualizó y mi presencia ya no estaba undefined (y estaba "offline" , como se esperaba). No estoy seguro de por qué ocurre exactamente esto, ya que incluso buscar a todos los miembros del gremio no elimina las presencias undefined . Tengo todas las intenciones relevantes también.

El segundo problema es que guild.members.cache.filter() devuelve una Collection , no una Array . La clase Collection no tiene una propiedad .length ; tienes que usar .size en su lugar.

Este es un ejemplo de cómo solucionaría estos problemas:

 const members = message.guild.members.cache; const online = members.filter(m => m.presence?.status === 'online').size; const offline = members.filter(m => !m.presence || m.presence.status === 'offline').size; const dnd = members.filter(m => m.presence?.status === 'dnd').size; const afk = members.filter(m => m.presence?.status === 'idle').size;

Estoy usando el ?. Operador de encadenamiento opcional para mayor comodidad aquí. Puede reemplazar m.presence?.status con m.presence && m.presence.status si no se siente cómodo usando el encadenamiento opcional (o no puede debido a una versión de nodo inferior).

Básicamente, esta respuesta resuelve el primer problema al verificar si m.presence no está undefined antes de determinar el estado del miembro. Dado que m.presence no está undefined para algunos usuarios sin conexión, si m.presence no está undefined para un miembro, lo incluimos en el recuento de miembros sin conexión y lo excluimos de todos los demás recuentos de miembros. Cómo esta respuesta resuelve el segundo problema es bastante sencillo; simplemente reemplazamos .length con .size .

Recursos relevantes:
https://discord.js.org/#/docs/collection/main/class/Collection?scrollTo=filter https://discord.js.org/#/docs/main/stable/class/GuildMember?scrollTo=presence

about 4 years ago · Juan Pablo Isaza Denunciar
Responde la pregunta
Encuentra empleos remotos

¡Descubre la nueva forma de encontrar empleo!

Top de empleos
Top categorías de empleo
Empresas
Publicar vacante Precios Comercial
Legal
Términos y condiciones Política de privacidad
© 2026 PeakU Inc. All Rights Reserved.
Andres GPT
Recomiéndame algunas ofertas
Necesito ayuda