diff --git a/Cargo.lock b/Cargo.lock index 7100a27..d951c55 100644 --- a/Cargo.lock +++ b/Cargo.lock @@ -466,6 +466,7 @@ dependencies = [ "serde 1.0.106 (registry+https://github.com/rust-lang/crates.io-index)", "serde_derive 1.0.106 (registry+https://github.com/rust-lang/crates.io-index)", "serenity 0.8.4 (registry+https://github.com/rust-lang/crates.io-index)", + "strfmt 0.1.6 (registry+https://github.com/rust-lang/crates.io-index)", ] [[package]] @@ -1319,6 +1320,11 @@ name = "static_assertions" version = "1.1.0" source = "registry+https://github.com/rust-lang/crates.io-index" +[[package]] +name = "strfmt" +version = "0.1.6" +source = "registry+https://github.com/rust-lang/crates.io-index" + [[package]] name = "strsim" version = "0.8.0" @@ -1885,6 +1891,7 @@ dependencies = [ "checksum smallvec 1.3.0 (registry+https://github.com/rust-lang/crates.io-index)" = "05720e22615919e4734f6a99ceae50d00226c3c5aca406e102ebc33298214e0a" "checksum spin 0.5.2 (registry+https://github.com/rust-lang/crates.io-index)" = "6e63cff320ae2c57904679ba7cb63280a3dc4613885beafb148ee7bf9aa9042d" "checksum static_assertions 1.1.0 (registry+https://github.com/rust-lang/crates.io-index)" = "a2eb9349b6444b326872e140eb1cf5e7c522154d69e7a0ffb0fb81c06b37543f" +"checksum strfmt 0.1.6 (registry+https://github.com/rust-lang/crates.io-index)" = "b278b244ef7aa5852b277f52dd0c6cac3a109919e1f6d699adde63251227a30f" "checksum strsim 0.8.0 (registry+https://github.com/rust-lang/crates.io-index)" = "8ea5119cdb4c55b55d432abb513a0429384878c15dde60cc77b1c99de1a95a6a" "checksum syn 1.0.17 (registry+https://github.com/rust-lang/crates.io-index)" = "0df0eb663f387145cab623dea85b09c2c5b4b0aef44e945d928e682fce71bb03" "checksum textwrap 0.11.0 (registry+https://github.com/rust-lang/crates.io-index)" = "d326610f408c7a4eb6f51c37c330e496b08506c9457c9d34287ecc38809fb060" diff --git a/Cargo.toml b/Cargo.toml index 88a1eb0..e7d4ae0 100644 --- a/Cargo.toml +++ b/Cargo.toml @@ -17,6 +17,7 @@ diesel = { version = "1.4.0", features = ["mysql", "chrono"] } diesel_migrations = "1.4.0" log = "0.4.8" log4rs = "0.11.0" +strfmt = "0.1.6" [dependencies.serenity] version = "0.8.4" diff --git a/src/database/models.rs b/src/database/models.rs index a560b80..8c6346d 100644 --- a/src/database/models.rs +++ b/src/database/models.rs @@ -1,7 +1,7 @@ use super::schema::events; use chrono::NaiveDateTime; -#[derive(Queryable, Clone)] +#[derive(Queryable, Clone, Debug)] pub struct Event { /// Event ID pub id: i32, @@ -32,7 +32,7 @@ impl Into for Event { } } -#[derive(Insertable, Clone)] +#[derive(Insertable, Clone, Debug)] #[table_name = "events"] pub struct NewEvent { /// Event name diff --git a/src/discord/mod.rs b/src/discord/mod.rs index 64b1f80..85d1e89 100644 --- a/src/discord/mod.rs +++ b/src/discord/mod.rs @@ -10,15 +10,12 @@ use serenity::prelude::{Context, RwLock, ShareMap}; use serenity::utils::Colour; use serenity::Result; use std::sync::Arc; +use strfmt::strfmt; +use std::collections::HashMap; pub mod events; /// Send a message to a reaction user -/// -/// Message will be sent in the format -/// ``` -/// "{msg_text} **event_name**" -/// ``` pub fn send_message_to_reaction_users(ctx: &Context, reaction: &Reaction, msg_text: &str) { if let Ok(config) = get_config(&ctx.data) { let db_link = config.db_url.clone(); @@ -31,8 +28,21 @@ pub fn send_message_to_reaction_users(ctx: &Context, reaction: &Reaction, msg_te } }; - // Format message - let msg: String = format!("{} **{}**", msg_text, event.event_name); + let event_utc_time = DateTime::::from_utc(event.event_time.clone(), Utc); + let current_utc_time = chrono::offset::Utc::now(); + + let msg; + + if event_utc_time > current_utc_time { + // Format message + let mut fmt = HashMap::new(); + fmt.insert("event".to_string(), event.event_name); + msg = strfmt(msg_text, &fmt).unwrap(); + } + else { + msg = format!("**{}** has already started!", &event.event_name) + } + if let Ok(user) = reaction.user(&ctx.http) { send_dm_message(&ctx.http, user, &msg); diff --git a/src/main.rs b/src/main.rs index 3449dd2..7137c01 100644 --- a/src/main.rs +++ b/src/main.rs @@ -75,7 +75,7 @@ impl EventHandler for Handler { send_message_to_reaction_users( &ctx, &reaction, - "Hello, you are now receiving reminders for", + "Hello, you are now receiving reminders for **{event}**", ); } } @@ -86,7 +86,7 @@ impl EventHandler for Handler { send_message_to_reaction_users( &ctx, &reaction, - "Hello, you are no longer receiving reminders for", + "Hello, you are no longer receiving reminders for **{event}**", ); } } @@ -127,10 +127,11 @@ fn send_reminders(cache_and_http: &Arc, data: &Arc() { // Get time to event let utc_time = DateTime::::from_utc(event.event_time.clone(), Utc); - let time_to_event = (utc_time - chrono::offset::Utc::now()).num_minutes(); + let current_time = chrono::offset::Utc::now(); + let time_to_event = (utc_time - current_time).num_minutes(); // If the event starts in less than 10 minutes - if time_to_event <= 10 && time_to_event > 0 && event.reminder_sent == 1 { - // Get message isd + if time_to_event <= 10 && time_to_event > 0 && event.reminder_sent < 1 { + // Get message id if let Ok(message) = http.get_message(event_channel_id, message_id) { let reaction_users = message .reaction_users(&http, INTERESTED_EMOJI, None, None)