Estoy tratando de crear un bot de discordia que guarde las imágenes que se le envían en una carpeta, y recibo este error:
TypeError: [ERR_INVALID_ARG_TYPE]: The "data" argument must be of type string or an instance of Buffer, TypedArray, or DataView. Received undefined.Este es mi código:
const Discord = require("discord.js"); const fs = require("fs"); const client = new Discord.Client(); var prefix = "." client.on("ready", () => { client.user.setStatus('online'); console.log("Bot is on.") }); client.on("message", message => { console.log(__dirname) var image = message.attachments.first() fs.writeFileSync(`./${image.name}`, image.file); }) client.login(process.env.token);Nota: estoy usando Discord.js v12.5.3
No hay ninguna propiedad de archivo en los attachments . Sin embargo, hay una propiedad de url desde donde puede descargar la imagen. Puede usar node-fetch para obtener el archivo (deberá instalarlo ejecutando npm i node-fetch@2 en su línea de comando). Una vez que se obtiene el archivo, puede usar fs.writeFileSync() .
El siguiente código funciona bien:
// using discord.js v12 const { Client } = require('discord.js'); const fetch = require('node-fetch'); const fs = require('fs'); const client = new Client(); const prefix = '.'; client.on('message', async (message) => { if (message.author.bot) return; const image = message.attachments.first(); if (!image) return console.log('No attached image found'); // add more if needed const imageFiles = ['image/gif', 'image/jpeg', 'image/png', 'image/webp']; if (!imageFiles.includes(image.contentType)) return console.log('Not an image file'); try { const res = await fetch(image.url); const buffer = await res.buffer(); fs.writeFileSync(`./${image.name}`, buffer); } catch (error) { console.log(`Error reading/writing image file:`, error); } });