Création Repo pour mon bot Le Tamiseur

This commit is contained in:
Zachary Guénot
2023-04-23 19:30:04 +02:00
commit a879b38c3e
50 changed files with 7159 additions and 0 deletions

19
commands/music/loop.js Executable file
View File

@@ -0,0 +1,19 @@
const { SlashCommandBuilder } = require('discord.js')
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)")
.setRequired(true)
.setMinValue(0)
.setMaxValue(3)),
async execute(interaction) {
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"}.`)
}
}

13
commands/music/pause.js Executable file
View File

@@ -0,0 +1,13 @@
const { SlashCommandBuilder } = require('discord.js')
const { useQueue } = require("discord-player")
module.exports = {
data: new SlashCommandBuilder()
.setName('pause')
.setDescription('Met en pause la musique.'),
async execute(interaction) {
let queue = useQueue(interaction.guild.id)
queue.node.setPaused(!queue.node.isPaused())
return await interaction.reply('Musique mise en pause !')
}
}

81
commands/music/play.js Executable file
View File

@@ -0,0 +1,81 @@
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()
.setName('play')
.setDescription('Jouer une musique.')
.addStringOption(option => option.setName('recherche').setDescription('Titre de la musique à chercher').setRequired(true).setAutocomplete(true)),
async autocompleteRun(interaction) {
let query = interaction.options.getString('recherche', true)
if (!query) return interaction.respond([])
let player = useMasterPlayer()
const resultsYouTube = await player.search(query, { searchEngine: QueryType.YOUTUBE })
const resultsSpotify = await player.search(query, { searchEngine: QueryType.SPOTIFY_SEARCH })
const tracksYouTube = resultsYouTube.tracks.slice(0, 5).map((t) => ({
name: `YouTube: ${`${t.title} - ${t.author} (${t.duration})`.length > 75 ? `${`${t.title} - ${t.author}`.substring(0, 75)}... (${t.duration})` : `${t.title} - ${t.author} (${t.duration})`}`,
value: t.url
}))
const tracksSpotify = resultsSpotify.tracks.slice(0, 5).map((t) => ({
name: `Spotify: ${`${t.title} - ${t.author} (${t.duration})`.length > 75 ? `${`${t.title} - ${t.author}`.substring(0, 75)}... (${t.duration})` : `${t.title} - ${t.author} (${t.duration})`}`,
value: t.url
}))
const tracks = []
tracksYouTube.forEach((t) => tracks.push({ name: t.name, value: t.value }));
tracksSpotify.forEach((t) => tracks.push({ name: t.name, value: t.value }));
return interaction.respond(tracks)
},
async execute(interaction) {
let voiceChannel = interaction.member.voice.channel
if (!voiceChannel) return await interaction.reply({ content: "T'es pas dans un vocal, idiot !", ephemeral: true })
let botChannel = interaction.guild.members.me.voice.channel
if (botChannel && voiceChannel.id !== botChannel.id) return await interaction.reply({ content: "T'es pas dans mon vocal !", ephemeral: true })
await interaction.deferReply()
let query = interaction.options.getString('recherche', true)
let player = useMasterPlayer()
let queue = useQueue(interaction.guild.id)
if (!queue) {
queue = player.nodes.create(interaction.guild, {
metadata: {
channel: interaction.channel,
client: interaction.guild.members.me,
requestedBy: interaction.user
},
selfDeaf: true,
volume: 20,
leaveOnEmpty: true,
leaveOnEmptyCooldown: 300000,
leaveOnEnd: true,
leaveOnEndCooldown: 300000,
skipOnNoStream: true
})
}
try { if (!queue.connection) await queue.connect(voiceChannel) }
catch (error) { console.error(error); return await interaction.followUp(`Y'a eu un problème, <@223831938346123275> ! (${error.message})`) }
let result = await player.search(query, { requestedBy: interaction.user })
if (!result.hasTracks()) return await interaction.followUp(`Aucune musique trouvée pour **${query}** !`)
let track = result.tracks[0]
let entry = queue.tasksQueue.acquire()
await entry.getTask()
queue.addTrack(track)
try {
if (!queue.isPlaying()) await queue.node.play()
track.source = track.source === 'youtube' ? 'Youtube' : track.source === 'spotify' ? 'Spotify' : 'Inconnu'
return await interaction.followUp(`Chargement de la musique **${track.title}** de **${track.author}** sur **${track.source}**...`)
} catch (error) { console.error(error); return await interaction.followUp(`Y'a eu un problème, <@223831938346123275> ! (${error.message})`) }
finally { queue.tasksQueue.release() }
}
}

49
commands/music/player.js Executable file
View File

@@ -0,0 +1,49 @@
const { SlashCommandBuilder, EmbedBuilder } = require('discord.js')
const { useQueue } = require("discord-player")
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] })
}
}

13
commands/music/previous.js Executable file
View File

@@ -0,0 +1,13 @@
const { SlashCommandBuilder } = require('discord.js')
const { useHistory } = require("discord-player")
module.exports = {
data: new SlashCommandBuilder()
.setName('previous')
.setDescription('Joue la musique précédente.'),
async execute(interaction) {
let history = useHistory(interaction.guild.id)
await history.previous()
return await interaction.reply('Musique précédente jouée !')
}
}

13
commands/music/resume.js Executable file
View File

@@ -0,0 +1,13 @@
const { SlashCommandBuilder } = require('discord.js')
const { useQueue } = require("discord-player")
module.exports = {
data: new SlashCommandBuilder()
.setName('resume')
.setDescription('Reprendre la musique.'),
async execute(interaction) {
let queue = useQueue(interaction.guild.id)
queue.node.setPaused(!queue.node.isPaused())
return await interaction.reply('Musique reprise !')
}
}

13
commands/music/shuffle.js Executable file
View File

@@ -0,0 +1,13 @@
const { SlashCommandBuilder } = require('discord.js')
const { useQueue } = require("discord-player")
module.exports = {
data: new SlashCommandBuilder()
.setName('shuffle')
.setDescription('Mélange la file d\'attente.'),
async execute(interaction) {
let queue = useQueue(interaction.guild.id)
queue.tracks.shuffle()
return await interaction.reply('File d\'attente mélangée !')
}
}

13
commands/music/skip.js Executable file
View File

@@ -0,0 +1,13 @@
const { SlashCommandBuilder } = require('discord.js')
const { useQueue } = require("discord-player")
module.exports = {
data: new SlashCommandBuilder()
.setName('skip')
.setDescription('Passer la musique en cours.'),
async execute(interaction) {
let queue = useQueue(interaction.guild.id)
queue.node.skip()
return await interaction.reply('Musique passée !')
}
}

13
commands/music/stop.js Executable file
View File

@@ -0,0 +1,13 @@
const { SlashCommandBuilder } = require('discord.js')
const { useQueue } = require("discord-player")
module.exports = {
data: new SlashCommandBuilder()
.setName('stop')
.setDescription('Arrêter la musique.'),
async execute(interaction) {
let queue = useQueue(interaction.guild.id)
queue.delete()
return await interaction.reply('Musique arrêtée !')
}
}

19
commands/music/volume.js Executable file
View File

@@ -0,0 +1,19 @@
const { SlashCommandBuilder } = require('discord.js')
const { useQueue } = require("discord-player")
module.exports = {
data: new SlashCommandBuilder()
.setName('volume')
.setDescription('Modifie le volume de la musique.')
.addIntegerOption(option => option.setName('volume')
.setDescription('Le volume à mettre (%)')
.setRequired(true)
.setMinValue(1)
.setMaxValue(100)),
async execute(interaction) {
let volume = interaction.options.getInteger('volume')
let queue = useQueue(interaction.guild.id)
queue.node.setVolume(volume)
return await interaction.reply(`Volume modifié à ${volume}% !`)
}
}