discord.py运行报错'Member' has no attribute 'server'如何解决
报错原因
你遇到的'Member' has no attribute 'server'报错是因为discord.py v1.0版本之后,原有的server属性已经统一重命名为guild,旧属性已被移除。同时你的代码还有另外2处不符合当前discord.py版本规范的写法,也需要同步修改。
修复步骤
- 第一步:替换属性名,将
user.server.roles修改为user.guild.roles - 第二步:修正身份组添加方法,discord.py v1.0+ 给成员添加身份组的方法改为直接调用Member实例的
add_roles方法,将await client.add_roles(user, role)修改为await user.add_roles(role) - 第三步:启用必要的Intents,当前Discord API要求必须显式声明启用机器人的相关权限意图,否则无法获取成员信息、监听反应事件,需要先在Discord开发者平台的机器人设置页开启
Server Members Intent、Message Content Intent两个开关,再在代码中初始化时声明启用意图。
完整修复后代码
import discord from discord.ext import commands # 启用必要的意图 intents = discord.Intents.default() intents.members = True intents.message_content = True intents.reactions = True client = discord.Client(intents=intents) @client.event async def on_ready(): print('ready') @client.event async def on_reaction_add(reaction, user): # 排除机器人自己的反应 if user.bot: return channel = reaction.message.channel await channel.send(f'{user.name} 已使用 {reaction.emoji} 表情回应,原消息内容为:{reaction.message.content}') # 替换server为guild role = discord.utils.get(user.guild.roles, name='Bot') if role: # 调用成员的add_roles方法 await user.add_roles(role) else: await channel.send("未找到名为Bot的身份组,请检查配置") client.run('你的机器人TOKEN')
额外注意事项
- 机器人自身的身份组排序必须高于你要授予的「Bot」身份组,否则会因权限不足无法授予身份组
- 确保机器人拥有「管理身份组」的服务器权限
- 不要泄露你的机器人TOKEN,避免被他人恶意使用
内容的提问来源于stack exchange,提问作者Python_Master
相关产品推荐
相关产品推荐

