Version 2

This commit is contained in:
CICD - Pipeline 2023-04-10 17:41:59 +02:00
parent 23814fbb24
commit ffeef2df90
8 changed files with 281 additions and 31 deletions

View File

@ -1,7 +1,7 @@
{ {
"name": "subsonics-discord", "name": "subsonics-discord",
"author": "Raphix", "author": "Raphix",
"version": "1.0.0", "version": "2.0.0",
"dependencies": { "dependencies": {
"discord.js": "^14.9.0", "discord.js": "^14.9.0",
"erela.js": "^2.4.0", "erela.js": "^2.4.0",

32
src/commands/help.js Normal file
View File

@ -0,0 +1,32 @@
const { SlashCommandBuilder, EmbedBuilder } = require("discord.js");
module.exports = {
data:new SlashCommandBuilder()
.setName("help")
.setDescription("Faire partir le meilleur groupe du monde !"),
async execute(client, interaction) {
const embed = new EmbedBuilder()
.setColor(0x03ff2d)
.setTitle('Comment assister au concert ?')
.setDescription("**Eh ! Tu as eu ton ticket ? Tant mieux ! Voici la liste des commandes à utiliser dans le salon <#664355637685256203>**")
.addFields({name: "/play <nom>", value: "Cette commande te permet de lire depuis Youtube, n'importe quel musique !"},
{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 <afficher/supprimer>", value: "Permet d'afficher ou de supprimer les titres de la liste de lecture."})
.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");
interaction.reply({embeds: [embed]})
}
}

View File

@ -1,4 +1,5 @@
const { SlashCommandBuilder, EmbedBuilder } = require("discord.js"); const { SlashCommandBuilder, EmbedBuilder } = require("discord.js");
const { Player } = require("erela.js");
module.exports = { module.exports = {
@ -12,9 +13,10 @@ module.exports = {
let player = client.manager.players.get(interaction.guild.id) let player = client.manager.players.get(interaction.guild.id)
if(player) { if(player) {
player.disconnect() player.destroy()
const embed = new EmbedBuilder() const embed = new EmbedBuilder()
.setColor(0xff0000) .setColor(0xff0000)
@ -28,7 +30,7 @@ module.exports = {
} else { } else {
interaction.reply("**Aucune musique n'est actuellement joué !**") interaction.reply("**Aucune musique n'est actuellement jouée !**")
} }
} }

View File

@ -4,7 +4,7 @@ module.exports = {
data: new SlashCommandBuilder() data: new SlashCommandBuilder()
.setName("pause") .setName("pause")
.setDescription("Met en pause la musique joué !"), .setDescription("Met en pause la musique jouée !"),
async execute(client, interaction) { async execute(client, interaction) {
@ -19,7 +19,7 @@ module.exports = {
const embed = new EmbedBuilder() const embed = new EmbedBuilder()
.setColor(0x03ff2d) .setColor(0x03ff2d)
.setTitle('Pause !') .setTitle('Pause !')
.setDescription("**Ok, une entracte est demandé par " + interaction.member.user.username + "**") .setDescription("**Ok, une entracte est demandée par " + interaction.member.user.username + "**")
.setTimestamp(); .setTimestamp();
@ -27,13 +27,13 @@ module.exports = {
player.pause(true) player.pause(true)
} else { } else {
interaction.reply("**Aucune musique n'est actuellement joué !**") interaction.reply("**Aucune musique n'est actuellement jouée !**")
} }
} else { } else {
interaction.reply("**Aucune musique n'est actuellement joué !**") interaction.reply("**Aucune musique n'est actuellement jouée !**")
} }
} }

View File

@ -6,33 +6,35 @@ module.exports = {
data:new SlashCommandBuilder() data:new SlashCommandBuilder()
.setName("play") .setName("play")
.setDescription("Lire une musique depuis youtube") .setDescription("Lire une musique depuis youtube")
.addStringOption(option => option.setName("nom").setDescription("Le nom de la musique recherché !").setRequired(true)), .addStringOption(option => option.setName("nom_ou_lien").setDescription("Le nom de la musique recherchée !").setRequired(true)),
async execute(client, interaction) { async execute(client, interaction) {
const song_name = interaction.options.getString("nom") 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}) 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 player = client.manager.players.get(interaction.guild.id)
if(!player) player = client.manager.create({ if(!player) {
player = client.manager.create({
guild: interaction.guild.id, guild: interaction.guild.id,
voiceChannel: interaction.member.voice.channel.id, voiceChannel: interaction.member.voice.channel.id,
textChannel: interaction.channel.id, textChannel: interaction.channel.id,
}); });
player.connect();
}
const songs = await client.manager.search(song_name) const songs = await client.manager.search(song_name)
player.connect(); if(!player.playing) {
player.queue.add(songs.tracks[0]) client.manager.players.get(interaction.guild.id).queue.add(songs.tracks[0])
player.play()
if(!player.playing) player.play() const embed = await new EmbedBuilder()
console.log(songs.tracks[0])
const embed = new EmbedBuilder()
.setColor(0x15e6ed) .setColor(0x15e6ed)
.setTitle('**Lecture de **' + songs.tracks[0].title) .setTitle('**Lecture de **' + songs.tracks[0].title)
.setDescription('**Demandé par **' + interaction.member.user.username) .setDescription('**Demandé par **' + interaction.member.user.username)
@ -41,7 +43,45 @@ module.exports = {
.setThumbnail(songs.tracks[0].thumbnail) .setThumbnail(songs.tracks[0].thumbnail)
.setTimestamp(); .setTimestamp();
try {
interaction.reply({embeds: [embed]})
} catch(error) {
interaction.reply({embeds: [embed]}) interaction.reply({embeds: [embed]})
} }
} else {
const embed = await new EmbedBuilder()
.setColor(0x15e6ed)
.setTitle('**Ajout dans la liste de lecture **' + songs.tracks[0].title)
.setDescription('**Demandé par **' + interaction.member.user.username)
.addFields({name: "Auteur", value: songs.tracks[0].author},
{name: "URL", value:songs.tracks[0].uri})
.setThumbnail(songs.tracks[0].thumbnail)
.setTimestamp();
client.manager.players.get(interaction.guild.id).queue.add(songs.tracks[0])
console.log("------------------------PLAY.JS---------------------")
console.log(player.queue)
console.log("--------------------------------------------")
try {
interaction.reply({embeds: [embed]})
} catch(error) {
interaction.reply({embeds: [embed]})
}
}
}
} }

160
src/commands/queue.js Normal file
View File

@ -0,0 +1,160 @@
const { SlashCommandBuilder, EmbedBuilder } = require("discord.js");
module.exports = {
data: new SlashCommandBuilder()
.setName("queue")
.setDescription("Affiche le ping du bot !")
.addStringOption(option => option.setName("action").setDescription("Que veux tu faire avec la queue ?").setRequired(true).addChoices(
{name: "Afficher", value: "show"},
{name: "Supprimer", value: "delete"}
)).addIntegerOption(option => option.setName("number").setDescription("Numéro de la place dans la liste de lecture")),
async execute(client, interaction) {
if(!interaction.member.voice.channel) return interaction.reply({content:"Vous devez rejoindre un salon vocal !", ephemeral: true})
const choice = interaction.options.getString("action")
if(choice == "show") {
const 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) {
const song_show = {name: "Aucune chanson n'est dans la queue", value: "Tu peux en ajouter avec /play"}
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){
const song_show = {name: "Aucune chanson n'est dans la queue", value: "Tu peux en ajouter avec /play"}
embed.addFields(song_show)
interaction.reply({embeds: [embed]})
} else {
for(song of queue) {
const song_show = {name: queue.indexOf(song) + " - " + song.title, value: song.author}
embed.addFields(song_show)
}
await interaction.reply({embeds: [embed]})
}
}
} else if(choice == "delete") {
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 : Liste de lecture')
.setTimestamp();
const song_show = {name: "Aucune chanson n'est dans la queue", value: "Supression 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 : Liste de lecture')
.setTimestamp();
const song_show = {name: "Aucune chanson n'est dans la queue", value: "Supression impossible"}
embed.addFields(song_show)
interaction.reply({embeds: [embed]})
} else {
const number = interaction.options.getInteger("number")
console.log(number)
if(number != null) {
try {
queue.splice(number, 1)
embed = new EmbedBuilder()
.setColor(0xe033ff)
.setTitle('Supressipn : Liste de lecture')
.setDescription("La musique a été retiré de la liste de lecture !")
.setTimestamp();
interaction.reply({embeds: [embed]})
} catch(error) {
embed = new EmbedBuilder()
.setColor(0xff0303)
.setTitle('Erreur : Liste de lecture')
.setTimestamp();
const song_show = {name: "Le numéro correspondant n'est pas disponible", value: "Supression impossible"}
embed.addFields(song_show)
interaction.reply({embeds: [embed]})
}
} else {
embed = new EmbedBuilder()
.setColor(0xff0303)
.setTitle('Erreur : Liste de lecture')
.setTimestamp();
const song_show = {name: "Un numéro est nécéssaire", value: "Supression impossible"}
embed.addFields(song_show)
interaction.reply({embeds: [embed]})
}
}
}
} else {
await interaction.reply("**La commande a été mal éxécutée !**")
}
}
}

View File

@ -4,7 +4,7 @@ module.exports = {
data: new SlashCommandBuilder() data: new SlashCommandBuilder()
.setName("resume") .setName("resume")
.setDescription("Met en pause la musique joué !"), .setDescription("Remet la musique qui était en pause !"),
async execute(client, interaction) { async execute(client, interaction) {
@ -19,21 +19,22 @@ module.exports = {
const embed = new EmbedBuilder() const embed = new EmbedBuilder()
.setColor(0x03ff2d) .setColor(0x03ff2d)
.setTitle('C\'est reparti !') .setTitle('C\'est reparti !')
.setDescription("**Ok, Fin de l'entracte, c'est reparti et c'est demandé par " + interaction.member.user.username + "**") .setDescription("**Ok, Fin de l'entracte, c'est reparti et c'est demandée par " + interaction.member.user.username + "**")
.setTimestamp(); .setTimestamp();
interaction.reply({embeds: [embed]}) interaction.reply({embeds: [embed]})
player.pause(false) player.pause(false)
} else { } else {
interaction.reply("**Aucune musique n'est actuellement joué !**") interaction.reply("**Aucune musique n'est actuellement jouée !**")
} }
} else { } else {
interaction.reply("**Aucune musique n'est actuellement joué !**") interaction.reply("**Aucune musique n'est actuellement jouée !**")
} }
} }

View File

@ -1,3 +1,5 @@
function startApp() {
const { Client, GatewayIntentBits, Collection } = require("discord.js") const { Client, GatewayIntentBits, Collection } = require("discord.js")
const { REST, Routes } = require("discord.js") const { REST, Routes } = require("discord.js")
const fs = require("node:fs") const fs = require("node:fs")
@ -10,6 +12,7 @@ const client = new Client({
}) })
client.commands = new Collection() client.commands = new Collection()
client.queue = []
const commands = []; const commands = [];
// Grab all the command files from the commands directory you created earlier // Grab all the command files from the commands directory you created earlier
@ -90,8 +93,8 @@ client.on("interactionCreate", (interaction) => {
const nodes = [ const nodes = [
{ {
host: "lavalink.lexnet.cc", host: "lavalink.devamop.in",
password: "lexn3tl@val!nk", password: "DevamOP",
port: 443, port: 443,
secure: true secure: true
} }
@ -126,3 +129,15 @@ client.on("raw", d => client.manager.updateVoiceState(d));
// Client Manager // Client Manager
client.login(config.token) client.login(config.token)
}
function handleFatalError(error) {
console.error('Erreur fatale :', error);
console.log('Redémarrage en cours...');
startApp();
}
process.on('uncaughtException', handleFatalError);
startApp();