und der command buch.js
const { EmbedBuilder, ActionRowBuilder, ButtonBuilder, ButtonStyle, SlashCommandBuilder } = require('discord.js');
const fs = require('fs');
const path = require('path');
// Lade alle Embed-Nachrichten aus dem Ordner
const embeds = [];
const embedsPath = path.join('/home/discordbot/embeds');
const spritesPath = path.join('/home/discordbot/sprites');
const embedFiles = fs.readdirSync(embedsPath).filter(file => file.endsWith('.json'));
for (const file of embedFiles) {
const filePath = path.join(embedsPath, file);
const embedData = JSON.parse(fs.readFileSync(filePath, 'utf8'));
const embed = new EmbedBuilder(embedData);
// Füge Bildpfade als Anhänge hinzu
if (embedData.thumbnail && embedData.thumbnail.url.startsWith('attachment://')) {
const imagePath = path.join(spritesPath, embedData.thumbnail.url.replace('attachment://', ''));
embed.setThumbnail(`attachment://${path.basename(imagePath)}`);
embed.imagePath = imagePath;
}
embeds.push(embed);
}
const createButtonRow = (currentPage, totalPages) => new ActionRowBuilder()
.addComponents(
new ButtonBuilder()
.setCustomId('prev')
.setLabel('⬅️')
.setStyle(ButtonStyle.Primary)
.setDisabled(currentPage === 1),
new ButtonBuilder()
.setCustomId('page')
.setLabel(`Seite ${currentPage}/${totalPages}`)
.setStyle(ButtonStyle.Secondary)
.setDisabled(true),
new ButtonBuilder()
.setCustomId('next')
.setLabel('➡️')
.setStyle(ButtonStyle.Primary)
.setDisabled(currentPage === totalPages),
);
module.exports = {
data: new SlashCommandBuilder()
.setName('buch')
.setDescription('Zeigt ein Buch mit mehreren Seiten an.'),
async execute(interaction) {
try {
console.log('Interaktion gestartet:', interaction.id);
// Vermeide doppelte Verarbeitung
if (interaction.replied || interaction.deferred) {
console.log('Interaktion bereits verarbeitet:', interaction.id);
return;
}
// Versuche, die Antwort zu verzögern
await interaction.deferReply();
console.log('Interaktion verzögert:', interaction.id);
const initialEmbed = embeds[0];
await interaction.editReply({
embeds: [initialEmbed],
components: [createButtonRow(1, embeds.length)],
files: initialEmbed.imagePath ? [initialEmbed.imagePath] : []
});
console.log('Interaktion verarbeitet:', interaction.id);
} catch (error) {
console.error('Fehler beim Anzeigen des Buches:', error);
if (!interaction.replied && !interaction.deferred) {
try {
await interaction.reply({
content: 'Es gab ein Problem beim Anzeigen des Buches. Bitte versuche es später erneut.',
ephemeral: true
});
console.log('Fehlermeldung gesendet:', interaction.id);
} catch (replyError) {
console.error('Fehler beim Senden der Fehlermeldung:', replyError);
}
} else {
console.log('Interaktion bereits anerkannt:', interaction.id);
}
}
},
}