Bonjour,

Voilà, je rencontre un petit problème avec mon code.

Ce que je fais

Décrivez ici votre code ou ce que vous cherchez à faire

Play.js :

const Command = require('./Command')
const fs = require('fs')

module.exports = class Play extends Command {

    static match (message) {
        return message.content.startsWith('!play')
    }

    static action (message) {

        let voiceChannel = message.guild.channels.filter( function (channel) {
            return channel.type === 'voice'
        }).last()

        voiceChannel.join()
            .then(function (connection) {
                fs.readdir('./music', function(err, items) {
                    for (let i = 0; i < items.length; i++) {
                        const dispatcher = connection.playFile('./music/' + items[i])
                    }
                })
            }).catch(console.error)
    }
}

Ce que je veux

Comme indiqué dans le titre, je veux que ma boucle for puisse lire toutes les musiques de mon dossier "music".

Ce que j'obtiens

Mais lorsque je fais ma commande !play, il ne lis que la premiere musique puis ne lis pas les autres. Merci d'avance pour l'aide que vous m'apporterez.

Cordialement

1 réponse


Tu dois utiliser l'evenement end.
Exemple avec la lecture de vidéo youtube:

              .playStream(stream)
                    .on('end', function () {
                connection.disconnect()
              })

Au lieu de lancer connection.disconnect(), lance une function qui li ton tableau contenant les musiques, et tu réduit ce tableau au fur et à mesure jusqu'a ce qu'il est vide pour ensuite disconnect().

@Grafikart a donné un exemple dans sa vidéo d'ailleurs.