From e537ecc20e9db2946410fd381eff9387a2ee5f75 Mon Sep 17 00:00:00 2001 From: loicbersier Date: Thu, 27 Feb 2020 06:52:33 +0100 Subject: [PATCH] Image to audio --- commands/fun/image2audio.js | 70 +++++++++++++++++++++++++++++++++++++ 1 file changed, 70 insertions(+) create mode 100644 commands/fun/image2audio.js diff --git a/commands/fun/image2audio.js b/commands/fun/image2audio.js new file mode 100644 index 0000000..b71d4cf --- /dev/null +++ b/commands/fun/image2audio.js @@ -0,0 +1,70 @@ +const { Command } = require('discord-akairo'); +const ffmpeg = require('fluent-ffmpeg'); +const fetch = require('node-fetch'); +const fs = require('fs'); +const os = require('os'); + +class image2audioCommand extends Command { + constructor() { + super('image2audio', { + aliases: ['image2audio', 'i2a'], + category: 'fun', + clientPermissions: ['SEND_MESSAGES', 'ATTACH_FILES'], + args: [ + { + id: 'link', + type: 'string', + } + ], + description: { + content: 'Transform an image binary data into audio ( MIGHT BECOME EAR RAPE )', + usage: '[link to image]', + examples: [''] + } + }); + } + + async exec(message, args) { + let Attachment = (message.attachments).array(); + let url = args.link; + // Get attachment link + if (Attachment[0] && !args.link) { + url = Attachment[0].url; + } + + let loadingmsg = await message.channel.send('Processing '); + + if (!url) return message.channel.send('Please attach an image or use an url'); + + fetch(url) + .then(res => { + const dest = fs.createWriteStream(`${os.tmpdir()}/${message.id}.png`); + res.body.pipe(dest); + dest.on('finish', () => { + ffmpeg(`${os.tmpdir()}/${message.id}.png`) + .format('rawvideo') + .output(`${os.tmpdir()}/${message.id}1.png`) + .on('error', (err, stdout, stderr) => console.error(`${err}\n${stdout}\n${stderr}`)) + .on('end', () => { + ffmpeg() + .audioBitrate(44100) + .audioChannels(1) + .input(`${os.tmpdir()}/${message.id}1.png`) + .inputFormat('s16le') + .output(`${os.tmpdir()}/i2a_${message.id}.wav`) + .on('error', (err, stdout, stderr) => console.error(`${err}\n${stdout}\n${stderr}`)) + .on('end', () => { + console.log('finished'); + loadingmsg.delete(); + return message.channel.send({files: [`${os.tmpdir()}/i2a_${message.id}.wav`]}); + }) + .run(); + }) + .run(); + }); + }); + + } +} + +module.exports = image2audioCommand; \ No newline at end of file