Un template moderne et modulaire pour développer des bots Discord en TypeScript avec une architecture propre et extensible.
TypeScript Discord.js Node.js MIT License
- 🏗️ Architecture modulaire - Template avec système de commandes et d'événements facilement extensible
- 🌐 Support multilingue - Système de traduction intégré et configurable
- 🎨 Console stylisée - Système de logs colorés et formatés avec tableaux et encadrés
- ⚡ Hot reload - Configuration prête pour le développement avec rechargement automatique
Diego-Bot est un bot Discord écrit en TypeScript. Il fournit des commandes utilitaires, un système de statistiques joueur (persisté dans src/data/playerStats.json) et expose une API HTTP intégrée pour permettre à un site externe de lire ces statistiques.
Ce projet est basé sur une template initiale fournie par Soren — un grand merci pour la base solide.
TypeScript Discord.js Node.js MIT License
- Architecture modulaire (commands / events / handlers)
- Système de stats joueur (lecture/écriture dans
src/data/playerStats.jsonviastatsManager) - API HTTP intégrée (exposée par le bot quand il démarre)
- Multilingue (fichiers
src/locales) - Hot-reload en développement via
ts-node-dev
Prérequis : Node.js (v16+), npm ou pnpm, et un token Discord.
- Installer les dépendances :
npm install
# ou
pnpm install- Copier et remplir le fichier d'environnement :
cp .env.example .env
# ajouter TOKEN=... dans .env| Script | Description |
|---|---|
npm run dev |
Démarrage en développement (hot reload) |
npm run api |
(optionnel) démarre seulement l'API (si tu veux la lancer séparément) |
npm run build |
Compile le projet |
node dist/bot.js |
Démarrer la version compilée |
Remarque : l'API est désormais démarrée automatiquement lorsque le bot démarre (
startApi()est appelé depuissrc/bot.ts).
L'API est exposée par défaut sur le port 3000 (modifiable via la variable d'environnement PORT). Endpoints principaux :
- GET /api/player-stats — renvoie toutes les statistiques (map id -> objet player)
- GET /api/player-stats/:id — renvoie les stats d'un joueur
Exemples :
curl http://localhost:3000/api/player-stats curl http://localhost:3000/api/player-stats/1126528170770837594
Notes importantes :
- Le bot utilise
statsManageren mémoire et persiste sur disque (src/data/playerStats.json). Si le bot et l'API sont lancés dans le même process (configuration par défaut), les mises à jour effectuées par le bot sont immédiatement visibles via l'API. - Si tu veux lancer le bot et l'API dans des processus séparés, considère une approche de synchronisation (DB, webhook ou reload du fichier) pour éviter les incohérences.
TOKENdans.env: token du bot DiscordPORT(optionnel) : port pour l'API HTTP (défaut 3000)
Possibilité supplémentaire : config.ts contient d'autres options (startup message, channel de logs, activités, etc.).
Démarrer en dev (bot + API) :
npm run dev
Compiler :
npm run build
Après démarrage en dev, tester que l'API renvoie les stats :
curl http://localhost:3000/api/player-stats
- Pour la production, pense à protéger l'API (token, IP whitelist, reverse proxy) si elle contient des données sensibles.
- Si tu as besoin de haute disponibilité ou de multiples instances du bot, migre les stats vers une base de données (SQLite / Postgres / MongoDB) plutôt que d'utiliser un fichier JSON partagé.
Ce projet est sous licence MIT — voir LICENSE.
Si tu veux que j'ajoute une section détaillée pour le déploiement (PM2 / Docker / CI), ou que j'ajoute un badge CI / couverture, dis-moi ce que tu veux et je l'ajoute. );
export default command;
## 📝 Créer vos propres événements
Créez un fichier dans `src/events/` :
```typescript
import { Event } from "@src/handlers/events";
import { Client, GuildMember } from "discord.js";
const event = new Event<[Client, GuildMember]>(
"guildMemberAdd",
async (client, member) => {
console.log(`${member.user.tag} joined ${member.guild.name}`);
// Votre logique de bienvenue ici
}
);
export default event;
- Créez un fichier JSON dans
src/locales/(ex:fr.json) - Ajoutez vos traductions :
{ "welcome": "Bienvenue {username}!", "goodbye": "Au revoir!" } - Utilisez dans votre code :
import { _T } from "@src/utils/translator"; const message = _T("welcome", { username: "John" });
Le bot inclut un système de console avancé avec couleurs et formatage :
import { Console } from "@src/utils/console/namespace"; // Encadré avec icônes Console.box("^g", "Success", [ { type: "success", content: "Operation completed!" }, { type: "info", content: "Details: ^y42^R files processed" } ]); // Tableau formaté Console.table({ color: "^b", title: "Statistics", headers: ["Name", "Count"], rows: [["Users", 150], ["Servers", 5]], comment: "Updated every hour" });
^rRouge,^gVert,^bBleu,^yJaune^cCyan,^mMagenta,^wBlanc,^0Noir^BGras,^USouligné,^RReset
Les commandes supportent les permissions Discord :
import { PermissionFlagsBits } from "discord.js"; const command = new Command( "slash", "admin", "Admin command", PermissionFlagsBits.Administrator, // Seuls les admins peuvent utiliser // ... );
Le bot utilise les intents suivants (configurés dans bot.ts) :
- Guilds
- Guild Messages
- Message Content
- Et autres selon vos besoins
| Script | Description |
|---|---|
pnpm dev / npm run dev |
Démarre en mode développement avec hot reload |
pnpm build / npm run build |
Compile le TypeScript vers JavaScript |
node dist/bot.js |
Démarre le bot compilé en production |
- Compilez le projet :
pnpm build - Configurez vos variables d'environnement
- Utilisez
node dist/bot.jspour démarrer - Considérez un process manager comme PM2
Ce projet est sous licence MIT. Voir le fichier LICENSE pour plus de détails.
- 💬 Discord: Rejoignez notre serveur
- 🐛 Issues: GitHub Issues
Un grand merci à tous ceux qui rendent ce template possible :
- Discord.js - La meilleure bibliothèque Discord pour Node.js
- TypeScript - JavaScript avec types statiques
- La communauté Discord.js - Pour l'aide, les ressources et l'inspiration
- Tous les contributeurs - Chaque contribution compte !
Ce template utilise uniquement des dépendances modernes et maintenues :
- Discord.js v14 pour l'interaction avec l'API Discord
- TypeScript pour la sécurité des types
- ts-node-dev pour le développement avec hot reload
- dotenv pour la gestion des variables d'environnement
Si ce template vous a aidé à créer votre bot Discord, n'hésitez pas à :
⭐ Mettre une étoile au projet
🔄 Partager avec d'autres développeurs
💝 Contribuer au développement
Créé avec ❤️ par Skyneur | Discord Bot TypeScript