Advertisement
alexop1000

Play track

Jan 25th, 2021
681
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
  1. const ytdl = require('ytdl-core');
  2. const { MessageEmbed } = require("discord.js")
  3. const {
  4.     cyan,
  5.     gold,
  6.     magenta
  7. } = require("./colors.json");
  8. const fs = require('fs');
  9.  
  10. async function playMsgWithReact(message, song, queue) {
  11.     return new Promise((resolve, reject) => {
  12.         const winlogger = message.client.winlogger;
  13.         if (!song ||!queue) reject("Wrong arguments")
  14.         let embedsong = new MessageEmbed();
  15.         embedsong.setAuthor("Now Playing", `${message.author.displayAvatarURL()}`, `${song.url}`);
  16.         embedsong.setColor(cyan);
  17.         embedsong.setDescription(`${song.title}`);
  18.         if (song.thumbnail) {
  19.             embedsong.setThumbnail(song.thumbnail.url);
  20.         }
  21.         embedsong.setFooter(`Added by ${message.author.username}`);
  22.         queue.textChannel.send(embedsong)
  23.             .then(msg => {
  24.                 msg.react("⏸️").then(() => msg.react("⏭️"));
  25.                 const filter = (reaction, user) => {
  26.                     return ['⏸️', '⏭️'].includes(reaction.emoji.name) && user.id === message.author.id;
  27.                 };
  28.                 const collector = msg.createReactionCollector(filter, {
  29.                     max: 1,
  30.                     time: 60000,
  31.                     errors: ['time']
  32.                 });
  33.                 collector.on('collect', (reaction) => {
  34.                     if (reaction.emoji.name === "⏸️") {
  35.                         queue.playing = false;
  36.                         queue.connection.dispatcher.pause(true);
  37.                     } else {
  38.                         queue.connection.dispatcher.destroy(`Skip ${1}`);
  39.                     }
  40.                 })
  41.             }).catch(collected => {
  42.                 winlogger.log('info',collected)
  43.             });
  44.         resolve(embedsong)
  45.     });
  46. }
  47. async function Player(message, queueConstruct, serverQueue,connection) {
  48.     return async(song, file, play) => {
  49.         return new Promise((resolve, reject) => {
  50.             try {
  51.                 setTimeout( function() {
  52.                     if (!file) {
  53.                         const winlogger = message.client.winlogger;
  54.                         const queue = message.client.queue.get(message.guild.id);
  55.                         try {
  56.                             if (!song) {
  57.                                 message.guild.voice.channel.leave();
  58.                                 message.client.queue.delete(message.guild.id);
  59.                                 reject("no song");
  60.                             }
  61.                             if (!connection){
  62.                                 winlogger.log('info',connection)
  63.                                 reject("no connection")
  64.                             }
  65.                             try {
  66.                                 dispatch(connection, song, queue, play, message, queueConstruct).then(dispatcher => {
  67.                                     if (dispatcher){
  68.                                         dispatcher.setVolumeLogarithmic(queue.volume / 5);
  69.                                         serverQueue.connection.dispatcher = dispatcher;
  70.                                         resolve(dispatcher);
  71.                                     }else{
  72.                                         reject("no song")
  73.                                     }
  74.    
  75.                                 })
  76.                             } catch (error) {
  77.                                 winlogger.log('info',error)
  78.                             }
  79.                         } catch (error) {
  80.                             winlogger.log('info',error);
  81.                         }
  82.                     }
  83.                 },250)
  84.                
  85.             } catch (error) {
  86.                 winlogger.log('info',error);
  87.             }
  88.         });
  89.     };
  90. }
  91. // ["-af", "apulsator=hz=0.128"] 8D audio
  92. // ["-af", "asetrate=44100*1.25"] nightcore
  93. const encoder = require("./struct/encoder.js")
  94. exports.Player = Player;
  95. async function dispatch(connection, song, queue, play, message, queueConstruct) {
  96.     const winlogger = message.client.winlogger;
  97.     if (!song) return;
  98.     let encoded
  99.     try{
  100.         encoded = encoder(song.url, {
  101.             quality: "highestaudio",
  102.             highWaterMark: 1<<25,
  103.             filter: "audioonly",
  104.             opusEncoded: true,
  105.             encoderArgs: queue.bassbost === true && ['-af', 'bass=g=10:f=110:w=0.6'] || []
  106.         })
  107.     }catch(err){
  108.         winlogger.log('info',err)
  109.         queue.songs.shift();
  110.         play(queue.songs[0],null,play).catch(err => winlogger.log('info',err));
  111.         if (queue.songs[0]) {
  112.             playMsgWithReact(message, queueConstruct.songs[0], queueConstruct).catch(err => winlogger.log('info',err));
  113.         }
  114.         return;
  115.     }
  116.     try {
  117.        
  118.     return connection.play(await encoded,{highWaterMark: 1,type: 'opus'})
  119.     .on('start', () => {
  120.         winlogger.log('info',"Started playing song.");
  121.         try {
  122.             message.client.songsPlayed.findOne({where: {name: "amount"}}).then(tag =>{
  123.                 tag.increment('total')
  124.                 updateSongs(tag,winlogger);
  125.             })
  126.         } catch (error) {
  127.             winlogger.log('info',error)
  128.         }
  129.     })
  130.     .on('finish', reason => {
  131.         queue.songs.shift();
  132.         play(queue.songs[0],null,play).catch(err => winlogger.log('info',err));
  133.         if (queue.songs[0]) {
  134.             playMsgWithReact(message, queueConstruct.songs[0], queueConstruct).catch(err => winlogger.log('info',err));
  135.         }
  136.         // switch (reason.includes("Skip")) {
  137.         //     case true:
  138.         //         var fixedstr = reason.replace(/^\D+/g, '');
  139.         //         queue.songs.shift();
  140.         //         play(queue.songs[0]).catch(err => winlogger.log('info',err));
  141.         //         queue.textChannel.send(`Skipped ${fixedstr} song(s).`);
  142.         //         playMsgWithReact(message, queueConstruct.songs[0], queueConstruct).catch(err => winlogger.log('info',err));
  143.         //         break;
  144.         //     case false:
  145.         //         queue.songs.shift();
  146.         //         play(queue.songs[0]).catch(err => winlogger.log('info',err));
  147.         //         if (queue.songs[0]) {
  148.         //             playMsgWithReact(message, queueConstruct.songs[0], queueConstruct).catch(err => winlogger.log('info',err));
  149.         //         }
  150.         //         break;
  151.         // }
  152.     })
  153.     .on('error', error => {
  154.         winlogger.log('info',`song error: ${error}`)
  155.         queue.songs.shift();
  156.         play(queue.songs[0],null,play).catch(err => winlogger.log('info',err));
  157.         if (queue.songs[0]) {
  158.             playMsgWithReact(message, queueConstruct.songs[0], queueConstruct).catch(err => winlogger.log('info',err));
  159.         }
  160.     })
  161.     .on('debug',info => {
  162.         winlogger.log('info',info)
  163.     })
  164.     } catch (error) {
  165.         winlogger.log('error',error)
  166.         queue.songs.shift();
  167.         play(queue.songs[0],null,play).catch(err => winlogger.log('info',err));
  168.         if (queue.songs[0]) {
  169.             playMsgWithReact(message, queueConstruct.songs[0], queueConstruct).catch(err => winlogger.log('info',err));
  170.         }
  171.         return;
  172.     }
  173. }
  174.  
  175. function updateSongs(tag,winlogger) {
  176.     try {
  177.         var stream = fs.createWriteStream("../public_html/api/songsplayed.txt");
  178.         stream.once('open', () => {
  179.             stream.write(`${tag.get('total') + 1}`);
  180.             stream.end();
  181.         });
  182.     } catch (error) {
  183.         winlogger.log('info',error)
  184.     }
  185. }
  186.  
  187.  
  188. function SpotifyFormat (src){
  189.     // http://open.spotify.com/track/06TYfe9lyGQA6lfqo5szIi, https://embed.spotify.com/?uri=spotify:track:78z8O6X1dESVSwUPAAPdme
  190.     var spRegEx = /https?:\/\/(?:embed\.|open\.)(?:spotify\.com\/)(?:playlist\/|\?uri=spotify:track:)((\w|-){22})/;
  191.  
  192.     function getIDfromRegEx ( src, regExpy ){
  193.         return (src.match(regExpy)) ? RegExp.$1 : null;
  194.     }
  195.  
  196.     return getIDfromRegEx( src, spRegEx);
  197.   }
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement