Advertisement
Guest User

Untitled

a guest
Dec 11th, 2017
94
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
  1. const Discord = require("discord.js");
  2. const client = new Discord.Client();
  3. const ytdl = require("ytdl-core");
  4. const request = require("request");
  5. const fs = require("fs");
  6. const getYoutubeID = require("get-youtube-id");
  7. const fetchVideoInfo = require("youtube-info")
  8.  
  9. var config = JSON.parse(fs.readFileSync('./settings.json', 'utf-8'));
  10. const yt_api_key = config.yt_api_key
  11. const bot_controller = config.bot_controller;
  12. const prefix = config.prefix;
  13. const discord_token = config.discord_token;
  14.  
  15. client.login(discord_token);
  16.  
  17. var queue = [];
  18. var queueNames = [];
  19. var isPlaying = false;
  20. var dispatcher = null;
  21. var voicechannel = null;
  22. var skipReq = 0;
  23. var skippers = [];
  24.    
  25. client.on("message", function (message) {
  26.     const member = message.member;
  27.     const mess = message.content.toLowerCase();
  28.     const args = message.content.split(' ').slice(1).join(" ")
  29.  
  30.     if (mess.startsWith(prefix + "play")) {
  31.         if (member.voiceChannel || client.guild.get("387879921911070721").voiceConnection != null) {
  32.             if (queue.length > 0 || isPlaying) {
  33.                 getID(args, function (id) {
  34.                     add_to_queue(id);
  35.                     fetchVideoInfo(id, function (err, videoInfo) {
  36.                         if (err) throw new Error(err);
  37.                         message.reply(" Added to queue: **" + videoInfo.title + "**");
  38.                         queueNames.push(videoInfo.title)
  39.                     })
  40.                 });
  41.             } else {
  42.                 isPlaying = true;
  43.                 getID(args, function (id) {
  44.                     queue.push("placeholder");
  45.                     playMusic(id, message);
  46.                     fetchVideoInfo(id, function (err, videoInfo) {
  47.                         if (err) throw new Error(err);
  48.                         message.reply(" Now playing **" + videoInfo.title + "**");
  49.                     })
  50.                 });
  51.             }
  52.         } else {
  53.             message.reply("You need to be in a voice channel!");
  54.         }
  55.  
  56.     } else if (mess.startsWith(prefix + "skip")) {
  57.         if (skippers.indexOf(message.author.id) === -1) {
  58.             skippers.push(message.author.id);
  59.             skipReq++;
  60.             if (skipReq >= Math.ceil((voicechannel.members.size - 1) / 2)) {
  61.                 skip_song(message);
  62.                 message.reply("your skip has been acknowledged. Skipping now!")
  63.             } else {
  64.                 message.reply("your skip has been acknowledged. You need **" + Math.ceil((voicechannel.members.size - 1) / 2) - skipReq) = "** more skip votes!";
  65.             }
  66.         } else {
  67.             message.reply("you already voted to skip!")
  68.         }
  69.     } else if (mess.startsWIth(prefix + "queue")) {
  70.         var mess = "```";
  71.         for (var i = 0; i < queueNames.length; i++) {
  72.             var temp = (i + 1) + ":" + queueNames[i] + (i === 0 ? "**(Current Song)**" : "") + "\n";
  73.             if ((message2 + temp).length <= 2000 - 3) {
  74.                 message2 += temp;
  75.             } else {
  76.                 message2 += "```"
  77.                 message.channel.send(message2);
  78.                 message2 = "```";
  79.             }
  80.         }
  81.         message2 += "```";
  82.         message.channel.send(message2)
  83.             }
  84.         }
  85.     }
  86. }
  87.    
  88.  
  89.  
  90.  
  91.     Client.on("ready", function () {
  92.         console.log("I am ready!");
  93.     });
  94.     function skip_song(message) {
  95.         dispatcher.end();
  96.     }
  97.  
  98.     function playMusic(id, message) {
  99.         voicechannel = message.member.voiceChannel;
  100.  
  101.  
  102.  
  103.         voicechannel.join().then(function (connection) {
  104.             stream = ytdl("https://www.youtube.com/watch?v=" + id, {
  105.                 filer: "audioonly"
  106.             });
  107.             skipReq = 0;
  108.             skippers = [];
  109.             dispatcher = connection.playStream(stream);
  110.             queue.shift();
  111.             queueNames.shift
  112.             if (queue.length == 0) {
  113.                 queue = [];
  114.                 queueNames = [];
  115.                 isPlaying = false;
  116.             } else {
  117.                 setTimeout(function () {
  118.                     playMusic(queue[0], message);
  119.                 }, 500);
  120.             }
  121.            
  122.         });
  123.     }
  124.  
  125.  
  126.  
  127.  
  128.  
  129.     function isYoutube(str) {
  130.         return str.toLowerCase().indexOf("youtube.com") > -1;
  131.     }
  132.  
  133.     function getID(str, cb) {
  134.         if (isYoutube(str)) {
  135.             cb(getYoutubeID(str));
  136.         } else {
  137.             search_video(str, function (id) {
  138.                 cb(id);
  139.             });
  140.         }
  141.     }
  142.     function add_to_queue(strID) {
  143.         if (isYoutube(strID)) {
  144.             queue.push(getYoutubeID(strID));
  145.         } else {
  146.             queue.push(strID);
  147.         }
  148.     }
  149.     function search_video(query, callback) {
  150.         request("https://www.googleapis.com/youtube/v3/search?part=id&type=video&q=" + encodeURIComponent(query) + "&key=" + yt_api_key, function (error, response, body) {
  151.             var json = JSON.parse(body);
  152.             callback(json.items[0].id.videoId);
  153.  
  154.         });
  155.     };
  156. })
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement