aboutsummaryrefslogtreecommitdiffstats
path: root/src
diff options
context:
space:
mode:
authorGustav Sörnäs <gustav@sornas.net>2020-11-18 11:30:05 +0100
committerGustav Sörnäs <gustav@sornas.net>2020-11-18 11:30:05 +0100
commit4568425fadb92788ecacd57560227a63b5610376 (patch)
treecd814de1d40949c78954b71d393528b23a154647 /src
parent48f6f5a32e71b19894c93402030a97746eec6e93 (diff)
downloadkodapa-4568425fadb92788ecacd57560227a63b5610376.tar.gz
parse_message takes a closure
Diffstat (limited to 'src')
-rw-r--r--src/agenda.rs31
-rw-r--r--src/discord.rs23
-rw-r--r--src/slack.rs18
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(_) => {}
+ _ => {}
}
}
}