aboutsummaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
-rw-r--r--src/main.rs73
1 files changed, 49 insertions, 24 deletions
diff --git a/src/main.rs b/src/main.rs
index bcc2bab..2b5bb14 100644
--- a/src/main.rs
+++ b/src/main.rs
@@ -4,7 +4,13 @@ use discord::{
};
use futures::join;
use slack_api as slack;
-use tokio::task::spawn_blocking;
+use tokio::{
+ sync::mpsc,
+ task::{
+ spawn,
+ spawn_blocking,
+ },
+};
#[tokio::main]
async fn main() {
@@ -13,15 +19,20 @@ async fn main() {
println!("Hello, world!");
+ let (from_discord, to_slack) = mpsc::unbounded_channel::<String>();
+ let (from_slack, to_discord) = mpsc::unbounded_channel::<String>();
+
join!(
- spawn_blocking(move || {
- discord_loop(discord_token);
- }),
- slack_loop(slack_token),
+ discord_loop(discord_token, from_discord, to_discord),
+ slack_loop(slack_token, from_slack, to_slack),
);
}
-async fn slack_loop(token: Option<String>) {
+async fn slack_loop(
+ token: Option<String>,
+ sender: mpsc::UnboundedSender<String>,
+ _receiver: mpsc::UnboundedReceiver<String>,
+) {
println!("Setting up Slack");
let token = std::env::var("SLACK_API_TOKEN")
@@ -39,7 +50,7 @@ async fn slack_loop(token: Option<String>) {
.iter()
.filter_map(|c| c.name.as_ref())
.collect::<Vec<_>>();
- println!("Got channels {:?}", channel_names);
+ sender.send(format!("Got channels {:?}", channel_names).to_string()).unwrap();
}
if let Some(users) = response.users {
@@ -47,14 +58,18 @@ async fn slack_loop(token: Option<String>) {
.iter()
.filter_map(|u| u.name.as_ref())
.collect::<Vec<_>>();
- println!("Got users {:?}", user_names);
+ sender.send(format!("Got users {:?}", user_names).to_string()).unwrap();
}
- } else {
+ } else { //TODO NotAuth etc
println!("{:?}", response)
}
}
-fn discord_loop(token: Option<String>) {
+async fn discord_loop(
+ token: Option<String>,
+ _sender: mpsc::UnboundedSender<String>,
+ mut receiver: mpsc::UnboundedReceiver<String>,
+) {
println!("Setting up Discord");
let token = std::env::var("DISCORD_API_TOKEN")
@@ -62,22 +77,32 @@ fn discord_loop(token: Option<String>) {
let client = Discord::from_bot_token(&token);
if let Ok(client) = client {
- let (mut connection, _) = client.connect().expect("discord connect failed");
+ let (mut connection, _) = client.connect().expect("discord connect failed"); //TODO
println!("Discord ready");
- loop {
- match connection.recv_event() {
- Ok(Event::MessageCreate(message)) => {
- println!("{} says: {}", message.author.name, message.content);
- }
- Ok(_) => {}
- Err(discord::Error::Closed(code, body)) => {
- println!("Discord closed with code {:?}: {}", code, body);
- break;
+
+ let (_, _) = join!( //TODO
+ spawn_blocking(move || {
+ loop {
+ match connection.recv_event() {
+ Ok(Event::MessageCreate(message)) => {
+ println!("{} says: {}", message.author.name, message.content);
+ }
+ Ok(_) => {}
+ Err(discord::Error::Closed(code, body)) => {
+ println!("Discord closed with code {:?}: {}", code, body);
+ break;
+ }
+ Err(err) => {
+ println!("Error: {:?}", err);
+ }
+ }
}
- Err(err) => {
- println!("Error: {:?}", err);
+ }),
+ spawn(async move {
+ while let Some(s) = receiver.recv().await {
+ println!("Discord received '{}' from slack", s);
}
- }
- }
+ })
+ );
}
}