我正在discord.js中创建一个Discord Music Bot,我已经安装了ffmpeg,并且一切似乎都可以正常工作,但是当我执行play命令时,bot会加入一个频道,发送一条消息,但没有播放任何内容,我已经检查过控制台,并且它不记录任何内容。 我知道这不是代码问题,因为它可以在本地完美运行,问题是当我尝试使用heroku时,我以为可能是操作问题,但我不知道。
答案 0 :(得分:0)
您好,如果您发布代码示例和详细的错误日志,那就更好了。据我了解,
我可以告诉您,您可以轻松播放没有从YouTube下载的mp3文件,而无需任何依赖(FFMPEG除外)。您可能需要导航到https://discord.js.org来检查文档:)
以下是Discord.js文档中该主题的完整链接:https://discord.js.org/#/docs/main/stable/topics/voice
我要说的是,我不太了解您的情况。提供例外行为和一些代码示例。
另一方面,如果您使用master分支并使用稳定发行版的代码,则您的代码可能无法正常工作。请检查您的分支机构,并进行必要的更改以更新密码。
答案 1 :(得分:0)
我在这里没有找到相关的代码,因为它可以在我的本地主机中很好地工作,但是当我开始在Heroku上托管它时,什么也没发生。 在这里,可能有一个错误,但是正如我说的,我认为问题在于操作脚本或节点操作。 Here are my Heroku buildpacks
这是我的代码:
const ytdl = require('ytdl-core');
let voiceChn = message.member.voiceChannel;
if(!voiceChn) return message.channel.send('¡Join a voice channel first!.');
if(!args) return message.channel.send('Add a youtube URL to play it.');
voiceChn.join()
.then(connection => {
const url = ytdl(args.join(' '), { filter : 'audioonly' });
const dispatcher = connection.playStream(url);
message.delete();
message.channel.send('Now playing : '+ args);
}).catch(console.error);
答案 2 :(得分:0)
对于我的价值,我看到一个非常相似的问题。我的机器人应该加入频道,从S3存储桶(已公开)中播放声音片段,然后离开。 这是我的代码:
async function executePlaySoundCommand(message, filePath) {
try {
const voiceChannel = message.member.voiceChannel;
const connection = await voiceChannel.join();
console.log(`filePath: ${filePath}`);
const file = `${process.env.S3_URL}/${filePath}`;
console.log(`file: ${file}`);
const dispatcher = await connection.playArbitraryInput(file);
console.log('Playback finished');
dispatcher.on('end', () => {
voiceChannel.leave();
});
} catch (err) {
console.log(err);
}
}
机器人会在本地加入频道,播放声音,然后按预期离开。但是,在heroku中,该漫游器会加入该频道,然后立即离开。 以下是来自heroku的经过清理的日志:
Executing <command-name> command
filePath: <audio-file>.mp3
file: https://s3-eu-west-1.amazonaws.com/<s3-bucket-name>/<audio-file>.mp3
Playback finished
我认为我的代码(?)没什么问题,研究了ffmpeg协议以查看是否遗漏了一些东西。