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/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)的定时任务;
  • call_cancel_schedule_task:根据任务 ID 取消执行中的定时提醒;
  • call_list_schedule_tasks:列出当前用户或群的所有活动定时任务。

因此,当你对支持 Function Calling 的 AI 对话核心说:“明天早上九点提醒我开会”时,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 点整)。