Discord.py给消息作者分配角色时报Member无add_role属性如何解决
问题修复方案
错误原因
你使用的是discord.py 2.0及以上版本,该版本已移除旧版的Member.add_role()单数方法,因此调用时会触发属性不存在的报错。
修复步骤
- 替换角色添加方法
将原代码中的await member.add_role(role)替换为新版APIawait member.add_roles(role)即可,该方法支持同时传入多个角色对象。 - 可选优化
增加角色存在性校验逻辑,避免因角色不存在导致的二次报错。
完整修正后代码
if message.content.startswith(prefix + 'give admin'): if message.author.id == ownerid: member = message.author role_name = 'Admin' guild = client.get_guild(guildid) role = discord.utils.get(guild.roles, name=role_name) if role: # 校验角色是否存在 await member.add_roles(role) # 替换为新版方法 # 可选添加操作原因,方便服务器审计 # await member.add_roles(role, reason="Owner self-grant admin") else: await message.channel.send(f"未找到名为{role_name}的角色")
额外注意事项
需确认Discord开发者后台的机器人设置中已开启Server Members Intent和Message Content Intent,同时代码初始化客户端时已正确配置对应权限:
import discord intents = discord.Intents.default() intents.members = True # 开启成员相关权限 intents.message_content = True # 开启消息内容读取权限,否则无法匹配命令前缀 client = discord.Client(intents=intents)
已确认的权限条件(Admin角色层级低于机器人、机器人有管理员权限)无需额外调整。
内容的提问来源于stack exchange,提问作者Professor Puddle
相关产品推荐
相关产品推荐

