Hice este código para registrar los DM que se envían a mi bot:
client.on('messageCreate', async message => { if (message.author.bot) return; const attachment = message.attachments.first() if (message.channel.type === 'DM') { console.log(message.content) const dmLogEmbed = new MessageEmbed() .setColor("RANDOM") .setTitle(`${message.author.tag} dmed the bot and said: `) .setDescription(message.content) .setFooter(`User's id: ${message.author.id}`) if (message.attachments.size !== 0) { dmLogEmbed.setImage(attachment.url) } client.channels.fetch("852220016249798756").then((channel) => { channel.send({ embeds: [dmLogEmbed] }) }) } });Pero al actualizar a discord.js v13 ya no funcionó, por lo que entendí el único cambio es que el tipo de canal 'dm' ya no es 'dm' sino 'DM', así que lo cambié en mi código, pero todavía no funciona y realmente no sé por qué.
Asegúrate de tener DIRECT_MESSAGES en las intenciones de tu cliente.
const client = new Discord.Client({ intents: ["GUILDS", "GUILD_MESSAGES", "DIRECT_MESSAGES"] });Hay un cambio importante en Discord API v8. Para referencia ver aquí .
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.
Entonces necesitamos habilitar el CHANNEL parcial también. Tenga en cuenta que cuando se trata de datos parciales , a menudo desea recuperar los datos porque no están completos. Sin embargo, este no parece ser su caso, si está utilizando el evento messageCreate . El message recibido no es parcial ni message.channel . Para verificar si algo es parcial, puede usar la propiedad .partial . Por ejemploMessage.partial oChannel.partial .
const client = new Discord.Client({ intents: ["GUILDS", "GUILD_MESSAGES", "DIRECT_MESSAGES"], partials: ["CHANNEL"] });Ahora debería funcionar como el viejo discord.js v12.