目前我使用的是最新版本的 Discord.js (v13.1.0) .
我希望能够检测某个消息是否是 DM。我尝试制作 messageCreate
事件并做了一个 if 语句来检查 channel 是否是 DM
client.on('messageCreate', message => {
if (message.channel.type == 'DM') {
console.log('Dm recieved!')
}
})
由于某种原因,这不起作用。所以我不知道会发生什么。这是我的
intents
: [Intents.FLAGS.GUILDS, Intents.FLAGS.GUILD_MESSAGES, Intents.FLAGS.GUILD_MESSAGE_REACTIONS, Intents.FLAGS.DIRECT_MESSAGES]
顺便说一句,该事件确实有效:client.on('messageCreate', message => {
console.log('Event')
}
最佳答案
我之前也遇到过这个问题;我深入研究了 discord.js v12 和 v13 之间的变化并找出了原因。
如所见here在 discordjs.guide专门介绍更新之间的重大更改的网页:
On Discord API v8 and later, DM Channels do not emit the
CHANNEL_CREATE
event, which means discord.js is unable to cache them automatically. In order for your bot to receive DMs, theCHANNEL
partial must be enabled.
对于处理 DM 消息的非常重要的功能,该通知很难找到。它只直接提到
CHANNEL_CREATE
事件,但基本上这意味着您的机器人根本无法接收 DM,除非 CHANNEL
在您的客户端选项中启用了部分。以下是您将如何执行此操作的示例:
const client = new Discord.Client({ partials: ["CHANNEL"], intents: [...] });
您需要添加 partials
属性(property)到您的Client
构造函数以接收 DM。这样做后,您的代码将正常工作。
关于javascript - 如何在 Discord.js 中检查消息是否为 DM?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/68978438/