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

Discord.py 全服务器锁定命令异常:仅锁定当前执行频道求助

解决Discord.py全服务器锁定命令仅锁定当前频道的问题

你的代码仅锁定了执行命令的当前频道,原因是只对ctx.channel单个频道设置了权限。要实现全服务器锁定,需要遍历服务器内所有频道,逐一修改默认角色的发消息权限。

修改后的代码如下:

import discord
from discord.ext import commands
import asyncio

@client.command()
@commands.has_permissions(manage_channels=True)
async def lockdown(ctx):
    # 遍历服务器所有频道
    for channel in ctx.guild.channels:
        # 仅针对文本频道设置权限(语音/分类频道无需修改send_messages权限)
        if isinstance(channel, discord.TextChannel):
            await channel.set_permissions(ctx.guild.default_role, send_messages=False)
    
    embedVar3 = discord.Embed(
        title="Locked",
        description=f'***Server has been locked.***',
        colour=0x0000ff
    )
    await ctx.send(embed=embedVar3)

补充说明

  • 代码增加了频道类型判断,避免对非文本频道做无效操作
  • 若服务器频道数量较多,可在set_permissions后添加await asyncio.sleep(0.2),避免触发Discord速率限制
  • 可配套实现解锁命令,逻辑一致,只需将send_messages=False改为send_messages=True

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.25 20:48:19