Discord.py 播放音乐未播放但加入

时间:2021-06-02 14:35:54

标签: python discord.py

所以我的机器人加入并搜索歌曲就好了。但是,它不会播放任何内容。我在控制台上得到的错误是这样的:

在命令播放中忽略异常: 回溯(最近一次调用最后一次): 文件“C:\Users\Richard Ille\AppData\Local\Programs\Python\Python39\lib\site-packages\discord\ext\commands\core.py”,第 85 行,已包装 ret = await coro(*args, **kwargs) 文件“C:\Users\Richard Ille\Desktop\Folders\Yota Inc discord bot\cogs\music3.py”,第 94 行,正在播放 self.start_playing(ctx.voice_client, player) 文件“C:\Users\Richard Ille\Desktop\Folders\Yota Inc discord bot\cogs\music3.py”,第 108 行,在 start_playing self.queue[0] = 玩家 IndexError:列表分配索引超出范围

上述异常是以下异常的直接原因:

回溯(最近一次调用最后一次): 文件“C:\Users\Richard Ille\AppData\Local\Programs\Python\Python39\lib\site-packages\discord\ext\commands\bot.py”,第 939 行,在调用中 等待 ctx.command.invoke(ctx) 文件“C:\Users\Richard Ille\AppData\Local\Programs\Python\Python39\lib\site-packages\discord\ext\commands\core.py”,第 863 行,在调用中 等待注入(*ctx.args,**ctx.kwargs) 文件“C:\Users\Richard Ille\AppData\Local\Programs\Python\Python39\lib\site-packages\discord\ext\commands\core.py”,第 94 行,包装好的 从 exc 引发 CommandInvokeError(exc) discord.ext.commands.errors.CommandInvokeError:命令引发异常:IndexError:列表分配索引超出范围

这是我的代码:

@commands.command()
    async def play(self, ctx, *, url):

        #try:

        async with ctx.typing():
            player = await YTDLSource.from_url(url, loop=self.bot.loop, stream=True)

            if len(self.queue) == 0:

                self.start_playing(ctx.voice_client, player)
                await ctx.send(f':mag_right: **Searching for** ``' + url + '``\n**Now Playing:** ``{}'.format(player.title) + "``")

            else:
                    
                self.queue[len(self.queue)] = player
                await ctx.send(f':mag_right: **Searching for** ``' + url + '``\n**Added to queue:** ``{}'.format(player.title) + "``")

        #except:

        #await ctx.send("Somenthing went wrong - please try again later!")

    def start_playing(self, voice_client, player):

        self.queue[0] = player

        i = 0
        while i <  len(self.queue):
            try:
                voice_client.play(self.queue[i], after=lambda e: print('Player error: %s' % e) if e else None)

            except:
                pass
            i += 1

1 个答案:

答案 0 :(得分:0)

我不太明白您要表达的内容,但错误消息明确指出问题出在 self.queue[0] = player。由于 if 语句保证,self.queue 为空,因此尝试获取索引会引发 IndexError

此外,在 else 块中,您无法获得 self.queue[len(self.queue)],因为最后一个索引将是 len(self.queue)-1