【发布时间】:2020-04-14 10:32:16
【问题描述】:
我有一个 .mp3 格式的音乐库,存储在 Google Drive 文件夹中,其中包含一堆我希望能够一个接一个地播放的音乐文件。我能够单独读取和流式传输每个文件,但是当我尝试将文件夹中的所有文件“排队”并一个接一个地播放它们时,它不会等到一个流(歌曲)播放完毕才能播放下一首,而是立即开始下一首,这会导致整个文件夹中只播放最后一首歌曲。我假设我必须搞乱我之前在 discord.js 开发中所做的 async/await,或者我不熟悉的 Promises 和 Promise.all()。这是代码的相关部分。
var folderId = "'the-folder-id'";
drive.files.list({
q: folderId + " in parents", // to get all the files in the folder
fields: 'files(id)'
}, (err, res) => {
if (err) throw err;
const files = res.data.files;
files.map(file => {
drive.files.get({
fileId: file.id,
alt: 'media'
},
{ responseType: "stream" },
(err, { data }) => {
message.member.voiceChannel.join().then(connection => {
const dispatcher = connection.playStream(data); // doesn't wait for this to finish to play the next stream (song)
}).catch(err => console.log(err));
});
});
});
请注意,我有一个命令让机器人离开频道,所以我的代码中没有任何voiceChannel.leave() 是正常的,因为我不希望它在歌曲播放完后立即离开。
欢迎任何建议,提前谢谢!
【问题讨论】:
标签: node.js google-drive-api discord.js audio-streaming