Discord.js v12检测消息是否来自DM频道失效该如何解决
Discord.js v12 检测DM频道失效解决方案
- 首先确认客户端初始化时是否正确声明了
DIRECT_MESSAGES意图,Discord官方2022年起对未声明对应意图的应用,会屏蔽DM频道的元数据,导致类型识别异常,初始化示例如下:
const client = new Discord.Client({ intents: [ 'GUILDS', 'GUILD_MESSAGES', 'DIRECT_MESSAGES' ] });
- 替换硬编码频道类型的判断逻辑,使用更稳定的属性判断:DM频道不属于任何服务器,不存在
guild属性,该判断不受版本枚举值更新影响,写法如下:
// 最优判断方案,兼容所有v12小版本 if (!msg.channel.guild) { // 当前消息来自DM频道 }
- 也可以做兼容判断,覆盖新旧版本的类型返回值:
if (msg.channel.type === 'dm' || (msg.channel.type === 'text' && !msg.channel.guild)) { // 当前消息来自DM频道 }
- 失效原因说明:原有
msg.channel.type === 'dm'逻辑失效,是因为Discord停止对v12版本维护后,网关推送的元数据字段与旧版本枚举映射逻辑不匹配,导致DM频道的类型返回值变为text,替换为无guild属性的判断即可解决该问题。
内容的提问来源于stack exchange,提问作者Reboxy
相关产品推荐
相关产品推荐

