Mail.ruПочтаМой МирОдноклассникиВКонтактеИгрыЗнакомстваНовостиКалендарьОблакоЗаметкиВсе проекты

Почему в данном discord.js v12 коде функция dispatcher.on('finsh') выполняется лишь один раз ?

99 99 Знаток (343), на голосовании 1 год назад
if (message.content.startsWith('o.tts ')) {
var textToSpeech
var lang = message.content.split(' ')[1]
if (lang == "ru" || lang == "en") {
var textToSpeech = message.content.substring(8);
} else {
var textToSpeech = message.content.substring(5);
}
const voiceChannel = message.member.voice.channel;
var lang2
if (lang === "ru" || lang === "en") {
lang2 = lang;
} else {
lang2 = "ru";
}
console.log(lang2);
if (!voiceChannel) {
return message.reply('Пожалуйста, присоединитесь к голосовому каналу, чтобы использовать эту команду!');
}
var oi = 0;
const url = await tts.getAllAudioUrls(textToSpeech, { lang: lang2, slow: false, host: ' https://translate.google.com '});
const connection = await voiceChannel.join(); // Присоединиться к голосовому каналу
const dispatcher = connection.play(Object.values(url[0).slice(0)[1]); // Проиграть текст
dispatcher.on('finish', () => {
if (o <= url.length) {
connection.play(Object.values(url[oi++]).slice(0)[1]);
console.log("end");
}
});
}
Голосование за лучший ответ
Dmitrii DNK Мастер (1255) 1 год назад
dispatcher.on('finsh') выполняется только один раз, поскольку она вызывается только один раз - при первом подключении голосового канала. Событие 'finish' срабатывает, когда текущий аудиопоток заканчивает воспроизведение, а поскольку здесь воспроизводится только один аудиопоток, событие 'finish' срабатывает только один раз. Затем код увеличивает переменную oi, чтобы можно было воспроизвести следующий аудиопоток, и событие 'finish' больше не срабатывает.
Похожие вопросы