如何让我的不和谐音乐机器人有一个音乐队列?
问题描述:
我正在制作一个可以播放音乐的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")
}
}
}'
我也想投上一票帮助跳过功能,使人们可以投票跳过当前正在播放一首歌曲,并转到下一首歌曲。
答
你需要排列你的歌曲。
这个机器人我会告诉你也可以在多台服务器上工作,而不会中断已经使用此功能的通道。
在这里,你告诉他,除其他事项外,在排队播放下一首歌曲:
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]
在“跳过”节我强迫调度结束的歌声,开始下一个正在队列中。
在“停止”部分,机器人离开语音通道
您可以在问题中包含代码吗? – guest271314
我只是做了,希望你能帮助我 – kittrz