test
This commit is contained in:
parent
ad2f9e7e77
commit
b6a94eea6e
@ -14,6 +14,7 @@ const warmingMessageIds = new Set();
|
|||||||
const warmupRefreshKeyByMessage = new Map();
|
const warmupRefreshKeyByMessage = new Map();
|
||||||
let lastKnownStatus = null;
|
let lastKnownStatus = null;
|
||||||
let imageRefreshKey = Date.now();
|
let imageRefreshKey = Date.now();
|
||||||
|
const MAX_EMBEDS_PER_MESSAGE = 10;
|
||||||
|
|
||||||
const getCacheBustValue = () => {
|
const getCacheBustValue = () => {
|
||||||
const bucketSeconds = Number.parseInt(process.env.PINBOARD_CACHE_BUST_SECONDS || '60', 10);
|
const bucketSeconds = Number.parseInt(process.env.PINBOARD_CACHE_BUST_SECONDS || '60', 10);
|
||||||
@ -175,6 +176,86 @@ const preloadPinboardImages = async (items) => {
|
|||||||
}
|
}
|
||||||
};
|
};
|
||||||
|
|
||||||
|
const buildWarmupEmbeds = (items, startIndex, refreshKey) => {
|
||||||
|
const batchItems = items.slice(startIndex, startIndex + MAX_EMBEDS_PER_MESSAGE);
|
||||||
|
|
||||||
|
return batchItems.map((item, offset) => {
|
||||||
|
const absoluteIndex = startIndex + offset;
|
||||||
|
const warmupUrl = toRefreshKeyedUrl(toCacheBustedUrl(item.url), refreshKey);
|
||||||
|
|
||||||
|
return new EmbedBuilder()
|
||||||
|
.setColor('#1f2937')
|
||||||
|
.setTitle(`Cache image ${absoluteIndex + 1}/${items.length}`)
|
||||||
|
.setImage(warmupUrl);
|
||||||
|
});
|
||||||
|
};
|
||||||
|
|
||||||
|
const resolveWarmupMessage = async (client) => {
|
||||||
|
const cleanerChannelFallback = (process.env.CLEANER_CHANNEL_IDS || '')
|
||||||
|
.split(',')
|
||||||
|
.map(id => id.trim())
|
||||||
|
.find(Boolean);
|
||||||
|
const channelId = process.env.PINBOARD_WARMUP_CHANNEL_ID || cleanerChannelFallback;
|
||||||
|
const messageId = process.env.PINBOARD_WARMUP_MESSAGE_ID;
|
||||||
|
|
||||||
|
if (!channelId) {
|
||||||
|
return null;
|
||||||
|
}
|
||||||
|
|
||||||
|
const channel = await client.channels.fetch(channelId);
|
||||||
|
if (!channel || !channel.isTextBased()) {
|
||||||
|
throw new Error(`Salon warm-up non textuel ou introuvable: ${channelId}`);
|
||||||
|
}
|
||||||
|
|
||||||
|
if (messageId) {
|
||||||
|
try {
|
||||||
|
const message = await channel.messages.fetch(messageId);
|
||||||
|
return { channel, message };
|
||||||
|
} catch (error) {
|
||||||
|
console.log(`⚠️ Message warm-up ${messageId} introuvable. Creation d'un nouveau message.`);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
const newMessage = await channel.send({
|
||||||
|
content: 'Initialisation du cache images...'
|
||||||
|
});
|
||||||
|
|
||||||
|
console.log(`✅ Nouveau message warm-up cree: ID ${newMessage.id}`);
|
||||||
|
console.log(`👉 Ajoute PINBOARD_WARMUP_MESSAGE_ID=${newMessage.id} dans ton .env pour le lier de facon persistante.`);
|
||||||
|
|
||||||
|
return { channel, message: newMessage };
|
||||||
|
};
|
||||||
|
|
||||||
|
const runRemoteWarmup = async (client, pinboardItems, refreshKey) => {
|
||||||
|
if (!client) return false;
|
||||||
|
if (pinboardItems.length <= 1) return false;
|
||||||
|
|
||||||
|
const target = await resolveWarmupMessage(client);
|
||||||
|
if (!target) {
|
||||||
|
return false;
|
||||||
|
}
|
||||||
|
|
||||||
|
const { message } = target;
|
||||||
|
|
||||||
|
for (let startIndex = 0; startIndex < pinboardItems.length; startIndex += MAX_EMBEDS_PER_MESSAGE) {
|
||||||
|
const embeds = buildWarmupEmbeds(pinboardItems, startIndex, refreshKey);
|
||||||
|
await message.edit({
|
||||||
|
content: `Warm-up cache images (${Math.min(startIndex + MAX_EMBEDS_PER_MESSAGE, pinboardItems.length)}/${pinboardItems.length})`,
|
||||||
|
embeds,
|
||||||
|
components: []
|
||||||
|
});
|
||||||
|
}
|
||||||
|
|
||||||
|
await message.edit({
|
||||||
|
content: `Warm-up cache termine (${pinboardItems.length} images)`,
|
||||||
|
embeds: [],
|
||||||
|
components: []
|
||||||
|
});
|
||||||
|
|
||||||
|
console.log(`🔥 Warm-up distant termine pour message ${message.id}`);
|
||||||
|
return true;
|
||||||
|
};
|
||||||
|
|
||||||
const waitMs = async (delayMs) => new Promise(resolve => {
|
const waitMs = async (delayMs) => new Promise(resolve => {
|
||||||
setTimeout(resolve, delayMs);
|
setTimeout(resolve, delayMs);
|
||||||
});
|
});
|
||||||
@ -410,8 +491,15 @@ const update = async (client) => {
|
|||||||
await message.edit(payload);
|
await message.edit(payload);
|
||||||
|
|
||||||
const initialIndex = clampIndex(selectedImageIndexByMessage.get(message.id) ?? 0, pinboardItems.length);
|
const initialIndex = clampIndex(selectedImageIndexByMessage.get(message.id) ?? 0, pinboardItems.length);
|
||||||
runVisualWarmup(message, status, pinboardItems, initialIndex, imageRefreshKey)
|
runRemoteWarmup(client, pinboardItems, imageRefreshKey)
|
||||||
.catch(error => console.log(`⚠️ Warm-up visuel en erreur: ${error.message}`));
|
.then(didUseRemoteWarmup => {
|
||||||
|
if (!didUseRemoteWarmup) {
|
||||||
|
return runVisualWarmup(message, status, pinboardItems, initialIndex, imageRefreshKey);
|
||||||
|
}
|
||||||
|
|
||||||
|
return null;
|
||||||
|
})
|
||||||
|
.catch(error => console.log(`⚠️ Warm-up 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) {
|
||||||
|
|||||||
Loading…
x
Reference in New Issue
Block a user