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

484
Views
Problema al obtener el número de miembros de todos los gremios + excepto los bots en los gremios (Discord.js)

Haciendo un bot en Discord.js, y quiero ver cuántos usuarios hay en los servidores en los que está el bot (excepto los bots de los servidores)

Lo he estado intentando durante semanas, pero cuando quiero obtener el valor, me da algo más...

Aquí está mi código:

 var AllUsers = 0 client.on('ready', () => { client.guilds.cache.forEach( guild => { var memners = 0 mems = mems + guild.memberCount var Bcount = 0 Bcount = Bcount + guild.members.cache.filter(member => !member.user.bot).size var users = mems - Bcount AllUsers = AllUsers + users }) console.log(`the bot is ready and dealing with ${AllUsers} users`) }

En este código, en realidad estoy exceptuando el recuento de bots del propio MemberCount, ¡pero mi problema es que simplemente no funciona! ¡el código guild.members.cache.filter(*member* => !member.user.bot).size no funciona! no me da error..

De hecho, me da esto (hice algunos console.logs para eso):

 in my Bots server: members: 5 Bcount: 1 users: 4 AllUsers: 4 --------- in Code server: members: 4 Bcount: 1 users: 3 AllUsers: 7 --------- in Games server: members: 3 Bcount: 1 users: 2 AllUsers: 9 ---------

¡Es como si el valor del Bcount fuera " 1 " mientras que no lo es!

Probé: guild.members.cache.filter( member => member.user.bot ).size en lugar de: guild.members.cache.filter(member => !member.user.bot).size y esto vez que el valor de Bcount era " 0 ".

¡Es realmente ridículo! ¡porque todos esos tres servidores tienen 2 bots pero me dieron 1 y 0 !

Por favor, si saben cómo resolver este problema, ayúdenme.

gracias.

about 4 years ago · Juan Pablo Isaza
1 answers
Answer question

0

Su problema aquí es que solo está utilizando los usuarios del caché de miembros, que no garantiza que contenga a todos los usuarios en un servidor. Deberá buscar a los usuarios (solicitarlos desde la API) en lugar de usar el caché.

Aquí está el código tomado directamente de la guía Discord.js aquí :

 // First use guild.members.fetch to make sure all members are cached guild.members.fetch({ withPresences: true }).then(fetchedMembers => { const totalOnline = fetchedMembers.filter(member => member.presence?.status === 'online'); // Now you have a collection with all online member objects in the totalOnline variable console.log(`There are currently ${totalOnline.size} members online in this guild!`); });

Sin embargo, no puede obtener miembros si su bot no tiene la intención de GUILD_MEMBERS junto con esta misma función habilitada en la página de su aplicación de Discord (explicado en el enlace anterior). Aquí está la página de la guía oficial para fines de referencia.

Podemos adaptar el código anterior a sus propósitos específicos con el siguiente código:

 let AllUsers = 0; // async is added here so we can use await in the function client.on('ready', async () => { const guilds = client.guilds.cache; // Loop through all guilds for (let [guildId, guild] of guilds) { // Wait for the members to be fetched, then add to AllUsers const members = await guild.members?.fetch(); // If members is defined, then add the count AllUsers += (members !== undefined) ? members?.filter(member => !member.user.bot).size : 0; } console.log(`the bot is ready and dealing with ${AllUsers} users`); }

Nota: No use var a menos que tenga una razón muy específica. Aquí hay una explicación decente.

El código anterior no es muy eficiente (ni maneja errores potenciales), podría reescribirse para buscar a todos los miembros de todos los gremios al mismo tiempo usando Promise.all(); pero teniendo en cuenta que este código solo se ejecuta en el inicio en este momento, es mejor no enviar todas esas solicitudes a la API a la vez.

Sin embargo, tenga cuidado con este código, no debería buscar a todos los miembros con frecuencia. De hecho, Discord.js v12 solía tener una función .fetchAllMembers() , pero se eliminó debido a que iba en contra de las intenciones de los usuarios de raspado de datos.

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!