Discord电台机器人报错:'Member'对象无'voice'属性求助
解决Discord机器人
AttributeError: 'Member' object has no attribute 'voice'问题 1. 启用必要的网关意图
这个错误大概率是因为未开启members和voice_states特权意图。Discord.py v2.x版本起,必须显式启用这些意图才能获取成员的语音状态信息。
在代码中添加意图配置:
import discord from discord.ext import commands # 初始化意图,开启必要权限 intents = discord.Intents.default() intents.members = True intents.voice_states = True # 初始化机器人时传入意图 bot = commands.Bot(command_prefix="你的命令前缀", intents=intents)
同时登录Discord开发者平台,进入你的机器人应用页面,找到Privileged Gateway Intents板块,打开Server Members Intent和Voice States Intent开关并保存更改。
2. 限制命令仅在服务器内执行
如果用户在DM中执行命令,ctx.author会是discord.User对象而非discord.Member,User对象没有voice属性。需要先判断命令执行环境:
@bot.command() async def join(ctx): # 检查是否在服务器频道 if not ctx.guild: await ctx.send("这个命令只能在服务器内使用!") return # 获取用户语音状态 voice_state = ctx.author.voice if not voice_state: await ctx.send("你得先加入一个语音频道!") return # 连接到用户所在的语音频道 await voice_state.channel.connect()
3. 确认Discord.py版本
确保使用Discord.py v2.x及以上版本,旧版本的意图机制和属性逻辑存在差异。可以通过以下命令检查版本:
pip show discord.py
如果版本过低,执行升级:
pip install --upgrade discord.py
内容的提问来源于stack exchange,提问作者Gambriwis
相关产品推荐
相关产品推荐

