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

Posted

技术标签:

【中文标题】如何在 Discord.js 中检查消息是不是为 DM?【英文标题】:How do I check if a message is a DM in Discord.js?如何在 Discord.js 中检查消息是否为 DM? 【发布时间】:2021-10-28 20:54:02 【问题描述】:

目前我使用的是最新版本的 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')

【问题讨论】:

【参考方案1】:

我之前也遇到过这个问题;我深入研究了 discord.js v12 和 v13 之间的变化并找出了原因。

正如 here 在 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。这样做后,您的代码将正常工作。

【讨论】:

OP 说事件正在运行? 我不确定他们的意思是该活动是在为 DMs 运行还是只是在正常运行,例如他们是否使用公会消息对其进行了测试。他们没有在他们的问题中提到部分被启用,所以这可能是原因。我想我们会看到的。 @Cannicide Ty!是的,它只适用于公会,而不是 DM。不,我之前没有任何部分。 (甚至不知道它们是一回事-_-)【参考方案2】:

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

感谢 Cannicide

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

【讨论】:

以上是关于如何在 Discord.js 中检查消息是不是为 DM?的主要内容,如果未能解决你的问题,请参考以下文章

如何使用 Discord.js 检查消息作者是不是具有管理员角色?

检查用户是不是可以在提到的频道 discord.js 中发送消息

Discord.js 如何检查用户是不是不接受私信

在 Discord.js 中检测消息中的链接

Discord.js - 检查命令作者是不是有角色/允许指定角色的命令

如何检查我的机器人是不是可以在 discord.js v12 中添加角色?