a part of my code is repeating itself several times and I don't know how to solve it

81 Views Asked by At

this is a payment gateway using paid market

for some reason to verify the payment it is sending several and several error messages of the type

❌  | Algum erro detectado
AxiosError: connect ETIMEDOUT 108.139.97.216:443
    at TCPConnectWrap.afterConnect [as oncomplete] (node:net:1495:16) {
  port: 443,
  address: '108.139.97.216',
  syscall: 'connect',
  code: 'ETIMEDOUT',
  errno: -4039,
  config: {
    transitional: {
      silentJSONParsing: true,
      forcedJSONParsing: true,
      clarifyTimeoutError: false
    },
    adapter: [Function: httpAdapter],
    transformRequest: [ [Function: transformRequest] ],
    transformResponse: [ [Function: transformResponse] ],
    timeout: 0,
    xsrfCookieName: 'XSRF-TOKEN',
    xsrfHeaderName: 'X-XSRF-TOKEN',
    maxContentLength: -1,
    maxBodyLength: -1,
    env: { FormData: [Function] },
    validateStatus: [Function: validateStatus],
    headers: {
      Accept: 'application/json, text/plain, */*',
      Authorization: 'Bearer APP_USR-5678297262813678-121209-8a3077b4dbc6e69f79cad7d65dae1e9c-1184595585',
      'User-Agent': 'axios/0.27.2'
    },
    method: 'get',
    url: 'https://api.mercadolibre.com/collections/notifications/61870666058',
    data: undefined
  },

but it is still acknowledging that the payment has been approved

what happens is that after being approved it is in an infinite loop of approvals

which even sends several messages of approved payment and adds the amount enter image description here

this is the code:

const Discord = require("discord.js")
const { JsonDatabase, } = require("wio.db");
const axios = require("axios")
const moment = require("moment")
var mercadopago = require("mercadopago");
const db3 = new JsonDatabase({ databasePath:"./databases/myJsonIDs.json" });
const dbcv = new JsonDatabase({ databasePath:"./databases/myJsonBotConfig.json" });
const db4 = new JsonDatabase({ databasePath:"./databases/myJsonSaldo.json" });

module.exports = {
    name: "adicionarsaldo", 
    run: async(client, message, args) => {

      const row = new Discord.MessageActionRow()
        .addComponents(
          new Discord.MessageButton()
            .setCustomId(`gerarpix`)
            .setEmoji('<:Dinheiro:1114682101917307011>')
            .setLabel('Adicionar Saldo')
            .setStyle('PRIMARY'),
        );
        
        const embed = await message.reply({ embeds: [new Discord.MessageEmbed()
          .setTitle(`${dbcv.get(`title`)} | Adicionar saldo`)
          .setDescription(`**> Olá, aqui você pode adicionar saldo.**`)
          .setThumbnail(`${dbcv.get(`foto`)}`)
          .setFooter({ text: `${dbcv.get(`title`)} | Todos os Direitos Reservados.` })
          .setColor(dbcv.get(`color`))], components: [row]})
        const interação = embed.createMessageComponentCollector({ componentType: "BUTTON", });
        interação.on("collect", async (interaction) => {
         if (message.author.id != interaction.user.id) {
             return;
           }
        

        
          if (interaction.customId === "gerarpix") {
            interaction.deferUpdate();
            message.channel.send(`<a:carregando4:1104203026304073798> | Qual o valor de saldo que você quer adicionar (mesmo valor que você vai pagar)?`).then(msg => {
             const filter = m => m.author.id === interaction.user.id;
             const collector = msg.channel.createMessageCollector({ filter, max: 1 });
             collector.on("collect", message => {
             message.delete()
             const newsa = message.content
             db4.set(`${interaction.user}.id`, `${interaction.user}`)
             db4.set(`${interaction.user}.saldopendente`, `${newsa}`)
             msg.edit("<a:sim:1104203193958813726> | O saldo está pendente, pague!")
             const severi = interaction.customId;
             let quantidade1 = 1;
            let precoalt = newsa;
            var data_id = Math.floor(Math.random() * 999999999999999);
            db3.set(`${data_id}.id`, `${data_id}`)
            db3.set(`${data_id}.status`, `Pendente (1)`)
            db3.set(`${data_id}.userid`, `${interaction.user.id}`)
            db3.set(`${data_id}.nomeid`, `saldo`)
            db3.set(`${data_id}.qtdid`, `${quantidade1}`)
            db3.set(`${data_id}.precoid`, `${precoalt}`)
            db3.set(`${data_id}.entrid`, `Andamento`)
            const timer2 = setTimeout(function() {
                if ((interaction.guild.channels.cache.find(c => c.topic === interaction.user.id))) {
                    c.delete();
                }
                db3.delete(`${data_id}`)
            }, 300000)
console.log(dbcv.get(`access_token`))


             const logs = new Discord.MessageEmbed()
             .setTitle(`${dbcv.get(`title`)} | Logs`)
             .setDescription(`<a:sim:1104203193958813726> **O <@${interaction.user.id}> acabou de fazer um pedido para adicionar saldo \n<:Dinheiro:1114682101917307011> Valor: ${newsa}**`)
             .setFooter({ text: `${dbcv.get(`title`)} | Todos os Direitos Reservados.` })
             .setColor(dbcv.get(`color`))
             client.channels.cache.get(dbcv.get(`logs_staff`)).send({ embeds: [logs], content: `||<@&${dbcv.get(`equipe`)}>||` })

        
              const venda = setTimeout(function () {
                if ((interaction.guild.channels.cache.find(c => c.topic === interaction.user.id))) { c.delete(); }
                db3.delete(`${interaction.user.id}`)
                }, 1800000)
              mercadopago.configurations.setAccessToken(dbcv.get(`access_token`));
              var payment_data = {
                transaction_amount: Number(newsa),
                description: `Pagamento | ${interaction.user.username}`,
                payment_method_id: 'pix',
                 payer: {
                   email: '[email protected]',
                   first_name: 'Homero',
                   last_name: 'Brum',
                   identification: {
                    type: 'CPF',
                    number: '09111189770' // it's aleatory
                  },
                    address: {
                      zip_code: '06233200',
                      street_name: 'Av. das Nações Unidas',
                      street_number: '3003',
                      neighborhood: 'Bonfim',
                      city: 'Osasco',
                      federal_unit: 'SP'
                    }
                  }
                
                };
                
                mercadopago.payment.create(payment_data).then(function (data) {
                  executado = false;
                  
                    db3.set(`${data_id}.status`, `Pendente (2)`);
                    const buffer = Buffer.from(data.body.point_of_interaction.transaction_data.qr_code_base64, "base64");
                    const attachment = new Discord.MessageAttachment(buffer, "payment.png");
                    const embedqrcode = new Discord.MessageEmbed()
                      .setImage("attachment://payment.png")
                      .setFooter("Após efetuar o pagamento, o tempo de entrega é de no máximo 1 minuto!")
                      .setTitle(`**${dbcv.get(`title`)} | Qr Code**`)
                      .setDescription(`**${data_id} Para pagar com Qr Code basta abrir o aplicativo do seu banco, clicar em Qr Code e alinhar o celular com a imagem a seguir.**`)
                      .setColor(dbcv.get(`color`));
                    message.channel.send({ embeds: [embedqrcode], content: "<a:carregando4:1104203026304073798> | Aguardando o Pagamento...", files: [attachment] });
                
                    setTimeout(() => {
                      message.channel.send(`**:pix: | Copia e Cola:**
                ${data.body.point_of_interaction.transaction_data.qr_code}`);
                    }, 1000);
                
                    const collector = msg.channel.createMessageComponentCollector();
                    const lopp = setInterval(function () {
                      const time2 = setTimeout(function () {
                        clearInterval(lopp);
                      }, 1800000);
                      axios
                        .get(`https://api.mercadolibre.com/collections/notifications/${data.body.id}`, {
                          headers: {
                            Authorization: `Bearer ${dbcv.get(`access_token`)}`,
                          },
                        })
                        .then(async (doc) => {
                          
                            if (doc.data.collection.status === "approved") {
                              db3.set(`${data_id}.status`, `Processando`);
                            }
                          
                          if (`${db3.get(`${data_id}.status`)}` === "Processando") {
                            clearTimeout(time2);
                            clearInterval(lopp);
                            clearInterval(venda);
                
                            const currentSaldo = parseFloat(db4.get(`${interaction.user.id}.saldo`)) || 0;
                            const newsa = parseFloat(currentSaldo);
                
                            const somado = currentSaldo + newsa;
                
                            db3.set(`${interaction.user.id}.status`, `Concluido`);
                            db4.set(`${interaction.user.id}.saldo`, somado.toString());
          

                                              
                                                const embedentrega2 = new Discord.MessageEmbed() 
                                                .setDescription(`<a:verifc:1059297851877892176> | Pagamento Aprovado verifique a sua DM! \n <:info:1066002037927592019> | ID da sua compra || ${interaction.user.id} ||`)
                                                .setColor(`${dbcv.get(`color`)}`)
                                                .setImage(`${dbcv.get(`thumbnail`)}`)
                                                msg.channel.send({ embeds: [embedentrega2] })
                                                const membro = interaction.guild.members.cache.get(interaction.user.id)
                                                const role = interaction.guild.roles.cache.find(role => role.id === dbcv.get(`role`))
                                                membro.roles.add(role)

                                                const canalif = client.channels.cache.get(dbcv.get(`logs_staff`))
                                                                        const message2 = canalif.send({
                                                                            embeds: [new Discord.MessageEmbed()
                                                                                .setTitle(`${dbcv.get(`title`)} | Saldo Aprovado`)
                                                                                .addField(` | Comprador:`, `${interaction.user}`)
                                                                                .addField(` | Data da compra:`, `${moment().format('LLLL')}`)
                                                                                .addField(`<:DS_caixa:1066002175421071380> | Produto:`, `Saldo`)
                                                                                .addField(`<:Dinheiro:1059297379473424444> | Preço:`, `R$${currentSaldo}`)
                                                                                .addField(`✨ | Id da compra:`, `${data_id}`)
                                                                                .setColor(dbcv.get(`color`))
                                                                                .setThumbnail(client.user.displayAvatarURL())
                                                                            ],
                                                                            components: [row]
                                                                        })
                                 
                                                                            

                                  

                                                
                                              }
                                  
                                            })
                                    

              

                                            
                 
          
                                    })

                                   
                                    
                                  
              });
            
              })

            })

            


            }
            
                

              })


            
              }
         } 



I tried everything but no results, always the same thing

1

There are 1 best solutions below

1
Mike W On

This may have something to do with your use of the setInterval function which repeats a function using a fixed interval in milliseconds. At the very minimum, you could try replacing that with setTimeout. If that still doesn't work, try the following.

Generally, when you are doing AJAX calls or external asynchronous calls, you will not need to use any timeouts or intervals. You might try using a 'success' or 'error' block which resumes whenever the data is ready.

This is the high level jQuery code I've used in the past:

$.ajax({
  url: "process_payment.php",
  type: 'POST',
  data: { 
    "order_id": order_id 
  },
  dataType: 'html',
  success: function(data) {
    console.log("Successful");
    $("#payments").html(data);
  },
  error: function(xhr, desc, err) {
    console.log("Error processing payment: " + desc);
  }
});