【问题标题】:Why does my discord bot play songs twice?为什么我的不和谐机器人播放歌曲两次?
【发布时间】:2021-10-20 09:05:30
【问题描述】:

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

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 对象不可订阅。请帮忙

【问题讨论】:

    标签: python discord discord.py


    【解决方案1】:

    没有看到你的musicQueue 属性很难说,但它看起来像是listdictlist。因此,当您调用 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]: [[]]
    

    您应该考虑使用collections.dequequeue.Queue 删除项目,使用poppopleftdequegetQueue。这将简化您的代码。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 2021-09-06
      • 2023-03-10
      • 1970-01-01
      • 2021-12-10
      • 1970-01-01
      • 1970-01-01
      • 2020-12-19
      相关资源
      最近更新 更多