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

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.10.09 00:39:02