Fixed reminders

+ Event reminders are now sent properly.
+ Users who react to old events will be told the even has already started
master
Joey Hines 2020-05-01 16:29:09 -05:00
parent 0f8fe04657
commit 9d8688ad92
5 changed files with 33 additions and 14 deletions

7
Cargo.lock generated
View File

@ -466,6 +466,7 @@ dependencies = [
"serde 1.0.106 (registry+https://github.com/rust-lang/crates.io-index)",
"serde_derive 1.0.106 (registry+https://github.com/rust-lang/crates.io-index)",
"serenity 0.8.4 (registry+https://github.com/rust-lang/crates.io-index)",
"strfmt 0.1.6 (registry+https://github.com/rust-lang/crates.io-index)",
]
[[package]]
@ -1319,6 +1320,11 @@ name = "static_assertions"
version = "1.1.0"
source = "registry+https://github.com/rust-lang/crates.io-index"
[[package]]
name = "strfmt"
version = "0.1.6"
source = "registry+https://github.com/rust-lang/crates.io-index"
[[package]]
name = "strsim"
version = "0.8.0"
@ -1885,6 +1891,7 @@ dependencies = [
"checksum smallvec 1.3.0 (registry+https://github.com/rust-lang/crates.io-index)" = "05720e22615919e4734f6a99ceae50d00226c3c5aca406e102ebc33298214e0a"
"checksum spin 0.5.2 (registry+https://github.com/rust-lang/crates.io-index)" = "6e63cff320ae2c57904679ba7cb63280a3dc4613885beafb148ee7bf9aa9042d"
"checksum static_assertions 1.1.0 (registry+https://github.com/rust-lang/crates.io-index)" = "a2eb9349b6444b326872e140eb1cf5e7c522154d69e7a0ffb0fb81c06b37543f"
"checksum strfmt 0.1.6 (registry+https://github.com/rust-lang/crates.io-index)" = "b278b244ef7aa5852b277f52dd0c6cac3a109919e1f6d699adde63251227a30f"
"checksum strsim 0.8.0 (registry+https://github.com/rust-lang/crates.io-index)" = "8ea5119cdb4c55b55d432abb513a0429384878c15dde60cc77b1c99de1a95a6a"
"checksum syn 1.0.17 (registry+https://github.com/rust-lang/crates.io-index)" = "0df0eb663f387145cab623dea85b09c2c5b4b0aef44e945d928e682fce71bb03"
"checksum textwrap 0.11.0 (registry+https://github.com/rust-lang/crates.io-index)" = "d326610f408c7a4eb6f51c37c330e496b08506c9457c9d34287ecc38809fb060"

View File

@ -17,6 +17,7 @@ diesel = { version = "1.4.0", features = ["mysql", "chrono"] }
diesel_migrations = "1.4.0"
log = "0.4.8"
log4rs = "0.11.0"
strfmt = "0.1.6"
[dependencies.serenity]
version = "0.8.4"

View File

@ -1,7 +1,7 @@
use super::schema::events;
use chrono::NaiveDateTime;
#[derive(Queryable, Clone)]
#[derive(Queryable, Clone, Debug)]
pub struct Event {
/// Event ID
pub id: i32,
@ -32,7 +32,7 @@ impl Into<NewEvent> for Event {
}
}
#[derive(Insertable, Clone)]
#[derive(Insertable, Clone, Debug)]
#[table_name = "events"]
pub struct NewEvent {
/// Event name

View File

@ -10,15 +10,12 @@ use serenity::prelude::{Context, RwLock, ShareMap};
use serenity::utils::Colour;
use serenity::Result;
use std::sync::Arc;
use strfmt::strfmt;
use std::collections::HashMap;
pub mod events;
/// Send a message to a reaction user
///
/// Message will be sent in the format
/// ```
/// "{msg_text} **event_name**"
/// ```
pub fn send_message_to_reaction_users(ctx: &Context, reaction: &Reaction, msg_text: &str) {
if let Ok(config) = get_config(&ctx.data) {
let db_link = config.db_url.clone();
@ -31,8 +28,21 @@ pub fn send_message_to_reaction_users(ctx: &Context, reaction: &Reaction, msg_te
}
};
// Format message
let msg: String = format!("{} **{}**", msg_text, event.event_name);
let event_utc_time = DateTime::<Utc>::from_utc(event.event_time.clone(), Utc);
let current_utc_time = chrono::offset::Utc::now();
let msg;
if event_utc_time > current_utc_time {
// Format message
let mut fmt = HashMap::new();
fmt.insert("event".to_string(), event.event_name);
msg = strfmt(msg_text, &fmt).unwrap();
}
else {
msg = format!("**{}** has already started!", &event.event_name)
}
if let Ok(user) = reaction.user(&ctx.http) {
send_dm_message(&ctx.http, user, &msg);

View File

@ -75,7 +75,7 @@ impl EventHandler for Handler {
send_message_to_reaction_users(
&ctx,
&reaction,
"Hello, you are now receiving reminders for",
"Hello, you are now receiving reminders for **{event}**",
);
}
}
@ -86,7 +86,7 @@ impl EventHandler for Handler {
send_message_to_reaction_users(
&ctx,
&reaction,
"Hello, you are no longer receiving reminders for",
"Hello, you are no longer receiving reminders for **{event}**",
);
}
}
@ -127,10 +127,11 @@ fn send_reminders(cache_and_http: &Arc<CacheAndHttp>, data: &Arc<RwLock<ShareMap
if let Ok(message_id) = event.message_id.parse::<u64>() {
// Get time to event
let utc_time = DateTime::<Utc>::from_utc(event.event_time.clone(), Utc);
let time_to_event = (utc_time - chrono::offset::Utc::now()).num_minutes();
let current_time = chrono::offset::Utc::now();
let time_to_event = (utc_time - current_time).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 time_to_event <= 10 && time_to_event > 0 && event.reminder_sent < 1 {
// Get message id
if let Ok(message) = http.get_message(event_channel_id, message_id) {
let reaction_users = message
.reaction_users(&http, INTERESTED_EMOJI, None, None)