javascript 我如何在Discord.js中检查一条消息是否是DM?

gg0vcinb  于 2022-10-30  发布在  Java
关注(0)|答案(3)|浏览(148)

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

but5z9lq1#

我之前也遇到过这个问题;我深入研究了discord.jsv12和v13之间的变化,并找出了原因。
discordjs.guide网页上所示,该网页专门介绍了两次更新之间的重大更改:
在Discord API v8和更高版本中,DM通道不会发出CHANNEL_CREATE事件,这意味着discord.js无法自动缓存它们。为了让您的机器人接收DM,必须启用CHANNEL部分。
对于处理DM消息这一非常重要的特性,该通知很难找到。它只直接提到了CHANNEL_CREATE事件,但基本上它的意思是,除非在您的客户端选项中启用CHANNEL部分,否则您的bot根本 * 无法 * 接收DM消息。
下面是一个示例,说明如何执行此操作:

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

您需要将partials属性添加到您的Client构造函数中,以便接收DM。完成此操作后,您的代码将正常工作。

vs3odd8k

vs3odd8k2#

我遇到了同样的问题,解决方案是修改客户端变量,添加以下内容
多亏了“杀癌剂”

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

jfgube3f3#

对于使用DiscordJS V14的用户,已进行了一些更新。

const { Client, GatewayIntentBits, Partials } = require('discord.js');

const client = new Client({
    partials: [
        Partials.Channel,
        Partials.Message,
    ],
    intents: [
        GatewayIntentBits.DirectMessages,
        GatewayIntentBits.DirectMessageTyping,
    ],
});

如图所示添加PartialsIntents可以解决此问题
希望这对你们有所帮助:)

相关问题