Advertisement
Mittod

Untitled

Jan 25th, 2020
118
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
text 16.32 KB | None | 0 0
  1. let channel = "0";
  2. let playing = false;
  3. let paused = false;
  4. let akira = `Akira | Music Module`
  5.  
  6. let queue = {
  7. songs: []
  8. };
  9.  
  10. let repeat = "off";
  11.  
  12. const yt = require('ytdl-core');
  13. const fs = require('fs');
  14. const search = require('youtube-search');
  15.  
  16. var opts = {
  17. maxResults: 1,
  18. key: 'AIzaSyBBX4J1CpAIQPRRFtWKwyqNyCG5j3RIXfs',
  19. }
  20.  
  21. let dispatcher;
  22.  
  23. const connectToVoiceChannel = function(message) {
  24. return new Promise((resolve, reject) => {
  25. const voiceChannel = message.member.voiceChannel;
  26. if (!voiceChannel || voiceChannel.type !== 'voice') return /*message.client.musicjoin[message.guild.id] = "false"*/;
  27. channel = voiceChannel;
  28. /*voiceChannel.join().then(connection => {
  29. resolve(connection);
  30. }).catch(err => reject(err));
  31. */
  32. });
  33. };
  34.  
  35. const isValidWatchUrl = function(url) {
  36. const regexStr = /^(?:http(?:s)?:\/\/)?(?:www\.)?(?:youtu\.be\/|youtube\.com\/(?:(?:watch)?\?(?:.*&)?v(?:i)?=|(?:embed|v|vi|user)\/))([^\?&\"'<> #]+)/gm
  37. if (!url.match(regexStr)) return false;
  38. else return true;
  39. }
  40.  
  41. module.exports.run = (client, message, args, perms) => {
  42. if(message.author.id != "297008001351417856") return;
  43. const playSong = function(song) {
  44. try {
  45. let embed = new Discord.RichEmbed()
  46. .setTitle("Очередь завершена.")
  47. .setColor(`#ff9100`)
  48. .setTimestamp()
  49. .setFooter(akira, client.user.avatarURL)
  50. if(song === undefined) return message.channel.send(embed).then(() => {
  51. playing = false;
  52. channel.leave();
  53. channel = "0";
  54. })
  55. //message.channel.send(`Now playing **${song.title}**\nRequested by **${song.requester}**`);
  56.  
  57. let imgUrl;
  58.  
  59. //var regExp = /^.*(youtu\.be\/|v\/|u\/\w\/|embed\/|watch\?v=|\&v=)([^#\&\?]*).*/;
  60. //var match = song.url.match(regExp);
  61. //if(match && match[2].length == 11) {
  62. // imgUrl = match[2];
  63. //}
  64.  
  65. message.channel.send({embed:
  66. embed = new Discord.RichEmbed()
  67. .setTitle("Сейчас играет:")
  68. .setDescription(`**${song.title}**`)
  69. .addField("Запрошено:", song.requester)
  70. .setImage(`https://img.youtube.com/vi/${imgUrl}/maxresdefault.jpg`)
  71. .setColor(`#80ff00`)
  72. .setTimestamp()
  73. .setFooter(akira, client.user.avatarURL)
  74. });
  75.  
  76. // dispatcher = message.guild.voiceConnection.play('http://www.sample-videos.com/audio/mp3/wave.mp3');
  77. dispatcher = message.guild.voiceConnection.play(yt(song.url, { filter: "audioonly" }), {passes: 3});
  78.  
  79. dispatcher.on('end', () => {
  80. if (repeat === "playlist") {
  81. queue.songs.push(queue.songs[0]);
  82. }
  83. if (repeat !== "single") {
  84. queue.songs.shift();
  85. }
  86. playSong(queue.songs[0]);
  87. });
  88. dispatcher.on('error', (err) => {
  89. let embed = new Discord.RichEmbed()
  90. .setTitle("Произошла ошибка.")
  91. .setDescription(`Пожалуйста, сообщите ${client.users.get('450994494247010314')}, чтобы проверить консоль.`)
  92. .setColor(`RED`)
  93. .setTimestamp()
  94. .setFooter(akira, client.user.avatarURL)
  95. return message.channel.send(embed).then(() => {
  96. queue.songs.shift();
  97. playSong(queue.songs[0]);
  98. });
  99. });
  100. // message.guild.voiceConnection.play('/Antiproton.m4a');
  101. // message.guild.voiceConnection.play(yt('https://www.youtube.com/watch?v=ZR2CqwnS2KA', { filter: "audioonly" }))
  102.  
  103. } catch (e) {
  104. console.error(e);
  105. return;
  106. }
  107. } // взломать через токен - просто.....
  108.  
  109. if (args[0] === "join") {
  110. connectToVoiceChannel(message);
  111. } else if (args[0] === "play") {
  112. if (!paused) {
  113. if (!args[1]) {
  114. let embed = new Discord.RichEmbed()
  115. .setTitle("Использовать:")
  116. .setDescription("+music play <url>")
  117. .setColor(`RED`)
  118. .setTimestamp()
  119. .setFooter(akira, client.user.avatarURL)
  120. message.channel.send(embed);
  121. }
  122.  
  123. let url = args[1];
  124.  
  125.  
  126. if (!isValidWatchUrl(url)) {
  127. if(!args[1]) {
  128. message.channel.send(`Вы не указали url!`)
  129. return;
  130. }
  131. search(args.join(" ").replace("play", ""), opts, (err, results) => {
  132. //console.log(results)
  133. if (err) {
  134. console.log(err.message)
  135. let embed = new Discord.RichEmbed()
  136. .setTitle("Что-то не так.")
  137. .setDescription("Пожалуйста, попробуйте еще раз.")
  138. .setColor(`RED`)
  139. .setTimestamp()
  140. .setFooter(akira, client.user.avatarURL)
  141. message.channel.send(embed);
  142. }
  143. //console.log(results);
  144.  
  145. url = results[0].link;
  146. console.log(url);
  147.  
  148. if (channel != message.member.voiceChannel) connectToVoiceChannel(message);
  149.  
  150. let dispatcher;
  151.  
  152.  
  153. yt.getInfo(url, (err, info) => {
  154.  
  155. if (err) {
  156. let embed = new Discord.RichEmbed()
  157. .setTitle("Что-то не так.")
  158. .setDescription("Пожалуйста, попробуйте еще раз.")
  159. .setColor(`RED`)
  160. .setTimestamp()
  161. .setFooter(akira, client.user.avatarURL)
  162. message.channel.send(embed);
  163. }
  164. queue.songs.push({url: url, title: results.title, requester: message.author.username});
  165. let embed = new Discord.RichEmbed()
  166. .setTitle(`Added **${results.title}** to the queue.`)
  167. .setColor(`#80ff00`)
  168. .setTimestamp()
  169. .setFooter(akira, client.user.avatarURL)
  170. message.channel.send(embed);
  171. if (!playing) {
  172. playing = true;
  173. playSong(queue.songs[0])
  174. }
  175. });
  176.  
  177. });
  178. } else {
  179.  
  180.  
  181.  
  182. if (channel != message.member.voiceChannel) connectToVoiceChannel(message);
  183.  
  184. let dispatcher;
  185.  
  186. if (playing) {
  187. yt.getInfo(url, (err, info) => {
  188. //console.log(info)
  189. if (err) return message.channel.send("Неверная youtube ссылка.");
  190. queue.songs.push({url: url, title: info.title, requester: message.author.username});
  191. message.channel.send(`**${info.title}** добалено в очередь.`);
  192. })
  193. } else {
  194.  
  195. playing = true;
  196. yt.getBasicInfo(url, (err, info) => {
  197. //console.log(info)
  198. if (err) return message.channel.send("Неверная youtube ссылка.");
  199. queue.songs.push({url: url, title: info.title, requester: message.author.username});
  200. message.channel.send(`**${info.title}** добалено в очередь.`);
  201. playSong(queue.songs[0]);
  202. })
  203. }
  204. }
  205. } else {
  206. let embed = new Discord.RichEmbed()
  207. .setTitle("Музыка возобновлена.")
  208. .setColor(`#80ff00`)
  209. .setTimestamp()
  210. .setFooter(akira, client.user.avatarURL)
  211. message.channel.send(embed);
  212. dispatcher.resume();
  213. paused = false;
  214. }
  215. } else if (args[0] === "stop" || args[0] === "leave") {
  216. if (playing) {
  217. if (perms < 2) {
  218. let embed = new Discord.RichEmbed()
  219. .setTitle("У вас нет разрешения останавливать музыку.")
  220. .setColor(`RED`)
  221. .setTimestamp()
  222. .setFooter(akira, client.user.avatarURL)
  223. message.channel.send(embed);
  224. }
  225. queue = {
  226. songs: []
  227. }
  228. dispatcher.end();
  229. playing = false;
  230. paused = false;
  231. if (channel != "0") channel.leave();
  232. channel = "0";
  233. } else {
  234. let embed = new Discord.RichEmbed()
  235. .setTitle("В данный момент нет музыки.")
  236. .setColor(`RED`)
  237. .setTimestamp()
  238. .setFooter(akira, client.user.avatarURL)
  239. message.channel.send(embed);
  240. }
  241. } else if (args[0] === "queue") {
  242. if (queue.songs.length === 0) {
  243. let embed = new Discord.RichEmbed()
  244. .setTitle("В данный момент очередь пуста.")
  245. .setColor(`#ffd500`)
  246. .setTimestamp()
  247. .setFooter(akira, client.user.avatarURL)
  248. message.channel.send(embed);
  249. return
  250. }
  251. let tosend = [];
  252. queue.songs.forEach((song, i) => {
  253. tosend.push(`${i+1}. ${song.title} - Запрошенно: ${song.requester}`);
  254. });
  255. message.channel.send(`__**${message.guild.name}'s queue:**__ В настоящее время **${tosend.length}** песен в очереди ${(tosend.length > 15 ? '[*Показаны только 15*]' : '')}\n\`\`\`${tosend.slice(0,15).join('\n')}\`\`\``);
  256. } else if (args[0] === "pause") {
  257. if (!paused && playing) {
  258. let embed = new Discord.RichEmbed()
  259. .setTitle("Музыка остановлена.")
  260. .setColor(`#80ff00`)
  261. .setTimestamp()
  262. .setFooter(akira, client.user.avatarURL)
  263. message.channel.send(embed);
  264. dispatcher.pause();
  265. paused = true;
  266. } else if (!playing) {
  267. let embed = new Discord.RichEmbed()
  268. .setTitle("В данный момент нет музыки.")
  269. .setColor(`RED`)
  270. .setTimestamp()
  271. .setFooter(akira, client.user.avatarURL)
  272. message.channel.send(embed);
  273. } else if (paused) {
  274. let embed = new Discord.RichEmbed()
  275. .setTitle("Музыка уже приостановлена.")
  276. .setColor(`RED`)
  277. .setTimestamp()
  278. .setFooter(akira, client.user.avatarURL)
  279. message.channel.send(embed);
  280. }
  281. } else if (args[0] === "resume") {
  282. if (paused && playing) {
  283. let embed = new Discord.RichEmbed()
  284. .setTitle("Музыка возобновлена.")
  285. .setColor(`#80ff00`)
  286. .setTimestamp()
  287. .setFooter(akira, client.user.avatarURL)
  288. message.channel.send(embed);
  289. dispatcher.resume();
  290. paused = false;
  291. } else if (!playing) {
  292. let embed = new Discord.RichEmbed()
  293. .setTitle("В данный момент нет музыки.")
  294. .setColor(`RED`)
  295. .setTimestamp()
  296. .setFooter(akira, client.user.avatarURL)
  297. message.channel.send(embed);
  298. } else if (!paused) {
  299. let embed = new Discord.RichEmbed()
  300. .setTitle("Музыка уже играет.")
  301. .setColor(`#80ff00`)
  302. .setTimestamp()
  303. .setFooter(akira, client.user.avatarURL)
  304. message.channel.send(embed);
  305. }
  306. } else if (args[0] === "skip") {
  307. if (playing) {
  308. if (perms < 2 && message.author.username != queue.songs[0].requester) {
  309. let embed = new Discord.RichEmbed()
  310. .setTitle("У вас нет разрешения пропустить эту песню.")
  311. .setColor(`RED`)
  312. .setTimestamp()
  313. .setFooter(akira, client.user.avatarURL)
  314. message.channel.send(embed);
  315. return;
  316. }
  317. let embed = new Discord.RichEmbed()
  318. .setTitle(`**${queue.songs[0].title}** пропущена.`)
  319. .setColor(`#80ff00`)
  320. .setTimestamp()
  321. .setFooter(akira, client.user.avatarURL)
  322. message.channel.send(embed);
  323. dispatcher.end();
  324. } else {
  325. let embed = new Discord.RichEmbed()
  326. .setTitle("В данный момент нет музыки.")
  327. .setColor(`RED`)
  328. .setTimestamp()
  329. .setFooter(akira, client.user.avatarURL)
  330. message.channel.send(embed);
  331. }
  332. } else if (args[0] === "restart") {
  333. if (playing) {
  334. queue.songs.unshift(queue.songs[0]);
  335. dispatcher.end();
  336. let embed = new Discord.RichEmbed()
  337. .setTitle(`**${queue.songs[0].title}** перезапущена.`)
  338. .setColor(`#80ff00`)
  339. .setTimestamp()
  340. .setFooter(akira, client.user.avatarURL)
  341. message.channel.send(embed);
  342. } else {
  343. let embed = new Discord.RichEmbed()
  344. .setTitle("В данный момент нет музыки.")
  345. .setColor(`RED`)
  346. .setTimestamp()
  347. .setFooter(akira, client.user.avatarURL)
  348. message.channel.send(embed);
  349. }
  350. } else if (args[0] === "volume") {
  351. if (!playing) {
  352. let embed = new Discord.RichEmbed()
  353. .setTitle("В данный момент нет музыки.")
  354. .setColor(`RED`)
  355. .setTimestamp()
  356. .setFooter(akira, client.user.avatarURL)
  357. message.channel.send(embed);
  358. return;
  359. }
  360. if (!args[1]) return message.channel.send(`Громкость: ${Math.round(dispatcher.volume * 50)}%`);
  361. if (isNaN(parseInt(args[1]))) {
  362. let embed = new Discord.RichEmbed()
  363. .setTitle("Использовать:")
  364. .setDescription("+music volume <volume>")
  365. .setColor(`RED`)
  366. .setTimestamp()
  367. .setFooter(akira, client.user.avatarURL)
  368. message.channel.send(embed);
  369. return;
  370. }
  371. let volume = parseInt(args[1]);
  372. if (volume > 100 || volume < 0) {
  373. let embed = new Discord.RichEmbed()
  374. .setTitle("Громкость должена быть от 1 до 100.")
  375. .setColor(`RED`)
  376. .setTimestamp()
  377. .setFooter(akira, client.user.avatarURL)
  378. message.channel.send(embed);
  379. return;
  380. }
  381. dispatcher.setVolume(volume / 50);
  382. message.channel.send(`Громкость: ${Math.round(dispatcher.volume * 50)}%`);
  383. } else if (args[0] === "repeat") {
  384. if (!args[1]) {
  385. let embed = new Discord.RichEmbed()
  386. .setTitle(`Повтор песни в настоящее время установлен на **${repeat}**.`)
  387. .setColor(`#80ff00`)
  388. .setTimestamp()
  389. .setFooter(akira, client.user.avatarURL)
  390. message.channel.send(embed);
  391. return;
  392. }
  393. if (perms < 2) {
  394. let embed = new Discord.RichEmbed()
  395. .setTitle("У вас нет прав на изменение настроек повтора.")
  396. .setColor(`RED`)
  397. .setTimestamp()
  398. .setFooter(akira, client.user.avatarURL)
  399. message.channel.send(embed);
  400. return;
  401. }
  402. if (args[1] === "off") {
  403. repeat = "off";
  404. let embed = new Discord.RichEmbed()
  405. .setTitle("Повтор песни отключен.")
  406. .setColor(`#80ff00`)
  407. .setTimestamp()
  408. .setFooter(akira, client.user.avatarURL)
  409. message.channel.send(embed);
  410. } else if (args[1] === "single" || args[1] === "on") {
  411. repeat = "single";
  412. let embed = new Discord.RichEmbed()
  413. .setTitle("Повтор песни был установлен на один раз.")
  414. .setColor(`#80ff00`)
  415. .setTimestamp()
  416. .setFooter(akira, client.user.avatarURL)
  417. message.channel.send(embed);
  418. } else if (args[1] === "playlist") {
  419. repeat = "playlist";
  420. let embed = new Discord.RichEmbed()
  421. .setTitle(".")
  422. .setColor(`#80ff00`)
  423. .setTimestamp()
  424. .setFooter(akira, client.user.avatarURL)
  425. message.channel.send(embed);
  426. } else {
  427. let embed = new Discord.RichEmbed()
  428. .setTitle("Редко используемые.")
  429. .setDescription("Доступные настройки повтора: off, single, playlist")
  430. .setColor(`RED`)
  431. .setTimestamp()
  432. .setFooter(akira, client.user.avatarURL)
  433. message.channel.send(embed);
  434. }
  435. } else {
  436. let embed = new Discord.RichEmbed()
  437. .setAuthor("Использовать:")
  438. .setDescription("\n>music play <url/search>\n>music queue\n>music stop\n>music skip\n>music restart\n>music repeat <mode>\n>music pause\n>music resume\n>music play\n>music leave")
  439. .setColor(`RED`)
  440. .setTimestamp()
  441. .setFooter(akira, client.user.avatarURL)
  442. message.channel.send(embed);
  443. }
  444. };
  445.  
  446. module.exports.help = {
  447. name: 'music'
  448. }
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement