const { SlashCommandBuilder, EmbedBuilder, DefaultWebSocketManagerOptions } = require("discord.js"); const { __glob } = require("../modules/global-variables"); const { LogType } = require("./sub-log"); const { List } = require("./sub-list") const discord = require("./discord-bot") var ytfps = require("ytfps"); const list = new List() module.exports.play = async function (client, interaction) { if(interaction) { let player = client.manager.players.get(interaction.guild.id) const song_name = interaction.options.getString("nom_ou_lien") if(!player) { player = client.manager.create({ guild: interaction.guild.id, voiceChannel: interaction.member.voice.channel.id, textChannel: interaction.channel.id, }); player.connect(); } // CHECK OF PLAYLIST var playlist = await checkPlaylist(song_name) if(playlist) { list.playlistAdd(playlist, interaction) } else { const songs = await client.manager.search(song_name) if(!player.playing) { player.play(songs.tracks[0]) const embed = await new EmbedBuilder() .setColor(0x15e6ed) .setTitle('**Lecture de : **' + 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(); interaction.reply({embeds: [embed]}) } else { list.add(songs.tracks[0], interaction) } } } else { // [A FINIR POUR WEB] } process.emit("MUSIC_UPDATE_STATE") } module.exports.pause = function (client, interaction) { if(interaction) { let player = client.manager.players.get(interaction.guild.id) if(player) { if(player.playing) { const embed = new EmbedBuilder() .setColor(0x03ff2d) .setTitle('Pause !') .setDescription("**Ok, une entracte est demandée par " + interaction.member.user.username + "**") .setTimestamp(); interaction.reply({embeds: [embed]}) player.pause(true) } else { const embed = new EmbedBuilder() .setColor(0x03ff2d) .setTitle('C\'est reparti !') .setDescription("**Ok, Fin de l'entracte, c'est reparti et c'est demandée par " + interaction.member.user.username + "**") .setTimestamp(); interaction.reply({embeds: [embed]}) player.pause(false) } } else { interaction.reply("**Aucune musique n'est actuellement jouée !**") } } else { if(!client) { client = discord.getClient() } let player = client.manager.players.get("137291455336022018") if(player) { if(player.playing) { player.pause(true) } else { player.pause(false) } } } process.emit("MUSIC_UPDATE_STATE") } module.exports.getState = function(client, interaction) { if(interaction) { let player = client.manager.players.get(interaction.guild.id) if(player) { 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}) .setTimestamp() .setThumbnail(player.queue.current.thumbnail); interaction.reply({embeds: [embed]}) } else { interaction.reply("**Aucune musique n'est actuellement jouée !**") } } else { // [A FINIR POUR WEB] } } module.exports.SPECIAL_MJ = async function (client) { if(!client) { client = discord.getClient() } let player = client.manager.players.get("137291455336022018") if(!player) { player = client.manager.create({ guild: "137291455336022018", voiceChannel: "664355734288465920", textChannel: "664355637685256203", }); player.connect(); } const songs = await client.manager.search("Earth MJ") const songs2 = await client.manager.search("They don't care About Us") player.play(songs.tracks[0]) list.add(songs2.tracks[0]) } module.exports.skip = function (client, interaction) { if(interaction) { let player = client.manager.players.get(interaction.guild.id) if(player) { if(!list.haveSongs()) { var 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 { var embed = new EmbedBuilder() .setColor(0x03ff2d) .setTitle('On change de morceau !!!') .setDescription("**Ok, On est reparti avec "+ list.getNextSong().title + " et c'est demandée par " + interaction.member.user.username + "**") .setThumbnail(list.getNextSong().thumbnail) .setTimestamp(); player.stop() interaction.reply({embeds: [embed]}) } } else { interaction.reply("**Aucune musique n'est actuellement jouée !**") } } else { if(!client) { client = discord.getClient() } let player = client.manager.players.get("137291455336022018") if(list.haveSongs()) { player.stop() } } process.emit("MUSIC_UPDATE_STATE") } module.exports.seek = function (data) { client = discord.getClient() let player = client.manager.players.get("137291455336022018") if(player) { player.seek(data) } process.emit("MUSIC_UPDATE_STATE") } module.exports.setVol = function (data) { client = discord.getClient() let player = client.manager.players.get("137291455336022018") if(player) { player.setVolume(data) } process.emit("MUSIC_UPDATE_STATE") } module.exports.loop = function (client) { if(!client) { client = discord.getClient() } let player = client.manager.players.get("137291455336022018") if(player) { if(player.queueRepeat == true) { player.setQueueRepeat(false) } else { player.setQueueRepeat(true) } } process.emit("MUSIC_UPDATE_STATE") } module.exports.previous = function (client, interaction) { if(interaction) { let player = client.manager.players.get(interaction.guild.id) if(player) { if(!list.havePreviousSongs()){ 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 { list.__next_add(player.queue.current) player.play(list.previous()) embed = new EmbedBuilder() .setColor(0x03ff2d) .setTitle('Retour vers le passé !!!') .setDescription("**Ok, On est reparti avec "+ player.queue.current.title +" et c'est demandée par " + interaction.member.user.username + "**") .setTimestamp(); interaction.reply({embeds: [embed]}) } } } else { if(!client) { client = discord.getClient() } let player = client.manager.players.get("137291455336022018") if(list.havePreviousSongs()){ list.__next_add(player.queue.current) player.play(list.previous()) } } process.emit("MUSIC_UPDATE_STATE") } const clog = new LogType("Actualisation") module.exports.updateMusicState = function (client, action) { if(!client) { client = discord.getClient() } let player = client.manager.players.get("137291455336022018") var currentTitle = "null" const data = { "playing": 0, "current":null, "isOnline": false, "queue": null, "loop": false, "durationNow": null, "durationAll": null, "volume": null } if(player) { data["current"] = player.queue.current if(player.queueRepeat == true) { data["loop"] = true } data["volume"] = player.volume * 10 if(player.queue.current) { data["durationNow"] = player.position data["durationAll"] = player.queue.current.duration currentTitle = player.queue.current.title } if(player.playing == true && player.paused == false) { data["playing"] = 1 } else { data["playing"] = 0 } data["queue"] = list.getList(); data["isOnline"] = true } if(action == "end") { data["current"] = null; data["isOnline"] = false } clog.log("Actualisation de tous les clients - Titre : " + currentTitle) return data } // FINI module.exports.leave = function (client, interaction) { var player = null if(interaction) { player = client.manager.players.get(interaction.guild.id) } else { client = discord.getClient() player = client.manager.players.get("137291455336022018") } if(player) { player.destroy() if(interaction) { const embed = new EmbedBuilder() .setColor(0xff0000) .setTitle('C\'est tout pour nous !') .setDescription("**Le meilleur groupe du monde est parti ... !**") .setTimestamp(); interaction.reply({embeds: [embed]}) } } else { if(interaction) { interaction.reply("**Aucune musique n'est actuellement jouée !**") } } process.emit("MUSIC_UPDATE_STATE") } // FINI async function checkPlaylist (song_name) { try { return await ytfps(song_name) } catch(err) { return false } }