From a8c1d47132d4c47863ae7dc5b6f4816d024d3de4 Mon Sep 17 00:00:00 2001 From: salmonik Date: Wed, 4 Nov 2026 01:31:45 +0100 Subject: cron: validate expressions and allocate ids atomically --- src/commands/cron.rs | 14 ++++++++++++-- 1 file changed, 12 insertions(+), 2 deletions(-) (limited to 'src/commands') diff --git a/src/commands/cron.rs b/src/commands/cron.rs index 301ae3d..94cf955 100644 --- a/src/commands/cron.rs +++ b/src/commands/cron.rs @@ -44,7 +44,12 @@ pub async fn dodaj_audio( ctx.data().copyparty.build_url_no_pw(&audio_filename) }; - let guild_id = ctx.guild_id().ok_or_else(lang::err_not_in_guild)?; + if let Err(e) = crate::tasks::parse_cron(&cron_expression) { + ctx.say(lang::fmt_cron_invalid(&cron_expression, &e.to_string())) + .await?; + return Ok(()); + } + let guild_id = ctx.guild_id().ok_or_else(|| lang::err_not_in_guild())?; if !ctx.data().copyparty.is_own_url(&full_url) { crate::net::ensure_public_http_url(&full_url).await?; } @@ -77,7 +82,12 @@ pub async fn dodaj_wiadomość( _ => return Err(lang::err_bad_channel_type()), }; - let guild_id = ctx.guild_id().ok_or_else(lang::err_not_in_guild)?; + if let Err(e) = crate::tasks::parse_cron(&cron_expression) { + ctx.say(lang::fmt_cron_invalid(&cron_expression, &e.to_string())) + .await?; + return Ok(()); + } + let guild_id = ctx.guild_id().ok_or_else(|| lang::err_not_in_guild())?; database::add_cron_job( &ctx.data().db_pool, guild_id.get() as i64, -- cgit v1.2.3