From 4ae73c3e2b9a660106030f84e06540ef1324b33e Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Gustav=20S=C3=B6rn=C3=A4s?= Date: Wed, 11 Nov 2020 00:25:47 +0100 Subject: initial slack --- src/main.rs | 33 +++++++++++++++++++++++++++++++++ 1 file changed, 33 insertions(+) create mode 100644 src/main.rs (limited to 'src/main.rs') diff --git a/src/main.rs b/src/main.rs new file mode 100644 index 0000000..aef3fa9 --- /dev/null +++ b/src/main.rs @@ -0,0 +1,33 @@ +use slack_api as slack; + +#[tokio::main] +async fn main() { + println!("Hello, world!"); + println!("Setting up Slack"); + + let slack_token = std::env::var("SLACK_API_TOKEN").expect("No token"); + let slack_client = slack::default_client().unwrap(); + + let slack_request = slack::rtm::StartRequest::default(); + let response = slack::rtm::start(&slack_client, &slack_token, &slack_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::>(); + println!("Got channels {:?}", channel_names); + } + + if let Some(users) = response.users { + let user_names = users + .iter() + .filter_map(|u| u.name.as_ref()) + .collect::>(); + println!("Got users {:?}", user_names); + } + } else { + println!("{:?}", response) + } +} -- cgit v1.2.1 From 99496d745f70cc0e65bc42df01aecc7483ff1166 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Gustav=20S=C3=B6rn=C3=A4s?= Date: Wed, 11 Nov 2020 10:28:57 +0100 Subject: initial discord --- src/main.rs | 39 +++++++++++++++++++++++++++++++++++++-- 1 file changed, 37 insertions(+), 2 deletions(-) (limited to 'src/main.rs') diff --git a/src/main.rs b/src/main.rs index aef3fa9..fb1ee99 100644 --- a/src/main.rs +++ b/src/main.rs @@ -1,3 +1,7 @@ +use discord::{ + model::Event, + Discord, +}; use slack_api as slack; #[tokio::main] @@ -5,11 +9,15 @@ async fn main() { println!("Hello, world!"); println!("Setting up Slack"); - let slack_token = std::env::var("SLACK_API_TOKEN").expect("No token"); + let slack_token = std::env::var("SLACK_API_TOKEN") + .unwrap_or("" + .to_string()); let slack_client = slack::default_client().unwrap(); let slack_request = slack::rtm::StartRequest::default(); - let response = slack::rtm::start(&slack_client, &slack_token, &slack_request).await; + let response = slack::rtm::start(&slack_client, + &slack_token, + &slack_request).await; if let Ok(response) = response { if let Some(channels) = response.channels { @@ -30,4 +38,31 @@ async fn main() { } else { println!("{:?}", response) } + + println!("Setting up Discord"); + + let discord_token = std::env::var("DISCORD_API_TOKEN") + .unwrap_or("" + .to_string()); + let discord = Discord::from_bot_token(&discord_token); + + if let Ok(discord) = discord { + let (mut connection, _) = discord.connect() .expect("discord connect failed"); + 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; + } + Err(err) => { + println!("Error: {:?}", err); + } + } + } + } } -- cgit v1.2.1 From d5c82532d141e3cd54ab0939b208ffe85cb854ef Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Gustav=20S=C3=B6rn=C3=A4s?= Date: Wed, 11 Nov 2020 10:49:32 +0100 Subject: discord and slack loop --- src/main.rs | 14 ++++++++++++++ 1 file changed, 14 insertions(+) (limited to 'src/main.rs') diff --git a/src/main.rs b/src/main.rs index fb1ee99..962564a 100644 --- a/src/main.rs +++ b/src/main.rs @@ -2,11 +2,23 @@ use discord::{ model::Event, Discord, }; +use futures::join; use slack_api as slack; +use tokio::task::spawn_blocking; #[tokio::main] async fn main() { println!("Hello, world!"); + + join!( + spawn_blocking(move || { + discord_loop(); + }), + slack_loop(), + ); +} + +async fn slack_loop() { println!("Setting up Slack"); let slack_token = std::env::var("SLACK_API_TOKEN") @@ -38,7 +50,9 @@ async fn main() { } else { println!("{:?}", response) } +} +fn discord_loop() { println!("Setting up Discord"); let discord_token = std::env::var("DISCORD_API_TOKEN") -- cgit v1.2.1 From ee5bcaa0fa6deb268e5f304600d38d9a67f93f52 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Gustav=20S=C3=B6rn=C3=A4s?= Date: Wed, 11 Nov 2020 11:01:43 +0100 Subject: small refactoring --- src/main.rs | 37 +++++++++++++++++++------------------ 1 file changed, 19 insertions(+), 18 deletions(-) (limited to 'src/main.rs') diff --git a/src/main.rs b/src/main.rs index 962564a..bcc2bab 100644 --- a/src/main.rs +++ b/src/main.rs @@ -8,28 +8,30 @@ use tokio::task::spawn_blocking; #[tokio::main] async fn main() { + let slack_token: Option = None; + let discord_token: Option = None; + println!("Hello, world!"); join!( spawn_blocking(move || { - discord_loop(); + discord_loop(discord_token); }), - slack_loop(), + slack_loop(slack_token), ); } -async fn slack_loop() { +async fn slack_loop(token: Option) { println!("Setting up Slack"); - let slack_token = std::env::var("SLACK_API_TOKEN") - .unwrap_or("" - .to_string()); - let slack_client = slack::default_client().unwrap(); + let token = std::env::var("SLACK_API_TOKEN") + .unwrap_or(token.unwrap()); + let client = slack::default_client().unwrap(); - let slack_request = slack::rtm::StartRequest::default(); - let response = slack::rtm::start(&slack_client, - &slack_token, - &slack_request).await; + 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 { @@ -52,16 +54,15 @@ async fn slack_loop() { } } -fn discord_loop() { +fn discord_loop(token: Option) { println!("Setting up Discord"); - let discord_token = std::env::var("DISCORD_API_TOKEN") - .unwrap_or("" - .to_string()); - let discord = Discord::from_bot_token(&discord_token); + let token = std::env::var("DISCORD_API_TOKEN") + .unwrap_or(token.unwrap()); + let client = Discord::from_bot_token(&token); - if let Ok(discord) = discord { - let (mut connection, _) = discord.connect() .expect("discord connect failed"); + if let Ok(client) = client { + let (mut connection, _) = client.connect().expect("discord connect failed"); println!("Discord ready"); loop { match connection.recv_event() { -- cgit v1.2.1 From a6fd44ae860ce48b6a7979a2c8b380c11fa7168e Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Gustav=20S=C3=B6rn=C3=A4s?= Date: Wed, 11 Nov 2020 13:06:56 +0100 Subject: send strings between async --- src/main.rs | 73 +++++++++++++++++++++++++++++++++++++++++-------------------- 1 file changed, 49 insertions(+), 24 deletions(-) (limited to 'src/main.rs') 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::(); + let (from_slack, to_discord) = mpsc::unbounded_channel::(); + 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) { +async fn slack_loop( + token: Option, + sender: mpsc::UnboundedSender, + _receiver: mpsc::UnboundedReceiver, +) { println!("Setting up Slack"); let token = std::env::var("SLACK_API_TOKEN") @@ -39,7 +50,7 @@ async fn slack_loop(token: Option) { .iter() .filter_map(|c| c.name.as_ref()) .collect::>(); - 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) { .iter() .filter_map(|u| u.name.as_ref()) .collect::>(); - 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) { +async fn discord_loop( + token: Option, + _sender: mpsc::UnboundedSender, + mut receiver: mpsc::UnboundedReceiver, +) { println!("Setting up Discord"); let token = std::env::var("DISCORD_API_TOKEN") @@ -62,22 +77,32 @@ fn discord_loop(token: Option) { 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); } - } - } + }) + ); } } -- cgit v1.2.1 From c01c8716de4a91e4c60f61cf0bb6eaeca5cbf619 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Gustav=20S=C3=B6rn=C3=A4s?= Date: Wed, 11 Nov 2020 13:12:32 +0100 Subject: refactor to new files --- src/main.rs | 98 ++++--------------------------------------------------------- 1 file changed, 6 insertions(+), 92 deletions(-) (limited to 'src/main.rs') diff --git a/src/main.rs b/src/main.rs index 2b5bb14..9cdd2e0 100644 --- a/src/main.rs +++ b/src/main.rs @@ -1,16 +1,8 @@ -use discord::{ - model::Event, - Discord, -}; +mod discord; +mod slack; + use futures::join; -use slack_api as slack; -use tokio::{ - sync::mpsc, - task::{ - spawn, - spawn_blocking, - }, -}; +use tokio::sync::mpsc; #[tokio::main] async fn main() { @@ -23,86 +15,8 @@ async fn main() { let (from_slack, to_discord) = mpsc::unbounded_channel::(); join!( - discord_loop(discord_token, from_discord, to_discord), - slack_loop(slack_token, from_slack, to_slack), + discord::handle(discord_token, from_discord, to_discord), + slack::handle(slack_token, from_slack, to_slack), ); } -async fn slack_loop( - token: Option, - sender: mpsc::UnboundedSender, - _receiver: mpsc::UnboundedReceiver, -) { - 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::>(); - 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::>(); - sender.send(format!("Got users {:?}", user_names).to_string()).unwrap(); - } - } else { //TODO NotAuth etc - println!("{:?}", response) - } -} - -async fn discord_loop( - token: Option, - _sender: mpsc::UnboundedSender, - mut receiver: mpsc::UnboundedReceiver, -) { - println!("Setting up Discord"); - - let token = std::env::var("DISCORD_API_TOKEN") - .unwrap_or(token.unwrap()); - let client = Discord::from_bot_token(&token); - - if let Ok(client) = client { - let (mut connection, _) = client.connect().expect("discord connect failed"); //TODO - println!("Discord ready"); - - 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); - } - } - } - }), - spawn(async move { - while let Some(s) = receiver.recv().await { - println!("Discord received '{}' from slack", s); - } - }) - ); - } -} -- cgit v1.2.1 From 6fbdede8516e6d35afbd032a2ca6fc6ef109b484 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Gustav=20S=C3=B6rn=C3=A4s?= Date: Wed, 11 Nov 2020 17:31:23 +0100 Subject: send AgendaPoint instead of String between services --- src/main.rs | 7 +++++-- 1 file changed, 5 insertions(+), 2 deletions(-) (limited to 'src/main.rs') diff --git a/src/main.rs b/src/main.rs index 9cdd2e0..8d8fa5c 100644 --- a/src/main.rs +++ b/src/main.rs @@ -1,6 +1,9 @@ +mod agenda; mod discord; mod slack; +use crate::agenda::AgendaPoint; + use futures::join; use tokio::sync::mpsc; @@ -11,8 +14,8 @@ async fn main() { println!("Hello, world!"); - let (from_discord, to_slack) = mpsc::unbounded_channel::(); - let (from_slack, to_discord) = mpsc::unbounded_channel::(); + let (from_discord, to_slack) = mpsc::unbounded_channel::(); + let (from_slack, to_discord) = mpsc::unbounded_channel::(); join!( discord::handle(discord_token, from_discord, to_discord), -- cgit v1.2.1 From 8ff5e1295ce9e6c670dd097ab801e4ff35e94632 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Gustav=20S=C3=B6rn=C3=A4s?= Date: Wed, 11 Nov 2020 18:23:16 +0100 Subject: move service values to correct file and read more from env --- src/main.rs | 7 ++----- 1 file changed, 2 insertions(+), 5 deletions(-) (limited to 'src/main.rs') diff --git a/src/main.rs b/src/main.rs index 8d8fa5c..d3a24f3 100644 --- a/src/main.rs +++ b/src/main.rs @@ -9,17 +9,14 @@ use tokio::sync::mpsc; #[tokio::main] async fn main() { - let slack_token: Option = None; - let discord_token: Option = None; - println!("Hello, world!"); let (from_discord, to_slack) = mpsc::unbounded_channel::(); let (from_slack, to_discord) = mpsc::unbounded_channel::(); join!( - discord::handle(discord_token, from_discord, to_discord), - slack::handle(slack_token, from_slack, to_slack), + discord::handle(from_discord, to_discord), + slack::handle(from_slack, to_slack), ); } -- cgit v1.2.1 From 3b75792081e11cfeb334b45dfb41027532a8848e Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Gustav=20S=C3=B6rn=C3=A4s?= Date: Fri, 13 Nov 2020 00:59:32 +0100 Subject: basic commands and write agenda to file --- src/main.rs | 6 ++++-- 1 file changed, 4 insertions(+), 2 deletions(-) (limited to 'src/main.rs') diff --git a/src/main.rs b/src/main.rs index d3a24f3..b6edd38 100644 --- a/src/main.rs +++ b/src/main.rs @@ -2,8 +2,10 @@ mod agenda; mod discord; mod slack; -use crate::agenda::AgendaPoint; - +use crate::agenda::{ + Agenda, + AgendaPoint, +}; use futures::join; use tokio::sync::mpsc; -- cgit v1.2.1 From 00491c8005fe75a8cdf9dc06288affd2ec50fb61 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Gustav=20S=C3=B6rn=C3=A4s?= Date: Fri, 13 Nov 2020 16:05:54 +0100 Subject: print available channels if unspecified --- src/main.rs | 5 +---- 1 file changed, 1 insertion(+), 4 deletions(-) (limited to 'src/main.rs') diff --git a/src/main.rs b/src/main.rs index b6edd38..0bcf53c 100644 --- a/src/main.rs +++ b/src/main.rs @@ -2,10 +2,7 @@ mod agenda; mod discord; mod slack; -use crate::agenda::{ - Agenda, - AgendaPoint, -}; +use crate::agenda::AgendaPoint; use futures::join; use tokio::sync::mpsc; -- cgit v1.2.1