- Better errors message
- Add function to connect to mattermost
This commit is contained in:
Mylloon 2022-01-04 18:19:30 +01:00
parent 97060193b0
commit 76f3babd53
Signed by: Anri
GPG key ID: A82D63DFF8D1317F

View file

@ -2,6 +2,21 @@ use chrono::prelude::*;
use mattermost_api::prelude::*; use mattermost_api::prelude::*;
use serde_json::json; 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 /// Se connecte à Mattermost
pub async fn connexion( pub async fn connexion(
token: &str, token: &str,
@ -23,6 +38,7 @@ pub async fn connexion(
api api
} }
/// Permet d'afficher un contenu proprement
trait Affichage { trait Affichage {
/// Renvoie un affichage "propre" concernant l'équipe /// Renvoie un affichage "propre" concernant l'équipe
fn fprint(self) -> String; fn fprint(self) -> String;
@ -92,19 +108,18 @@ impl Affichage for mattermost_api::models::TeamInformation {
/// Affiche les informations complète sur une équipe /// Affiche les informations complète sur une équipe
pub async fn team_info(api: &mattermost_api::client::Mattermost, equipe: &str) { 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 { match api.get_team_info(equipe).await {
Ok(infos) => { Ok(infos) => {
println!("{}", infos.fprint()); println!("{}", infos.fprint());
} }
Err(e) => { Err(e) => {
println!("Error: {}", e); println!("[Display Team Info] {}", erreur::message_erreur(&format!("Error: {}", e)));
} }
} }
} }
/// Se connecte au websocket /// Se connecte au websocket
///
/// Malheureusement, reçois systématiquement une erreur 400, une erreur de token ?
pub async fn connect_websocket( pub async fn connect_websocket(
api: &mattermost_api::client::Mattermost, api: &mattermost_api::client::Mattermost,
token: &str, token: &str,
@ -114,7 +129,7 @@ pub async fn connect_websocket(
"websocket", "websocket",
None, None,
Some( Some(
&json!( &json!( // d'après la documentation : https://api.mattermost.com/#tag/WebSocket
{ {
"seq": 1, "seq": 1,
"action": "authentication_challenge", "action": "authentication_challenge",
@ -129,8 +144,25 @@ pub async fn connect_websocket(
.await .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<String, ApiError>) 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 /* 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 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) 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 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 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). 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 - Faire une fonction qui récupère la liste des commandes
-> https://api.mattermost.com/#operation/ListCommands -> https://api.mattermost.com/#operation/ListCommands