Discord.js v13.1.0 中如何检测收到的消息是否为私信(DM)?
Discord.js v13 私信消息检测失效解决方法
问题原因
1. 频道类型判断方式变更
Discord.js v13 版本重构了频道类型枚举规则,message.channel.type 不再返回字符串 'DM',而是返回官方定义的 ChannelType 枚举值,原有字符串匹配逻辑自然无法命中。
2. 缺少 Partial 配置
私信类的频道、消息默认不会全部缓存到本地,未缓存的对象不会触发 messageCreate 事件,需要在客户端初始化时主动开启对应 Partial 配置。
修复步骤
- 导入所需依赖
const { Client, Intents, ChannelType, Partials } = require('discord.js');
- 调整客户端初始化配置,补充 Partial 项
const client = new Client({ intents: [ Intents.FLAGS.GUILDS, Intents.FLAGS.GUILD_MESSAGES, Intents.FLAGS.GUILD_MESSAGE_REACTIONS, Intents.FLAGS.DIRECT_MESSAGES ], // 新增partial配置,允许未缓存的私信相关对象触发事件 partials: [Partials.CHANNEL, Partials.MESSAGE] });
- 修改私信判断逻辑
client.on('messageCreate', message => { if (message.channel.type === ChannelType.DM) { console.log('Dm received!') } })
内容的提问来源于stack exchange,提问作者TheC0mpu1er
相关产品推荐
相关产品推荐

