Empresas
Empregos
  • Sobre nós
  • Soluções
    • Publicação de vagas
      Publique sua vaga e receba candidatos qualificados em 48h.
    • Avaliações de candidatos
      Mais de 500 testes técnicos e psicológicos, mais anti-fraude.
    • Headhunting
      Busca executiva personalizada do início ao fim.
    • Folha de Pagamento + EOR
      Dispersão de folha e EOR em mais de 15 países da LATAM.
  • Preços
  • Empregos

0

451
Visualizações
¿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 Respostas
Responde à pergunta

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 Relatório

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 Relatório
Responde à pergunta
Encontrar trabalhos remotos

Descubra a nova forma de encontrar um emprego!

melhores empregos
Principais categorias de trabalho
Empresas
Postar vaga Preços Comercial
Jurídico
Termos e Condições Política de privacidade
© 2026 PeakU Inc. All Rights Reserved.
Andres GPT
Recomende algumas ofertas para mim
Preciso de ajuda