nice
This commit is contained in:
parent
c61d2186c6
commit
ac461cc3fb
@ -8,7 +8,6 @@ module.exports = {
|
|||||||
|
|
||||||
async execute(interaction) {
|
async execute(interaction) {
|
||||||
try {
|
try {
|
||||||
// Vérifier si l'utilisateur est déjà lié
|
|
||||||
const existingLink = await getUserLink(interaction.user.id);
|
const existingLink = await getUserLink(interaction.user.id);
|
||||||
if (existingLink) {
|
if (existingLink) {
|
||||||
return interaction.reply({
|
return interaction.reply({
|
||||||
@ -17,7 +16,6 @@ module.exports = {
|
|||||||
});
|
});
|
||||||
}
|
}
|
||||||
|
|
||||||
// Générer un code unique
|
|
||||||
const code = await generateLinkCode(interaction.user.id);
|
const code = await generateLinkCode(interaction.user.id);
|
||||||
|
|
||||||
const embed = new EmbedBuilder()
|
const embed = new EmbedBuilder()
|
||||||
@ -30,11 +28,13 @@ module.exports = {
|
|||||||
{ name: '⏱️ Expiration', value: 'Ce code expire dans **10 minutes**' },
|
{ name: '⏱️ Expiration', value: 'Ce code expire dans **10 minutes**' },
|
||||||
{ name: '🔑 Votre code', value: `\`${code}\``, inline: false }
|
{ name: '🔑 Votre code', value: `\`${code}\``, inline: false }
|
||||||
)
|
)
|
||||||
.setFooter({ text: 'Ne partagez pas ce code avec d\'autres personnes' })
|
.setFooter({ text: 'Le système de surveillance démarre automatiquement' })
|
||||||
.setTimestamp();
|
.setTimestamp();
|
||||||
|
|
||||||
await interaction.reply({ embeds: [embed], ephemeral: true });
|
await interaction.reply({ embeds: [embed], ephemeral: true });
|
||||||
|
|
||||||
|
// Le système checkAndManageWebSocket va détecter le nouveau code automatiquement
|
||||||
|
|
||||||
} catch (error) {
|
} catch (error) {
|
||||||
console.error('Erreur lors de la génération du code:', error);
|
console.error('Erreur lors de la génération du code:', error);
|
||||||
await interaction.reply({
|
await interaction.reply({
|
||||||
|
|||||||
@ -6,6 +6,8 @@ let ws = null;
|
|||||||
let reconnectTimeout = null;
|
let reconnectTimeout = null;
|
||||||
let client = null;
|
let client = null;
|
||||||
let heartbeatInterval = null;
|
let heartbeatInterval = null;
|
||||||
|
let checkInterval = null;
|
||||||
|
let isMonitoring = false;
|
||||||
|
|
||||||
const parseLogMessage = (log) => {
|
const parseLogMessage = (log) => {
|
||||||
// Format réel de log Palworld:
|
// Format réel de log Palworld:
|
||||||
@ -109,7 +111,38 @@ const getWebSocketCredentials = async (pterodactylToken, serverId) => {
|
|||||||
}
|
}
|
||||||
};
|
};
|
||||||
|
|
||||||
|
const checkAndManageWebSocket = async () => {
|
||||||
|
const { hasActiveLinkCodes, cleanExpiredCodes } = require('./database.js');
|
||||||
|
|
||||||
|
try {
|
||||||
|
// Nettoyer les codes expirés
|
||||||
|
await cleanExpiredCodes();
|
||||||
|
|
||||||
|
const hasActiveCodes = await hasActiveLinkCodes();
|
||||||
|
|
||||||
|
if (hasActiveCodes && !ws) {
|
||||||
|
// Il y a des codes actifs mais pas de connexion WebSocket
|
||||||
|
console.log('🔌 Codes de liaison actifs détectés, connexion au WebSocket...');
|
||||||
|
const serverId = process.env.PTERODACTYL_SERVER_ID;
|
||||||
|
const pterodactylToken = process.env.PTERODACTYL_API_TOKEN;
|
||||||
|
await connectWebSocket(pterodactylToken, serverId);
|
||||||
|
} else if (!hasActiveCodes && ws) {
|
||||||
|
// Pas de codes actifs mais WebSocket connecté
|
||||||
|
console.log('🔌 Aucun code actif, fermeture du WebSocket...');
|
||||||
|
stopConsoleMonitoring();
|
||||||
|
}
|
||||||
|
} catch (error) {
|
||||||
|
console.error('Erreur lors de la vérification des codes actifs:', error);
|
||||||
|
}
|
||||||
|
};
|
||||||
|
|
||||||
const connectWebSocket = async (pterodactylToken, serverId) => {
|
const connectWebSocket = async (pterodactylToken, serverId) => {
|
||||||
|
// Éviter les connexions multiples
|
||||||
|
if (ws && ws.readyState === WebSocket.OPEN) {
|
||||||
|
console.log('⚠️ WebSocket déjà connecté');
|
||||||
|
return;
|
||||||
|
}
|
||||||
|
|
||||||
try {
|
try {
|
||||||
const credentials = await getWebSocketCredentials(pterodactylToken, serverId);
|
const credentials = await getWebSocketCredentials(pterodactylToken, serverId);
|
||||||
|
|
||||||
@ -164,6 +197,8 @@ const connectWebSocket = async (pterodactylToken, serverId) => {
|
|||||||
|
|
||||||
if (steamId) {
|
if (steamId) {
|
||||||
await handleLinkCommand(linkData.playerName, steamId, linkData.code);
|
await handleLinkCommand(linkData.playerName, steamId, linkData.code);
|
||||||
|
// Vérifier immédiatement s'il faut fermer la connexion
|
||||||
|
await checkAndManageWebSocket();
|
||||||
} else {
|
} else {
|
||||||
console.log(`❌ Impossible de trouver le Steam ID pour ${linkData.playerName}`);
|
console.log(`❌ Impossible de trouver le Steam ID pour ${linkData.playerName}`);
|
||||||
console.log(`💡 Le joueur doit être connecté sur le serveur`);
|
console.log(`💡 Le joueur doit être connecté sur le serveur`);
|
||||||
@ -187,7 +222,7 @@ const connectWebSocket = async (pterodactylToken, serverId) => {
|
|||||||
});
|
});
|
||||||
|
|
||||||
ws.on('close', (code, reason) => {
|
ws.on('close', (code, reason) => {
|
||||||
console.log(`⚠️ WebSocket Pterodactyl déconnecté (Code: ${code}, Raison: ${reason})`);
|
console.log(`⚠️ WebSocket Pterodactyl déconnecté (Code: ${code})`);
|
||||||
ws = null;
|
ws = null;
|
||||||
|
|
||||||
// Arrêter le heartbeat
|
// Arrêter le heartbeat
|
||||||
@ -196,28 +231,22 @@ const connectWebSocket = async (pterodactylToken, serverId) => {
|
|||||||
heartbeatInterval = null;
|
heartbeatInterval = null;
|
||||||
}
|
}
|
||||||
|
|
||||||
// Reconnexion automatique
|
// Ne pas reconnecter automatiquement, laisser le checkInterval gérer ça
|
||||||
if (reconnectTimeout) clearTimeout(reconnectTimeout);
|
|
||||||
reconnectTimeout = setTimeout(() => {
|
|
||||||
console.log('🔄 Tentative de reconnexion...');
|
|
||||||
connectWebSocket(pterodactylToken, serverId);
|
|
||||||
}, 10000);
|
|
||||||
});
|
});
|
||||||
|
|
||||||
} catch (error) {
|
} catch (error) {
|
||||||
console.error('Erreur lors de la connexion WebSocket:', error);
|
console.error('Erreur lors de la connexion WebSocket:', error);
|
||||||
|
|
||||||
// Réessayer dans 30 secondes
|
|
||||||
if (reconnectTimeout) clearTimeout(reconnectTimeout);
|
|
||||||
reconnectTimeout = setTimeout(() => {
|
|
||||||
console.log('🔄 Tentative de reconnexion...');
|
|
||||||
connectWebSocket(pterodactylToken, serverId);
|
|
||||||
}, 30000);
|
|
||||||
}
|
}
|
||||||
};
|
};
|
||||||
|
|
||||||
const startConsoleMonitoring = (discordClient, pterodactylToken) => {
|
const startConsoleMonitoring = (discordClient, pterodactylToken) => {
|
||||||
|
if (isMonitoring) {
|
||||||
|
console.log('⚠️ Surveillance déjà active');
|
||||||
|
return;
|
||||||
|
}
|
||||||
|
|
||||||
client = discordClient;
|
client = discordClient;
|
||||||
|
isMonitoring = true;
|
||||||
|
|
||||||
const serverId = process.env.PTERODACTYL_SERVER_ID;
|
const serverId = process.env.PTERODACTYL_SERVER_ID;
|
||||||
if (!serverId) {
|
if (!serverId) {
|
||||||
@ -225,8 +254,13 @@ const startConsoleMonitoring = (discordClient, pterodactylToken) => {
|
|||||||
return;
|
return;
|
||||||
}
|
}
|
||||||
|
|
||||||
console.log('🔍 Surveillance de la console Pterodactyl démarrée');
|
console.log('🔍 Surveillance de la console Pterodactyl démarrée (mode intelligent)');
|
||||||
connectWebSocket(pterodactylToken, serverId);
|
|
||||||
|
// Vérifier immédiatement
|
||||||
|
checkAndManageWebSocket();
|
||||||
|
|
||||||
|
// Vérifier toutes les 30 secondes s'il faut connecter/déconnecter
|
||||||
|
checkInterval = setInterval(checkAndManageWebSocket, 30000);
|
||||||
};
|
};
|
||||||
|
|
||||||
const stopConsoleMonitoring = () => {
|
const stopConsoleMonitoring = () => {
|
||||||
@ -235,6 +269,11 @@ const stopConsoleMonitoring = () => {
|
|||||||
heartbeatInterval = null;
|
heartbeatInterval = null;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
if (checkInterval) {
|
||||||
|
clearInterval(checkInterval);
|
||||||
|
checkInterval = null;
|
||||||
|
}
|
||||||
|
|
||||||
if (reconnectTimeout) {
|
if (reconnectTimeout) {
|
||||||
clearTimeout(reconnectTimeout);
|
clearTimeout(reconnectTimeout);
|
||||||
reconnectTimeout = null;
|
reconnectTimeout = null;
|
||||||
@ -244,6 +283,9 @@ const stopConsoleMonitoring = () => {
|
|||||||
ws.close();
|
ws.close();
|
||||||
ws = null;
|
ws = null;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
isMonitoring = false;
|
||||||
|
console.log('🔌 Surveillance de la console arrêtée');
|
||||||
};
|
};
|
||||||
|
|
||||||
module.exports = { startConsoleMonitoring, stopConsoleMonitoring };
|
module.exports = { startConsoleMonitoring, stopConsoleMonitoring };
|
||||||
|
|||||||
Loading…
x
Reference in New Issue
Block a user