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