# 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 à recevoir les messages depuis Mattermost... 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 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 à 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 --- ### 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) - `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`) - [Documentation `chrono`](https://rust-lang-nursery.github.io/rust-cookbook/datetime/parse.html) (utilisé pour l'analyse des timestamps) - [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 - [Documentation de l'`API Mattermost`](https://api.mattermost.com/) (évidemment pour savoir comment Mattermost fonctionne) --- ### Estimation du temps de build Sur ma machine (WSL), le temps de build est d'environ une minute. `time cargo build` : ``` ________________________________________________________ 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 ``` ### 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 [responsable de `mattermost_api`](https://github.com/Celeo). J'ai essayé de le faire moi-même mais pas réussi. # Exécution