Création Repo pour mon bot Le Tamiseur
This commit is contained in:
19
commands/music/loop.js
Executable file
19
commands/music/loop.js
Executable 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
13
commands/music/pause.js
Executable 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
81
commands/music/play.js
Executable 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
49
commands/music/player.js
Executable 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
13
commands/music/previous.js
Executable 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
13
commands/music/resume.js
Executable 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
13
commands/music/shuffle.js
Executable 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
13
commands/music/skip.js
Executable 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
13
commands/music/stop.js
Executable 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
19
commands/music/volume.js
Executable 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}% !`)
|
||||
}
|
||||
}
|
||||
Reference in New Issue
Block a user