He estado tratando de averiguar cómo hacer un sistema de inventario que muestre la lista completa de artículos de esa categoría + una cantidad de usuarios de ese artículo, por ejemplo:
si alguien hace >inv fruits , mostraría:
si hicieran >inv candy , mostraría una lista de elementos diferentes:
Guardo el user_id de usuario, la category , item y la quantity en la tabla de mi base de datos y tengo la lista de artículos en una categoría almacenada en un archivo JSON.
En este momento, solo descubrí cómo extraer el artículo y la cantidad que un usuario tiene de la base de datos, pero ¿cómo mostraría la lista de artículos y haría coincidir el nombre del artículo con la cantidad como en los ejemplos anteriores?
CÓDIGO HASTA AHORA:
const ValidGroup = args[0]; getInventory(user_id = `${message.author.id}`, group_name = `${ValidGroup}`).then(([rows]) => { const InvEmbed = new MessageEmbed() .setAuthor(`${message.author.username} | Inventory`) .setTimestamp(); let cardString = " "; Object.keys(rows).forEach(function (key) { //GET DATA const row = rows[key]; let cardCode = row.card_name; let cardQuan = row.quanity; //CARD ARRAY FORMAT let cardArray = `${Code} | ${CardFullName} - ${cardQuan}` let invArray = cardArray.split("\n") cardString += `\n${invArray}` }); InvEmbed.setDescription(cardString); message.channel.send({ embeds: [InvEmbed] }); });Lo primero que me di cuenta al leer tu código fue la parte en la que hiciste esto:
cardArray.split("\n")En primer lugar, cardArray no es una matriz . Si es una matriz, debe especificar qué es cada elemento en params, ya que las personas no pueden entender qué es un determinado elemento a menos que lo mencione. Puede obtener información sobre cómo hacerlo en: https://jsdoc.app/tags-param.html .
cardArray es una cadena!
const ValidGroup = args[0]; getInventory(user_id = `${message.author.id}`, group_name = `${ValidGroup}`).then(([rows]) => { const InvEmbed = new MessageEmbed() .setAuthor(`${message.author.username} | Inventory`) .setTimestamp(); let cardString = " "; Object.keys(rows).forEach(function (key) { //GET DATA const row = rows[key]; let cardCode = row.card_name; let cardQuan = row.quanity; //CARD ARRAY FORMAT let card = `${Code} | ${CardFullName} - ${cardQuan}` cardString += `${card}\n` }); InvEmbed.setDescription(cardString); message.channel.send({ embeds: [InvEmbed] }); });Cambié el código eliminando invArray y reemplazando cardArray con 'card'. También reemplacé \n al frente y lo moví hacia atrás, por lo tanto, no habría un descanso adicional al comienzo de su descripción.
También puede intentar agregar la captura de errores o verificar si el usuario tiene algo en su inventario; de lo contrario, puede causar ciertos errores, como que MessageEmbed tenga una descripción vacía.