aboutsummaryrefslogtreecommitdiffstats
path: root/src/discord.rs
diff options
context:
space:
mode:
authorGustav Sörnäs <gustav@sornas.net>2020-12-01 07:46:29 +0100
committerGustav Sörnäs <gustav@sornas.net>2020-12-01 07:46:29 +0100
commit8b8c829793c026eee5fac474399a9a7179a10c80 (patch)
tree133d1102e7da0a1c89f0bf8b027e9461e4aaef59 /src/discord.rs
parentc1b9d90f2f81f7acb0f4a88acf7056874e9cbe2f (diff)
parent31f5366ef857bc3e50f7a4485250cbe50d903e0b (diff)
downloadkodapa-8b8c829793c026eee5fac474399a9a7179a10c80.tar.gz
Merge branch 'reminders' into main
Diffstat (limited to 'src/discord.rs')
-rw-r--r--src/discord.rs38
1 files changed, 35 insertions, 3 deletions
diff --git a/src/discord.rs b/src/discord.rs
index e0119a4..40c30ac 100644
--- a/src/discord.rs
+++ b/src/discord.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 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<AgendaPoint>,
receiver: mpsc::UnboundedReceiver<AgendaPoint>,
+ reminder: watch::Receiver<ReminderType>,
) {
println!("Setting up Discord");
@@ -45,8 +47,9 @@ pub async fn handle(
.map(|id| Some(ChannelId(id.parse::<u64>().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,32 @@ async fn receive_from_slack(
}
}
}
+
+async fn handle_reminders(
+ mut reminder: watch::Receiver<ReminderType>,
+ client: Arc<Mutex<discord::Discord>>,
+ channel: Option<ChannelId>,
+) {
+ 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 => {}
+ }
+ }
+ }
+}