check
This commit is contained in:
parent
5173bf09bf
commit
93d5ec9b1b
@ -5,6 +5,7 @@ const { verifyLinkCode, updateUserLinkWithUsername } = require('./database.js');
|
||||
let ws = null;
|
||||
let reconnectTimeout = null;
|
||||
let client = null;
|
||||
let heartbeatInterval = null;
|
||||
|
||||
const parseLogMessage = (log) => {
|
||||
// Exemple de format de log Palworld:
|
||||
@ -78,39 +79,68 @@ const connectWebSocket = async (pterodactylToken, serverId) => {
|
||||
try {
|
||||
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', () => {
|
||||
console.log('✅ WebSocket Pterodactyl connecté');
|
||||
|
||||
// Authentification
|
||||
// Authentification selon la documentation
|
||||
ws.send(JSON.stringify({
|
||||
event: 'auth',
|
||||
args: [credentials.token]
|
||||
}));
|
||||
|
||||
// S'abonner aux logs
|
||||
ws.send(JSON.stringify({
|
||||
event: 'send logs',
|
||||
args: [null]
|
||||
}));
|
||||
});
|
||||
|
||||
ws.on('message', (data) => {
|
||||
try {
|
||||
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') {
|
||||
const log = message.args[0];
|
||||
|
||||
// Afficher le log pour debug
|
||||
console.log('📝 Log:', log);
|
||||
|
||||
// Détecter les commandes !link
|
||||
const linkData = parseLogMessage(log);
|
||||
if (linkData) {
|
||||
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) {
|
||||
// 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);
|
||||
});
|
||||
|
||||
ws.on('close', () => {
|
||||
console.log('⚠️ WebSocket Pterodactyl déconnecté, reconnexion dans 10 secondes...');
|
||||
ws.on('close', (code, reason) => {
|
||||
console.log(`⚠️ WebSocket Pterodactyl déconnecté (Code: ${code}, Raison: ${reason})`);
|
||||
ws = null;
|
||||
|
||||
// Arrêter le heartbeat
|
||||
if (heartbeatInterval) {
|
||||
clearInterval(heartbeatInterval);
|
||||
heartbeatInterval = null;
|
||||
}
|
||||
|
||||
// Reconnexion automatique
|
||||
if (reconnectTimeout) clearTimeout(reconnectTimeout);
|
||||
reconnectTimeout = setTimeout(() => {
|
||||
console.log('🔄 Tentative de reconnexion...');
|
||||
connectWebSocket(pterodactylToken, serverId);
|
||||
}, 10000);
|
||||
});
|
||||
@ -135,6 +172,7 @@ const connectWebSocket = async (pterodactylToken, serverId) => {
|
||||
// Réessayer dans 30 secondes
|
||||
if (reconnectTimeout) clearTimeout(reconnectTimeout);
|
||||
reconnectTimeout = setTimeout(() => {
|
||||
console.log('🔄 Tentative de reconnexion...');
|
||||
connectWebSocket(pterodactylToken, serverId);
|
||||
}, 30000);
|
||||
}
|
||||
@ -154,6 +192,11 @@ const startConsoleMonitoring = (discordClient, pterodactylToken) => {
|
||||
};
|
||||
|
||||
const stopConsoleMonitoring = () => {
|
||||
if (heartbeatInterval) {
|
||||
clearInterval(heartbeatInterval);
|
||||
heartbeatInterval = null;
|
||||
}
|
||||
|
||||
if (reconnectTimeout) {
|
||||
clearTimeout(reconnectTimeout);
|
||||
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' });
|
||||
console.log('Bot started !');
|
||||
|
||||
// Initialiser la base de données
|
||||
// Initialiser la base de données (non bloquant)
|
||||
try {
|
||||
await initDatabase();
|
||||
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);
|
||||
} 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);
|
||||
|
||||
Loading…
x
Reference in New Issue
Block a user