【发布时间】:2019-12-22 19:47:30
【问题描述】:
所以我正在尝试设置一个音乐库,我可以从我的 discord.js 机器人访问。理想情况下,我想流式播放播放列表/特定歌曲,来自同一流派的所有歌曲都将位于同一个文件夹中,所以我的想法是说!play electronic,机器人将播放特定文件夹中的所有文件。在进入整个文件夹之前,我一直在尝试让一个文件流式传输,这就是我遇到的问题。我还没有找到一种方法来流式传输音频文件本身,但我宁愿下载它并将其存储在一个临时 mp3 文件中。我会接受任何关于如何流式传输文件而不是下载文件的建议,如果这能提供任何大的好处/更容易编码,否则如何下载它并在播放时临时存储它(请记住,托管服务我正在使用的可用存储空间有限,因此无法选择下载整个文件夹),以及如何以有效的方式让机器人加载/预加载和排队播放列表(整个音乐文件夹)溪流。这是我的代码的相关部分,在Google Drive API docs about file downloads之后:
if (message.member.voiceChannel) {
var temp = fs.createWriteStream('./tmpsong.mp3');
drive.files.get({
fileId: '1JTJ7W9C6NBBtjcLhD6P4G9YeXvPQxaBP',
alt: 'media'
}).on('end', function () {
console.log('Done');
}).on('error', function (err) {
console.log('Error during download', err);
}).pipe(temp).then(() => {
message.member.voiceChannel.join().then(connection => {
const dispatcher = connection.playFile('./tmpsong.mp3');
dispatcher.on("end", end => { message.member.voiceChannel.leave(); });
});
}).catch(err => console.log(err));
}
这是我得到的错误:
An error occurred while running the command: TypeError: drive.files.get(...).on is not a function.
我尝试删除两个.on() 函数并在.get() 之后立即只留下.pipe(temp),但我得到了同样的错误:
An error occurred while running the command: TypeError: drive.files.get(...).pipe is not a function.
为了澄清,我已经知道如何让机器人加入 Discord 语音频道并让它播放音频文件,我只需要知道如何从 Google Drive 获取我需要的文件,如果可能的话,队列/播放列表系统的最佳方法是什么。
欢迎任何建议,在此先感谢。
【问题讨论】:
标签: node.js google-drive-api discord.js audio-streaming