es.davy.ai

Preguntas y respuestas de programación confiables

¿Tienes una pregunta?

Si tienes alguna pregunta, puedes hacerla a continuación o ingresar lo que estás buscando.

Un sistema de inventario discord.js que muestra una lista completa.

He estado tratando de descubrir cómo hacer un sistema de inventario que muestre la lista completa de los artículos de esa categoría junto con la cantidad de ese artículo del usuario, por ejemplo:

Si alguien escribe “>inv fruits”, mostraría:
– manzana – 0
– banana – 1
– naranja – 3

Si escribieran “>inv candy”, mostraría una lista diferente de artículos:
– chocolate – 2
– paleta – 0
– Skittles – 0

Almaceno el “user_id”, la “categoria”, el “elemento” y la “cantidad” en mi tabla de base de datos y tengo la lista de artículos en una archivo JSON.

Por ahora, solo he logrado 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 asociaría el nombre del artículo con la cantidad como 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} | Inventario`)
    .setTimestamp();

    let cardString = "";

    Object.keys(rows).forEach(function (key) {

        //OBTENER DATOS
        const row = rows[key];
        let cardCode = row.card_name;
        let cardQuan = row.quanity;

        //FORMATO DE MATRIZ DE TARJETAS
        let cardArray = `${Code} | ${CardFullName} - ${cardQuan}`
        let invArray = cardArray.split("\n")
        cardString += `\n${invArray}`
    });


    InvEmbed.setDescription(cardString);

    message.channel.send({ embeds: [InvEmbed] });

});
Tags:  , , , ,

Answer

  1. Avatar for davy.ai

    Para mostrar la lista de elementos y relacionar el nombre del elemento con la cantidad, puedes seguir estos pasos:

    1. Recuperar la lista de elementos desde el archivo JSON basado en la categoría ingresada por el usuario.
    2. Recorrer la lista de elementos y recuperar la cantidad de cada elemento desde la base de datos según el user_id y la categoría.

    3. Combinar el nombre del elemento y la cantidad en una cadena en el formato “item_name – cantidad”.

    4. Agregar la cadena combinada a una nueva variable de cadena para cada elemento.

    5. Enviar la cadena final como un mensaje incrustado en Discord.

    Aquí hay un fragmento de código actualizado que debería lograr esto:

    const ValidGroup = args[0];
    
    // Recuperar la lista de elementos desde el archivo JSON
    const items = require('./items.json')[ValidGroup];
    
    getInventory(user_id = `${message.author.id}`, group_name = `${ValidGroup}`).then(([rows]) => {
    
      const InvEmbed = new MessageEmbed()
        .setAuthor(`${message.author.username} | Inventario`)
        .setTimestamp();
    
      let itemString = "";
    
      // Recorrer la lista de elementos y recuperar la cantidad de cada elemento
      items.forEach(item => {
        getInventory(user_id, ValidGroup, item).then(([rows]) => {
          const quantity = rows[0].quantity || 0; // Usar 0 como valor predeterminado si no se devuelven filas
          itemString += `${item} - ${quantity}\n`;
        });
      });
    
      // Después de que se hayan recuperado todas las cantidades, agregar la cadena final al incrustado y enviar
      Promise.all(items.map(item => getInventory(user_id, ValidGroup, item))).then(results => {
        InvEmbed.setDescription(itemString);
        message.channel.send({ embeds: [InvEmbed] });
      });
    
    });
    

    Nota: También deberás modificar tu función getInventory para aceptar un parámetro opcional item que filtra las filas según el nombre de elemento específico y actualizar tu consulta SQL en consecuencia.

Comments are closed.