From 76f3babd53c76778f754fc2a1dc3e66ee0918a3b Mon Sep 17 00:00:00 2001 From: Mylloon Date: Tue, 4 Jan 2022 18:19:30 +0100 Subject: [PATCH] Changes - Better errors message - Add function to connect to mattermost --- src/mattermost.rs | 46 ++++++++++++++++++++++++++++++++++++++++------ 1 file changed, 40 insertions(+), 6 deletions(-) diff --git a/src/mattermost.rs b/src/mattermost.rs index b855b25..cc3dbc1 100644 --- a/src/mattermost.rs +++ b/src/mattermost.rs @@ -2,6 +2,21 @@ use chrono::prelude::*; use mattermost_api::prelude::*; use serde_json::json; +mod erreur { + include!("erreur.rs"); +} + +/// Permet de stocker les informations nécessaire pour utiliser le websocket +pub struct ConnectionInfoWebsocket { + /// API du client Mattermost + pub api: mattermost_api::client::Mattermost, + + /// Token utilisé + pub token: String, + /* /// Prefix utilisé + pub prefix: String */ +} + /// Se connecte à Mattermost pub async fn connexion( token: &str, @@ -23,6 +38,7 @@ pub async fn connexion( api } +/// Permet d'afficher un contenu proprement trait Affichage { /// Renvoie un affichage "propre" concernant l'équipe fn fprint(self) -> String; @@ -92,19 +108,18 @@ impl Affichage for mattermost_api::models::TeamInformation { /// Affiche les informations complète sur une équipe pub async fn team_info(api: &mattermost_api::client::Mattermost, equipe: &str) { + println!("\nTentative de récupération de l'équipe {}...", equipe); match api.get_team_info(equipe).await { Ok(infos) => { println!("{}", infos.fprint()); } Err(e) => { - println!("Error: {}", e); + println!("[Display Team Info] {}", erreur::message_erreur(&format!("Error: {}", e))); } } } /// 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, @@ -114,7 +129,7 @@ pub async fn connect_websocket( "websocket", None, Some( - &json!( + &json!( // d'après la documentation : https://api.mattermost.com/#tag/WebSocket { "seq": 1, "action": "authentication_challenge", @@ -129,8 +144,25 @@ pub async fn connect_websocket( .await } +/// Lance le bot Mattermost +pub async fn start_mattermost(connection: ConnectionInfoWebsocket) { + match connect_websocket(&connection.api, &connection.token).await { + Ok(res) => { + /* Pour l'instant ici on a reçois un string donc on l'affiche (Result) mais + * à l'avenir normalement ici on bloque le thread principale (ou on laisse + * le bot discord le bloqué et ici ça s'execute en parallèle au bot discord) + * et on récupère toutes les informations dont on a besoin, c'est à dire les + * messages envoyés. */ + println!("{}", res); + } + Err(e) => { + println!("[Websocket] {}", erreur::message_erreur(&format!("Error: {}", e))); + } + } +} + /* TODO - !! Réflexion 1 -> Websocket https://api.mattermost.com/#tag/WebSocket + !! 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 @@ -138,9 +170,11 @@ pub async fn connect_websocket( 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). + -> Appel de la connexion au websocket donne une erreur HTTP400 malheureusement + ------------- - !! Réflexion 2 -> pas de websocket, on utilise des commandes + !! Réflexion 2 : pas de websocket, on utilise des commandes - Faire une fonction qui récupère la liste des commandes -> https://api.mattermost.com/#operation/ListCommands