Discord.py报错:'Command' object has no attribute 'cooldown' 问题排查
问题原因与解决方案
核心原因
90%以上的该类报错都是装饰器顺序错误导致的:discord.py的功能装饰器(比如冷却、权限校验等)必须放在@bot.command()装饰器的上方,你当前的写法顺序颠倒,导致cooldown装饰器作用在了已经生成的Command对象上,而非原始函数上,触发属性不存在报错。
解决方案
方案1:调整装饰器顺序(推荐)
把@commands.cooldown放到@bot.command()之前即可,正确写法示例:
@commands.cooldown(1, 60, commands.BucketType.user) @bot.command() async def your_command(ctx): # 命令具体逻辑
方案2:手动给命令对象设置冷却
如果调整顺序后仍然报错,可以直接给生成的命令对象手动绑定冷却规则:
@bot.command() async def your_command(ctx): # 命令具体逻辑 # 手动设置冷却 your_command.cooldown = commands.CooldownMapping.from_cooldown(1, 60, commands.BucketType.user)
方案3:排查环境与命名冲突
如果以上方案都无效,按以下步骤排查:
- 确认当前使用的discord相关库版本和之前正常运行时的版本一致,衍生分支(如pycord、nextcord)的特殊API规则要对应官方文档
- 检查代码中是否存在命名冲突,比如自定义了名为
cooldown的变量、命令,或者错误覆盖了commands模块对象 - 确认
commands模块的导入路径正确,示例导入写法:from discord.ext import commands
内容的提问来源于stack exchange,提问作者gwendal
相关产品推荐
相关产品推荐

