- Channel Structure
- API Endpoint of the list of available channels
- Function who return the correct ID of the channel filled in the .env file
This commit is contained in:
Mylloon 2022-01-05 01:26:06 +01:00
parent 67a668dfb4
commit 52872ffebf
Signed by: Anri
GPG key ID: A82D63DFF8D1317F

View file

@ -1,5 +1,6 @@
use chrono::prelude::*; use chrono::prelude::*;
use mattermost_api::prelude::*; use mattermost_api::prelude::*;
use serde::{Deserialize, Serialize};
use serde_json::json; use serde_json::json;
mod erreur { mod erreur {
@ -106,6 +107,73 @@ impl Affichage for mattermost_api::models::TeamInformation {
} }
} }
/// Response struct from /channels
///
/// Pour savoir ce qu'il faut mettre ici, il faut check la documentation
/// https://api.mattermost.com/#operation/GetAllChannels
/// et bien faire attention aux valeurs qui peuvent être null
/// -> on peut le savoir en regardant le détail de ce qui est envoyé à Mattermost
/// ex ici, il faut cliquer sur : 200 Channel list retrieval successful
/// pour accéder à la liste déroulante :)
#[derive(Debug, Deserialize, Serialize)]
pub struct ChannelInformation {
pub id: String,
pub create_at: i64,
pub update_at: i64,
pub delete_at: i64,
pub team_id: String,
#[serde(rename = "type")]
pub type_: String,
pub display_name: String,
pub name: String,
pub header: String,
pub purpose: String,
pub last_post_at: i64,
pub total_msg_count: i64,
pub extra_update_at: i64,
pub creator_id: String,
pub team_display_name: String,
pub team_name: String,
pub team_update_at: i64,
pub policy_id: Option<String>,
}
/// Récupère la liste de tous les salons disponibles
pub async fn get_channel_info(
api: &mattermost_api::client::Mattermost,
) -> Result<Vec<ChannelInformation>, ApiError> {
api.query("GET", "channels", None, None).await
}
/// Récupère l'ID du salon renseigné grâce à son nom en faisant une requête à l'API de Mattermost
#[allow(dead_code)] // je comprends pas pourquoi j'ai besoin de mettre ça, parce que j'utilises le code en dessous...
pub async fn channel_id_by_name(api: &mattermost_api::client::Mattermost, salon: String) -> String {
println!("\nTentative de récupération de l'équipe {}...", salon);
match get_channel_info(api).await {
Ok(channels) => {
for channel in &channels {
if &channel.name == &salon {
return channel.id.clone();
}
}
panic!(
"{}",
erreur::message_erreur("Impossible de récupérer l'ID du salon renseigné: Pas présent dans la liste récupérée")
)
}
Err(err) => {
panic!(
"{}",
erreur::message_erreur(&format!(
"Impossible de récupérer l'ID du salon renseigné: {}",
err
))
)
}
}
}
/// Affiche les informations complète sur une équipe /// Affiche les informations complète sur une équipe
#[allow(dead_code)] // je comprends pas pourquoi j'ai besoin de mettre ça, parce que j'utilises le code en dessous... #[allow(dead_code)] // je comprends pas pourquoi j'ai besoin de mettre ça, parce que j'utilises le code en dessous...
pub async fn team_info(api: &mattermost_api::client::Mattermost, equipe: &str) { pub async fn team_info(api: &mattermost_api::client::Mattermost, equipe: &str) {