目前我使用的是最新版本的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')
}
3条答案
按热度按时间but5z9lq1#
我之前也遇到过这个问题;我深入研究了discord.jsv12和v13之间的变化,并找出了原因。
如discordjs.guide网页上所示,该网页专门介绍了两次更新之间的重大更改:
在Discord API v8和更高版本中,DM通道不会发出
CHANNEL_CREATE
事件,这意味着discord.js无法自动缓存它们。为了让您的机器人接收DM,必须启用CHANNEL
部分。对于处理DM消息这一非常重要的特性,该通知很难找到。它只直接提到了
CHANNEL_CREATE
事件,但基本上它的意思是,除非在您的客户端选项中启用CHANNEL
部分,否则您的bot根本 * 无法 * 接收DM消息。下面是一个示例,说明如何执行此操作:
您需要将
partials
属性添加到您的Client
构造函数中,以便接收DM。完成此操作后,您的代码将正常工作。vs3odd8k2#
我遇到了同样的问题,解决方案是修改客户端变量,添加以下内容
多亏了“杀癌剂”
jfgube3f3#
对于使用DiscordJS V14的用户,已进行了一些更新。
如图所示添加
Partials
和Intents
可以解决此问题希望这对你们有所帮助:)