aboutsummaryrefslogtreecommitdiffstats
path: root/src/slack.rs
diff options
context:
space:
mode:
authorGustav Sörnäs <gustav@sornas.net>2020-11-22 23:01:28 +0100
committerGustav Sörnäs <gustav@sornas.net>2020-11-22 23:01:28 +0100
commit5788bc84c13ed56324bdc6dc7c61bb0ca12a9256 (patch)
tree4679422a18b45194c89e1c2956e457732a93bf0d /src/slack.rs
parentcfc6244b9cb88ec9521ec02dd0119c3b9f9bbee9 (diff)
downloadkodapa-5788bc84c13ed56324bdc6dc7c61bb0ca12a9256.tar.gz
print agenda when reminders are requested
Diffstat (limited to 'src/slack.rs')
-rw-r--r--src/slack.rs33
1 files changed, 28 insertions, 5 deletions
diff --git a/src/slack.rs b/src/slack.rs
index 9698109..1481cf1 100644
--- a/src/slack.rs
+++ b/src/slack.rs
@@ -1,4 +1,5 @@
use crate::agenda::{self, parse_message, AgendaPoint, Emoji};
+use crate::reminder::ReminderType;
use futures::join;
use slack::{Event, Message};
@@ -9,7 +10,7 @@ use std::{
};
use tokio::{
runtime::Runtime,
- sync::mpsc,
+ sync::{mpsc, watch},
task::{spawn, spawn_blocking},
};
use tokio_compat_02::FutureExt;
@@ -137,11 +138,11 @@ impl slack::EventHandler for Handler {
timestamp: Some(msg.ts.unwrap()),
},
)
- .compat(),
+ .compat(),
)
.unwrap();
}
- _ => {}
+ _ => {} // parse_message return
}
}
}
@@ -161,6 +162,7 @@ impl slack::EventHandler for Handler {
pub async fn handle(
sender: mpsc::UnboundedSender<AgendaPoint>,
receiver: mpsc::UnboundedReceiver<AgendaPoint>,
+ reminder: watch::Receiver<ReminderType>,
) {
println!("Setting up Slack");
@@ -186,14 +188,15 @@ pub async fn handle(
);
let slack_sender = client.sender().clone();
- let (_, _) = join!(
+ let (_, _, _) = join!(
+ spawn(receive_from_discord(receiver, slack_sender.clone(), channel.clone())),
+ spawn(handle_reminders(reminder, slack_sender, channel)),
spawn_blocking(move || {
match client.run(&mut handler) {
Ok(_) => {}
Err(e) => println!("Error: {}", e),
}
}),
- spawn(receive_from_discord(receiver, slack_sender, channel))
);
}
@@ -214,3 +217,23 @@ async fn receive_from_discord(
}
}
}
+
+async fn handle_reminders(
+ mut reminder: watch::Receiver<ReminderType>,
+ sender: slack::Sender,
+ channel: Option<String>,
+) {
+ if let Some(channel) = channel {
+ while let Some(reminder) = reminder.recv().await {
+ match reminder {
+ ReminderType::OneHour => {
+ sender.send_typing(&channel).unwrap();
+ sender
+ .send_message(&channel, &format!("Meeting in one hour!\n{}", agenda::read_agenda()))
+ .unwrap();
+ },
+ ReminderType::Void => {}
+ }
+ }
+ }
+}