You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

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

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.10.29 01:06:06