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

使用Wavelink实现斜杠命令遇类型注解不支持报错求助

问题根源

Discord斜杠命令的参数解析器仅支持原生基础类型(如字符串、数字等),无法直接识别wavelink.YouTubeTrack这类自定义类型,直接将其作为参数注解会触发类型不支持的报错。

解决方案

将参数类型改为str接收用户的搜索关键词,在命令内部手动调用Wavelink的搜索接口获取曲目对象,同时修复原代码中的逻辑问题:

async def play(self, interaction: Interaction, search: str):
    # 检查用户是否在语音频道
    if not interaction.user.voice:
        return await interaction.response.send_message("你得先加入一个语音频道!")
    
    # 延迟响应,避免长操作导致交互超时
    await interaction.response.defer()

    # 搜索目标曲目
    try:
        tracks = await wavelink.YouTubeTrack.search(search)
        if not tracks:
            return await interaction.followup.send("没找到匹配的曲目!")
        target_track = tracks[0]
    except Exception as e:
        return await interaction.followup.send(f"搜索出错:{str(e)}")

    # 获取或创建当前服务器的语音客户端
    vc = interaction.guild.voice_client
    if not vc:
        custom_player = ZbotPlayer
        vc: ZbotPlayer = await interaction.user.voice.channel.connect(cls=custom_player)
    
    # 构造消息嵌入
    embed = discord.Embed(
        title=target_track.title,
        url=target_track.uri,
        description=f"已添加到队列:{target_track.title} | 频道:{vc.channel.name}"
    )
    embed.set_author(name=interaction.user.display_name, icon_url=interaction.user.display_avatar.url)

    # 处理播放/入队逻辑
    if vc.is_playing():
        vc.queue.put(item=target_track)
        await interaction.followup.send(embed=embed)
    else:
        await vc.play(target_track)
        await interaction.followup.send(embed=embed)

关键修改说明

  • 把search参数的类型注解从wavelink.YouTubeTrack改为str,让斜杠命令能正常接收用户输入
  • 新增用户语音频道检查,提前拦截无效请求
  • 使用interaction.response.defer()延迟响应,避免搜索操作超时导致交互失败
  • 手动调用wavelink.YouTubeTrack.search()获取曲目对象,同时处理搜索失败的异常情况
  • 修复原代码中**重复调用interaction.response.send_message()**的错误(交互仅能被响应一次,后续消息需用followup.send())
  • 调整语音客户端的获取逻辑,从当前服务器(guild)获取,确保对应正确的语音频道

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.19 13:40:54