test
This commit is contained in:
parent
c483e8f5da
commit
ff851ed35f
@ -8,6 +8,7 @@ let client = null;
|
|||||||
let heartbeatInterval = null;
|
let heartbeatInterval = null;
|
||||||
let checkInterval = null;
|
let checkInterval = null;
|
||||||
let isMonitoring = false;
|
let isMonitoring = false;
|
||||||
|
let isConnecting = false;
|
||||||
|
|
||||||
const parseLogMessage = (log) => {
|
const parseLogMessage = (log) => {
|
||||||
// Format réel de log Palworld:
|
// Format réel de log Palworld:
|
||||||
@ -118,21 +119,18 @@ const checkAndManageWebSocket = async () => {
|
|||||||
const { hasActiveLinkCodes, cleanExpiredCodes } = require('./database.js');
|
const { hasActiveLinkCodes, cleanExpiredCodes } = require('./database.js');
|
||||||
|
|
||||||
try {
|
try {
|
||||||
// Nettoyer les codes expirés
|
|
||||||
await cleanExpiredCodes();
|
await cleanExpiredCodes();
|
||||||
|
|
||||||
const hasActiveCodes = await hasActiveLinkCodes();
|
const hasActiveCodes = await hasActiveLinkCodes();
|
||||||
|
|
||||||
if (hasActiveCodes && !ws) {
|
if (hasActiveCodes && !ws && !isConnecting) {
|
||||||
// Il y a des codes actifs mais pas de connexion WebSocket
|
|
||||||
console.log('🔌 Codes de liaison actifs détectés, connexion au WebSocket...');
|
console.log('🔌 Codes de liaison actifs détectés, connexion au WebSocket...');
|
||||||
const serverId = process.env.PTERODACTYL_SERVER_ID;
|
const serverId = process.env.PTERODACTYL_SERVER_ID;
|
||||||
const pterodactylToken = process.env.PTERODACTYL_API_TOKEN;
|
const pterodactylToken = process.env.PTERODACTYL_API_TOKEN;
|
||||||
await connectWebSocket(pterodactylToken, serverId);
|
await connectWebSocket(pterodactylToken, serverId);
|
||||||
} else if (!hasActiveCodes && ws) {
|
} else if (!hasActiveCodes && ws) {
|
||||||
// Pas de codes actifs mais WebSocket connecté
|
|
||||||
console.log('🔌 Aucun code actif, fermeture du WebSocket...');
|
console.log('🔌 Aucun code actif, fermeture du WebSocket...');
|
||||||
stopConsoleMonitoring();
|
stopWebSocketOnly();
|
||||||
}
|
}
|
||||||
} catch (error) {
|
} catch (error) {
|
||||||
console.error('Erreur lors de la vérification des codes actifs:', error);
|
console.error('Erreur lors de la vérification des codes actifs:', error);
|
||||||
@ -140,12 +138,18 @@ const checkAndManageWebSocket = async () => {
|
|||||||
};
|
};
|
||||||
|
|
||||||
const connectWebSocket = async (pterodactylToken, serverId) => {
|
const connectWebSocket = async (pterodactylToken, serverId) => {
|
||||||
// Éviter les connexions multiples
|
if (ws && (ws.readyState === WebSocket.OPEN || ws.readyState === WebSocket.CONNECTING)) {
|
||||||
if (ws && ws.readyState === WebSocket.OPEN) {
|
console.log('⚠️ WebSocket déjà connecté ou en cours de connexion');
|
||||||
console.log('⚠️ WebSocket déjà connecté');
|
|
||||||
return;
|
return;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
if (isConnecting) {
|
||||||
|
console.log('⚠️ Connexion WebSocket déjà en cours');
|
||||||
|
return;
|
||||||
|
}
|
||||||
|
|
||||||
|
isConnecting = true;
|
||||||
|
|
||||||
try {
|
try {
|
||||||
const credentials = await getWebSocketCredentials(pterodactylToken, serverId);
|
const credentials = await getWebSocketCredentials(pterodactylToken, serverId);
|
||||||
|
|
||||||
@ -155,8 +159,8 @@ const connectWebSocket = async (pterodactylToken, serverId) => {
|
|||||||
|
|
||||||
ws.on('open', () => {
|
ws.on('open', () => {
|
||||||
console.log('✅ WebSocket Pterodactyl connecté');
|
console.log('✅ WebSocket Pterodactyl connecté');
|
||||||
|
isConnecting = false;
|
||||||
|
|
||||||
// Authentification selon la documentation
|
|
||||||
ws.send(JSON.stringify({
|
ws.send(JSON.stringify({
|
||||||
event: 'auth',
|
event: 'auth',
|
||||||
args: [credentials.token]
|
args: [credentials.token]
|
||||||
@ -167,17 +171,14 @@ const connectWebSocket = async (pterodactylToken, serverId) => {
|
|||||||
try {
|
try {
|
||||||
const message = JSON.parse(data.toString());
|
const message = JSON.parse(data.toString());
|
||||||
|
|
||||||
// Gérer l'événement d'authentification réussie
|
|
||||||
if (message.event === 'auth success') {
|
if (message.event === 'auth success') {
|
||||||
console.log('✅ Authentification WebSocket réussie');
|
console.log('✅ Authentification WebSocket réussie');
|
||||||
|
|
||||||
// S'abonner aux logs de la console
|
|
||||||
ws.send(JSON.stringify({
|
ws.send(JSON.stringify({
|
||||||
event: 'send logs',
|
event: 'send logs',
|
||||||
args: [null]
|
args: [null]
|
||||||
}));
|
}));
|
||||||
|
|
||||||
// Démarrer le heartbeat (toutes les 30 secondes)
|
|
||||||
if (heartbeatInterval) clearInterval(heartbeatInterval);
|
if (heartbeatInterval) clearInterval(heartbeatInterval);
|
||||||
heartbeatInterval = setInterval(() => {
|
heartbeatInterval = setInterval(() => {
|
||||||
if (ws && ws.readyState === WebSocket.OPEN) {
|
if (ws && ws.readyState === WebSocket.OPEN) {
|
||||||
@ -189,7 +190,6 @@ const connectWebSocket = async (pterodactylToken, serverId) => {
|
|||||||
}, 30000);
|
}, 30000);
|
||||||
}
|
}
|
||||||
|
|
||||||
// Gérer les logs de la console
|
|
||||||
if (message.event === 'console output') {
|
if (message.event === 'console output') {
|
||||||
const log = message.args[0];
|
const log = message.args[0];
|
||||||
|
|
||||||
@ -199,46 +199,59 @@ const connectWebSocket = async (pterodactylToken, serverId) => {
|
|||||||
|
|
||||||
if (playerData) {
|
if (playerData) {
|
||||||
await handleLinkCommand(linkData.playerName, playerData, linkData.code);
|
await handleLinkCommand(linkData.playerName, playerData, linkData.code);
|
||||||
await checkAndManageWebSocket();
|
// Vérifier immédiatement après la liaison
|
||||||
|
setTimeout(() => checkAndManageWebSocket(), 2000);
|
||||||
} else {
|
} else {
|
||||||
console.log(`❌ Impossible de trouver le Steam ID pour ${linkData.playerName}`);
|
console.log(`❌ Impossible de trouver le Steam ID pour ${linkData.playerName}`);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
// Gérer les événements de statut
|
|
||||||
if (message.event === 'status') {
|
if (message.event === 'status') {
|
||||||
console.log('📊 Statut du serveur:', message.args[0]);
|
console.log('📊 Statut du serveur:', message.args[0]);
|
||||||
}
|
}
|
||||||
|
|
||||||
} catch (error) {
|
} catch (error) {
|
||||||
// Message non-JSON ou erreur de parsing, on ignore
|
|
||||||
console.error('Erreur parsing message WebSocket:', error);
|
console.error('Erreur parsing message WebSocket:', error);
|
||||||
}
|
}
|
||||||
});
|
});
|
||||||
|
|
||||||
ws.on('error', (error) => {
|
ws.on('error', (error) => {
|
||||||
console.error('❌ Erreur WebSocket:', error.message);
|
console.error('❌ Erreur WebSocket:', error.message);
|
||||||
|
isConnecting = false;
|
||||||
});
|
});
|
||||||
|
|
||||||
ws.on('close', (code, reason) => {
|
ws.on('close', (code, reason) => {
|
||||||
console.log(`⚠️ WebSocket Pterodactyl déconnecté (Code: ${code})`);
|
console.log(`⚠️ WebSocket Pterodactyl déconnecté (Code: ${code})`);
|
||||||
ws = null;
|
ws = null;
|
||||||
|
isConnecting = false;
|
||||||
|
|
||||||
// Arrêter le heartbeat
|
|
||||||
if (heartbeatInterval) {
|
if (heartbeatInterval) {
|
||||||
clearInterval(heartbeatInterval);
|
clearInterval(heartbeatInterval);
|
||||||
heartbeatInterval = null;
|
heartbeatInterval = null;
|
||||||
}
|
}
|
||||||
|
|
||||||
// Ne pas reconnecter automatiquement, laisser le checkInterval gérer ça
|
|
||||||
});
|
});
|
||||||
|
|
||||||
} catch (error) {
|
} catch (error) {
|
||||||
console.error('Erreur lors de la connexion WebSocket:', error);
|
console.error('Erreur lors de la connexion WebSocket:', error);
|
||||||
|
isConnecting = false;
|
||||||
}
|
}
|
||||||
};
|
};
|
||||||
|
|
||||||
|
const stopWebSocketOnly = () => {
|
||||||
|
if (heartbeatInterval) {
|
||||||
|
clearInterval(heartbeatInterval);
|
||||||
|
heartbeatInterval = null;
|
||||||
|
}
|
||||||
|
|
||||||
|
if (ws) {
|
||||||
|
ws.close();
|
||||||
|
ws = null;
|
||||||
|
}
|
||||||
|
|
||||||
|
isConnecting = false;
|
||||||
|
};
|
||||||
|
|
||||||
const startConsoleMonitoring = (discordClient, pterodactylToken) => {
|
const startConsoleMonitoring = (discordClient, pterodactylToken) => {
|
||||||
if (isMonitoring) {
|
if (isMonitoring) {
|
||||||
console.log('⚠️ Surveillance déjà active');
|
console.log('⚠️ Surveillance déjà active');
|
||||||
@ -259,15 +272,12 @@ const startConsoleMonitoring = (discordClient, pterodactylToken) => {
|
|||||||
// Vérifier immédiatement
|
// Vérifier immédiatement
|
||||||
checkAndManageWebSocket();
|
checkAndManageWebSocket();
|
||||||
|
|
||||||
// Vérifier toutes les 30 secondes s'il faut connecter/déconnecter
|
// Vérifier toutes les 30 secondes
|
||||||
checkInterval = setInterval(checkAndManageWebSocket, 30000);
|
checkInterval = setInterval(checkAndManageWebSocket, 30000);
|
||||||
};
|
};
|
||||||
|
|
||||||
const stopConsoleMonitoring = () => {
|
const stopConsoleMonitoring = () => {
|
||||||
if (heartbeatInterval) {
|
stopWebSocketOnly();
|
||||||
clearInterval(heartbeatInterval);
|
|
||||||
heartbeatInterval = null;
|
|
||||||
}
|
|
||||||
|
|
||||||
if (checkInterval) {
|
if (checkInterval) {
|
||||||
clearInterval(checkInterval);
|
clearInterval(checkInterval);
|
||||||
@ -279,11 +289,6 @@ const stopConsoleMonitoring = () => {
|
|||||||
reconnectTimeout = null;
|
reconnectTimeout = null;
|
||||||
}
|
}
|
||||||
|
|
||||||
if (ws) {
|
|
||||||
ws.close();
|
|
||||||
ws = null;
|
|
||||||
}
|
|
||||||
|
|
||||||
isMonitoring = false;
|
isMonitoring = false;
|
||||||
console.log('🔌 Surveillance de la console arrêtée');
|
console.log('🔌 Surveillance de la console arrêtée');
|
||||||
};
|
};
|
||||||
|
|||||||
9
index.js
9
index.js
@ -6,7 +6,7 @@ const deploy = require('./deploy_command.js')
|
|||||||
const update = require('./displayer.js');
|
const update = require('./displayer.js');
|
||||||
const clean = require('./cleaner.js');
|
const clean = require('./cleaner.js');
|
||||||
const { Client, GatewayIntentBits, Collection, Events, Partials } = require('discord.js');
|
const { Client, GatewayIntentBits, Collection, Events, Partials } = require('discord.js');
|
||||||
const { initDatabase, createTables } = require('./database.js');
|
const { initDatabase, createTables, cleanExpiredCodes } = require('./database.js');
|
||||||
const { startConsoleMonitoring } = require('./consoleMonitor.js');
|
const { startConsoleMonitoring } = require('./consoleMonitor.js');
|
||||||
|
|
||||||
const client = new Client({ intents:
|
const client = new Client({ intents:
|
||||||
@ -52,13 +52,16 @@ client.once('ready', async () => {
|
|||||||
client.user.setPresence({ activities: [{ name: 'Rygain', type: 'WATCHING' }], status: 'online' });
|
client.user.setPresence({ activities: [{ name: 'Rygain', type: 'WATCHING' }], status: 'online' });
|
||||||
console.log('Bot started !');
|
console.log('Bot started !');
|
||||||
|
|
||||||
// Initialiser la base de données (non bloquant)
|
|
||||||
try {
|
try {
|
||||||
await initDatabase();
|
await initDatabase();
|
||||||
await createTables();
|
await createTables();
|
||||||
|
|
||||||
|
// Nettoyer les codes expirés au démarrage
|
||||||
|
await cleanExpiredCodes();
|
||||||
|
console.log('🧹 Codes expirés nettoyés');
|
||||||
|
|
||||||
console.log('📦 Système de liaison activé');
|
console.log('📦 Système de liaison activé');
|
||||||
|
|
||||||
// Démarrer la surveillance de la console seulement si la DB est OK
|
|
||||||
startConsoleMonitoring(client, process.env.PTERODACTYL_API_TOKEN);
|
startConsoleMonitoring(client, process.env.PTERODACTYL_API_TOKEN);
|
||||||
} catch (error) {
|
} catch (error) {
|
||||||
console.error('⚠️ Erreur lors de l\'initialisation de la base de données');
|
console.error('⚠️ Erreur lors de l\'initialisation de la base de données');
|
||||||
|
|||||||
Loading…
x
Reference in New Issue
Block a user