Changes
- Better errors message - Add function to connect to mattermost
This commit is contained in:
parent
97060193b0
commit
76f3babd53
1 changed files with 40 additions and 6 deletions
|
@ -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
|
||||||
|
|
Reference in a new issue