mirror of
https://github.com/aydenjahola/discord-multipurpose-bot.git
synced 2025-10-03 19:51:33 +01:00
51 lines
1.6 KiB
JavaScript
51 lines
1.6 KiB
JavaScript
const { SlashCommandBuilder } = require("discord.js");
|
||
const { requireVC } = require("../../utils/musicGuards");
|
||
|
||
module.exports = {
|
||
data: new SlashCommandBuilder()
|
||
.setName("stop")
|
||
.setDescription(
|
||
"Stops playback, clears the queue, and leaves the voice channel."
|
||
),
|
||
category: "Music",
|
||
|
||
async execute(interaction, client) {
|
||
try {
|
||
await interaction.deferReply();
|
||
|
||
const vc = requireVC(interaction);
|
||
const queue = client.distube.getQueue(interaction.guildId);
|
||
|
||
if (!queue) {
|
||
return interaction.followUp({
|
||
content: "ℹ️ Nothing is playing.",
|
||
ephemeral: true,
|
||
});
|
||
}
|
||
|
||
// Clear the queue and stop playback
|
||
// In DisTube v5, `queue.stop()` stops playback and clears upcoming songs.
|
||
queue.stop();
|
||
|
||
// Leave the voice channel via manager (recommended)
|
||
client.distube.voices.leave(interaction.guildId);
|
||
|
||
// If you use live lyrics, clean up the thread
|
||
try {
|
||
const live = require("../../utils/liveLyricsManager");
|
||
await live.stop(interaction.guildId, { deleteThread: true });
|
||
} catch {}
|
||
|
||
return interaction.followUp(
|
||
"⏹️ Stopped playback, cleared the queue, and left the voice channel."
|
||
);
|
||
} catch (e) {
|
||
console.error("stop command failed:", e);
|
||
const msg = e?.message || "❌ Failed to stop playback.";
|
||
if (interaction.deferred || interaction.replied) {
|
||
return interaction.followUp({ content: msg, ephemeral: true });
|
||
}
|
||
return interaction.reply({ content: msg, ephemeral: true });
|
||
}
|
||
},
|
||
};
|