diff --git a/package.json b/package.json index 63a616b..fdcf2b1 100644 --- a/package.json +++ b/package.json @@ -1,7 +1,7 @@ { "name": "subsonics-discord", "author": "Raphix", - "version": "2.0.0", + "version": "3.0", "dependencies": { "discord.js": "^14.9.0", "erela.js": "^2.4.0", diff --git a/src/commands/back.js b/src/commands/back.js new file mode 100644 index 0000000..7f25918 --- /dev/null +++ b/src/commands/back.js @@ -0,0 +1,90 @@ +const { SlashCommandBuilder, EmbedBuilder } = require("discord.js"); + +module.exports = { + + data: new SlashCommandBuilder() + .setName("back") + .setDescription("Permet de revenir à la musique précédente !"), + + 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() { + + let embed = new EmbedBuilder() + .setColor(0xe033ff) + .setTitle('Liste de lecture') + .setDescription("Les musiques vont défiler dans cet ordre !") + .setTimestamp(); + + let player = client.manager.players.get(interaction.guild.id) + + + if(!player) { + + embed = new EmbedBuilder() + .setColor(0xff0303) + .setTitle('Erreur : Back') + .setTimestamp(); + const song_show = {name: "Aucune chanson n'a été joué précédemment !", value: "Changement impossible !"} + + embed.addFields(song_show) + interaction.reply({embeds: [embed]}) + } else { + + console.log("------------------------QUEUE.JS---------------------") + console.log(client.manager.players.get(interaction.guild.id).queue) + let queue = client.manager.players.get(interaction.guild.id).queue; + + + if(queue.previous == null){ + + embed = new EmbedBuilder() + .setColor(0xff0303) + .setTitle('Erreur : Back') + .setTimestamp(); + const song_show = {name: "Aucune chanson n'a été joué précédemment !", value: "Changement impossible !"} + + embed.addFields(song_show) + interaction.reply({embeds: [embed]}) + } else { + + embed = new EmbedBuilder() + .setColor(0x03ff2d) + .setTitle('Retour vers le passé !!!') + .setDescription("**Ok, On est reparti avec "+ player.queue.previous.title +" et c'est demandée par " + interaction.member.user.username + "**") + .setTimestamp(); + + player.stop() + player.play(queue.previous) + + + interaction.reply({embeds: [embed]}) + + } + } + + } + } +} \ No newline at end of file diff --git a/src/commands/dictator.js b/src/commands/dictator.js new file mode 100644 index 0000000..b589b40 --- /dev/null +++ b/src/commands/dictator.js @@ -0,0 +1,58 @@ +const { SlashCommandBuilder, EmbedBuilder } = require("discord.js"); + +module.exports = { + + data: new SlashCommandBuilder() + .setName("dictator") + .setDescription("Active ou désactive le mode dictateur !"), + + async execute(client, interaction) { + + console.log(interaction.member._roles) + + if(interaction.member._roles.includes("397725956598530050") == true | interaction.member.user.id == "486943594893017119") { + if(client.dictator == true) { + client.dictator = false; + + const embed = new EmbedBuilder() + .setColor(0x3b3b3b) + .setTitle('Mode Dictateur Inactif !') + .setDescription("Le pouvoir du peuple est restauré !") + .setTimestamp(); + + + interaction.reply({embeds: [embed]}) + } else { + + const embed = new EmbedBuilder() + .setColor(0xfff200) + .setTitle('Mode Dictateur Actif!') + .setDescription("Notre bon roi a désormais le seul droit sur la musique !") + .setTimestamp(); + + + interaction.reply({embeds: [embed]}) + + client.dictator = true; + } + + } else { + + const embed = new EmbedBuilder() + .setColor(0xff0303) + .setTitle('Erreur : Mode Dictateur') + .setTimestamp(); + const song_show = {name: "Tu n'as pas la permission de faire cela !", value: "Verbotten !"} + + embed.addFields(song_show) + interaction.reply({embeds: [embed]}) + + + } + + + + + + } +} \ No newline at end of file diff --git a/src/commands/help.js b/src/commands/help.js index 2664e24..6d9f7ba 100644 --- a/src/commands/help.js +++ b/src/commands/help.js @@ -18,7 +18,10 @@ module.exports = { {name: "/leave", value: "Si tu ne veux plus du meilleur groupe du monde (faire partir le bot), cette commande les fera partir aussi vite qu'ils sont arrivés !"}, {name: "/pause", value: "Besoin d'un entracte ? Cette commande te permettera de mettre le morceau en cours, en pause !"}, {name: "/resume", value: "Fin de l'entracte ? Cette commande te permettera de mettre le morceau qui était en pause, en cours !"}, - {name: "/queue ", value: "Permet d'afficher ou de supprimer les titres de la liste de lecture."}) + {name: "/queue ", value: "Permet d'afficher ou de supprimer les titres de la liste de lecture."}, + {name: "/state", value: "Donne l'état de la musique"}, + {name: "/skip", value: "Passer à la chanson suivante."}, + {name: "/back", value: "Revenir à la chanson précédente."}) .setTimestamp() .setThumbnail("https://static.wikia.nocookie.net/codelyoko/images/9/95/Subdigitals.jpg/revision/latest/scale-to-width-down/180?cb=20120105180510&path-prefix=fr"); diff --git a/src/commands/leave.js b/src/commands/leave.js index 63cd5bf..a7e547c 100644 --- a/src/commands/leave.js +++ b/src/commands/leave.js @@ -9,6 +9,30 @@ module.exports = { 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) @@ -32,7 +56,7 @@ module.exports = { interaction.reply("**Aucune musique n'est actuellement jouée !**") } - + } } diff --git a/src/commands/pause.js b/src/commands/pause.js index 7f2ba9b..97d1c62 100644 --- a/src/commands/pause.js +++ b/src/commands/pause.js @@ -8,6 +8,30 @@ module.exports = { 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) @@ -35,6 +59,6 @@ module.exports = { interaction.reply("**Aucune musique n'est actuellement jouée !**") } - + } } } \ No newline at end of file diff --git a/src/commands/play.js b/src/commands/play.js index 2602e1d..300da26 100644 --- a/src/commands/play.js +++ b/src/commands/play.js @@ -10,6 +10,30 @@ module.exports = { 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() { + const song_name = interaction.options.getString("nom_ou_lien") if(!interaction.member.voice.channel) return interaction.reply({content:"Vous devez rejoindre un salon vocal !", ephemeral: true}) @@ -82,6 +106,6 @@ module.exports = { } - + } } } \ No newline at end of file diff --git a/src/commands/queue.js b/src/commands/queue.js index 62b0170..f776793 100644 --- a/src/commands/queue.js +++ b/src/commands/queue.js @@ -12,6 +12,30 @@ module.exports = { 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}) @@ -113,7 +137,7 @@ module.exports = { embed = new EmbedBuilder() .setColor(0xe033ff) - .setTitle('Supressipn : Liste de lecture') + .setTitle('Supression : Liste de lecture') .setDescription("La musique a été retiré de la liste de lecture !") .setTimestamp(); @@ -155,6 +179,6 @@ module.exports = { await interaction.reply("**La commande a été mal éxécutée !**") } - + } } } \ No newline at end of file diff --git a/src/commands/resume.js b/src/commands/resume.js index 7f25f20..48a3518 100644 --- a/src/commands/resume.js +++ b/src/commands/resume.js @@ -8,6 +8,30 @@ module.exports = { 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) @@ -36,6 +60,6 @@ module.exports = { interaction.reply("**Aucune musique n'est actuellement jouée !**") } - + } } } \ No newline at end of file diff --git a/src/commands/skip.js b/src/commands/skip.js new file mode 100644 index 0000000..d1bb929 --- /dev/null +++ b/src/commands/skip.js @@ -0,0 +1,89 @@ +const { SlashCommandBuilder, EmbedBuilder } = require("discord.js"); + +module.exports = { + + data: new SlashCommandBuilder() + .setName("skip") + .setDescription("Permet de passer à la musique suivante !"), + + 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() { + + let embed = new EmbedBuilder() + .setColor(0xe033ff) + .setTitle('Liste de lecture') + .setDescription("Les musiques vont défiler dans cet ordre !") + .setTimestamp(); + + let player = client.manager.players.get(interaction.guild.id) + + + if(!player) { + + embed = new EmbedBuilder() + .setColor(0xff0303) + .setTitle('Erreur : Skip') + .setTimestamp(); + const song_show = {name: "Aucune chanson n'est dans la queue", value: "Changement impossible !"} + + embed.addFields(song_show) + interaction.reply({embeds: [embed]}) + } else { + + console.log("------------------------QUEUE.JS---------------------") + console.log(client.manager.players.get(interaction.guild.id).queue) + let queue = client.manager.players.get(interaction.guild.id).queue; + + + if(queue.length == 0){ + + embed = new EmbedBuilder() + .setColor(0xff0303) + .setTitle('Erreur : Skip') + .setTimestamp(); + const song_show = {name: "Aucune chanson n'est dans la queue", value: "Changement impossible !"} + + embed.addFields(song_show) + interaction.reply({embeds: [embed]}) + } else { + + player.stop() + + embed = new EmbedBuilder() + .setColor(0x03ff2d) + .setTitle('On change de morceau !!!') + .setDescription("**Ok, On est reparti avec "+ player.queue[0].title +" et c'est demandée par " + interaction.member.user.username + "**") + .setTimestamp(); + + + interaction.reply({embeds: [embed]}) + + } + } + + } + } +} \ No newline at end of file diff --git a/src/commands/state.js b/src/commands/state.js new file mode 100644 index 0000000..602b94b --- /dev/null +++ b/src/commands/state.js @@ -0,0 +1,50 @@ +const { SlashCommandBuilder, EmbedBuilder } = require("discord.js"); + +module.exports = { + + data: new SlashCommandBuilder() + .setName("state") + .setDescription("Affiche l'état du lecteur !"), + + async execute(client, interaction) { + + 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 date = new Date(player.queue.current.duration) + + var gMinute = date.getMinutes() + var gSecondes = date.getSeconds() + + + if(date.getMinutes() <= 9) { + gMinute = "0" + date.getMinutes() + } + + if(date.getSeconds() <= 9) { + gSecondes = "0" + date.getSeconds() + } + + + + let embed = new EmbedBuilder() + .setColor(0x32a875) + .setTitle('Information sur la musique !') + .addFields({name:"Titre", value: player.queue.current.title}, + {name:"Auteur", value: player.queue.current.author}, + {name:"URL", value: player.queue.current.uri}, + {name:"Temps", value: gMinute + ":" + gSecondes}) + .setTimestamp(); + + interaction.reply({embeds: [embed]}) + + } else { + + interaction.reply("**Aucune musique n'est actuellement jouée !**") + } + + } +} \ No newline at end of file diff --git a/src/commands/version.js b/src/commands/version.js new file mode 100644 index 0000000..d6861f7 --- /dev/null +++ b/src/commands/version.js @@ -0,0 +1,27 @@ +const { SlashCommandBuilder, EmbedBuilder } = require("discord.js"); +const packageJson = require('../../package.json'); + +module.exports = { + + data: new SlashCommandBuilder() + .setName("version") + .setDescription("Affiche le ping du bot !"), + + async execute(client, interaction) { + + + const uptime = process.uptime(); + const minutes = Math.floor(uptime / 60); + const seconds = Math.floor(uptime % 60); + + const embed = new EmbedBuilder() + .setColor(0xb0f542) + .setTitle('Les Subsonics') + .addFields({name: "Version ", value: packageJson.version},{name:"Uptime", value: minutes + " minutes et " + seconds + " secondes"}) + .setTimestamp(); + + + interaction.reply({embeds: [embed]}) + + } +} \ No newline at end of file diff --git a/src/config.json b/src/config.json index 9bf9d4c..9c12ef6 100644 --- a/src/config.json +++ b/src/config.json @@ -1,5 +1,5 @@ { - "token":"MTA5NDcyNzc4OTY4MjM4MDkyMg.G4LcLR.qMZsDn_iR0rrVyie7yXxfmltn3Z_CaQIXMxUiU", + "token":"MTA5NDcyNzc4OTY4MjM4MDkyMg.GaWsMy.zp3wY6mSOwVhHfV0k43fXdgspi24qgW7LyCD6U", "clientID":"1094727789682380922", "guildID":"137291455336022018" } \ No newline at end of file diff --git a/src/main.js b/src/main.js index 02ef580..68dd2f7 100644 --- a/src/main.js +++ b/src/main.js @@ -1,3 +1,5 @@ +let tryTime = 0; + function startApp() { const { Client, GatewayIntentBits, Collection } = require("discord.js") @@ -12,7 +14,7 @@ const client = new Client({ }) client.commands = new Collection() -client.queue = [] +client.dictator = false; const commands = []; // Grab all the command files from the commands directory you created earlier @@ -129,12 +131,21 @@ client.on("raw", d => client.manager.updateVoiceState(d)); // Client Manager client.login(config.token) + +tryTime = 0 } function handleFatalError(error) { console.error('Erreur fatale :', error); console.log('Redémarrage en cours...'); + + if(tryTime == 10) { + + process.exit(1) + } + + tryTime += 1; startApp(); }