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,11 +97,15 @@ class PdfHandler {
* Gestion des boutons * Gestion des boutons
*/ */
async handleButton(interaction) { async handleButton(interaction) {
const parts = (interaction.customId || '').split(':'); // pdf-nav:{userId}:{page}:{total} const customId = interaction.customId || '';
if (parts.length !== 4) return;
const [, ownerId, pageStr, totalStr] = parts; // Navigation
const requestedPage = parseInt(pageStr, 10); if (customId.startsWith('pdf-nav:')) {
const totalPages = parseInt(totalStr, 10); const parts = customId.split(':'); // pdf-nav:{userId}:{page}:{total}
if (parts.length !== 4) return;
const [, ownerId, pageStr, totalStr] = parts;
const requestedPage = parseInt(pageStr, 10);
const totalPages = parseInt(totalStr, 10);
const session = this.sessions.get(interaction.message.id); const session = this.sessions.get(interaction.message.id);
if (!session) { if (!session) {
@@ -146,6 +150,40 @@ class PdfHandler {
logger.error('Erreur lors de la navigation PDF:', error); logger.error('Erreur lors de la navigation PDF:', error);
await interaction.editReply({ content: '❌ Erreur lors du rendu de la page.' }); 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 ▶️') .setLabel('Suivant ▶️')
.setStyle(ButtonStyle.Primary) .setStyle(ButtonStyle.Primary)
.setDisabled(nextDisabled), .setDisabled(nextDisabled),
new ButtonBuilder()
.setCustomId(`pdf-del:${ownerId}`)
.setLabel('🗑️ Supprimer')
.setStyle(ButtonStyle.Danger),
new ButtonBuilder() new ButtonBuilder()
.setLabel('Télécharger PDF') .setLabel('Télécharger PDF')
.setStyle(ButtonStyle.Link) .setStyle(ButtonStyle.Link)
@@ -305,6 +347,26 @@ class PdfHandler {
logger.error('Erreur lors de la sauvegarde des sessions PDF:', e); 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; module.exports = PdfHandler;