test
This commit is contained in:
parent
4499339b29
commit
6cd2dc5258
@ -21,12 +21,16 @@ module.exports = {
|
||||
}
|
||||
};
|
||||
|
||||
async function showPanel(interaction) {
|
||||
function hasPanelRole(member) {
|
||||
return Boolean(member?.roles?.cache?.has('1444684935632912394'));
|
||||
}
|
||||
|
||||
async function buildPanelPayload() {
|
||||
const config = await getAllConfig();
|
||||
const monitoringStatus = getMonitoringStatus();
|
||||
|
||||
const autoRebootEnabled = config.auto_reboot_enabled === 'true';
|
||||
const ramThreshold = parseInt(config.ram_threshold_gb);
|
||||
const ramThreshold = Number.parseInt(config.ram_threshold_gb, 10);
|
||||
const consoleMonitorEnabled = config.console_monitor_enabled === 'true';
|
||||
|
||||
const embed = new EmbedBuilder()
|
||||
@ -127,98 +131,14 @@ async function showPanel(interaction) {
|
||||
.setEmoji('📊')
|
||||
);
|
||||
|
||||
if (interaction.replied || interaction.deferred) {
|
||||
await interaction.editReply({ embeds: [embed], components: [row1, row2, row3] });
|
||||
} else {
|
||||
await interaction.reply({ embeds: [embed], components: [row1, row2, row3] });
|
||||
}
|
||||
|
||||
// Créer un collector pour les interactions
|
||||
const collector = interaction.channel.createMessageComponentCollector({
|
||||
time: 300000 // 5 minutes
|
||||
});
|
||||
|
||||
collector.on('collect', async i => {
|
||||
if (!i.member.roles.cache.has('1444684935632912394')) {
|
||||
await i.reply({
|
||||
content: '❌ Vous n\'avez pas la permission d\'utiliser ce panneau.',
|
||||
flags: 64
|
||||
});
|
||||
return;
|
||||
}
|
||||
|
||||
try {
|
||||
if (i.customId === 'toggle_auto_reboot') {
|
||||
const currentState = (await getConfig('auto_reboot_enabled')) === 'true';
|
||||
const newState = !currentState;
|
||||
await updateConfig('auto_reboot_enabled', newState.toString());
|
||||
|
||||
await i.deferUpdate();
|
||||
await i.editReply({
|
||||
content: `✅ Redémarrage automatique ${newState ? 'activé' : 'désactivé'}`,
|
||||
});
|
||||
|
||||
// Refresh panel
|
||||
setTimeout(async () => {
|
||||
await showPanel(i);
|
||||
}, 1000);
|
||||
}
|
||||
else if (i.customId === 'toggle_console_monitor') {
|
||||
const currentState = (await getConfig('console_monitor_enabled')) === 'true';
|
||||
const newState = !currentState;
|
||||
await updateConfig('console_monitor_enabled', newState.toString());
|
||||
|
||||
await i.deferUpdate();
|
||||
await i.editReply({
|
||||
content: `✅ Surveillance console ${newState ? 'activée' : 'désactivée'}`,
|
||||
});
|
||||
|
||||
// Refresh panel
|
||||
setTimeout(async () => {
|
||||
await showPanel(i);
|
||||
}, 1000);
|
||||
}
|
||||
else if (i.customId === 'change_ram_threshold') {
|
||||
const newThreshold = i.values[0];
|
||||
await updateConfig('ram_threshold_gb', newThreshold);
|
||||
|
||||
await i.deferUpdate();
|
||||
await i.editReply({
|
||||
content: `✅ Seuil RAM changé à ${newThreshold} Go`,
|
||||
});
|
||||
|
||||
// Refresh panel
|
||||
setTimeout(async () => {
|
||||
await showPanel(i);
|
||||
}, 1000);
|
||||
}
|
||||
else if (i.customId === 'refresh_panel') {
|
||||
await i.deferUpdate();
|
||||
await showPanel(i);
|
||||
}
|
||||
else if (i.customId === 'view_stats') {
|
||||
await showDetailedStats(i);
|
||||
}
|
||||
} catch (error) {
|
||||
console.error('Erreur lors de l\'interaction avec le panel:', error);
|
||||
if (i.deferred || i.replied) {
|
||||
await i.editReply({ content: '❌ Une erreur est survenue', components: [] });
|
||||
} else {
|
||||
await i.reply({ content: '❌ Une erreur est survenue', flags: 64 });
|
||||
}
|
||||
}
|
||||
});
|
||||
|
||||
collector.on('end', () => {
|
||||
console.log('⏰ [Panel] Collector expiré');
|
||||
});
|
||||
return { embeds: [embed], components: [row1, row2, row3], content: null };
|
||||
}
|
||||
|
||||
async function showDetailedStats(interaction) {
|
||||
async function buildStatsPayload() {
|
||||
const config = await getAllConfig();
|
||||
const monitoringStatus = getMonitoringStatus();
|
||||
const { checkRAMUsage } = require('../../ramMonitor');
|
||||
|
||||
|
||||
const ramData = await checkRAMUsage();
|
||||
|
||||
const embed = new EmbedBuilder()
|
||||
@ -254,17 +174,136 @@ async function showDetailedStats(interaction) {
|
||||
.setEmoji('◀️')
|
||||
);
|
||||
|
||||
await interaction.update({ embeds: [embed], components: [row] });
|
||||
return { embeds: [embed], components: [row], content: null };
|
||||
}
|
||||
|
||||
// Attendre le clic sur le bouton retour
|
||||
const collector = interaction.channel.createMessageComponentCollector({
|
||||
time: 60000
|
||||
function isIgnorableDiscordRestError(error) {
|
||||
const code = error?.code ?? error?.rawError?.code;
|
||||
return code === 10062 || code === 40060;
|
||||
}
|
||||
|
||||
async function safeDeferUpdate(interaction) {
|
||||
if (interaction?.deferred || interaction?.replied) return;
|
||||
try {
|
||||
await interaction.deferUpdate();
|
||||
} catch (e) {
|
||||
if (!isIgnorableDiscordRestError(e)) throw e;
|
||||
}
|
||||
}
|
||||
|
||||
async function renderPanel(interaction) {
|
||||
const payload = await buildPanelPayload();
|
||||
|
||||
// Premier affichage via la commande slash
|
||||
if (interaction.isChatInputCommand?.()) {
|
||||
if (interaction.replied || interaction.deferred) {
|
||||
await interaction.editReply(payload);
|
||||
return interaction.fetchReply();
|
||||
}
|
||||
return interaction.reply({ ...payload, fetchReply: true });
|
||||
}
|
||||
|
||||
// Refresh via composants: on édite directement le message
|
||||
await safeDeferUpdate(interaction);
|
||||
return interaction.message.edit(payload);
|
||||
}
|
||||
|
||||
async function renderDetailedStats(interaction) {
|
||||
// IMPORTANT: defer immédiatement pour éviter 10062 si les appels réseau sont lents
|
||||
await safeDeferUpdate(interaction);
|
||||
|
||||
const payload = await buildStatsPayload();
|
||||
|
||||
if (interaction.isChatInputCommand?.()) {
|
||||
if (interaction.replied || interaction.deferred) {
|
||||
await interaction.editReply(payload);
|
||||
return interaction.fetchReply();
|
||||
}
|
||||
return interaction.reply({ ...payload, fetchReply: true });
|
||||
}
|
||||
|
||||
return interaction.message.edit(payload);
|
||||
}
|
||||
|
||||
// Point d'entrée: affiche le panel et attache un collector AU message
|
||||
async function showPanel(interaction) {
|
||||
const message = await renderPanel(interaction);
|
||||
|
||||
const collector = message.createMessageComponentCollector({
|
||||
time: 300000 // 5 minutes
|
||||
});
|
||||
|
||||
collector.on('collect', async i => {
|
||||
if (i.customId === 'back_to_panel') {
|
||||
await i.deferUpdate();
|
||||
await showPanel(i);
|
||||
if (!hasPanelRole(i.member)) {
|
||||
try {
|
||||
await i.reply({
|
||||
content: '❌ Vous n\'avez pas la permission d\'utiliser ce panneau.',
|
||||
flags: 64
|
||||
});
|
||||
} catch {
|
||||
// ignore
|
||||
}
|
||||
return;
|
||||
}
|
||||
|
||||
try {
|
||||
switch (i.customId) {
|
||||
case 'toggle_auto_reboot': {
|
||||
await safeDeferUpdate(i);
|
||||
const currentState = (await getConfig('auto_reboot_enabled')) === 'true';
|
||||
await updateConfig('auto_reboot_enabled', (!currentState).toString());
|
||||
await renderPanel(i);
|
||||
break;
|
||||
}
|
||||
case 'toggle_console_monitor': {
|
||||
await safeDeferUpdate(i);
|
||||
const currentState = (await getConfig('console_monitor_enabled')) === 'true';
|
||||
await updateConfig('console_monitor_enabled', (!currentState).toString());
|
||||
await renderPanel(i);
|
||||
break;
|
||||
}
|
||||
case 'change_ram_threshold': {
|
||||
await safeDeferUpdate(i);
|
||||
const newThreshold = i.values?.[0];
|
||||
if (newThreshold) {
|
||||
await updateConfig('ram_threshold_gb', newThreshold);
|
||||
}
|
||||
await renderPanel(i);
|
||||
break;
|
||||
}
|
||||
case 'refresh_panel': {
|
||||
await safeDeferUpdate(i);
|
||||
await renderPanel(i);
|
||||
break;
|
||||
}
|
||||
case 'view_stats': {
|
||||
await renderDetailedStats(i);
|
||||
break;
|
||||
}
|
||||
case 'back_to_panel': {
|
||||
await safeDeferUpdate(i);
|
||||
await renderPanel(i);
|
||||
break;
|
||||
}
|
||||
default: {
|
||||
await safeDeferUpdate(i);
|
||||
break;
|
||||
}
|
||||
}
|
||||
} catch (error) {
|
||||
console.error('Erreur lors de l\'interaction avec le panel:', error);
|
||||
if (isIgnorableDiscordRestError(error)) return;
|
||||
|
||||
// Ne pas crash le process si une réponse échoue
|
||||
try {
|
||||
await i.followUp?.({ content: '❌ Une erreur est survenue', flags: 64 });
|
||||
} catch {
|
||||
// ignore
|
||||
}
|
||||
}
|
||||
});
|
||||
|
||||
collector.on('end', () => {
|
||||
console.log('⏰ [Panel] Collector expiré');
|
||||
});
|
||||
}
|
||||
|
||||
Loading…
x
Reference in New Issue
Block a user