TypeError: Music.on_wavelink_track_end() got multiple values for argument 'track'

TypeError: Music.on_wavelink_track_end() got multiple values for argument 'track'

我正在制作 discord 音乐机器人并使用 wavelink 库。

我写这段代码:

    @commands.Cog.listener()
    async def on_wavelink_track_end(player: wavelink.Player, track: wavelink.Track):
        ctx = player.ctx
        vc: player = ctx.voice_client

        if vc.loop:
            return await vc.play(track)
        
        next_song = vc.queue.get()
        await vc.play(next_song)
        await ctx.send(f"Сейчас играет {next_song.title}")


    @commands.command()
    async def play(self,ctx: commands.Context, *, search: wavelink.YouTubeTrack):
        if not ctx.author.voice:
            return await ctx.send("Ты не в голосовом канале!", delete_after = 10)
        if not ctx.voice_client:
            vc: wavelink.Player = await ctx.author.voice.channel.connect(cls = wavelink.Player) 
        else:
            vc: wavelink.Player = ctx.voice_client
        
        if vc.queue.is_empty and vc.is_playing:
            await vc.play(search)
            m = search.duration/60
            await ctx.send(f"Сейчас играет `{search.title}` продолжительностью `{round(m, 2)}` минут")
        else:
            await vc.queue.put_wait(search)
            await ctx.send(f"Добавлен {search.title} трек в очередь")
        vc.ctx = ctx
        setattr(vc, "loop", False)

我也遇到了这个错误

TypeError: Music.on_wavelink_track_end() got multiple values for argument 'track' 

另一个命令可以正常工作,但播放命令不会附加到 wavelink 队列,如果我们再次键入 play 只会播放新歌曲。

有什么想法吗?

简单添加自己 async def on_wavelink_track_end(self , player: wavelink.Player, track: wavelink.Track)

@commands.Cog.listener()
async def on_wavelink_track_end(player: wavelink.Player, track: wavelink.Track):

#You need to pass in `self` to here   ⤴

因此您的代码将如下所示

@commands.Cog.listener()
async def on_wavelink_track_end(self, player: wavelink.Player, track: wavelink.Track):
        ctx = player.ctx
        vc: player = ctx.voice_client

        if vc.loop:
            return await vc.play(track)
        
        next_song = vc.queue.get()
        await vc.play(next_song)
        await ctx.send(f"Сейчас играет {next_song.title}")


    @commands.command()
    async def play(self,ctx: commands.Context, *, search: wavelink.YouTubeTrack):
        if not ctx.author.voice:
            return await ctx.send("Ты не в голосовом канале!", delete_after = 10)
        if not ctx.voice_client:
            vc: wavelink.Player = await ctx.author.voice.channel.connect(cls = wavelink.Player) 
        else:
            vc: wavelink.Player = ctx.voice_client
        
        if vc.queue.is_empty and vc.is_playing:
            await vc.play(search)
            m = search.duration/60
            await ctx.send(f"Сейчас играет `{search.title}` продолжительностью `{round(m, 2)}` минут")
        else:
            await vc.queue.put_wait(search)
            await ctx.send(f"Добавлен {search.title} трек в очередь")
        vc.ctx = ctx
        setattr(vc, "loop", False)

This is probably it.

• Sxviaat