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

如何在pycord中禁止无对应权限的用户使用服务器斜杠命令

Pycord斜杠指令权限限制方案

你代码中@slash_command.has_permissions的写法不属于Pycord支持的语法,Pycord有两种成熟的权限限制方案可选:

方案1:运行时权限校验(和原discord.py逻辑一致)

这种方案用户可以看到指令,但调用时会校验权限,校验不通过直接拦截,和你原来的使用习惯完全匹配。
直接复用discord.py的commands.has_permissions装饰器即可,注意两点:

  • 装饰器顺序:权限装饰器要放在@slash_command下方
  • 斜杠指令不需要用*标记可变参数,直接声明参数即可,ctx.reply建议替换为ctx.respond适配斜杠指令的响应逻辑
    修正后代码示例:
from discord.ext import commands

# 修正后代码
@slash_command(name = "ban")
@commands.has_permissions(ban_members = True)
async def ban_command(self, ctx, user_name : discord.Member, reason = None):
    if await Permission.check_permission(ctx, 1):
        return None
    await user_name.ban(reason = reason)
    if reason != None:
        await ctx.respond(str(user_name) + "님이 차단되셨습니다." + "\n이유 : " + str(reason), mention_author = False)
    else:
        await ctx.respond(str(user_name) + "님이 차단되셨습니다.", mention_author = False)

如果需要自定义权限不足的提示,可以为指令添加错误处理回调,使用ephemeral=True参数可以让提示仅对调用者可见,不会公屏刷屏:

@ban_command.error
async def ban_command_error(self, ctx, error):
    if isinstance(error, commands.MissingPermissions):
        await ctx.respond("你没有封禁成员的权限,无法使用该指令", ephemeral=True)

方案2:Discord端前置权限校验(体验更优)

这种方案会直接把权限规则注册到Discord接口,没有对应权限的用户在服务器的指令列表里根本看不到这个指令,不需要调用后再拦截。
使用Pycord提供的default_permissions装饰器即可:

from discord.commands import default_permissions

# 修正后代码
@slash_command(name = "ban")
@default_permissions(ban_members = True)
async def ban_command(self, ctx, user_name : discord.Member, reason = None):
    if await Permission.check_permission(ctx, 1):
        return None
    await user_name.ban(reason = reason)
    if reason != None:
        await ctx.respond(str(user_name) + "님이 차단되셨습니다." + "\n이유 : " + str(reason), mention_author = False)
    else:
        await ctx.respond(str(user_name) + "님이 차단되셨습니다.", mention_author = False)

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.09.24 22:15:08