feat: add delete button to PDF viewer for session cleanup
This commit is contained in:
@@ -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 l’auteur 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;
|
||||
|
||||
Reference in New Issue
Block a user