2021-12-03 10:29:32 +01:00
# matter_bot
2022-01-04 18:18:04 +01:00
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...
2022-01-04 22:51:59 +01:00
MAIS, tout ce qui est du côté de Discord devrait fonctionné proprement.
2022-01-04 18:18:04 +01:00
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.
2021-12-10 16:41:33 +01:00
2021-12-03 10:29:32 +01:00
## Pré-requis
2021-12-21 09:12:40 +01:00
`openssl` requis par [`mattermost_api` ](https://github.com/Celeo/mattermost_api )
2021-12-10 16:50:20 +01:00
```bash
sudo apt install libssl-dev
```
2021-12-21 10:32:33 +01:00
`.env` placé dans la racine du projet qui contient ses différentes variables :
2021-12-03 10:29:32 +01:00
```
2022-01-04 18:18:04 +01:00
TOKEN_MATTERMOST=votre_token_ici # pas besoin de token si vous mettez un combo pseudo/mot-de-passe
PSEUDO=votre_pseudo_ici # pas besoin de pseudo si un token est renseigné
2021-12-21 11:02:43 +01:00
MOT_DE_PASSE=votre_mot-de-passe_ici # pas besoin de mot de passe si un token est renseigné
2022-01-04 18:18:04 +01:00
URL=url_du_site_ici # ex: https://talk.up8.edu
EQUIPE=nom_de_lequipe # ex: etudiant-es
2022-01-05 00:15:47 +01:00
SALON=nom_du_salon # ex: off-topic
2022-01-04 18:18:04 +01:00
TOKEN_DISCORD=votre_token_ici # token discord
PREFIX=votre_prefix_ici # commun aux deux bots, par défaut: ç
2021-12-03 10:48:11 +01:00
```
2022-01-04 18:21:15 +01:00
*Note: Si les deux moyens de connexion pour Mattermost sont renseignés (token et pseudo/mot-de-passe), le bot ne se lancera pas.*
2021-12-21 11:02:43 +01:00
2022-01-04 18:18:04 +01:00
#### Mattermost
2021-12-21 11:02:43 +01:00
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
- Integrations
- Bot Accounts
- Add Bot Account
- Remplissez les champs
2022-01-03 11:30:56 +01:00
- Cochez la case `post:all` pour être sur qu'il n'y aura pas de problèmes de permission (facultatif)
2021-12-21 11:02:43 +01:00
- Create Bot Account
2021-12-21 11:15:07 +01:00
- Dans la page suivante, vous aurez votre token d'accès
2022-01-04 18:21:50 +01:00
#### Discord
<!-- ici un tuto sur comment obtenir un token discord -->
2021-12-21 10:14:59 +01:00
---
### Tests en local
En local, j'ai utilisé Docker pour héberger mon instance de Mattermost et pouvoir faire des tests, voici le docker-compose que j'ai utilisé :
2021-12-21 10:15:33 +01:00
```docker
2021-12-21 10:14:59 +01:00
version: "2"
services:
mattermost:
image: mattermost/mattermost-preview:latest # version preview parce que c'est juste pour testé
container_name: Mattermost
ports:
- 8065:8065 # cf. documentation officielle : https://docs.mattermost.com/install/setting-up-local-machine-using-docker.html
restart: unless-stopped
```
2021-12-21 09:34:43 +01:00
---
### Sources
2021-12-21 10:05:47 +01:00
- [Documentation `mattermost_api` ](https://docs.rs/mattermost_api/0.1.0/mattermost_api/ ) (utilisé pour communiquer avec Mattermost)
2022-01-05 01:28:36 +01:00
- `serde` (utilisé pour ma structure de salon [j'ai fait comme `mattermost_api` ])
- `serde_json` (utilisé pour gérer tout ce qui est `json` )
- `tokio` (utilisé car `mattermost_api` est `async` )
2022-01-03 11:33:33 +01:00
- [Documentation `chrono` ](https://rust-lang-nursery.github.io/rust-cookbook/datetime/parse.html ) (utilisé pour l'analyse des timestamps)
2022-01-04 18:18:04 +01:00
- [Documentation `serenity` ](https://docs.rs/serenity/latest/serenity/client/trait.EventHandler.html ) (utilisé pour communiquer avec Discord)
2022-01-04 18:23:15 +01:00
- Je me suis aidé de mes [réponses aux rustlings ](https://code.up8.edu/Anri/2021-rustlings/-/tree/reponses/exercises ) pour me rafraîchir la mémoire sur certains points
2022-01-05 01:28:36 +01:00
- [Documentation de l'`API Mattermost` ](https://api.mattermost.com/ ) (évidemment pour savoir comment Mattermost fonctionne)
2021-12-21 09:34:43 +01:00
2021-12-21 09:26:03 +01:00
---
2022-01-03 10:20:21 +01:00
### Estimation du temps de build
2022-01-04 18:18:04 +01:00
Sur ma machine (WSL), le temps de build d'environ une minute.
2022-01-03 10:20:21 +01:00
`time cargo build` :
```
________________________________________________________
2022-01-05 01:44:12 +01:00
Executed in 53.25 secs fish external
usr time 229.21 secs 134.00 micros 229.21 secs
sys time 19.56 secs 149.00 micros 19.56 secs
2022-01-03 10:20:21 +01:00
```
2022-01-05 01:43:19 +01:00
### Résumé
Beaucoup de blabla, au final, qu'est ce qui fonctionne ?
- [x] Pont Discord -> Mattermost
- [ ] Pont Mattermost -> Discord
- [x] Commandes Discord
- [ ] 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
du [repsonsable de `mattermost_api` ](https://github.com/Celeo ). J'ai essayer de le faire moi-même mais pas réussi.
2022-01-05 02:23:56 +01:00
# Exécution
2022-01-05 02:28:45 +01:00
< div align = "center" >
< img src = "assets/demonstration.gif" alt = "Exemple d'utilisation de matter_bot" width = "1000" / >
< / div >
2022-01-05 02:23:56 +01:00
2022-01-03 10:20:21 +01:00
---
2022-01-04 18:23:15 +01:00
*Projet ne fonctionne pas avec l'instance de la Fac, car son Mattermost se connecte via Gitlab et (je crois?) aucune librairie ne supporte ceci en Rust.*