Empresas
Empleos
  • Sobre nosotros
  • Soluciones
    • Publicación de vacantes
      Publica tu vacante y recibe candidatos calificados en 48h.
    • Evaluación de candidatos
      500+ pruebas técnicas y psicológicas, más anti-fraude.
    • Headhunting
      Búsqueda ejecutiva a la medida de principio a fin.
    • Nómina + EOR
      Dispersión de nómina y EOR en más de 15 países de LATAM.
  • Precios
  • Empleos

0

452
Vistas
¿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 Respuestas
Responde la pregunta

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 Denunciar

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 Denunciar
Responde la pregunta
Encuentra empleos remotos

¡Descubre la nueva forma de encontrar empleo!

Top de empleos
Top categorías de empleo
Empresas
Publicar vacante Precios Comercial
Legal
Términos y condiciones Política de privacidad
© 2026 PeakU Inc. All Rights Reserved.
Andres GPT
Recomiéndame algunas ofertas
Necesito ayuda