Discord.py Bot 配置管理员权限后无法踢出成员问题排查
Discord.py 踢出命令失效问题原因汇总
常见失效成因
- 角色层级限制:Discord 服务器的角色权限遵循严格的上下位排序规则,即便机器人已被赋予管理员权限,只要其角色排序等于或低于被踢出目标的角色排序,就无法对目标执行踢出操作。这也是你无法踢出同权限等级弃用机器人的核心原因。
- 网关权限未开启:需要在 Discord 开发者后台的机器人设置页,开启
Server Members Intent权限,否则机器人无法正常执行成员管理类操作。 - 命令调用格式错误:调用踢人命令时如果没有正确@目标成员、目标成员不在当前服务器,都会触发操作失败。
- 代码语法问题:你提供的原始代码中
await ctx.send(+member.mention + ...行存在多余的前置+号,属于语法错误,不过该问题通常会直接抛出代码报错,不属于本次无报错但操作失效的诱因。
可正常运行的代码示例
@client.command() ##kick @has_permissions(kick_members = True) # 校验命令调用者是否有踢出成员权限 async def kick(ctx, member : discord.Member, *, reason=None): try: await member.kick(reason=reason) await ctx.send(member.mention + " has been sent to the ministry of love for reeducation.") except: await ctx.send("You cannot!")
已验证的解决方案
你后续排查得出的结论符合Discord官方权限规则:仅当被操作目标的角色层级低于机器人的角色层级时,踢人命令才可正常触发,更换角色层级更低的普通用户测试即可验证功能正常。
内容的提问来源于stack exchange,提问作者Chezyy
相关产品推荐
相关产品推荐

