2017-10-17 223 views
0

我正在製作一個可以播放音樂的Discord機器人,我已經可以工作,但它只能播放歌曲,而當您將機器人鏈接到另一首歌曲而不是等待第一首歌曲結束時,它會將取消第一首歌,直接進入第二首。我正在使用discord.js,並且已將我的代碼放入GitHub中。這裏是我的代碼:`如何讓我的不和諧音樂機器人有一個音樂隊列?

if(command === '!music') { 
    var link = arg1 
    console.log(link) 
    const ytdl = require('ytdl-core'); 
    const streamOptions = { seek: 0, volume: 1 }; 
    const broadcast = bot.createVoiceBroadcast(); 

    if(link === undefined) { 
     bot.guilds.get(guildid).channels.get(generalchan).send("You need to put a link after !music to put a song in the queue") 
    } else { 
     if (message.member.voiceChannel) { 
      message.member.voiceChannel.join() 
       .then(connection => { // Connection is an instance of VoiceConnection 
       message.reply('SONG : ' + link); 
       const streamOptions = { seek: 0, volume: arg2/100, filter : "audioonly" }; 
       connection.playStream(ytdl(link), streamOptions); 
      }) 
     } else { 
      message.reply("You need to be in a voice channel for me to join") 
     } 
    } 
}' 

我也想投上一票幫助跳過功能,使人們可以投票跳過當前正在播放一首歌曲,並轉到下一首歌曲。

+0

您可以在問題中包含代碼嗎? – guest271314

+0

我只是做了,希望你能幫助我 – kittrz

回答

1

你需要排列你的歌曲。

這個機器人我會告訴你也可以在多臺服務器上工作,而不會中斷已經使用此功能的通道。

在這裏,你告訴他,除其他事項外,在排隊播放下一首歌曲:

var servers = {}; 

function play(connection, message) { 
    var server = servers[message.guild.id]; 

    server.dispatcher = connection.playStream(YTDL(server.queue[0], { filter: 
    "audioonly" })); 

    server.dispatcher.setVolume(0.2); 

    server.queue.shift(); 

    server.dispatcher.on("end", function() { 

    if (server.queue[0]) play(connection, message); 
    else connection.disconnect(); 

}); 

} 

的.server你需要的,如果你想使更多的服務器,這項工作在同一時間。

我也有開關:

switch (args[0]) { 
case "play": 
     if (!args[1]) { 
      message.reply("Please provide a link") 
      return; 
     } 
     if (!message.member.voiceChannel) { 
      message.channel.send("You must be in a voice channel!") 
      return; 
     } 
     if (!servers[message.guild.id]) servers[message.guild.id] = { 
      queue: [] 
     } 
     var server = servers[message.guild.id]; 

     server.queue.push(args[1]); 

     if (!message.guild.voiceConnection) message.member.voiceChannel.join().then(function (connection) { 
       play(connection, message); 
     }); 
     break; 
case "skip": 
     var server = servers[message.guild.id]; 

     if (server.dispatcher) server.dispatcher.end(); 
     break; 

case "stop": 
     var server = servers[message.guild.id]; 

     if (message.guild.voiceConnection) message.guild.voiceConnection.disconnect(); 
     break; 
} 

而且在那裏我問消息的內容。

在「玩」一節我還問,如果一個鏈接已經給出瞭如果ARGS [1]

在「跳過」節我強迫調度結束的歌聲,開始下一個正在隊列中。

在「停止」部分,機器人離開語音通道