所以我的机器人加入并搜索歌曲就好了。但是,它不会播放任何内容。我在控制台上得到的错误是这样的:
在命令播放中忽略异常: 回溯(最近一次调用最后一次): 文件“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
答案 0 :(得分:0)
我不太明白您要表达的内容,但错误消息明确指出问题出在 self.queue[0] = player
。由于 if
语句保证,self.queue
为空,因此尝试获取索引会引发 IndexError
。
此外,在 else
块中,您无法获得 self.queue[len(self.queue)]
,因为最后一个索引将是 len(self.queue)-1