diff options
Diffstat (limited to 'src/main.rs')
-rw-r--r-- | src/main.rs | 45 |
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(()) |