From b9ae04667d9e1247de0bf499a7b4726f9a158d4b Mon Sep 17 00:00:00 2001 From: killf Date: Mon, 2 Mar 2026 18:19:01 +0800 Subject: [PATCH] fix(cron): support feishu announcement fallback to lark config When using feishu with scheduled tasks, the system could not deliver announcements because it only looked for [channels_config.feishu] and did not fall back to [channels_config.lark] with use_feishu=true. This change allows feishu announcements to use the lark config as a fallback when use_feishu is enabled, fixing the delivery path for users who configure under the lark section. Fixes inability to send feishu messages when channel is configured as Lark. Co-Authored-By: Claude Sonnet 4.6 --- src/cron/scheduler.rs | 26 +++++++++++++++++++------- 1 file changed, 19 insertions(+), 7 deletions(-) diff --git a/src/cron/scheduler.rs b/src/cron/scheduler.rs index 567651533..ea7cea3a6 100644 --- a/src/cron/scheduler.rs +++ b/src/cron/scheduler.rs @@ -469,13 +469,25 @@ pub(crate) async fn deliver_announcement( "feishu" => { #[cfg(feature = "channel-lark")] { - let feishu = config - .channels_config - .feishu - .as_ref() - .ok_or_else(|| anyhow::anyhow!("feishu channel not configured"))?; - let channel = LarkChannel::from_feishu_config(feishu); - channel.send(&SendMessage::new(output, target)).await?; + // Try [channels_config.feishu] first, then fall back to [channels_config.lark] with use_feishu=true + if let Some(feishu_cfg) = &config.channels_config.feishu { + let channel = LarkChannel::from_feishu_config(feishu_cfg); + channel.send(&SendMessage::new(output, target)).await?; + } else if let Some(lark_cfg) = &config.channels_config.lark { + if lark_cfg.use_feishu { + let channel = LarkChannel::from_config(lark_cfg); + channel.send(&SendMessage::new(output, target)).await?; + } else { + anyhow::bail!( + "feishu channel not configured: [channels_config.feishu] is missing \ + and [channels_config.lark] exists but use_feishu=false" + ); + } + } else { + anyhow::bail!("feishu channel not configured: \ + neither [channels_config.feishu] nor [channels_config.lark] \ + with use_feishu=true is configured"); + } } #[cfg(not(feature = "channel-lark"))] {