Discord.js v14如何修改Embed?获取及编辑Embed遇错求助
Discord.js v14 获取并编辑消息Embed标题的解决方案
错误原因
你执行console.log(interaction.embed[0])报错,是因为Discord.js v14中交互对象本身没有embed属性——Embed是依附在消息上的,正确的获取路径是interaction.message.embeds,这是一个存储消息内所有Embed的数组。
实现步骤与代码示例
获取消息中的Embed数组
从交互对应的消息里取出所有Embed:const messageEmbeds = interaction.message.embeds;搜索目标Embed(按标题匹配)
遍历数组,根据标题筛选需要编辑的Embed(示例用关键词匹配,可按需改成精确匹配):// 替换为你要搜索的标题关键词或完整标题 const targetTitleKeyword = "要搜索的标题内容"; const targetEmbed = messageEmbeds.find(embed => embed.title?.includes(targetTitleKeyword));编辑并更新Embed
找到目标Embed后,用EmbedBuilder.from()基于原Embed创建新实例,修改标题后更新消息:if (targetEmbed) { // 创建更新后的Embed const updatedEmbed = EmbedBuilder.from(targetEmbed) .setTitle("修改后的新标题"); // 更新消息,替换原Embed await interaction.update({ embeds: [updatedEmbed] }); } else { // 未找到时的提示 await interaction.reply({ content: "未找到匹配标题的Embed", ephemeral: true }); }
完整交互处理示例(以按钮交互为例)
const { EmbedBuilder } = require('discord.js'); // 按钮交互处理逻辑 client.on('interactionCreate', async interaction => { if (!interaction.isButton()) return; try { const messageEmbeds = interaction.message.embeds; // 匹配你创建Embed时的标题前缀 const targetTitleKeyword = "title:"; const targetEmbed = messageEmbeds.find(embed => embed.title?.startsWith(targetTitleKeyword)); if (targetEmbed) { const updatedEmbed = EmbedBuilder.from(targetEmbed) .setTitle("title: 新的标题内容"); await interaction.update({ embeds: [updatedEmbed] }); } else { await interaction.reply({ content: "找不到对应标题的Embed", ephemeral: true }); } } catch (error) { console.error("编辑Embed出错:", error); await interaction.reply({ content: "操作失败", ephemeral: true }); } });
内容的提问来源于stack exchange,提问作者hacoo
相关产品推荐
相关产品推荐

