"use strict"; var __awaiter = (this && this.__awaiter) || function (thisArg, _arguments, P, generator) { function adopt(value) { return value instanceof P ? value : new P(function (resolve) { resolve(value); }); } return new (P || (P = Promise))(function (resolve, reject) { function fulfilled(value) { try { step(generator.next(value)); } catch (e) { reject(e); } } function rejected(value) { try { step(generator["throw"](value)); } catch (e) { reject(e); } } function step(result) { result.done ? resolve(result.value) : adopt(result.value).then(fulfilled, rejected); } step((generator = generator.apply(thisArg, _arguments || [])).next()); }); }; var __importDefault = (this && this.__importDefault) || function (mod) { return (mod && mod.__esModule) ? mod : { "default": mod }; }; Object.defineProperty(exports, "__esModule", { value: true }); const ytdl_core_1 = __importDefault(require("ytdl-core")); const discord_js_commando_1 = require("discord.js-commando"); const discord_js_1 = require("discord.js"); const simple_youtube_api_1 = __importDefault(require("simple-youtube-api")); const config_json_1 = __importDefault(require("../../config.json")); const youtube = new simple_youtube_api_1.default(config_json_1.default['yt-api-key']); const emoji_random_1 = __importDefault(require("emoji-random")); module.exports = class PlayVoice extends discord_js_commando_1.Command { constructor(client) { super(client, { name: 'play', group: 'voice', memberName: 'play', description: 'Play the audio of a YouTube video in a voice channel. (Other audio providers coming soon!)', guildOnly: true, clientPermissions: ['SPEAK', 'CONNECT', 'SEND_MESSAGES', 'READ_MESSAGE_HISTORY'], userPermissions: ['SEND_MESSAGES', 'READ_MESSAGE_HISTORY'], args: [ { key: 'query', prompt: 'What song would you like to hear?', type: 'string', validate: function (query) { return query.length > 0 && query.length < 200; } } ], examples: [ 'uwu!play https://www.youtube.com/watch?v=dQw4w9WgXcQ', 'uwu!play despacito' ], throttling: { usages: 5, duration: 30 }, }); } run(msg, { query }) { return __awaiter(this, void 0, void 0, function* () { const voiceChannel = msg.member.voice.channel; if (!voiceChannel) return msg.say('Please join a channel and try again. ' + emoji_random_1.default.random()); if (query.match(/^(?!.*\?.*\bv=)https:\/\/www\.youtube\.com\/.*\?.*\blist=.*$/)) { const playlist = yield youtube.getPlaylist(query).catch(function () { return msg.say('Playlist is either private or it does not exist. ' + emoji_random_1.default.random()); }); const videosObj = yield playlist.getVideos(10).catch(function () { return msg.say('There was a problem getting one or more of the videos in the playlist. ' + emoji_random_1.default.random()); }); for (let i = 0; i < videosObj.length; i++) { const video = yield videosObj[i].fetch(); msg.guild.musicData.queue.push(this.constructSongObj(video, voiceChannel)); } if (msg.guild.musicData.isPlaying == false) { msg.guild.musicData.isPlaying = true; return this.playSong(msg.guild.musicData.queue, msg); } else if (msg.guild.musicData.isPlaying == true) { return msg.say(`Playlist - :musical_note: ${playlist.title} :musical_note: has been added to queue. ` + emoji_random_1.default.random()); } } if (query.match(/^(http(s)?:\/\/)?((w){3}.)?youtu(be|.be)?(\.com)?\/.+/)) { query = query .replace(/(>|<)/gi, '') .split(/(vi\/|v=|\/v\/|youtu\.be\/|\/embed\/)/); const id = query[2].split(/[^0-9a-z_\-]/i)[0]; const video = yield youtube.getVideoByID(id).catch(function () { return msg.say('There was a problem getting the video you provided. ' + emoji_random_1.default.random()); }); msg.guild.musicData.queue.push(this.constructSongObj(video, voiceChannel)); if (msg.guild.musicData.isPlaying == false || typeof msg.guild.musicData.isPlaying == 'undefined') { msg.guild.musicData.isPlaying = true; return this.playSong(msg.guild.musicData.queue, msg); } else if (msg.guild.musicData.isPlaying == true) { return msg.say(`${video.title} added to queue. ` + emoji_random_1.default.random()); } } const videos = yield youtube.searchVideos(query, 5).catch(function () { return msg.say('There was a problem searching the video you requested. ' + emoji_random_1.default.random()); }); if (videos.length < 5) { return msg.say(`There was some trouble finding what you were looking for, please try again or be more specific. ` + emoji_random_1.default.random()); } const vidNameArr = []; for (let i = 0; i < videos.length; i++) { vidNameArr.push(`${i + 1}: ${videos[i].title}`); } vidNameArr.push('exit'); const embed = new discord_js_1.MessageEmbed() .setColor(0xFFCC4D) .setTitle('Please choose a song (1 to 5) ' + emoji_random_1.default.random()) .addField(`‎`, '**Song #**' + vidNameArr[0]) .addField(`‎`, '**Song #**' + vidNameArr[1]) .addField(`‎`, '**Song #**' + vidNameArr[2]) .addField(`‎`, '**Song #**' + vidNameArr[3]) .addField(`‎`, '**Song #**' + vidNameArr[4]) .addField(`‎`, '**Exit selection**: ' + 'exit'); var songEmbed = yield msg.say({ embed }); var that = this; msg.channel .awaitMessages(function (msg) { return (msg.content > 0 && msg.content < 6) || msg.content === 'exit'; }, { max: 1, time: 60000, errors: ['time'] }) .then(function (response) { const videoIndex = parseInt(response.first().content); if (response.first().content === 'exit') return songEmbed.delete(); youtube .getVideoByID(videos[videoIndex - 1].id) .then(function (video) { msg.guild.musicData.queue.push(that.constructSongObj(video, voiceChannel)); if (msg.guild.musicData.isPlaying == false) { msg.guild.musicData.isPlaying = true; if (songEmbed) { songEmbed.delete(); } that.playSong(msg.guild.musicData.queue, msg); } else if (msg.guild.musicData.isPlaying == true) { if (songEmbed) { songEmbed.delete(); } return msg.say(`${video.title} added to queue. ` + emoji_random_1.default.random()); } }) .catch(function () { if (songEmbed) { songEmbed.delete(); } return msg.say('An error has occured when trying to get the video ID from YouTube. ' + emoji_random_1.default.random()); }); }) .catch(function () { if (songEmbed) { songEmbed.delete(); } return msg.say('Try again and enter a number between 1 and 5 or exit. ' + emoji_random_1.default.random()); }); }); } playSong(queue, msg) { const classThis = this; queue[0].voiceChannel .join() .then(function (connection) { const dispatcher = connection .play(ytdl_core_1.default(queue[0].url, { quality: 'highestaudio', highWaterMark: 1024 * 1024 * 10 })) .on('start', function () { msg.guild.musicData.songDispatcher = dispatcher; const volume = 100 / 100; msg.guild.musicData.volume = volume; dispatcher.setVolume(msg.guild.musicData.volume); const videoEmbed = new discord_js_1.MessageEmbed() .setThumbnail(queue[0].thumbnail) .setColor(0xFFCC4D) .addField('Now playing:', queue[0].title) .addField('Duration:', queue[0].duration); if (queue[1]) videoEmbed.addField('Next song:', queue[1].title); msg.say(videoEmbed); msg.guild.musicData.nowPlaying = queue[0]; return queue.shift(); }) .on('finish', function () { if (queue.length >= 1) { return classThis.playSong(queue, msg); } else { msg.guild.musicData.isPlaying = false; msg.guild.musicData.nowPlaying = null; msg.guild.musicData.songDispatcher = null; return msg.guild.me.voice.channel.leave(); } }) .on('error', function (e) { msg.say('Can\'t play song. ' + emoji_random_1.default.random()); console.error(e); msg.guild.musicData.queue.length = 0; msg.guild.musicData.isPlaying = false; msg.guild.musicData.nowPlaying = null; msg.guild.musicData.songDispatcher = null; return msg.guild.me.voice.channel.leave(); }); }) .catch(function (e) { console.error(e); return msg.guild.me.voice.channel.leave(); }); } constructSongObj(video, voiceChannel) { let duration = this.formatDuration(video.duration); if (duration == '00:00') duration = 'Live Stream'; return { url: `https://www.youtube.com/watch?v=${video.raw.id}`, title: video.title, duration, thumbnail: video.thumbnails.high.url, voiceChannel }; } formatDuration(durationObj) { const duration = `${durationObj.hours ? (durationObj.hours + ':') : ''}${durationObj.minutes ? durationObj.minutes : '00'}:${(durationObj.seconds < 10) ? ('0' + durationObj.seconds) : (durationObj.seconds ? durationObj.seconds : '00')}`; return duration; } }; //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoicGxheS5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uLy4uL3NyYy9jb21tYW5kcy92b2ljZS9wbGF5LnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiI7Ozs7Ozs7Ozs7Ozs7O0FBQUEsMERBQTZCO0FBQzdCLDZEQUErRDtBQUMvRCwyQ0FBMEM7QUFDMUMsNEVBQXlDO0FBRXpDLG9FQUF1QztBQUN2QyxNQUFNLE9BQU8sR0FBRyxJQUFJLDRCQUFPLENBQUMscUJBQU0sQ0FBQyxZQUFZLENBQUMsQ0FBQyxDQUFDO0FBQ2xELGdFQUFpQztBQUVqQyxNQUFNLENBQUMsT0FBTyxHQUFHLE1BQU0sU0FBVSxTQUFRLDZCQUFPO0lBQzVDLFlBQVksTUFBTTtRQUNkLEtBQUssQ0FBQyxNQUFNLEVBQUU7WUFDVixJQUFJLEVBQUUsTUFBTTtZQUNaLEtBQUssRUFBRSxPQUFPO1lBQ2QsVUFBVSxFQUFFLE1BQU07WUFDbEIsV0FBVyxFQUFFLDRGQUE0RjtZQUN6RyxTQUFTLEVBQUUsSUFBSTtZQUNmLGlCQUFpQixFQUFFLENBQUMsT0FBTyxFQUFFLFNBQVMsRUFBRSxlQUFlLEVBQUUsc0JBQXNCLENBQUM7WUFDaEYsZUFBZSxFQUFFLENBQUMsZUFBZSxFQUFFLHNCQUFzQixDQUFDO1lBQzFELElBQUksRUFBRTtnQkFDRjtvQkFDSSxHQUFHLEVBQUUsT0FBTztvQkFDWixNQUFNLEVBQUUsbUNBQW1DO29CQUMzQyxJQUFJLEVBQUUsUUFBUTtvQkFDZCxRQUFRLEVBQUUsVUFBVSxLQUFLO3dCQUNyQixPQUFPLEtBQUssQ0FBQyxNQUFNLEdBQUcsQ0FBQyxJQUFJLEtBQUssQ0FBQyxNQUFNLEdBQUcsR0FBRyxDQUFDO29CQUNsRCxDQUFDO2lCQUNKO2FBQ0o7WUFDRCxRQUFRLEVBQUU7Z0JBQ04sc0RBQXNEO2dCQUN0RCxvQkFBb0I7YUFDdkI7WUFDRCxVQUFVLEVBQUU7Z0JBQ1IsTUFBTSxFQUFFLENBQUM7Z0JBQ1QsUUFBUSxFQUFFLEVBQUU7YUFDZjtTQUNK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