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

discord.py删除消息命令报错求助:AttributeError与TypeError

解决Discord机器人!deleteMessages命令的两类错误

错误1:AttributeError: 'Context'对象没有'purge'属性

问题根源

purge()是Discord.py中TextChannel类的方法,只能通过频道对象调用,你直接用ctx.purge()是错误的,因为Context对象本身没有这个方法。

修复代码

把命令里的调用语句修改为:

# limit参数指定删除条数,+1是为了顺带删除触发命令的这条消息
await ctx.channel.purge(limit=int(amount)+1)

错误2:TypeError: deleteMessages_error() takes 0 positional arguments but 2 were given

问题根源

命令的错误处理函数必须接收两个参数:ctx(上下文)和error(错误对象),你只定义了ctx,导致参数不匹配。另外建议判断错误类型,避免所有错误都提示权限不足。

修复代码

把错误处理函数修改为:

@deleteMessages.error
async def deleteMessages_error(ctx, error):
    if isinstance(error, commands.MissingPermissions):
        await ctx.send("你没有执行该命令的权限。")
    elif isinstance(error, commands.BadArgument):
        await ctx.send("请输入有效的数字作为删除数量。")
    else:
        await ctx.send(f"执行命令时出错:{str(error)}")

完整修复后的deleteMessages命令代码

@client.command()
@has_permissions(kick_members=True)
async def deleteMessages(ctx, amount):
    try:
        delete_count = int(amount)
        if delete_count <= 0:
            await ctx.send("删除数量必须大于0。")
            return
        # 删除指定数量消息+命令本身
        await ctx.channel.purge(limit=delete_count + 1)
        # 发送提示后自动删除这条提示
        await ctx.send(f"已成功删除{delete_count}条消息。", delete_after=3)
    except ValueError:
        await ctx.send("请输入有效的数字。")

@deleteMessages.error
async def deleteMessages_error(ctx, error):
    if isinstance(error, commands.MissingPermissions):
        await ctx.send("你没有执行该命令的权限。")
    elif isinstance(error, commands.MissingRequiredArgument):
        await ctx.send("请指定要删除的消息数量,用法:!deleteMessages <数量>")
    else:
        await ctx.send(f"命令执行出错:{str(error)}")

额外注意点

  • 机器人必须拥有管理消息的服务器权限,否则purge方法会执行失败
  • 短时间内大量删除消息会触发Discord的速率限制,Discord.py会自动处理,但可能有延迟

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.22 00:09:21