如何用Discord.py实现仅管理员可见的隐藏斜杠命令?
解决方案
在Discord.py中,可以通过命令权限配置结合校验规则,实现仅特定用户可见的隐藏斜杠命令,具体实现方法如下:
1. 用default_permissions控制命令可见性
在定义需要隐藏的命令时,通过default_permissions参数指定仅管理员/服务器所有者拥有权限,无权限用户的斜杠命令列表里会自动隐藏这些命令:
from discord import app_commands from discord.ext import commands import discord class AdminCmds(commands.Cog): def __init__(self, bot: commands.Bot): self.bot = bot # 修改消息命令(仅管理员可见) @app_commands.command(name="changemessage", description="(ADMIN) 修改猫咪出现和捕获的提示消息") @app_commands.default_permissions(administrator=True) @app_commands.checks.has_permissions(administrator=True) async def changemessage(self, interaction: discord.Interaction): # 这里写命令的具体逻辑 await interaction.response.send_message("消息配置已更新", ephemeral=True) # 修改时间设置命令(仅管理员可见) @app_commands.command(name="changetimings", description="(ADMIN) 修改猫咪出现的时间间隔") @app_commands.default_permissions(administrator=True) @app_commands.checks.has_permissions(administrator=True) async def changetimings(self, interaction: discord.Interaction): # 这里写命令的具体逻辑 await interaction.response.send_message("时间配置已更新", ephemeral=True) # 加载该cog到机器人 async def setup(bot: commands.Bot): await bot.add_cog(AdminCmds(bot))
2. 严格限制仅服务器所有者访问
如果要确保只有服务器所有者能看到和执行命令,替换权限校验为is_owner()即可:
@app_commands.command(name="changemessage", description="(ADMIN) 修改猫咪出现和捕获的提示消息") @app_commands.default_permissions(administrator=True) @app_commands.checks.is_owner() async def changemessage(self, interaction: discord.Interaction): await interaction.response.send_message("消息配置已更新", ephemeral=True)
关键说明
default_permissions是命令的默认可见权限,服务器管理员可在Discord后台修改,但默认状态下无权限用户看不到这些命令。- 结合权限校验(
has_permissions或is_owner)可以避免用户通过其他方式触发命令,双重保障安全性。 - 如果需要针对单个服务器设置隐藏命令,可以在定义命令时通过
guilds=[服务器ID]指定生效服务器,再配置权限。
内容的提问来源于stack exchange,提问作者Mike




