2017-02-01 13 views
0

Я попытался использовать этот код, чтобы сделать битву музыки, но я получаю сообщение об ошибке, мне нужно ffmpeg, но как бы реализовать его в этом коде? файл файлНужна помощь Создание Java Script Discord Music Bot

index.js

const Discord = require('discord.js'); 
 
const bot = new Discord.Client(); 
 
const config = require("./config.json"); 
 
const ytdl = require('ytdl-core'); 
 

 
var youtube = require('./youtube.js'); 
 

 

 
var ytAudioQueue = []; 
 
var dispatcher = null; 
 

 
bot.on('message', function(message) { 
 
    var messageParts = message.content.split(' '); 
 
    var command = messageParts[0].toLowerCase(); 
 
    var parameters = messageParts.splice(1, messageParts.length); 
 

 
    switch (command) { 
 

 
     case "-join" : 
 
     message.reply("Attempting to join channel " + parameters[0]); 
 
     JoinCommand(parameters[0], message); 
 
     break; 
 
    
 
     case "-play" : 
 
     PlayCommand(parameters.join(" "), message); 
 
     break; 
 

 
     case "-playqueue": 
 
     PlayQueueCommand(message); 
 
     break; 
 
    } 
 
}); 
 

 

 
    function PlayCommand(searchTerm) { 
 
     if(bot.voiceConnections.array().length == 0) { 
 
      var defaultVoiceChannel = bot.channels.find(val => val.type === 'voice').name; 
 
      JoinCommand(defaultVoiceChannel); 
 
     } 
 
     youtube.search(searchTerm, QueueYtAudioStream); 
 
    } 
 

 
    function PlayQueueCommand(message) { 
 
     var queueString = ""; 
 

 
     for(var x = 0; x < ytAudioQueue.length; x++) { 
 
      queueString += ytAudioQueue[x].videoName + ", "; 
 
     } 
 
     queueString = queueString.substring(0, queueString.length - 2); 
 
     message.reply(queueString); 
 
    } 
 

 
    function JoinCommand(ChannelName) { 
 
     var voiceChannel = GetChannelByName(ChannelName); 
 

 
     if (voiceChannel) { 
 
      voiceChannel.join(); 
 
      console.log("Joined " + voiceChannel.name); 
 
     } 
 
     
 
     return voiceChannel; 
 
     
 
    } 
 

 
    /* Helper Methods */ 
 

 
    function GetChannelByName(name) { 
 
     var channel = bot.channels.find(val => val.name === name); 
 
     return channel; 
 
    } 
 

 
    
 

 
    function QueueYtAudioStream(videoId, videoName) { 
 
     var streamUrl = youtube.watchVideoUrl + videoId; 
 

 
     if (!ytAudioQueue.length) { 
 
      ytAudioQueue.push(
 
       { 
 
        'streamUrl' : streamUrl, 
 
        'videoName' : videoName 
 
       } 
 
      ); 
 
      console.log('Queued audio ' + videoName); 
 
      PlayStream(ytAudioQueue[0].streamUrl); 
 
     } 
 
     else { 
 
      ytAudioQueue.push(
 
       { 
 
        'streamUrl' : streamUrl, 
 
        'videoName' : videoName 
 
       } 
 
      ); 
 
     } 
 
     console.log("Queued audio " + videoName); 
 
    } 
 

 
    function PlayStream(streamUrl) { 
 
     const streamOptions = {seek: 0, volume: 1}; 
 

 
     if (streamUrl) { 
 
      const stream = ytdl(streamUrl, {filter: 'audioonly'}); 
 

 
      if (dispatcher == null) { 
 
       var voiceConnection = bot.voiceConnections.first(); 
 

 
       if(voiceConnection) { 
 
        console.log("Now Playing " + ytAudioQueue[0].videoname); 
 
        dispatcher = bot.voiceConnections.first().playStream(stream, streamOptions); 
 

 
        dispatcher.on('end',() => { 
 
         dispatcher = null; 
 
         PlayNextStreamInQueue(); 
 
        }); 
 

 
        dispatcher.on('error', (err) => { 
 
         console.log(err); 
 
        }); 
 
       } 
 
      } else { 
 
       dispatcher = bot.voiceConnections.first().playStream(stream, streamOptions); 
 
      } 
 
      
 
     } 
 
    } 
 

 
    function PlayNextStreamInQueue() { 
 
     ytAudioQueue.splice(0, 1); 
 

 
     if (ytAudioQueue.length != 0) { 
 
      console.log("now Playing " + ytAudioQueue[0].videoName); 
 
      PlayStream(ytAudioQueue[0].streamUrl); 
 
     } 
 
    } 
 

 

 
bot.login(config.token);

youtube.js

var request = require('superagent'); 
 

 
const API_KEY = "My API KEY"; 
 
const WATCH_VIDEO_URL = "https://www.youtube.com/watch?v="; 
 

 
exports.watchVideoUrl = WATCH_VIDEO_URL; 
 

 
exports.search = function search(searchKeywords, callback) { 
 
    var requestUrl = 'https://www.googleapis.com/youtube/v3/search' + '?part=snippet&q=' + escape(searchKeywords) + '&key=' + API_KEY; 
 

 
    request(requestUrl, (error, response) => { 
 
    if (!error && response.statusCode == 200) { 
 

 
     var body = response.body; 
 
     if (body.items.length == 0) { 
 
     console.log("I Could Not Find Anything!"); 
 
     return; 
 
     } 
 
     for (var item of body.items) { 
 
     if (item.id.kind == 'youtube#video') { 
 
      callback(item.id.videoId, item.snippet.title); 
 
      return; 
 
     } 
 
     } 
 
    } else { 
 
     console.log("Unexpected error!"); 
 
     return; 
 
    } 
 
    }); 
 

 
    return; 
 

 
};

Ошибка я получаю, когда я пытаюсь запустить код:

Регистрация Общие

C: \ Раздор Bot \ node_modules \ discord.js \ SRC \ клиент \ голос \ РСМ \ FfmpegConverterEngine.

ЯШИ: 80

певда ошибки (

^

Ошибка: FFMPEG не была найдена в вашей системе, так что звук не может быть воспроизведена Пожалуйста, установлена ​​уверена FFMPEG и в вашем. PATH.

+0

Ошибки довольно ясны. Установите FFMPEG (я предполагаю, что это кодек), и поместите каталог в ваш PATH. – Carcigenicate

+0

Я добавил его на свой путь, но я все еще получаю ту же ошибку – Gambino

ответ

0

Вам необходимо скачать/извлечения FFMPEG и сделать его в качестве PATH системной переменной [переменной окружения]/

Убедитесь, что у вас есть в вашей переменной системы, как это: Screenshot

Система Variable должен назван как «FFMPEG» и должны быть направлены туда, где файл исполнения (.exe) есть. Он должен находиться в папке «bin» в вашей папке FFMPEG.

Вы можете google/искать в Интернете о том, как добавить новую переменную System/PATH для вашей конкретной ОС.

+0

Я сделал это и добавил ffmpeg на свой путь, но я все еще получаю ошибку. :/ – Gambino

+0

@ Gambino, пожалуйста, укажите любое решение, которое вы пробовали, которое не работает. – WQYeo

+0

Я пошел в систему, расширенные системные настройки, переменные среды, системные переменные и добавил FFMPEG и установил значение, где был файл .exe. затем я перезапустил бота и попытался воспроизвести песню, затем снова появилась ошибка. Поэтому я сделал то, что я пробовал до этого, и перешел в системные переменные, выбрал переменную с именем «Путь» и нажал «Редактировать», затем «Создать» в окне «Редактировать переменные среды» и направил ее в папку, содержащую файл ffmpeg.exe. и это все еще дало мне ошибку, о которой я упоминал в вопросе. – Gambino