Skip to content

跨时区动态定时任务 ​

(伸了个懒腰,看了眼时钟)滴答滴答……无论主人身处哪个时区,晨曦的第一缕阳光还是深夜的星空,我都在按时守候着呢~

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) ​

动态定时任务支持两种到点执行模式:

  1. message(AI 拟人问候/祝福): 到点由 AI 根据设定的 prompt_or_message 提示词自动生成富有拟人温度的个性化早安、叫起或生日祝福。例如:“今天是用户的生日,以温柔真诚的语气为TA送上独一无二的生日祝福与陪伴感言”。
  2. tool(自动化功能预执行): 预存其他插件工具(如 call_asmr、call_pick_music)到点自动触发执行,无需人工输入。

因此,当你对支持 Function Calling 的 AI 对话核心说:“明天早上九点提醒我开会”或“每年10月24号祝我生日快乐”时,AI 就会直接调用该工具将任务存入数据库!

如果你想做什么,应该改哪里? ​

  1. 群里想要每天下午五点半自动发摸鱼人日历:
    • 打开 run/scheduled_tasks/config.yaml 确认 摸鱼人日历.enable: true,且 time: 17/30;
    • 在目标群内发送:/cron add 摸鱼人日历。
  2. 不想让 Bot 私聊向普通人推送早晚安:
    • 保持 onlyTrustUser: true,并将 trustThreshold 调高(例如 10),只有达到相应权限等级的好友才会收到问候。
  3. 想修改某项推送的具体时间:
    • 直接修改对应任务下的 time 字段,格式为 小时/分钟(例如 12/00 表示中午 12 点整)。
  4. 让 Bot 记住自己的生日每年送祝福:
    • 直接在对话中对 Bot 说:“记一下我的生日是10月24日,每年早上8点半祝我生日快乐”,AI 会自动创建 recur_type: yearly 任务,永久持久化保存!