当我向机器人发送 DM 时,事件 messageCreate 未触发/发射 (discord.js v13)

Tom*_*BBQ 13 javascript node.js discord discord.js

我编写了以下代码来记录发送到我的机器人的 DM:

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] })

        })
    }

});
Run Code Online (Sandbox Code Playgroud)

但是当更新到discord.js v13时,它不再工作了,据我了解,唯一的变化是“dm”通道类型不再是“dm”而是“DM”,所以我在代码中更改了它,但它仍然不起作用,我真的不知道为什么。

Sku*_*sal 49

确保您了解DIRECT_MESSAGES客户的意图。

const client = new Discord.Client({ intents: ["GUILDS", "GUILD_MESSAGES", "DIRECT_MESSAGES"] });
Run Code Online (Sandbox Code Playgroud)

Discord API v8 中发生了重大变化。请参阅此处以供参考。

在 Discord API v8 及更高版本上,DM 通道不会发出CHANNEL_CREATE事件,这意味着 Discord.js 无法自动缓存它们。为了让您的机器人接收 DM,CHANNEL必须启用部分功能。

CHANNEL所以我们还需要启用部分功能。请记住,在处理部分数据时,您经常需要获取数据,因为它不完整。然而,如果您正在使用该事件,这似乎不是您的情况messageCreate。收到message的不偏也不message.channel。要检查某些内容是否不完整,您可以使用该.partial属性。例如Message.partialChannel.partial.

const client = new Discord.Client({ intents: ["GUILDS", "GUILD_MESSAGES", "DIRECT_MESSAGES"], partials: ["CHANNEL"] });
Run Code Online (Sandbox Code Playgroud)

现在它应该可以像旧的discord.js v12 一样工作。