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

Discord.py问题:如何让无ban_members权限用户看不到Slash Ban命令

解决Discord.py Hybrid命令隐藏无权限用户的问题

问题根源

你使用的@commands.has_permissions(ban_members=True)仅限制前缀命令的执行权限,对Slash命令(应用命令)的可见性无影响。要让无ban_members权限的用户看不到该Slash命令,需使用Discord.py针对应用命令的权限控制装饰器。

解决方案

添加@discord.app_commands.default_permissions(ban_members=True)装饰器,该装饰器会告知Discord:仅拥有对应权限的用户才能看到此Slash命令。同时保留原有装饰器以限制前缀命令的执行权限。

修改后的完整代码:

#cogs / admin/ ban.py
from discord.ext import commands
import discord, typing

class banUser(commands.Cog):
    def __init__(self, client):
        self.client = client

    @commands.hybrid_command()
    @commands.has_permissions(ban_members=True)  # 限制前缀命令的执行权限
    @discord.app_commands.default_permissions(ban_members=True)  # 设置Slash命令的可见权限
    @commands.cooldown(1, 10, commands.BucketType.user)
    async def ban_user(self, ctx, member: discord.Member, reason: typing.Optional[str]):
        """
        Ban certain members from your server.
        """
        await member.ban(reason = reason)
        await ctx.reply(f"{member} has been successfully banned from the server.", ephemeral=True)
        em = discord.Embed(color=discord.Color.from_rgb(0,0,255),title=f"**{member} has been banned from the server**.",description=f"{member} has been banned from the server for {reason}.")
        await ctx.send(embed=em)

async def setup(client):
    await client.add_cog(banUser(client))

补充说明

  • 装饰器顺序:@discord.app_commands.default_permissions需放在@commands.hybrid_command之后,确保正确作用于Slash命令模块。
  • 服务器权限覆盖:服务器管理员可在Discord后台「整合」页面,针对该命令自定义权限规则,此规则会覆盖代码中的默认权限设置。
  • 细粒度权限:若需针对特定角色或复杂逻辑限制,可使用@discord.app_commands.checks.has_role(角色ID/名称)或自定义检查函数,但这类方式仅限制命令执行而非隐藏,若要隐藏仍需配合default_permissions。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.29 16:44:58