From 303def5d2c4d8f9ba8dfe507057246ca6b047380 Mon Sep 17 00:00:00 2001 From: Tryno Date: Fri, 13 Feb 2026 11:18:23 +0100 Subject: [PATCH] Fix typos and improve clarity in CONTRIBUTING.md --- CONTRIBUTING.md | 73 ++++++++++++++++++++++++++++++++++++------------- 1 file changed, 54 insertions(+), 19 deletions(-) diff --git a/CONTRIBUTING.md b/CONTRIBUTING.md index f1b3df3..f0f7d88 100644 --- a/CONTRIBUTING.md +++ b/CONTRIBUTING.md @@ -12,9 +12,9 @@ L'objectif est de permettre des ajouts communautaires **sans compromettre la sta ## Ce que vous pouvez faire -- Ajouter une **nouvelle feature** dans `feature//` -- Améliorer une feature existante -- Corriger un bug dans une feature +- Ajouter une **nouvelle feature** dans `features//` +- Améliorer une features existante +- Corriger un bug dans une features - Améliorer la documentation ## Ce que vous ne pouvez pas faire @@ -22,14 +22,14 @@ L'objectif est de permettre des ajouts communautaires **sans compromettre la sta - Modifier le core (`bot/`, `core/`) - Modifier `enabled_features` - Modifier la logique du loader -- Ajouter une dépendance Python -- Introduire de l'I/O au chargement d'une feature +- Ajouter une dépendance Python sans accord du staff +- Introduire de l'I/O au chargement d'une features Toute PR hors de ces règles sera refusée. ## La collaboration -### Structure d'une feature +### Structure d'une features Une feature doit respecter **strictement** la structure suivante : @@ -44,13 +44,13 @@ Le `slug` : - doit être unique - en minuscule - sans espace -- doit correspondre exactement à `FEATURE["slug"]` +- doit correspondre exactement à `features["slug"]` ### Contrat obligatoire Chaque `feature.py` doit exposer ces informations : -1) `FEATURE` (constante dictionnaire) +1) `features` (constante dictionnaire) ```python FEATURE = { @@ -59,6 +59,8 @@ Chaque `feature.py` doit exposer ces informations : "description": "Commande ping simple", "requires_config": False, "permissions": [], + "version": "0.0" + "author":"github" } ``` @@ -69,6 +71,8 @@ Chaque `feature.py` doit exposer ces informations : - `description` : description - `requires_config` : booléen - `permissions` : liste (ex : `[]`, `["send_message"]`) + - `version`: version en texte + - `author`: nom lisible 2) `register(tree, config)` @@ -85,18 +89,46 @@ Chaque `feature.py` doit exposer ces informations : Les opérations d'I/O sont **autorisées uniquement** dans les handlers des commandes. +### Permissions et checks + +Des décorateurs globaux sont disponibles pour restreindre l'accès aux commandes. +Import : `from bot.core.checks import is_staff, is_server_admin, ...` + +| Décorateur | Rôle | +|---|---| +| `@is_staff()` | Rôle staff (défini dans `.env`) | +| `@is_server_admin()` | Permission administrateur | +| `@is_server_owner()` | Propriétaire du serveur | +| `@is_server_mod()` | Modérateur (manage messages, kick, ban) | +| `@has_permissions(perm=True)` | Permission spécifique | +| `@has_any_role(id)` / `@has_all_roles(id)` | Vérification par rôle | +| `@in_channel(id)` / `@in_category(id)` | Restriction par salon/catégorie | +| `@bot_has_permissions(perm=True)` | Vérifie les permissions du bot | +| `@cooldown(rate, per)` | Limite d'utilisation | + +Exemple : + +```python +from bot.core.checks import is_staff + +def register(tree, config): + @tree.command(name="secret", description="Commande staff only") + @is_staff() + async def secret_cmd(interaction): + await interaction.response.send_message("Staff only!", ephemeral=True) + ### Commandes et conflits - Les noms de slash commands doivent être uniques. -- Le loader refusera toute feature créant un conflit de nom. -- Il est recommandé d'utiliser un **groupe de commandes par feature**. +- Le loader refusera toute features créant un conflit de nom. +- Il est recommandé d'utiliser un **groupe de commandes par features**. ### Configuration - Les secrets vont dans `.env` (non commités). - La configuration fonctionnelle va dans `config.toml`. -Une feature avec `requires_config = true` doit documenter : +Une features avec `requires_config = true` doit documenter : - les clés attendues dans `[features.]` - leurs valeurs par défaut @@ -106,24 +138,27 @@ Une feature avec `requires_config = true` doit documenter : Les contributions doivent être réalisées sur **une branche dédiée** : - ne pas travailler directement sur `main` +- utiliser la branche `dev` pour initialiser votre propre branche - une branche = une feature ou une correction - nommage recommandé : - - `feature/` - - `fix/` + - `features/` + - `fix-features/` Exemples : - - `feature/say` - - `fix/ping-ephemeral` + - `features/say` + - `fix-features/ping-ephemeral` +- `fix/` est réservé aux modification du core du bot -Les Pull Requests doivent cibler la branche `main`. +Les Pull Requests doivent cibler la branche `dev`. ### Créer sa branche ```bash -git checkout -b feature/ +git checkout dev +git checkout -b features/ git add . git commit -m "Ajout de la feature " -git push -u origin feature/ +git push -u origin features/ ``` ### Règle de Pull Request @@ -131,7 +166,7 @@ git push -u origin feature/ Une PR valide doit : - concerner une seule feature -- modifier uniquement `feature/` (et éventuellement la doc) +- modifier uniquement `features/` (et éventuellement la doc) - ne pas modifier le core - ne pas modifier `enabled_features` - inclure un test manuel simple (2-3 étapes)