fix typo
This commit is contained in:
parent
065320ccf4
commit
453604e164
4 changed files with 23 additions and 23 deletions
10
README.md
10
README.md
|
@ -1,7 +1,7 @@
|
||||||
# matter_bot
|
# matter_bot
|
||||||
Au début, `matter_bot` devait être un bot qui fait le pont entre Discord et Mattermost.
|
Au début, `matter_bot` devait être un bot qui fait le pont entre Discord et Mattermost.
|
||||||
Malheureusement, je n'ai pas réussi a recevoir les messages depuis Mattermost...
|
Malheureusement, je n'ai pas réussi à recevoir les messages depuis Mattermost...
|
||||||
MAIS, tout ce qui est du côté de Discord devrait fonctionné proprement.
|
MAIS, tout ce qui est du côté de Discord devrait fonctionner proprement.
|
||||||
|
|
||||||
J'ai laissé tout ce que j'ai commencé pour Mattermost, il faut donc quand-même renseigner
|
J'ai laissé tout ce que j'ai commencé pour Mattermost, il faut donc quand-même renseigner
|
||||||
les variables demandés ci-dessous pour pouvoir lancer le bot.
|
les variables demandés ci-dessous pour pouvoir lancer le bot.
|
||||||
|
@ -29,7 +29,7 @@ PREFIX=votre_prefix_ici # commun aux deux bots, par défaut: ç
|
||||||
|
|
||||||
#### Mattermost
|
#### Mattermost
|
||||||
Dans le cas ou vous optez pour le token, vous devez ajouter un bot, pour ce faire (d'après la [documentation officielle](https://developers.mattermost.com/integrate/admin-guide/admin-bot-accounts/)) :
|
Dans le cas ou vous optez pour le token, vous devez ajouter un bot, pour ce faire (d'après la [documentation officielle](https://developers.mattermost.com/integrate/admin-guide/admin-bot-accounts/)) :
|
||||||
- Cliquez sur les 9 carrés en haut a gauche
|
- Cliquez sur les 9 carrés en haut à gauche
|
||||||
- Integrations
|
- Integrations
|
||||||
- Bot Accounts
|
- Bot Accounts
|
||||||
- Add Bot Account
|
- Add Bot Account
|
||||||
|
@ -68,7 +68,7 @@ services:
|
||||||
|
|
||||||
---
|
---
|
||||||
### Estimation du temps de build
|
### Estimation du temps de build
|
||||||
Sur ma machine (WSL), le temps de build d'environ une minute.
|
Sur ma machine (WSL), le temps de build est d'environ une minute.
|
||||||
|
|
||||||
`time cargo build` :
|
`time cargo build` :
|
||||||
```
|
```
|
||||||
|
@ -87,7 +87,7 @@ Beaucoup de blabla, au final, qu'est ce qui fonctionne ?
|
||||||
- [ ] Commandes Mattermost
|
- [ ] Commandes Mattermost
|
||||||
|
|
||||||
Cependant, je pense avoir fait 50% du travail pour le pont Mattermost, il manque, je pense, une implémentation du websocket de la part
|
Cependant, je pense avoir fait 50% du travail pour le pont Mattermost, il manque, je pense, une implémentation du websocket de la part
|
||||||
du [repsonsable de `mattermost_api`](https://github.com/Celeo). J'ai essayer de le faire moi-même mais pas réussi.
|
du [responsable de `mattermost_api`](https://github.com/Celeo). J'ai essayé de le faire moi-même mais pas réussi.
|
||||||
|
|
||||||
# Exécution
|
# Exécution
|
||||||
<div align="center">
|
<div align="center">
|
||||||
|
|
|
@ -42,7 +42,7 @@ struct InformationsBot {
|
||||||
|
|
||||||
/// Implémentation pour utiliser facilement les valeurs de la structure
|
/// Implémentation pour utiliser facilement les valeurs de la structure
|
||||||
/// Normalement, rien ne panique car si `start_discord`
|
/// Normalement, rien ne panique car si `start_discord`
|
||||||
/// n'as pas encore été appellé on panique avant d'arriver ici.
|
/// n'as pas encore été appelé, on panique avant d'arriver ici.
|
||||||
///
|
///
|
||||||
/// 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 {
|
||||||
|
@ -80,7 +80,7 @@ impl InformationsBot {
|
||||||
/// Récupère API, sinon panique
|
/// Récupère API, sinon panique
|
||||||
///
|
///
|
||||||
/// Question importante, je créer l'API dans `main.rs`, alors pourquoi je
|
/// Question importante, je créer l'API dans `main.rs`, alors pourquoi je
|
||||||
/// n'ai pas utilisé cette api pour ce fichier ? Tout simplement parce que
|
/// n'ai pas utilisé cet api pour ce fichier ? Tout simplement parce que
|
||||||
/// `mattermost_api::client::Mattermost` n'implémente pas le trait de Clone
|
/// `mattermost_api::client::Mattermost` n'implémente pas le trait de Clone
|
||||||
/// impossible donc (pas de succès avec Mutex)...
|
/// impossible donc (pas de succès avec Mutex)...
|
||||||
pub async fn recuperation_api(&self) -> mattermost_api::client::Mattermost {
|
pub async fn recuperation_api(&self) -> mattermost_api::client::Mattermost {
|
||||||
|
@ -102,9 +102,9 @@ impl InformationsBot {
|
||||||
static mut _INFO: Option<InformationsBot> = None;
|
static mut _INFO: Option<InformationsBot> = None;
|
||||||
|
|
||||||
/// Récupère les informations qui sont nécessaire à la communication avec Mattermost
|
/// Récupère les informations qui sont nécessaire à la communication avec Mattermost
|
||||||
/// Attention, on fait paniqué le programme si l valeur est vide, pour éviter
|
/// Attention, on fait paniqué le programme si la valeur est vide, pour éviter
|
||||||
/// ça, il faut appeller cette fonction seulement quand `start_discord`
|
/// ça, il faut appeler cette fonction seulement quand `start_discord`
|
||||||
/// a été appellé car c'est elle qui ajoute le préfixe à `_INFO`
|
/// a été appelé car c'est elle qui ajoute le préfixe à `_INFO`
|
||||||
///
|
///
|
||||||
/// Je sais que c'est vraiment naze de faire ça (variable static + blocs unsafe)
|
/// Je sais que c'est vraiment naze de faire ça (variable static + blocs unsafe)
|
||||||
/// mais c'est la seul solution que j'ai trouvé en évitant de trop étoffé avec du
|
/// mais c'est la seul solution que j'ai trouvé en évitant de trop étoffé avec du
|
||||||
|
@ -140,7 +140,7 @@ impl EventHandler for Handler {
|
||||||
// Gestion erreur lors de l'envoie de la réponse
|
// Gestion erreur lors de l'envoie de la réponse
|
||||||
erreur::affiche_message_erreur(&format!("Erreur d'envoie de message : {:?}", err));
|
erreur::affiche_message_erreur(&format!("Erreur d'envoie de message : {:?}", err));
|
||||||
}
|
}
|
||||||
// Ici on peut rajouter des `if` pour rajouter des commandes...
|
// Ici on peut rajouter des `if` pour ajouter des commandes...
|
||||||
} else {
|
} else {
|
||||||
/* Dans ce cas là, ce n'est pas une commande, alors c'est un message.
|
/* Dans ce cas là, ce n'est pas une commande, alors c'est un message.
|
||||||
* Il faut l'envoyer à Mattermost. */
|
* Il faut l'envoyer à Mattermost. */
|
||||||
|
@ -148,9 +148,9 @@ impl EventHandler for Handler {
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
// Fonction appellé quand le bot est lancé et connecté
|
// Fonction appelé quand le bot est lancé et connecté
|
||||||
async fn ready(&self, _: Context, _: Ready) {
|
async fn ready(&self, _: Context, _: Ready) {
|
||||||
println!("Écoute les évènements Discord...");
|
println!("Écoute les événements Discord...");
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
|
@ -44,7 +44,7 @@ async fn main() {
|
||||||
match env::var("PSEUDO") {
|
match env::var("PSEUDO") {
|
||||||
Ok(string) => {
|
Ok(string) => {
|
||||||
if token_recuperer {
|
if token_recuperer {
|
||||||
panic!("{}", erreur::message_erreur("Tu as déjà choisie un token, vous ne pouvez pas aussi avoir définie un pseudo."));
|
panic!("{}", erreur::message_erreur("Tu as déjà choisie un token, vous ne pouvez pas aussi avoir définit un pseudo."));
|
||||||
}
|
}
|
||||||
pseudo_ok = true;
|
pseudo_ok = true;
|
||||||
pseudo = string;
|
pseudo = string;
|
||||||
|
@ -63,7 +63,7 @@ async fn main() {
|
||||||
match env::var("MOT_DE_PASSE") {
|
match env::var("MOT_DE_PASSE") {
|
||||||
Ok(string) => {
|
Ok(string) => {
|
||||||
if token_recuperer {
|
if token_recuperer {
|
||||||
panic!("{}", erreur::message_erreur("Tu as déjà choisie un token, vous ne pouvez pas aussi avoir définie un mot de passe."));
|
panic!("{}", erreur::message_erreur("Tu as déjà choisie un token, vous ne pouvez pas aussi avoir définit un mot de passe."));
|
||||||
}
|
}
|
||||||
mot_de_passe = string;
|
mot_de_passe = string;
|
||||||
}
|
}
|
||||||
|
@ -72,7 +72,7 @@ async fn main() {
|
||||||
panic!(
|
panic!(
|
||||||
"{}",
|
"{}",
|
||||||
erreur::message_erreur(
|
erreur::message_erreur(
|
||||||
"Tu as renseigné un pseudo mais pas de mot de passe dans le fichier .env"
|
"Tu as renseigner un pseudo mais pas de mot de passe dans le fichier .env"
|
||||||
)
|
)
|
||||||
);
|
);
|
||||||
}
|
}
|
||||||
|
@ -106,7 +106,7 @@ async fn main() {
|
||||||
// On affiche les infos d'une team
|
// On affiche les infos d'une team
|
||||||
mattermost::team_info(&api, &equipe).await;
|
mattermost::team_info(&api, &equipe).await;
|
||||||
|
|
||||||
// Tâche en paralèlle
|
// Tâche en parallèle
|
||||||
mattermost::start_mattermost(mattermost::ConnectionInfoWebsocket {
|
mattermost::start_mattermost(mattermost::ConnectionInfoWebsocket {
|
||||||
api,
|
api,
|
||||||
token: token_mattermost.clone(), /* , prefix */
|
token: token_mattermost.clone(), /* , prefix */
|
||||||
|
|
|
@ -146,7 +146,7 @@ pub async fn get_channel_info(
|
||||||
}
|
}
|
||||||
|
|
||||||
/// Récupère l'ID du salon renseigné grâce à son nom en faisant une requête à l'API de Mattermost
|
/// 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...
|
#[allow(dead_code)] // je comprends pas pourquoi j'ai besoin de mettre ça, parce que j'utilise le code en dessous...
|
||||||
pub async fn channel_id_by_name(api: &mattermost_api::client::Mattermost, salon: String) -> String {
|
pub async fn channel_id_by_name(api: &mattermost_api::client::Mattermost, salon: String) -> String {
|
||||||
println!("\nRécupération de l'ID du salon {}...", salon);
|
println!("\nRécupération de l'ID du salon {}...", salon);
|
||||||
match get_channel_info(api).await {
|
match get_channel_info(api).await {
|
||||||
|
@ -175,7 +175,7 @@ pub async fn channel_id_by_name(api: &mattermost_api::client::Mattermost, salon:
|
||||||
}
|
}
|
||||||
|
|
||||||
/// 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'utilise 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) {
|
||||||
println!("\nTentative de récupération de l'équipe {}...", equipe);
|
println!("\nTentative de récupération de l'équipe {}...", equipe);
|
||||||
match api.get_team_info(equipe).await {
|
match api.get_team_info(equipe).await {
|
||||||
|
@ -214,13 +214,13 @@ pub async fn connect_websocket(
|
||||||
}
|
}
|
||||||
|
|
||||||
/// Lance le bot Mattermost
|
/// Lance le bot Mattermost
|
||||||
#[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'utilise le code en dessous...
|
||||||
pub async fn start_mattermost(connection: ConnectionInfoWebsocket) {
|
pub async fn start_mattermost(connection: ConnectionInfoWebsocket) {
|
||||||
match connect_websocket(&connection.api, &connection.token).await {
|
match connect_websocket(&connection.api, &connection.token).await {
|
||||||
Ok(res) => {
|
Ok(res) => {
|
||||||
/* Pour l'instant ici on a reçois un string donc on l'affiche (Result<String, ApiError>) mais
|
/* 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
|
* à 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)
|
* le bot discord le bloqué et ici ça s'éxécute en parallèle au bot discord)
|
||||||
* et on récupère toutes les informations dont on a besoin, c'est à dire les
|
* et on récupère toutes les informations dont on a besoin, c'est à dire les
|
||||||
* messages envoyés. */
|
* messages envoyés. */
|
||||||
println!("{}", res);
|
println!("{}", res);
|
||||||
|
@ -237,7 +237,7 @@ pub async fn start_mattermost(connection: ConnectionInfoWebsocket) {
|
||||||
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
|
||||||
|
|
||||||
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 é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).
|
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 HTTP400 malheureusement
|
||||||
|
@ -254,5 +254,5 @@ pub async fn start_mattermost(connection: ConnectionInfoWebsocket) {
|
||||||
-> S'il y en a une qui n'est plus présente, on la retire
|
-> S'il y en a une qui n'est plus présente, on la retire
|
||||||
-> https://api.mattermost.com/#operation/DeleteCommand
|
-> https://api.mattermost.com/#operation/DeleteCommand
|
||||||
|
|
||||||
- Les commandes font une requête, doit on faire tourner un serveur web en local ?
|
- Les commandes font une requête, doit-on faire tourner un serveur web en local ?
|
||||||
*/
|
*/
|
||||||
|
|
Reference in a new issue