Business
Jobs
  • About Us
  • Solutions
    • Job Postings
      Post your job and receive qualified candidates in 48h.
    • Candidate Assessments
      500+ technical and psychological tests, plus anti-fraud.
    • Headhunting
      Tailor-made executive search from start to finish.
    • Payroll + EOR
      Payroll dispersal and EOR across 15+ LATAM countries.
  • Pricing
  • Jobs

0

248
Views
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 answers
Answer question

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 Report
Answer question
Find remote jobs

Discover the new way to find a job!

Top jobs
Top job categories
Business
Post vacancy Pricing Sales
Legal
Terms and conditions Privacy policy
© 2026 PeakU Inc. All Rights Reserved.
Andres GPT
Show me some job opportunities
There's an error!