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

discord.py中如何设置条件冷却,避免指定子命令触发冷却?

Discord.py 命令条件冷却实现方案

实现思路

默认的@commands.cooldown装饰器会对该命令的所有调用生效,无法区分不同参数场景,因此需要手动控制冷却校验逻辑,仅在执行实际工作操作时触发冷却校验。

具体实现代码

1. 导入依赖

from discord.ext import commands
from discord.ext.commands import Cooldown, CooldownMapping

2. 初始化冷却映射

# 配置规则:单用户每3600秒(1小时)可调用1次工作功能
work_cooldown = CooldownMapping(Cooldown(1, 3600, commands.BucketType.user))

3. 重写work命令逻辑

@bot.command(name='work')
async def work(ctx, arg = None):
    # 调用!work list时直接返回内容,不触发冷却
    if arg == 'list':
        # 此处填写你原有的工作列表展示逻辑
        await ctx.send("工作列表:\n1. 餐厅服务员 奖励:80-120金币\n2. 快递员 奖励:70-150金币")
        return

    # 非查询类请求,执行冷却校验
    bucket = work_cooldown.get_bucket(ctx.message)
    remaining_cd = bucket.update_rate_limit()
    if remaining_cd:
        # 冷却未结束时的提示逻辑,可自行调整格式
        await ctx.send(f"你刚完成工作不久,还需要休息{round(remaining_cd/60)}分钟才能再次工作")
        return

    # 冷却校验通过,执行正常工作逻辑
    # 此处填写你原有的工作执行、奖励发放逻辑
    await ctx.send("你完成了餐厅服务员的工作,获得了100金币")

说明

  • 该方案完全复用discord.py原生的冷却能力,不需要自行维护用户冷却时间的存储逻辑
  • 你可以根据业务需要扩展更多免冷却的参数场景,只需要在冷却校验前增加对应的判断分支即可

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.10.03 01:24:00