首页 > 解决方案 > 不和谐音乐机器人循环

问题描述

我正在创建一个不和谐的音乐机器人。现在,它可以播放音乐、显示队列、暂停、恢复、停止等。我正在尝试实现循环播放单个音乐或整个列表的循环功能。但是,它不起作用。我看不出我的代码逻辑有什么问题。

这是我的结构:

      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")
    );
    }
}

谁能指出代码有什么问题?

标签: javascriptdiscorddiscord.jsyoutube-apibots

解决方案


推荐阅读