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
相关产品推荐
相关产品推荐

