如何让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
相关产品推荐
相关产品推荐

