Bonjour,

Voila je rencontre un petit problème avec mon code.

Ce que je fais

Alors je suis actuellement en train de tenter de faire un bot discord ce qui fonctionne ... Maintenant je me penche sur la musique que peux jouer le bot. J'inclus les commandes "play", "stop", "skip", "join", "leave".

Ou est le problème ?

Mon problème viens de la commande "skip".
En effet quand je fais play le bot crée automatiquement une file d'attente des musiques et j'aimerai que quand je fasse la commande "skip" bah il passe a la suivante mais il m'affiche une erreur avec le "dispatcher". Ci-dessous les codes des commandes "play" et "skip" pour que ce soit plus parlant.

(J'ai raccouricis le code sur les parties qui n'était pas utiles par [...] )

play.js

const commando = require('discord.js-commando');
const ytdl = require('ytdl-core');

const queue = new Map();

//[...]

    }
    async run(message, args){
        // Vérification
        const serverQueue = queue.get(message.guild.id);
        const voiceChannel = message.member.voiceChannel;

        //[...]
        const songInfo = await ytdl.getInfo(args);

        const song = {
            title: songInfo.title,
            url: songInfo.video_url,
        };

        if (!serverQueue) {
            const queueContruct = {
                textChannel: message.channel,
                voiceChannel: voiceChannel,
                connection: null,
                songs: [],
                volume: 5,
                playing: true,
            };

            queue.set(message.guild.id, queueContruct);

            queueContruct.songs.push(song);

            try {
                var connection = await voiceChannel.join();
                queueContruct.connection = connection;
                play(message.guild, queueContruct.songs[0]);
            } catch (err) {
                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} has been added to the queue!`);
        }
    }

}

function play(guild, song) {

    const serverQueue = queue.get(guild.id);

    if (!song) {
        serverQueue.voiceChannel.leave();
        queue.delete(guild.id);
        return;
    }

    const dispatcher = serverQueue.connection.playStream(ytdl(song.url))

        .on('end', () => {
            console.log('Music ended!');
            serverQueue.songs.shift();
            play(guild, serverQueue.songs[0]);
        })
        .on('error', error => {
            console.error(error);
        });
    dispatcher.setVolumeLogarithmic(serverQueue.volume / 5);
}

module.exports = PlayCommand;

skip.js

const commando = require('discord.js-commando');
const serverQueue = require('./play.js');

//[...]

    async run(message, args){

    if (!message.member.voiceChannel) return message.channel.send('You have to be in a voice channel to stop the music!');
    if (!serverQueue) return message.channel.send('There is no song that I could skip!');
    serverQueue.connection.dispatcher.end();

    }
}

module.exports = SkipCommand;

Ce que j'obtiens

Voici l'erreur que j'obtient ...
"Cannot read property 'dispatcher' of undefined"

Je sais que il n'est pas déclaré dans la deuxième partie mais justement comment faire en sorte de pouvoir le réutiliser dans mon deuxième fichier ? J'avoue que je sèche ...

Je suis désolé si je m'exprime mal je savais pas comment dire correctement tout ca :(

Je vous remercie par avance pour vos réponses
Cordialement
Freezlex

Aucune réponse