Quiero que mi bot lea solo los mensajes de DM y los envíe a un canal de discordia, pero mi código envía spam al mensaje infinitamente, envía spam 5 veces y luego se detiene durante unos segundos y luego vuelve a enviar spam, además, el bot no lee solo los mensajes de DM y lee también los mensajes del gremio, así que si envío algo en el gremio, el contenido se envía como spam.
¿Qué quiero? Si alguien envía '¡Hola!' (contenido del mensaje) al bot en DM, el bot debe enviar "¡Hola!" (contenido del mensaje) al canal especificado (canal de registros).
const Discord = require("discord.js"); const client = new Discord.Client({ intents:['DIRECT_MESSAGES'], partials: ['MESSAGE'] }); client.on('ready', () =>{ console.log('Bot Online!'); //bot successfully logged in }); client.on('message', async (message) => { await client.channels.cache.get('CHANNEL ID').send(message.content); console.log(message.content); //log messages return; }); // Authorizing client.login('LOGIN');La cosa es que cuando el bot envía el mensaje al canal de registro. También desencadena el evento de message nuevamente. Para evitar esto, simplemente agregue
if(message.author.bot) return;Tu código se vería como
client.on('message', async (message) => { if(message.author.bot) return; await client.channels.cache.get('CHANNEL ID').send(message.content); console.log(message.content); //log messages return; });Puedes usar
if(message.guild) return; client.on('message', async (message) => { if(message.guild) return; await client.channels.cache.get('CHANNEL ID').send(message.content); console.log(message.content); //log messages return; });Verificar si el mensaje proviene de un gremio debería detener esto. Regrese antes si el mensaje.guild es verdadero (en message.guild de message.guild es null , que es un valor falso)
if (message.guild) return;Pondría esto en la parte superior de la devolución de llamada del evento para que nada se ejecute si está en un gremio
Para Discord.js v13 use el CANAL parcial también, espero que funcione
Por cierto
if (message.channel.type != "DM") return;