El siguiente código está envuelto en una clase que se llama cuando se ejecutan comandos específicos, por ejemplo, !dm . Cuando ejecuto !dm después de iniciar el bot, normalmente envía un mensaje y espera a que el usuario responda al mensaje enviado (código a continuación). Cuando ejecuto !dm por segunda vez, envía un mensaje dos veces. Si ejecuto !dm una vez más, envía el mensaje 3 veces y así sucesivamente... ¿Por qué sucede esto y cómo puedo solucionarlo?
this.client.on("messageCreate", function (msg) { if (msg.author.bot || msg.channel.type !== "DM") return console.log("something") })(Este es el código abreviado)
Código completo: PasteHub
Creo que ese sería el comportamiento predeterminado, porque el bot siempre escuchará el evento messageCreate . Creo que necesitarías algún tipo de estado para el bot, por ejemplo:
Si user1 escribiera !DM , almacenaría esa información en algún lugar, como:
const botStates = []; // Message event closure { botStates.push({ user: user.name, // example bot_state: 'waiting', }) // } Y luego podría verificar ese estado cada vez que el evento activa el cierre, y si el estado de ese usuario está waiting , no enviaría el mensaje.
Esto podría deberse a que almacenó dos eventos de cliente uno dentro del otro.
Asegúrese de no almacenar su messageCreate dentro de otro evento.