提问者:小点点

为什么我的不和谐机器人会播放两次歌曲?


所以我希望我的不和谐机器人播放音乐,但当一首歌结束时,它会再次播放它。这也与跳过命令一起使用。你必须使用它两次。这是接下来播放的代码:

def playNext(self):
    if len(self.musicQueue) > 0:
      self.isPlaying = True

      mURL = self.musicQueue[0][0]['source']

      del self.musicQueue[0][0]

      self.vc.play(discord.FFmpegPCMAudio(mURL, **self.FFEMPEG_OPTIONS), after=lambda e: self.playNext())
    else:
      self.isPlaying = False

这是跳过的代码

@commands.command(aliases=['skip'])
  async def s(self, ctx):
    if self.vc != "":
      self.vc.stop()
      await self.playMusic()

对于跳过,它会给出已经播放音乐两次并在第二次停止的错误,如果您让它播放两次,它会说VoiceChannel对象不可订阅。请帮忙


共1个答案

匿名用户

如果没有看到你的musicQueue属性,这很难分辨,但看起来它是一个listlist。因此,当您调用del self. musicQueue[0][0]时,您正在删除第一个嵌套列表的第一个元素,但是仅包含空列表的列表仍然具有大于0的长度。

In [1]: a = [[{"source": "abc"}],]
In [2]: len(a)
Out[2]: 1
In [3]: del a[0][0]
In [4]: len(a)
Out[4]: 1
In [5]: a
Out[5]: [[]]

您应该考虑使用集合. deque队列.Queue,您可以使用poppopleftdequegetQueue删除项目。这将简化您的代码。