81 lines
3.9 KiB
Markdown
81 lines
3.9 KiB
Markdown
# matter_bot
|
|
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...
|
|
MAIS, tout ce qui est du côté de Discord devrait fonctionné proprement.
|
|
|
|
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.
|
|
|
|
## Pré-requis
|
|
`openssl` requis par [`mattermost_api`](https://github.com/Celeo/mattermost_api)
|
|
```bash
|
|
sudo apt install libssl-dev
|
|
```
|
|
|
|
`.env` placé dans la racine du projet qui contient ses différentes variables :
|
|
```
|
|
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é
|
|
MOT_DE_PASSE=votre_mot-de-passe_ici # pas besoin de mot de passe si un token est renseigné
|
|
URL=url_du_site_ici # ex: https://talk.up8.edu
|
|
EQUIPE=nom_de_lequipe # ex: etudiant-es
|
|
SALON=nom_du_salon # ex: off-topic
|
|
|
|
TOKEN_DISCORD=votre_token_ici # token discord
|
|
|
|
PREFIX=votre_prefix_ici # commun aux deux bots, par défaut: ç
|
|
```
|
|
*Note: Si les deux moyens de connexion pour Mattermost sont renseignés (token et pseudo/mot-de-passe), le bot ne se lancera pas.*
|
|
|
|
#### 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/)) :
|
|
- Cliquez sur les 9 carrés en haut a gauche
|
|
- Integrations
|
|
- Bot Accounts
|
|
- Add Bot Account
|
|
- Remplissez les champs
|
|
- Cochez la case `post:all` pour être sur qu'il n'y aura pas de problèmes de permission (facultatif)
|
|
- Create Bot Account
|
|
- Dans la page suivante, vous aurez votre token d'accès
|
|
|
|
#### Discord
|
|
<!-- ici un tuto sur comment obtenir un token discord -->
|
|
|
|
---
|
|
### 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é :
|
|
```docker
|
|
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
|
|
```
|
|
|
|
---
|
|
### Sources
|
|
- [Documentation `mattermost_api`](https://docs.rs/mattermost_api/0.1.0/mattermost_api/) (utilisé pour communiquer avec Mattermost)
|
|
- [Documentation `serde`](https://crates.io/crates/serde) (utilisé pour ma structure de salon [j'ai fait comme `mattermost_api`])
|
|
- [Documentation `tokio`](https://docs.rs/tokio/1.15.0/tokio/attr.main.html) (utilisé car `mattermost_api` est `async`)
|
|
- [Documentation `chrono`](https://rust-lang-nursery.github.io/rust-cookbook/datetime/parse.html) (utilisé pour l'analyse des timestamps)
|
|
- [Documentation `serde_json`](https://docs.serde.rs/serde_json/#constructing-json-values) (utilisé pour gérer tout ce qui est `json`)
|
|
- [Documentation `serenity`](https://docs.rs/serenity/latest/serenity/client/trait.EventHandler.html) (utilisé pour communiquer avec Discord)
|
|
- 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
|
|
|
|
---
|
|
### Estimation du temps de build
|
|
Sur ma machine (WSL), le temps de build d'environ une minute.
|
|
|
|
`time cargo build` :
|
|
```
|
|
________________________________________________________
|
|
Executed in 62.99 secs fish external
|
|
usr time 245.30 secs 299.00 micros 245.30 secs
|
|
sys time 22.10 secs 149.00 micros 22.10 secs
|
|
```
|
|
|
|
---
|
|
*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.*
|