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

discord.js发送带本地图片的embed消息提示Invalid Form Body如何修复

问题原因
  • 实例化MessageAttachment时错误传入了整个文件名数组files,而非选中的单个图片的完整路径
  • MessageEmbed.setImage()方法仅接受字符串格式的资源链接,不能直接传入MessageAttachment实例,本地图片嵌入需要使用attachment://<文件名>的特殊协议格式指定
  • 发送消息时没有将附件和embed一并传递,Discord无法匹配到embed引用的本地资源
修正后代码
const Discord = require('discord.js');
const { Intents } = Discord;
const fs = require('fs');

const config = require('config');
const authToken = config.get('authToken');

const myIntents = new Intents([
    Intents.FLAGS.GUILDS,
    Intents.FLAGS.GUILD_MESSAGES
]);
const client = new Discord.Client({ intents: myIntents });

client.on("ready", (client) => {
    console.log(`Logged in as ${client.user.tag}.`);
});

client.on("messageCreate", (message) => {
    if ('.pic' === message.content) {
        let files = fs.readdirSync('./assets/images/');
        let chosenFile = files[Math.floor(Math.random() * files.length)];
        // 传入单个选中图片的完整路径实例化附件
        const image = new Discord.MessageAttachment(`./assets/images/${chosenFile}`, chosenFile);
        const embed = new Discord.MessageEmbed()
              .setTitle('yeet')
              // 使用attachment协议指定嵌入图片
              .setImage(`attachment://${chosenFile}`)
              .setFooter('By K4STOR');
        // 发送时同时传递embed和附件数组
        message.channel.send({embeds: [embed], files: [image]});
    }
});

client.login(authToken);

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.09.27 21:45:01