跨时区动态定时任务
(伸了个懒腰,看了眼时钟)滴答滴答……无论主人身处哪个时区,晨曦的第一缕阳光还是深夜的星空,我都在按时守候着呢~
Eridanus 拥有极其强大的定时任务引擎。它不仅包含系统级预设的内置广播任务(早安天气、晚安问候、Bangumi 新番推送、Epic 喜加一、摸鱼日历等),更开放了 Function Calling 级动态任务注册机制,允许用户或 AI 自主添加、撤销与查询多周期、多时区的专属定时提醒。
源码入口与核心配置
- 代码入口:
run/scheduled_tasks/scheduledTasks.py(系统内置任务与群订阅控制)run/scheduled_tasks/schedule_tool.py(Function Calling 动态定时引擎)run/scheduled_tasks/schedule_service/scheduler_engine.py(跨时区调度与循环计算器)
- 配置文件路径:
run/scheduled_tasks/config.yaml
配置片段展示了丰富且细致的内置任务体系:
yaml
scheduledTasks: # 系统内置定时任务配置
早安问候: # 私聊晨间推送
enable: true
time: 8/3 # 推送时间格式:时/分(08:03)
trustThreshold: 9 # 权限等级门槛,低于此值的用户不会收到推送
onlyTrustUser: true # 仅向受信任用户私聊推送
晚安问候: # 私聊晚安提示
enable: true
text: "晚安!" # 若开启 aiReplyCore 则会自动转化为生动对话
time: 22/31
trustThreshold: 9
onlyTrustUser: true
bangumi: # 番剧动态推送
enable: true
text: "晚上好,这里是今天的bangumi推送"
time: 19/16
摸鱼人日历: # 摸鱼日历推送
enable: true
text: "真没用啊,又在摸鱼了吧,杂鱼❤️"
time: 17/30
epic喜加一: # Epic 周免游戏提醒
enable: true
time: 16/40
jm每日推送: # JM 今日热门排行
enable: true
time: 16/58
text: "📖 该打捞了少爷"群管理与测试指令
群订阅管理(在群聊中发送)
| 指令格式 | 示例 | 作用说明 |
|---|---|---|
/cron add <任务名称> | /cron add 摸鱼人日历 | 将当前群加入指定定时任务的广播推送名单 |
/cron remove <任务名称> | /cron remove 摸鱼人日历 | 将当前群从指定定时任务的广播名单中移除 |
Master 手动即时测试
Master 发送对应指令可立即验证卡片渲染与推送逻辑:
测试定时任务测试晚安问候今日天文单向历
动态任务工具声明(Function Calling)
在 run/scheduled_tasks/__init__.py 中,框架为 AI 核心注册了动态调度工具:
call_create_schedule_task:创建单次(once)、每日(daily)、工作日(workday)、周末(weekend)、每周(weekly)或**每年循环(yearly)**的定时任务;call_cancel_schedule_task:根据任务 ID 或关键词取消执行中的定时提醒;call_list_schedule_tasks:列出当前用户或群的所有活动定时任务。
支持的循环周期模式(recur_type)
| 循环模式 | 枚举值 | 适用场景与时间格式示例 |
|---|---|---|
| 单次任务 | once | "30分钟后提醒我喝水"、"2026-10-25 09:00:00" |
| 每天循环 | daily | "每天08:30叫我起床"、"22:00" |
| 每周特定日 | weekly | "每周一和周五下午3点开会"(搭配 weekdays: "周一,周五") |
| 工作日 | workday | 周一至周五自动提醒 |
| 周末 | weekend | 周六周日休假提醒 |
| 年度循环 🆕 | yearly | 专为每年生日祝福、周年纪念日设计(时间如 "10-24 08:30") |
动作类型(action_type)
动态定时任务支持两种到点执行模式:
message(AI 拟人问候/祝福): 到点由 AI 根据设定的prompt_or_message提示词自动生成富有拟人温度的个性化早安、叫起或生日祝福。例如:“今天是用户的生日,以温柔真诚的语气为TA送上独一无二的生日祝福与陪伴感言”。tool(自动化功能预执行): 预存其他插件工具(如call_asmr、call_pick_music)到点自动触发执行,无需人工输入。
因此,当你对支持 Function Calling 的 AI 对话核心说:“明天早上九点提醒我开会”或“每年10月24号祝我生日快乐”时,AI 就会直接调用该工具将任务存入数据库!
如果你想做什么,应该改哪里?
- 群里想要每天下午五点半自动发摸鱼人日历:
- 打开
run/scheduled_tasks/config.yaml确认摸鱼人日历.enable: true,且time: 17/30; - 在目标群内发送:
/cron add 摸鱼人日历。
- 打开
- 不想让 Bot 私聊向普通人推送早晚安:
- 保持
onlyTrustUser: true,并将trustThreshold调高(例如10),只有达到相应权限等级的好友才会收到问候。
- 保持
- 想修改某项推送的具体时间:
- 直接修改对应任务下的
time字段,格式为小时/分钟(例如12/00表示中午 12 点整)。
- 直接修改对应任务下的
- 让 Bot 记住自己的生日每年送祝福:
- 直接在对话中对 Bot 说:“记一下我的生日是10月24日,每年早上8点半祝我生日快乐”,AI 会自动创建
recur_type: yearly任务,永久持久化保存!
- 直接在对话中对 Bot 说:“记一下我的生日是10月24日,每年早上8点半祝我生日快乐”,AI 会自动创建