mirror of
https://github.com/arthur-pbty/flint.git
synced 2026-08-01 20:29:03 +02:00
- Implement `goodbye` command to configure goodbye messages. - Implement `help` command to provide a global help embed with command details. - Implement `kiss` command to send a kiss message to a mentioned user. - Create `memberMessagePanel` for managing welcome and goodbye messages. - Implement `ping` command to check bot latency. - Implement `presence` command to manage bot presence settings. - Implement `welcome` command to configure welcome messages.
5.8 KiB
5.8 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 dansdist/(à ignorer). - Localisation:
locales/contienten.json,fr.json,es.json. - Scripts utiles:
scripts/deployCommands.tspour (re)déployer les slash commands.
Organisation des fichiers
- Racine:
package.json,tsconfig.json,Dockerfile,docker-compose.yml— scripts et infra.locales/— fichiers de traduction.
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).scripts/— utilitaires (ex:deployCommands.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 danslocales/*.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
locales/en.json,locales/fr.json,locales/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
scripts/deployCommands.ts/le registre inclut la commande; exécuter le déploiement si 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, exécuter
scripts/deployCommands.ts(ou le script npm associé).
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.