Estoy creando un juego para un bot de discord que usa la API Discord.js e intento ejecutar un código después de 10 segundos si la variable jugando (verdadero/falso) no cambió (para evitar que una primera persona termine su juego y un la segunda persona inicia un juego nuevo y se le acaba el tiempo después de unos segundos), así que ya hice el temporizador de 10 segundos pero no puedo resolver el segundo problema, así que esta es una versión simplificada de mi código:
if(message.content === "?guess"){ playing = true; setTimeout(function(){ message.reply("time's up!"); playing = false; }, 10000); }Simplemente agregue una condición if dentro de la devolución de llamada setTimeout para verificar si todavía están jugando y solo luego finalice el juego.
const globalGameTimeout = null; ... if(message.content === "?guess"){ playing = true; globalGameTimeout = setTimeout(function(){ if (playing) { message.reply("time's up!"); playing = false; } }, 10000); } .... if (user guessed correctly or game ends in some other way) { clearTimeout(globalGameTimeout); }clearTimeout(...) se asegurará de que un antiguo setTimeout no se siga ejecutando de forma falsa cuando otro jugador haya finalizado el juego anterior y haya comenzado uno nuevo.