mc-access-bot/README.md

13 KiB
Raw Blame History

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

# Cloner et installer (ou uploader vos fichiers)
cd /home/votre-user/bots/
# ... copier vos fichiers ici ...
cd mcgestionbot
npm install

2. Configuration automatique

# Génération automatique du .env
./configure.sh

# Éditer avec vos tokens Discord
nano .env

3. Lancement

# 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

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 :

{
  "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

# 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

# Configurer sudo
sudo ./setup-sudo.sh
./test-permissions.sh

3. "Whitelist not enforced"

# 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

# 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é)

# 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

# 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 :
npm install
  1. Configurer le fichier .env : Assurez-vous que votre fichier .env contient toutes les variables nécessaires :
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
  1. Lancer le bot :
npm start

Pour le développement :

npm run dev

Pour tester le formatage UUID :

npm run test-uuid

Pour tester la connexion au serveur Minecraft :

npm run test-server

Pour tester la whitelist :

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