Empresas
Empregos
  • Sobre nós
  • Soluções
    • Publicação de vagas
      Publique sua vaga e receba candidatos qualificados em 48h.
    • Avaliações de candidatos
      Mais de 500 testes técnicos e psicológicos, mais anti-fraude.
    • Headhunting
      Busca executiva personalizada do início ao fim.
    • Folha de Pagamento + EOR
      Dispersão de folha e EOR em mais de 15 países da LATAM.
  • Preços
  • Empregos

0

250
Visualizações
Discord JS bot cómo hacer que una función asincrónica recursiva se obtenga de la API

Estoy tratando de hacer un bot de discordia. Quiero que obtenga una API cada X segundos y verifique los nuevos temas creados.

La API JSON contiene solo un objeto, la última publicación en el sitio. Quería que el bot buscara cada X segundos y si la última publicación encontrada tiene un uid más grande para enviar un mensaje en un canal. Si no, no hagas nada. El uid es un número.

Intenté usar la función setInterval pero no pude hacer que funcionara, ya que dio errores que aguardan debe estar en una función asíncrona superior.

También codifiqué el último uid de publicación "latest_post" y la forma en que vi que funciona es si post_id de la API es más alto que el codificado, entonces el codificado recibe el valor del nuevo. Sin embargo, el valor de last_post permanece sin cambios ya que la función se ejecuta nuevamente y late_post está codificado de forma rígida cada vez. Intenté declararlo fuera de la función pero salió como indefinido.

Este es mi código actual casi funcional .

 client.on('messageCreate', async (message) => { if (!message.content.startsWith(prefix) || message.author.bot) return; const args = message.content.slice(prefix.length).split(/ +/); const command = args.shift().toLowerCase(); if (command === 'new') { var latest_post = 12345; // hardcoded latest post uid try { const response = await fetch('API HERE').then(r => r.text()); const body = JSON.parse(response); const obj = body.data; const objId = obj[0].post_id; const objAuthor = obj[0].author; const objTitle = obj[0].title; if (objTopic > latest_post) { client.channels.cache.get("CHANNEL ID").send(`Found a new post by ${objAuthor}`); var latest_post = objId; // if it fetches a post with a higher uid then latest_post receives the value of that higher uid } else { var d = new Date(); var n = d.toLocaleTimeString(); console.log(`No new posts yet at ${n}`); //logs "No new posts yet at 1:30 PM" } } catch (error) { message.channel.send('Oops, there was an error fetching the API'); console.log(error); } } });

¿Alguien puede guiarme sobre cómo transformar esto en una función recursiva que se ejecuta automáticamente cada X segundos? Gracias !

about 4 years ago · Juan Pablo Isaza
1 Respostas
Responde à pergunta

0

Después de algunas iteraciones logré que funcionara como yo quería. Dejaré el código a continuación, ¡espero que ayude!

 let refreshint = 10 * 1000; //10 seconds var API = "API_HERE"; client.on('ready', async (message) => { console.log('Bot is connected...'); var latest_post = 12345 // hardcoded latest post uid setInterval(async function(){ try { const response = await fetch('API').then(r => r.text()); const body = JSON.parse(response); const obj = body.data; const objId = obj[0].post_id; const objAuthor = obj[0].author; const objTitle = obj[0].title; if (objTopic > latest_post) client.channels.cache.get("CHANNEL ID").send(`Found a new post by ${objAuthor}`); console.log(`Found a new post by ${objAuthor}`); function change_value(latest_post){ return latest_post; } latest_post = change_value(topicId); } else { var d = new Date(); var n = d.toLocaleTimeString(); console.log(`No new thread yet at ${n}`); } } catch (error) { message.channels.cache.get('channel ID here').send('Oops, there was an error fetching the API'); console.log(error); } }, refreshint) });
about 4 years ago · Juan Pablo Isaza Relatório
Responde à pergunta
Encontrar trabalhos remotos

Descubra a nova forma de encontrar um emprego!

melhores empregos
Principais categorias de trabalho
Empresas
Postar vaga Preços Comercial
Jurídico
Termos e Condições Política de privacidade
© 2026 PeakU Inc. All Rights Reserved.
Andres GPT
Recomende algumas ofertas para mim
Preciso de ajuda