diff --git a/src/main.rs b/src/main.rs index d31b239..7600502 100644 --- a/src/main.rs +++ b/src/main.rs @@ -81,6 +81,15 @@ async fn main() { ) }); mattermost::team_info(&api, &equipe).await; + + match mattermost::connect_websocket(&api, &token).await { + Ok(res) => { + println!("{}", res); + } + Err(e) => { + println!("Error: {}", e); + } + } } /// Jolie message d'erreur diff --git a/src/mattermost.rs b/src/mattermost.rs index 58ea490..e1587f7 100644 --- a/src/mattermost.rs +++ b/src/mattermost.rs @@ -1,5 +1,6 @@ use chrono::prelude::*; use mattermost_api::prelude::*; +use serde_json::json; /// Se connecte à Mattermost pub async fn connexion( @@ -101,14 +102,41 @@ pub async fn team_info(api: &mattermost_api::client::Mattermost, equipe: &str) { } } +/// Se connecte au websocket +/// +/// Malheureusement, reçois systématiquement une erreur 400, une erreur de token ? +pub async fn connect_websocket( + api: &mattermost_api::client::Mattermost, + token: &str, +) -> Result { + api.query::( + "GET", + "websocket", + None, + Some( + &json!( + { + "seq": 1, + "action": "authentication_challenge", + "data": { + "token": &token + } + } + ) + .to_string(), + ), + ) + .await +} + /* TODO !! Réflexion 1 -> Websocket https://api.mattermost.com/#tag/WebSocket Malheureusement, aucune réponse sur une possible date de sortie du support du websocket dans la librarie que j'utilises (mon issue : https://github.com/Celeo/mattermost_api/issues/1) Cependant je pense que c'est quand même prévu à l'avenir : https://github.com/Celeo/mattermost_api/blob/master/src/client.rs#L185 - En attendant, utiliser un websocket rend tout plus simple, on récupère tout les evenements qu'on recois, on traite les messages - et si un utilisateur demande une commande on envoie un message en réponse. + En attendant, utiliser un websocket rend tout plus simple, on récupère tout les evenements qu'on reçois, on traite les messages + et si un utilisateur demande une commande on envoie un message en réponse (en théorie). ------------- @@ -123,6 +151,4 @@ pub async fn team_info(api: &mattermost_api::client::Mattermost, equipe: &str) { -> https://api.mattermost.com/#operation/DeleteCommand - Les commandes font une requête, doit on faire tourner un serveur web en local ? - - */