From 7799f0e2fe4192c5e381ee765e48f6efdabd3b8f Mon Sep 17 00:00:00 2001 From: Joey Hines Date: Sun, 26 Apr 2020 21:49:04 -0500 Subject: [PATCH] Added the cancel_event command + When an event is canceled, a notification is sent to all interested users + The message is then deleted and removed from the database --- src/main.rs | 33 +++++++++++++++++++++++++++++++-- 1 file changed, 31 insertions(+), 2 deletions(-) diff --git a/src/main.rs b/src/main.rs index 821115c..0186b74 100644 --- a/src/main.rs +++ b/src/main.rs @@ -38,7 +38,7 @@ const UNINTERESTED_EMOJI: &str = "\u{274C}"; /// Event commands group #[group] -#[commands(create_event, confirm_event)] +#[commands(create_event, confirm_event, cancel_event)] struct EventCommands; /// Struct for storing drafted events @@ -255,7 +255,7 @@ fn get_config(data: &Arc>) -> std::result::Result bool { if let Some(guild_id) = msg.guild_id { if let Ok(config) = get_config(&ctx.data) { @@ -372,6 +372,35 @@ fn create_event(ctx: &mut Context, msg: &Message, mut args: Args) -> CommandResu Ok(()) } +#[command] +/// Cancels an event +fn cancel_event(ctx: &mut Context, _msg: &Message, mut args: Args) -> CommandResult { + let config = get_config(&ctx.data)?; + + // Parse args + let event_name = args.single::()?.replace("\"", ""); + + let event = get_event_by_name(config.db_url.clone(), event_name)?; + let message_id = event.message_id.parse::()?; + let message = ctx.http.get_message(config.event_channel, message_id)?; + + let reaction_users = message + .reaction_users(&ctx.http, INTERESTED_EMOJI, None, None) + .unwrap_or(Vec::::new()); + + let string = &format!("**{}** has been canceled!", event.event_name.clone()); + + for user in reaction_users { + send_dm_message(&ctx.http, user, &string); + } + + remove_event(config.db_url.clone(), event.id)?; + + message.delete(&ctx)?; + + Ok(()) +} + embed_migrations!("migrations/"); fn main() -> clap::Result<()> { // Initialize arg parser