首页 > 解决方案 > Discord.js 机器人试图在语音通道上播放 mp3 文件 - 没有错误,也没有声音

问题描述

我的机器人加入了语音频道,然后离开并发送消息“正在播放!”,但不播放 mp3。我在 Windows 上,我已经检查过我可以通过命令行使用 ffmpeg 播放 mp3 文件。有谁知道出了什么问题?

const path = require('path')

client.channels.fetch('Channel_ID').then(channel => {
     console.log(channel.name)
     console.log(path.join(__dirname, 'music.mp3'))
     channel.join().then((connection) => {
         const dispatcher = connection.play(path.join(__dirname, 'music.mp3'));
         dispatcher.on("speaking", speaking => {
             if (!speaking) {
               channel.leave()
               msg.channel.send("Playing ok!")
             }
        });         
   });
});

更新: 我更改了“完成”事件的“说话”,并在评论中尝试了音频文件。现在,bot 加入语音通道,停留在 mp3 持续时间的同一时间,然后离开语音通道,但还没有声音。

更新 2: 我现在将 ffmpeg 添加到我的 PATH 中。机器人出现了一个绿色的圆圈,好像在播放什么东西,但又没有声音了。以防万一,我将我的机器人置于管理员权限下,但这还不够。

谢谢您的帮助。

使用 discord.js v12.5.3

标签: javascriptdiscord.jsplaysound

解决方案


要使 discord.js 语音正常工作,您需要安装以下软件包(如安装部分下的文档中所述):要么@discordjs/opus要么opusscript.

npm install @discordjs/opus

discord.js 也取决于prism-media并且您应该安装 ffmpeg 才能正常工作。

npm install ffmpeg-static

如果您不想将 ffmpeg 作为 npm 包安装并且您已经安装了 ffmpeg,请确保将其添加到PATH环境变量并重新启动您的工作环境。

OP说,将ffmpeg添加到PATH工作后重新启动他的计算机。

评论中的其余信息:

还有您的消息“播放正常!” 错了,这意味着机器人没有说话......见上文你有if (!speaking) { ... }。所以当你在机器人加入语音频道后收到这条消息时,有些不对劲,因为StreamDispatcher马上就结束了。

error要对此进行调试,请查看StreamDispatcher.


推荐阅读