discord.js开发中message存在时message.mentions返回undefined问题求助
问题原因
interaction.channel.awaitMessages 方法的返回值是 Collection 类型的消息集合,即使你设置了 max: 1 只采集1条消息,也不会直接返回单个 Message 实例,所以你直接访问集合对象的 mentions 属性自然会返回undefined。
修复方案
你只需要从返回的集合中取出第一条消息实例,再访问对应的属性即可,修改后的代码如下:
interaction.channel.awaitMessages({ messagefilter, max: 1, time: 20000, errors: ['time'] }).then(async collected => { // 从采集到的消息集合中提取第一条消息 const targetMessage = collected.first(); console.log(targetMessage.mentions); if (targetMessage.mentions) { // 该分支现在可以正常执行 } else { // 原有分支逻辑 } });
额外注意项
如果你使用的是discord.js v14及以上版本,还需要确认客户端初始化时已经开启了必要的网关意图,否则即使拿到Message实例也可能无法读取mentions属性:
- 必须开启
MessageContent意图才能获取消息内容、提及用户/角色等相关数据 - 按需开启对应场景的消息权限:服务器消息需开启
GuildMessages,私信消息需开启DirectMessages
客户端初始化参考代码:
const { Client, GatewayIntentBits } = require('discord.js'); const client = new Client({ intents: [ GatewayIntentBits.Guilds, GatewayIntentBits.GuildMessages, GatewayIntentBits.MessageContent ] });
内容的提问来源于stack exchange,提问作者user11852020
相关产品推荐
相关产品推荐

