Bot Discord pour le scouting compétitif Magic: The Gathering
| État | Détail |
|---|---|
| Bot Discord | Arrêté (Fly.io en pause) |
| Base de données | Arrêtée (Supabase désactivé) |
| Code | 100% fonctionnel |
| Redémarrage | ~15 min (réactiver Supabase + Fly.io) |
Le projet est complet et prêt à être relancé à tout moment.
Scooty est un bot Discord conçu pour optimiser la collecte et le partage d'informations sur les decks adverses durant les tournois Magic: The Gathering. Il remplace un processus manuel chaotique par un système structuré, instantané et sans friction.
- Avant : Les joueurs écrivent "Opponent X joue Jeskai" dans un channel Discord → information noyée, doublons, pas de recherche
- Après : Commande
/scoutavec auto-complétion, dédoublonnage automatique, visualisation temps réel
/scout- Reporter les informations deck d'un adversaire/check- Rechercher les scouts existants sur un adversaire/stats- Afficher les statistiques du tournoi/help- Afficher l'aide et les commandes
- Auto-complétion intelligente pour les noms d'adversaires
- Embeds Discord colorés et informatifs
- Feed temps réel mis à jour automatiquement
- Détection de doublons avec alertes
- Répartition des archétypes
- Top contributeurs
- Métriques de performance
- Historique des scouts
┌─────────────────┐ ┌──────────────┐ ┌──────────────┐
│ Discord Users │────▶│ Scooty │────▶│ Supabase │
│ /scout cmd │ │ (Node.js) │ │ (Postgres) │
└─────────────────┘ └──────┬───────┘ └──────┬───────┘
│ │
▼ ▼
┌──────────────┐ ┌──────────────┐
│ Live Embed │ │ Redis │
│ (in Discord) │ │ (Cache) │
└──────────────┘ └──────────────┘
- Bot : Discord.js v14 + TypeScript
- Base de données : Supabase (PostgreSQL + Realtime)
- Cache : Redis pour auto-complétion rapide
- Hébergement : Fly.io (gratuit au départ)
- Monitoring : UptimeRobot + logs Discord
- Node.js 18+
- Compte Discord Developer
- Compte Supabase (gratuit)
- Compte Fly.io (gratuit)
git clone https://github.com/gbordes77/Scooty.git
cd Scootynpm install- Aller sur Discord Developer Portal
- Créer une nouvelle application "MTG Scout Bot"
- Dans l'onglet "Bot", créer un bot et copier le token
- Dans "OAuth2 > URL Generator" :
- Scopes:
bot,applications.commands - Permissions:
Send Messages,Embed Links,Read Message History
- Scopes:
- Utiliser l'URL générée pour inviter le bot
- Créer un projet sur Supabase
- Exécuter le script SQL dans
supabase/schema.sql - Copier l'URL et la clé anonyme
Créer un fichier .env basé sur env.example :
# Discord
DISCORD_TOKEN=your_bot_token
CLIENT_ID=your_client_id
GUILD_ID=your_guild_id
LIVE_CHANNEL_ID=channel_id_for_live_feed
LIVE_MESSAGE_ID=message_id_to_edit
# Supabase
SUPABASE_URL=https://xxx.supabase.co
SUPABASE_ANON_KEY=your_anon_key
# Redis (optionnel)
REDIS_URL=redis://localhost:6379# Rendre le script exécutable
chmod +x deploy.sh
# Déployer
./deploy.sh# Build
npm run build
# Tests
npm test
# Déployer sur Fly.io
flyctl launch --name mtg-scout-bot --region cdg
flyctl secrets set DISCORD_TOKEN=your_token
flyctl secrets set SUPABASE_URL=your_url
flyctl secrets set SUPABASE_ANON_KEY=your_key
flyctl deploy/scout opponent:Jace123 archetype:Jeskai Control comment:4 teferi, 2 narset
Ce qui se passe :
- En tapant "Jace", vous verrez si déjà scouté
- Si oui : "
⚠️ Jace123 - VU: Jeskai (par Loupy)" - Votre scout est ajouté instantanément
- L'équipe voit l'info dans #scout-live
/check name:KB
Affiche tous les scouts sur les adversaires commençant par "KB"
/stats
Affiche la répartition des archétypes du tournoi
- Round 1 - Discovery : Chacun scout son adversaire R1
- Round 2+ - Intelligence : Check ton prochain adversaire avant la ronde
- Between rounds : Consulter #scout-live pour les trends
- Soyez précis : "4 Teferi, 2 Narset, pas vu de Dovin"
- Utilisez les archétypes standards : Facilite les stats
- Scout même les re-matchs : L'adversaire peut avoir changé de deck
- Profitez de l'auto-complétion : 3-4 lettres suffisent généralement
📁 TOURNAMENT TOOLS
├── 📢 scout-announcements
├── 🔴 scout-live # Message épinglé ici
├── 📊 scout-stats
└── 🔧 scout-admin # Logs/debug
@Scout Master: Peut gérer les archétypes@Competitor: Peut utiliser /scout@Scout Veteran: Badge après 50 scouts
- ✅ Bot Discord live ≤ 14 jours : 6 slash cmd stables, p95 latence < 250 ms
- ✅ BDD Supabase prête ≤ 7 jours : 3 tables, RLS active
- ✅ CI/CD GitHub Actions → Fly.io : build < 5 min, rollback instant, uptime ≥ 99%
- ✅ Observabilité ≤ 30 jours : logs JSON + métriques CPU/RAM affichées Grafana
- Temps moyen /scout : <5 secondes
- Taux de doublons : <5%
- Scouts par tournoi : >100
- Satisfaction utilisateur : >4.5/5
# Tests unitaires
npm test
# Tests avec coverage
npm run test:coverage
# Tests en mode watch
npm run test:watchsrc/__tests__/
├── scout.test.ts # Tests commande scout
├── database.test.ts # Tests service DB
├── cache.test.ts # Tests service cache
└── setup.ts # Configuration tests
- Format : JSON structuré avec Winston
- Niveaux : error, warn, info, debug
- Rotation : Automatique par taille/date
- Uptime : UptimeRobot monitoring
- Performance : Latence des commandes
- Utilisation : Nombre de scouts/jour
- 📋 01. Objectifs & Méthodologie
- ⚙️ 02. Documentation Technique
- 🏗️ 03. Architecture Système
- 👤 04. Guide Utilisateur
- ✅ 05. Checklist Ultime
- 🚀 06. Guide de Déploiement
- 🚁 07. Comprendre Fly.io ⭐ NOUVEAU
- Bot offline → Discord webhook
- Erreurs critiques → Admin channel
- Performance dégradée → Métriques
- Intégration MTGMelee pour pairings auto
- Prédictions matchup via ML
- Dashboard web avec graphiques
- Multi-serveur pour plusieurs teams
- API REST pour intégrations externes
- Export données avancé (CSV, JSON)
- Application mobile React Native
- Intégration avec d'autres jeux de cartes
- Système de récompenses et gamification
- Fork le repository
- Créer une branche feature (
git checkout -b feature/AmazingFeature) - Commit les changements (
git commit -m 'Add AmazingFeature') - Push vers la branche (
git push origin feature/AmazingFeature) - Ouvrir une Pull Request
- TypeScript strict mode
- ESLint pour le linting
- Prettier pour le formatting
- Tests unitaires obligatoires
- Documentation en français
Ce projet est sous licence MIT. Voir le fichier LICENSE pour plus de détails.
- Bug report : GitHub Issues
- Feature request : GitHub Discussions
- Documentation : Wiki
- Contact : guillaume.bordes@example.com
- Discord.js pour l'API Discord
- Supabase pour la base de données
- Fly.io pour l'hébergement
- La communauté MTG pour les retours et suggestions
🎯 Scooty - Optimisez votre scouting, maximisez vos chances de victoire !