Discord机器人!clear命令无权限提示场景AttributeError报错修复求助
错误原因
- 你使用的是discord.py v1.0及以上的版本,该版本已经废弃移除了旧版本的
client.send_message方法,调用不存在的方法直接触发AttributeError报错。 - 现有代码没有补充无权限时删除用户触发消息的逻辑,不符合你的需求。
提示:请确保你的机器人已经被授予管理消息权限,否则删除消息操作会触发新的报错
修复后代码
首先确认你已经正确导入MissingPermissions依赖:
from discord.ext.commands import MissingPermissions
替换你原有的clear相关代码为以下内容:
@client.command(pass_context=True) @commands.has_permissions(administrator=True) async def clear(ctx, amount: int = 1000): # 删除管理员发送的命令触发消息 await ctx.message.delete() # 执行频道消息清理 await ctx.channel.purge(limit=amount) # 清理完成提示,3秒后自动删除避免刷屏,不需要可以删除该行 await ctx.send(f"已成功清理{amount}条消息", delete_after=3) @clear.error async def clear_error(ctx, error): if isinstance(error, MissingPermissions): # 删除无权限用户发送的命令触发消息 await ctx.message.delete() # 发送权限不足提示,3秒后自动删除 text = f"Sorry {ctx.message.author.mention}, you do not have permissions to do that!" await ctx.send(text, delete_after=3)
修改说明
- 把废弃的
client.send_message替换为ctx.send(),符合新版本discord.py的语法规范,直接解决本次报错。 - 分别在命令执行逻辑和错误处理逻辑中加入
await ctx.message.delete(),实现所有用户触发!clear命令时都会先删除对应的触发消息。 - 给
amount参数添加了int类型注解,自动把用户输入的参数转换为整数,避免输入非数字内容时触发额外报错。 - 可选添加了
delete_after参数实现提示消息自动删除,不需要可以直接删除该参数。
内容的提问来源于stack exchange,提问作者kepler
相关产品推荐
相关产品推荐

