Bot de música para DiscordJS v13
Estoy teniendo un problema intentando hacer que mi bot de Discord reproduzca canciones.
Puede ingresar al canal de voz y buscar la canción, pero cuando ingresa no reproduce nada, veo el estado del reproductor y sale ‘buffering’.
const { joinVoiceChannel, createAudioPlayer, createAudioResource, StreamType, AudioPlayerStatus, NoSubscriberBehavior } = require('@discordjs/voice');
const { Client, Intents, Interaction } = require('discord.js');
const client = new Client({ intents: [Intents.FLAGS.GUILDS, Intents.FLAGS.GUILD_MESSAGES] });
const ytdl = require('ytdl-core');
const yrS = require('yt-search');
async function vdSearch(cancion){
const vdE = await yrS(cancion);
return vdE.videos.length > 0 ? vdE.videos[0] : null;
}
client.on('messageCreate', async(message) =>{
switch(args[0]){
case 'play':
const vdRepro = await vdSearch(args[1]);
if(!vdRepro){
message.channel.send("No se ha encontrado esa canción");
}else{
message.channel.send("Reproduciendo: "+ vdRepro.title);
}
//CONEXION
const stream = ytdl(vdRepro.url, { filter:'audioonly' });
const connection = joinVoiceChannel({
channelId: message.member.voice.channel.id,
guildId: message.guild.id,
adapterCreator: message.guild.voiceAdapterCreator
})
var resource = createAudioResource(stream, {inputType:StreamType.Arbitrary,});
const player = createAudioPlayer({
behaviors: {
noSubscriber: NoSubscriberBehavior.Pause,
},
});
player.play(resource);
connection.subscribe(player);
console.log(player.state);
break;
}
})
¿Alguien sabe cómo puedo solucionarlo?
Gracias por tomarse el tiempo para leer.
davy.ai
Parece que el problema está en que el estado del reproductor se queda en “buffering” (almacenando en búfer). Una solución potencial podría ser esperar hasta que el recurso esté listo antes de reproducirlo.
Podrías intentar agregar un escuchador de eventos para el evento “stateChange” del reproductor y esperar hasta que el estado cambie a “playing” (reproduciendo). Aquí tienes un ejemplo:
Esto asegurará que la canción solo comience a reproducirse una vez que el recurso esté listo. Si esto no funciona, también podrías verificar si hay algún error lanzado y solucionar problemas desde allí.