Advertisement
Guest User

Untitled

a guest
Jun 24th, 2017
61
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
text 3.86 KB | None | 0 0
  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.  
  11. const yt_api_key = config.yt_api_key;
  12. const bot_controller = config.bot_controller;
  13. const prefix = config.prefix;
  14. const discord_token = config.discord_token;
  15.  
  16. var queue = [];
  17. var isPlaying = false;
  18. var dispatcher = null;
  19. var voiceChannel = null;
  20. var skipReq = 0;
  21. var skippers = [];
  22.  
  23. client.login(discord_token);
  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 (queue.length > 0 || isPlaying) {
  32. getID(args, function (id) {
  33. add_to_queues(id);
  34. fetchVideoInfo(id, function (err, videoInfo) {
  35. if (err) throw new Error (err);
  36. message.channel.send(" Added to queue » **" + videoInfo.title + "** by " + message.author.username + ".");
  37. });
  38. });
  39. } else {
  40. isPlaying = true;
  41. getID(args, function (id) {
  42. playMusic(id, message);
  43. fetchVideoInfo(id, function (err, videoInfo) {
  44. if (err) throw new Error (err);
  45. message.channel.send(" Now playing »** " + videoInfo.title + " **requested by " + message.author.username + ".");
  46. });
  47. });
  48. }
  49. } else if (mess.startsWith(prefix + "skip")) {
  50. if (skippers.indexOf(message.author.id) === -1) {
  51. skippers.push(message.author.id);
  52. skipReq++;
  53. if (skipReq >= Math.ceil((voiceChannel.members.size -1) / 2)) {
  54. skip_song(message);
  55. message.channel.send(" Skipping current song.")
  56. } else {
  57. message.channel.send(" Skip request »** " + (Math.ceil((voiceChannel.members.size -1) / 2) - skipReq) + " **more skip request.");
  58. } else {
  59. message.channel.send(" You can only skip once.");
  60. }
  61. }
  62. }
  63.  
  64. });
  65.  
  66. client.on('ready', function () {
  67. console.log("Warvale Bot » online");
  68. });
  69.  
  70. function skip_song(message) {
  71. dispatcher.end();
  72. if (queue.length > 1) {
  73. playMusic(queue[0], message);
  74. } else {
  75. skipReq = 0;
  76. skippers = [];
  77. }
  78. }
  79. function playMusic(id, message) {
  80. voiceChannel = message.member.voiceChannel
  81.  
  82. voiceChannel.join().then(function (connection) {
  83. stream = ytdl("https://www.youtube.com/watch?v=" + id, {
  84. filter: 'audioonly'
  85. });
  86. skipReq = 0;
  87. skippers = [];
  88.  
  89. dispatcher = connection.playStream(stream);
  90. dispatcher.on('end', function () {
  91. skipReq = 0;
  92. skippers = [];
  93. queue.shift();
  94. if (queue.length === 0) {
  95. queue = [];
  96. isPlaying = false;
  97. }else {
  98. playMusic(queue[0], message);
  99. }
  100. });
  101. });
  102. }
  103.  
  104. function getID(str, cb) {
  105. if (isYoutube(str)) {
  106. cb(getYoutubeID(str));
  107. } else {
  108. search_video(str, function (id) {
  109. cb(id);
  110. });
  111. }
  112. }
  113.  
  114. function add_to_queues(strID) {
  115. if (isYoutube(strID)) {
  116. queue.push(getYoutubeID(strID));
  117. } else {
  118. queue.push(strID);
  119. }
  120. }
  121.  
  122. function search_video(query, callback) {
  123. let options = {
  124. url: "https://www.googleapis.com/youtube/v3/search?part=id&type=video&q=" + encodeURIComponent(query) + " &key=" + yt_api_key,
  125. json:true
  126. }
  127.  
  128. request.get(options, function(error, response, body) {
  129. if(error) return console.log(error);
  130. if(response.statusCode != 200) return console.log(body);
  131.  
  132. callback(body.items[0].id.videoId);
  133. });
  134. }
  135.  
  136. function isYoutube(str) {
  137. return str.toLowerCase().indexOf("youtube.com") > -1;
  138. }
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement