diff --git a/src/database/mod.rs b/src/database/mod.rs index 26eba32..66bdc4c 100644 --- a/src/database/mod.rs +++ b/src/database/mod.rs @@ -13,17 +13,26 @@ pub fn establish_connection(database_url: String) -> MysqlConnection { .expect(&format!("Error connecting to {}", database_url)) } /// Insert an event into the database -pub fn insert_event(databse_url: String, new_event: &NewEvent) -> Event { +pub fn insert_event(database_url: String, new_event: &NewEvent) -> Result { use schema::events::dsl::{events, id}; - let connection = establish_connection(databse_url); + let connection = establish_connection(database_url); diesel::insert_into(events) .values(new_event) .execute(&connection) .expect("Error saving event"); - events.order(id).first(&connection).unwrap() + events.order(id).first(&connection) +} + +/// Remove event +pub fn remove_event(database_url: String, event_id: i32) -> Result { + use schema::events::dsl::{events, id}; + + let connection = establish_connection(database_url); + + diesel::delete(events.filter(id.eq(event_id))).execute(&connection) } /// Get an event by name diff --git a/src/main.rs b/src/main.rs index 4bd5bdd..e37fff2 100644 --- a/src/main.rs +++ b/src/main.rs @@ -11,7 +11,7 @@ use serenity::client::Client; use serenity::framework::standard::macros::{command, group}; use serenity::framework::standard::Args; use serenity::framework::standard::{CommandError, CommandResult, StandardFramework}; -use serenity::http::{Http}; +use serenity::http::Http; use serenity::model::channel::{Message, Reaction}; use serenity::model::prelude::{ChannelId, Ready}; use serenity::prelude::TypeMapKey; @@ -58,14 +58,22 @@ impl EventHandler for Handler { /// On reaction add fn reaction_add(&self, ctx: Context, reaction: Reaction) { if reaction.emoji.as_data() == INTERESTED_EMOJI { - send_message_to_reaction_users(&ctx, &reaction, "Hello, you are now receiving reminders for"); + send_message_to_reaction_users( + &ctx, + &reaction, + "Hello, you are now receiving reminders for", + ); } } /// On reaction remove fn reaction_remove(&self, ctx: Context, reaction: Reaction) { if reaction.emoji.as_data() == INTERESTED_EMOJI { - send_message_to_reaction_users(&ctx, &reaction, "Hello, you are no longer receiving reminders for"); + send_message_to_reaction_users( + &ctx, + &reaction, + "Hello, you are no longer receiving reminders for", + ); } } @@ -75,7 +83,6 @@ impl EventHandler for Handler { } } - /// Thread to send reminders to users fn send_reminders(cache_and_http: &Arc, data: &Arc>) { let sleep_duration = Duration::from_secs(60); @@ -88,21 +95,23 @@ fn send_reminders(cache_and_http: &Arc, data: &Arc::from_utc(event.event_time.clone(), Utc); - let time_to_event = (utc_time - chrono::offset::Utc::now()).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 let Ok(message_id) = event.message_id.parse::() { + if let Ok(message_id) = event.message_id.parse::() { + // 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(); + // 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 let Ok(message) = http.get_message(event_channel_id, message_id) { let reaction_users = message .reaction_users(&http, INTERESTED_EMOJI, None, None) .unwrap_or(Vec::::new()); // Build reminder message - let msg: String = format!("Hello! **{}** begins in **{} minutes**!", - &event.event_name, time_to_event); + let msg: String = format!( + "Hello! **{}** begins in **{} minutes**!", + &event.event_name, time_to_event + ); // Send reminder to each reacted user for user in reaction_users { @@ -110,8 +119,10 @@ fn send_reminders(cache_and_http: &Arc, data: &Arc CommandResult reminder_sent: 0, }; - insert_event(config.db_url.clone(), &new_event); + insert_event(config.db_url.clone(), &new_event).ok(); } else { msg.reply(&ctx, format!("You do not have a pending event!"))?; } @@ -419,4 +430,3 @@ fn main() -> clap::Result<()> { Ok(()) } -