Maj pkgs + fix dep des buttons / commands + Ajout fichiers utils
This commit is contained in:
@@ -4,11 +4,7 @@
|
|||||||
**/.gitignore
|
**/.gitignore
|
||||||
**/.vscode
|
**/.vscode
|
||||||
**/docker-compose*
|
**/docker-compose*
|
||||||
**/compose*
|
|
||||||
**/Dockerfile*
|
**/Dockerfile*
|
||||||
**/node_modules
|
**/node_modules
|
||||||
**/npm-debug.log
|
|
||||||
**/obj
|
|
||||||
**/cracks
|
**/cracks
|
||||||
LICENSE
|
|
||||||
README.md
|
README.md
|
||||||
17
app.js
17
app.js
@@ -12,14 +12,8 @@ const client = new Client({ intents })
|
|||||||
const eventFiles = fs.readdirSync('./events').filter(file => file.endsWith('.js'))
|
const eventFiles = fs.readdirSync('./events').filter(file => file.endsWith('.js'))
|
||||||
for (const file of eventFiles) {
|
for (const file of eventFiles) {
|
||||||
let event = require(`./events/${file}`)
|
let event = require(`./events/${file}`)
|
||||||
if (event.once) client.once(event.name, (...args) => {
|
if (event.once) client.once(event.name, (...args) => { event.execute(...args) })
|
||||||
//console.log(`\u001b[1;35m Event '${event.name}' executed.`)
|
else client.on(event.name, (...args) => { event.execute(...args) })
|
||||||
event.execute(...args)
|
|
||||||
})
|
|
||||||
else client.on(event.name, (...args) => {
|
|
||||||
//console.log(`\u001b[1;35m Event '${event.name}' executed.`)
|
|
||||||
event.execute(...args)
|
|
||||||
})
|
|
||||||
}
|
}
|
||||||
|
|
||||||
// COMMANDS HANDLING
|
// COMMANDS HANDLING
|
||||||
@@ -39,11 +33,7 @@ for (folder of commandFolders) {
|
|||||||
// COMMANDS REGISTERING
|
// COMMANDS REGISTERING
|
||||||
const rest = new REST({ version: '10' }).setToken(process.env.DISCORD_TOKEN);
|
const rest = new REST({ version: '10' }).setToken(process.env.DISCORD_TOKEN);
|
||||||
(async () => {
|
(async () => {
|
||||||
//console.log(`\u001b[1;35m Started refreshing ${commands.length} application (/) commands.`)
|
try { await rest.put(Routes.applicationCommands(process.env.DISCORD_APP_ID), { body: commands }) }
|
||||||
try {
|
|
||||||
let data = await rest.put(Routes.applicationCommands('1065047326860783636'), { body: commands })
|
|
||||||
//console.log(`\u001b[1;35m Successfully reloaded ${data.length} application (/) commands.`)
|
|
||||||
}
|
|
||||||
catch (error) { console.error(error) }
|
catch (error) { console.error(error) }
|
||||||
})()
|
})()
|
||||||
|
|
||||||
@@ -68,7 +58,6 @@ for (const file of eventPlayerFiles) {
|
|||||||
if (['debug'].includes(event.name)) continue
|
if (['debug'].includes(event.name)) continue
|
||||||
player.events.on(event.name, (...args) => event.execute(...args))
|
player.events.on(event.name, (...args) => event.execute(...args))
|
||||||
}
|
}
|
||||||
//player.on('debug', async (message) => { console.log(`General player debug event: ${message}`) })
|
|
||||||
|
|
||||||
// LAUNCH
|
// LAUNCH
|
||||||
client.login()
|
client.login()
|
||||||
@@ -1,4 +1,4 @@
|
|||||||
const { useQueue } = require("discord-player")
|
const { useQueue } = require('discord-player')
|
||||||
|
|
||||||
module.exports = {
|
module.exports = {
|
||||||
id: 'loop',
|
id: 'loop',
|
||||||
@@ -6,7 +6,7 @@ module.exports = {
|
|||||||
let queue = useQueue(interaction.guild.id)
|
let queue = useQueue(interaction.guild.id)
|
||||||
let loop = queue.repeatMode === 0 ? 1 : queue.repeatMode === 1 ? 2 : queue.repeatMode === 2 ? 3 : 0
|
let loop = queue.repeatMode === 0 ? 1 : queue.repeatMode === 1 ? 2 : queue.repeatMode === 2 ? 3 : 0
|
||||||
queue.setRepeatMode(loop)
|
queue.setRepeatMode(loop)
|
||||||
await interaction.reply({ content:`Boucle ${loop === 0 ? "désactivée" : loop === 1 ? "en mode Titre" : loop === 2 ? "en mode File d'Attente" : "en autoplay"}.`, ephemeral: true })
|
await interaction.reply({ content:`Boucle ${loop === 0 ? 'désactivée' : loop === 1 ? 'en mode Titre' : loop === 2 ? 'en mode File d\'Attente' : 'en autoplay'}.`, ephemeral: true })
|
||||||
setTimeout(async () => { await interaction.deleteReply() }, 20000)
|
setTimeout(async () => { await interaction.deleteReply() }, 20000)
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
@@ -1,4 +1,4 @@
|
|||||||
const { useQueue } = require("discord-player")
|
const { useQueue } = require('discord-player')
|
||||||
|
|
||||||
module.exports = {
|
module.exports = {
|
||||||
id: 'pause',
|
id: 'pause',
|
||||||
|
|||||||
@@ -1,4 +1,4 @@
|
|||||||
const { useHistory } = require("discord-player")
|
const { useHistory } = require('discord-player')
|
||||||
|
|
||||||
module.exports = {
|
module.exports = {
|
||||||
id: 'previous',
|
id: 'previous',
|
||||||
|
|||||||
@@ -1,4 +1,4 @@
|
|||||||
const { useQueue } = require("discord-player")
|
const { useQueue } = require('discord-player')
|
||||||
|
|
||||||
module.exports = {
|
module.exports = {
|
||||||
id: 'resume',
|
id: 'resume',
|
||||||
|
|||||||
@@ -1,4 +1,4 @@
|
|||||||
const { useQueue } = require("discord-player")
|
const { useQueue } = require('discord-player')
|
||||||
|
|
||||||
module.exports = {
|
module.exports = {
|
||||||
id: 'shuffle',
|
id: 'shuffle',
|
||||||
|
|||||||
@@ -1,4 +1,4 @@
|
|||||||
const { useQueue } = require("discord-player")
|
const { useQueue } = require('discord-player')
|
||||||
|
|
||||||
module.exports = {
|
module.exports = {
|
||||||
id: 'skip',
|
id: 'skip',
|
||||||
|
|||||||
@@ -1,4 +1,4 @@
|
|||||||
const { useQueue } = require("discord-player")
|
const { useQueue } = require('discord-player')
|
||||||
|
|
||||||
module.exports = {
|
module.exports = {
|
||||||
id: 'stop',
|
id: 'stop',
|
||||||
|
|||||||
@@ -1,12 +1,17 @@
|
|||||||
const { useQueue } = require("discord-player")
|
const { useQueue } = require('discord-player')
|
||||||
|
|
||||||
module.exports = {
|
module.exports = {
|
||||||
id: 'volume_down',
|
id: 'volume_down',
|
||||||
async execute(interaction) {
|
async execute(interaction) {
|
||||||
let queue = useQueue(interaction.guild.id)
|
let queue = useQueue(interaction.guild.id)
|
||||||
let volume = queue.node.volume - 10
|
if (!queue) await interaction.reply({ content: 'Aucune musique en cours de lecture.', ephemeral: true })
|
||||||
queue.node.setVolume(volume)
|
else {
|
||||||
await interaction.reply({ content: `🔉 | Volume modifié à ${volume}% !`, ephemeral: true })
|
let volume = queue.node.volume - 10
|
||||||
|
queue.node.setVolume(volume)
|
||||||
|
//await interaction.reply({ content: `🔉 | Volume modifié à ${volume}% !`, ephemeral: true })
|
||||||
|
let message = await interaction.fetchReply()
|
||||||
|
await message.edit({ content: `🔉 | Volume modifié à ${volume}% !`, ephemeral: true })
|
||||||
|
}
|
||||||
setTimeout(async () => { await interaction.deleteReply() }, 20000)
|
setTimeout(async () => { await interaction.deleteReply() }, 20000)
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
@@ -1,14 +1,16 @@
|
|||||||
const { useQueue } = require("discord-player")
|
const { useQueue } = require('discord-player')
|
||||||
|
|
||||||
module.exports = {
|
module.exports = {
|
||||||
id: 'volume_up',
|
id: 'volume_up',
|
||||||
async execute(interaction) {
|
async execute(interaction) {
|
||||||
let queue = useQueue(interaction.guild.id)
|
let queue = useQueue(interaction.guild.id)
|
||||||
if (!queue) await interaction.reply({ content: "Aucune musique en cours de lecture.", ephemeral: true })
|
if (!queue) await interaction.reply({ content: 'Aucune musique en cours de lecture.', ephemeral: true })
|
||||||
else {
|
else {
|
||||||
let volume = queue.node.volume + 10
|
let volume = queue.node.volume + 10
|
||||||
queue.node.setVolume(volume)
|
queue.node.setVolume(volume)
|
||||||
await interaction.reply({ content: `🔉 | Volume modifié à ${volume}% !`, ephemeral: true })
|
//await interaction.reply({ content: `🔉 | Volume modifié à ${volume}% !`, ephemeral: true })
|
||||||
|
let message = await interaction.fetchReply()
|
||||||
|
await message.edit({ content: `🔉 | Volume modifié à ${volume}% !`, ephemeral: true })
|
||||||
}
|
}
|
||||||
setTimeout(async () => { await interaction.deleteReply() }, 20000)
|
setTimeout(async () => { await interaction.deleteReply() }, 20000)
|
||||||
}
|
}
|
||||||
|
|||||||
@@ -1,12 +1,12 @@
|
|||||||
const { SlashCommandBuilder } = require('discord.js')
|
const { SlashCommandBuilder } = require('discord.js')
|
||||||
const { useQueue } = require("discord-player")
|
const { useQueue } = require('discord-player')
|
||||||
|
|
||||||
module.exports = {
|
module.exports = {
|
||||||
data: new SlashCommandBuilder()
|
data: new SlashCommandBuilder()
|
||||||
.setName('loop')
|
.setName('loop')
|
||||||
.setDescription('Boucler la musique en cours de lecture.')
|
.setDescription('Boucler la musique en cours de lecture.')
|
||||||
.addIntegerOption(option => option.setName('loop')
|
.addIntegerOption(option => option.setName('loop')
|
||||||
.setDescription("Mode de boucle (0 = Off, 1 = Titre, 2 = File d'Attente; 3 = Autoplay)")
|
.setDescription('Mode de boucle (0 = Off, 1 = Titre, 2 = File d\'Attente; 3 = Autoplay)')
|
||||||
.setRequired(true)
|
.setRequired(true)
|
||||||
.setMinValue(0)
|
.setMinValue(0)
|
||||||
.setMaxValue(3)),
|
.setMaxValue(3)),
|
||||||
@@ -14,6 +14,6 @@ module.exports = {
|
|||||||
let loop = interaction.options.getInteger('loop')
|
let loop = interaction.options.getInteger('loop')
|
||||||
let queue = useQueue(interaction.guild.id)
|
let queue = useQueue(interaction.guild.id)
|
||||||
queue.setRepeatMode(loop)
|
queue.setRepeatMode(loop)
|
||||||
return await interaction.reply(`Boucle ${loop === 0 ? "désactivée" : loop === 1 ? "en mode Titre" : loop === 2 ? "en mode File d'Attente" : "en autoplay"}.`)
|
return await interaction.reply(`Boucle ${loop === 0 ? 'désactivée' : loop === 1 ? 'en mode Titre' : loop === 2 ? 'en mode File d\'Attente' : 'en autoplay'}.`)
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
@@ -1,5 +1,5 @@
|
|||||||
const { SlashCommandBuilder } = require('discord.js')
|
const { SlashCommandBuilder } = require('discord.js')
|
||||||
const { useQueue } = require("discord-player")
|
const { useQueue } = require('discord-player')
|
||||||
|
|
||||||
module.exports = {
|
module.exports = {
|
||||||
data: new SlashCommandBuilder()
|
data: new SlashCommandBuilder()
|
||||||
|
|||||||
@@ -1,6 +1,5 @@
|
|||||||
const { SlashCommandBuilder } = require('discord.js')
|
const { SlashCommandBuilder } = require('discord.js')
|
||||||
const { useMasterPlayer, useQueue, QueryType } = require('discord-player')
|
const { useMasterPlayer, useQueue, QueryType } = require('discord-player')
|
||||||
const reduceString = (str, length) => str.length > length ? str.substring(0, length - 3) + "..." : str
|
|
||||||
|
|
||||||
module.exports = {
|
module.exports = {
|
||||||
data: new SlashCommandBuilder()
|
data: new SlashCommandBuilder()
|
||||||
|
|||||||
@@ -1,49 +1,13 @@
|
|||||||
const { SlashCommandBuilder, EmbedBuilder } = require('discord.js')
|
const { SlashCommandBuilder } = require('discord.js')
|
||||||
const { useQueue } = require("discord-player")
|
const generatePlayer = require('../../utils/generatePlayer.js')
|
||||||
|
|
||||||
module.exports = {
|
module.exports = {
|
||||||
data: new SlashCommandBuilder()
|
data: new SlashCommandBuilder()
|
||||||
.setName('player')
|
.setName('player')
|
||||||
.setDescription('Afficher une interface de contrôle de la musique.'),
|
.setDescription('Afficher une interface de contrôle de la musique.'),
|
||||||
async execute(interaction) {
|
async execute(interaction) {
|
||||||
let queue = useQueue(interaction.guild.id)
|
let { embed, components } = await generatePlayer(interaction.guild)
|
||||||
if (!queue) return await interaction.reply('Aucune session d\'écoute en cours !')
|
if (!components) return await interaction.reply({ embeds: [embed] })
|
||||||
let track = queue.currentTrack
|
else return await interaction.reply({ embeds: [embed], components })
|
||||||
if (!track) return await interaction.reply('Aucune musique en cours de lecture !')
|
|
||||||
|
|
||||||
/*let embed = {
|
|
||||||
color: 0xffc370,
|
|
||||||
title: track.title,
|
|
||||||
url: track.url,
|
|
||||||
}
|
|
||||||
if (track.thumbnail) embed.thumbnail = { url: track.thumbnail }
|
|
||||||
embed.description = `
|
|
||||||
**Durée :** ${track.duration}
|
|
||||||
**Source :** ${track.source ? track.source === 'youtube' ? 'Youtube' : track.source === 'spotify' ? 'Spotify' : 'Inconnu' : 'Inconnu'}
|
|
||||||
**Volume :** ${queue.node.volume}%
|
|
||||||
**Progression :** ${queue.node.createProgressBar()}
|
|
||||||
**Loop :** ${queue.repeatMode ? queue.repeatMode === 2 ? "File d'Attente" : "Titre" : "Off"}
|
|
||||||
**Autoplay :** ${queue.autoplay ? "On" : "Off"}
|
|
||||||
`
|
|
||||||
if (track.requestedBy) embed.footer = { text: `Demandé par ${track.requestedBy.tag}` }
|
|
||||||
return await interaction.reply({ embeds: [embed] })*/
|
|
||||||
|
|
||||||
// Create an embed using EmbedBuilder instead of an object
|
|
||||||
const embed = new EmbedBuilder()
|
|
||||||
.setColor('#ffc370')
|
|
||||||
.setTitle(track.title)
|
|
||||||
.setAuthor({ name: track.author })
|
|
||||||
.setURL(track.url)
|
|
||||||
.setThumbnail(track.thumbnail)
|
|
||||||
.setDescription(`
|
|
||||||
**Durée :** ${track.duration}
|
|
||||||
**Source :** ${track.source ? track.source === 'youtube' ? 'Youtube' : track.source === 'spotify' ? 'Spotify' : 'Inconnu' : 'Inconnu'}
|
|
||||||
**Volume :** ${queue.node.volume}%
|
|
||||||
**Progression :** ${queue.node.createProgressBar()}
|
|
||||||
**Loop :** ${queue.repeatMode ? queue.repeatMode === 2 ? "File d'Attente" : "Titre" : "Off"}
|
|
||||||
**Autoplay :** ${queue.autoplay ? "On" : "Off"}
|
|
||||||
`)
|
|
||||||
.setFooter({ text: `Demandé par ${track.requestedBy.tag}` })
|
|
||||||
return await interaction.reply({ embeds: [embed] })
|
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
@@ -1,5 +1,5 @@
|
|||||||
const { SlashCommandBuilder } = require('discord.js')
|
const { SlashCommandBuilder } = require('discord.js')
|
||||||
const { useHistory } = require("discord-player")
|
const { useHistory } = require('discord-player')
|
||||||
|
|
||||||
module.exports = {
|
module.exports = {
|
||||||
data: new SlashCommandBuilder()
|
data: new SlashCommandBuilder()
|
||||||
|
|||||||
@@ -1,5 +1,5 @@
|
|||||||
const { SlashCommandBuilder } = require('discord.js')
|
const { SlashCommandBuilder } = require('discord.js')
|
||||||
const { useQueue } = require("discord-player")
|
const { useQueue } = require('discord-player')
|
||||||
|
|
||||||
module.exports = {
|
module.exports = {
|
||||||
data: new SlashCommandBuilder()
|
data: new SlashCommandBuilder()
|
||||||
|
|||||||
@@ -1,5 +1,5 @@
|
|||||||
const { SlashCommandBuilder } = require('discord.js')
|
const { SlashCommandBuilder } = require('discord.js')
|
||||||
const { useQueue } = require("discord-player")
|
const { useQueue } = require('discord-player')
|
||||||
|
|
||||||
module.exports = {
|
module.exports = {
|
||||||
data: new SlashCommandBuilder()
|
data: new SlashCommandBuilder()
|
||||||
|
|||||||
@@ -1,5 +1,5 @@
|
|||||||
const { SlashCommandBuilder } = require('discord.js')
|
const { SlashCommandBuilder } = require('discord.js')
|
||||||
const { useQueue } = require("discord-player")
|
const { useQueue } = require('discord-player')
|
||||||
|
|
||||||
module.exports = {
|
module.exports = {
|
||||||
data: new SlashCommandBuilder()
|
data: new SlashCommandBuilder()
|
||||||
|
|||||||
@@ -1,5 +1,5 @@
|
|||||||
const { SlashCommandBuilder } = require('discord.js')
|
const { SlashCommandBuilder } = require('discord.js')
|
||||||
const { useQueue } = require("discord-player")
|
const { useQueue } = require('discord-player')
|
||||||
|
|
||||||
module.exports = {
|
module.exports = {
|
||||||
data: new SlashCommandBuilder()
|
data: new SlashCommandBuilder()
|
||||||
|
|||||||
@@ -1,5 +1,5 @@
|
|||||||
const { SlashCommandBuilder } = require('discord.js')
|
const { SlashCommandBuilder } = require('discord.js')
|
||||||
const { useQueue } = require("discord-player")
|
const { useQueue } = require('discord-player')
|
||||||
|
|
||||||
module.exports = {
|
module.exports = {
|
||||||
data: new SlashCommandBuilder()
|
data: new SlashCommandBuilder()
|
||||||
|
|||||||
@@ -3,6 +3,7 @@ const { Events } = require('discord.js')
|
|||||||
module.exports = {
|
module.exports = {
|
||||||
name: Events.GuildMemberAdd,
|
name: Events.GuildMemberAdd,
|
||||||
async execute(member) {
|
async execute(member) {
|
||||||
|
if (member.guild.id !== '1086577543651524699') return
|
||||||
member.guild.members.fetch().then(() => {
|
member.guild.members.fetch().then(() => {
|
||||||
var i = 0
|
var i = 0
|
||||||
member.guild.members.cache.forEach(async member => { if (!member.user.bot) i++ })
|
member.guild.members.cache.forEach(async member => { if (!member.user.bot) i++ })
|
||||||
|
|||||||
@@ -3,6 +3,7 @@ const { Events } = require('discord.js')
|
|||||||
module.exports = {
|
module.exports = {
|
||||||
name: Events.GuildMemberRemove,
|
name: Events.GuildMemberRemove,
|
||||||
async execute(member) {
|
async execute(member) {
|
||||||
|
if (member.guild.id !== '1086577543651524699') return
|
||||||
member.guild.members.fetch().then(() => {
|
member.guild.members.fetch().then(() => {
|
||||||
var i = 0
|
var i = 0
|
||||||
member.guild.members.cache.forEach(async member => { if (!member.user.bot) i++ })
|
member.guild.members.cache.forEach(async member => { if (!member.user.bot) i++ })
|
||||||
|
|||||||
@@ -1,34 +1,42 @@
|
|||||||
const { Events } = require('discord.js')
|
const { Events } = require('discord.js')
|
||||||
|
const editPlayer = require('../utils/editPlayer.js')
|
||||||
|
const playerButtons = require('../utils/playerButtons.js')
|
||||||
|
|
||||||
module.exports = {
|
module.exports = {
|
||||||
name: Events.InteractionCreate,
|
name: Events.InteractionCreate,
|
||||||
async execute(interaction) {
|
async execute(interaction) {
|
||||||
if (interaction.isButton()) {
|
if (!interaction.isAutocomplete() && !interaction.isChatInputCommand() && !interaction.isButton()) return console.error(`Interaction ${interaction.commandName} is not a command.`)
|
||||||
let button = interaction.client.buttons.get(interaction.customId)
|
|
||||||
if (!button) return console.error(`No button id matching ${interaction.customId} was found.`)
|
|
||||||
|
|
||||||
console.log(`\u001b[1;33m Button '${interaction.customId}' clicked by ${interaction.user.tag}`)
|
else if (interaction.isAutocomplete()) {
|
||||||
|
let autoCompleteRun = interaction.client.commands.get(interaction.commandName)
|
||||||
|
if (!autoCompleteRun) return console.error(`No autoCompleteRun matching ${interaction.commandName} was found.`)
|
||||||
|
|
||||||
try { await button.execute(interaction) }
|
|
||||||
catch (error) { console.error(`Error executing ${interaction.customId}:`, error) }
|
|
||||||
}
|
|
||||||
|
|
||||||
if (!interaction.isAutocomplete() && !interaction.isChatInputCommand()) return //console.error(`Interaction ${interaction.commandName} is not a command.`)
|
|
||||||
|
|
||||||
let command = interaction.client.commands.get(interaction.commandName)
|
|
||||||
if (!command) return console.error(`No command matching ${interaction.commandName} was found.`)
|
|
||||||
|
|
||||||
if (interaction.isAutocomplete()) {
|
|
||||||
console.log(`\u001b[1;33m AutoCompleteRun '${interaction.commandName}' launched by ${interaction.user.tag}`)
|
console.log(`\u001b[1;33m AutoCompleteRun '${interaction.commandName}' launched by ${interaction.user.tag}`)
|
||||||
|
|
||||||
try { await command.autocompleteRun(interaction) }
|
try { await autoCompleteRun.autocompleteRun(interaction) }
|
||||||
catch (error) { console.error(`Error autocompleting ${interaction.commandName}:`, error) }
|
catch (error) { console.error(`Error autocompleting ${interaction.commandName}:`, error) }
|
||||||
}
|
}
|
||||||
|
|
||||||
else if (interaction.isChatInputCommand()) {
|
else if (interaction.isChatInputCommand()) {
|
||||||
|
let command = interaction.client.commands.get(interaction.commandName)
|
||||||
|
if (!command) return console.error(`No command matching ${interaction.commandName} was found.`)
|
||||||
|
|
||||||
console.log(`\u001b[1;33m Command '${interaction.commandName}' launched by ${interaction.user.tag}`)
|
console.log(`\u001b[1;33m Command '${interaction.commandName}' launched by ${interaction.user.tag}`)
|
||||||
|
|
||||||
try { await command.execute(interaction) }
|
try { await command.execute(interaction) }
|
||||||
catch (error) { console.error(`Error executing ${interaction.commandName}:`, error) }
|
catch (error) { console.error(`Error executing ${interaction.commandName}:`, error) }
|
||||||
}
|
}
|
||||||
|
|
||||||
|
else if (interaction.isButton()) {
|
||||||
|
let button = interaction.client.buttons.get(interaction.customId)
|
||||||
|
if (!button) return console.error(`No button id matching ${interaction.customId} was found.`)
|
||||||
|
|
||||||
|
console.log(`\u001b[1;33m Button '${interaction.customId}' clicked by ${interaction.user.tag}`)
|
||||||
|
|
||||||
|
if (playerButtons.includes(interaction.customId)) { await editPlayer(interaction) }
|
||||||
|
|
||||||
|
try { await button.execute(interaction) }
|
||||||
|
catch (error) { console.error(`Error clicking ${interaction.customId}:`, error) }
|
||||||
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
123
events/ready.js
123
events/ready.js
@@ -1,5 +1,9 @@
|
|||||||
const { Events, EmbedBuilder, ButtonBuilder, ActionRowBuilder } = require('discord.js')
|
const { Events } = require('discord.js')
|
||||||
const { useQueue } = require("discord-player")
|
//const { DataTypes } = require("sequelize")
|
||||||
|
//const sequelize = require('../utils/initSequelize.js')
|
||||||
|
const generatePlayer = require('../utils/generatePlayer.js')
|
||||||
|
const getUptime = require('../utils/getUptime.js')
|
||||||
|
require('dotenv').config()
|
||||||
|
|
||||||
const dance = async function (bot_id, channel, embed, components) {
|
const dance = async function (bot_id, channel, embed, components) {
|
||||||
let messages = await channel.messages.fetch()
|
let messages = await channel.messages.fetch()
|
||||||
@@ -7,17 +11,7 @@ const dance = async function (bot_id, channel, embed, components) {
|
|||||||
if (!botMessage || (!components && botMessage.components.length > 0)) {
|
if (!botMessage || (!components && botMessage.components.length > 0)) {
|
||||||
await channel.bulkDelete(messages)
|
await channel.bulkDelete(messages)
|
||||||
return await channel.send({ embeds: [embed] })
|
return await channel.send({ embeds: [embed] })
|
||||||
} else {
|
} else await botMessage.edit({ embeds: [embed], components })
|
||||||
await botMessage.edit({ embeds: [embed], components })
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
const getUptime = function (uptime) {
|
|
||||||
let days = Math.floor(uptime / 86400000)
|
|
||||||
let hours = Math.floor(uptime / 3600000) % 24
|
|
||||||
let minutes = Math.floor(uptime / 60000) % 60
|
|
||||||
let seconds = Math.floor(uptime / 1000) % 60
|
|
||||||
return `${days}J, ${hours}H, ${minutes}M et ${seconds}S`
|
|
||||||
}
|
}
|
||||||
|
|
||||||
module.exports = {
|
module.exports = {
|
||||||
@@ -25,75 +19,42 @@ module.exports = {
|
|||||||
once: true,
|
once: true,
|
||||||
execute(client) {
|
execute(client) {
|
||||||
console.log(`\u001b[1;35m Ready! Logged in as ${client.user.tag}`)
|
console.log(`\u001b[1;35m Ready! Logged in as ${client.user.tag}`)
|
||||||
setInterval(async () => {
|
|
||||||
let guild = client.guilds.cache.get('1086577543651524699')
|
|
||||||
let channel = guild.channels.cache.get('1099542278764245096')
|
|
||||||
|
|
||||||
let queue = useQueue(guild.id)
|
|
||||||
if (!queue) return await dance(client.user.id, channel, new EmbedBuilder().setColor('#ffc370').setTitle('Aucune session d\'écoute en cours !').setFooter({ text: `Uptime: ${getUptime(client.uptime)}` }))
|
|
||||||
let track = queue.currentTrack
|
|
||||||
if (!track) return await dance(client.user.id, channel, new EmbedBuilder().setColor('#ffc370').setTitle('Aucune musique en cours de lecture !').setFooter({ text: `Uptime: ${getUptime(client.uptime)}` }))
|
|
||||||
|
|
||||||
let embed = new EmbedBuilder()
|
//try {
|
||||||
.setColor('#ffc370')
|
// sequelize.authenticate()
|
||||||
.setTitle(track.title)
|
// console.log('Connection has been established successfully.')
|
||||||
.setAuthor({ name: track.author })
|
//} catch (error) { console.error('Unable to connect to the database:', error) }
|
||||||
.setURL(track.url)
|
|
||||||
.setImage(track.thumbnail)
|
var interval = setInterval(async () => {
|
||||||
.addFields(
|
//client.guilds.cache.each(async guild => {
|
||||||
{ name: 'Durée', value: track.duration, inline: true },
|
//const Data = sequelize.define(guild.id, {
|
||||||
{ name: 'Source', value: track.source === 'youtube' ? 'Youtube' : track.source === 'spotify' ? 'Spotify' : 'Inconnu', inline: true },
|
// playerChannelId: DataTypes.STRING
|
||||||
{ name: 'Volume', value: `${queue.node.volume}%`, inline: true },
|
//})
|
||||||
{ name: queue.node.isPaused() ? 'Progression (en pause)' : 'Progression', value: queue.node.createProgressBar() },
|
//await sequelize.sync({ force: true })
|
||||||
{ name: 'Loop', value: queue.repeatMode ? queue.repeatMode === 2 ? "File d'Attente" : "Titre" : "Off", inline: true },
|
|
||||||
{ name: 'Autoplay', value: queue.autoplay ? "On" : "Off", inline: true }
|
//if (!Data.playerChannelId) {
|
||||||
)
|
// clearInterval(interval)
|
||||||
.setDescription(`**Musique suivante :** ${queue.tracks[0] ? queue.tracks[0].title : 'Aucune'}`)
|
// return console.log(`\u001b[1;31m Aucun channel inscrit dans la base, veuillez utiliser la commande \`/setchannel\` !`)
|
||||||
.setFooter({ text: `Uptime: ${getUptime(client.uptime)} / Demandé par ${track.requestedBy.tag}` })
|
//}
|
||||||
|
//let channel = client.channels.cache.get(Data.playerChannelId)
|
||||||
let components = [
|
|
||||||
new ActionRowBuilder().addComponents(
|
let guild = client.guilds.cache.get(process.env.DISCORD_GUILD_ID)
|
||||||
new ButtonBuilder()
|
let channel = client.channels.cache.get(process.env.DISCORD_PLAYERCHANNEL_ID)
|
||||||
.setLabel(queue.node.isPaused() ? '▶️' : '⏸️')
|
if (!channel) {
|
||||||
.setStyle(2)
|
clearInterval(interval)
|
||||||
.setCustomId(queue.node.isPaused() ? 'resume' : 'pause'),
|
return console.log(`\u001b[1;31m Error: Aucun channel trouvé avec l'id \`${process.env.DISCORD_PLAYERCHANNEL_ID}\`, veuillez utiliser la commande \`/setchannel\` !`)
|
||||||
new ButtonBuilder()
|
}
|
||||||
.setLabel('⏹️')
|
|
||||||
.setStyle(2)
|
let { embed, components } = await generatePlayer(guild)
|
||||||
.setCustomId('stop'),
|
|
||||||
new ButtonBuilder()
|
if (components) {
|
||||||
.setLabel('⏭️')
|
embed.setFooter({ text: `Uptime: ${getUptime(client.uptime)} / ${embed.data.footer.text}` })
|
||||||
.setStyle(2)
|
await dance(client.user.id, channel, embed, components)
|
||||||
.setCustomId('skip')
|
} else {
|
||||||
.setDisabled(queue.tracks.length !== 0),
|
embed.setFooter({ text: `Uptime: ${getUptime(client.uptime)}` })
|
||||||
new ButtonBuilder()
|
await dance(client.user.id, channel, embed)
|
||||||
.setLabel('🔉')
|
}
|
||||||
.setStyle(2)
|
//})
|
||||||
.setCustomId('volume_down')
|
|
||||||
.setDisabled(queue.node.volume === 0),
|
|
||||||
new ButtonBuilder()
|
|
||||||
.setLabel('🔊')
|
|
||||||
.setStyle(2)
|
|
||||||
.setCustomId('volume_up')
|
|
||||||
.setDisabled(queue.node.volume === 100)
|
|
||||||
),
|
|
||||||
new ActionRowBuilder().addComponents(
|
|
||||||
new ButtonBuilder()
|
|
||||||
.setLabel('🔀')
|
|
||||||
.setStyle(2)
|
|
||||||
.setCustomId('shuffle'),
|
|
||||||
new ButtonBuilder()
|
|
||||||
.setLabel('🔁')
|
|
||||||
.setStyle(2)
|
|
||||||
.setCustomId('loop'),
|
|
||||||
new ButtonBuilder()
|
|
||||||
.setLabel('⏮️')
|
|
||||||
.setStyle(2)
|
|
||||||
.setCustomId('previous')
|
|
||||||
.setDisabled(queue.previousTracks ? !queue.previousTracks[0] : true)
|
|
||||||
)
|
|
||||||
]
|
|
||||||
await dance(client.user.id, channel, embed, components)
|
|
||||||
}, 4000)
|
}, 4000)
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
9082
package-lock.json
generated
9082
package-lock.json
generated
File diff suppressed because it is too large
Load Diff
18
package.json
18
package.json
@@ -12,9 +12,9 @@
|
|||||||
"name": "Zachary Guénot"
|
"name": "Zachary Guénot"
|
||||||
},
|
},
|
||||||
"devDependencies": {
|
"devDependencies": {
|
||||||
"eslint": "^8.39.0",
|
"eslint": "^8.40.0",
|
||||||
"nodemon": "^2.0.22",
|
"nodemon": "^2.0.22",
|
||||||
"prettier": "^2.8.7"
|
"prettier": "^2.8.8"
|
||||||
},
|
},
|
||||||
"eslintConfig": {},
|
"eslintConfig": {},
|
||||||
"dependencies": {
|
"dependencies": {
|
||||||
@@ -22,17 +22,19 @@
|
|||||||
"@discord-player/extractor": "^4.2.1",
|
"@discord-player/extractor": "^4.2.1",
|
||||||
"@discordjs/opus": "^0.9.0",
|
"@discordjs/opus": "^0.9.0",
|
||||||
"@discordjs/voice": "^0.16.0",
|
"@discordjs/voice": "^0.16.0",
|
||||||
"axios": "^1.3.6",
|
"axios": "^1.4.0",
|
||||||
"bufferutil": "^4.0.7",
|
"bufferutil": "^4.0.7",
|
||||||
"discord-player": "^6.2.1",
|
"discord-player": "^6.3.0",
|
||||||
"discord.js": "^14.9.0",
|
"discord.js": "^14.11.0",
|
||||||
"dotenv": "^16.0.3",
|
"dotenv": "^16.0.3",
|
||||||
"iconv-lite": "^0.6.3",
|
"iconv-lite": "^0.6.3",
|
||||||
"libsodium-wrappers": "^0.7.11",
|
"libsodium-wrappers": "^0.7.11",
|
||||||
"npm": "^9.6.5",
|
"mariadb": "^3.1.2",
|
||||||
"opusscript": "^0.0.8",
|
"opusscript": "^0.0.8",
|
||||||
"play-dl": "^1.9.6",
|
"play-dl": "^1.9.6",
|
||||||
"utf-8-validate": "^6.0.3",
|
"prism-media": "^1.3.5",
|
||||||
"zlib-sync": "^0.1.8"
|
"sequelize": "^6.31.1",
|
||||||
|
"sqlite3": "^5.1.6",
|
||||||
|
"utf-8-validate": "^6.0.3"
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|||||||
63
utils/editPlayer.js
Normal file
63
utils/editPlayer.js
Normal file
@@ -0,0 +1,63 @@
|
|||||||
|
const { ActionRowBuilder, ButtonBuilder } = require('discord.js')
|
||||||
|
|
||||||
|
module.exports = async (interaction) => {
|
||||||
|
/*let components = [
|
||||||
|
new ActionRowBuilder().addComponents(
|
||||||
|
interaction.message.components[0].components.forEach(button => {
|
||||||
|
return new ButtonBuilder().setCustomId(button.customId).setLabel(button.label).setStyle(button.style).setDisabled(true)
|
||||||
|
})
|
||||||
|
),
|
||||||
|
new ActionRowBuilder().addComponents(
|
||||||
|
interaction.message.components[1].components.forEach(button => {
|
||||||
|
return new ButtonBuilder().setCustomId(button.customId).setLabel(button.label).setStyle(button.style).setDisabled(true)
|
||||||
|
})
|
||||||
|
)
|
||||||
|
]*/
|
||||||
|
let components = [
|
||||||
|
new ActionRowBuilder().addComponents(
|
||||||
|
new ButtonBuilder()
|
||||||
|
.setLabel(interaction.message.components[0].components[0].label)
|
||||||
|
.setStyle(2)
|
||||||
|
.setCustomId(interaction.message.components[0].components[0].customId)
|
||||||
|
.setDisabled(true),
|
||||||
|
new ButtonBuilder()
|
||||||
|
.setLabel('⏹️')
|
||||||
|
.setStyle(2)
|
||||||
|
.setCustomId('stop')
|
||||||
|
.setDisabled(true),
|
||||||
|
new ButtonBuilder()
|
||||||
|
.setLabel('⏭️')
|
||||||
|
.setStyle(2)
|
||||||
|
.setCustomId('skip')
|
||||||
|
.setDisabled(true),
|
||||||
|
new ButtonBuilder()
|
||||||
|
.setLabel('🔉')
|
||||||
|
.setStyle(2)
|
||||||
|
.setCustomId('volume_down')
|
||||||
|
.setDisabled(true),
|
||||||
|
new ButtonBuilder()
|
||||||
|
.setLabel('🔊')
|
||||||
|
.setStyle(2)
|
||||||
|
.setCustomId('volume_up')
|
||||||
|
.setDisabled(true)
|
||||||
|
),
|
||||||
|
new ActionRowBuilder().addComponents(
|
||||||
|
new ButtonBuilder()
|
||||||
|
.setLabel('🔀')
|
||||||
|
.setStyle(2)
|
||||||
|
.setCustomId('shuffle')
|
||||||
|
.setDisabled(true),
|
||||||
|
new ButtonBuilder()
|
||||||
|
.setLabel('🔁')
|
||||||
|
.setStyle(2)
|
||||||
|
.setCustomId('loop')
|
||||||
|
.setDisabled(true),
|
||||||
|
new ButtonBuilder()
|
||||||
|
.setLabel('⏮️')
|
||||||
|
.setStyle(2)
|
||||||
|
.setCustomId('previous')
|
||||||
|
.setDisabled(true)
|
||||||
|
)
|
||||||
|
]
|
||||||
|
interaction.update({ components, content: 'Chargement...' })
|
||||||
|
}
|
||||||
74
utils/generatePlayer.js
Normal file
74
utils/generatePlayer.js
Normal file
@@ -0,0 +1,74 @@
|
|||||||
|
const { EmbedBuilder, ButtonBuilder, ActionRowBuilder } = require('discord.js')
|
||||||
|
const { useQueue } = require('discord-player')
|
||||||
|
|
||||||
|
module.exports = async (guild) => {
|
||||||
|
let queue = useQueue(guild.id)
|
||||||
|
let embed = new EmbedBuilder().setColor('#ffc370')
|
||||||
|
if (!queue) {
|
||||||
|
embed.setTitle('Aucune session d\'écoute en cours !')
|
||||||
|
return ({ embed, components: null })
|
||||||
|
}
|
||||||
|
let track = queue.currentTrack
|
||||||
|
if (!track) {
|
||||||
|
embed.setTitle('Aucune musique en cours de lecture !')
|
||||||
|
return ({ embed, components: null })
|
||||||
|
}
|
||||||
|
embed.setTitle(track.title)
|
||||||
|
.setAuthor({ name: track.author })
|
||||||
|
.setURL(track.url)
|
||||||
|
.setImage(track.thumbnail)
|
||||||
|
.addFields(
|
||||||
|
{ name: 'Durée', value: track.duration, inline: true },
|
||||||
|
{ name: 'Source', value: track.source === 'youtube' ? 'Youtube' : track.source === 'spotify' ? 'Spotify' : 'Inconnu', inline: true },
|
||||||
|
{ name: 'Volume', value: `${queue.node.volume}%`, inline: true },
|
||||||
|
{ name: queue.node.isPaused() ? 'Progression (en pause)' : 'Progression', value: queue.node.createProgressBar() },
|
||||||
|
{ name: 'Loop', value: queue.repeatMode ? queue.repeatMode === 2 ? "File d'Attente" : "Titre" : "Off", inline: true },
|
||||||
|
{ name: 'Autoplay', value: queue.autoplay ? "On" : "Off", inline: true }
|
||||||
|
)
|
||||||
|
.setDescription(`**Musique suivante :** ${queue.tracks[0] ? queue.tracks[0].title : 'Aucune'}`)
|
||||||
|
.setFooter({ text: `Demandé par ${track.requestedBy.tag}` })
|
||||||
|
|
||||||
|
let components = [
|
||||||
|
new ActionRowBuilder().addComponents(
|
||||||
|
new ButtonBuilder()
|
||||||
|
.setLabel(queue.node.isPaused() ? '▶️' : '⏸️')
|
||||||
|
.setStyle(2)
|
||||||
|
.setCustomId(queue.node.isPaused() ? 'resume' : 'pause'),
|
||||||
|
new ButtonBuilder()
|
||||||
|
.setLabel('⏹️')
|
||||||
|
.setStyle(2)
|
||||||
|
.setCustomId('stop'),
|
||||||
|
new ButtonBuilder()
|
||||||
|
.setLabel('⏭️')
|
||||||
|
.setStyle(2)
|
||||||
|
.setCustomId('skip')
|
||||||
|
.setDisabled(queue.tracks.length !== 0),
|
||||||
|
new ButtonBuilder()
|
||||||
|
.setLabel('🔉')
|
||||||
|
.setStyle(2)
|
||||||
|
.setCustomId('volume_down')
|
||||||
|
.setDisabled(queue.node.volume === 0),
|
||||||
|
new ButtonBuilder()
|
||||||
|
.setLabel('🔊')
|
||||||
|
.setStyle(2)
|
||||||
|
.setCustomId('volume_up')
|
||||||
|
.setDisabled(queue.node.volume === 100)
|
||||||
|
),
|
||||||
|
new ActionRowBuilder().addComponents(
|
||||||
|
new ButtonBuilder()
|
||||||
|
.setLabel('🔀')
|
||||||
|
.setStyle(2)
|
||||||
|
.setCustomId('shuffle'),
|
||||||
|
new ButtonBuilder()
|
||||||
|
.setLabel('🔁')
|
||||||
|
.setStyle(2)
|
||||||
|
.setCustomId('loop'),
|
||||||
|
new ButtonBuilder()
|
||||||
|
.setLabel('⏮️')
|
||||||
|
.setStyle(2)
|
||||||
|
.setCustomId('previous')
|
||||||
|
.setDisabled(queue.previousTracks ? !queue.previousTracks[0] : true)
|
||||||
|
)
|
||||||
|
]
|
||||||
|
return ({ embed, components })
|
||||||
|
}
|
||||||
7
utils/getUptime.js
Normal file
7
utils/getUptime.js
Normal file
@@ -0,0 +1,7 @@
|
|||||||
|
module.exports = function (uptime) {
|
||||||
|
let days = Math.floor(uptime / 86400000)
|
||||||
|
let hours = Math.floor(uptime / 3600000) % 24
|
||||||
|
let minutes = Math.floor(uptime / 60000) % 60
|
||||||
|
let seconds = Math.floor(uptime / 1000) % 60
|
||||||
|
return `${days}J, ${hours}H, ${minutes}M et ${seconds}S`
|
||||||
|
}
|
||||||
10
utils/initSequelize.js
Normal file
10
utils/initSequelize.js
Normal file
@@ -0,0 +1,10 @@
|
|||||||
|
const Sequelize = require('sequelize')
|
||||||
|
require('dotenv').config()
|
||||||
|
|
||||||
|
module.exports = new Sequelize(process.env.SEQUELIZE_DATABASE, process.env.SEQUELIZE_USER, process.env.SEQUELIZE_PASSWORD, {
|
||||||
|
host: process.env.SEQUELIZE_HOST,
|
||||||
|
dialect: process.env.SEQUELIZE_DIALECT,
|
||||||
|
dialectOptions: process.env.SEQUELIZE_DIALECTOPTIONS,
|
||||||
|
logging: process.env.SEQUELIZE_LOGGING === 'true',
|
||||||
|
storage: process.env.SEQUELIZE_STORAGE
|
||||||
|
})
|
||||||
1
utils/playerButtons.js
Normal file
1
utils/playerButtons.js
Normal file
@@ -0,0 +1 @@
|
|||||||
|
module.exports = ['loop', 'pause', 'previous', 'resume', 'shuffle', 'skip', 'stop', 'volume_down', 'volume_up']
|
||||||
Reference in New Issue
Block a user