mod mattermost; use anyhow::anyhow; use tokio::{self}; use tracing::debug; struct Vav {} #[async_trait::async_trait] impl mattermost::Handler for Vav { async fn handle( &self, update: mattermost::model::WebsocketUpdate, client: &mattermost::Client, ) -> Result<(), anyhow::Error> { 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(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(()) } } #[tokio::main(worker_threads = 2)] async fn main() -> Result<(), Box> { tracing_subscriber::fmt::init(); let login = std::env::var("USER_MAIL")?; let password = std::env::var("USER_PASSWORD")?; let auth = mattermost::AuthData { login, password }; let mut client = mattermost::Client::new(auth, "https://mattermost.continuum.ii.uni.wroc.pl"); client.update_bearer_token().await?; client.handle_websocket_stream(Vav {}).await?; Ok(()) }