add few more music commands

This commit is contained in:
Ayden Jahola 2025-09-20 00:27:35 +01:00
parent 8c3f955f19
commit 6f25c45e5f
7 changed files with 152 additions and 0 deletions

View file

@ -0,0 +1,28 @@
const { SlashCommandBuilder, EmbedBuilder } = require("discord.js");
module.exports = {
data: new SlashCommandBuilder()
.setName("nowplaying")
.setDescription("Shows information about the current song"),
async execute(interaction, client) {
const queue = client.distube.getQueue(interaction.guildId);
if (!queue || !queue.songs.length) {
return interaction.reply("❌ There is no music playing!");
}
const song = queue.songs[0];
const embed = new EmbedBuilder()
.setColor("#0099ff")
.setTitle("🎵 Now Playing")
.setDescription(`**${song.name}**`)
.addFields(
{ name: "Duration", value: song.formattedDuration, inline: true },
{ name: "Requested by", value: song.user.toString(), inline: true },
{ name: "URL", value: song.url || "No URL available" }
)
.setThumbnail(song.thumbnail || null);
interaction.reply({ embeds: [embed] });
},
};

26
commands/music/pause.js Normal file
View file

@ -0,0 +1,26 @@
const { SlashCommandBuilder } = require("discord.js");
module.exports = {
data: new SlashCommandBuilder()
.setName("pause")
.setDescription("Pauses the current song"),
async execute(interaction, client) {
const queue = client.distube.getQueue(interaction.guildId);
if (!queue) {
return interaction.reply("❌ There is no music playing!");
}
if (queue.paused) {
return interaction.reply("⏸️ Music is already paused!");
}
try {
await queue.pause();
interaction.reply("⏸️ Paused the current song!");
} catch (error) {
console.error(error);
interaction.reply("❌ Failed to pause the music.");
}
},
};

26
commands/music/resume.js Normal file
View file

@ -0,0 +1,26 @@
const { SlashCommandBuilder } = require("discord.js");
module.exports = {
data: new SlashCommandBuilder()
.setName("resume")
.setDescription("Resumes the paused song"),
async execute(interaction, client) {
const queue = client.distube.getQueue(interaction.guildId);
if (!queue) {
return interaction.reply("❌ There is no music playing!");
}
if (!queue.paused) {
return interaction.reply("▶️ Music is not paused!");
}
try {
await queue.resume();
interaction.reply("▶️ Resumed the music!");
} catch (error) {
console.error(error);
interaction.reply("❌ Failed to resume the music.");
}
},
};

22
commands/music/shuffle.js Normal file
View file

@ -0,0 +1,22 @@
const { SlashCommandBuilder } = require("discord.js");
module.exports = {
data: new SlashCommandBuilder()
.setName("shuffle")
.setDescription("Shuffles the current queue"),
async execute(interaction, client) {
const queue = client.distube.getQueue(interaction.guildId);
if (!queue || queue.songs.length <= 2) {
return interaction.reply("❌ Not enough songs in the queue to shuffle!");
}
try {
await queue.shuffle();
interaction.reply("🔀 Shuffled the queue!");
} catch (error) {
console.error(error);
interaction.reply("❌ Failed to shuffle the queue.");
}
},
};

31
commands/music/volume.js Normal file
View file

@ -0,0 +1,31 @@
const { SlashCommandBuilder } = require("discord.js");
module.exports = {
data: new SlashCommandBuilder()
.setName("volume")
.setDescription("Adjust the playback volume (1-100)")
.addIntegerOption((option) =>
option
.setName("level")
.setDescription("Volume level (1-100)")
.setRequired(true)
.setMinValue(1)
.setMaxValue(100)
),
async execute(interaction, client) {
const volume = interaction.options.getInteger("level");
const queue = client.distube.getQueue(interaction.guildId);
if (!queue) {
return interaction.reply("❌ There is no music playing!");
}
try {
await queue.setVolume(volume);
interaction.reply(`🔊 Volume set to ${volume}%!`);
} catch (error) {
console.error(error);
interaction.reply("❌ Failed to adjust volume.");
}
},
};

7
docker-compose.yml Normal file
View file

@ -0,0 +1,7 @@
---
services:
bot:
image: ghcr.io/aydenjahola/discord-multipurpose-bot:music
container_name: discord-bot
restart: unless-stopped
env_file: .env

View file

@ -52,6 +52,18 @@ client.distube
}) })
.on("finish", (queue) => { .on("finish", (queue) => {
queue.textChannel.send("🎵 Queue finished!"); queue.textChannel.send("🎵 Queue finished!");
})
.on("pause", (queue) => {
queue.textChannel.send("⏸️ Music paused!");
})
.on("resume", (queue) => {
queue.textChannel.send("▶️ Music resumed!");
})
.on("volumeChange", (queue, volume) => {
queue.textChannel.send(`🔊 Volume changed to ${volume}%`);
})
.on("noRelated", (queue) => {
queue.textChannel.send("❌ Could not find related video for autoplay!");
}); });
// Function to recursively read commands from subdirectories // Function to recursively read commands from subdirectories