clone everything
This commit is contained in:
parent
74fb2fe396
commit
c8a3038364
1 changed files with 56 additions and 37 deletions
|
@ -10,6 +10,18 @@ mod erreur {
|
||||||
include!("erreur.rs");
|
include!("erreur.rs");
|
||||||
}
|
}
|
||||||
|
|
||||||
|
mod mattermost {
|
||||||
|
include!("mattermost.rs");
|
||||||
|
}
|
||||||
|
|
||||||
|
/// Identifiants pour Mattermost, récupérer une fois dans `main.rs`
|
||||||
|
pub struct IdentifiantsMattermost {
|
||||||
|
pub token: String,
|
||||||
|
pub user: String,
|
||||||
|
pub pass: String,
|
||||||
|
pub url: String,
|
||||||
|
}
|
||||||
|
|
||||||
/// Permet de stocker les informations nécessaire pour utiliser le bot discord
|
/// Permet de stocker les informations nécessaire pour utiliser le bot discord
|
||||||
pub struct ConnectionInfoDiscord {
|
pub struct ConnectionInfoDiscord {
|
||||||
pub token: String,
|
pub token: String,
|
||||||
|
@ -20,8 +32,11 @@ pub struct ConnectionInfoDiscord {
|
||||||
|
|
||||||
/// Structure qui stocke les informations dont le bot a besoin pour communiquer avec Mattermost
|
/// Structure qui stocke les informations dont le bot a besoin pour communiquer avec Mattermost
|
||||||
struct InformationsBot {
|
struct InformationsBot {
|
||||||
|
token: String,
|
||||||
|
user: String,
|
||||||
|
pass: String,
|
||||||
|
url: String,
|
||||||
prefix: Option<String>,
|
prefix: Option<String>,
|
||||||
api: Option<mattermost_api::client::Mattermost>,
|
|
||||||
salon: Option<String>,
|
salon: Option<String>,
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@ -31,59 +46,54 @@ struct InformationsBot {
|
||||||
///
|
///
|
||||||
/// On fait quand même le match pour être sûr.
|
/// On fait quand même le match pour être sûr.
|
||||||
impl InformationsBot {
|
impl InformationsBot {
|
||||||
const err: String = String::from("Erreur lors de la récupération des informations\nTips: start_discord n'a peut-être pas été appelée...");
|
fn err() -> String {
|
||||||
|
String::from("Erreur lors de la récupération des informations\nTips: start_discord n'a peut-être pas été appelée...")
|
||||||
/// Créer une structure vide
|
|
||||||
pub fn nouveau_vide() -> Self {
|
|
||||||
Self {
|
|
||||||
prefix: None,
|
|
||||||
api: None,
|
|
||||||
salon: None,
|
|
||||||
}
|
|
||||||
}
|
}
|
||||||
|
|
||||||
/// Créer une structure personnalisée.
|
/// Créer une structure
|
||||||
pub fn nouveau(
|
pub fn nouveau(
|
||||||
|
identifiants: IdentifiantsMattermost,
|
||||||
prefix: String,
|
prefix: String,
|
||||||
api: mattermost_api::client::Mattermost,
|
|
||||||
salon: String,
|
salon: String,
|
||||||
) -> Option<Self> {
|
) -> Option<Self> {
|
||||||
Some(Self {
|
Some(Self {
|
||||||
|
token: identifiants.token,
|
||||||
|
user: identifiants.user,
|
||||||
|
pass: identifiants.pass,
|
||||||
|
url: identifiants.url,
|
||||||
prefix: Some(prefix),
|
prefix: Some(prefix),
|
||||||
api: Some(api),
|
|
||||||
salon: Some(salon),
|
salon: Some(salon),
|
||||||
})
|
})
|
||||||
}
|
}
|
||||||
|
|
||||||
/// Récupère préfix, sinon panique
|
/// Récupère préfix, sinon panique
|
||||||
pub fn recuperation_prefix(self) -> String {
|
pub fn recuperation_prefix(&self) -> String {
|
||||||
match self.prefix {
|
match &self.prefix {
|
||||||
Some(prefix) => prefix,
|
Some(prefix) => prefix.clone(),
|
||||||
None => panic!(
|
None => panic!(
|
||||||
"{}",
|
"{}",
|
||||||
erreur::message_erreur(&format!("[Recup-Prefix] {}", Self::err))
|
erreur::message_erreur(&format!("[Recup-Prefix] {}", Self::err()))
|
||||||
),
|
),
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
/// Récupère API, sinon panique
|
/// Récupère API, sinon panique
|
||||||
pub fn recuperation_API(self) -> mattermost_api::client::Mattermost {
|
///
|
||||||
match self.api {
|
/// Question importante, je créer l'API dans `main.rs`, alors pourquoi je
|
||||||
Some(api) => api,
|
/// n'ai pas utilisé cette api pour ce fichier ? Tout simplement parce que
|
||||||
None => panic!(
|
/// `mattermost_api::client::Mattermost` n'implémente pas le trait de Clone
|
||||||
"{}",
|
/// impossible donc (pas de succès avec Mutex)...
|
||||||
erreur::message_erreur(&format!("[Recup-API] {}", Self::err))
|
pub async fn recuperation_api(&self) -> mattermost_api::client::Mattermost {
|
||||||
),
|
mattermost::connexion(&self.token, &self.user, &self.pass, &self.url).await
|
||||||
}
|
|
||||||
}
|
}
|
||||||
|
|
||||||
/// Récupère le salon, sinon panique
|
/// Récupère le salon, sinon panique
|
||||||
pub fn recuperation_salon(self) -> String {
|
pub fn recuperation_salon(&self) -> String {
|
||||||
match self.salon {
|
match &self.salon {
|
||||||
Some(salon) => salon,
|
Some(salon) => salon.clone(),
|
||||||
None => panic!(
|
None => panic!(
|
||||||
"{}",
|
"{}",
|
||||||
erreur::message_erreur(&format!("[Recup-Salon] {}", Self::err))
|
erreur::message_erreur(&format!("[Recup-Salon] {}", Self::err()))
|
||||||
),
|
),
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
@ -104,7 +114,7 @@ unsafe fn recuperation_info() -> &'static InformationsBot {
|
||||||
Some(info) => info,
|
Some(info) => info,
|
||||||
None => panic!(
|
None => panic!(
|
||||||
"{}",
|
"{}",
|
||||||
erreur::message_erreur(&format!("[Recup-InfosBot] {}", InformationsBot::err))
|
erreur::message_erreur(&format!("[Recup-InfosBot] {}", InformationsBot::err()))
|
||||||
),
|
),
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
@ -115,8 +125,7 @@ struct Handler;
|
||||||
impl EventHandler for Handler {
|
impl EventHandler for Handler {
|
||||||
// Appellé quand un message est récupérer par le bot
|
// Appellé quand un message est récupérer par le bot
|
||||||
async fn message(&self, ctx: Context, msg: Message) {
|
async fn message(&self, ctx: Context, msg: Message) {
|
||||||
#[allow(unused_assignments)]
|
let infos: &InformationsBot;
|
||||||
let mut infos = &InformationsBot::nouveau_vide();
|
|
||||||
unsafe {
|
unsafe {
|
||||||
infos = recuperation_info();
|
infos = recuperation_info();
|
||||||
}
|
}
|
||||||
|
@ -146,10 +155,13 @@ impl EventHandler for Handler {
|
||||||
}
|
}
|
||||||
|
|
||||||
/// Lance le bot Discord
|
/// Lance le bot Discord
|
||||||
pub async fn start_discord(informations: ConnectionInfoDiscord) {
|
pub async fn start_discord(
|
||||||
|
informations: ConnectionInfoDiscord,
|
||||||
|
identifiants: IdentifiantsMattermost,
|
||||||
|
) {
|
||||||
unsafe {
|
unsafe {
|
||||||
// On enregistre tout de suite nos informations
|
// On enregistre tout de suite nos informations
|
||||||
_INFO = InformationsBot::nouveau(informations.prefix, informations.api, informations.salon);
|
_INFO = InformationsBot::nouveau(identifiants, informations.prefix, informations.salon);
|
||||||
}
|
}
|
||||||
|
|
||||||
// Client Discord (https://docs.rs/serenity/latest/serenity/client/index.html)
|
// Client Discord (https://docs.rs/serenity/latest/serenity/client/index.html)
|
||||||
|
@ -172,18 +184,25 @@ pub async fn start_discord(informations: ConnectionInfoDiscord) {
|
||||||
|
|
||||||
/// Ne peut pas être async (limitation de serde_json)
|
/// Ne peut pas être async (limitation de serde_json)
|
||||||
fn recuperation_salon() -> String {
|
fn recuperation_salon() -> String {
|
||||||
|
let infos: &InformationsBot;
|
||||||
|
unsafe {
|
||||||
|
infos = recuperation_info();
|
||||||
|
}
|
||||||
|
|
||||||
|
infos.recuperation_salon();
|
||||||
|
|
||||||
String::from("temp")
|
String::from("temp")
|
||||||
}
|
}
|
||||||
|
|
||||||
/// Envoie un message sur Mattermost
|
/// Envoie un message sur Mattermost
|
||||||
async fn envoie_msg_mattermost(msg: Message) {
|
async fn envoie_msg_mattermost(msg: Message) {
|
||||||
#[allow(unused_assignments)]
|
let infos: &InformationsBot;
|
||||||
let mut infos = &InformationsBot::nouveau_vide();
|
|
||||||
unsafe {
|
unsafe {
|
||||||
infos = recuperation_info();
|
infos = recuperation_info();
|
||||||
}
|
}
|
||||||
let res = infos
|
let res = infos
|
||||||
.recuperation_API()
|
.recuperation_api()
|
||||||
|
.await
|
||||||
.query::<String>(
|
.query::<String>(
|
||||||
"POST",
|
"POST",
|
||||||
"post",
|
"post",
|
||||||
|
|
Reference in a new issue