SyntaxError: 'await' outside async function

SyntaxError: 'await' outside async function

所以我正在尝试向我的机器人添加 queue。但它给了我标题中的错误。

这是向 queue 添加内容的命令:

@commands.command()
    async def remove(self, ctx, number):
        global queue

        try:
            del (queue[int(number)])
            await ctx.send(f'Your queue is now `{queue}!`')

        except:
            await ctx.send("Your queue is either **empty** or **out of range**")

这是我播放 queue 的代码(我尝试了一种不同的方式,但我不知道如果当前歌曲停止播放,如果它不在函数中,如何播放下一首歌曲,所以是的,这就是为什么它就像在 def)

        def queuePlayer():
            YDL_OPTIONS = {'format': "bestaudio"}
            vc = ctx.voice_client
            FFMPEG_OPTIONS = {'before_options': '-reconnect 1 -reconnect_streamed 1 -reconnect_delay_max 5', 'options': '-vn'}
            with youtube_dl.YoutubeDL(YDL_OPTIONS) as ydl:
                global queue
                info = ydl.extract_info(f"ytsearch:{queue[0]}", download=False)
                if 'entries' in info:
                    video = info['entries'][0]
                else:
                    video = info
                url2 = video['formats'][0]['url']

                def convert(seconds):
                    seconds = seconds % (24 * 3600)
                    hour = seconds // 3600
                    seconds %= 3600
                    minutes = seconds // 60
                    seconds %= 60
                    return "%d:%02d:%02d" % (hour, minutes, seconds)

                print(video)
                video_url = video['url']
                print(video_url)
                source = await discord.FFmpegOpusAudio.from_probe(url2, **FFMPEG_OPTIONS)
                vc.play(source)
                del (queue[0])
                print(video['title'])
                track = video['title']
                artist = video['channel']
                duration = video['duration']
                durationConv = convert(duration)
                thumbnail = video['thumbnail']
                embedVar = discord.Embed(title="Now playing", description=":notes: {}".format(track), color=0x00ff00)
                embedVar.add_field(name="Artist", value=":microphone: {}".format(artist), inline=False)
                embedVar.add_field(name="Duration", value=f":hourglass_flowing_sand: `{durationConv}`", inline=False)
                embedVar.set_thumbnail(url=thumbnail)
                await ctx.send(embed=embedVar)
                t = duration
                while t:
                    time.sleep(1)
                    t -= 1
                    print(t)
                print("TIMER REACHED 0")
                if t == 0:
                    print("T IS 0")
                    await ctx.send("Playing next!")
                queuePlayer()
        queuePlayer()

discord 的 api 使用异步库,因此它使用 'await.' 调用库的函数,从 discord 服务器获取您正在使用的数据。当您编写通过客户端的命令时,您将它与 'async def' 一起使用。您收到该错误的原因是因为您试图在常规 python 函数(使用 'def' 而不是 'async def.' 定义)中使用 'await' 它不会工作是因为没有什么可等待的,并且由于它是一个常规(同步)函数而不是异步函数,您将无法在不和谐的情况下调用它,并且由于您无法调用它,因此不会有任何上下文来发送留言给。

对于你想要做的事情,我建议将它从 'def' 更改为 'async def' 并添加 @commands.command(),然后从那里摆弄它。有时需要一段时间才能做对,但通常情况下你最终会做对!