let sentMessage = await message.channel.send({ content: "press a button" , components: [ new MessageActionRow() .addComponents( new MessageButton().setCustomId("yamete").setLabel("yamete").setStyle("PRIMARY") ) ] }) // this sends a message and attaches buttons onto it let isStillAcceptResponse = true let i = 0 while (isStillAcceptResponse){ i++ if(i > 5){ sentMessage.edit("dont press the button") break } // max loop of 5 let inputEvent = sentMessage.createMessageComponentCollector({ componentType: "BUTTON", time: ms("10 seconds") }) // this just creates a event listener for button press on the message // when the button is pressed, it emits a "collect" event inputEvent.on("collect", async input => { console.log("pong") if (Math.floor(Math.random() * 1000) % 2 !== 0){ // generate a random true/false sentMessage.edit({ content: "press the button again!", components: [ new MessageActionRow() .addComponents( new MessageButton().setCustomId("yamete").setLabel("yamete").setStyle("PRIMARY") ) ] }) // edits the sent message with a new message content but with the same buttons } else { isStillAcceptResponse = false ; sentMessage.edit("dont press the button") } }) } Envía el mensaje y presioné el botón 1 vez, registra pong pero por alguna razón registra pong 5 veces en lugar de 1. También intenté envolver el ciclo dentro del evento pero eso me confundió aún más ahora Estoy atascado
Creo que entendiste mal el concepto de eventos. Probablemente esté intentando evitar que el evento se active más de 5 veces. Pero event#on solo vincula la función al evento, no detiene el hilo, por lo que solo crea 5 oyentes, que se activan todos al mismo tiempo, registrando pong cinco veces en la consola. La mejor solución sería simplemente especificar max: 5 en las opciones del colector.