435 lines
13 KiB
Markdown
435 lines
13 KiB
Markdown
# Bot Discord - Gestion Serveur Minecraft
|
||
|
||
Un bot Discord complet pour gérer la whitelist et le contrôle d'un serveur Minecraft hébergé sur VPS.
|
||
|
||
## 🚀 Fonctionnalités
|
||
|
||
### 🎯 Système de demandes d'accès automatique
|
||
- Message automatique avec bouton de demande d'accès
|
||
- Attribution automatique du rôle "En attente"
|
||
- Mise à jour du statut serveur toutes les 2 minutes
|
||
- Interface avec embeds et emojis personnalisés
|
||
|
||
### 👥 Gestion de la whitelist
|
||
- Ajout/suppression de joueurs avec récupération automatique d'UUID
|
||
- Rechargement automatique de la whitelist sur le serveur
|
||
- Liste des joueurs whitelistés
|
||
- Formatage correct des UUID pour Minecraft
|
||
|
||
### 🎮 Contrôle complet du serveur
|
||
- Démarrage/arrêt/redémarrage via systemctl
|
||
- Envoi de commandes directes au serveur
|
||
- Consultation des logs en temps réel
|
||
- Sauvegarde automatique du monde
|
||
- Vérification du statut en temps réel
|
||
|
||
### 🎨 Interface utilisateur
|
||
- Emojis personnalisés configurables
|
||
- Embeds Discord avec couleurs et formatage
|
||
- Messages d'erreur informatifs
|
||
- Gestion des permissions par propriétaire
|
||
|
||
## 📋 Prérequis
|
||
|
||
- **Node.js** v16+
|
||
- **Serveur Minecraft** configuré avec systemctl
|
||
- **Bot Discord** avec permissions appropriées
|
||
- **Accès sudo** sur le VPS (pour contrôle serveur)
|
||
|
||
## 🛠️ Installation
|
||
|
||
### 1. Sur votre VPS
|
||
```bash
|
||
# Cloner et installer (ou uploader vos fichiers)
|
||
cd /home/votre-user/bots/
|
||
# ... copier vos fichiers ici ...
|
||
cd mcgestionbot
|
||
npm install
|
||
```
|
||
|
||
### 2. Configuration automatique
|
||
```bash
|
||
# Génération automatique du .env
|
||
./configure.sh
|
||
|
||
# Éditer avec vos tokens Discord
|
||
nano .env
|
||
```
|
||
|
||
### 3. Lancement
|
||
```bash
|
||
# Le bot configure automatiquement tout au démarrage !
|
||
node start.js
|
||
```
|
||
|
||
**C'est tout ! 🎉** Le bot se charge de :
|
||
- ✅ Créer l'utilisateur `minecraft`
|
||
- ✅ Configurer les permissions
|
||
- ✅ Activer la whitelist dans server.properties
|
||
- ✅ Créer les dossiers nécessaires
|
||
- ✅ Configurer les sauvegardes
|
||
|
||
## 🎮 Utilisation
|
||
|
||
### Démarrage du bot
|
||
```bash
|
||
node start.js
|
||
```
|
||
|
||
### Commandes disponibles
|
||
|
||
#### `/minecraft` - Gestion du serveur (Owner only)
|
||
|
||
**Gestion whitelist :**
|
||
- `/minecraft list` - Liste des joueurs whitelistés
|
||
- `/minecraft add <pseudo>` - Ajouter un joueur
|
||
- `/minecraft remove <pseudo>` - Retirer un joueur
|
||
- `/minecraft reload` - Recharger la whitelist
|
||
|
||
**Contrôle serveur :**
|
||
- `/minecraft status` - Statut du serveur
|
||
- `/minecraft start` - Démarrer le serveur
|
||
- `/minecraft stop` - Arrêter le serveur
|
||
- `/minecraft restart` - Redémarrer le serveur
|
||
- `/minecraft logs [lines]` - Afficher les logs
|
||
- `/minecraft command <cmd>` - Envoyer une commande
|
||
- `/minecraft backup` - Sauvegarder le monde
|
||
- `/minecraft setup` - Configuration automatique du serveur
|
||
|
||
### Système de demandes automatique
|
||
|
||
Le bot gère automatiquement :
|
||
1. **Message persistant** dans le channel configuré
|
||
2. **Bouton de demande** toujours disponible
|
||
3. **Attribution du rôle** "En attente" automatique
|
||
4. **Mise à jour du statut** serveur toutes les 2 minutes
|
||
|
||
## 🎨 Personnalisation
|
||
|
||
### Emojis personnalisés
|
||
Modifiez `emojis.json` pour vos emojis :
|
||
|
||
```json
|
||
{
|
||
"online": "<:online:123456789>",
|
||
"offline": "<:offline:123456789>",
|
||
"addedWhitelist": "<:added:123456789>",
|
||
"removedWhitelist": "<:removed:123456789>",
|
||
"success": "✅",
|
||
"error": "❌",
|
||
"info": "ℹ️"
|
||
}
|
||
```
|
||
|
||
## 🔧 Dépannage
|
||
|
||
### Problèmes courants
|
||
|
||
**1. "Command not found" node**
|
||
```bash
|
||
# Installer Node.js
|
||
curl -fsSL https://deb.nodesource.com/setup_18.x | sudo -E bash -
|
||
sudo apt-get install -y nodejs
|
||
```
|
||
|
||
**2. "Permission denied" systemctl**
|
||
```bash
|
||
# Configurer sudo
|
||
sudo ./setup-sudo.sh
|
||
./test-permissions.sh
|
||
```
|
||
|
||
**3. "Whitelist not enforced"**
|
||
```bash
|
||
# Vérifier server.properties
|
||
grep "enforce-whitelist" /opt/minecraft/server/server.properties
|
||
# Doit être : enforce-whitelist=true
|
||
```
|
||
|
||
**4. "UUID format incorrect"**
|
||
- Le bot formate automatiquement les UUID
|
||
- Utilise l'API Mojang pour récupérer les UUID
|
||
|
||
### Logs et debug
|
||
|
||
```bash
|
||
# Logs du bot
|
||
node start.js
|
||
|
||
# Logs du serveur Minecraft
|
||
sudo journalctl -u minecraft -f
|
||
|
||
# Test des permissions
|
||
./test-permissions.sh
|
||
|
||
# Test de la whitelist
|
||
node test-whitelist.js
|
||
```
|
||
|
||
## 📁 Structure du projet
|
||
|
||
```
|
||
mc-acces-bot/
|
||
├── start.js # Point d'entrée
|
||
├── package.json # Dépendances
|
||
├── .env # Configuration
|
||
├── emojis.json # Emojis personnalisés
|
||
├── setup-sudo.sh # Config permissions
|
||
├── test-permissions.sh # Test sudo
|
||
└── src/
|
||
├── commands/
|
||
│ └── minecraft.js # Commandes serveur
|
||
├── events/
|
||
│ ├── ready.js # Démarrage bot
|
||
│ └── interactionCreate.js # Gestion interactions
|
||
├── handlers/
|
||
│ └── interactionHandler.js # Boutons/modals
|
||
└── utils/
|
||
├── whitelistManager.js # Gestion whitelist
|
||
├── minecraftServer.js # Statut serveur
|
||
├── serverControlManager.js # Contrôle VPS
|
||
├── autoMessageManager.js # Messages auto
|
||
└── emojiManager.js # Gestion emojis
|
||
```
|
||
|
||
## 🚀 Déploiement en production
|
||
|
||
### Avec PM2 (recommandé)
|
||
```bash
|
||
# Installer PM2
|
||
npm install -g pm2
|
||
|
||
# Démarrer le bot
|
||
pm2 start start.js --name "mc-bot"
|
||
|
||
# Configurer auto-start
|
||
pm2 startup
|
||
pm2 save
|
||
```
|
||
|
||
### Avec systemctl
|
||
```bash
|
||
# Créer le service
|
||
sudo nano /etc/systemd/system/mc-bot.service
|
||
|
||
# Contenu :
|
||
[Unit]
|
||
Description=Minecraft Discord Bot
|
||
After=network.target
|
||
|
||
[Service]
|
||
Type=simple
|
||
User=loicv
|
||
WorkingDirectory=/home/loicv/Documents/Wors/mc-acces-bot
|
||
ExecStart=/usr/bin/node start.js
|
||
Restart=always
|
||
Environment=NODE_ENV=production
|
||
|
||
[Install]
|
||
WantedBy=multi-user.target
|
||
|
||
# Activer le service
|
||
sudo systemctl enable mc-bot
|
||
sudo systemctl start mc-bot
|
||
```
|
||
|
||
## 📝 Notes importantes
|
||
|
||
- **Sécurité :** Le bot a accès sudo - utilisez uniquement sur un serveur dédié
|
||
- **Permissions :** Seul le propriétaire (OWNER_ID) peut utiliser les commandes
|
||
- **Backup :** Les sauvegardes sont stockées dans `/opt/minecraft/backups/`
|
||
- **Logs :** Tous les logs sont visibles via `journalctl` et dans Discord
|
||
|
||
## 🤝 Support
|
||
|
||
En cas de problème :
|
||
1. Vérifiez les logs : `sudo journalctl -u minecraft -f`
|
||
2. Testez les permissions : `./test-permissions.sh`
|
||
3. Vérifiez la configuration : fichier `.env` complet
|
||
4. Validez le service : `sudo systemctl status minecraft`
|
||
|
||
## Fonctionnalités
|
||
|
||
### 🎮 Système de demande d'accès
|
||
- **Message simple automatique** avec bouton pour demander l'accès
|
||
- **Embed de status du serveur** mis à jour automatiquement toutes les 2 minutes
|
||
- Modal pour saisir le pseudo Minecraft
|
||
- **Attribution automatique du rôle "Waiter"** lors de la demande
|
||
- Vérification automatique si le joueur est déjà whitelisté
|
||
- Envoi de la demande au canal staff avec boutons Accept/Refuse
|
||
- **Gestion automatique des rôles** : Verified (accepté) ou suppression du Waiter (refusé)
|
||
- **Emojis personnalisés** pour tous les messages
|
||
|
||
### ⚙️ Commandes administrateur
|
||
- `/minecraft list` - Affiche la liste des joueurs whitelistés
|
||
- `/minecraft add <pseudo>` - Ajoute un joueur à la whitelist
|
||
- `/minecraft remove <pseudo>` - Retire un joueur de la whitelist
|
||
- `/minecraft status` - Affiche le statut du serveur Minecraft
|
||
- `/minecraft reload` - Instructions pour recharger la whitelist sur le serveur
|
||
- `/setup-access` - Envoie le message de demande d'accès (facultatif)
|
||
|
||
## Installation
|
||
|
||
1. **Cloner le projet et installer les dépendances :**
|
||
```bash
|
||
npm install
|
||
```
|
||
|
||
2. **Configurer le fichier .env :**
|
||
Assurez-vous que votre fichier `.env` contient toutes les variables nécessaires :
|
||
```env
|
||
TOKEN=votre_token_bot_discord
|
||
CLIENT_ID=id_du_bot
|
||
OWNER_ID=votre_id_discord
|
||
|
||
SUPPORT_SERVER_ID=id_du_serveur_discord
|
||
CHANNEL_REQUEST_ACCESS_ID=id_canal_demandes_publiques
|
||
CHANNEL_ACCESS_STAFF_REQUESTS_ID=id_canal_staff_demandes
|
||
|
||
ROLE_WAITER_ID=id_role_attente
|
||
ROLE_VERIFIED_ID=id_role_verifie
|
||
ROLE_ADMIN_ID=id_role_admin
|
||
|
||
MINECRAFT_SERVER_IP=adresse:port
|
||
MINECRAFT_WHITELIST_PATH=/chemin/vers/whitelist.json
|
||
```
|
||
|
||
3. **Lancer le bot :**
|
||
```bash
|
||
npm start
|
||
```
|
||
|
||
Pour le développement :
|
||
```bash
|
||
npm run dev
|
||
```
|
||
|
||
Pour tester le formatage UUID :
|
||
```bash
|
||
npm run test-uuid
|
||
```
|
||
|
||
Pour tester la connexion au serveur Minecraft :
|
||
```bash
|
||
npm run test-server
|
||
```
|
||
|
||
Pour tester la whitelist :
|
||
```bash
|
||
npm run test-whitelist
|
||
```
|
||
|
||
## Structure du projet
|
||
|
||
```
|
||
├── start.js # Point d'entrée principal
|
||
├── emojis.json # Configuration des emojis personnalisés
|
||
├── src/
|
||
│ ├── commands/
|
||
│ │ ├── minecraft.js # Commandes /minecraft
|
||
│ │ └── setup-access.js # Commande /setup-access
|
||
│ ├── events/
|
||
│ │ └── ready.js # Événement de démarrage
|
||
│ ├── handlers/
|
||
│ │ ├── commandHandler.js # Chargeur de commandes
|
||
│ │ ├── eventHandler.js # Chargeur d'événements
|
||
│ │ └── interactionHandler.js # Gestionnaire d'interactions
|
||
│ └── utils/
|
||
│ ├── accessRequestManager.js # Gestionnaire de demandes d'accès
|
||
│ ├── emojiManager.js # Gestionnaire d'emojis personnalisés
|
||
│ ├── roleManager.js # Gestionnaire de rôles Discord
|
||
│ ├── minecraftServer.js # Utilitaires serveur Minecraft
|
||
│ └── whitelistManager.js # Gestionnaire de whitelist
|
||
```
|
||
|
||
## Utilisation
|
||
|
||
### Configuration initiale
|
||
|
||
1. **Inviter le bot sur votre serveur** avec les permissions nécessaires
|
||
2. **Le message de demande d'accès est envoyé automatiquement** au démarrage dans le canal configuré
|
||
3. **Configurer les rôles** dans votre serveur Discord selon les IDs dans le `.env`
|
||
|
||
> ⚠️ **Note :** Il n'est plus nécessaire d'utiliser `/setup-access` manuellement. Le bot gère automatiquement l'envoi et la mise à jour du message de demande d'accès.
|
||
|
||
### Workflow des demandes
|
||
|
||
1. **Utilisateur :** Clique sur le bouton "Demander l'accès"
|
||
2. **Système :** Attribue automatiquement le rôle "Waiter" à l'utilisateur
|
||
3. **Utilisateur :** Remplit le modal avec son pseudo Minecraft
|
||
4. **Système :** Vérifie si le joueur est déjà whitelisté
|
||
5. **Système :** Envoie la demande au canal staff avec emojis personnalisés
|
||
6. **Staff :** Clique sur "Accepter" ou "Refuser"
|
||
7. **Système (si accepté) :** Ajoute le joueur à la whitelist + donne le rôle "Verified" + retire le rôle "Waiter"
|
||
8. **Système (si refusé) :** Retire simplement le rôle "Waiter"
|
||
9. **Système :** Notifie l'utilisateur par MP avec les emojis appropriés
|
||
|
||
### Commandes administrateur
|
||
|
||
Seul l'OWNER_ID peut utiliser les commandes `/minecraft` :
|
||
|
||
- **Lister les joueurs :** `/minecraft list`
|
||
- **Ajouter un joueur :** `/minecraft add pseudo:NomDuJoueur`
|
||
- **Retirer un joueur :** `/minecraft remove pseudo:NomDuJoueur`
|
||
- **Status du serveur :** `/minecraft status`
|
||
|
||
## Permissions requises
|
||
|
||
Le bot a besoin des permissions Discord suivantes :
|
||
- `Send Messages` - Envoyer des messages
|
||
- `Use Slash Commands` - Utiliser les commandes slash
|
||
- `Embed Links` - Incorporer des liens
|
||
- `Manage Messages` - Gérer les messages
|
||
- `Read Message History` - Lire l'historique des messages
|
||
- `Manage Roles` - Gérer les rôles (pour attribuer Waiter/Verified)
|
||
|
||
## Configuration des rôles
|
||
|
||
Assurez-vous que ces rôles existent sur votre serveur Discord :
|
||
- **Rôle Waiter** (`ROLE_WAITER_ID`) : Attribué automatiquement lors d'une demande
|
||
- **Rôle Verified** (`ROLE_VERIFIED_ID`) : Attribué quand l'accès est accepté
|
||
- **Rôle Admin** (`ROLE_ADMIN_ID`) : Requis pour traiter les demandes d'accès
|
||
|
||
## Notes importantes
|
||
|
||
- Le fichier `whitelist.json` doit être accessible en lecture/écriture
|
||
- Le serveur Minecraft doit être accessible pour la vérification du statut
|
||
- Les IDs Discord dans le `.env` doivent être valides
|
||
- Le bot vérifie automatiquement les pseudos via l'API Mojang
|
||
|
||
## Dépannage
|
||
|
||
### Le bot ne répond pas aux commandes
|
||
- Vérifiez que le TOKEN est correct
|
||
- Vérifiez que les permissions sont accordées
|
||
- Consultez les logs dans la console
|
||
|
||
### Erreurs de whitelist
|
||
- Vérifiez le chemin vers `whitelist.json`
|
||
- Vérifiez les permissions de fichier
|
||
- Assurez-vous que le format JSON est valide
|
||
|
||
### Problèmes d'UUID
|
||
- Les UUIDs sont automatiquement formatés au bon format (avec tirets)
|
||
- Si un joueur n'est pas trouvé, vérifiez que le pseudo existe sur Minecraft
|
||
- Utilisez `npm run test-uuid` pour tester le formatage
|
||
- Format attendu: `xxxxxxxx-xxxx-xxxx-xxxx-xxxxxxxxxxxx`
|
||
|
||
### Problèmes de serveur Minecraft
|
||
- Vérifiez que l'adresse IP et le port sont corrects
|
||
- Assurez-vous que le serveur est en ligne
|
||
- Vérifiez les paramètres du pare-feu
|
||
- Utilisez `npm run test-server` pour tester la connexion
|
||
- Le timeout de connexion est de 10 secondes
|
||
|
||
### Messages automatiques
|
||
- Le message de demande d'accès est envoyé automatiquement au démarrage
|
||
- Les anciens messages sont supprimés automatiquement
|
||
- Un seul message actif est maintenu par canal
|
||
- **Le status du serveur se met à jour automatiquement toutes les 2 minutes**
|
||
|
||
### Configuration serveur Minecraft
|
||
- Assurez-vous que `white-list=true` dans server.properties
|
||
- **IMPORTANT**: `enforce-whitelist=true` doit être activé pour que la whitelist soit appliquée
|
||
- Utilisez `/whitelist reload` dans la console serveur après modifications
|
||
- Ou utilisez la commande `/minecraft reload` du bot pour avoir les instructions |