This commit is contained in:
Louis Mazin 2026-04-16 17:25:32 +02:00
parent 9895d039e8
commit abc5b3890f

View File

@ -5,6 +5,8 @@ const path = require('node:path');
const PINBOARD_SELECT_CUSTOM_ID = 'pinboard-image-select'; const PINBOARD_SELECT_CUSTOM_ID = 'pinboard-image-select';
const selectedImageIndexByMessage = new Map(); const selectedImageIndexByMessage = new Map();
const preloadedImagesByUrl = new Map(); const preloadedImagesByUrl = new Map();
const warmedMessageIds = new Set();
const warmingMessageIds = new Set();
let lastKnownStatus = null; let lastKnownStatus = null;
const getCacheBustValue = () => { 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 buildSelectedImageEmbed = (item, imageReference, options = {}) => {
const useAttachment = options.useAttachment !== false; const useAttachment = options.useAttachment !== false;
const disableCacheBust = options.disableCacheBust === true; const disableCacheBust = options.disableCacheBust === true;
@ -306,6 +361,10 @@ const update = async (client) => {
await message.edit(payload); 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})`); console.log(`📊 Panneau Minecraft mis a jour (${status.playersOnline}/${status.playersMax})`);
} catch (error) { } catch (error) {
console.log(`❌ Erreur displayer: ${error.message}`); console.log(`❌ Erreur displayer: ${error.message}`);