diff options
Diffstat (limited to 'src/handlers/seekCommand.js')
| -rw-r--r-- | src/handlers/seekCommand.js | 51 |
1 files changed, 51 insertions, 0 deletions
diff --git a/src/handlers/seekCommand.js b/src/handlers/seekCommand.js new file mode 100644 index 0000000..e48f603 --- /dev/null +++ b/src/handlers/seekCommand.js @@ -0,0 +1,51 @@ +const { EmbedBuilder } = require('discord.js'); +const { playSong, getCurrentProgress, formatDuration, safeCleanup } = require('../utils/player'); +const { getQueueOrReply } = require('../utils/helpers'); + +function handleSeek(interaction, queues) { + const queue = getQueueOrReply(interaction, queues, 'Nothing is playing!'); + if (!queue || queue.songs.length === 0) { + if (queue) interaction.reply('Nothing is playing!'); + return; + } + + if (queue.isSeeking) { + return interaction.reply('Already seeking, please wait!'); + } + + const seconds = interaction.options.getInteger('seconds'); + const progress = getCurrentProgress(queue); + + if (!progress) { + return interaction.reply('Cannot seek right now!'); + } + + let newPosition = progress.elapsed + seconds; + const song = queue.songs[0]; + + if (newPosition < 0) { + newPosition = 0; + } + + if (newPosition >= song.duration) { + queue.player.stop(); + return interaction.reply('Skipped to next song!'); + } + + queue.isSeeking = true; + safeCleanup(queue, 'Seek'); + + queue.player.stop(); + + console.log(`[SEEK] Guild: ${interaction.guild.id}, From: ${progress.elapsed}s, To: ${newPosition}s`); + + playSong(interaction.guild.id, queue, newPosition); + + const embed = new EmbedBuilder() + .setColor(0x00ff00) + .setDescription(`⏩ Seeking to ${formatDuration(newPosition)} / ${formatDuration(song.duration)}`); + + interaction.reply({ embeds: [embed] }); +} + +module.exports = { handleSeek }; |
