diff --git a/src/discord.rs b/src/discord.rs index 63151cc..f06faa3 100644 --- a/src/discord.rs +++ b/src/discord.rs @@ -14,6 +14,10 @@ mod mattermost { include!("mattermost.rs"); } +/* J'ai séparer les deux structures publiques pour que ce soit + * plus clair et lisible, ensuite je réunies toutes les informations + * dans une structure privé du fichier */ + /// Identifiants pour Mattermost, récupérer une fois dans `main.rs` pub struct IdentifiantsMattermost { pub token: String, @@ -26,7 +30,6 @@ pub struct IdentifiantsMattermost { pub struct ConnectionInfoDiscord { pub token: String, pub prefix: String, - pub api: mattermost_api::client::Mattermost, pub salon: String, } diff --git a/src/main.rs b/src/main.rs index 9c5b298..cb4256d 100644 --- a/src/main.rs +++ b/src/main.rs @@ -34,17 +34,17 @@ async fn main() { "{}", erreur::message_erreur("Token discord non trouvé dans le fichier .env") ) - }); // récupération du token + }); // Récupération du prefix let prefix = env::var("PREFIX").unwrap_or_else(|_| String::from("ç")); // récupération du prefix // Récupération du pseudo let mut pseudo_ok = false; - match env::var("PSEUDO") { + match env::var("PSEUDO_MATTERMOST") { Ok(string) => { if token_recuperer { - panic!("{}", erreur::message_erreur("Tu as déjà choisie un token, vous ne pouvez pas aussi avoir définit un pseudo.")); + panic!("{}", erreur::message_erreur("Tu as déjà choisie un token pour Mattermost, vous ne pouvez pas aussi avoir définit un pseudo.")); } pseudo_ok = true; pseudo = string; @@ -53,17 +53,19 @@ async fn main() { if !token_recuperer { panic!( "{}", - erreur::message_erreur("Aucun token ni pseudo trouvé dans le fichier .env") + erreur::message_erreur( + "Aucun token ni pseudo trouvé dans le fichier .env pour Mattermost" + ) ); } } } // Récupération du mot de passe - match env::var("MOT_DE_PASSE") { + match env::var("MDP_MATTERMOST") { Ok(string) => { if token_recuperer { - panic!("{}", erreur::message_erreur("Tu as déjà choisie un token, vous ne pouvez pas aussi avoir définit un mot de passe.")); + panic!("{}", erreur::message_erreur("Tu as déjà choisie un token pour Mattermost, vous ne pouvez pas aussi avoir définit un mot de passe.")); } mot_de_passe = string; } @@ -72,74 +74,76 @@ async fn main() { panic!( "{}", erreur::message_erreur( - "Tu as renseigner un pseudo mais pas de mot de passe dans le fichier .env" + "Tu as renseigner un pseudo pour Mattermost mais pas de mot de passe dans le fichier .env" ) ); } } } - let mut url = env::var("URL").unwrap_or_else(|_| { + let mut url = env::var("URL_MATTERMOST").unwrap_or_else(|_| { panic!( "{}", - erreur::message_erreur("URL non trouvé dans le fichier .env") + erreur::message_erreur("URL de l'instance Mattermost non trouvé dans le fichier .env") ) }); // récupération de l'url if url.ends_with('/') { // Si l'url finit par un '/' url = url[0..url.len() - 1].to_string(); // on retire le / } + if !url.starts_with("http://") && !url.starts_with("https://") { + // Si l'url commence pas par 'http(s)' + url = format!("http://{}", url); // on ajoute http + } - // on s'embête pas, on créer plusieurs jeu d'API utilisé par mattermost parce que elle n'implémente pas la Copy - let api = mattermost::connexion(&token_mattermost, &pseudo, &mot_de_passe, &url).await; - let api2 = mattermost::connexion(&token_mattermost, &pseudo, &mot_de_passe, &url).await; - - let api_discord = mattermost::connexion(&token_mattermost, &pseudo, &mot_de_passe, &url).await; // api utilisé par discord pour mattermost - - let equipe = env::var("EQUIPE").unwrap_or_else(|_| { - // Récupération de l'équipe - panic!( - "{}", - erreur::message_erreur("Équipe non trouvé dans le fichier .env") + // Récupération équipe + if let Ok(string) = env::var("EQUIPE_MATTERMOST") { + // On affiche les infos d'une team + mattermost::team_info( + &mattermost::connexion(&token_mattermost, &pseudo, &mot_de_passe, &url).await, + &string, ) - }); + .await; + } - // On affiche les infos d'une team - mattermost::team_info(&api, &equipe).await; - - // Tâche en parallèle - mattermost::start_mattermost(mattermost::ConnectionInfoWebsocket { - api, - token: token_mattermost.clone(), /* , prefix */ - }) - .await; - - /* On créer notre structure avec les identifiants Mattermost - * que notre fichier Discord à besoin pour envoyer des message - * sur Mattermost. */ - let id = discord::IdentifiantsMattermost { - token: token_mattermost, - user: pseudo, - pass: mot_de_passe, - url, - }; - - let salon = env::var("SALON").unwrap_or_else(|_| { - // Récupération de l'équipe + let salon = env::var("SALON_MATTERMOST").unwrap_or_else(|_| { + // Récupération du salon panic!( "{}", erreur::message_erreur("Salon non trouvé dans le fichier .env") ) }); + /* Désactiver car websocket marche pas (erreur HTTP 400) + // Tâche en parallèle + mattermost::start_mattermost(mattermost::ConnectionInfoWebsocket { + api: mattermost::connexion(&token_mattermost, &pseudo, &mot_de_passe, &url).await, + token: token_mattermost.clone(), + }) + .await; */ + // Bloque le thread principale en quelque sorte discord::start_discord( + /* On instancie notre structure avec les identifiants Discord + * pour pouvoir s'y connecter, avec un salon Mattermost où les + * messages seront envoyés. */ discord::ConnectionInfoDiscord { token: token_discord, prefix, - api: api_discord, - salon: mattermost::channel_id_by_name(&api2, salon).await, + salon: mattermost::channel_id_by_name( + &mattermost::connexion(&token_mattermost, &pseudo, &mot_de_passe, &url).await, + salon, + ) + .await, // récupération ID du salon + }, + /* On instancie notre structure avec les identifiants Mattermost + * que notre fichier Discord à besoin pour envoyer des message + * sur Mattermost. */ + discord::IdentifiantsMattermost { + token: token_mattermost, + user: pseudo, + pass: mot_de_passe, + url, }, - id, ) .await; } diff --git a/src/mattermost.rs b/src/mattermost.rs index 2c1dfe9..4835ec8 100644 --- a/src/mattermost.rs +++ b/src/mattermost.rs @@ -240,7 +240,7 @@ pub async fn start_mattermost(connection: ConnectionInfoWebsocket) { En attendant, utiliser un websocket rend tout plus simple, on récupère tout les événements qu'on reçoit, 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 + -> Appel de la connexion au websocket donne une erreur HTTP 400 malheureusement -------------