Add loop, shuffle, auto leave
All checks were successful
Subsonics - Pipeline/pipeline/head This commit looks good

This commit is contained in:
CICD - Pipeline 2023-04-23 17:46:50 +02:00
parent c4fbc3338a
commit 87787abff7
4 changed files with 238 additions and 1 deletions

80
src/commands/loop.js Normal file
View File

@ -0,0 +1,80 @@
const { SlashCommandBuilder, EmbedBuilder } = require("discord.js");
module.exports = {
data: new SlashCommandBuilder()
.setName("loop")
.setDescription("Active ou désactive la répétition de la liste de lecture !"),
async execute(client, interaction) {
if(client.dictator == true ) {
if((interaction.member._roles.includes("397725956598530050") == true | interaction.member.user.id == "486943594893017119")) {
makeAction()
} else {
const embed = new EmbedBuilder()
.setColor(0xff0303)
.setTitle('Mode Dictateur')
.setTimestamp();
const song_show = {name: "Le mode dictateur est actif !", value: "Demande au grand roi !"}
embed.addFields(song_show)
interaction.reply({embeds: [embed]})
}
} else {
makeAction();
}
async function makeAction() {
if(!interaction.member.voice.channel) return interaction.reply({content:"Vous devez rejoindre un salon vocal !", ephemeral: true})
let player = client.manager.players.get(interaction.guild.id)
if(player) {
if(player.queueRepeat == false) {
const embed = new EmbedBuilder()
.setColor(0xfff200)
.setTitle('Loop Actif!')
.setDescription("On recommence !")
.setTimestamp();
interaction.reply({embeds: [embed]})
player.setQueueRepeat(true)
} else {
const embed = new EmbedBuilder()
.setColor(0x3b3b3b)
.setTitle('Loop inactif!')
.setDescription("Ca suffit ! Terminez votre concert !")
.setTimestamp();
interaction.reply({embeds: [embed]})
player.setQueueRepeat(false)
}
} else {
interaction.reply("**Aucune musique n'est actuellement jouée !**")
}
}
}
}

76
src/commands/seek.js Normal file
View File

@ -0,0 +1,76 @@
const { SlashCommandBuilder, EmbedBuilder } = require("discord.js");
module.exports = {
data: new SlashCommandBuilder()
.setName("seek")
.setDescription("Définie la position du player dans la musique !")
.addIntegerOption(option => option.setName("duration").setDescription("En seconde")),
async execute(client, interaction) {
if(client.dictator == true ) {
if((interaction.member._roles.includes("397725956598530050") == true | interaction.member.user.id == "486943594893017119")) {
makeAction()
} else {
const embed = new EmbedBuilder()
.setColor(0xff0303)
.setTitle('Mode Dictateur')
.setTimestamp();
const song_show = {name: "Le mode dictateur est actif !", value: "Demande au grand roi !"}
embed.addFields(song_show)
interaction.reply({embeds: [embed]})
}
} else {
makeAction();
}
async function makeAction() {
if(!interaction.member.voice.channel) return interaction.reply({content:"Vous devez rejoindre un salon vocal !", ephemeral: true})
let player = client.manager.players.get(interaction.guild.id)
let duration = interaction.options.getInteger("duration")
if(player) {
try {
const embed = new EmbedBuilder()
.setColor(0xfff200)
.setTitle('On avance ou recule ?')
.setTimestamp();
interaction.reply({embeds: [embed]})
duration = duration ** 3
player.seek(duration)
} catch (error) {
console.log(error)
interaction.reply("**Aucune musique n'est actuellement jouée !**")
}
} else {
interaction.reply("**Aucune musique n'est actuellement jouée !**")
}
}
}
}

66
src/commands/shuffle.js Normal file
View File

@ -0,0 +1,66 @@
const { SlashCommandBuilder, EmbedBuilder } = require("discord.js");
module.exports = {
data: new SlashCommandBuilder()
.setName("mix")
.setDescription("Mélange la liste de lecture !"),
async execute(client, interaction) {
if(client.dictator == true ) {
if((interaction.member._roles.includes("397725956598530050") == true | interaction.member.user.id == "486943594893017119")) {
makeAction()
} else {
const embed = new EmbedBuilder()
.setColor(0xff0303)
.setTitle('Mode Dictateur')
.setTimestamp();
const song_show = {name: "Le mode dictateur est actif !", value: "Demande au grand roi !"}
embed.addFields(song_show)
interaction.reply({embeds: [embed]})
}
} else {
makeAction();
}
async function makeAction() {
if(!interaction.member.voice.channel) return interaction.reply({content:"Vous devez rejoindre un salon vocal !", ephemeral: true})
let player = client.manager.players.get(interaction.guild.id)
if(player) {
const embed = new EmbedBuilder()
.setColor(0xfff200)
.setTitle('On mélange !')
.setDescription("Toutes les musiques de la liste de lecture ont été mélangés !")
.setTimestamp();
interaction.reply({embeds: [embed]})
player.queue.shuffle()
} else {
interaction.reply("**Aucune musique n'est actuellement jouée !**")
}
}
}
}

View File

@ -1,3 +1,5 @@
const { channel } = require("node:diagnostics_channel");
let tryTime = 0;
if ("ENV" in process.env) {
@ -70,6 +72,7 @@ const rest = new REST().setToken(config.token);
client.once("ready", () => {
console.log("Le meilleur groupe de musique est prêt !")
client.user.setActivity(`beaucoup de choses !`, { type: "LISTENING" })
client.manager.init(client.user.id);
const commandManager = client.application.commands;
@ -85,8 +88,18 @@ client.once("ready", () => {
client.on("voiceStateUpdate", (oldMember, newMember) => {
console.log(oldMember, newMember)
let player = client.manager.players.get(oldMember.guild.id)
if(player) {
client.channels.fetch(player.options.voiceChannel).then(channel => {
if(channel.members.size <= 1) {
player.destroy()
}
})
}
})
client.on("interactionCreate", (interaction) => {
@ -145,6 +158,8 @@ client.on("raw", d => client.manager.updateVoiceState(d));
// Client Manager
client.login(config.token)
tryTime = 0