diff --git a/src/main.rs b/src/main.rs index 5e0be3a..aa41aa2 100644 --- a/src/main.rs +++ b/src/main.rs @@ -28,6 +28,7 @@ fn main() { let leet_time = NaiveTime::from_hms(13, 37, 30); let scores : Arc>> = Arc::new(Mutex::new(HashMap::new())); + let time_scored : Arc>>> = Arc::new(Mutex::new(HashMap::new())); { if let Ok(mut score_file) = std::fs::File::open(SCORE_FILE_PATH) { @@ -77,22 +78,36 @@ fn main() { if data.to_lowercase() == "leet" || data == "1337" { dbg!(data); - let leet_distance = current_time - leet_time; + let leet_distance = (current_time - leet_time).num_seconds().abs(); - if leet_distance.num_seconds() > allowed_timegap { + if leet_distance > allowed_timegap { api.spawn(message.text_reply( "It is not leet right now".to_string() )); } else { - let mut map = scores.lock().unwrap(); - let entry = map.entry(message.from.first_name.clone()).or_insert(0); + let mut time_scored_map = time_scored.lock().unwrap(); - *entry += 1; + let time_scored = time_scored_map.entry(message.from.first_name.clone()).or_insert(Local.timestamp(0,0)); - api.spawn(message.text_reply( - format!("{} just hit leet! New score: {}", message.from.first_name, *entry) - )); + let time_scored_distance = (Local::now() - *time_scored).num_seconds().abs(); + + if time_scored_distance < allowed_timegap * 4 { + api.spawn(message.text_reply( + "You already hit leet today you dumbass, don't try to cheat!".to_string() + )); + } else { + let mut map = scores.lock().unwrap(); + + let entry = map.entry(message.from.first_name.clone()).or_insert(0); + + *entry += 1; + *time_scored = Local::now(); + + api.spawn(message.text_reply( + format!("{} just hit leet! New score: {}", message.from.first_name, *entry) + )); + } } } else if data == "-score" {