You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多
文档控制台
免费开始使用

如何用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_permissionsis_owner)可以避免用户通过其他方式触发命令,双重保障安全性。
  • 如果需要针对单个服务器设置隐藏命令,可以在定义命令时通过guilds=[服务器ID]指定生效服务器,再配置权限。

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

火山引擎 最新活动