javascript - 不和谐音乐机器人循环
问题描述
我正在创建一个不和谐的音乐机器人。现在,它可以播放音乐、显示队列、暂停、恢复、停止等。我正在尝试实现循环播放单个音乐或整个列表的循环功能。但是,它不起作用。我看不出我的代码逻辑有什么问题。
这是我的结构:
const structure = {
channel: message.channel,
vc: channel,
volume: 85,
playing: true,
queue: [],
connection: null,
loopall: false,//added
loopone: false//added
};
这是bot的播放功能
async function play(track) {
try {
const data = message.client.queue.get(message.guild.id);
if (!track) {
data.channel.send("Queue is empty, Leaving voice channel");
message.guild.me.voice.channel.leave();
return deletequeue(message.guild.id);
}
data.connection.on("disconnect", () => deletequeue(message.guild.id));
const source = await ytdl(track.url, {
filter: "audioonly",
quality: "highestaudio",
highWaterMark: 1 << 25,
opusEncoded: true,
});
const player = data.connection
.play(source, { type: "opus" })
.on("finish", () => {
if(data.loopone==true){//
play(data.queue[0])
}else if(data.loopall==true){
data.queue.push(data.queue[0])
data.queue.shift()
}//
var removed = data.queue.shift();
if(data.loop == true){
data.queue.push(removed)
}
play(data.queue[0]);
});
player.setVolumeLogarithmic(data.volume / 100);
data.channel.send(
new MessageEmbed()
.setAuthor(
"Started Playing",
"https://img.icons8.com/color/2x/cd--v3.gif"
)
.setColor("9D5CFF")
.setThumbnail(track.thumbnail)
.addField("Song Name", track.name, false)
.addField("Views", track.views, false)
.addField("Duration", track.duration, false)
.addField("Requested By", track.requested, false)
.setFooter("Youtube Music Player")
);
} catch (e) {
console.error(e);
}
}
}
}
这是更改 loopall 和 loopone 布尔值的函数:
const{MessageEmbed}=require('discord.js');
module.exports={
name:'loop',
aliases:[''],
cooldown:0,
description:'',
async execute(client,message,args,Discord){
const channel =message.member.voice.channel;
if(!channel) return message.channel.send("You must in a voice channel")
let queue=message.client.queue.get(message.guild.id)
if(!queue) return message.channel.send(new MessageEmbed()
.setDescription("No songs playing in this channel")
.setColor("PURPLE")
);
if(queue.loopall==false &&queue.loopone==false){
queue.loopall=true;
queue.loopone=false;
return message.channel.send(new MessageEmbed()
.setDescription("Looping all songs")
.setColor("PURPLE")
);}else if(queue.loopall==true){
queue.loopall=false;
queue.loopone=!queue.loopone;
return message.channel.send(new MessageEmbed()
.setDescription("Looping one song")
.setColor("PURPLE")
);}else if(queue.loopone==true){
queue.loopall=false;
queue.loopone=false;
return message.channel.send(new MessageEmbed()
.setDescription("Disabled looping")
.setColor("PURPLE")
);
}
}
谁能指出代码有什么问题?
解决方案
推荐阅读
- azure - 为 Azure VM 中托管的 Web 应用程序禁用匿名身份验证
- python - 在悬停或活动时更新 Tkinter 菜单项中的图像
- dynamics-crm - 如何为托管解决方案添加自定义站点地图区域/组/子区域?
- mysql - 使用while循环和limit,offset从另一个表插入表
- aurelia - Aurelia - ValidationController 总是返回 true
- php - 将文件从 Wordpress 重力表单上传到 Amazon S3
- javascript - 需要从数据库nodejs获取数据
- android - 在android中区分Activity:onUserInteractions
- webpack - Webpack 动态需求
- java - Spring Data JPA,如何创建不同的 findById 和 findByIdWithLock