Cuando emoji.id is met === '847502744176820256' no deja de enviar mensaje en consola o channel , ¿cómo lo detengo?
const { Client, Intents } = require("discord.js-selfbot"); const client = new Client({ intents: [Intents.FLAGS.GUILDS, Intents.FLAGS.GUILD_MESSAGES, Intents.FLAGS.GUILD_MESSAGE_REACTIONS], }); let token = ""; client.on('ready', () => { console.log('Ok'); }); client.on('messageReactionAdd', (messageReaction, user) => { const { message, emoji } = messageReaction; if(emoji.id === '847502744176820256'){ setTimeout(function(){ console.log("reaction ADD") message.channel.send("ok") message.react(':wleft:847502744176820256') }, 350); } });Su código, cada vez que se agrega una reacción a un mensaje, verifica la condición de que el emoticón que se agrega es 847502744176820256 . Si se cumple esa condición, envías mensajes a tu console y Discord, y luego reaccionas con el emote 847502744176820256 . Al reaccionar, desencadena el evento de reacción añadido. El emoticón que agregó tiene la misma ID, por lo que cumple la condición. Así, vuelve a enviar los mensajes, y vuelve a reaccionar con el mismo ID . Y eso vuelve a cumplir la condición. Y el ciclo continúa.
Este es un bucle infinito clásico.
Esta es la razón por la que suele ser una buena práctica ignorar los eventos desencadenados por bots, incluido el suyo propio. No desea que su bot active su propio controlador de eventos. Así es como podrías hacer eso:
if(emoji.id === '847502744176820256' && !user.bot){ setTimeout(function(){ console.log("reaction ADD") message.channel.send("ok") message.react(':wleft:847502744176820256') }, 350); }Alternativamente, si desea aceptar entradas de otros bots pero no las suyas, puede verificar específicamente la ID de su bot en lugar de verificar si el usuario es un bot.