如何修复Discord音乐机器人VoiceState对象无voice_channel属性报错
错误原因
这个报错来自discord.py版本迭代带来的API变更:你当前使用的是v1.0及以上的新版discord.py,旧版v0.16.x中VoiceState对象的voice_channel属性在新版里已被重命名为channel,同时旧的客户端加入语音方法client.join_voice_channel也已废弃。
修复代码
直接替换你的join命令代码即可:
from discord.ext import commands import random import youtube_dl # 新版discord.py默认传递ctx,不需要额外配置pass_context=True @client.command() async def join(ctx): # 先判断调用命令的用户是否已加入语音频道,避免额外报错 if not ctx.author.voice: await ctx.send("请先加入一个语音频道再使用该命令") return # 新版API使用voice.channel获取用户所在语音频道 channel = ctx.author.voice.channel # 新版加入语音频道的方法为频道对象的connect方法 await channel.connect()
补充说明
- 若你坚持使用旧版语法,可执行
pip install discord.py==0.16.12降级库版本,但旧版本已停止维护,存在兼容和安全风险,不推荐。 - 请确保你的机器人账号已被授予语音频道的
连接、发言权限,否则即使代码正确也无法正常加入频道。
内容的提问来源于stack exchange,提问作者Papzinooo
相关产品推荐
相关产品推荐

