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
master
Joey Hines 2020-04-26 21:49:04 -05:00
parent bff5684b38
commit 7799f0e2fe
1 changed files with 31 additions and 2 deletions

View File

@ -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<RwLock<ShareMap>>) -> std::result::Result<HypeBotConfig
Ok(config.clone())
}
// Checks if the user has permission to use this bot
/// Checks if the user has permission to use this bot
fn permission_check(ctx: &mut Context, msg: &Message, _command_name: &str) -> 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::<String>()?.replace("\"", "");
let event = get_event_by_name(config.db_url.clone(), event_name)?;
let message_id = event.message_id.parse::<u64>()?;
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::<User>::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