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

如何在discord.py中重置斜杠命令的冷却时间?

解决discord.py斜杠命令条件跳过冷却的问题

要实现当代码中i == 1时不触发冷却限制,你需要手动管理冷却缓存——因为默认的冷却装饰器是在命令执行前检查的,无法直接根据命令内的条件跳过。以下是两种可行方案:

方案一:手动创建冷却映射(推荐)

先单独定义冷却规则和映射实例,方便在命令内直接操作缓存:

from discord import app_commands

# 定义冷却规则:15秒内可执行1次,按「服务器ID+用户ID」维度限制
cooldown_rule = app_commands.Cooldown(1, 15, key=lambda i: (i.guild_id, i.user.id))
# 基于规则创建冷却映射,用于存储用户的冷却记录
cooldown_map = app_commands.CooldownMapping.from_cooldown(cooldown_rule)

@client.tree.command(name="my_command")
# 使用动态冷却装饰器关联自定义的冷却映射
@app_commands.checks.dynamic_cooldown(cooldown_map, key=lambda i: (i.guild_id, i.user.id))
async def my_command(interaction: discord.Interaction):
    i = 1
    if i == 1:
        # 计算当前用户的冷却键值,移除缓存中的记录
        user_key = cooldown_rule.key(interaction)
        cooldown_map._cache.pop(user_key, None)
        await interaction.response.send_message("Cooldown shouldn't apply")
    else:
        await interaction.response.send_message("Cooldown should apply ")

方案二:从命令检查器中获取冷却映射

如果不想单独定义冷却实例,可以直接从命令的checks列表中找到冷却器并操作缓存:

from discord import app_commands

@client.tree.command(name="my_command")
@app_commands.checks.cooldown(1, 15, key=lambda i: (i.guild_id, i.user.id))
async def my_command(interaction: discord.Interaction):
    i = 1
    if i == 1:
        # 遍历命令的检查器,找到冷却规则实例
        for check in my_command.checks:
            if isinstance(check, app_commands.Cooldown):
                # 移除当前用户的冷却记录
                user_key = check.key(interaction)
                check._mapping._cache.pop(user_key, None)
                break
        await interaction.response.send_message("Cooldown shouldn't apply")
    else:
        await interaction.response.send_message("Cooldown should apply ")

说明

  • 两种方案的核心逻辑一致:当满足i == 1的条件时,删除当前用户在冷却缓存中的记录,这样后续执行命令时不会触发冷却限制。
  • _cache是discord.py内部的私有属性,当前版本可用,但如果库更新可能会有变动,优先推荐方案一。

内容的提问来源于stack exchange,提问作者bbc3

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.13 09:01:12