es.davy.ai

Preguntas y respuestas de programación confiables

¿Tienes una pregunta?

Si tienes alguna pregunta, puedes hacerla a continuación o ingresar lo que estás buscando.

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.

Tags:  , , ,

Answer

  1. Avatar for 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:

    player.on('stateChange', (oldState, newState) => {
      if (newState.status === AudioPlayerStatus.Playing) {
        console.log('Ahora reproduciendo: ' + vdRepro.title);
      }
    });
    

    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í.

Comments are closed.