diff options
| author | Gustav Sörnäs <gustav@sornas.net> | 2020-11-11 13:31:17 +0100 |
|---|---|---|
| committer | Gustav Sörnäs <gustav@sornas.net> | 2020-11-11 13:31:17 +0100 |
| commit | 07e3d4f5f772080028f86661ed7f6e95f63207b4 (patch) | |
| tree | 9dc34879218195c898c6cc47b4a32ca357442cc6 | |
| parent | 2a3eb31fe09152729f80f9329bedfec96c8ebff4 (diff) | |
| download | kodapa-07e3d4f5f772080028f86661ed7f6e95f63207b4.tar.gz | |
switch to actual slack rtm api
| -rw-r--r-- | Cargo.toml | 2 | ||||
| -rw-r--r-- | src/slack.rs | 73 |
2 files changed, 42 insertions, 33 deletions
@@ -9,5 +9,5 @@ edition = "2018" [dependencies] discord = { git = "https://github.com/SpaceManiac/discord-rs" } #TODO no voice futures = "0.3" -slack_api = "0.23" #TODO no voice +slack = "0.25" tokio = { version = "0.2", features = ["full"] } #TODO actual features diff --git a/src/slack.rs b/src/slack.rs index 9a30b49..fb4eece 100644 --- a/src/slack.rs +++ b/src/slack.rs @@ -1,42 +1,51 @@ -use slack_api as slack; -use tokio::sync::mpsc; +use futures::join; +use tokio::{ + sync::mpsc, + task::{ + spawn, + spawn_blocking, + }, +}; + +struct Handler; + +impl slack::EventHandler for Handler { + fn on_event(&mut self, _cli: &slack::RtmClient, event: slack::Event) { + println!("on_event: {:#?}", event); + } + + fn on_close(&mut self, _cli: &slack::RtmClient) { + println!("on_close") + } + + fn on_connect(&mut self, _cli: &slack::RtmClient) { + println!("on_connect"); + } +} pub async fn handle( token: Option<String>, - sender: mpsc::UnboundedSender<String>, + _sender: mpsc::UnboundedSender<String>, mut receiver: mpsc::UnboundedReceiver<String>, ) { println!("Setting up Slack"); let token = std::env::var("SLACK_API_TOKEN").unwrap_or(token.unwrap()); - let client = slack::default_client().unwrap(); - - let request = slack::rtm::StartRequest::default(); - let response = slack::rtm::start(&client, - &token, - &request).await; - - if let Ok(response) = response { - if let Some(channels) = response.channels { - let channel_names = channels - .iter() - .filter_map(|c| c.name.as_ref()) - .collect::<Vec<_>>(); - sender.send(format!("Got channels {:?}", channel_names).to_string()).unwrap(); - } - if let Some(users) = response.users { - let user_names = users - .iter() - .filter_map(|u| u.name.as_ref()) - .collect::<Vec<_>>(); - sender.send(format!("Got users {:?}", user_names).to_string()).unwrap(); - } - } else { //TODO NotAuth etc - println!("{:?}", response) - } - - while let Some(s) = receiver.recv().await { - println!("Slack received '{}' from discord", s); - } + join!( + spawn_blocking(move || { + let mut handler = Handler; + match slack::RtmClient::login_and_run(&token, &mut handler) { + Ok(_) => {} + Err(e) => { + println!("Error: {}", e) + } + } + }), + spawn(async move { + while let Some(s) = receiver.recv().await { + println!("Slack received '{}' from discord", s); + } + }) + ); } |
