if (!queue.player) { const player = Voice.createAudioPlayer(); //Connection Ready queue.connection.on(Voice.VoiceConnectionStatus.Ready, () => { console.log('The connection has entered the Ready state - ready to play audio!'); const subscription = queue.connection.subscribe(player); player.play(resource) queue.player = player; }); //Disconnected queue.connection.on(Voice.VoiceConnectionStatus.Disconnected, async (oldState, newState) => { try { await Promise.race([ Voice.entersState(queue.connection, Voice.VoiceConnectionStatus.Signalling, 5000), Voice.entersState(queue.connection, Voice.VoiceConnectionStatus.Connecting, 5000), ]); // Seems to be reconnecting to a new channel - ignore disconnect } catch (error) { // Seems to be a real disconnect which SHOULDN'T be recovered from if(!queue.connection){ queue.connection.destroy(); } } }); //Destroyed queue.connection.on(Voice.VoiceConnectionStatus.Destroyed, () => { console.log("DESTROYED") try { queue.connection.destroy(); } catch (e) { console.log(String(e).grey) } if (queue.player) { try { queue.player.stop(); } catch (e) { console.log(String(e).grey) } } client.queue.delete(message.guild.id); return queue.textChannel.send({ embeds: [new MessageEmbed().setColor(ee.wrongcolor).setFooter(ee.footertext, ee.footericon).setTitle(`:stop_button: **Music queue ended!**`)] }) .catch((e) => { console.log(String(e).grey); }) }); //Started Playing player.on(Voice.AudioPlayerStatus.Playing, () => { console.log(`The audio player has started playing ${String(queue.songs[0].title).brightCyan}! in ${String(message.guild.name).brightGreen}`.green); queue.textChannel.send({ embeds: [ new MessageEmbed() .setColor(ee.color) .setDescription(`:arrow_forward: **Started Playing [${queue.songs[0].title}](${queue.songs[0].url})**`) .setThumbnail(queue.songs[0].thumbnail) ] }) }); //Song Error player.on('error', error => { console.error(`Error: ${error.message} with resource ${error.resource.metadata.title}`); queue.songs.shift(); if(!queue.songs[0]){ try { queue.connection.destroy(); } catch (e) { console.log(String(e).grey) } return client.queue.delete(message.guild.id); } player.play(getResource(queue.songs[0], queue, queue.filters)); }); player.on(Voice.AudioPlayerStatus.Idle, () => { if (queue.connection) { if(queue.songs.length > 0){ if (queue.loop) { let lastSong = queue.songs.shift(); queue.songs.push(lastSong); console.log("QUEUE LOOP") player.play(getResource(queue.songs[0], queue, queue.filters)); } else if (queue.songLoop) { console.log("SONG LOOP") player.play(getResource(queue.songs[0], queue, queue.filters)); } else { queue.songs.shift(); console.log("NO LOOP", queue.songs) player.play(getResource(queue.songs[0], queue, queue.filters)); } } else { try { queue.connection.destroy(); } catch (e) { console.log(String(e).grey) } if (player) { try { player.stop(); } catch (e) { console.log(String(e).grey) } } client.queue.delete(message.guild.id); return queue.textChannel.send({ embeds: [new MessageEmbed().setColor(ee.wrongcolor).setFooter(ee.footertext, ee.footericon).setTitle(`:stop_button: **Music queue ended!**`)] }) .catch((e) => { console.log(String(e).grey); }) } } }); }