Discord.py权限提升命令报错:'int'对象无'id'属性
解决
!mod命令的'int' object has no attribute 'id'异常 我一眼就看出问题出在哪了——你调用add_roles的方式完全错误,这才触发了这个异常。让我一步步给你修正并解释:
错误原因分析
你的代码里这一行是核心问题:
await discord.Member.add_roles(392763334052544522, atomic=True)
有两个关键错误:
- 调用方式错误:
add_roles是discord.Member类的实例方法,必须通过具体的成员对象(也就是你要提升权限的member变量)来调用,而不是直接用discord.Member这个类调用。 - 参数类型错误:
add_roles需要传入的是discord.Role对象,不是角色ID的整数。当你直接传整数时,Discord.py内部会尝试读取这个对象的id属性,整数显然没有这个属性,所以抛出了'int' object has no attribute 'id'的异常。
修正后的完整代码
@commands.command(name='mod', hidden=True) #仅管理员、机器人角色和服务器创建者可使用 @commands.has_any_role("role1","role2", "role3") async def mod(self, ctx, member: discord.Member = None): try: if member is None: await ctx.send('请指定要提升权限的用户!') return if member == ctx.author: await ctx.send('你已经是管理员了哦!') return # 先通过ID获取Moderator角色对象 moderator_role_id = 392763334052544522 moderator_role = ctx.guild.get_role(moderator_role_id) if not moderator_role: await ctx.send(f'找不到ID为{moderator_role_id}的角色,请检查角色ID是否正确!') return # 调用成员实例的add_roles方法,传入角色对象 await member.add_roles(moderator_role, atomic=True) await ctx.send(f'成功将{member.mention}提升为Moderator!') except Exception as e: await ctx.send(f'提升{member}权限时出错:{str(e)}') print(f"\n{ctx.author}尝试提升{member}权限时出错。异常信息:{str(e)}")
额外优化说明
- 把
ctx.message.author简化成了ctx.author,这是Discord.py提供的快捷方式,效果完全一样。 - 添加了角色不存在的判断逻辑,避免因为角色ID错误导致新的异常。
- 增加了权限提升成功的反馈消息,让用户知道操作完成。
- 把
member == None改成了更Pythonic的member is None。
内容的提问来源于stack exchange,提问作者Carlos Mediavilla
相关产品推荐
相关产品推荐

