Проверка массива на предмет пустоты сразу после сдвига - PullRequest
0 голосов
/ 02 августа 2020

Итак, я продвигаюсь к своему боту musi c. В настоящее время он перемешивает список воспроизведения и воспроизводит каждую песню в списке воспроизведения один раз. Следующим шагом для меня будет заставить его перетасовать список воспроизведения после того, как он проиграет каждую песню, и снова go (позже я сделаю уловку, чтобы «остановить» его, используя команду). Теоретически - все, что мне нужно сделать, это добавить проверку, что «если массив содержит запись в позиции 0, воспроизвести эту следующую песню», в противном случае «если массив был пуст, снова перетасовать список воспроизведения и ЗАТЕМ воспроизвести следующую song '

К сожалению, даже если следующая песня не определена - проверка не выполняется, и после первого прогона плейлиста он начинает рассылать спам песни, которые не определены. Я пробовал несколько способов проверить это. Проверка того, не определена ли запись в массиве, проверка того, не определена ли длина массива, проверка того, была ли запись в исходном списке песен или нет - та же проблема для всех из них.

function PlaySong(connection, channel, SongToPlay) {
        console.log('Now playing '+SongToPlay[0]+'.'); //announce the song
        message.channel.send('Now playing '+SongToPlay[0]+'.');
        const dispatcher = connection.play('./Scythe Digital Edition - Soundtrack/'+SongToPlay[0]+'.mp3'); //play the song
        dispatcher.setVolume(0.1); //at this volume
        dispatcher.on("finish", () => { //when the song concludes
        SongToPlay.shift(); //remove that song from the list of songs to play
            if (!isNullOrUndefined(SongToPlay[0]) || SongToPlay[0] !== '') { //if the list of songs is not empty
                PlaySong(connection, channel, SongToPlay); //repeat the above for the next song
            }
            else { //otherwise if it was empty
                SongToPlay = shuffle(testbells); //shuffle the playlist and repopulate the list of songs to play
                PlaySong(connection, channel, SongToPlay); //then repeat the above for the next song
                //channel.leave();
                //return;
            }
        });
    }

1 Ответ

1 голос
/ 02 августа 2020

Это немного сложно, не видя весь ваш код, поэтому я сделал простую версию, которая должна подойти - она ​​просто печатает, а не воспроизводит что-либо или отправляет сообщения, но это должна быть разумная структура для вас. 1003 * Простая функция перемешивания ссылается на этот вопрос: Как рандомизировать (перемешать) массив JavaScript?

function shuffle(array) {
  var currentIndex = array.length, temporaryValue, randomIndex;

  // While there remain elements to shuffle...
  while (0 !== currentIndex) {

    // Pick a remaining element...
    randomIndex = Math.floor(Math.random() * currentIndex);
    currentIndex -= 1;

    // And swap it with the current element.
    temporaryValue = array[currentIndex];
    array[currentIndex] = array[randomIndex];
    array[randomIndex] = temporaryValue;
  }

  return array;
}
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...