You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

Wavelink中on_wavelink_track_end失效,队列歌曲无法自动播放如何修复?

修复音乐Bot队列后续歌曲无法自动播放的问题

问题现象

  • 播放完一首歌曲后,队列中的后续歌曲无法自动播放。

问题分析

  1. 监听器参数错误:on_wavelink_track_end的参数列表中包含了不存在的interaction参数,Wavelink的on_track_end事件触发时不会传入交互对象,导致后续调用interaction.response.send_message抛出异常,直接中断了自动播放逻辑。
  2. 冗余变量与类型注解错误:代码中重复获取vc变量且类型注解错误,实际上可以直接使用事件传入的player参数完成操作,无需重复获取。
  3. 消息发送方式错误:在非用户交互触发的事件中,使用interaction.response.send_message是无效的,该方法仅适用于用户发起的交互命令上下文。

修复步骤

  • 修正on_wavelink_track_end的参数列表,移除错误的interaction参数。
  • 删除冗余的vc变量,直接使用事件传入的player对象执行播放操作。
  • 将消息发送方式替换为通过服务器系统频道发送(或其他指定频道),避免依赖无效的交互上下文。
  • 调整loop属性的初始化位置,避免覆盖已有的循环状态设置。

修改后的代码

@commands.Cog.listener()
async def on_wavelink_track_end(self, player: wavelink.Player, track: wavelink.YouTubeTrack, reason):
    if player.loop:
        return await player.play(track)
    if not player.queue.is_empty:
        next_song = await player.queue.get_wait()
        await player.play(next_song)
        # 发送播放通知到服务器系统频道(若频道存在)
        if player.guild.system_channel:
            await player.guild.system_channel.send(f"正在播放 🎵 {next_song.title}")

2. 调整后的play命令

@app_commands.command(name="play", description="播放")
@app_commands.describe(search="搜尋")
async def play(self, interaction : discord.Interaction, search: str):
    guild = interaction.guild
    track = await wavelink.YouTubeTrack.search(search, return_first=True)

    if not guild.voice_client:
        vc: wavelink.Player = await interaction.user.voice.channel.connect(cls=wavelink.Player)
        # 仅在创建新播放器时初始化loop属性
        setattr(vc, "loop", False)
    else:
        vc: wavelink.Player = guild.voice_client

    if vc.queue.is_empty and not vc.is_playing():
        await vc.play(track)
        await interaction.response.send_message(f"正在播放 🎵 {track.title}")
    else:
        await vc.queue.put_wait(track)
        await interaction.response.send_message(f'新增 🎵 {track.title} 至佇列')

内容的提问来源于stack exchange,提问作者ezak

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.07.22 05:32:22