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

如何让机器人将消息的全部附件复制到Embed中?

解决方法

Discord 的 Embed 结构限制了只能设置一张主图(setImage)和一张缩略图,无法直接在单个 Embed 中插入多张图片附件。要展示所有附件,你可以通过遍历所有附件,结合「主图+字段列表」或者「多Embed拆分」的方式实现:

方式一:单Embed集中展示所有附件

将第一个附件设为Embed主图,所有附件(包括第一个)通过字段添加文件名和可点击链接,适合混合类型附件的场景:

// 初始化基础Embed,包含原消息内容
const embed = new Discord.EmbedBuilder()
  .setTitle('复制的消息')
  .setDescription(message.content);

// 遍历所有附件
if (message.attachments.size > 0) {
  message.attachments.forEach((attachment, index) => {
    // 第一个附件设为Embed主图
    if (index === 0) {
      embed.setImage(attachment.url);
    }
    // 添加附件字段,显示文件名和访问链接
    embed.addFields({
      name: `附件 ${index + 1}`,
      value: `[${attachment.name}](${attachment.url})`,
      inline: false
    });
  });
}

// 发送处理好的Embed
channel.send({ embeds: [embed] });

方式二:多Embed拆分展示图片附件

如果附件以图片为主,可以给每张图片单独创建一个Embed,非图片附件仍放在主Embed的字段中,视觉展示更直观:

const embeds = [];
// 创建包含原消息内容的主Embed
const mainEmbed = new Discord.EmbedBuilder().setDescription(message.content);
embeds.push(mainEmbed);

// 遍历所有附件处理
message.attachments.forEach(attachment => {
  // 图片附件单独创建Embed展示
  if (attachment.contentType?.startsWith('image/')) {
    const imageEmbed = new Discord.EmbedBuilder().setImage(attachment.url);
    embeds.push(imageEmbed);
  } else {
    // 非图片附件添加到主Embed的字段
    mainEmbed.addFields({
      name: '附件',
      value: `[${attachment.name}](${attachment.url})`,
      inline: false
    });
  }
});

// 批量发送所有Embed
channel.send({ embeds: embeds });

说明

  • 原代码只取了message.attachments.first(),所以仅处理第一个附件;通过forEach遍历所有附件即可覆盖全部内容。
  • 若使用旧版 Discord.js(v13及以下),需将EmbedBuilder改为MessageEmbed,其他逻辑一致。

内容的提问来源于stack exchange,提问作者Former

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.06 04:06:00