From 5eb594efa4d75a64f539313da865cae216d712dc Mon Sep 17 00:00:00 2001 From: Wizzard Date: Sat, 17 Aug 2024 11:23:30 -0400 Subject: [PATCH] Fix the queue system --- commands/queue.js | 5 +++-- commands/skip.js | 17 +++++++++++++---- utils/queueManager.js | 22 ++++++++++++++-------- 3 files changed, 30 insertions(+), 14 deletions(-) diff --git a/commands/queue.js b/commands/queue.js index 2cf3cd1..6dc88bb 100644 --- a/commands/queue.js +++ b/commands/queue.js @@ -1,4 +1,5 @@ const { getQueue } = require('../utils/queueManager'); +const path = require('path'); module.exports = { name: 'queue', @@ -7,7 +8,7 @@ module.exports = { if (queue.length === 0) { return message.channel.send('The queue is empty!'); } - const queueString = queue.map((track, index) => `${index + 1}. ${track.title}`).join('\n'); + const queueString = queue.map((track, index) => `${index + 1}. ${path.basename(track)}`).join('\n'); message.channel.send(`Current queue:\n${queueString}`); } -}; +}; \ No newline at end of file diff --git a/commands/skip.js b/commands/skip.js index 24cc98b..b11dae8 100644 --- a/commands/skip.js +++ b/commands/skip.js @@ -1,9 +1,18 @@ -const { skipTrack } = require('../utils/queueManager'); +const { skipTrack, getQueue, playNextInQueue } = require('../utils/queueManager'); module.exports = { name: 'skip', execute(message) { - skipTrack(message.guild.id); - message.channel.send('Skipped the current track!'); + const guildId = message.guild.id; + const queue = getQueue(guildId); + + if (queue.length > 0) { + const voiceChannel = message.member.voice.channel; + const audioPlayer = playNextInQueue(guildId, voiceChannel); // Get the audio player + skipTrack(guildId, audioPlayer); // Skip the current track + message.channel.send('Skipped the current track!'); + } else { + message.channel.send('There are no tracks to skip!'); + } } -}; +}; \ No newline at end of file diff --git a/utils/queueManager.js b/utils/queueManager.js index 24a24c0..a335c6b 100644 --- a/utils/queueManager.js +++ b/utils/queueManager.js @@ -2,6 +2,7 @@ const { createAudioPlayer, createAudioResource, AudioPlayerStatus, joinVoiceChan const fs = require('fs'); const queueMap = new Map(); +const currentTrackMap = new Map(); function addToQueue(guildId, filePath) { if (!queueMap.has(guildId)) { @@ -26,7 +27,7 @@ function playNextInQueue(guildId, voiceChannel) { const audioPlayer = createAudioPlayer(); - const filePath = queue.shift(); + const filePath = queue[0]; if (!fs.existsSync(filePath)) { console.error('Audio file not found:', filePath); @@ -37,15 +38,20 @@ function playNextInQueue(guildId, voiceChannel) { audioPlayer.play(resource); connection.subscribe(audioPlayer); + currentTrackMap.set(guildId, filePath); + audioPlayer.on(AudioPlayerStatus.Idle, () => { + fs.unlink(filePath, (err) => { + if (err) console.error('Error deleting file:', filePath, err); + }); + queue.shift(); + if (queue.length > 0) { playNextInQueue(guildId, voiceChannel); } else { connection.destroy(); + currentTrackMap.delete(guildId); } - fs.unlink(filePath, (err) => { - if (err) console.error('Error deleting file:', filePath, err); - }); }); audioPlayer.on('error', (err) => { @@ -53,14 +59,14 @@ function playNextInQueue(guildId, voiceChannel) { connection.destroy(); }); - return true; + return audioPlayer; } -function skipTrack(guildId) { +function skipTrack(guildId, audioPlayer) { const queue = getQueue(guildId); if (queue.length > 0) { - queue.shift(); + audioPlayer.stop(); } } -module.exports = { addToQueue, getQueue, playNextInQueue, skipTrack }; +module.exports = { addToQueue, getQueue, playNextInQueue, skipTrack }; \ No newline at end of file