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

如何在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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.09.01 18:57:48