2017-10-17 112 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]

在“跳过”节我强迫调度结束的歌声,开始下一个正在队列中。

在“停止”部分,机器人离开语音通道