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
相关产品推荐
相关产品推荐

