Empecé a jugar con los bots de Discord usando la biblioteca discord.js.
Uno de mis objetivos era obtener los roles del gremio en una matriz. Descubrí una manera de obtenerlo, pero está devolviendo una matriz dentro de otra matriz:
const roles = client.guilds.cache.map(guild => { return guild.roles.cache.map(role=>role.name); }); console.log(roles);Esto está volviendo:
[ [ '@everyone', 'Demi God', 'Bot', 'God', 'Test' ] ]Pensé que debería haber una mejor manera? Pensé que también podría deconstruir la matriz, pero quería saber si había algo que me perdí primero.
Hay un par de formas de obtener una sola matriz.
Usando flat() para aplanar la matriz:
const roles = client.guilds.cache .map((guild) => guild.roles.cache.map((role) => role.name)) .flat(); Usando flatMap() que devolverá una sola colección de roles, por lo que aún necesitará usar map() para devolver una matriz de nombres de roles:
const roles = client.guilds.cache .flatMap((guild) => guild.roles.cache) .map((role) => role.name); Usando reduce() :
const roles = client.guilds.cache.reduce( (acc, guild) => [...acc, ...guild.roles.cache.map((role) => role.name)], [], ); Usando push() :
const roles = []; client.guilds.cache.forEach((guild) => { roles.push(...guild.roles.cache.map((role) => role.name)); }); Si solo desea usar los nombres de los roles, puede usar cualquiera de estos. Si desea usar roles, no solo sus nombres, tal vez flatMap() sea la mejor opción, ya que devuelve una sola colección, similar a guild.roles .