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.partial或Channel.partial.
const client = new Discord.Client({ intents: ["GUILDS", "GUILD_MESSAGES", "DIRECT_MESSAGES"], partials: ["CHANNEL"] });
Run Code Online (Sandbox Code Playgroud)
现在它应该可以像旧的discord.js v12 一样工作。