javascript - 如何在 Discord.js 中检查消息是否为 DM?

标签 javascript discord discord.js

目前我使用的是最新版本的 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 之间的变化并找出了原因。
如所见herediscordjs.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, the CHANNEL 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/

相关文章:

javascript - 在导航中突出显示链接

javascript - Discord.js 机器人数学无法正常工作

javascript - 嵌入的 Discord.js 按钮

javascript - Deferred 在 Angular 版本 1.2.2 中无法解决

javascript - Redux - ES6 更新数组中的对象元素

javascript - 在 Javascript 中访问所有事件监听器

node.js - 如何在 github 上隐藏不和谐 token

javascript - setTimeout() 中的第二个函数未运行

node.js - "FFMPEG not found"即使 ffmpeg 二进制文件已添加到 package.json

node.js - 检查用户状态