2022-08-14 05:51:45 -04:00
|
|
|
/* 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: '<play|playurl|stop|loop|list|nowplaying> <song>',
|
|
|
|
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);
|
|
|
|
|
2022-08-17 09:39:25 -04:00
|
|
|
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'}));
|
2022-08-14 05:51:45 -04:00
|
|
|
};
|
|
|
|
|
|
|
|
if (args[0]==='play') {
|
|
|
|
play(bot, args.slice(1));
|
|
|
|
}
|
|
|
|
if (args[0]==='playurl') {
|
|
|
|
playUrl(bot, args.slice(1));
|
|
|
|
}
|
|
|
|
if (args[0]==='stop') {
|
2022-08-16 08:15:11 -04:00
|
|
|
try {
|
|
|
|
bot.core.run('minecraft:tellraw @a ' + JSON.stringify([{text: 'Stopped playing '}, {text: bot.music.song.name, color: 'gold'}]));
|
|
|
|
} catch (e) {
|
|
|
|
return;
|
|
|
|
}
|
2022-08-14 05:51:45 -04:00
|
|
|
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'}]));
|
|
|
|
}
|
|
|
|
},
|
|
|
|
};
|