Marty Bot est un assistant pour automatiser la gestion des ressources sur plusieurs services : Mattermost, Authentik, Outline, Brevo, NocoDB et Vaultwarden.
Le projet est structuré en plusieurs répertoires clés :
app/: Contient la logique principale du bot, y compris la gestion des connexions (websocket) et le traitement des commandes.app/commands/: Chaque fichier définit une commande spécifique que le bot peut exécuter.app/tests/: Les tests unitaires du projet.
clients/: Contient les clients API pour interagir avec les services externes (Mattermost, Authentik, etc.). Chaque client est responsable de la communication avec un service spécifique.config/: Fichiers de configuration..env.example: Modèle pour le fichier.envqui contient les secrets et les variables d'environnement.permissions_matrix.yml: Fichier de configuration central qui définit les ressources à créer pour chaque type d'entité (projet, antenne, pôle).
libraries/: Contient la logique métier partagée, comme la création de ressources et la synchronisation des utilisateurs. C'est ici que la logique principale des commandes est implémentée.scripts/: Scripts autonomes pour des tâches de maintenance ou de synchronisation.
La configuration de Marty Bot est gérée via des variables d'environnement.
- Copiez le fichier d'exemple :
cp .env.example .env
- Modifiez le fichier
.envet fournissez les valeurs pour votre instance. Les variables requises sont listées dans.env.example.
Le fichier config/permissions_matrix.yml est au cœur de la logique de création de ressources. Il permet de définir de manière déclarative les ressources à créer pour chaque type d'entité (que nous appelons PROJET, ANTENNE, POLES).
Pour chaque entité, vous pouvez configurer :
- Les groupes Authentik (standard et admin).
- Les canaux Mattermost (standard et admin), y compris leur type (public/privé).
- Les collections Outline.
- Les listes de contacts Brevo et le dossier de rangement.
- Les bases de données NoCoDB.
- Les collections Vaultwarden.
Cette approche permet d'adapter le comportement du bot sans modifier le code.
Assurez-vous d'avoir Python 3.8+ installé. Ensuite, installez les dépendances :
pip install -r requirements.txtPour le développement, installez aussi les dépendances de développement :
pip install -r requirements-dev.txtPour interagir avec le bot, mentionnez-le dans un canal Mattermost suivi de la commande. Exemple : @marty help.
Ces commandes s'appuient sur la permissions_matrix.yml pour créer un ensemble de ressources cohérentes.
-
create_projet <NomProjet1> [NomProjet2 ...]Crée les ressources pour un ou plusieurs projets. -
create_antenne <NomAntenne1> [NomAntenne2 ...]Crée les ressources pour une ou plusieurs antennes. -
create_pole <NomPole1> [NomPole2 ...]Crée les ressources pour un ou plusieurs pôles.
-
update_all_user_rightsSynchronise les droits des utilisateurs en se basant sur leur appartenance aux canaux Mattermost. Cette commande ajoute uniquement des droits et n'en supprime jamais. -
update_user_rights_and_removeEffectue une synchronisation complète : ajoute, met à jour et supprime les droits pour que les accès aux services externes correspondent exactement aux membres des canaux Mattermost.- Option :
nocodb=falsepour ignorer la synchronisation avec NoCoDB.
- Option :
-
send_email <Sujet> /// <Message>Envoie un email via Brevo à la liste de contacts associée à l'entité du canal. La commande doit être exécutée depuis un canal "admin". -
helpAffiche la liste des commandes disponibles.
Pour démarrer le bot :
python -m app.botpython -m unittest discover -s app/testsCe projet utilise des pre-commit hooks pour garantir la qualité et la cohérence du code. Pour les installer :
pre-commit installTo build and run the bot using Docker, follow these steps.
From the root (where the Dockerfile is located), run the following command to build the Docker image:
docker build -t marty-bot .Once the image is built, you can run it as a container. Make sure you have a .env file with your configuration in the root.
docker run -d --name marty-bot-container --env-file .env marty-bot-d: Runs the container in detached mode (in the background).--name marty-bot-container: Assigns a name to the container for easier management.--env-file .env: Passes the environment variables from your.envfile to the container.
To view the logs of the running container:
docker logs -f marty-bot-containerAlternatively, you can use the provided docker-compose.yml file to manage the bot's container. This is the recommended method for running the bot in production.
First, ensure you have a complete .env file in the root directory. Then, you can start the bot with:
docker-compose up -dThis command will build the image (if it doesn't exist) and start the container in the background.
To view the logs:
docker-compose logs -fTo stop the bot:
docker-compose down