Message.embeds返回undefined但消息实际包含Embed的问题求助
正确获取Discord消息中的Embed对象
你遇到的问题核心是:messages.fetch({limit:1})返回的是MessageCollection(消息集合),而非单个Message对象。集合本身没有embeds属性,只有集合内的单个Message实例才有这个属性,所以直接调用reportMessage.embeds会返回undefined。
以下是几种正确获取Embed的方法:
方法一:使用first()获取集合中的第一条消息
这是最直接的方式,因为你设置了limit:1,集合里只会有一条消息:
const reportMessage = await interaction.channel.messages.fetch({ limit: 1, cache: false, }); // 从集合中取出第一条消息 const targetMessage = reportMessage.first(); // 现在可以正常获取embeds数组 console.log(targetMessage.embeds);
方法二:遍历集合中的消息
如果后续可能处理多条消息,这种方式更通用:
const reportMessage = await interaction.channel.messages.fetch({ limit: 1, cache: false, }); // 遍历集合内的所有消息 reportMessage.forEach(message => { console.log(message.embeds); });
额外提示:安全获取第一个Embed
如果需要获取消息里的第一个Embed,建议先判断embeds数组是否为空,避免出现数组越界错误:
const reportMessage = await interaction.channel.messages.fetch({ limit: 1, cache: false, }); const targetMessage = reportMessage.first(); if (targetMessage?.embeds.length > 0) { const firstEmbed = targetMessage.embeds[0]; console.log(firstEmbed); } else { console.log("目标消息中没有包含Embed"); }
内容的提问来源于stack exchange,提问作者Safasfly
相关产品推荐
相关产品推荐

