check
This commit is contained in:
parent
5173bf09bf
commit
93d5ec9b1b
@ -5,6 +5,7 @@ const { verifyLinkCode, updateUserLinkWithUsername } = require('./database.js');
|
|||||||
let ws = null;
|
let ws = null;
|
||||||
let reconnectTimeout = null;
|
let reconnectTimeout = null;
|
||||||
let client = null;
|
let client = null;
|
||||||
|
let heartbeatInterval = null;
|
||||||
|
|
||||||
const parseLogMessage = (log) => {
|
const parseLogMessage = (log) => {
|
||||||
// Exemple de format de log Palworld:
|
// Exemple de format de log Palworld:
|
||||||
@ -78,39 +79,68 @@ const connectWebSocket = async (pterodactylToken, serverId) => {
|
|||||||
try {
|
try {
|
||||||
const credentials = await getWebSocketCredentials(pterodactylToken, serverId);
|
const credentials = await getWebSocketCredentials(pterodactylToken, serverId);
|
||||||
|
|
||||||
ws = new WebSocket(credentials.socket);
|
ws = new WebSocket(credentials.socket, {
|
||||||
|
origin: process.env.PTERODACTYL_API_URL
|
||||||
|
});
|
||||||
|
|
||||||
ws.on('open', () => {
|
ws.on('open', () => {
|
||||||
console.log('✅ WebSocket Pterodactyl connecté');
|
console.log('✅ WebSocket Pterodactyl connecté');
|
||||||
|
|
||||||
// Authentification
|
// Authentification selon la documentation
|
||||||
ws.send(JSON.stringify({
|
ws.send(JSON.stringify({
|
||||||
event: 'auth',
|
event: 'auth',
|
||||||
args: [credentials.token]
|
args: [credentials.token]
|
||||||
}));
|
}));
|
||||||
|
|
||||||
// S'abonner aux logs
|
|
||||||
ws.send(JSON.stringify({
|
|
||||||
event: 'send logs',
|
|
||||||
args: [null]
|
|
||||||
}));
|
|
||||||
});
|
});
|
||||||
|
|
||||||
ws.on('message', (data) => {
|
ws.on('message', (data) => {
|
||||||
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') {
|
||||||
|
console.log('✅ Authentification WebSocket réussie');
|
||||||
|
|
||||||
|
// S'abonner aux logs de la console
|
||||||
|
ws.send(JSON.stringify({
|
||||||
|
event: 'send logs',
|
||||||
|
args: [null]
|
||||||
|
}));
|
||||||
|
|
||||||
|
// Démarrer le heartbeat (toutes les 30 secondes)
|
||||||
|
if (heartbeatInterval) clearInterval(heartbeatInterval);
|
||||||
|
heartbeatInterval = setInterval(() => {
|
||||||
|
if (ws && ws.readyState === WebSocket.OPEN) {
|
||||||
|
ws.send(JSON.stringify({
|
||||||
|
event: 'send heartbeat',
|
||||||
|
args: []
|
||||||
|
}));
|
||||||
|
}
|
||||||
|
}, 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];
|
||||||
|
|
||||||
|
// Afficher le log pour debug
|
||||||
|
console.log('📝 Log:', log);
|
||||||
|
|
||||||
// Détecter les commandes !link
|
// Détecter les commandes !link
|
||||||
const linkData = parseLogMessage(log);
|
const linkData = parseLogMessage(log);
|
||||||
if (linkData) {
|
if (linkData) {
|
||||||
handleLinkCommand(linkData.playerName, linkData.steamId, linkData.code);
|
handleLinkCommand(linkData.playerName, linkData.steamId, linkData.code);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
// Gérer les événements de statut
|
||||||
|
if (message.event === 'status') {
|
||||||
|
console.log('📊 Statut du serveur:', message.args[0]);
|
||||||
|
}
|
||||||
|
|
||||||
} catch (error) {
|
} catch (error) {
|
||||||
// Message non-JSON ou erreur de parsing, on ignore
|
// Message non-JSON ou erreur de parsing, on ignore
|
||||||
|
console.error('Erreur parsing message WebSocket:', error);
|
||||||
}
|
}
|
||||||
});
|
});
|
||||||
|
|
||||||
@ -118,13 +148,20 @@ const connectWebSocket = async (pterodactylToken, serverId) => {
|
|||||||
console.error('❌ Erreur WebSocket:', error.message);
|
console.error('❌ Erreur WebSocket:', error.message);
|
||||||
});
|
});
|
||||||
|
|
||||||
ws.on('close', () => {
|
ws.on('close', (code, reason) => {
|
||||||
console.log('⚠️ WebSocket Pterodactyl déconnecté, reconnexion dans 10 secondes...');
|
console.log(`⚠️ WebSocket Pterodactyl déconnecté (Code: ${code}, Raison: ${reason})`);
|
||||||
ws = null;
|
ws = null;
|
||||||
|
|
||||||
|
// Arrêter le heartbeat
|
||||||
|
if (heartbeatInterval) {
|
||||||
|
clearInterval(heartbeatInterval);
|
||||||
|
heartbeatInterval = null;
|
||||||
|
}
|
||||||
|
|
||||||
// Reconnexion automatique
|
// Reconnexion automatique
|
||||||
if (reconnectTimeout) clearTimeout(reconnectTimeout);
|
if (reconnectTimeout) clearTimeout(reconnectTimeout);
|
||||||
reconnectTimeout = setTimeout(() => {
|
reconnectTimeout = setTimeout(() => {
|
||||||
|
console.log('🔄 Tentative de reconnexion...');
|
||||||
connectWebSocket(pterodactylToken, serverId);
|
connectWebSocket(pterodactylToken, serverId);
|
||||||
}, 10000);
|
}, 10000);
|
||||||
});
|
});
|
||||||
@ -135,6 +172,7 @@ const connectWebSocket = async (pterodactylToken, serverId) => {
|
|||||||
// Réessayer dans 30 secondes
|
// Réessayer dans 30 secondes
|
||||||
if (reconnectTimeout) clearTimeout(reconnectTimeout);
|
if (reconnectTimeout) clearTimeout(reconnectTimeout);
|
||||||
reconnectTimeout = setTimeout(() => {
|
reconnectTimeout = setTimeout(() => {
|
||||||
|
console.log('🔄 Tentative de reconnexion...');
|
||||||
connectWebSocket(pterodactylToken, serverId);
|
connectWebSocket(pterodactylToken, serverId);
|
||||||
}, 30000);
|
}, 30000);
|
||||||
}
|
}
|
||||||
@ -154,6 +192,11 @@ const startConsoleMonitoring = (discordClient, pterodactylToken) => {
|
|||||||
};
|
};
|
||||||
|
|
||||||
const stopConsoleMonitoring = () => {
|
const stopConsoleMonitoring = () => {
|
||||||
|
if (heartbeatInterval) {
|
||||||
|
clearInterval(heartbeatInterval);
|
||||||
|
heartbeatInterval = null;
|
||||||
|
}
|
||||||
|
|
||||||
if (reconnectTimeout) {
|
if (reconnectTimeout) {
|
||||||
clearTimeout(reconnectTimeout);
|
clearTimeout(reconnectTimeout);
|
||||||
reconnectTimeout = null;
|
reconnectTimeout = null;
|
||||||
|
|||||||
9
index.js
9
index.js
@ -52,15 +52,18 @@ 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
|
// Initialiser la base de données (non bloquant)
|
||||||
try {
|
try {
|
||||||
await initDatabase();
|
await initDatabase();
|
||||||
await createTables();
|
await createTables();
|
||||||
|
console.log('📦 Système de liaison activé');
|
||||||
|
|
||||||
// Démarrer la surveillance de la console pour les commandes !link
|
// 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:', error);
|
console.error('⚠️ Erreur lors de l\'initialisation de la base de données');
|
||||||
|
console.error('⚠️ Le système de liaison est désactivé');
|
||||||
|
console.error('⚠️ Les autres fonctionnalités du bot restent actives');
|
||||||
}
|
}
|
||||||
|
|
||||||
deploy(process.env.DISCORD_TOKEN);
|
deploy(process.env.DISCORD_TOKEN);
|
||||||
|
|||||||
Loading…
x
Reference in New Issue
Block a user