Actualmente estoy usando la última versión de Discord.js (v13.1.0) .
Quiero poder detectar si cierto mensaje es un DM. Intenté crear un evento messageCreate e hice una declaración if para verificar si el canal es un DM
client.on('messageCreate', message => { if (message.channel.type == 'DM') { console.log('Dm recieved!') } })Esto por alguna razón no funcionó. Así que no tengo idea de lo que hará.
Aquí están mis intents :
[Intents.FLAGS.GUILDS, Intents.FLAGS.GUILD_MESSAGES, Intents.FLAGS.GUILD_MESSAGE_REACTIONS, Intents.FLAGS.DIRECT_MESSAGES]
Por cierto, el evento funciona :
client.on('messageCreate', message => { console.log('Event') }También tuve este problema antes; Investigué los cambios entre discord.js v12 y v13 y descubrí por qué.
Como se ve aquí en la página web discordjs.guide dedicada a los cambios importantes entre las actualizaciones:
En Discord API v8 y versiones posteriores, los canales DM no emiten el evento
CHANNEL_CREATE, lo que significa que discord.js no puede almacenarlos en caché automáticamente. Para que su bot reciba DM, el parcial deCHANNELdebe estar habilitado.
Para la característica muy importante de manejar mensajes DM, ese aviso fue bastante difícil de encontrar. Solo menciona directamente el evento CHANNEL_CREATE , pero básicamente lo que significa es que su bot no puede recibir ningún DM a menos que el CHANNEL parcial esté habilitado en las opciones de su cliente.
Aquí hay un ejemplo de cómo lo harías:
const client = new Discord.Client({ partials: ["CHANNEL"], intents: [...] }); Debe agregar esa propiedad de partials a su constructor de Client para recibir mensajes directos. Después de hacerlo, su código funcionará correctamente.
Tuve el mismo problema, la solución fue modificar la variable del cliente agregando esto
gracias a cannicida
const client = new discord.Client({ partials: ["CHANNEL"], intents: [ discord.Intents.FLAGS.DIRECT_MESSAGES, discord.Intents.FLAGS.DIRECT_MESSAGE_TYPING ]})