diff --git a/.gitignore b/.gitignore index 5693cd7..4075e3d 100644 --- a/.gitignore +++ b/.gitignore @@ -1,3 +1,4 @@ node_modules +midifiles .env package-lock.json diff --git a/commands/Utilities/midi.js b/commands/Utilities/midi.js new file mode 100644 index 0000000..856a5af --- /dev/null +++ b/commands/Utilities/midi.js @@ -0,0 +1,124 @@ +exports.run = async (bot, message, args, functions) => { + let argscmd = message.content.split(" ").slice(1); + let urlcmd = argscmd[0]; + + if (!urlcmd) return message.reply("Please give me a MIDI URL or command"); + + + var fs = require('fs'); + const synth = require('synth-js'); + var nrc = require('node-run-cmd'); + + var download = require('download-file') + + var url = urlcmd + if (url != "stop") { + var name = Math.floor(Math.random() * 999999); + var callback = function(exitCodes) { + console.log('Called Back - Converting....'); + + let midiBuffer = fs.readFileSync('./midifiles/' + name + ".mid"); + // convert midi buffer to wav buffer + let wavBuffer = synth.midiToWav(midiBuffer).toBuffer(); + + fs.writeFileSync('/var/www/html/midi/' + name + ".wav", wavBuffer, { + encoding: 'binary' + }); + if (message.member.voice.channel) { + + message.member.voice.channel.join() + .then(connection => { // Connection is an instance of VoiceConnection + console.log('Sending and Playing'); + const date = require('date-and-time'); + const now = new Date(); + message.channel.send({ + "embed": { + "color": 2899536, + "footer": { + "text": date.format(now, 'MM/DD/YYYY hh:mm:ss') + }, + "fields": [ + + { + "name": "Midi Sound Generator", + "value": "Here is the sound file: \n https://midi.codingvm.codes/" + name + ".wav \n It should also be playing within the voice channel" , + "inline": true + } + ] + } + }); + + const dispatcher = connection.play('/var/www/html/midi/' + name + ".wav"); + dispatcher.on("end", end => { + message.member.voice.channel.leave(); + }); + + dispatcher.on('error', e => { + // Catch any errors that may arise + return message.reply(e); + + }); + + }) + + .catch(console.log); + + + } else { + + const date = require('date-and-time'); + const now = new Date(); + message.channel.send({ + "embed": { + "color": 2899536, + "footer": { + "text": date.format(now, 'MM/DD/YYYY hh:mm:ss') + }, + "fields": [ + + { + "name": "Midi Sound Generator", + "value": "Here is the sound file: \n https://midi.codingvm.codes/" + name + ".wav \n If you join voice, I can also play it when finished." , + "inline": true + } + ] + } + }); + } + + } + + message.reply('Please wait, Converting your file...'); + nrc.run('wget ' + url + ' -O ./midifiles/' + name + '.mid', { + onDone: callback + }); + + console.log('wget ' + url + ' -O ./midifiles/' + name + '.mid'); + } + + if (url == "stop") { + message.reply('I have stopped...'); + console.log('Stopping...'); + message.member.voice.channel.leave(); + + + } + + +} + + +exports.conf = { + enabled: true, + guildOnly: false, + aliases: [''], + permLevel: "User" + }; + + exports.help = { + name: "midi", + category: "Troll", + description: "", + usage: "midi" + }; + \ No newline at end of file