From b1cecc7baf4724699bb20efbd676d191fecca209 Mon Sep 17 00:00:00 2001 From: M_Viper Date: Tue, 22 Oct 2024 16:27:11 +0000 Subject: [PATCH] plex-bot.js aktualisiert --- plex-bot.js | 685 ++++++++++++++++++++++++---------------------------- 1 file changed, 316 insertions(+), 369 deletions(-) diff --git a/plex-bot.js b/plex-bot.js index bf66f1a..66ffdf8 100644 --- a/plex-bot.js +++ b/plex-bot.js @@ -989,104 +989,116 @@ loadSubscribers(); // Profilbefehl bot.onText(/\/profil/, (msg) => { - const chatId = msg.chat.id; + const chatId = msg.chat.id; - const userFilePath = path.join(__dirname, 'user.yml'); - const subscribersFilePath = path.join(__dirname, 'subscribers.json'); - const wishesFilePath = path.join(__dirname, 'wunsch', `wishes_${chatId}.json`); - const feedbackFilePath = path.join(__dirname, 'feedback.log'); + const userFilePath = path.join(__dirname, 'user.yml'); + const subscribersFilePath = path.join(__dirname, 'subscribers.json'); + const wishesFilePath = path.join(__dirname, 'wunsch', `wishes_${chatId}.json`); + const feedbackFilePath = path.join(__dirname, 'feedback.log'); - // Schritt 1: Benutzerinformationen aus user.yml lesen - fs.readFile(userFilePath, 'utf8', (err, userData) => { - if (err) { - console.error(`Fehler beim Lesen der Datei ${userFilePath}: ${err}`); - bot.sendMessage(chatId, 'Fehler beim Laden der Benutzerinformationen.') - .catch(error => console.error(`Fehler bei der Nachricht: ${error.message}`)); - return; - } - - const users = load(userData); - const user = users[chatId] || {}; // Benutzerdaten für den aktuellen Benutzer - - // Initialisiere Benutzerinformationen - const userName = escapeMarkdownV2(user.username || 'Unbekannt'); - const userId = chatId; - const firstUsedDate = escapeMarkdownV2(formatDate(user.firstUsed || new Date().toISOString())); // Aktuelles Datum verwenden, falls nicht vorhanden - - // Benutzerlevel initialisieren - const commandCount = user.commandCount || 0; // Anzahl der Befehle aus den Benutzerdaten - const wishesCount = user.wishesCount || 0; // Anzahl der Wünsche aus Benutzerdaten - const userLevel = getUserLevel(commandCount, wishesCount); // Benutzerlevel ermitteln - - // Lieblingsgenre aus user.yml ermitteln - const favoriteGenre = user.favoriteGenre || "Nicht festgelegt"; // Lieblingsgenre aus user.yml oder Standardwert - - // Admin und Dev IDs aus .env auslesen - const adminIds = [process.env.USER1_ID, process.env.USER2_ID]; - const devId = process.env.DEV_CHAT_ID; - - // Bestimme die Rolle basierend auf der ID - let roles = []; - if (adminIds.includes(String(chatId))) { - roles.push('Admin'); - } - if (String(chatId) === devId) { - roles.push('DEV'); - } - const role = roles.length > 0 ? roles.join(', ') : 'Benutzer'; - - fs.readFile(subscribersFilePath, 'utf8', (err, subsData) => { + // Schritt 1: Benutzerinformationen aus user.yml lesen + fs.readFile(userFilePath, 'utf8', (err, userData) => { if (err) { - console.error(`Fehler beim Lesen der Datei ${subscribersFilePath}: ${err}`); - bot.sendMessage(chatId, 'Fehler beim Laden des Newsletter-Status.') + console.error(`Fehler beim Lesen der Datei ${userFilePath}: ${err}`); + bot.sendMessage(chatId, 'Fehler beim Laden der Benutzerinformationen.') .catch(error => console.error(`Fehler bei der Nachricht: ${error.message}`)); return; } - - let subscribers; - try { - subscribers = JSON.parse(subsData); // JSON sicher parsen - } catch (parseErr) { - console.error('Fehler beim Parsen der subscribers.json:', parseErr); - bot.sendMessage(chatId, 'Fehler beim Verarbeiten der Abonnentendaten.') - .catch(error => console.error(`Fehler bei der Nachricht: ${error.message}`)); - return; + + const users = load(userData); + const user = users[chatId] || {}; // Benutzerdaten für den aktuellen Benutzer + + // Initialisiere Benutzerinformationen + const userName = escapeMarkdownV2(user.username || 'Unbekannt'); + const userId = chatId; + const firstUsedDate = escapeMarkdownV2(formatDate(user.firstUsed || new Date().toISOString())); // Aktuelles Datum verwenden, falls nicht vorhanden + + // Benutzerlevel initialisieren + const commandCount = user.commandCount || 0; // Anzahl der Befehle aus den Benutzerdaten + const wishesCount = user.wishesCount || 0; // Anzahl der Wünsche aus Benutzerdaten + const userLevel = getUserLevel(commandCount, wishesCount); // Benutzerlevel ermitteln + + // Admin und Dev IDs aus .env auslesen + const adminIds = [process.env.USER1_ID, process.env.USER2_ID]; + const devId = process.env.DEV_CHAT_ID; + + // Bestimme die Rolle basierend auf der ID + let roles = []; + if (adminIds.includes(String(chatId))) { + roles.push('Admin'); } - - // Status prüfen, ob der Benutzer abonniert ist - const isSubscribed = subscribers.some(subscriber => subscriber.chatId === chatId); - const newsletterStatus = isSubscribed ? 'Ja' : 'Nein'; + if (String(chatId) === devId) { + roles.push('DEV'); + } + const role = roles.length > 0 ? roles.join(', ') : 'Benutzer'; - // Schritt 3: Wünsche aus wishes_${chatId}.json lesen - fs.readFile(wishesFilePath, 'utf8', (err, wishesData) => { - let wishesCount = 0; // Initialisierung der Wünsche - let notificationStatus = user.notifications ? 'Ja' : 'Nein'; - - if (!err) { - try { - const userWishes = JSON.parse(wishesData); - wishesCount = userWishes.length; - } catch (parseErr) { - console.error('Fehler beim Parsen der wishes-Datei:', parseErr); - } + fs.readFile(subscribersFilePath, 'utf8', (err, subsData) => { + if (err) { + console.error(`Fehler beim Lesen der Datei ${subscribersFilePath}: ${err}`); + bot.sendMessage(chatId, 'Fehler beim Laden des Newsletter-Status.') + .catch(error => console.error(`Fehler bei der Nachricht: ${error.message}`)); + return; } - // Schritt 4: Anzahl der Feedbacks zählen - fs.stat(feedbackFilePath, (err) => { - let feedbackCount = 0; // Standardwert für Feedbacks + let subscribers; + try { + subscribers = JSON.parse(subsData); // JSON sicher parsen + } catch (parseErr) { + console.error('Fehler beim Parsen der subscribers.json:', parseErr); + bot.sendMessage(chatId, 'Fehler beim Verarbeiten der Abonnentendaten.') + .catch(error => console.error(`Fehler bei der Nachricht: ${error.message}`)); + return; + } - if (!err) { // Datei existiert - fs.readFile(feedbackFilePath, 'utf8', (err, feedbackData) => { - if (!err) { - const feedbackLines = feedbackData.split('\n'); - feedbackCount = feedbackLines.filter(line => line.includes(`chatId ${chatId}`)).length; // Zähle nur die Feedbacks des aktuellen Benutzers - } + // Status prüfen, ob der Benutzer abonniert ist + const isSubscribed = subscribers.some(subscriber => subscriber.chatId === chatId); + const newsletterStatus = isSubscribed ? 'Ja' : 'Nein'; - // Benutzerlevel aktualisieren basierend auf den aktuellen Wünschen - const updatedUserLevel = getUserLevel(commandCount, wishesCount); + // Schritt 3: Wünsche aus wishes_${chatId}.json lesen + fs.readFile(wishesFilePath, 'utf8', (err, wishesData) => { + let wishesCount = 0; // Initialisierung der Wünsche + let notificationStatus = user.notifications ? 'Ja' : 'Nein'; - // Schritt 5: Nachricht formatieren und senden - const profileMessage = ` + if (!err) { + try { + const userWishes = JSON.parse(wishesData); + wishesCount = userWishes.length; + } catch (parseErr) { + console.error('Fehler beim Parsen der wishes-Datei:', parseErr); + } + } + + // Schritt 4: Anzahl der Feedbacks zählen + fs.stat(feedbackFilePath, (err) => { + let feedbackCount = 0; // Standardwert für Feedbacks + + if (!err) { // Datei existiert + fs.readFile(feedbackFilePath, 'utf8', (err, feedbackData) => { + if (!err) { + const feedbackLines = feedbackData.split('\n'); + feedbackCount = feedbackLines.filter(line => line.includes(`chatId ${chatId}`)).length; // Zähle nur die Feedbacks des aktuellen Benutzers + } + + // Benutzerlevel aktualisieren basierend auf den aktuellen Wünschen + const updatedUserLevel = getUserLevel(commandCount, wishesCount); + + // Schritt 5: Nachricht formatieren und senden + const favoriteGenres = user.favoriteGenres && user.favoriteGenres.length > 0 + ? user.favoriteGenres.join(', ') // Genres als kommagetrennte Liste + : 'Nicht festgelegt'; // Standardwert, wenn keine Genres ausgewählt sind + + // Nachtmodus-Anzeige + let nightModeText; + if (user.nightModes && user.nightModes.length > 0) { + const nightMode = user.nightModes[0]; // Nimm den ersten Nachtmodus + const startTime = nightMode.startTime; + const endTime = nightMode.endTime; + nightModeText = `🌙 Nachtmodus: ${startTime} \\- ${endTime}`; // Escape des Minuszeichens + } else { + nightModeText = '🌙 Nachtmodus: Nicht aktiv'; + } + + const profileMessage = ` 📝 *Profil Informationen:*\n\n 👤 *Name:* @${userName}\n 🔑 *ID:* ${userId}\n @@ -1097,9 +1109,45 @@ bot.onText(/\/profil/, (msg) => { 📋 *Anzahl der Wünsche:* ${wishesCount}\n 📬 *Anzahl der Feedbacks:* ${feedbackCount}\n 🔔 *Benachrichtigung:* ${notificationStatus}\n +${nightModeText}\n +🎭 *Lieblingsgenre:* ${favoriteGenres}\n +`.trim(); // Whitespace entfernen + + // Sende Profilinformationen und zeige Button an + bot.sendMessage(chatId, profileMessage, { + parse_mode: 'MarkdownV2', + reply_markup: { + inline_keyboard: [ + [{ text: 'Profil Bearbeiten', callback_data: 'edit_profile' }] + ] + } + }).catch(error => console.error(`Fehler bei der Nachricht: ${error.message}`)); + }); + } else { + // Datei existiert nicht, einfach die Nachricht senden + const favoriteGenres = user.favoriteGenres && user.favoriteGenres.length > 0 + ? user.favoriteGenres.join(', ') // Genres als kommagetrennte Liste + : 'Nicht festgelegt'; // Standardwert, wenn keine Genres ausgewählt sind + + const nightModeText = user.nightModes && user.nightModes.length > 0 + ? `🌙 Nachtmodus: ${user.nightModes[0].startTime} \\- ${user.nightModes[0].endTime}` + : '🌙 Nachtmodus: Nicht aktiv'; + + const profileMessage = ` +📝 *Profil Informationen:*\n\n +👤 *Name:* @${userName}\n +🔑 *ID:* ${userId}\n +👤 *Nutzerrolle:* ${role}\n +🌟 *Benutzerlevel:* ${updatedUserLevel}\n +📅 *Registrierung:* ${firstUsedDate}\n +📰 *Newsletter:* ${newsletterStatus}\n +📋 *Anzahl der Wünsche:* ${wishesCount}\n +📬 *Anzahl der Feedbacks:* 0\n +🔔 *Benachrichtigung:* ${notificationStatus}\n +${nightModeText}\n +🎭 *Lieblingsgenre:* ${favoriteGenres}\n `.trim(); // Whitespace entfernen - // Sende Profilinformationen und zeige Button an bot.sendMessage(chatId, profileMessage, { parse_mode: 'MarkdownV2', reply_markup: { @@ -1108,116 +1156,80 @@ bot.onText(/\/profil/, (msg) => { ] } }).catch(error => console.error(`Fehler bei der Nachricht: ${error.message}`)); - }); - } else { - // Datei existiert nicht, einfach die Nachricht senden - const profileMessage = ` -📝 *Profil Informationen:*\n\n -👤 *Name:* @${userName}\n -🔑 *ID:* ${userId}\n -👤 *Nutzerrolle:* ${role}\n -🌟 *Benutzerlevel:* ${userLevel}\n -📅 *Registrierung:* ${firstUsedDate}\n -📰 *Newsletter:* ${newsletterStatus}\n -📋 *Anzahl der Wünsche:* ${wishesCount}\n -📬 *Anzahl der Feedbacks:* 0\n -🔔 *Benachrichtigung:* ${notificationStatus}\n -`.trim(); // Whitespace entfernen - - bot.sendMessage(chatId, profileMessage, { - parse_mode: 'MarkdownV2', - reply_markup: { - inline_keyboard: [ - [{ text: 'Profil Bearbeiten', callback_data: 'edit_profile' }] - ] - } - }).catch(error => console.error(`Fehler bei der Nachricht: ${error.message}`)); - } + } + }); }); }); - }); - }); + }); }); - // Callback query handler for profile editing bot.on('callback_query', (callbackQuery) => { const action = callbackQuery.data; const chatId = callbackQuery.message.chat.id; if (action === 'edit_profile') { - // Zeige Bearbeitungsoptionen an, wenn der Benutzer "Profil Bearbeiten" drückt - bot.sendMessage(chatId, '🔍 Was möchten Sie tun? Wählen Sie eine der folgenden Optionen:', { - reply_markup: { - inline_keyboard: [ - [ - { text: 'Lieblingsgenre setzen', callback_data: 'set_favorite_genre' }, - { text: 'Profil zurücksetzen', callback_data: 'reset_profile' } - ], - [ - { text: 'Punkte löschen', callback_data: 'delete_points' }, - { text: 'Profil löschen', callback_data: 'delete_profile' } - ] - ] - } - }); - } else if (action === 'set_favorite_genre') { - bot.sendMessage(chatId, 'Bitte geben Sie Ihre Lieblingsgenres ein, getrennt durch Kommas. Verfügbare Genres sind: \n\nAction, Abenteuer, Anime, Dokumentation, Drama, Familie, Fantasy, Horror, Katastrophen, Kinderfilme, Komödie, Krimi, Mystery, Syfy, Thriller, Western.'); - - // Hier fangen wir die Nachricht des Benutzers ab - bot.once('message', (msg) => { - const newFavoriteGenre = msg.text; - - // Debugging: Logge das neue Lieblingsgenre - console.log(`Neues Lieblingsgenre: ${newFavoriteGenre} für Benutzer ${chatId}`); - - // Update the favorite genre in user.yml - fs.readFile(USER_YML_PATH, 'utf8', (err, userData) => { - if (err) { - console.error(`Fehler beim Lesen der Datei ${USER_YML_PATH}: ${err}`); - bot.sendMessage(chatId, 'Fehler beim Aktualisieren des Lieblingsgenres.') - .catch(error => console.error(`Fehler bei der Nachricht: ${error.message}`)); - return; - } - - const users = load(userData); - - // Überprüfen, ob der Benutzer bereits existiert - if (users[chatId]) { - // Setze das Lieblingsgenre - users[chatId].favoriteGenre = newFavoriteGenre; // Aktualisiere das Lieblingsgenre - } else { - // Benutzer initialisieren, falls nicht vorhanden - users[chatId] = { - userId: chatId, - username: msg.from.username, - firstUsed: new Date().toISOString(), - notifications: true, // Standardwert, falls nicht gesetzt - commandCount: 0, // Standardwert für Befehlsanzahl - userLevel: 'Neuling', // Standardbenutzerlevel - favoriteGenre: newFavoriteGenre // Setze das Lieblingsgenre - }; - } - - // Schreibe die aktualisierten Benutzerinformationen zurück in die Datei - fs.writeFile(USER_YML_PATH, dump(users), 'utf8', (err) => { - if (err) { - console.error(`Fehler beim Schreiben in die Datei ${USER_YML_PATH}: ${err}`); - bot.sendMessage(chatId, 'Fehler beim Aktualisieren des Lieblingsgenres.') - .catch(error => console.error(`Fehler bei der Nachricht: ${error.message}`)); - } else { - bot.sendMessage(chatId, `✅ Ihr Lieblingsgenre wurde auf "${newFavoriteGenre}" gesetzt.`) - .catch(error => console.error(`Fehler bei der Nachricht: ${error.message}`)); - } - }); - }); + // Zeige Bearbeitungsoptionen an, wenn der Benutzer "Profil Bearbeiten" drückt + bot.sendMessage(chatId, '🔍 Was möchten Sie tun? Wählen Sie eine der folgenden Optionen:', { + reply_markup: { + inline_keyboard: [ + [ + { text: 'Genre bearbeiten', callback_data: 'edit_genres' }, + { text: 'Punkte löschen', callback_data: 'delete_points' }, + { text: 'Profil zurücksetzen', callback_data: 'reset_profile' } + ], + [ + { text: 'Profil löschen', callback_data: 'delete_profile' } + ] + ] + } }); - } else if (action === 'delete_points') { - // Punkte auf 0 setzen + } else if (action === 'edit_genres') { + // Genre-Auswahl anzeigen + bot.sendMessage(chatId, '🎬 Wählen Sie Ihre Lieblingsgenres aus:', { + reply_markup: { + inline_keyboard: [ + [ + { text: 'Action', callback_data: 'select_genre_Action' }, + { text: 'Drama', callback_data: 'select_genre_Drama' }, + { text: 'Komödie', callback_data: 'select_genre_Comedy' } + ], + [ + { text: 'Syfy', callback_data: 'select_genre_Syfy' }, + { text: 'Romantik', callback_data: 'select_genre_Romance' }, + { text: 'Thriller', callback_data: 'select_genre_Thriller' } + ], + [ + { text: 'Fantasy', callback_data: 'select_genre_Fantasy' }, + { text: 'Family', callback_data: 'select_genre_Family' }, + { text: 'Zeichentrick', callback_data: 'select_genre_Animation' } + ], + [ + { text: 'Anime', callback_data: 'select_genre_Anime' }, + { text: 'Horror', callback_data: 'select_genre_Horror' }, + { text: 'Katastrophen', callback_data: 'select_genre_Katastrophen' } + ], + [ + { text: 'Krimi', callback_data: 'select_genre_Krimi' }, + { text: 'Mystery', callback_data: 'select_genre_Mystery' }, + { text: 'Western', callback_data: 'select_genre_Western' } + ], + [ + { text: 'Abenteuer', callback_data: 'select_genre_Abenteuer' }, + { text: 'Dokumentation', callback_data: 'select_genre_Dokumentation' } + ] + ] + } + }); + } else if (action.startsWith('select_genre_')) { + // Logik zum Hinzufügen/Entfernen des Genres vom Benutzerprofil + const selectedGenre = action.split('_')[2]; + + // Hier wird die Logik zum Speichern des Genres ins Profil hinzugefügt fs.readFile(USER_YML_PATH, 'utf8', (err, userData) => { if (err) { console.error(`Fehler beim Lesen der Datei ${USER_YML_PATH}: ${err}`); - bot.sendMessage(chatId, 'Fehler beim Zurücksetzen der Punkte.') + bot.sendMessage(chatId, 'Fehler beim Aktualisieren des Profils.') .catch(error => console.error(`Fehler bei der Nachricht: ${error.message}`)); return; } @@ -1226,16 +1238,25 @@ bot.on('callback_query', (callbackQuery) => { // Überprüfen, ob der Benutzer existiert if (users[chatId]) { - users[chatId].commandCount = 0; // Setze die Punkte auf 0 + // Genre zur Liste der Lieblingsgenres hinzufügen oder entfernen + if (!users[chatId].favoriteGenres) { + users[chatId].favoriteGenres = []; + } + + const genreIndex = users[chatId].favoriteGenres.indexOf(selectedGenre); + if (genreIndex === -1) { + users[chatId].favoriteGenres.push(selectedGenre); + bot.sendMessage(chatId, `✅ ${selectedGenre} wurde zu Ihren Lieblingsgenres hinzugefügt.`); + } else { + users[chatId].favoriteGenres.splice(genreIndex, 1); + bot.sendMessage(chatId, `❌ ${selectedGenre} wurde aus Ihren Lieblingsgenres entfernt.`); + } // Schreibe die aktualisierten Benutzerinformationen zurück in die Datei fs.writeFile(USER_YML_PATH, dump(users), 'utf8', (err) => { if (err) { console.error(`Fehler beim Schreiben in die Datei ${USER_YML_PATH}: ${err}`); - bot.sendMessage(chatId, 'Fehler beim Zurücksetzen der Punkte.') - .catch(error => console.error(`Fehler bei der Nachricht: ${error.message}`)); - } else { - bot.sendMessage(chatId, '✅ Ihre Punkte wurden erfolgreich auf 0 gesetzt.') + bot.sendMessage(chatId, 'Fehler beim Aktualisieren des Profils.') .catch(error => console.error(`Fehler bei der Nachricht: ${error.message}`)); } }); @@ -1286,121 +1307,88 @@ bot.on('callback_query', (callbackQuery) => { } }); } else if (action === 'delete_profile') { - // Profil löschen - fs.readFile(USER_YML_PATH, 'utf8', (err, userData) => { - if (err) { - console.error(`Fehler beim Lesen der Datei ${USER_YML_PATH}: ${err}`); - bot.sendMessage(chatId, 'Fehler beim Löschen des Profils.') - .catch(error => console.error(`Fehler bei der Nachricht: ${error.message}`)); - return; - } + // Profil löschen + fs.readFile(USER_YML_PATH, 'utf8', (err, userData) => { + if (err) { + console.error(`Fehler beim Lesen der Datei ${USER_YML_PATH}: ${err}`); + bot.sendMessage(chatId, 'Fehler beim Löschen des Profils.') + .catch(error => console.error(`Fehler bei der Nachricht: ${error.message}`)); + return; + } - const users = load(userData); + const users = load(userData); - // Überprüfen, ob der Benutzer existiert - if (users[chatId]) { - // Benutzer aus user.yml entfernen - delete users[chatId]; + // Überprüfen, ob der Benutzer existiert + if (users[chatId]) { + // Benutzer aus user.yml entfernen + delete users[chatId]; - // Schreibe die aktualisierten Benutzerinformationen zurück in die Datei - fs.writeFile(USER_YML_PATH, dump(users), 'utf8', (err) => { - if (err) { - console.error(`Fehler beim Schreiben in die Datei ${USER_YML_PATH}: ${err}`); - bot.sendMessage(chatId, 'Fehler beim Löschen des Profils.') - .catch(error => console.error(`Fehler bei der Nachricht: ${error.message}`)); - return; - } + // Schreibe die aktualisierten Benutzerinformationen zurück in die Datei + fs.writeFile(USER_YML_PATH, dump(users), 'utf8', (err) => { + if (err) { + console.error(`Fehler beim Schreiben in die Datei ${USER_YML_PATH}: ${err}`); + bot.sendMessage(chatId, 'Fehler beim Löschen des Profils.') + .catch(error => console.error(`Fehler bei der Nachricht: ${error.message}`)); + return; + } - // Lösche zugehörige Einträge in w_offen.json - const wOffenFilePath = path.join(__dirname, 'w_offen.json'); // Pfad zur w_offen.json-Datei - fs.readFile(wOffenFilePath, 'utf8', (err, wOffenData) => { - if (err) { - console.error(`Fehler beim Lesen der Datei ${wOffenFilePath}: ${err}`); - bot.sendMessage(chatId, 'Fehler beim Löschen des Profils.') - .catch(error => console.error(`Fehler bei der Nachricht: ${error.message}`)); - return; - } + // Lösche zugehörige Einträge in w_offen.json + const wOffenFilePath = path.join(__dirname, 'w_offen.json'); // Pfad zur w_offen.json-Datei + fs.readFile(wOffenFilePath, 'utf8', (err, wOffenData) => { + if (err) { + console.error(`Fehler beim Lesen der Datei ${wOffenFilePath}: ${err}`); + bot.sendMessage(chatId, 'Fehler beim Löschen des Profils.') + .catch(error => console.error(`Fehler bei der Nachricht: ${error.message}`)); + return; + } - let wOffen; - try { - wOffen = JSON.parse(wOffenData); // Sicheres Parsen der JSON-Daten - } catch (parseErr) { - console.error(`Fehler beim Parsen der w_offen.json: ${parseErr}`); - bot.sendMessage(chatId, 'Fehler beim Löschen des Profils.') - .catch(error => console.error(`Fehler bei der Nachricht: ${error.message}`)); - return; - } + let wOffen; + try { + wOffen = JSON.parse(wOffenData); // Sicheres Parsen der JSON-Daten + } catch (parseErr) { + console.error(`Fehler beim Parsen der w_offen.json: ${parseErr}`); + bot.sendMessage(chatId, 'Fehler beim Löschen des Profils.') + .catch(error => console.error(`Fehler bei der Nachricht: ${error.message}`)); + return; + } - // Entferne alle Wünsche des Benutzers - wOffen = wOffen.filter(wish => wish.userId !== chatId); + // Entferne alle Wünsche des Benutzers + wOffen = wOffen.filter(wish => wish.userId !== chatId); - // Schreibe die aktualisierten Wünsche zurück in die w_offen.json - fs.writeFile(wOffenFilePath, JSON.stringify(wOffen, null, 2), 'utf8', (err) => { - if (err) { - console.error(`Fehler beim Schreiben in die Datei ${wOffenFilePath}: ${err}`); - bot.sendMessage(chatId, 'Fehler beim Löschen des Profils.') - .catch(error => console.error(`Fehler bei der Nachricht: ${error.message}`)); - return; - } + // Schreibe die aktualisierten Wünsche zurück in die w_offen.json + fs.writeFile(wOffenFilePath, JSON.stringify(wOffen, null, 2), 'utf8', (err) => { + if (err) { + console.error(`Fehler beim Schreiben in die Datei ${wOffenFilePath}: ${err}`); + bot.sendMessage(chatId, 'Fehler beim Löschen des Profils.') + .catch(error => console.error(`Fehler bei der Nachricht: ${error.message}`)); + return; + } - // Lösche die Datei im Wunsch-Ordner - const wunschFolderPath = path.join(__dirname, 'wunsch'); - const userFilePath = path.join(wunschFolderPath, `wishes_${chatId}.json`); // Stelle sicher, dass der Dateiname korrekt ist - fs.unlink(userFilePath, (err) => { - if (err && err.code !== 'ENOENT') { // ENOENT bedeutet, die Datei existiert nicht - console.error(`Fehler beim Löschen der Datei ${userFilePath}: ${err}`); - bot.sendMessage(chatId, 'Fehler beim Löschen des Profils.') - .catch(error => console.error(`Fehler bei der Nachricht: ${error.message}`)); - return; - } - - // Lösche den Benutzer aus subscribers.json - const subscribersFilePath = path.join(__dirname, 'subscribers.json'); - fs.readFile(subscribersFilePath, 'utf8', (err, subscribersData) => { - if (err) { - console.error(`Fehler beim Lesen der Datei ${subscribersFilePath}: ${err}`); - bot.sendMessage(chatId, 'Fehler beim Löschen des Profils.') - .catch(error => console.error(`Fehler bei der Nachricht: ${error.message}`)); - return; - } - - let subscribers; - try { - subscribers = JSON.parse(subscribersData); - } catch (parseErr) { - console.error(`Fehler beim Parsen der subscribers.json: ${parseErr}`); - bot.sendMessage(chatId, 'Fehler beim Löschen des Profils.') - .catch(error => console.error(`Fehler bei der Nachricht: ${error.message}`)); - return; - } - - // Entferne den Benutzer aus der Liste - const updatedSubscribers = subscribers.filter(subscriber => subscriber.chatId !== chatId); - - // Schreibe die aktualisierten Abonnenten zurück in die Datei - fs.writeFile(subscribersFilePath, JSON.stringify(updatedSubscribers, null, 2), 'utf8', (err) => { - if (err) { - console.error(`Fehler beim Schreiben in die Datei ${subscribersFilePath}: ${err}`); - bot.sendMessage(chatId, 'Fehler beim Löschen des Profils.') - .catch(error => console.error(`Fehler bei der Nachricht: ${error.message}`)); - } else { - bot.sendMessage(chatId, '✅ Ihr Profil wurde erfolgreich gelöscht.') - .catch(error => console.error(`Fehler bei der Nachricht: ${error.message}`)); - } - }); - }); - }); - }); - }); - }); - } else { - bot.sendMessage(chatId, '❌ Benutzer nicht gefunden.') - .catch(error => console.error(`Fehler bei der Nachricht: ${error.message}`)); - } - }); + // Lösche die Datei im Wunsch-Ordner + const wunschFolderPath = path.join(__dirname, 'wunsch'); + const userFilePath = path.join(wunschFolderPath, `wishes_${chatId}.json`); // Stelle sicher, dass der Dateiname korrekt ist + fs.unlink(userFilePath, (err) => { + if (err) { + console.error(`Fehler beim Löschen der Datei ${userFilePath}: ${err}`); + bot.sendMessage(chatId, 'Fehler beim Löschen des Profils.') + .catch(error => console.error(`Fehler bei der Nachricht: ${error.message}`)); + } else { + bot.sendMessage(chatId, '✅ Ihr Profil wurde erfolgreich gelöscht.') + .catch(error => console.error(`Fehler bei der Nachricht: ${error.message}`)); + } + }); + }); + }); + }); + } else { + bot.sendMessage(chatId, '❌ Benutzer nicht gefunden.') + .catch(error => console.error(`Fehler bei der Nachricht: ${error.message}`)); + } + }); } }); + const { load, dump } = require('js-yaml'); // Stelle sicher, dass js-yaml installiert ist // Funktion zum Escapen von Markdown V2-Sonderzeichen @@ -1496,24 +1484,6 @@ bot.on('message', (msg) => { }); }); - - - - - - - - - - - - - - - - - - // Befehl zum Sichern der Dateien bot.onText(/\/backup/, (msg) => { const chatId = msg.chat.id; @@ -1884,29 +1854,15 @@ bot.onText(/\/night/, (msg) => { // Logik für den Befehl... }); -bot.onText(/\/n_off/, (msg) => { - logCommand('/n_off', msg.from.username); - // Logik für den Befehl... -}); - bot.onText(/\/passwd/, (msg) => { logCommand('/passwd', msg.from.username); // Logik für den Befehl... }); - - - - - - - - - - - - - +bot.onText(/\/key/, (msg) => { + logCommand('/key', msg.from.username); + // Logik für den Befehl... +}); const userId1 = Number(process.env.USER1_ID); // USER1_ID aus .env laden und in Zahl umwandeln @@ -4449,6 +4405,7 @@ function createHelpMessage() { `🎬 /trailer - Fordere einen Trailer für einen bestimmten Film an. \n\n` + `🔝 /empfehlung - Film Empfehlung des Tages.\n\n` + `📰 /newsletter - zeigt die Newsletter Funktion an\n\n` + + `🌙 /night - Schaltet den Nachtmodus ein oder aus.\n\n` + // Hinzugefügter Befehl `❓ /help - Zeigt diese Hilfennachricht an.\n\n`; } @@ -4464,6 +4421,7 @@ function createMoreHelpMessage() { `🤖 /bot - Bot-Informationen.\n\n`; } + // Funktion zum Erstellen der Admin-Hilfennachricht function createAdminHelpMessage() { return `*👨‍💻 Admin Befehle* \n\n` + @@ -5078,12 +5036,20 @@ app.get('/api/feedback', (req, res) => { }); }); + + + + + + + + // Endpunkt /api/users, um die user.yml-Datei zu lesen und die Daten im JSON-Format zurückzugeben app.get('/api/users', (req, res) => { try { // Pfad zur user.yml-Datei const filePath = path.join(__dirname, 'user.yml'); - + // YAML-Datei laden const file = fs.readFileSync(filePath, 'utf8'); @@ -5091,16 +5057,28 @@ app.get('/api/users', (req, res) => { const data = yaml.parse(file); // 'parse' Funktion verwenden // Benutzerobjekte in ein Array umwandeln - const usersArray = Object.values(data).map(user => ({ - userId: user.userId, - username: user.username, - notifications: user.notifications, - firstUsed: user.firstUsed, - favoriteGenre: user.favoriteGenre, - commandCount: user.commandCount || 0, // Default auf 0, wenn nicht vorhanden - userLevel: user.userLevel || 'Nicht festgelegt', // Default-Wert - nightMode: user.nightMode || {} // Optionales Feld - })); + const usersArray = Object.values(data).map(user => { + // Überprüfen, ob nightModes vorhanden sind und Werte abrufen + const nightMode = user.nightModes && user.nightModes.length > 0 ? user.nightModes[0] : null; + + // Wenn kein Nachtmodus vorhanden ist, dann "Deaktiviert" anzeigen + const nightModeDisplay = nightMode + ? `${nightMode.startTime} - ${nightMode.endTime}` + : 'Deaktiviert'; // Hier den gewünschten Text verwenden + + return { + userId: user.userId, + username: user.username, + notifications: user.notifications, + firstUsed: user.firstUsed, + favoriteGenres: user.favoriteGenres && user.favoriteGenres.length > 0 + ? user.favoriteGenres.join(', ') // Falls favoriteGenres existiert, kommagetrenntes Format + : (user.favoriteGenre || 'Nicht festgelegt'), // Fallback auf favoriteGenre oder Standardwert + commandCount: user.commandCount || 0, // Standard auf 0, wenn nicht vorhanden + userLevel: user.userLevel || 'Nicht festgelegt', // Standard-Wert + nightMode: nightModeDisplay // Verwendung der neuen Logik für die Nachtmodus-Anzeige + }; + }); // JSON-Daten zurückgeben res.json(usersArray); @@ -5110,37 +5088,6 @@ app.get('/api/users', (req, res) => { } }); -// Endpunkt zum Löschen eines Benutzers -app.delete('/api/users/:userId', (req, res) => { - const userId = req.params.userId; - - try { - // Pfad zur user.yml-Datei - const filePath = path.join(__dirname, 'user.yml'); - - // YAML-Datei laden - const file = fs.readFileSync(filePath, 'utf8'); - const data = yaml.parse(file); // YAML in ein JSON-Objekt konvertieren - - // Überprüfe, ob der Benutzer existiert - if (!data[userId]) { - return res.status(404).json({ message: 'Benutzer nicht gefunden' }); - } - - // Benutzer aus den Daten entfernen - delete data[userId]; - - // Aktualisiere die YAML-Datei mit den neuen Daten - fs.writeFileSync(filePath, yaml.stringify(data), 'utf8'); - - res.json({ message: 'Benutzer erfolgreich gelöscht' }); - } catch (err) { - console.error('Fehler beim Löschen des Benutzers:', err); - res.status(500).json({ message: 'Fehler beim Löschen des Benutzers' }); - } -}); - - let lastRestart = new Date(); // Speichere den aktuellen Zeitpunkt als letzten Neustart // Funktion zum Formatieren des Datums