mirror of
https://github.com/arthur-pbty/flint.git
synced 2026-08-01 20:29:03 +02:00
5.6 KiB
5.6 KiB
AGENT.md - Guide du projet template_discordjs
Version: 1.0
But
Ce fichier décrit le projet, sa structure, les conventions de code et la procédure recommandée pour ajouter de nouvelles fonctionnalités (commandes, événements, services). Il sert de référence pour les contributeurs et pour les agents automatisés qui travaillent sur le dépôt.
Vue d'ensemble du projet
- Tech stack: TypeScript + Discord.js (bot template). Le code source est dans
src/et la sortie build dansbuild/(à ignorer). - Localisation:
src/i18n/contienten.json,fr.json,es.json.
Organisation des fichiers
- Racine:
package.json,tsconfig.json,Dockerfile,docker-compose.yml— scripts et infra.
src/(code TypeScript):index.ts— point d'entrée, boot du bot.commands/— définitions de commandes (chaque fichier expose une commande).events/— un fichier par événement Discord (ex:guildMemberAdd.ts).src/events/index.tscentralise l'enregistrement.framework/— bibliothèque interne: helpers commandes,i18n/,memberMessages/,presence/,execution/,handlers/,config/,types/.utils/— helpers génériques (ex:templateVariables.ts).
tests/— tests unitaires ciblant managers, stores et utilitaires.
Principes et conventions de code
- Commands: chaque commande doit être définie avec
defineCommand({...})et exposer uniquement la configuration + une fonctionexecute()très mince qui délègue la logique métier à un service/manager. - Services / Managers: placer la logique métier testable dans
src/framework/*. Ces modules doivent être découplés de Discord.js — recevoir des adaptateurs ou des interfaces plutôt que des objets Discord directement. - Events: un seul fichier par événement; exporter une fonction
registerX(client, i18n)ou une fonction d'enregistrement équivalente. Centraliser les imports danssrc/events/index.ts. - Typage: utiliser TypeScript strict, signatures fortement typées pour les handlers (
onPrefixMessage(message: Message)etc.). - Tests: privilégier les tests unitaires pour managers/stores/transformations. Mockez les adaptateurs Discord.
- i18n: utiliser
I18nServicepour traductions. Ajouter toutes les clés danssrc/i18n/*.json. - Nommage: fichiers en lowerCamelCase (ex:
welcome.ts,memberMessagePanel.ts). Exports nommés préférés pour faciliter le mocking. - Sécurité: ne pas committer de secrets (
.env*doit être dans.gitignore).
Procédure standard pour ajouter une nouvelle commande
- Créer le fichier dans
src/commands/myCommand.ts. - Utiliser
defineCommand({ meta, args, examples, execute })pour déclarer la commande. - Implémenter
execute()de façon minimale: valider les args et appeler un service danssrc/framework/si la logique est non triviale. - Ajouter les clés de traduction dans
src/i18n/en.json,src/i18n/fr.json,src/i18n/es.json(ex:commands.myCommand.success). - Écrire des tests unitaires dans
tests/pour le service/manager; si la commande est juste un wrapper, testez le service. - Si c'est une slash command, vérifier que le registre inclut la commande; redémarrer le bot avec
AUTO_DEPLOY_SLASH=truesi synchronisation nécessaire. - Lancer
npm run buildpuisnpm test(ou la suite de scripts définie danspackage.json). - Ouvrir une PR documentant le changement et incluant les tests et les traductions.
Procédure standard pour ajouter un nouvel événement
- Créer
src/events/<eventName>.tset y exporterregister<EventName>(client, i18n). - Respecter la signature projet (voir
src/events/index.tspour l'exemple d'enregistrement). - Mettre la logique testable dans un manager/service et tester cette logique séparément.
- Ajouter l'import et l'appel d'enregistrement dans
src/events/index.ts.
Procédure pour ajouter un service/manager dans framework
- Créer un dossier
src/framework/<feature>/contenantmanager.ts,store.ts(si nécessaire),types.tset tests. - Interfacez le manager pour qu'il accepte des adaptateurs (ex:
DiscordAdapter) au lieu d'utiliser directementclient. - Documenter les comportements et écrire des tests unitaires couvrant les cas critiques.
i18n — bonnes pratiques
- Utiliser des clés structurées:
commands.<name>.<key>oupresence.<action>. - Garder
en.jsoncomme référence complète; synchroniser les autres langues.
Tests et CI
- Prioriser les tests sur managers, stores et utilitaires.
- Mocks: extraire les dépendances externes (Discord API) derrière des adaptateurs pour pouvoir les mocker.
- Scripts: utiliser
npm testetnpm run builddepuis la racine (vérifierpackage.json).
Déploiement / exécution
- Utiliser
Dockerfile/docker-compose.ymlfournis pour le déploiement en conteneur. - Pour les slash commands, activer
AUTO_DEPLOY_SLASH=truepour une synchronisation automatique au démarrage.
Revue et PR
- Inclure toujours:
- modifications de traduction,
- tests unitaires pour toute logique métier ajoutée,
- notes de migration si la structure des commandes/events change.
Remarques finales
- Ce fichier est la source de vérité pour les agents et contributeurs. Pour toute modification structurelle majeure (réorganisation de dossiers, changement d'API interne), mettez à jour
AGENT.mdet ouvrez une PR dédiée.