定时任务

Cron

private val daily = cronScheduling("0 0 9 * * *", useGreeting = false) {
    sendGroup(SendMessage.builder("早上好").build(), sourceId = "GROUP_ID")
}

Cron 为六段格式,包含秒。时区由 bot.system.zoneOffset 控制。源码和示例中同时存在 ?* 的写法,例如 0 0 12 ? * THU

周期与启动后任务

private val poll = periodicScheduling(
    period = 30.seconds,
    initialDelay = 5.seconds,
    fixedRate = true,
    useGreeting = false,
) { /* 轮询 */ }

private val init = applicationInitScheduling {
    log().info("适配器已完成初始化")
}

fixedRate=false 表示以上一次完成时间为基准;true 以上一次计划时间为基准。耗时可能超过周期时,固定速率更容易连续追赶,应配合互斥、超时或跳过策略。

useGreeting

默认 true:晚安事件后进入闲时,任务会延迟到下次早安再执行。监控、Token 刷新、关键 Webhook 补偿等不能暂停的任务要设为 false

Scheduling BotApi 限制

调度任务没有当前会话,不能 sendReply()self()。它根据目标 ID 从所有 SchedulingBotApiSupport 中选择能发送的 Adapter;sendAllGroup 会遍历全部可用 Adapter。目标 ID 在多平台重复时,先匹配到的支持实现会被使用。

任务在适配器加载完成后才开始等待触发时间。异常会被记录并尝试调度下一次,不会永久停止整个调度器。