diff options
| author | Gustav Sörnäs <gustav@sornas.net> | 2020-11-17 11:23:53 +0100 |
|---|---|---|
| committer | Gustav Sörnäs <gustav@sornas.net> | 2020-11-17 12:08:22 +0100 |
| commit | 210508fe158c152c01b6ecff207d33632cfa2f47 (patch) | |
| tree | fe3da620c0054fc10d86bdf192c01877695cc4ee | |
| parent | 99666a04a490d6467288f28577755dbebbf55054 (diff) | |
| download | kodapa-210508fe158c152c01b6ecff207d33632cfa2f47.tar.gz | |
slack: react to !add instead of answering
| -rw-r--r-- | Cargo.toml | 2 | ||||
| -rw-r--r-- | src/slack.rs | 36 |
2 files changed, 34 insertions, 4 deletions
@@ -10,6 +10,8 @@ edition = "2018" futures = "0.3" serde_json = "1.0" slack = "0.25" +slack_api = "0.23" +tokio-compat-02 = "0.1" [dependencies.discord] git = "https://github.com/SpaceManiac/discord-rs" diff --git a/src/slack.rs b/src/slack.rs index 1c272cf..750f071 100644 --- a/src/slack.rs +++ b/src/slack.rs @@ -8,13 +8,16 @@ use slack::{ Event, Message, }; +use slack_api::reactions; use tokio::{ + runtime::Runtime, sync::mpsc, task::{ spawn, spawn_blocking, }, }; +use tokio_compat_02::FutureExt; const TOKEN: Option<&str> = None; const CHANNEL: Option<&str> = None; @@ -24,6 +27,7 @@ struct Handler { slack_sender: slack::Sender, slack_channel: Option<String>, print_channels: bool, + slack_token: String, } impl Handler { @@ -31,12 +35,14 @@ impl Handler { sender: mpsc::UnboundedSender<AgendaPoint>, slack_sender: slack::Sender, slack_channel: Option<String>, + slack_token: String, ) -> Self { Self { sender, slack_sender, slack_channel: slack_channel.clone(), - print_channels: slack_channel.is_none() + print_channels: slack_channel.is_none(), + slack_token, } } } @@ -66,12 +72,33 @@ impl slack::EventHandler for Handler { match *msg { Message::Standard(msg) => { if msg.channel.is_some() && *channel == msg.channel.unwrap() { //TODO - if let Ok(Some(s)) = parse_message( + match parse_message( &msg.text.unwrap_or("".to_string()), &msg.user.unwrap_or("??".to_string()), &self.sender, ) { - self.slack_sender.send_message(channel.as_str(), &s).unwrap(); + Ok(Some(s)) => { + self.slack_sender.send_message( + channel.as_str(), + &s + ).unwrap(); + } + Ok(None) => { + let client = slack_api::requests::default_client().unwrap(); + Runtime::new().unwrap().block_on( + reactions::add( + &client, + &self.slack_token, + &reactions::AddRequest{ + name: "+1", + file: None, + file_comment: None, + channel: Some(channel.as_str()), + timestamp: Some(msg.ts.unwrap()), + }).compat() + ).unwrap(); + } + Err(_) => {} } } } @@ -102,11 +129,12 @@ pub async fn handle( None => None } }; + let slack_token = token.to_string(); let client = spawn_blocking(move || { slack::RtmClient::login(&token).unwrap() }).await.unwrap(); - let mut handler = Handler::new(sender, client.sender().clone(), channel.clone()); + let mut handler = Handler::new(sender, client.sender().clone(), channel.clone(), slack_token); let slack_sender = client.sender().clone(); let (_, _) = join!( |
