mod sender; use std::env; use log::info; use serenity::client::Context; use sqlx::{Executor, MySql}; use tokio::time::{sleep_until, Duration, Instant}; type Database = MySql; pub async fn initialize(ctx: Context, pool: impl Executor<'_, Database = Database> + Copy) { let remind_interval = env::var("REMIND_INTERVAL") .map(|inner| inner.parse::().ok()) .ok() .flatten() .unwrap_or(10); loop { let sleep_to = Instant::now() + Duration::from_secs(remind_interval); let reminders = sender::Reminder::fetch_reminders(pool).await; if reminders.len() > 0 { info!("Preparing to send {} reminders.", reminders.len()); for reminder in reminders { reminder.send(pool, ctx.clone()).await; } } sleep_until(sleep_to).await; } }