Tengo el siguiente código:
module.exports = { name: 'd', description: 'test', execute(client, message, args) { const Discord = module.require("discord.js"); message.channel.send("Yes or no?") let player1 = '0'; function firstListen() { const collector1 = new Discord.MessageCollector(message.channel, m => m.author.id === 'HERE_ID_PLAYER_1', { time: 10000 }); collector1.on('collect', message => { if (message.content.toLowerCase() == "yes") { player1 = 'yes'; message.channel.send("Player 1 chose YES"); } else if (message.content.toLowerCase() == "no") { player1 = 'no'; message.channel.send("Player 1 chose NO"); } }) }; let player2 = '0'; function secondListen() { const collector2 = new Discord.MessageCollector(message.channel, m => m.author.id === 'HERE_ID_PLAYER_2', { time: 10000 }); collector2.on('collect', message => { if (message.content.toLowerCase() == "yes") { player2 = 'yes'; message.channel.send("Player 2 chose YES"); } else if (message.content.toLowerCase() == "no") { player2 = 'no'; message.channel.send("Player 2 chose NO"); } }) }; async function runListen() { message.channel.send('start'); await firstListen(); await secondListen(); await message.channel.send(`Player 1 chose ${player1} and Player 2 chose ${player2}`); } runListen(); } } Primero, quiero enviar un mensaje del bot "¿Sí o no?",
entonces quiero esperar hasta que ambos usuarios respondan "sí" o "no", o hasta que se acabe el tiempo,
y solo después de eso quiero enviar el resultado final "El jugador 1 eligió sí/no y el jugador 2 eligió sí/no"
Pero no puedo entender cómo trabajar con .then en js, o cómo usar correctamente async/await..(
Porque, Player2 puede responder más rápido que Player1. Necesita escuchar a ambos usuarios en paralelo, y deben tener un temporizador común (por ejemplo: 10 segundos para ambos). PD: tengo 3 preguntas:
¡Gracias a todos! La respuesta fue: necesita usar promesa y promesa.todo)
module.exports = { name: 'd', description: 'test', async execute(client, message, args) { const Discord = module.require("discord.js"); message.channel.send("Yes or no?") var p1 = new Promise((resolve, reject) => { const collector1 = new Discord.MessageCollector(message.channel, m => m.author.id === '568481051895136278', { max: 1, time: 10000 }); collector1.on('collect', message => { if (message.content.toLowerCase() == "yes") { resolve('yes'); message.channel.send("Player 1 chose YES"); } else if (message.content.toLowerCase() == "no") { resolve('no'); message.channel.send("Player 1 chose NO"); } }) collector1.on('end', (collected, reason) => { if (reason === 'time') { resolve('time'); message.channel.send('Player 1, Time is up!'); } }); }); var p2 = new Promise((resolve, reject) => { const collector2 = new Discord.MessageCollector(message.channel, m => m.author.id === '568481051895136279', { max: 1, time: 10000 }); collector2.on('collect', message => { if (message.content.toLowerCase() == "yes") { resolve('yes'); message.channel.send("Player 2 chose YES"); } else if (message.content.toLowerCase() == "no") { resolve('no'); message.channel.send("Player 2 chose NO"); } }) collector2.on('end', (collected, reason) => { if (reason === 'time') { resolve('time'); message.channel.send('Player 2, Time is up!'); } }); }); Promise.all([p1, p2]).then(values => { console.log(values); }); } }