所以我希望我的不和谐机器人播放音乐,但当一首歌结束时,它会再次播放它。这也与跳过命令一起使用。你必须使用它两次。这是接下来播放的代码:
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对象不可订阅。请帮忙
如果没有看到你的musicQueue
属性,这很难分辨,但看起来它是一个list
的list
。因此,当您调用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
,您可以使用pop
或popleft
为deque
或get
为Queue
删除项目。这将简化您的代码。