如何用Discord.py为升级用户添加角色?遇NoneType属性错误
问题原因及修复方案
错误根源
报错AttributeError: 'NoneType' object has no attribute 'roles'说明server变量是None,也就是bot.get_guild(<ID>)未成功获取到服务器对象。同时代码存在两处关键错误:
1. 客户端变量名不匹配
你定义的客户端实例是client = discord.Client(...),但函数里误用了bot.get_guild,导致无法找到正确的客户端对象,返回None。
2. 错误调用add_roles
message.author.id是用户ID(整数类型),而add_roles需要调用在discord.Member对象上,不能直接用ID调用。
修复后的代码
intents = discord.Intents.all() client = discord.Client(intents=intents) async def assignRoles(message, level): # 替换为你的服务器ID(整数类型) server = client.get_guild(1234567890) if not server: print("无法获取服务器对象,请检查机器人是否在该服务器内,或ID是否正确") return role = discord.utils.get(server.roles, name="LEVEL 5-10") if not role: print("找不到名为'LEVEL 5-10'的角色") return # 确保操作对象是服务器成员 member = message.author if not isinstance(member, discord.Member): print("无法获取用户的服务器成员对象") return try: await member.add_roles(role) print("hooray") except Exception as e: print(f"添加角色失败: {e}")
额外注意事项
- 确保机器人在目标服务器内,且拥有管理角色的权限
- 服务器ID要替换为正确的整数,不要保留占位符
- 角色名称需完全匹配(含大小写、空格),若不确定可改用角色ID获取:
server.get_role(角色ID),可靠性更高
内容的提问来源于stack exchange,提问作者JackLaund0n
相关产品推荐
相关产品推荐

