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

Discord Bot开发:如何避免kick/ban指令误踢自身与机器人

Discord Bot 防误踢/误封禁校验实现方案

不需要硬编码你的ID来实现,通过discord.py内置的对象属性即可完成通用校验,逻辑如下:

需要新增的校验规则

  • 禁止操作机器人自身:判断被操作成员的ID是否等于机器人账号ID member.id == bot.user.id
  • 禁止操作指令调用者(也就是你自己):判断被操作成员是否等于指令发送者 member == ctx.author,你已经添加了@commands.is_owner()装饰器,只有所有者能调用指令,所以该判断可以完全避免你误操作自己

修改后的完整代码

@bot.command()
@commands.is_owner()
async def kick(ctx, member:discord.Member = None, *, reason="You smell bozo."):
    if member == None:
        await ctx.reply("*Check your arguments!*\n```/kick @MEMBER REASON(optional)```")
        return
    # 新增防误操作校验
    if member == ctx.author or member.id == bot.user.id:
        await ctx.reply("*你不能踢自己或者机器人*")
        return
    await member.kick(reason=reason)

@bot.command()
@commands.is_owner()
async def ban(ctx, member:discord.Member = None, *, reason="Bye Bye! :D."):
    if member == None:
        # 修复原代码中错误提示写的是/kick的问题
        await ctx.reply("*Check your arguments!*\n```/ban @MEMBER REASON(optional)```")
        return
    # 新增防误操作校验
    if member == ctx.author or member.id == bot.user.id:
        await ctx.reply("*你不能封禁自己或者机器人*")
        return
    await member.ban(reason=reason)

补充说明

如果后续你需要给bot添加多个管理员权限的调用者,不需要修改校验逻辑,ctx.author会自动适配为当前调用指令的用户,自动阻止所有管理员误操作自己。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.10.03 04:57:03