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
相关产品推荐
相关产品推荐

