Business
Jobs
  • About Us
  • Solutions
    • Job Postings
      Post your job and receive qualified candidates in 48h.
    • Candidate Assessments
      500+ technical and psychological tests, plus anti-fraud.
    • Headhunting
      Tailor-made executive search from start to finish.
    • Payroll + EOR
      Payroll dispersal and EOR across 15+ LATAM countries.
  • Pricing
  • Jobs

0

311
Views
Detenga un ciclo infinito cuando se cumpla la reacción correcta discord.js

Estoy creando un comando de bot de discordia que da una pregunta y dos emojis en el mensaje de la pregunta para que el usuario reaccione. Si selecciona el emoji incorrecto, el bot le dirá "Incorrecto", reaccionará nuevamente al mensaje y esperará a que el usuario reaccione. Quiero poner esto en un ciclo infinito que solo se detiene cuando el usuario elige el emoji correcto. Esto es lo que he trabajado hasta ahora:

 message.channel.send(`Question?`).then(sentMessage => { sentMessage.react('✅'); sentMessage.react('❌'); const filter = (reaction, user) => { return ['✅', '❌'].includes(reaction.emoji.name) && user.id != `${bid}`; // bid = bot's id }; sentMessage.awaitReactions({ filter, max: 1, time: 60000, errors: ['time'] }).then(collected => { var reaction = collected.first(); if (reaction.emoji.name === '❌') { var check = true; while (check) { console.log('?'); message.channel.send('Wrong').then(sentMessage => { sentMessage.react('✅'); sentMessage.react('❌'); const filter = (reaction, user) => { return ['✅', '❌'].includes(reaction.emoji.name) && user.id != `${bid}`; }; sentMessage.awaitReactions({ filter, max: 1, time: 60000, errors: ['time'] }).then(collected => { var reaction = collected.first(); if (reaction.emoji.name == '✅') check = false; }); }); } } }); });

La idea es que cuando el usuario finalmente reaccione ✅ después de reaccionar primero ❌, check se volverá false y el bucle se detendrá. Sin embargo, después de elegir primero ❌, el bucle while no está ejecutando ningún código dentro de él que no sea el bucle console.log('?') . ¿Alguien puede señalar dónde hice mal?

about 4 years ago · Juan Pablo Isaza
1 answers
Answer question

0

En su código, envía Wrong y coloca la lógica de verificación de reacción dentro then envuelve con while . Sin embargo, dado que Channel.send devuelve una Promesa, terminará casi instantáneamente, continúe el bucle mientras realiza Channel.send y la lógica de reacción simultáneamente. Puede usar una función asíncrona y llamarla recursivamente. Entonces el código sería este:

 message.channel.send(`Question?`).then(sentMessage => { sentMessage.react('✅'); sentMessage.react('❌'); const filter = (reaction, user) => { return ['✅', '❌'].includes(reaction.emoji.name) && user.id != `${bid}`; // bid = bot's id }; sentMessage.awaitReactions({ filter, max: 1, time: 60000, errors: ['time'] }).then(collected => { var reaction = collected.first(); if (reaction.emoji.name === '❌') { async function reactionLoop() { console.log('?'); let sentMessage = await message.channel.send('Wrong'); await sentMessage.react('✅'); await sentMessage.react('❌'); const filter = (reaction, user) => ['✅', '❌'].includes(reaction.emoji.name) && user.id != `${bid}`; let collected = await sentMessage.awaitReactions({ filter, max: 1, time: 60000, errors: ['time'] }) var reaction = collected.first(); if (reaction.emoji.name == '✅') await reactionLoop(); } reactionLoop(); } }); });
about 4 years ago · Juan Pablo Isaza Report
Answer question
Find remote jobs

Discover the new way to find a job!

Top jobs
Top job categories
Business
Post vacancy Pricing Sales
Legal
Terms and conditions Privacy policy
© 2026 PeakU Inc. All Rights Reserved.
Andres GPT
Show me some job opportunities
There's an error!