feat: add delete button to PDF viewer for session cleanup

This commit is contained in:
ɧσℓσ
2025-12-10 19:44:17 +01:00
parent d3457fcdbc
commit fa04ce36c5

View File

@@ -97,7 +97,11 @@ class PdfHandler {
* Gestion des boutons
*/
async handleButton(interaction) {
const parts = (interaction.customId || '').split(':'); // pdf-nav:{userId}:{page}:{total}
const customId = interaction.customId || '';
// Navigation
if (customId.startsWith('pdf-nav:')) {
const parts = customId.split(':'); // pdf-nav:{userId}:{page}:{total}
if (parts.length !== 4) return;
const [, ownerId, pageStr, totalStr] = parts;
const requestedPage = parseInt(pageStr, 10);
@@ -146,6 +150,40 @@ class PdfHandler {
logger.error('Erreur lors de la navigation PDF:', error);
await interaction.editReply({ content: '❌ Erreur lors du rendu de la page.' });
}
return;
}
// Suppression
if (customId.startsWith('pdf-del:')) {
const parts = customId.split(':'); // pdf-del:{ownerId}
if (parts.length !== 2) return;
const [, ownerId] = parts;
const session = this.sessions.get(interaction.message.id);
if (!session) {
await interaction.reply({
content: '❌ Session expirée ou introuvable.',
flags: require('discord.js').MessageFlags.Ephemeral
});
return;
}
if (interaction.user.id !== ownerId) {
await interaction.reply({
content: '❌ Seul lauteur de la commande peut supprimer.',
flags: require('discord.js').MessageFlags.Ephemeral
});
return;
}
await this.deleteSession(interaction.message.id, session);
await interaction.update({
content: '🗑️ Session PDF supprimée.',
embeds: [],
components: [],
files: []
});
}
}
/**
@@ -236,6 +274,10 @@ class PdfHandler {
.setLabel('Suivant ▶️')
.setStyle(ButtonStyle.Primary)
.setDisabled(nextDisabled),
new ButtonBuilder()
.setCustomId(`pdf-del:${ownerId}`)
.setLabel('🗑️ Supprimer')
.setStyle(ButtonStyle.Danger),
new ButtonBuilder()
.setLabel('Télécharger PDF')
.setStyle(ButtonStyle.Link)
@@ -305,6 +347,26 @@ class PdfHandler {
logger.error('Erreur lors de la sauvegarde des sessions PDF:', e);
}
}
/**
* Supprime une session et les fichiers associés
*/
async deleteSession(messageId, session) {
try {
if (session.imagePaths) {
session.imagePaths.forEach(p => {
if (p && fs.existsSync(p)) fs.unlinkSync(p);
});
}
if (session.pdfPath && fs.existsSync(session.pdfPath)) {
fs.unlinkSync(session.pdfPath);
}
this.sessions.delete(messageId);
this.saveSessions();
} catch (e) {
logger.error('Erreur lors de la suppression de la session PDF:', e);
}
}
}
module.exports = PdfHandler;