summary refs log tree commit diff
path: root/src/main.rs
diff options
context:
space:
mode:
Diffstat (limited to 'src/main.rs')
-rw-r--r--src/main.rs45
1 files changed, 10 insertions, 35 deletions
diff --git a/src/main.rs b/src/main.rs
index 36dfbb8..b735100 100644
--- a/src/main.rs
+++ b/src/main.rs
@@ -1,54 +1,29 @@
 mod mattermost;
-
 use anyhow::anyhow;
 use tokio::{self};
-use tracing::{debug, info};
+use tracing::debug;
 
 struct Vav {}
 #[async_trait::async_trait]
 impl mattermost::Handler for Vav {
     async fn handle(
         &self,
-        value: serde_json::Value,
+        update: mattermost::model::WebsocketUpdate,
         client: &mattermost::Client,
     ) -> Result<(), anyhow::Error> {
-        debug!("{value:?}");
-        let object = value
-            .as_object()
-            .ok_or(anyhow!("Response from mattermost should be object"))?;
-        if object
-            .get("event")
-            .ok_or(anyhow!("missing event type"))?
-            .as_str()
-            .ok_or(anyhow!("event type should be a string"))?
-            != "posted"
-        {
-            return Ok(());
-        }
-        let post: serde_json::Value = serde_json::from_str(
-            object
-                .get("data")
-                .unwrap()
-                .get("post")
-                .ok_or(anyhow!("missing post field"))?
-                .as_str()
-                .ok_or(anyhow!("post should be string"))?,
-        )?;
-        debug!("Post field {post:?}");
-        let object = post
-            .as_object()
-            .ok_or(anyhow!("Post field should represent legit object"))?;
-        let message = object
-            .get("message")
-            .ok_or(anyhow!("missing message"))?
-            .as_str()
-            .ok_or(anyhow!("message should be string"))?;
+        debug!("as json: {update:?}");
+
+        let posted = match update.update {
+            mattermost::model::Update::Posted(posted) => posted,
+            _ => return Ok(()),
+        };
+        let message = &posted.post.message;
         if !message.starts_with('!') {
             return Ok(());
         }
         let message = message.strip_prefix('!').unwrap();
         match message{
-            "adres" => client.reply_to(&post, "Uniwersytet Wrocławski Instytut Informatyki; pl. Frederyka Joliot-Curie 15; 50-383 Wrocław".to_owned()).await?,
+            "adres" => client.reply_to(posted.post, "Uniwersytet Wrocławski Instytut Informatyki; pl. Frederyka Joliot-Curie 15; 50-383 Wrocław".to_owned()).await?,
             _ => return Err(anyhow!("Unrecognized command {message}")),
         }
         Ok(())