discord.py中如何编辑角色权限?调用Role.edit方法报参数错误如何解决?
错误根因
- discord.py的
Role.edit()方法签名为edit(self, *, reason=None, **fields):其中*是Python语法里的强制关键字参数标记,代表*之后的所有传入值,必须以参数名=参数值的形式传参,完全不支持额外位置参数。你传入的"permissions(administrator)"是无意义的字符串位置参数,方法检测到除self外多接收了1个位置参数,直接抛出TypeError。 - 角色权限的设置值必须是
discord.Permissions类型的权限对象,不能是拼接生成的字符串文本,否则即使传了关键字参数也会触发类型错误。
正确实现代码
import discord from discord.ext import commands @bot.command() async def EditRoleTest(ctx): # 1. 构造目标权限:生成带Administrator权限的权限对象 admin_permission = discord.Permissions(administrator=True) # 2. 获取目标角色,通过permissions=关键字参数传入权限对象 target_role = ctx.guild.roles[1] await target_role.edit(permissions=admin_permission) # 3. 可选:给指令执行回执 await ctx.send(f"已完成角色权限配置:{target_role.name} 已获得Administrator权限")
实操注意事项
- 不要依赖
ctx.guild.roles[1]定位测试角色:该列表的排序完全跟随服务器的角色上下排序,[1]位置的角色可能和你预期的不一致,更稳妥的方式是通过固定角色ID获取,比如target_role = ctx.guild.get_role(你的目标角色数字ID)。 - 如果不想清空角色原有权限、仅追加Administrator权限,可以读取角色当前权限集修改后再回写:
current_perms = target_role.permissions current_perms.update(administrator=True) await target_role.edit(permissions=current_perms) - 权限前置要求:bot自身必须开启管理角色权限,且bot的最高角色等级在服务器角色列表里的位置,必须高于你要编辑的目标角色,否则参数正确的情况下,也会被Discord接口拒绝,返回权限不足的报错。
- 测试完成后记得及时回收目标角色的Administrator权限,避免安全风险。
内容的提问来源于stack exchange,提问作者LoahL
相关产品推荐
相关产品推荐

