/* eslint-disable max-len */ const fs = require('fs/promises'); const path = require('path'); const fileExists = require('../util/file-exists'); const list = require('../util/file-list'); const axios = require('axios'); const os = require('os'); let SONGS_PATH; if (os.hostname()==='chomens-kubuntu') { SONGS_PATH = path.join(__dirname, '..', '..', 'nginx-html', 'midis'); } else { SONGS_PATH = path.join(__dirname, '..', 'midis'); } module.exports = { name: 'music', description: 'Plays music', alias: [], trusted: 0, usage: ' ', execute: function(bot, username, usernameraw, sender, prefix, args) { async function play(bot, values) { try { const filepath = values.join(' '); const absolutePath = await resolve(filepath); const song = bot.music.load(await fs.readFile(absolutePath), path.basename(absolutePath)); bot.music.play(song); bot.core.run('minecraft:tellraw @a ' + JSON.stringify([{text: 'Now playing '}, {text: song.name, color: 'gold'}])); } catch (e) { bot.core.run('minecraft:tellraw @a ' + JSON.stringify({text: 'SyntaxError: Invalid file', color: 'red'})); } } async function playUrl(bot, values) { try { const url = values.join(' '); const response = await axios.get('https://http-proxy.nongsonchome.repl.co', { params: { uri: url, }, responseType: 'arraybuffer', }); const song = bot.music.load(response.data, url); bot.music.play(song); bot.core.run('minecraft:tellraw @a ' + JSON.stringify([{text: 'Now playing '}, {text: song.name, color: 'gold'}])); } catch (e) { bot.core.run('minecraft:tellraw @a ' + JSON.stringify({text: 'SyntaxError: Invalid URL', color: 'red'})); } } async function resolve(filepath) { if (!path.isAbsolute(filepath) && await fileExists(SONGS_PATH)) { return path.join(SONGS_PATH, filepath); } return filepath; } bot.music.list = async function(bot) { const absolutePath = await resolve(SONGS_PATH); const listed = await list(absolutePath); let color = '§4'; let message = ''; listed.forEach((value) => { if (color==='§4') { color = '§e'; } else if (color==='§e') { color = '§4'; }; message += color + value + ' '; }); bot.core.run('minecraft:tellraw @a ' + JSON.stringify({text: message, color: 'red'})); }; if (args[0]==='play') { play(bot, args.slice(1)); } if (args[0]==='playurl') { playUrl(bot, args.slice(1)); } if (args[0]==='stop') { try { bot.core.run('minecraft:tellraw @a ' + JSON.stringify([{text: 'Stopped playing '}, {text: bot.music.song.name, color: 'gold'}])); } catch (e) { return; } bot.music.stop(); } if (args[0]==='loop') { bot.music.loop = !bot.music.loop; const loop = bot.music.loop ? {text: 'enabled', color: 'green'} : {text: 'disabled', color: 'red'}; bot.core.run('minecraft:tellraw @a ' + JSON.stringify([{text: 'Looping is now '}, loop])); } if (args[0]==='list') { bot.music.list(bot); } if (args[0]==='nowplaying') { bot.core.run('minecraft:tellraw @a ' + JSON.stringify([{text: 'Now playing '}, {text: bot.music.song.name, color: 'gold'}])); } }, };