Compare commits

..

No commits in common. "66c9e1fa320c879efae121aa3ea691aeac5220a2" and "f7592bf0cbb6d06816c6742ceb57508a399a5ce4" have entirely different histories.

3 changed files with 39 additions and 23 deletions

2
.env
View File

@ -14,7 +14,7 @@ MINECRAFT_SERVER_IP=valloic.dev:25565
MINECRAFT_WHITELIST_PATH=/opt/minecraft/server/whitelist.json
USE_SCREEN=true
SERVER_JAR=fabric-server-launch.jar
SERVER_JAR=fabric-server.jar
JAVA_ARGS=-Xmx2G -Xms1G
USE_SCREEN=true
MINECRAFT_SERVER_PATH=/opt/minecraft/server

32
.env.example Normal file
View File

@ -0,0 +1,32 @@
# Configuration du bot Discord
DISCORD_TOKEN=votre_token_discord
CLIENT_ID=votre_client_id
GUILD_ID=votre_guild_id
OWNER_ID=votre_user_id
# Configuration des rôles et channels
ROLE_WAITER_ID=id_du_role_attente
ROLE_VERIFIED_ID=id_du_role_verifie
CHANNEL_REQUEST_ACCESS_ID=id_channel_demandes
CHANNEL_LOGS_ID=id_channel_logs
# Configuration du serveur Minecraft
MINECRAFT_SERVER_HOST=votre_serveur.com
MINECRAFT_SERVER_PORT=25565
MINECRAFT_WHITELIST_PATH=/chemin/vers/whitelist.json
MINECRAFT_SERVICE_NAME=minecraft
# Configuration du mode serveur
USE_SCREEN=true
# true = utilise screen (plus flexible, commandes directes)
# false = utilise systemctl (plus robuste, redémarrage pour whitelist)
# Configuration des chemins serveur (pour VPS)
MINECRAFT_SERVER_PATH=/opt/minecraft/server
MINECRAFT_BACKUP_PATH=/opt/minecraft/backups
# Configuration Java et serveur
SERVER_JAR=fabric-server.jar
# Autres options: server.jar, paper.jar, spigot.jar, forge-server.jar
JAVA_ARGS=-Xmx2G -Xms1G
# Arguments Java personnalisés

View File

@ -53,26 +53,13 @@ class ServerControlManager {
}
}
async getMinecraftScreenName() {
// Cherche la session screen qui finit par .minecraft
const result = await this.executeCommand('screen -ls | grep \.minecraft', 'Recherche session screen Minecraft');
if (result.success && result.output.trim() !== '') {
// Exemple de sortie : "1294388.minecraft (10/21/25 22:02:21) (Detached)"
const match = result.output.trim().match(/([0-9]+\.minecraft)/);
if (match) return match[1];
}
// Fallback sur le nom par défaut
return this.screenName;
}
async reloadWhitelist() {
console.log('🔄 Rechargement de la whitelist...');
if (this.useScreen) {
// Utiliser le nom dynamique de la session screen
const screenSession = await this.getMinecraftScreenName();
// Méthode screen : commande directe
const result = await this.executeCommand(
`sudo -u ${this.serverUser} screen -S ${screenSession} -p 0 -X stuff "whitelist reload\n"`,
`sudo -u ${this.serverUser} screen -S ${this.screenName} -p 0 -X stuff "whitelist reload\n"`,
'Rechargement whitelist via commande'
);
@ -205,11 +192,9 @@ class ServerControlManager {
async stopServer() {
if (this.useScreen) {
// Utiliser le nom dynamique de la session screen
const screenSession = await this.getMinecraftScreenName();
// Arrêter proprement avec la commande stop
const stopResult = await this.executeCommand(
`sudo -u ${this.serverUser} screen -S ${screenSession} -p 0 -X stuff "stop\n"`,
`sudo -u ${this.serverUser} screen -S ${this.screenName} -p 0 -X stuff "stop\n"`,
'Arrêt propre du serveur'
);
@ -217,7 +202,7 @@ class ServerControlManager {
await new Promise(resolve => setTimeout(resolve, 5000));
const killResult = await this.executeCommand(
`sudo -u ${this.serverUser} screen -S ${screenSession} -X quit`,
`sudo -u ${this.serverUser} screen -S ${this.screenName} -X quit`,
'Fermeture session screen'
);
@ -279,10 +264,9 @@ class ServerControlManager {
async sendServerCommand(command) {
if (this.useScreen) {
// Utiliser le nom dynamique de la session screen
const screenSession = await this.getMinecraftScreenName();
// Envoyer directement via screen
const result = await this.executeCommand(
`sudo -u ${this.serverUser} screen -S ${screenSession} -p 0 -X stuff "${command}\n"`,
`sudo -u ${this.serverUser} screen -S ${this.screenName} -p 0 -X stuff "${command}\n"`,
`Envoi commande: ${command}`
);