forked from embee/woomy
music
This commit is contained in:
parent
019b8a03e4
commit
1b013581de
3 changed files with 120 additions and 3 deletions
20
commands/play.js
Normal file
20
commands/play.js
Normal file
|
@ -0,0 +1,20 @@
|
||||||
|
exports.conf = {
|
||||||
|
enabled: true,
|
||||||
|
guildOnly: false,
|
||||||
|
aliases: [],
|
||||||
|
permLevel: 'User',
|
||||||
|
requiredPerms: [],
|
||||||
|
cooldown: 2000
|
||||||
|
}
|
||||||
|
|
||||||
|
exports.help = {
|
||||||
|
name: 'play',
|
||||||
|
category: 'Music',
|
||||||
|
description: 'Plays or adds to queue requested music.',
|
||||||
|
usage: 'play [query]',
|
||||||
|
params: '[query] - A query to find video by or a link to the video.'
|
||||||
|
}
|
||||||
|
|
||||||
|
exports.run = async (client, message, args, level, data) => {
|
||||||
|
client.music.play(message, args[0]);
|
||||||
|
}
|
|
@ -5,7 +5,12 @@ const getYoutubeId = require('get-youtube-id')
|
||||||
const fetch = require('node-fetch')
|
const fetch = require('node-fetch')
|
||||||
*/
|
*/
|
||||||
|
|
||||||
|
const ytdl = require('ytdl-core-discord');
|
||||||
|
const fetch = require('node-fetch');
|
||||||
|
|
||||||
module.exports = client => {
|
module.exports = client => {
|
||||||
|
client.music = {guilds: {}};
|
||||||
|
|
||||||
// MUSIC - TIMESTAMP
|
// MUSIC - TIMESTAMP
|
||||||
client.createTimestamp = function (duration) {
|
client.createTimestamp = function (duration) {
|
||||||
var hrs = ~~(duration / 60 / 60)
|
var hrs = ~~(duration / 60 / 60)
|
||||||
|
@ -31,4 +36,96 @@ module.exports = client => {
|
||||||
var time = hrs + min + ':' + sec
|
var time = hrs + min + ':' + sec
|
||||||
return time
|
return time
|
||||||
}
|
}
|
||||||
|
|
||||||
|
client.music.getGuild = function(id) {
|
||||||
|
let guild = client.music.guilds[id];
|
||||||
|
|
||||||
|
if(!guild) {
|
||||||
|
guild = {};
|
||||||
|
|
||||||
|
guild.dispatcher = null;
|
||||||
|
guild.playing = false;
|
||||||
|
guild.queue = [];
|
||||||
|
|
||||||
|
client.music.guilds[id] = guild;
|
||||||
|
};
|
||||||
|
|
||||||
|
return guild;
|
||||||
|
};
|
||||||
|
|
||||||
|
client.music.isYouTubeLink = function(query) {
|
||||||
|
return query.startsWith('https://youtube.com/') || query.startsWith('http://youtube.com/') || query.startsWith('https://youtu.be/') || query.startswith('http://youtu.be/') || query.startsWith('https://m.youtube.com/') || query.startsWith('http://m.youtube.com/') || query.startsWith('https://www.youtube.com/') || query.startsWith('http://www.youtube.com/');
|
||||||
|
};
|
||||||
|
|
||||||
|
client.music.getLinkFromID = function(id) {
|
||||||
|
return 'https://www.youtube.com/watch?v=' + id;
|
||||||
|
};
|
||||||
|
|
||||||
|
client.music.getVideoByQuery = async function(query) {
|
||||||
|
let isLink = client.music.isYouTubeLink(query);
|
||||||
|
|
||||||
|
let response;
|
||||||
|
|
||||||
|
if(isLink) {
|
||||||
|
response = await fetch('https://www.googleapis.com/youtube/v3/search?key=' + client.config.keys.yt + '&part=id,snippet&maxResults=1&id=' + id);
|
||||||
|
} else {
|
||||||
|
response = await fetch('https://www.googleapis.com/youtube/v3/search?key=' + client.config.keys.yt + '&part=id,snippet&maxResults=1&q=' + encodeURIComponent(query));
|
||||||
|
};
|
||||||
|
|
||||||
|
let json = await response.json();
|
||||||
|
|
||||||
|
let parsed = JSON.parse(json);
|
||||||
|
|
||||||
|
if(parsed.items) {
|
||||||
|
let video = parsed.items[0];
|
||||||
|
|
||||||
|
if(video) {
|
||||||
|
return video;
|
||||||
|
} else {
|
||||||
|
return false;
|
||||||
|
};
|
||||||
|
} else {
|
||||||
|
return false;
|
||||||
|
};
|
||||||
|
};
|
||||||
|
|
||||||
|
client.music.play = async function(message, query) {
|
||||||
|
let guild = client.music.getGuild(message.guild.id);
|
||||||
|
|
||||||
|
if(!message.member.voice.channel && !guild.voiceChannel) {
|
||||||
|
return message.member.reply('you are not in a voice channel!');
|
||||||
|
}
|
||||||
|
|
||||||
|
let vc = message.member.voice.channel;
|
||||||
|
|
||||||
|
let video = client.music.getVideoByQuery(query);
|
||||||
|
|
||||||
|
if(video) {
|
||||||
|
// Fix the bot if somehow broken
|
||||||
|
// music "playing", nothing in queue
|
||||||
|
if((guild.playing || guild.dispatcher) && guild.queue.length == 0) {
|
||||||
|
guild.playing = false;
|
||||||
|
guild.dispatcher = null;
|
||||||
|
// music not playing, something is in queue
|
||||||
|
} else if(!guild.playing && !guild.dispatcher && guild.queue.length > 0) {
|
||||||
|
guild.queue = [];
|
||||||
|
};
|
||||||
|
|
||||||
|
// Add video to queue
|
||||||
|
guild.queue.push({video: video, requestedBy: message.member.id});
|
||||||
|
|
||||||
|
// Figure out if the bot should add it to queue or play it right now
|
||||||
|
if(guild.playing) {
|
||||||
|
|
||||||
|
} else {
|
||||||
|
guild.playing = true;
|
||||||
|
|
||||||
|
let connection = await vc.join();
|
||||||
|
guild.dispatcher = connection.play(await ytdl(client.music.getLinkFromID(guild.queue[0].id.videoId)), {type: 'opus'});
|
||||||
|
guild.dispatcher.setVolume(0.5);
|
||||||
|
};
|
||||||
|
} else {
|
||||||
|
return message.member.reply('failed to find the video!');
|
||||||
|
};
|
||||||
|
};
|
||||||
}
|
}
|
||||||
|
|
6
package-lock.json
generated
6
package-lock.json
generated
|
@ -276,9 +276,9 @@
|
||||||
"integrity": "sha512-rr+OQyAjxze7GgWrSaJwydHStIhHq2lvY3BOC2Mj7KnzI7XK0Uw1TOOdI9lDoajEbSWLiYgoo4f1R51erQfhPQ=="
|
"integrity": "sha512-rr+OQyAjxze7GgWrSaJwydHStIhHq2lvY3BOC2Mj7KnzI7XK0Uw1TOOdI9lDoajEbSWLiYgoo4f1R51erQfhPQ=="
|
||||||
},
|
},
|
||||||
"@types/node": {
|
"@types/node": {
|
||||||
"version": "13.9.8",
|
"version": "13.11.1",
|
||||||
"resolved": "https://registry.npmjs.org/@types/node/-/node-13.9.8.tgz",
|
"resolved": "https://registry.npmjs.org/@types/node/-/node-13.11.1.tgz",
|
||||||
"integrity": "sha512-1WgO8hsyHynlx7nhP1kr0OFzsgKz5XDQL+Lfc3b1Q3qIln/n8cKD4m09NJ0+P1Rq7Zgnc7N0+SsMnoD1rEb0kA=="
|
"integrity": "sha512-eWQGP3qtxwL8FGneRrC5DwrJLGN4/dH1clNTuLfN81HCrxVtxRjygDTUoZJ5ASlDEeo0ppYFQjQIlXhtXpOn6g=="
|
||||||
},
|
},
|
||||||
"abort-controller": {
|
"abort-controller": {
|
||||||
"version": "3.0.0",
|
"version": "3.0.0",
|
||||||
|
|
Loading…
Reference in a new issue