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

如何让Discord机器人命令忽略用户权限为他人添加角色?

Discord机器人giverole命令权限错误及修复方案

错误原因分析

你遇到的50013 Missing Permissions错误,不是执行命令的用户权限不足,而是机器人自身缺少必要权限或角色位置不正确。即使你是服务器所有者,机器人的权限和角色层级是独立于用户权限的,机器人自身权限不够就会触发该报错。

解决步骤

1. 配置机器人权限与角色位置

  • 给机器人分配**管理角色(Manage Roles)**权限:进入服务器设置→角色→找到机器人的角色→开启「管理角色」权限。
  • 调整机器人角色位置:确保机器人的角色在服务器角色列表中的位置高于要添加的"role"角色(包括刚创建的)。Discord规则不允许低层级角色给用户添加高层级角色。

2. 修正代码中的错误

你的代码存在两处关键问题:创建新角色后未正确赋值role变量、add_roles调用参数逻辑错误。修正后的代码如下:

@bot.command()
async def giverole(ctx, person_name):
    guild = ctx.guild
    role_name = "role"
    role = discord.utils.get(guild.roles, name=role_name)
    
    # 不存在目标角色则创建并赋值
    if not role:
        role = await guild.create_role(name=role_name, color=discord.Color(0x000000))
    
    # 确保机器人角色层级足够,再调整目标角色位置
    if bot.top_role.position > role.position:
        await role.edit(position=10)
    
    # 查找目标用户(建议改用用户ID或@提及,避免重名问题)
    person = discord.utils.get(guild.members, name=person_name)
    if not person:
        await ctx.send(f"找不到用户 {person_name}")
        return
    
    # 给目标用户添加角色
    await person.add_roles(role)
    await ctx.send(f"已给 {person.display_name} 添加 {role.name} 角色")

关于「忽略执行用户权限」

不存在让命令完全忽略执行用户权限的说法,当前错误核心是机器人自身权限不足,而非用户权限问题。只要机器人拥有足够权限,无论执行命令的用户是什么权限(只要能调用命令),都能完成角色添加操作。如果想限制仅特定用户能调用该命令,可以添加权限装饰器(比如@commands.has_permissions(manage_roles=True)),但这和你当前的问题无关。

内容的提问来源于stack exchange,提问作者hiwhatsup

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.06.25 12:57:38