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
相关产品推荐
相关产品推荐

