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

Discord Python Bot 无法执行kick踢出成员命令 代码错误排查问询

Discord Bot 踢出成员功能代码问题排查

存在的问题列表

  • 参数定义语法错误:member = discord.Member是错误写法,此处应该用类型标注符号:而非赋值符=,你当前的写法是把discord.Member类本身作为参数默认值,不是用户传入的成员实例,无法调用kick方法。
  • 空私信调用报错:await member.send()没有传入任何消息内容,属于非法调用,会直接抛出异常中断函数运行;且就算补充内容,也有可能因为对方关闭了服务器私信权限导致发送失败,建议添加异常捕获。
  • 错误处理逻辑完全错误:for i in MissingPermissions:遍历的是异常类本身而非错误实例中存储的缺失权限列表,正确应该遍历error.missing_permissions属性。另外需要确认你已经从discord.ext.commands导入了MissingPermissions异常类。
  • 冗余参数:discord.py v1.0及以上版本默认会自动传递上下文,pass_context = True是过时写法,可以直接删除。
  • 额外运行前置条件检查:除了代码问题,还要确认你的Bot已经被授予kick_members权限,且Bot的角色排序高于所有你需要踢出的成员的角色排序,否则踢出操作会被Discord接口拒绝。

修复后代码

# 确保顶部已经导入需要的模块
from discord.ext.commands import MissingPermissions

@client.command()
@commands.has_permissions(kick_members = True)
async def kick(ctx, member: discord.Member, *, reason = "未说明原因"):
    # 尝试先给用户发踢出通知
    try:
        await member.send(f"你已经被 {ctx.author.name} 踢出服务器,原因:{reason}")
    except:
        # 私信发送失败不中断踢出流程
        pass
    await member.kick(reason = reason)
    await ctx.message.add_reaction("✅")
    await ctx.send(f"{member} 已被踢出,原因:{reason},操作人:{ctx.author.name}")

@kick.error
async def kick_error(ctx, error):
    if isinstance(error, MissingPermissions):
        missing = "\n".join(error.missing_permissions)
        await ctx.send(f"你缺少以下执行权限:\n{missing}")
    # 补充参数缺失的错误处理
    elif isinstance(error, commands.MissingRequiredArgument):
        await ctx.send("请指定要踢出的成员,格式示例:!kick @违规用户 广告刷屏")

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.09.24 16:45:05