aboutsummaryrefslogtreecommitdiffstats
path: root/src/discord.rs
diff options
context:
space:
mode:
authorGustav Sörnäs <gustav@sornas.net>2020-11-11 13:12:32 +0100
committerGustav Sörnäs <gustav@sornas.net>2020-11-11 13:12:32 +0100
commitc01c8716de4a91e4c60f61cf0bb6eaeca5cbf619 (patch)
tree0200d799a125c3aa9b85cfe5453c645c05fbb7e8 /src/discord.rs
parenta6fd44ae860ce48b6a7979a2c8b380c11fa7168e (diff)
downloadkodapa-c01c8716de4a91e4c60f61cf0bb6eaeca5cbf619.tar.gz
refactor to new files
Diffstat (limited to 'src/discord.rs')
-rw-r--r--src/discord.rs54
1 files changed, 54 insertions, 0 deletions
diff --git a/src/discord.rs b/src/discord.rs
new file mode 100644
index 0000000..06baec6
--- /dev/null
+++ b/src/discord.rs
@@ -0,0 +1,54 @@
+use discord::{
+ model::Event,
+ Discord,
+};
+use futures::join;
+use tokio::{
+ sync::mpsc,
+ task::{
+ spawn,
+ spawn_blocking,
+ },
+};
+
+pub async fn handle(
+ token: Option<String>,
+ _sender: mpsc::UnboundedSender<String>,
+ mut receiver: mpsc::UnboundedReceiver<String>,
+) {
+ 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);
+ }
+ })
+ );
+ }
+}