discord.py开发机器人报command has no attribute has_permisions错误如何解决
错误原因
该报错通常由以下几种情况引发:
- 装饰器拼写错误:错误提示中的
has_permisions拼写少了一个s,若代码中拼写有误就会触发属性不存在的报错 - discord.py库版本异常:replit平台默认安装的库可能存在版本过低、安装了非官方分支的问题,旧版本不存在对应装饰器属性
- 变量覆盖问题:其他代码中如果定义了名为
commands的变量/函数,会覆盖导入的discord.ext.commands模块,导致找不到对应属性 - 冗余参数冲突:
@bot.command()中配置的pass_context=True是discord.py 1.0版本之前的旧参数,新版本中该参数已经废弃,可能引发异常
解决方案
- 检查装饰器拼写,确保写为
@commands.has_permissions(administrator=True),注意permissions有两个s - 升级discord.py到官方最新稳定版,在replit的shell终端执行命令:
pip install --upgrade discord.py
- 移除
@bot.command()中的pass_context=True参数,新版本默认自动传递上下文,不需要额外配置 - 检查所有代码中是否有命名为
commands的自定义变量、函数,修改重名的自定义命名即可 - 修复purge命令的逻辑错误,避免purge删除触发消息后,后续
ctx.message.delete()找不到消息对象引发二次报错,修正后的代码参考:
#Purge command @bot.command() @commands.has_permissions(administrator=True) async def purge(ctx, limit: int): # 先删除触发命令的消息 await ctx.message.delete() # 清理指定数量的消息 await ctx.channel.purge(limit=limit) # 发送提示3秒后自动删除提示 notice = await ctx.send("Messages purged 👌") await asyncio.sleep(3) await notice.delete()
内容的提问来源于stack exchange,提问作者evo
相关产品推荐
相关产品推荐

