From 5788bc84c13ed56324bdc6dc7c61bb0ca12a9256 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Gustav=20S=C3=B6rn=C3=A4s?= Date: Sun, 22 Nov 2020 23:01:28 +0100 Subject: print agenda when reminders are requested --- src/discord.rs | 32 ++++++++++++++++++++++++++++++-- 1 file changed, 30 insertions(+), 2 deletions(-) (limited to 'src/discord.rs') diff --git a/src/discord.rs b/src/discord.rs index fb121fb..438f0ed 100644 --- a/src/discord.rs +++ b/src/discord.rs @@ -1,4 +1,5 @@ use crate::agenda::{self, parse_message, AgendaPoint, Emoji}; +use crate::reminder::ReminderType; use discord::{ model::{ChannelId, Event, PossibleServer, ReactionEmoji, UserId}, @@ -10,7 +11,7 @@ use std::{ sync::{Arc, Mutex}, }; use tokio::{ - sync::mpsc, + sync::{mpsc, watch}, task::{spawn, spawn_blocking}, }; @@ -29,6 +30,7 @@ struct Handler { pub async fn handle( sender: mpsc::UnboundedSender, receiver: mpsc::UnboundedReceiver, + reminder: watch::Receiver, ) { println!("Setting up Discord"); @@ -45,8 +47,9 @@ pub async fn handle( .map(|id| Some(ChannelId(id.parse::().unwrap()))) .unwrap_or(CHANNEL); - let (_, _) = join!( + let (_, _, _) = join!( spawn(receive_from_slack(receiver, Arc::clone(&client), channel)), + spawn(handle_reminders(reminder, Arc::clone(&client), channel)), spawn_blocking(move || receive_events(&mut Handler { _our_id, connection, @@ -159,3 +162,28 @@ async fn receive_from_slack( } } } + +async fn handle_reminders( + mut reminder: watch::Receiver, + client: Arc>, + channel: Option, +) { + if let Some(channel) = channel { + while let Some(reminder) = reminder.recv().await { + match reminder { + ReminderType::OneHour => { + client + .lock() + .unwrap() + .send_message(channel, + &format!("Meeting in one hour!\n{}", + agenda::read_agenda().to_string()), + "", + false) + .unwrap(); + }, + ReminderType::Void => {} + } + } + } +} -- cgit v1.2.1