繁体   English   中英

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

[英]How do I check if a message is a DM in Discord.js?

目前我使用的是最新版本的Discord.js (v13.1.0)

我希望能够检测某个消息是否是 DM。 我尝试制作messageCreate事件并执行 if 语句来检查频道是否为 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 之间的变化并找出了原因。

可以看出这里discordjs.guide致力于更新之间的重大更改网页:

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

对于处理 DM 消息的非常重要的功能,该通知很难找到。 它只直接提到了CHANNEL_CREATE事件,但基本上这意味着您的机器人根本无法接收 DM,除非在您的客户端选项中启用了CHANNEL部分。

以下是您将如何执行此操作的示例:

const client = new Discord.Client({ partials: ["CHANNEL"], intents: [...] });

您需要将该partials属性添加到您的Client构造函数以接收 DM。 这样做后,您的代码将正常工作。

我遇到了同样的问题,解决方案是修改客户端变量添加这个

感谢 Cannicide

const client = new discord.Client({ partials: ["CHANNEL"], intents: [
    discord.Intents.FLAGS.DIRECT_MESSAGES, 
    discord.Intents.FLAGS.DIRECT_MESSAGE_TYPING
]})

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM