我在此观看的视频大约是9个月前制作的,队列不再有效。 它所做的只是播放一首新歌而不是将其排队。stop命令也不起作用。 我对Java语言真的很陌生,无法找到任何问题,但是我确定它有问题 不会产生任何错误。
我想大多数问题都是由于过时的代码引起的,但我不确定。 如果有人可以提供帮助,那就太好了。
bot.on('message', message => {
if (!message.content.startsWith(PREFIX)) return;
let args = message.content.substring(PREFIX.length).split(" ");
switch(args[0]) {
case 'play':
if(usedCommandRecently4.has(message.author.id)){
message.reply("Your using this command to fast!");
} else{
function play(connection, message){
var server = servers[message.guild.id];
server.dispatcher = connection.play(ytdl(server.queue[0], {filter: "audioonly"}));
server.queue.shift();
message.channel.send("``Music Bot v1.2`` \n Adding song to queue!");
server.dispatcher.on("end", function(){
if(server.queue[0]){
play(connection, message);
}else {
connection.disconnect();
}
})
}
if(!args[1]){
message.channel.send("``Music Bot v1.2`` \n you need to provide a link!!");
return;
}
if(!message.member.voice.channel){
message.channel.send("``Music Bot v1.2`` \n You must be in a voice channel to play music!");
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.voice.channel.join().then(function(connection){
play(connection, message);
})
usedCommandRecently4.add(message.author.id);
setTimeout(() => {
usedCommandRecently4.delete(message.author.id)
}, 10000);
}
break;
case 'skip':
if(usedCommandRecently3.has(message.author.id)){
message.reply("Your using this command to fast!");
} else{
var server = servers[message.guild.id];
if(server.dispatcher) server.dispatcher.end();
message.channel.send("``Music Bot v1.2`` \n Skipping the current song!")
usedCommandRecently3.add(message.author.id);
setTimeout(() => {
usedCommandRecently3.delete(message.author.id)
}, 3000);
}
break;
case 'stop':
var server = servers[message.guild.id];
if(message.guild.voiceConnection){
for(var i = server.queue.length -1; i >=0; i--){
server.queue.splice(i, 1);
}
server.dispatcher.end();
message.channel.send("``Music Bot v1.2`` \n Ending the queue and Leaving the voice channel! \n This bot is in early development! \n if you have any problems with it dm Justice#6770!")
console.log('stopped the queue')
}
}
if(message.guild.connection) message.guild.voiceConnection.disconnect();
})
答案 0 :(得分:2)
我以此顺序解决了队列问题,这段代码的问题是当您向队列中添加歌曲时,第一首歌曲又从头开始,我不知道如何解决这个小问题
案例“播放”:
function play(connection, message){
var server = servers[message.guild.id];
server.dispatcher = connection.play(ytdl(server.queue[0],{filter: "audio"}));
server.dispatcher.on("finish", function(){
server.queue.shift();
if(server.queue[0]){
play(connection, message);
}else {
connection.disconnect();
}
})
}
答案 1 :(得分:0)
由于message.guild.voiceConnection
不再存在,停止命令可能被破坏。
您需要改用message.guild.voice.connection
。
关于队列问题,无论如何,您的play
函数似乎总是在转移队列并播放新歌曲。您应该尝试移动
server.queue.shift();
server.dispatcher = connection.play(ytdl(server.queue[0], {filter: "audioonly"}));
按照此确切顺序,在
server.dispatcher.on("end", function(){ //...
事件以查看是否有任何改变:)