我正在制作一个不和谐的机器人,它在频道处于活动状态时加入频道并重复播放音频剪辑。
我尝试通过递归调用函数来做到这一点:
client.on('ready', () => {
console.log(`Logged in as ${client.user.tag}!`)
let vc = client.channels.get(voiceChannel);
vc.join().then(connection => {
function play (connection) {
const stream = ytdl('https://www.youtube.com/watch?v=fh0_sjZGJSc', { filter: 'audioonly' });
const dispatcher = connection.playStream(stream, streamOptions)
dispatcher.on('end', play(connection));
}
play(connection)
})
});
Run Code Online (Sandbox Code Playgroud)
但是当我运行它时,我收到此错误:
Error: spawn ffmpeg EAGAIN
at _errnoException (util.js:999:13)
at Process.ChildProcess._handle.onexit (internal/child_process.js:201:19)
at onErrorNT (internal/child_process.js:389:16)
at process._tickCallback (internal/process/next_tick.js:152:19)
Run Code Online (Sandbox Code Playgroud)
谁能告诉我如何使用 discord.js 永久重复播放音频循环?谢谢!
加入语音频道后,您将设置以下侦听器:
dispatcher.on('end', play(connection));
Run Code Online (Sandbox Code Playgroud)
请注意,您没有在此处提供回调函数;相反,您正在立即再次调用播放。您看到的错误是因为您递归生成了太多 FFMPEG 实例(ytldl 用于对视频进行转码的库)。要解决这个问题,您只需提供一个实际的回调函数,如下所示:
dispatcher.on('end', () => {
play(connection);
});
Run Code Online (Sandbox Code Playgroud)
希望有帮助。