You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

DiscordJS中如何在转发Embed前删除其指定元素(如页脚文本)

解答

这个需求完全可以实现,你之前的写法不生效有两个核心原因:

  1. message.embeds[0]是discord.js封装的Embed类实例,部分属性做了只读限制,直接修改不会生效
  2. 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

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.10.08 18:54:04