Business
Jobs
  • About Us
  • Solutions
    • Job Postings
      Post your job and receive qualified candidates in 48h.
    • Candidate Assessments
      500+ technical and psychological tests, plus anti-fraud.
    • Headhunting
      Tailor-made executive search from start to finish.
    • Payroll + EOR
      Payroll dispersal and EOR across 15+ LATAM countries.
  • Pricing
  • Jobs

0

425
Views
¿Por qué aparece el mensaje "Cuerpo de formulario no válido" cuando intento incrustar una imagen local en un mensaje?

En este momento estoy trabajando en la creación de un bot que publicará una imagen aleatoria de una carpeta local en mi VSC. Sin embargo, publicar un mensaje incrustado con la imagen genera un error:

DiscordAPIError: incrustaciones de cuerpo de formulario no válidas[0].image.url: no se pudo interpretar "{'archivo adjunto': ['1.jpg', '2mkjR-3__400x400.jpg', '8921036_sa.jpg', '91Vk1mS1x3L.png'] , 'nombre': Ninguno}" como cadena.

Esto se puede reproducir con el código de ejemplo:

 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(files); const embed = new Discord.MessageEmbed() .setTitle('yeet') .setImage(image) .setFooter('By K4STOR',''); message.channel.send({embeds: [embed]}); } }); client.login(authToken);

Además de la secuencia de comandos anterior, deberá:

  • crear un directorio 'activos/imágenes' y
  • agregue al menos una imagen;
  • cree un archivo de configuración (por ejemplo, 'config/local.json') y
  • agregue una entrada 'authToken' apropiada

¿Cómo se puede arreglar el código anterior para enviar la imagen?

about 4 years ago · Juan Pablo Isaza
2 answers
Answer question

0

Prueba esto:

 var fs = require('fs'); client.on("ready", () => { console.log("Why did I make this...") command(client, 'pic', (message) => { //choose one file from folder "./images" randomly var files = fs.readdirSync("./images/") let chosenFile = files[Math.floor(Math.random() * files.length)] //create embed and use image from messageAttachments const embed = new Discord.MessageEmbed() .setTitle('yeet') .setImage(`attachment://${chosenFile}`) .setFooter('By K4STOR','') //discord.js V13 variant of sending embeds //necessary to set files, otherwise #setImage with localfile does not work message.channel.send({ embeds: [embed], files: [`./images/${chosenFile}`] }); }) })
about 4 years ago · Juan Pablo Isaza Report

0

Tema principal

MessageEmbed.setImage() toma una URL, no un MessageAttachment . Para los archivos adjuntos, debe pasarlos a través de la opción de files TextChannel.send() . Tenga en cuenta que la guía sobre cómo adjuntar imágenes a un mensaje incrustado muestra esto.

Además, la ruta al directorio de imágenes debe combinarse con el nombre de archivo elegido cuando se crea el objeto adjunto.

Problema menor

Tenga en cuenta que todas las imágenes aparecen en el mensaje de error. Esto se debe a un problema menor: el archivo adjunto se establece en files , en lugar de en el chosenFile . Tenga en cuenta que este tipo de problema se considera en SO.

Cambios

Solo estos cambios se verían así:

 const path = require('path'); ... const imgDir = './assets/images/'; ... const image = new Discord.MessageAttachment( path.join(imgDir, chosenFile), chosenFile, {url: 'attachment://' + chosenFile}); const embed = new Discord.MessageEmbed() .setImage(image.url) ... message.channel.send({embeds: [embed], files: [image]});

Muestra completa

La muestra con los cambios anteriores aplicados sería:

 const Discord = require('discord.js'); const { Intents } = Discord; const fs = require('fs'); const path = require('path'); 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}.`); }); const imgDir = './assets/images/'; client.on("messageCreate", (message) => { if ('.pic' === message.content) { let files = fs.readdirSync(imgDir); let chosenFile = files[Math.floor(Math.random() * files.length)]; const image = new Discord.MessageAttachment( path.join(imgDir, chosenFile), chosenFile, {url: 'attachment://' + chosenFile}); const embed = new Discord.MessageEmbed() .setTitle('yeet') .setImage(image.url) .setFooter('By K4STOR',''); console.log(`Sending ${chosenFile}.`); message.channel.send({embeds: [embed], files: [image]}); } }); client.login(authToken);
about 4 years ago · Juan Pablo Isaza Report
Answer question
Find remote jobs

Discover the new way to find a job!

Top jobs
Top job categories
Business
Post vacancy Pricing Sales
Legal
Terms and conditions Privacy policy
© 2026 PeakU Inc. All Rights Reserved.
Andres GPT
Show me some job opportunities
There's an error!