javascript - 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
。
解决方案
要使 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
.
推荐阅读
- javascript - 没有从搜索功能中获取正确的数据
- ios - 在 iPhone 上获取采样率
- powershell - 在powershell中重命名文件名的一部分
- sql - Oracle SQL:在不重复的多行列中查找特定字符的每个位置
- scala - 使用 play-slick,如何使用配置生成的数据库 API 定义通用组件
- javascript - Mogno 用户和评论
- validation - Symfony 验证单个属性
- python - 我可以用 Python 运行其他程序吗?
- java - 使用字段值初始化的数组中的 ArrayIndexOutOfBoundsException
- c# - 简单文本的正则表达式模式