DiscordJS中如何在转发Embed前删除其指定元素(如页脚文本)
解答
这个需求完全可以实现,你之前的写法不生效有两个核心原因:
message.embeds[0]是discord.js封装的Embed类实例,部分属性做了只读限制,直接修改不会生效embed.footer是单个对象不是数组,你写的embed.footer[0].text本身是错误语法,无法拿到对应值
具体操作步骤如下:
1. 转换Embed为可编辑的普通对象
调用embed实例的toJSON()方法,将其转换为可任意修改的普通JS对象,避免只读限制:
const originalEmbed = message.embeds[0]; const modifiedEmbed = originalEmbed.toJSON();
2. 删除/修改指定元素
你可以直接对转换后的普通对象做属性删除或修改操作,修改前先判断属性是否存在避免报错:
- 完全删除页脚:
if (modifiedEmbed.footer) delete modifiedEmbed.footer;
- 仅清空页脚文本:
if (modifiedEmbed.footer) modifiedEmbed.footer.text = '';
- 删除其他元素同理,例如:
- 删除作者信息:
if (modifiedEmbed.author) delete modifiedEmbed.author; - 删除时间戳:
if (modifiedEmbed.timestamp) delete modifiedEmbed.timestamp; - 删除所有字段:
if (modifiedEmbed.fields) delete modifiedEmbed.fields;
- 删除作者信息:
3. 完整调整后的代码示例
const channel1 = '替换为源频道ID'; const WEBHOOK_URL = '替换为目标频道Webhook地址'; // 注意:discord.js v13及以上版本事件名为messageCreate,旧版本才用message client.on("messageCreate", async (message) => { // 过滤机器人消息避免循环转发 if (message.author.bot) return; if (message.channel.id !== channel1) return; // 无Embed的消息直接跳过 if (!message.embeds?.length) return; const originalEmbed = message.embeds[0]; const modifiedEmbed = originalEmbed.toJSON(); // 按需修改Embed,这里以删除页脚为例 if (modifiedEmbed.footer) delete modifiedEmbed.footer; const params = { embeds: [modifiedEmbed] }; try { await fetch(WEBHOOK_URL, { method: "POST", headers: { "Content-Type": "application/json" }, body: JSON.stringify(params) }); } catch (err) { console.error('Embed转发失败:', err); } });
内容的提问来源于stack exchange,提问作者infamous
相关产品推荐
相关产品推荐

