diff --git a/src/commands/reminder_cmds.rs b/src/commands/reminder_cmds.rs index 997030b..55ff6f2 100644 --- a/src/commands/reminder_cmds.rs +++ b/src/commands/reminder_cmds.rs @@ -38,10 +38,10 @@ async fn pause(ctx: &Context, msg: &Message, args: String) -> CommandResult { channel.commit_changes(&pool).await; if channel.paused { - let _ = msg.channel_id.say(&ctx, user_data.response(&pool, "paused/paused_indefinite").await).await; + let _ = msg.channel_id.say(&ctx, user_data.response(&pool, "pause/paused_indefinite").await).await; } else { - let _ = msg.channel_id.say(&ctx, user_data.response(&pool, "paused/unpaused").await).await; + let _ = msg.channel_id.say(&ctx, user_data.response(&pool, "pause/unpaused").await).await; } } else { @@ -55,11 +55,11 @@ async fn pause(ctx: &Context, msg: &Message, args: String) -> CommandResult { channel.commit_changes(&pool).await; - let _ = msg.channel_id.say(&ctx, user_data.response(&pool, "paused/paused_until").await).await; + let _ = msg.channel_id.say(&ctx, user_data.response(&pool, "pause/paused_until").await).await; }, Err(_) => { - let _ = msg.channel_id.say(&ctx, user_data.response(&pool, "paused/invalid_time").await).await; + let _ = msg.channel_id.say(&ctx, user_data.response(&pool, "pause/invalid_time").await).await; }, } } @@ -116,3 +116,43 @@ UPDATE reminders SET `time` = `time` + ? WHERE reminders.channel_id = ? Ok(()) } + +#[command] +async fn nudge(ctx: &Context, msg: &Message, args: String) -> CommandResult { + let pool = ctx.data.read().await + .get::().cloned().expect("Could not get SQLPool from data"); + + let user_data = UserData::from_id(&msg.author, &ctx, &pool).await.unwrap(); + let mut channel = ChannelData::from_channel(msg.channel(&ctx).await.unwrap(), &pool).await.unwrap(); + + if args.len() == 0 { + let _ = msg.channel_id.say(&ctx, user_data.response(&pool, "nudge/invalid_time").await).await; + } + else { + let parser = TimeParser::new(args, user_data.timezone.parse().unwrap()); + let nudge_time = parser.displacement(); + + match nudge_time { + Ok(displacement) => { + if displacement < i16::MIN as i64 || displacement > i16::MAX as i64 { + let _ = msg.channel_id.say(&ctx, user_data.response(&pool, "nudge/invalid_time").await).await; + } + else { + channel.nudge = displacement as i16; + + channel.commit_changes(&pool).await; + + let response = user_data.response(&pool, "nudge/success").await.replacen("{}", &displacement.to_string(), 1); + + let _ = msg.channel_id.say(&ctx, response).await; + } + }, + + Err(_) => { + let _ = msg.channel_id.say(&ctx, user_data.response(&pool, "nudge/invalid_time").await).await; + }, + } + } + + Ok(()) +} diff --git a/src/main.rs b/src/main.rs index 30f94d6..16b19d2 100644 --- a/src/main.rs +++ b/src/main.rs @@ -73,6 +73,8 @@ async fn main() -> Result<(), Box> { .add_command("pause", &reminder_cmds::PAUSE_COMMAND) .add_command("offset", &reminder_cmds::OFFSET_COMMAND) + .add_command("nudge", &reminder_cmds::NUDGE_COMMAND) + .build(); let mut client = Client::new(&env::var("DISCORD_TOKEN").expect("Missing DISCORD_TOKEN from environment")) diff --git a/src/models.rs b/src/models.rs index 4dcea68..cce8946 100644 --- a/src/models.rs +++ b/src/models.rs @@ -196,9 +196,9 @@ SELECT value FROM strings WHERE (language = ? OR language = 'EN') AND name = ? O ", self.language, name) .fetch_one(pool) .await - .expect("No string with that name"); + .expect(&format!("No string with that name: {}", name)); - row.value.expect("No string with that name") + row.value.expect(&format!("Null string with that name: {}", name)) } pub fn timezone(&self) -> Tz {