From abc5b3890f4bd8c37f1f3a5a3e861caa5588a310 Mon Sep 17 00:00:00 2001 From: Louis Mazin Date: Thu, 16 Apr 2026 17:25:32 +0200 Subject: [PATCH] test --- src/pterodactyl/displayer.js | 59 ++++++++++++++++++++++++++++++++++++ 1 file changed, 59 insertions(+) diff --git a/src/pterodactyl/displayer.js b/src/pterodactyl/displayer.js index 57329fb..407e280 100644 --- a/src/pterodactyl/displayer.js +++ b/src/pterodactyl/displayer.js @@ -5,6 +5,8 @@ const path = require('node:path'); const PINBOARD_SELECT_CUSTOM_ID = 'pinboard-image-select'; const selectedImageIndexByMessage = new Map(); const preloadedImagesByUrl = new Map(); +const warmedMessageIds = new Set(); +const warmingMessageIds = new Set(); let lastKnownStatus = null; const getCacheBustValue = () => { @@ -152,6 +154,59 @@ const preloadPinboardImages = async (items) => { } }; +const waitMs = async (delayMs) => new Promise(resolve => { + setTimeout(resolve, delayMs); +}); + +const visualWarmupEnabled = () => process.env.PINBOARD_VISUAL_WARMUP_ENABLED === 'true'; + +const getVisualWarmupDelayMs = () => { + const raw = Number.parseInt(process.env.PINBOARD_VISUAL_WARMUP_DELAY_MS || '350', 10); + if (Number.isNaN(raw) || raw < 150) { + return 350; + } + return raw; +}; + +const runVisualWarmup = async (message, status, pinboardItems, initialIndex) => { + if (!visualWarmupEnabled()) return; + if (!message || !message.id) return; + if (pinboardItems.length <= 1) return; + if (warmedMessageIds.has(message.id) || warmingMessageIds.has(message.id)) return; + + warmingMessageIds.add(message.id); + + try { + const delayMs = getVisualWarmupDelayMs(); + + for (let index = 0; index < pinboardItems.length; index += 1) { + selectedImageIndexByMessage.set(message.id, index); + const payload = buildPanelPayload(status, message.id, pinboardItems, { + useAttachmentForSelected: false, + disableCacheBustForSelected: true, + includeFiles: false + }); + await message.edit(payload); + await waitMs(delayMs); + } + + selectedImageIndexByMessage.set(message.id, initialIndex); + const restoredPayload = buildPanelPayload(status, message.id, pinboardItems, { + useAttachmentForSelected: false, + disableCacheBustForSelected: true, + includeFiles: false + }); + await message.edit(restoredPayload); + + warmedMessageIds.add(message.id); + console.log(`🔥 Warm-up visuel termine pour message ${message.id}`); + } catch (error) { + console.log(`⚠️ Warm-up visuel annule (${message.id}): ${error.message}`); + } finally { + warmingMessageIds.delete(message.id); + } +}; + const buildSelectedImageEmbed = (item, imageReference, options = {}) => { const useAttachment = options.useAttachment !== false; const disableCacheBust = options.disableCacheBust === true; @@ -306,6 +361,10 @@ const update = async (client) => { await message.edit(payload); + const initialIndex = clampIndex(selectedImageIndexByMessage.get(message.id) ?? 0, pinboardItems.length); + runVisualWarmup(message, status, pinboardItems, initialIndex) + .catch(error => console.log(`⚠️ Warm-up visuel en erreur: ${error.message}`)); + console.log(`📊 Panneau Minecraft mis a jour (${status.playersOnline}/${status.playersMax})`); } catch (error) { console.log(`❌ Erreur displayer: ${error.message}`);