discord.py封禁命令问题:如何阻止用户封禁自身并显示错误
修复Discord.py封禁命令中用户可封禁自身的问题
你的代码核心问题是缩进错误,检查用户是否为自身的逻辑被放在了return语句之后,导致这部分判断永远不会被执行。另外原代码缺少实际执行封禁的核心操作,这里一并补充完整。
修正后的代码
@client.command() @commands.has_permissions(ban_members=True) async def ban(ctx, member: discord.User = None, reason=None): # 检查是否指定了要封禁的成员 if member is None: await ctx.channel.send('请指定要封禁的成员') return # 禁止用户封禁自身 if ctx.author.id == member.id: await ctx.channel.send("你不能封禁自己") return # 构建封禁通知内容 message = f"You have been banned on {ctx.guild.name} for {reason}" if reason else f"You have been banned on {ctx.guild.name}" try: await member.send(message) except discord.Forbidden: await ctx.channel.send(f"无法给用户{member.mention}发送私信") # 执行实际封禁操作 await member.ban(reason=reason) await ctx.channel.send(f"已封禁用户{member.mention},原因:{reason if reason else '无'}")
关键修改说明
- 调整
if ctx.author.id == member.id代码块的缩进,将其移至member == None判断的return之后,确保成员存在后才执行自身检查逻辑 - 补充了核心的
await member.ban()操作,否则命令只会发私信不会实际封禁用户 - 优化异常捕获逻辑,明确捕获无法发送私信的情况并反馈给命令发起者
- 增加了无理由时的默认提示文本,避免格式错误
内容的提问来源于stack exchange,提问作者Wiki
相关产品推荐
相关产品推荐

