Discord.py交互斜杠指令冷却重置求助:彩票Bot需跳过冷却
解决Discord.py中指定场景重置命令冷却的问题
你用app_commands.checks.cooldown设置的冷却,直接调用remove_check()是不对的——这个方法是把整个冷却检查器从命令上移除,而非重置单个用户的冷却状态。要针对特定用户/场景重置冷却,得操作冷却桶(cooldown bucket)的实例。
正确的重置方式
discord.py的冷却系统会把每个用户的冷却数据存在命令的_buckets属性里,你可以通过生成对应key来重置目标用户的冷却:
把你代码里的这段:
test.remove_check() #place remove cool down here
替换成:
# 获取该命令的冷却桶实例 cool_down = test._buckets # 生成和冷却设置中一致的key(对应你设置的lambda (i.guild_id, i.user.id)) user_key = cool_down.key(interaction) # 重置该key对应的冷却 cool_down.reset(user_key)
为什么之前的方法无效
remove_check()会把整个冷却检查器从命令上删掉,之后所有用户都不会再触发冷却,这显然不是你要的“特定场景跳过”。而通过_buckets.reset(key),只会清除当前交互用户在对应服务器下的冷却记录,完全符合你的需求。
注意事项
- 确保
test命令确实绑定了冷却检查器,不然_buckets属性可能不存在 - 生成key时必须和你设置
cooldown时的keylambda逻辑完全一致,不然找不到对应的冷却记录
内容的提问来源于stack exchange,提问作者Do0ks
相关产品推荐
相关产品推荐

