-
Notifications
You must be signed in to change notification settings - Fork 0
/
Copy pathindex.js
196 lines (172 loc) · 7.34 KB
/
index.js
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
145
146
147
148
149
150
151
152
153
154
155
156
157
158
159
160
161
162
163
164
165
166
167
168
169
170
171
172
173
174
175
176
177
178
179
180
181
182
183
184
185
186
187
188
189
190
191
192
193
194
195
const Discord = require("discord.js");
const {prefix, token} = require("./config.json");
const ytdl = require("ytdl-core");
const client = new Discord.Client();
const queue = new Map();
client.on("ready", () =>{
console.log(`Connécté en tant que ${client.user.tag}!`);
client.user.setStatus("available");
client.user.setPresence({
game: {
name: "Chat",
type: "Listening",
url: "https://google.com"
}
});
});
client.once("reconnecting", () => {
console.log("Reconnecting!");
});
client.once("disconnect", () => {
console.log("Disconnect!");
});
client.on("message", async message => {
if (message.author.bot) {
return;
}
if (!message.content.startsWith(prefix)) {
return;
}
const serverQueue = queue.get(message.guild.id);
if (message.content.startsWith(`${prefix}play`)) {
execute(message, serverQueue); // On appel execute qui soit initialise et lance la musique soit ajoute à la queue la musique
return;
}
else if (message.content.startsWith(`${prefix}skip`)) {
skip(message, serverQueue); // Permettra de passer à la musique suivante
return;
}
else if (message.content.startsWith(`${prefix}stop`)) {
stop(message, serverQueue); // Permettra de stopper la lecture
return;
}
else if (message.content.startsWith(`${prefix}help`)) {
help(message, serverQueue); // Permettra de voir le menu help
return;
}
else {
message.channel.send("Veuillez entrer une commade valide");
}
});
async function execute(message, serverQueue) {
const args = message.content.split(" "); // On récupère les arguments dans le message pour la suite
const voiceChannel = message.member.voice.channel;
if (!voiceChannel) // Si l'utilisateur n'est pas dans un salon vocal
{
return message.channel.send(
"Vous devez être dans un salon vocal!"
);
}
const permissions = voiceChannel.permissionsFor(message.client.user); // On récupère les permissions du bot pour le salon vocal
if (!permissions.has("CONNECT") || !permissions.has("SPEAK")) { // Si le bot n'a pas les permissions
return message.channel.send(
"J'ai besoin des permissions pour rejoindre le salon et pour y jouer de la musique!"
);
}
const songInfo = await ytdl.getInfo(args[1]);
const song = {
title: songInfo.videoDetails.title,
url : songInfo.videoDetails.video_url,
};
if (!serverQueue) {
const queueConstruct = {
textChannel : message.channel,
voiceChannel: voiceChannel,
connection : null,
songs : [],
volume : 1,
playing : true,
};
// On ajoute la queue du serveur dans la queue globale:
queue.set(message.guild.id, queueConstruct);
// On y ajoute la musique
queueConstruct.songs.push(song);
try {
// On connecte le bot au salon vocal et on sauvegarde l'objet connection
var connection = await voiceChannel.join();
queueConstruct.connection = connection;
// On lance la musique
play(message.guild, queueConstruct.songs[0]);
}
catch (err) {
//On affiche les messages d'erreur si le bot ne réussi pas à se connecter, on supprime également la queue de lecture
console.log(err);
queue.delete(message.guild.id);
return message.channel.send(err);
}
}
else {
serverQueue.songs.push(song);
console.log(serverQueue.songs);
return message.channel.send(`${song.title} a été ajoutée à la file d'attente!`);
}
}
function skip(message, serverQueue) {
if (!message.member.voice.channel) // on vérifie que l'utilisateur est bien dans un salon vocal pour skip
{
return message.channel.send(
"Vous devez être dans un salon vocal pour passer une musique!"
);
}
if (!serverQueue) // On vérifie si une musique est en cours
{
return message.channel.send("Aucune lecture de musique en cours !");
}
serverQueue.connection.dispatcher.end(); // On termine la musique courante, ce qui lance la suivante grâce à l'écoute d'événement
// finish
}
function stop(message, serverQueue) {
if (!message.member.voice.channel) // on vérifie que l'utilisateur est bien dans un salon vocal pour skip
{
return message.channel.send(
"Vous devez être dans un salon vocal pour stopper la lecture!"
);
}
if (!serverQueue) // On vérifie si une musique est en cours
{
return message.channel.send("Aucune lecture de musique en cours !");
}
serverQueue.songs = [];
serverQueue.connection.dispatcher.end();
}
function play(guild, song) {
console.log(song);
const serverQueue = queue.get(guild.id); // On récupère la queue de lecture
if (!song) { // Si la musique que l'utilisateur veux lancer n'existe pas on annule tout et on supprime la queue de lecture
serverQueue.voiceChannel.leave();
queue.delete(guild.id);
return;
}
// On lance la musique
const dispatcher = serverQueue.connection
.play(ytdl(song.url, { filter: 'audioonly' }))
.on("finish", () => { // On écoute l'événement de fin de musique
serverQueue.songs.shift(); // On passe à la musique suivante quand la courante se termine
play(guild, serverQueue.songs[0]);
})
.on("error", error => console.error(error));
dispatcher.setVolume(1); // On définie le volume
serverQueue.textChannel.send(`Démarrage de la musique: **${song.title}**`);
}
function help(message, serverQueue) {
const embed = new Discord.MessageEmbed()
.setTitle("Page d'aide")
.setURL("https://rge.cf")
.setAuthor("Reloaded Group Entertainment")
.setDescription("Obtenez de l'aide à propos des commandes du bot discord (prefix: r! ).")
.setColor("#FF4000")
.setThumbnail("https://i.imgur.com/muhAIE9.png")
.setFooter("Prefix du bot: !r")
.addFields({
name: "Musique",
value: "» r!play • Jouer une musique à partir d'un lien Youtube",
inline: true
}, {
name: "Informations",
value: "» r!partners • Obtenir des informations à propos de nos partenaires",
inline: true
})
.setTimestamp();
message.channel.send(embed);
}
client.login("Token");