使用discord.py开发的Discord机器人无法在语音频道播放音频是什么原因?
Discord.py重写版语音播放故障解决方案
代码层面可修复问题
你的代码存在以下几个明显错误,会直接导致音频无法正常播放:
- 实例化Bot时未传入已配置的intents
你已经声明了intents参数但未传入Bot构造函数,会导致权限校验失败,将初始化代码修改为:bot = discord.ext.commands.Bot(command_prefix="$", intents=intents) - 音频源加载与play调用顺序错误
你先调用vc.play()加载原始音频流,随后又替换为带音量控制的音频源,会直接中断播放流程,正确的写法是先完成音频源封装再调用播放:audio_source = discord.FFmpegPCMAudio('你的音频文件绝对路径') audio_source = discord.PCMVolumeTransformer(audio_source, volume=1.0) vc.play(audio_source) - 未处理机器人已连接语音频道的场景
如果机器人已经加入过当前服务器的语音频道,重复调用connect()会抛出异常终止代码运行,需要先判断连接状态:if not ctx.voice_client: await channel.connect() vc = ctx.voice_client
通用故障原因(多机器人同时出现故障大概率属于以下情况)
- 缺少FFmpeg运行依赖
discord.py语音播放完全依赖FFmpeg工具,需确保运行机器人的设备已安装FFmpeg且已加入系统环境变量,可执行ffmpeg -version验证安装状态,Windows设备未配置环境变量的话需要手动指定FFmpeg路径:audio_source = discord.FFmpegPCMAudio('文件路径', executable='你的FFmpeg.exe绝对路径') - 开发者后台与邀请权限未配置
进入Discord开发者平台的机器人管理页,开启「Privileged Gateway Intents」下的Voice State Intent权限,同时邀请机器人进服时必须勾选Connect、Speak两个语音相关权限。 - 网络连接限制
如果机器人部署在国内网络环境,未做特殊网络配置的情况下无法正常连接Discord的语音服务器,会出现可加入频道但无声音输出的情况,同网络环境下的其他机器人也会出现相同故障。 - 语音依赖版本不匹配
重写版discord.py需要安装配套的语音组件,执行pip install discord.py[voice]安装官方适配的pynacl等依赖,不要单独安装零散组件避免版本不兼容。 - 频道权限配置错误
确认当前语音频道没有禁止机器人所在角色的连接、说话权限,也没有手动将机器人设置为服务器静音状态。
内容的提问来源于stack exchange,提问作者en1gma
相关产品推荐
相关产品推荐

