Maj pkgs + fix dep des buttons / commands + Ajout fichiers utils
This commit is contained in:
@@ -4,11 +4,7 @@
|
||||
**/.gitignore
|
||||
**/.vscode
|
||||
**/docker-compose*
|
||||
**/compose*
|
||||
**/Dockerfile*
|
||||
**/node_modules
|
||||
**/npm-debug.log
|
||||
**/obj
|
||||
**/cracks
|
||||
LICENSE
|
||||
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'))
|
||||
for (const file of eventFiles) {
|
||||
let event = require(`./events/${file}`)
|
||||
if (event.once) client.once(event.name, (...args) => {
|
||||
//console.log(`\u001b[1;35m Event '${event.name}' executed.`)
|
||||
event.execute(...args)
|
||||
})
|
||||
else client.on(event.name, (...args) => {
|
||||
//console.log(`\u001b[1;35m Event '${event.name}' executed.`)
|
||||
event.execute(...args)
|
||||
})
|
||||
if (event.once) client.once(event.name, (...args) => { event.execute(...args) })
|
||||
else client.on(event.name, (...args) => { event.execute(...args) })
|
||||
}
|
||||
|
||||
// COMMANDS HANDLING
|
||||
@@ -39,11 +33,7 @@ for (folder of commandFolders) {
|
||||
// COMMANDS REGISTERING
|
||||
const rest = new REST({ version: '10' }).setToken(process.env.DISCORD_TOKEN);
|
||||
(async () => {
|
||||
//console.log(`\u001b[1;35m Started refreshing ${commands.length} application (/) commands.`)
|
||||
try {
|
||||
let data = await rest.put(Routes.applicationCommands('1065047326860783636'), { body: commands })
|
||||
//console.log(`\u001b[1;35m Successfully reloaded ${data.length} application (/) commands.`)
|
||||
}
|
||||
try { await rest.put(Routes.applicationCommands(process.env.DISCORD_APP_ID), { body: commands }) }
|
||||
catch (error) { console.error(error) }
|
||||
})()
|
||||
|
||||
@@ -68,7 +58,6 @@ for (const file of eventPlayerFiles) {
|
||||
if (['debug'].includes(event.name)) continue
|
||||
player.events.on(event.name, (...args) => event.execute(...args))
|
||||
}
|
||||
//player.on('debug', async (message) => { console.log(`General player debug event: ${message}`) })
|
||||
|
||||
// LAUNCH
|
||||
client.login()
|
||||
@@ -1,4 +1,4 @@
|
||||
const { useQueue } = require("discord-player")
|
||||
const { useQueue } = require('discord-player')
|
||||
|
||||
module.exports = {
|
||||
id: 'loop',
|
||||
@@ -6,7 +6,7 @@ module.exports = {
|
||||
let queue = useQueue(interaction.guild.id)
|
||||
let loop = queue.repeatMode === 0 ? 1 : queue.repeatMode === 1 ? 2 : queue.repeatMode === 2 ? 3 : 0
|
||||
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)
|
||||
}
|
||||
}
|
||||
@@ -1,4 +1,4 @@
|
||||
const { useQueue } = require("discord-player")
|
||||
const { useQueue } = require('discord-player')
|
||||
|
||||
module.exports = {
|
||||
id: 'pause',
|
||||
|
||||
@@ -1,4 +1,4 @@
|
||||
const { useHistory } = require("discord-player")
|
||||
const { useHistory } = require('discord-player')
|
||||
|
||||
module.exports = {
|
||||
id: 'previous',
|
||||
|
||||
@@ -1,4 +1,4 @@
|
||||
const { useQueue } = require("discord-player")
|
||||
const { useQueue } = require('discord-player')
|
||||
|
||||
module.exports = {
|
||||
id: 'resume',
|
||||
|
||||
@@ -1,4 +1,4 @@
|
||||
const { useQueue } = require("discord-player")
|
||||
const { useQueue } = require('discord-player')
|
||||
|
||||
module.exports = {
|
||||
id: 'shuffle',
|
||||
|
||||
@@ -1,4 +1,4 @@
|
||||
const { useQueue } = require("discord-player")
|
||||
const { useQueue } = require('discord-player')
|
||||
|
||||
module.exports = {
|
||||
id: 'skip',
|
||||
|
||||
@@ -1,4 +1,4 @@
|
||||
const { useQueue } = require("discord-player")
|
||||
const { useQueue } = require('discord-player')
|
||||
|
||||
module.exports = {
|
||||
id: 'stop',
|
||||
|
||||
@@ -1,12 +1,17 @@
|
||||
const { useQueue } = require("discord-player")
|
||||
const { useQueue } = require('discord-player')
|
||||
|
||||
module.exports = {
|
||||
id: 'volume_down',
|
||||
async execute(interaction) {
|
||||
let queue = useQueue(interaction.guild.id)
|
||||
let volume = queue.node.volume - 10
|
||||
queue.node.setVolume(volume)
|
||||
await interaction.reply({ content: `🔉 | Volume modifié à ${volume}% !`, ephemeral: true })
|
||||
if (!queue) await interaction.reply({ content: 'Aucune musique en cours de lecture.', ephemeral: true })
|
||||
else {
|
||||
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)
|
||||
}
|
||||
}
|
||||
@@ -1,14 +1,16 @@
|
||||
const { useQueue } = require("discord-player")
|
||||
const { useQueue } = require('discord-player')
|
||||
|
||||
module.exports = {
|
||||
id: 'volume_up',
|
||||
async execute(interaction) {
|
||||
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 {
|
||||
let volume = queue.node.volume + 10
|
||||
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)
|
||||
}
|
||||
|
||||
@@ -1,12 +1,12 @@
|
||||
const { SlashCommandBuilder } = require('discord.js')
|
||||
const { useQueue } = require("discord-player")
|
||||
const { useQueue } = require('discord-player')
|
||||
|
||||
module.exports = {
|
||||
data: new SlashCommandBuilder()
|
||||
.setName('loop')
|
||||
.setDescription('Boucler la musique en cours de lecture.')
|
||||
.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)
|
||||
.setMinValue(0)
|
||||
.setMaxValue(3)),
|
||||
@@ -14,6 +14,6 @@ module.exports = {
|
||||
let loop = interaction.options.getInteger('loop')
|
||||
let queue = useQueue(interaction.guild.id)
|
||||
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 { useQueue } = require("discord-player")
|
||||
const { useQueue } = require('discord-player')
|
||||
|
||||
module.exports = {
|
||||
data: new SlashCommandBuilder()
|
||||
|
||||
@@ -1,6 +1,5 @@
|
||||
const { SlashCommandBuilder } = require('discord.js')
|
||||
const { useMasterPlayer, useQueue, QueryType } = require('discord-player')
|
||||
const reduceString = (str, length) => str.length > length ? str.substring(0, length - 3) + "..." : str
|
||||
|
||||
module.exports = {
|
||||
data: new SlashCommandBuilder()
|
||||
|
||||
@@ -1,49 +1,13 @@
|
||||
const { SlashCommandBuilder, EmbedBuilder } = require('discord.js')
|
||||
const { useQueue } = require("discord-player")
|
||||
const { SlashCommandBuilder } = require('discord.js')
|
||||
const generatePlayer = require('../../utils/generatePlayer.js')
|
||||
|
||||
module.exports = {
|
||||
data: new SlashCommandBuilder()
|
||||
.setName('player')
|
||||
.setDescription('Afficher une interface de contrôle de la musique.'),
|
||||
async execute(interaction) {
|
||||
let queue = useQueue(interaction.guild.id)
|
||||
if (!queue) return await interaction.reply('Aucune session d\'écoute en cours !')
|
||||
let track = queue.currentTrack
|
||||
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] })
|
||||
let { embed, components } = await generatePlayer(interaction.guild)
|
||||
if (!components) return await interaction.reply({ embeds: [embed] })
|
||||
else return await interaction.reply({ embeds: [embed], components })
|
||||
}
|
||||
}
|
||||
@@ -1,5 +1,5 @@
|
||||
const { SlashCommandBuilder } = require('discord.js')
|
||||
const { useHistory } = require("discord-player")
|
||||
const { useHistory } = require('discord-player')
|
||||
|
||||
module.exports = {
|
||||
data: new SlashCommandBuilder()
|
||||
|
||||
@@ -1,5 +1,5 @@
|
||||
const { SlashCommandBuilder } = require('discord.js')
|
||||
const { useQueue } = require("discord-player")
|
||||
const { useQueue } = require('discord-player')
|
||||
|
||||
module.exports = {
|
||||
data: new SlashCommandBuilder()
|
||||
|
||||
@@ -1,5 +1,5 @@
|
||||
const { SlashCommandBuilder } = require('discord.js')
|
||||
const { useQueue } = require("discord-player")
|
||||
const { useQueue } = require('discord-player')
|
||||
|
||||
module.exports = {
|
||||
data: new SlashCommandBuilder()
|
||||
|
||||
@@ -1,5 +1,5 @@
|
||||
const { SlashCommandBuilder } = require('discord.js')
|
||||
const { useQueue } = require("discord-player")
|
||||
const { useQueue } = require('discord-player')
|
||||
|
||||
module.exports = {
|
||||
data: new SlashCommandBuilder()
|
||||
|
||||
@@ -1,5 +1,5 @@
|
||||
const { SlashCommandBuilder } = require('discord.js')
|
||||
const { useQueue } = require("discord-player")
|
||||
const { useQueue } = require('discord-player')
|
||||
|
||||
module.exports = {
|
||||
data: new SlashCommandBuilder()
|
||||
|
||||
@@ -1,5 +1,5 @@
|
||||
const { SlashCommandBuilder } = require('discord.js')
|
||||
const { useQueue } = require("discord-player")
|
||||
const { useQueue } = require('discord-player')
|
||||
|
||||
module.exports = {
|
||||
data: new SlashCommandBuilder()
|
||||
|
||||
@@ -3,6 +3,7 @@ const { Events } = require('discord.js')
|
||||
module.exports = {
|
||||
name: Events.GuildMemberAdd,
|
||||
async execute(member) {
|
||||
if (member.guild.id !== '1086577543651524699') return
|
||||
member.guild.members.fetch().then(() => {
|
||||
var i = 0
|
||||
member.guild.members.cache.forEach(async member => { if (!member.user.bot) i++ })
|
||||
|
||||
@@ -3,6 +3,7 @@ const { Events } = require('discord.js')
|
||||
module.exports = {
|
||||
name: Events.GuildMemberRemove,
|
||||
async execute(member) {
|
||||
if (member.guild.id !== '1086577543651524699') return
|
||||
member.guild.members.fetch().then(() => {
|
||||
var i = 0
|
||||
member.guild.members.cache.forEach(async member => { if (!member.user.bot) i++ })
|
||||
|
||||
@@ -1,34 +1,42 @@
|
||||
const { Events } = require('discord.js')
|
||||
const editPlayer = require('../utils/editPlayer.js')
|
||||
const playerButtons = require('../utils/playerButtons.js')
|
||||
|
||||
module.exports = {
|
||||
name: Events.InteractionCreate,
|
||||
async execute(interaction) {
|
||||
if (interaction.isButton()) {
|
||||
let button = interaction.client.buttons.get(interaction.customId)
|
||||
if (!button) return console.error(`No button id matching ${interaction.customId} was found.`)
|
||||
if (!interaction.isAutocomplete() && !interaction.isChatInputCommand() && !interaction.isButton()) return console.error(`Interaction ${interaction.commandName} is not a command.`)
|
||||
|
||||
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}`)
|
||||
|
||||
try { await command.autocompleteRun(interaction) }
|
||||
try { await autoCompleteRun.autocompleteRun(interaction) }
|
||||
catch (error) { console.error(`Error autocompleting ${interaction.commandName}:`, error) }
|
||||
}
|
||||
|
||||
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}`)
|
||||
|
||||
try { await command.execute(interaction) }
|
||||
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 { useQueue } = require("discord-player")
|
||||
const { Events } = require('discord.js')
|
||||
//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) {
|
||||
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)) {
|
||||
await channel.bulkDelete(messages)
|
||||
return await channel.send({ embeds: [embed] })
|
||||
} else {
|
||||
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`
|
||||
} else await botMessage.edit({ embeds: [embed], components })
|
||||
}
|
||||
|
||||
module.exports = {
|
||||
@@ -25,75 +19,42 @@ module.exports = {
|
||||
once: true,
|
||||
execute(client) {
|
||||
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()
|
||||
.setColor('#ffc370')
|
||||
.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: `Uptime: ${getUptime(client.uptime)} / 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)
|
||||
)
|
||||
]
|
||||
await dance(client.user.id, channel, embed, components)
|
||||
//try {
|
||||
// sequelize.authenticate()
|
||||
// console.log('Connection has been established successfully.')
|
||||
//} catch (error) { console.error('Unable to connect to the database:', error) }
|
||||
|
||||
var interval = setInterval(async () => {
|
||||
//client.guilds.cache.each(async guild => {
|
||||
//const Data = sequelize.define(guild.id, {
|
||||
// playerChannelId: DataTypes.STRING
|
||||
//})
|
||||
//await sequelize.sync({ force: true })
|
||||
|
||||
//if (!Data.playerChannelId) {
|
||||
// clearInterval(interval)
|
||||
// return console.log(`\u001b[1;31m Aucun channel inscrit dans la base, veuillez utiliser la commande \`/setchannel\` !`)
|
||||
//}
|
||||
//let channel = client.channels.cache.get(Data.playerChannelId)
|
||||
|
||||
let guild = client.guilds.cache.get(process.env.DISCORD_GUILD_ID)
|
||||
let channel = client.channels.cache.get(process.env.DISCORD_PLAYERCHANNEL_ID)
|
||||
if (!channel) {
|
||||
clearInterval(interval)
|
||||
return console.log(`\u001b[1;31m Error: Aucun channel trouvé avec l'id \`${process.env.DISCORD_PLAYERCHANNEL_ID}\`, veuillez utiliser la commande \`/setchannel\` !`)
|
||||
}
|
||||
|
||||
let { embed, components } = await generatePlayer(guild)
|
||||
|
||||
if (components) {
|
||||
embed.setFooter({ text: `Uptime: ${getUptime(client.uptime)} / ${embed.data.footer.text}` })
|
||||
await dance(client.user.id, channel, embed, components)
|
||||
} else {
|
||||
embed.setFooter({ text: `Uptime: ${getUptime(client.uptime)}` })
|
||||
await dance(client.user.id, channel, embed)
|
||||
}
|
||||
//})
|
||||
}, 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"
|
||||
},
|
||||
"devDependencies": {
|
||||
"eslint": "^8.39.0",
|
||||
"eslint": "^8.40.0",
|
||||
"nodemon": "^2.0.22",
|
||||
"prettier": "^2.8.7"
|
||||
"prettier": "^2.8.8"
|
||||
},
|
||||
"eslintConfig": {},
|
||||
"dependencies": {
|
||||
@@ -22,17 +22,19 @@
|
||||
"@discord-player/extractor": "^4.2.1",
|
||||
"@discordjs/opus": "^0.9.0",
|
||||
"@discordjs/voice": "^0.16.0",
|
||||
"axios": "^1.3.6",
|
||||
"axios": "^1.4.0",
|
||||
"bufferutil": "^4.0.7",
|
||||
"discord-player": "^6.2.1",
|
||||
"discord.js": "^14.9.0",
|
||||
"discord-player": "^6.3.0",
|
||||
"discord.js": "^14.11.0",
|
||||
"dotenv": "^16.0.3",
|
||||
"iconv-lite": "^0.6.3",
|
||||
"libsodium-wrappers": "^0.7.11",
|
||||
"npm": "^9.6.5",
|
||||
"mariadb": "^3.1.2",
|
||||
"opusscript": "^0.0.8",
|
||||
"play-dl": "^1.9.6",
|
||||
"utf-8-validate": "^6.0.3",
|
||||
"zlib-sync": "^0.1.8"
|
||||
"prism-media": "^1.3.5",
|
||||
"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