Итак, я продвигаюсь к своему боту 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;
}
});
}