Advertisement
Guest User

Untitled

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