· 4 years ago · Mar 17, 2021, 06:16 PM
1if(command === 'play') {
2 const voiceChannel = message.member.voice.channel;
3
4 //verificamos que el usuario solicitante este conectado en un canal de voz.
5 if (!voiceChannel) return message.channel.send('¡Necesitas unirte a un canal de voz para reproducir música!');
6
7 const permissions = voiceChannel.permissionsFor(message.client.user);
8
9 //verificamos que el bot tenga permisos de conectar y de hablar en el canal de voz.
10 if (!permissions.has('CONNECT') || !permissions.has('SPEAK')) {
11 return message.channel.send('¡Necesito permisos para unirme y hablar en el canal de voz!');
12 }
13
14 // <-- Capturamos la información de la música a reproducir -->
15
16 var opts = {
17 maxResults: 1, //Maximo de resultados a encontrar
18 key: process.env.KEY, //Necesitas una CLAVE de la API de youtube.
19 type: "video" // Que tipo de resultado a obtener.
20 };
21
22 const songArg = await search(args.join(' '), opts);
23 const songURL = songArg.results[0].link;
24 const songInfo = await ytdl.getInfo(songURL);
25
26 const song = {
27 title: songInfo.title,
28 url: songInfo.video_url,
29 author: message.author.tag
30 };
31
32// <-- Verificamos la lista de canciones de un servidor -->
33
34if (!serverQueue) {
35 // Si NO hay una lista de música.
36 // <-- Creamos nuestra cola de música a reproducir -->
37
38// Creamos el conjunto de datos para nuestra cola de música
39const queueObject = {
40 textChannel: message.channel, //guardamos el canal de texto
41 voiceChannel: voiceChannel, // guardamos el canal de voz
42 connection: null, // un objeto para la conexión
43 songs: [], // creamos la lista de canciones
44 volume: 5, // volumen al iniciar la cola
45 playing: true, // un objeto para validar la cola de música en reproducción.
46};
47
48// <-- Establecer la cola de música -->
49
50// Creando el conjunto de datos para nuestra cola de música
51queue.set(message.guild.id, queueObject);
52
53// Agregamos las canciones al conjunto de datos
54queueObject.songs.push(song);
55
56// <-- Conectar al canal de voz -->
57
58try {
59 // Aquí unimos el bot al canal de voz y guardar nuestra conexión en nuestro objeto.
60 var connection = await voiceChannel.join();
61 queueObject.connection = connection;
62
63 message.channel.send(`Reproduciendo ahora: **${song.title}**`);
64
65 // Llamar a la función de reproducción para comenzar una canción.
66 play(message.guild, queueObject.songs[0]);
67
68} catch (err) {
69
70 // Imprimir el mensaje de error si el bot no puede unirse al chat de voz
71 console.log(err);
72 queue.delete(message.guild.id);
73 return message.channel.send(err);
74
75}
76
77
78}else {
79 // Si HAY una lista de música reproduciendo.
80
81 serverQueue.songs.push(song);
82 console.log(serverQueue.songs);
83 return message.channel.send(`**${song.title}** ha sido añadido a la cola!, __por: ${message.author.tag}__`);
84
85}
86
87function play(guild, song) {
88 const serverQueue = queue.get(guild.id);
89 // verificamos que hay musica en nuestro objeto de lista
90 if (!song) {
91 serverQueue.voiceChannel.leave(); // si no hay mas música en la cola, desconectamos nuestro bot
92 queue.delete(guild.id);
93 return;
94 }
95
96 // <-- Reproducción usando play() -->
97 // <-- Reproducción usando play() -->
98
99 const dispatcher = serverQueue.connection.play(ytdl(song.url))
100 .on('finish', () => {
101 // Elimina la canción terminada de la cola.
102 serverQueue.songs.shift();
103
104 // Llama a la función de reproducción nuevamente con la siguiente canción
105 play(guild, serverQueue.songs[0]);
106 })
107 .on('error', error => {
108 console.error(error);
109 });
110
111 // Configuramos el volumen de la reproducción de la canción
112 dispatcher.setVolumeLogarithmic(serverQueue.volume / 5);
113
114}
115
116
117 }