如何设置D#+命令对无管理员/所有者等特定权限用户隐藏?
配置D#+命令实现权限控制(仅特定权限用户可见)
方法1:用内置特性快速指定权限
直接给命令加权限校验特性,没有对应权限的用户会自动看不到这些命令:
- 给管理员专属命令加
[RequirePermissions]特性:
using DSharpPlus.SlashCommands; using DSharpPlus.Entities; public class AdminModule : ApplicationCommandModule { [SlashCommand("admin_clean", "清理服务器垃圾消息(仅管理员可用)")] [RequirePermissions(Permissions.Administrator)] public async Task CleanCommand(InteractionContext ctx) { await ctx.CreateResponseAsync(InteractionResponseType.ChannelMessageWithSource, new DiscordInteractionResponseBuilder().WithContent("开始清理消息...")); } }
- 给服务器所有者专属命令加
[RequireGuildOwner]特性:
[SlashCommand("server_config", "修改服务器核心配置(仅所有者可用)")] [RequireGuildOwner] public async Task ConfigCommand(InteractionContext ctx) { await ctx.CreateResponseAsync(InteractionResponseType.ChannelMessageWithSource, new DiscordInteractionResponseBuilder().WithContent("打开服务器配置面板...")); }
原理很简单:D#+会自动做权限校验,没权限的用户在命令列表里根本刷不出这些命令,就算手动调用也会被拦截。
方法2:自定义权限检查(适配复杂场景)
如果需要更灵活的权限逻辑(比如指定特定角色、白名单用户ID),可以自己写校验规则:
- 先写一个自定义校验特性:
public class RequireTrustedRole : CheckBaseAttribute { public override Task<bool> ExecuteChecksAsync(InteractionContext ctx) { // 这里替换成你要校验的角色ID var trustedRole = ctx.Guild.GetRole(123456789012345678); // 校验逻辑:用户有目标角色 或者 是服务器所有者 bool hasPermission = ctx.Member.Roles.Contains(trustedRole) || ctx.Member.IsOwner; return Task.FromResult(hasPermission); } }
- 把这个特性加到命令上:
[SlashCommand("trusted_action", "仅信任角色/所有者可见的操作")] [RequireTrustedRole] public async Task TrustedCommand(InteractionContext ctx) { await ctx.CreateResponseAsync(InteractionResponseType.ChannelMessageWithSource, new DiscordInteractionResponseBuilder().WithContent("执行信任用户专属操作...")); }
注意点
- 机器人本身得有足够权限(比如读取成员权限、管理应用命令),不然权限校验会失效。
- 如果是全局命令,权限规则会在所有服务器生效;要针对单服务器配置的话,建议注册服务器专属命令。
内容的提问来源于stack exchange,提问作者user20554274
相关产品推荐
相关产品推荐

