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

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.26 00:54:18