如何在heroku上使用音乐和弦机器人播放声音

时间:2019-02-03 20:54:15

标签: heroku ffmpeg bots discord.js opus

我正在discord.js中创建一个Discord Music Bot,我已经安装了ffmpeg,并且一切似乎都可以正常工作,但是当我执行play命令时,bot会加入一个频道,发送一条消息,但没有播放任何内容,我已经检查过控制台,并且它不记录任何内容。 我知道这不是代码问题,因为它可以在本地完美运行,问题是当我尝试使用heroku时,我以为可能是操作问题,但我不知道。

3 个答案:

答案 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协议以查看是否遗漏了一些东西。