Discord.py 重复机器人活动场景下的关键词触发冷却计时器实现问题
Discord机器人单关键词独立冷却实现方案
- 核心思路:通过字典存储每个关键词的最后一次成功触发时间,每次匹配到关键词后校验时间差,仅当超过设定冷却周期时才执行@提醒操作,保证不同关键词的冷却逻辑完全独立。
首先导入依赖模块并初始化全局配置:
import time # 配置冷却时长,单位为秒,此处设置为5分钟 COOLDOWN_SECONDS = 300 # 存储结构:key为匹配到的关键词,value为最后一次成功触发的时间戳 keyword_last_trigger = {}
修改你原有的触发逻辑即可:
keyword_match = keyword_check(total_text) if keyword_match[0]: # 此处假设keyword_match[1]为匹配到的具体关键词,可根据你的keyword_check实际返回调整 matched_keyword = keyword_match[1] current_time = time.time() # 校验是否满足冷却条件:关键词无触发记录 或 距离上次触发已超过冷却时长 if (matched_keyword not in keyword_last_trigger) or (current_time - keyword_last_trigger[matched_keyword] > COOLDOWN_SECONDS): await message.channel.send("<@&role_id>") # Discord@角色的标准格式为<@&角色ID>,可按需调整 # 更新该关键词的最后触发时间 keyword_last_trigger[matched_keyword] = current_time
- 扩展适配方案:如果你的机器人需要支持多服务器/多频道的独立冷却,可将字典的key调整为
(服务器ID, 频道ID, 匹配关键词)的元组,实现不同场景下的冷却规则隔离。 - 持久化适配:如果需要机器人重启后仍保留冷却记录,可将
keyword_last_trigger的数据存储到本地文件或轻量数据库中,重启时读取恢复即可。
内容的提问来源于stack exchange,提问作者UnthinkableDecimal
相关产品推荐
相关产品推荐

