diff options
| author | Gustav Sörnäs <gustav@sornas.net> | 2020-11-18 11:30:05 +0100 |
|---|---|---|
| committer | Gustav Sörnäs <gustav@sornas.net> | 2020-11-18 11:30:05 +0100 |
| commit | 4568425fadb92788ecacd57560227a63b5610376 (patch) | |
| tree | cd814de1d40949c78954b71d393528b23a154647 | |
| parent | 48f6f5a32e71b19894c93402030a97746eec6e93 (diff) | |
| download | kodapa-4568425fadb92788ecacd57560227a63b5610376.tar.gz | |
parse_message takes a closure
| -rw-r--r-- | src/agenda.rs | 31 | ||||
| -rw-r--r-- | src/discord.rs | 23 | ||||
| -rw-r--r-- | src/slack.rs | 18 |
3 files changed, 41 insertions, 31 deletions
diff --git a/src/agenda.rs b/src/agenda.rs index c046f3f..dc57775 100644 --- a/src/agenda.rs +++ b/src/agenda.rs @@ -39,15 +39,18 @@ impl Agenda { } } -pub enum ParseError { - NoSuchCommand, +pub enum Emoji { + Ok, + Confused, + Err, } -pub fn parse_message( +pub fn parse_message<F>( message: &str, sender: &str, + send_message: F, point_sender: &mpsc::UnboundedSender<AgendaPoint> -) -> Result<Option<String>, ParseError> { +) -> Option<Emoji> where F: FnOnce(String) { if message.starts_with("!add ") { let mut agenda = read_agenda(); let agenda_point = AgendaPoint { @@ -57,23 +60,31 @@ pub fn parse_message( point_sender.send(agenda_point.clone()).unwrap(); agenda.points.push(agenda_point); agenda.write(); - Ok(None) + Some(Emoji::Ok) } else if message.starts_with("!agenda") { - Ok(Some(read_agenda() + let s = read_agenda() .points .iter() .map(|p| p.to_string()) .collect::<Vec<_>>() - .join("\n"))) + .join("\n"); + send_message(match s.as_str() { + "" => "Agenda is empty".to_string(), + _ => s + }); + None } else if message.starts_with("!clear") { Agenda { points: Vec::new(), }.write(); - Ok(None) + Some(Emoji::Ok) } else if message.starts_with("!help") { - Ok(Some("Available commands:\n```!add -- Add something\n!agenda -- Print the agenda\n!clear -- Remove all items\n!help```".to_string())) + send_message("Available commands:\n```!add -- Add something\n!agenda -- Print the agenda\n!clear -- Remove all items\n!help```".to_string()); + None + } else if message.starts_with("!") { + Some(Emoji::Confused) } else { - Err(ParseError::NoSuchCommand) + Some(Emoji::Err) } } diff --git a/src/discord.rs b/src/discord.rs index 6970759..e477f6c 100644 --- a/src/discord.rs +++ b/src/discord.rs @@ -1,6 +1,7 @@ use crate::agenda::{ parse_message, - AgendaPoint + AgendaPoint, + Emoji, }; use discord::{ @@ -92,25 +93,23 @@ fn receive_events( match parse_message( &message.content, &message.author.name, + |s: String| { + client + .lock() + .unwrap() + .send_message(channel, &s, "", false) + .unwrap(); + }, &sender ) { - Ok(Some(s)) => { - client.lock().unwrap().send_message( - channel, - &s, - "", - false - ).unwrap(); - } - Ok(None) => { - // thumbs up + Some(Emoji::Ok) => { client.lock().unwrap().add_reaction( channel, message.id, ReactionEmoji::Unicode("👍".to_string()) ).unwrap(); } - Err(_) => {} + _ => {} } } } diff --git a/src/slack.rs b/src/slack.rs index bb80ff1..8e7a7fe 100644 --- a/src/slack.rs +++ b/src/slack.rs @@ -1,6 +1,7 @@ use crate::agenda::{ parse_message, - AgendaPoint + AgendaPoint, + Emoji }; use futures::join; @@ -77,15 +78,14 @@ impl slack::EventHandler for Handler { match parse_message( &msg.text.unwrap_or("".to_string()), &msg.user.unwrap_or("??".to_string()), + |s: String| { + self.slack_sender + .send_message(channel.as_str(), &s) + .unwrap(); + }, &self.sender, ) { - Ok(Some(s)) => { - self.slack_sender.send_message( - channel.as_str(), - &s - ).unwrap(); - } - Ok(None) => { + Some(Emoji::Ok) => { let client = slack_api::requests::default_client().unwrap(); Runtime::new().unwrap().block_on( reactions::add( @@ -100,7 +100,7 @@ impl slack::EventHandler for Handler { }).compat() ).unwrap(); } - Err(_) => {} + _ => {} } } } |
