Discord音乐机器人调用FFmpegPCMAudio触发TypeError错误求助
Discord音乐机器人!play命令崩溃修复方案
错误原因
报错TypeError: discord.player.FFmpegPCMAudio() argument after ** must be a mapping, not set的核心问题是:调用FFmpegPCMAudio()时,通过**运算符展开的参数不是字典(映射类型),而是集合(set类型),导致参数解析失败。
修复步骤
- 定位问题代码
打开music_cog.py,找到调用discord.FFmpegPCMAudio()的代码段(通常在处理音频源、准备播放的逻辑里)。错误代码通常类似:
# 错误示例:使用集合而非字典传递参数 ffmpeg_options = {'-vn', '-b:a', '192k'} audio_source = discord.FFmpegPCMAudio(audio_link, **ffmpeg_options)
- 修正参数格式
将集合格式的参数改为字典,FFmpeg的命令行参数需要通过options键统一传入:
# 正确写法:字典格式传递参数 ffmpeg_options = { 'options': '-vn -b:a 192k' } audio_source = discord.FFmpegPCMAudio(audio_link, **ffmpeg_options)
或者直接省略**,直接传参:
audio_source = discord.FFmpegPCMAudio(audio_link, options='-vn -b:a 192k')
- 排查其他潜在问题
- 检查所有通过
**传递给FFmpegPCMAudio()的参数,确保都是字典类型,避免使用集合、列表等非映射结构。 - 如果使用yt-dlp/youtube-dl获取音频信息,确认返回的参数对象是字典,而非集合。
- 验证修复效果
修改代码后重启机器人,执行!play Rickroll命令,确认机器人发送播放信息后能正常播放,不再崩溃。
内容的提问来源于stack exchange,提问作者NoMex ukrad okap
相关产品推荐
相关产品推荐

