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

Discord音乐机器人运行play方法触发FFmpegPCMAudio报错求助

Discord音乐机器人play函数报错修复方案

核心错误原因

你的代码存在1个明确的参数命名错误,直接导致了两个连锁报错:

  • 报错TypeError: __init__() got an unexpected keyword argument 'option':你定义的FFMPEG_OPTIONS字典中,给FFmpegPCMAudio传递的参数键名错误,discord.py规定的ffmpeg执行参数键名为options,你漏写了末尾的s
  • 报错AttributeError: 'FFmpegPCMAudio' object has no attribute '_process':属于上一个错误的连锁反应,由于FFmpegPCMAudio初始化失败,实例没有生成必要的内部属性_process,销毁对象触发清理逻辑时就会抛出该异常,修复第一个错误后该问题会自动消失

修复后的完整代码

async def play(self, ctx, url):
    ctx.voice_client.stop()
    # 仅修改option为options即可解决核心报错
    FFMPEG_OPTIONS = {'before_options': '-reconnect 1 -reconnect_streamed 1 -reconnect_delay_max 5', 'options': '-vn'}
    YDL_OPTIONS = {'format': 'bestaudio'}

    voice = ctx.voice_client
    with youtube_dl.YoutubeDL(YDL_OPTIONS) as ydl:
      info = ydl.extract_info(url, download=False)
      # 可选优化:直接用info.get('url')获取音频地址,避免手动取formats下标出错
      url2 = info['formats'][0]['url']

      voice.play(discord.FFmpegPCMAudio(url2, **FFMPEG_OPTIONS))

可选优化建议

如果后续出现youtube链接解析失败的问题,可以将已停止维护的youtube_dl替换为分支版本yt_dlp,仅需修改导入语句和初始化代码即可,功能完全兼容。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.10.03 23:30:02