如何在DSharpPlus中修改@everyone的频道权限实现/lock命令
Discord /lock 频道锁定命令实现
功能说明
- 命令作用:执行后将指定频道内
@everyone默认角色的发送消息权限设置为禁用,实现普通用户无法在目标频道发言的锁定效果 - 调用权限:仅拥有
管理频道(ManageChannels)权限的用户可触发该命令
参考Python实现(已验证可运行)
@commands.has_permissions(manage_channels=True) async def lock(ctx: SlashContext, channel): await channel.set_permissions(ctx.guild.default_role, send_messages=False)
补全后的C#实现(适配DSharpPlus斜杠命令框架,匹配现有代码结构)
[SlashCommand("lock", "锁定指定频道,禁止普通用户发送消息")] [SlashRequirePermissions(Permissions.ManageChannels)] public async Task Lock(InteractionContext ctx, [Option("channel", "需要锁定的目标频道")] DiscordChannel channel) { // 延迟响应避免交互3秒超时 await ctx.DeferAsync(); // 获取服务器@everyone默认角色,对应Python实现中的ctx.guild.default_role var everyoneRole = ctx.Guild.EveryoneRole; // 添加频道权限覆盖:仅拒绝@everyone的发送消息权限,其余权限不做修改 await channel.AddOverwriteAsync( everyoneRole, allow: Permissions.None, deny: Permissions.SendMessages ); // 返回操作结果 await ctx.EditResponseAsync(new DiscordWebhookBuilder() .WithContent($"✅ 已成功锁定频道 {channel.Mention},普通用户暂时无法在此频道发送消息。")); }
逻辑说明
ctx.DeferAsync():Discord要求斜杠命令必须在3秒内返回响应,延迟响应急速交互,避免操作耗时触发超时错误channel.AddOverwriteAsync():对应Python实现的set_permissions方法,三个参数分别为授权对象、显式允许的权限、显式拒绝的权限,这里仅设置拒绝发送消息,和参考Python实现效果完全一致
内容的提问来源于stack exchange,提问作者Mr. Pro Cat
相关产品推荐
相关产品推荐

