Tengo este código para recorrer una colección de roles que funciona.
const guild = client.guilds.cache.get('827888294100074516'); await guild.roles.fetch().then(roles => { for(const role of roles) { console.log(role[1].id + ' ' + role[1].name); } });
pero ¿por qué tengo que referirme al rol como role[1] antes de que funcione?
Porque al iterar sobre un mapa de javascript (del que se deriva la colección discord.js) con for const, el valor que obtiene es una matriz de 2 longitudes donde el elemento 0 es la clave y el elemento 1 es el valor. Aquí hay un ejemplo:
await guild.roles.fetch().then(roles => { for (const role of roles) { console.log(role[0]); // This will give you the role id console.log(role[1]); // This will give you the actual role object, like you've used in your code } }
En cuanto a reescribir su código existente para que no tenga que usar [1]
cada vez que se refiera a role
, puede usar la desestructuración de matrices de esta manera:
await guild.roles.fetch().then(roles => { for (const [id, role] of roles) { // `id` is the role id and `role` is the actual role object console.log(role.id + " " + role.name); } }
También puede usar .forEach()
, como:
await guild.roles.fetch().then(roles => { roles.forEach((role, id) => { // `id` is the role id and `role` is the actual role object console.log(role.id + " " + role.name); }); }
Para obtener una lista completa de las cosas que puede hacer con JavaScript Maps, aquí está el enlace a los documentos de MDN y para obtener una lista completa de las cosas que puede hacer con discord.js Collections (que incluye las cosas que puede hacer con javascript Maps), aquí está el enlace a los documentos de la colección discord.js.
Esto es solo un favor personal de usar un bucle for. El error en su código es que solo obtiene la segunda posición en ese mapa (mientras cuenta desde 0).
const guild = client.guilds.cache.get('827888294100074516'); guild.roles.fetch().then(roles =>{ for(var i in roles){ var role = roles[i]; console.log(`Role id: ${role.id} Role name: ${role.name}`) } })
El gremio es el gremio al que te diriges a buscar. Las funciones de búsqueda obtienen todos los roles. El paréntesis de funciones .then son todos los eventos que suceden después de que se completa la búsqueda. El ciclo for solo va para todas las posiciones dentro de ese mapa y luego consola. registra los datos (identificadores y nombres)