You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

Discord.js v13.1.0 中如何检测收到的消息是否为私信(DM)?

Discord.js v13 私信消息检测失效解决方法

问题原因

1. 频道类型判断方式变更

Discord.js v13 版本重构了频道类型枚举规则,message.channel.type 不再返回字符串 'DM',而是返回官方定义的 ChannelType 枚举值,原有字符串匹配逻辑自然无法命中。

2. 缺少 Partial 配置

私信类的频道、消息默认不会全部缓存到本地,未缓存的对象不会触发 messageCreate 事件,需要在客户端初始化时主动开启对应 Partial 配置。

修复步骤

  1. 导入所需依赖
const { Client, Intents, ChannelType, Partials } = require('discord.js');
  1. 调整客户端初始化配置,补充 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]
});
  1. 修改私信判断逻辑
client.on('messageCreate', message => {
  if (message.channel.type === ChannelType.DM) {
    console.log('Dm received!')
  }
})

内容的提问来源于stack exchange,提问作者TheC0mpu1er

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.10.05 17:48:04