From 09f8822778e44adda252b535b58d5e0fd642ce17 Mon Sep 17 00:00:00 2001 From: Kiera Affarantia Date: Tue, 10 Dec 2024 18:10:44 +0700 Subject: [PATCH] add more button and reorganize the button --- src/events/player/trackStart.js | 115 ++++++++++++++++++++++++++++++-- 1 file changed, 108 insertions(+), 7 deletions(-) diff --git a/src/events/player/trackStart.js b/src/events/player/trackStart.js index 924c90d..e82f09b 100644 --- a/src/events/player/trackStart.js +++ b/src/events/player/trackStart.js @@ -20,16 +20,53 @@ module.exports = async (client, player, track) => { const previous = await player.queue.shiftPrevious(); - const row = (player) => + const row1 = (player) => new ActionRowBuilder().addComponents( - new ButtonBuilder().setCustomId("previous").setEmoji("âĒ").setStyle(ButtonStyle.Secondary).setDisabled(!previous), + new ButtonBuilder() + .setCustomId("volumedown") + .setEmoji("🔉") + .setStyle(ButtonStyle.Secondary), + new ButtonBuilder() + .setCustomId("previous") + .setEmoji("⏎ī¸") + .setStyle(ButtonStyle.Secondary) + .setDisabled(!previous), new ButtonBuilder() .setCustomId("pause") .setEmoji(player.paused ? "â–ļī¸" : "⏸ī¸") .setStyle(player.paused ? ButtonStyle.Success : ButtonStyle.Secondary), - new ButtonBuilder().setCustomId("stop").setEmoji("⏚ī¸").setStyle(ButtonStyle.Secondary), - new ButtonBuilder().setCustomId("skip").setEmoji("⏊").setStyle(ButtonStyle.Secondary), - new ButtonBuilder().setCustomId("shuffle").setEmoji("🔀").setStyle(ButtonStyle.Secondary) + new ButtonBuilder() + .setCustomId("skip") + .setEmoji("⏭ī¸") + .setStyle(ButtonStyle.Secondary), + new ButtonBuilder() + .setCustomId("volumeup") + .setEmoji("🔊") + .setStyle(ButtonStyle.Secondary) + ); + + const row2 = (player) => + new ActionRowBuilder().addComponents( + new ButtonBuilder() + .setCustomId("autoplay") + .setEmoji("♾ī¸") + .setStyle(player.get("autoplay") ? ButtonStyle.Success : ButtonStyle.Secondary), + new ButtonBuilder() + .setCustomId("loop") + .setEmoji("🔁") + .setStyle(player.repeatMode === "off" ? ButtonStyle.Secondary : ButtonStyle.Success), + new ButtonBuilder() + .setCustomId("stop") + .setEmoji("⏚ī¸") + .setStyle(ButtonStyle.Danger), + new ButtonBuilder() + .setCustomId("shuffle") + .setEmoji("🔀") + .setStyle(ButtonStyle.Secondary), + new ButtonBuilder() + .setCustomId("queue") + .setEmoji("📑") + .setStyle(ButtonStyle.Secondary) ); const msg = await channel.safeSend({ @@ -51,7 +88,7 @@ module.exports = async (client, player, track) => { { name: "Author", value: track.info.author || "Unknown", inline: true } ), ], - components: [row(player)], + components: [row1(player), row2(player)], }); if (msg) player.set("message", msg); @@ -83,7 +120,7 @@ module.exports = async (client, player, track) => { player.pause(); description = "Track paused"; } - await msg.edit({ components: [row(player)] }); + await msg.edit({ components: [row1(player), row2(player)] }); break; case "stop": @@ -104,7 +141,71 @@ module.exports = async (client, player, track) => { description = "The queue has been shuffled!"; } break; + + case "volumeup": + const newVolUp = Math.min(player.volume + 10, 100); + await player.setVolume(newVolUp); + description = `Volume increased to \`${newVolUp}%\``; + break; + + case "volumedown": + const newVolDown = Math.max(player.volume - 10, 0); + await player.setVolume(newVolDown); + description = `Volume decreased to \`${newVolDown}%\``; + break; + + case "loop": + const currentMode = player.repeatMode; + if (currentMode === "off") { + player.setRepeatMode("track"); + description = "Loop mode set to `track`"; + } else if (currentMode === "track") { + player.setRepeatMode("queue"); + description = "Loop mode set to `queue`"; + } else { + player.setRepeatMode("off"); + description = "Loop mode `disabled`"; + } + await msg.edit({ components: [row1(player), row2(player)] }); + break; + + case "autoplay": + const autoplay = !player.get("autoplay"); + player.set("autoplay", autoplay); + description = autoplay ? "Autoplay activated!" : "Autoplay deactivated"; + await msg.edit({ components: [row1(player), row2(player)] }); + break; + + case "queue": + const queue = player.queue; + const tracks = queue.tracks.slice(0, 10); // Get first 10 tracks + + const queueEmbed = new EmbedBuilder() + .setColor(EMBED_COLORS.BOT_EMBED) + .setAuthor({ name: "Music Queue" }) + .setDescription( + tracks.length > 0 + ? tracks + .map((track, i) => `${i + 1}. [${track.info.title}](${track.info.uri})`) + .join("\n") + : "No tracks in queue" + ) + .addFields({ + name: "Now Playing", + value: `[${queue.current.info.title}](${queue.current.info.uri})`, + }); + + if (tracks.length > 0) { + queueEmbed.setFooter({ + text: `${queue.tracks.length} track(s) in queue`, + }); + } + + description = "Queue sent as new message"; + await channel.send({ embeds: [queueEmbed] }); + break; } + await int.followUp({ embeds: [new EmbedBuilder().setDescription(description).setColor(EMBED_COLORS.BOT_EMBED)], });