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

302
Vistas
Caché de actualización de Discord.js para extraer todos los miembros que tienen rol

Actualmente tiene problemas para extraer a todos los miembros que tienen un rol determinado. Actualmente puedo obtener una lista de nombres, pero solo aquellos que están almacenados en caché actualmente. Si dejo mi bot funcionando durante unas horas, extraerá más, pero nunca extraerá a todos los miembros que tienen ese rol. He leído algunas cosas diferentes sobre el uso del comando .fetch() pero aún no tengo dados.

 const client = new Client({ intents: [ Intents.FLAGS.GUILDS, Intents.FLAGS.GUILD_MESSAGES, Intents.FLAGS.GUILD_VOICE_STATES, Intents.FLAGS.GUILD_MEMBERS ] }); msg.channel.send('exporting all members with delcared role'); msg.guild.roles.fetch('guildId');//cache roles i think? let role = msg.guild.roles.cache.find(r => r.name === 'Sysadmins'); msg.guild.members.fetch('roleId');//cache members i think? let list = msg.guild.roles.cache.get(roleID).members.map(m => m.nickname) console.log(role); console.log(list);

La consola.log(); devuelve mi apodo como se esperaba, pero solo el mío y sé que hay al menos otros 10 con este rol.

Otras preguntas similares que ya he intentado:

Pregunta similar #1

Pregunta similar #2

about 4 years ago · Juan Pablo Isaza
3 Respuestas
Responde la pregunta

0

@DanLop, su respuesta junto con @MrMythical y algunas otras preguntas de desbordamiento de pila me ayudaron a resolver esta. Pude usar las funciones asíncronas correctamente para extraer todos los datos que necesito a continuación, es lo que terminé.

Solución:

 client.on('messageCreate', async msg => { //TODO here }); let list = client.guilds.cache.get(tempGuildId); try { await list.members.fetch(); let role1 = list.roles.cache.get(roleId).members.map(m => m.displayName); console.log(role1); } catch (err) { console.error(err); }
about 4 years ago · Juan Pablo Isaza Denunciar

0

Es cercano, pero mucho más simple, con 3 líneas.

 await msg.guild.members.fetch() // fetch all members and cache them const role = msg.guild.roles.cache.get("id") // get role from cache by ID (roles are always cached) const list = role.members.map(m => m.nickname) // map members by nickname
about 4 years ago · Juan Pablo Isaza Denunciar

0

Dado que le está dando al método fetch() un argumento String, solo se buscará el usuario que coincida con ese String, más como un get() . Además, el método fetch() devuelve una Promesa, lo que significa que se debe esperar al método para recibir los datos.

Tu método fetch() debería verse así:

 await msg.guild.members.fetch();

De esta manera, le dice a Node.js que debe esperar hasta que reciba los datos prometidos antes de continuar.

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