mirror of
https://github.com/ChomeNS/chomens-bot-mc.git
synced 2024-11-14 18:54:55 -05:00
*music discord support
This commit is contained in:
parent
0bdca956f7
commit
1cfac2db6d
1 changed files with 152 additions and 71 deletions
|
@ -1,8 +1,9 @@
|
||||||
/* eslint-disable max-len */
|
/* eslint-disable max-len */
|
||||||
const fs = require('fs/promises');
|
const fs = require('fs/promises');
|
||||||
|
const {MessageEmbed} = require('discord.js');
|
||||||
const path = require('path');
|
const path = require('path');
|
||||||
const fileExists = require('../util/file-exists');
|
const fileExists = require('../util/file-exists');
|
||||||
const list = require('../util/file-list');
|
const fileList = require('../util/file-list');
|
||||||
const axios = require('axios');
|
const axios = require('axios');
|
||||||
const os = require('os');
|
const os = require('os');
|
||||||
|
|
||||||
|
@ -14,6 +15,116 @@ if (os.hostname()==='chomens-kubuntu') {
|
||||||
SONGS_PATH = path.join(__dirname, '..', 'midis');
|
SONGS_PATH = path.join(__dirname, '..', 'midis');
|
||||||
}
|
}
|
||||||
|
|
||||||
|
async function play(bot, values, discord, channeldc) {
|
||||||
|
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);
|
||||||
|
if (discord) {
|
||||||
|
const Embed = new MessageEmbed()
|
||||||
|
.setColor('#FFFF00')
|
||||||
|
.setTitle('Music')
|
||||||
|
.setDescription(`Now playing ${song.name}`);
|
||||||
|
channeldc.send({embeds: [Embed]});
|
||||||
|
} else {
|
||||||
|
bot.core.run('minecraft:tellraw @a ' + JSON.stringify([{text: 'Now playing '}, {text: song.name, color: 'gold'}]));
|
||||||
|
}
|
||||||
|
} catch (e) {
|
||||||
|
if (discord) {
|
||||||
|
const Embed = new MessageEmbed()
|
||||||
|
.setColor('#FF0000')
|
||||||
|
.setTitle('Error')
|
||||||
|
.setDescription(`\`\`\`SyntaxError: Invalid file\`\`\``);
|
||||||
|
channeldc.send({embeds: [Embed]});
|
||||||
|
} else {
|
||||||
|
bot.core.run('minecraft:tellraw @a ' + JSON.stringify({text: 'SyntaxError: Invalid file', color: 'red'}));
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
async function playUrl(bot, values, discord, channeldc) {
|
||||||
|
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);
|
||||||
|
if (discord) {
|
||||||
|
const Embed = new MessageEmbed()
|
||||||
|
.setColor('#FFFF00')
|
||||||
|
.setTitle('Music')
|
||||||
|
.setDescription(`Now playing ${song.name}`);
|
||||||
|
channeldc.send({embeds: [Embed]});
|
||||||
|
} else {
|
||||||
|
bot.core.run('minecraft:tellraw @a ' + JSON.stringify([{text: 'Now playing '}, {text: song.name, color: 'gold'}]));
|
||||||
|
}
|
||||||
|
} catch (e) {
|
||||||
|
if (discord) {
|
||||||
|
const Embed = new MessageEmbed()
|
||||||
|
.setColor('#FF0000')
|
||||||
|
.setTitle('Error')
|
||||||
|
.setDescription(`\`\`\`SyntaxError: Invalid URL\`\`\``);
|
||||||
|
channeldc.send({embeds: [Embed]});
|
||||||
|
} else {
|
||||||
|
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;
|
||||||
|
}
|
||||||
|
|
||||||
|
async function list(bot, discord, channeldc) {
|
||||||
|
const absolutePath = await resolve(SONGS_PATH);
|
||||||
|
const listed = await fileList(absolutePath);
|
||||||
|
|
||||||
|
if (discord) {
|
||||||
|
const Embed = new MessageEmbed()
|
||||||
|
.setColor('#FFFF00')
|
||||||
|
.setTitle('Songs')
|
||||||
|
.setDescription(listed.join(', '));
|
||||||
|
channeldc.send({embeds: [Embed]});
|
||||||
|
return;
|
||||||
|
}
|
||||||
|
|
||||||
|
let color = 'gold';
|
||||||
|
const message = [];
|
||||||
|
|
||||||
|
listed.forEach((value) => {
|
||||||
|
if (color==='gold') {
|
||||||
|
color = 'yellow';
|
||||||
|
} else if (color==='yellow') {
|
||||||
|
color = 'gold';
|
||||||
|
};
|
||||||
|
message.push({text: value + ' ',
|
||||||
|
color,
|
||||||
|
clickEvent: {
|
||||||
|
action: 'suggest_command',
|
||||||
|
value: `*music play ${value}`,
|
||||||
|
},
|
||||||
|
hoverEvent: {
|
||||||
|
action: 'show_text',
|
||||||
|
contents: [
|
||||||
|
{text: 'Name: ', color: 'white'},
|
||||||
|
{text: value, color: 'gold'},
|
||||||
|
'\n',
|
||||||
|
{text: 'Click here to suggest the command!', color: 'green'},
|
||||||
|
],
|
||||||
|
}});
|
||||||
|
});
|
||||||
|
|
||||||
|
bot.core.run('minecraft:tellraw @a ' + JSON.stringify(message));
|
||||||
|
};
|
||||||
|
|
||||||
module.exports = {
|
module.exports = {
|
||||||
name: 'music',
|
name: 'music',
|
||||||
description: 'Plays music',
|
description: 'Plays music',
|
||||||
|
@ -21,75 +132,6 @@ module.exports = {
|
||||||
trusted: 0,
|
trusted: 0,
|
||||||
usage: '<play|playurl|stop|loop|list|nowplaying> <song>',
|
usage: '<play|playurl|stop|loop|list|nowplaying> <song>',
|
||||||
execute: function(bot, username, usernameraw, sender, prefix, args) {
|
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 = 'gold';
|
|
||||||
const message = [];
|
|
||||||
|
|
||||||
listed.forEach((value) => {
|
|
||||||
if (color==='gold') {
|
|
||||||
color = 'yellow';
|
|
||||||
} else if (color==='yellow') {
|
|
||||||
color = 'gold';
|
|
||||||
};
|
|
||||||
message.push({text: value + ' ',
|
|
||||||
color,
|
|
||||||
clickEvent: {
|
|
||||||
action: 'suggest_command',
|
|
||||||
value: `*music play ${value}`,
|
|
||||||
},
|
|
||||||
hoverEvent: {
|
|
||||||
action: 'show_text',
|
|
||||||
contents: [
|
|
||||||
{text: 'Name: ', color: 'white'},
|
|
||||||
{text: value, color: 'gold'},
|
|
||||||
'\n',
|
|
||||||
{text: 'Click here to suggest the command!', color: 'green'},
|
|
||||||
],
|
|
||||||
}});
|
|
||||||
});
|
|
||||||
|
|
||||||
bot.core.run('minecraft:tellraw @a ' + JSON.stringify(message));
|
|
||||||
};
|
|
||||||
|
|
||||||
if (args[0]==='play') {
|
if (args[0]==='play') {
|
||||||
play(bot, args.slice(1));
|
play(bot, args.slice(1));
|
||||||
}
|
}
|
||||||
|
@ -110,10 +152,49 @@ module.exports = {
|
||||||
bot.core.run('minecraft:tellraw @a ' + JSON.stringify([{text: 'Looping is now '}, loop]));
|
bot.core.run('minecraft:tellraw @a ' + JSON.stringify([{text: 'Looping is now '}, loop]));
|
||||||
}
|
}
|
||||||
if (args[0]==='list') {
|
if (args[0]==='list') {
|
||||||
bot.music.list(bot);
|
list(bot);
|
||||||
}
|
}
|
||||||
if (args[0]==='nowplaying') {
|
if (args[0]==='nowplaying') {
|
||||||
bot.core.run('minecraft:tellraw @a ' + JSON.stringify([{text: 'Now playing '}, {text: bot.music.song.name, color: 'gold'}]));
|
bot.core.run('minecraft:tellraw @a ' + JSON.stringify([{text: 'Now playing '}, {text: bot.music.song.name, color: 'gold'}]));
|
||||||
}
|
}
|
||||||
},
|
},
|
||||||
|
discordExecute: function(bot, username, usernameraw, sender, prefix, args, channeldc, message) {
|
||||||
|
if (args[0]==='play') {
|
||||||
|
play(bot, args.slice(1), true, channeldc);
|
||||||
|
}
|
||||||
|
if (args[0]==='playurl') {
|
||||||
|
playUrl(bot, args.slice(1), true, channeldc);
|
||||||
|
}
|
||||||
|
if (args[0]==='stop') {
|
||||||
|
try {
|
||||||
|
const Embed = new MessageEmbed()
|
||||||
|
.setColor('#FFFF00')
|
||||||
|
.setTitle('Stop')
|
||||||
|
.setDescription(`Stopped playing ${bot.music.song.name}`);
|
||||||
|
channeldc.send({embeds: [Embed]});
|
||||||
|
} catch (e) {
|
||||||
|
return;
|
||||||
|
}
|
||||||
|
bot.music.stop();
|
||||||
|
}
|
||||||
|
if (args[0]==='loop') {
|
||||||
|
bot.music.loop = !bot.music.loop;
|
||||||
|
const loop = bot.music.loop ? 'enabled' : 'disabled';
|
||||||
|
const Embed = new MessageEmbed()
|
||||||
|
.setColor('#FFFF00')
|
||||||
|
.setTitle('Loop')
|
||||||
|
.setDescription(`Looping is now ${loop}`);
|
||||||
|
channeldc.send({embeds: [Embed]});
|
||||||
|
}
|
||||||
|
if (args[0]==='list') {
|
||||||
|
list(bot, true, channeldc);
|
||||||
|
}
|
||||||
|
if (args[0]==='nowplaying') {
|
||||||
|
const Embed = new MessageEmbed()
|
||||||
|
.setColor('#FFFF00')
|
||||||
|
.setTitle('Now playing')
|
||||||
|
.setDescription(`Now playing ${bot.music.song.name}`);
|
||||||
|
channeldc.send({embeds: [Embed]});
|
||||||
|
}
|
||||||
|
},
|
||||||
};
|
};
|
||||||
|
|
Loading…
Reference in a new issue