diff options
| author | Gustav Sörnäs <gustav@sornas.net> | 2020-12-01 07:46:29 +0100 |
|---|---|---|
| committer | Gustav Sörnäs <gustav@sornas.net> | 2020-12-01 07:46:29 +0100 |
| commit | 8b8c829793c026eee5fac474399a9a7179a10c80 (patch) | |
| tree | 133d1102e7da0a1c89f0bf8b027e9461e4aaef59 /src/slack.rs | |
| parent | c1b9d90f2f81f7acb0f4a88acf7056874e9cbe2f (diff) | |
| parent | 31f5366ef857bc3e50f7a4485250cbe50d903e0b (diff) | |
| download | kodapa-8b8c829793c026eee5fac474399a9a7179a10c80.tar.gz | |
Merge branch 'reminders' into main
Diffstat (limited to 'src/slack.rs')
| -rw-r--r-- | src/slack.rs | 40 |
1 files changed, 35 insertions, 5 deletions
diff --git a/src/slack.rs b/src/slack.rs index 45a3dc6..0b02fac 100644 --- a/src/slack.rs +++ b/src/slack.rs @@ -1,4 +1,5 @@ -use crate::agenda::{parse_message, AgendaPoint, Emoji}; +use crate::agenda::{self, parse_message, AgendaPoint, Emoji}; +use crate::reminder::ReminderType; use futures::join; use slack::{error::Error, 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; @@ -141,7 +142,7 @@ impl slack::EventHandler for Handler { ) .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,7 +188,13 @@ 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 || { loop { match client.run(&mut handler) { @@ -199,7 +207,6 @@ pub async fn handle( } } }), - spawn(receive_from_discord(receiver, slack_sender, channel)) ); } @@ -220,3 +227,26 @@ 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 => {} + } + } + } +} |
