From 9285725d1ec789aae6f864b5794cb6f94d00b80f Mon Sep 17 00:00:00 2001 From: M_Viper Date: Sat, 7 Sep 2024 17:20:16 +0000 Subject: [PATCH] bot.js aktualisiert --- bot.js | 193 +++++++++++++++++++++++++++++++++++++++++++++------------ 1 file changed, 155 insertions(+), 38 deletions(-) diff --git a/bot.js b/bot.js index 0732b1c..ffba474 100644 --- a/bot.js +++ b/bot.js @@ -271,6 +271,120 @@ function logError(error) { fs.appendFileSync(ERROR_LOG_PATH, errorMessage); } +const faqFilePath = path.join(__dirname, 'faq.json'); // Pfad zur faq.json im Hauptverzeichnis +const authorizedUsers = [USER1_ID, USER2_ID]; + +// Funktion zum Laden der FAQs +function loadFaqs() { + if (!fs.existsSync(faqFilePath)) { + fs.writeFileSync(faqFilePath, JSON.stringify([])); // Leere Datei erstellen, wenn sie nicht existiert + } + const faqs = JSON.parse(fs.readFileSync(faqFilePath)); + return faqs; +} + +// Funktion zum Speichern der FAQs +function saveFaqs(faqs) { + fs.writeFileSync(faqFilePath, JSON.stringify(faqs, null, 2)); +} + +// /faq Befehl: Zeigt alle FAQs an +bot.onText(/\/faq/, (msg) => { + const chatId = msg.chat.id; + const faqs = loadFaqs(); + + if (faqs.length === 0) { + bot.sendMessage(chatId, 'Es gibt derzeit keine FAQs.'); + } else { + let response = 'Häufig gestellte Fragen:\n\n'; + faqs.forEach((faq, index) => { + response += `${index + 1}. *${faq.question}*\n${faq.answer}\n\n`; + }); + bot.sendMessage(chatId, response, { parse_mode: 'Markdown' }); + } +}); + +// /add_faq Befehl: Interaktives Hinzufügen einer neuen FAQ (nur für autorisierte Benutzer) +bot.onText(/\/add_faq/, (msg) => { + const chatId = msg.chat.id; + const userId = msg.from.id.toString(); + + if (!authorizedUsers.includes(userId)) { + bot.sendMessage(chatId, '❌ Du bist nicht autorisiert, diesen Befehl auszuführen.'); + return; + } + + // Frage nach der FAQ-Frage + bot.sendMessage(chatId, 'Bitte gib die FAQ-Frage ein:', { + reply_markup: { force_reply: true } + }).then(sentMessage => { + bot.onReplyToMessage(sentMessage.chat.id, sentMessage.message_id, (reply) => { + const question = reply.text; + + // Frage nach der FAQ-Antwort + bot.sendMessage(chatId, 'Bitte gib die Antwort auf die Frage ein:', { + reply_markup: { force_reply: true } + }).then(sentMessage => { + bot.onReplyToMessage(sentMessage.chat.id, sentMessage.message_id, (reply) => { + const answer = reply.text; + + // FAQ speichern + const faqs = loadFaqs(); + faqs.push({ question, answer }); + saveFaqs(faqs); + + bot.sendMessage(chatId, '✅ FAQ erfolgreich hinzugefügt.'); + }); + }); + }); + }); +}); + +// /del_faq Befehl: Interaktives Entfernen einer FAQ (nur für autorisierte Benutzer) +bot.onText(/\/del_faq/, (msg) => { + const chatId = msg.chat.id; + const userId = msg.from.id.toString(); + + if (!authorizedUsers.includes(userId)) { + bot.sendMessage(chatId, '❌ Du bist nicht autorisiert, diesen Befehl auszuführen.'); + return; + } + + const faqs = loadFaqs(); + + if (faqs.length === 0) { + bot.sendMessage(chatId, 'Es gibt derzeit keine FAQs zum Löschen.'); + return; + } + + // Liste der FAQs anzeigen und um Eingabe der Nummer bitten + let response = 'Welche FAQ möchtest du löschen?\n\n'; + faqs.forEach((faq, index) => { + response += `${index + 1}. *${faq.question}*\n${faq.answer}\n\n`; + }); + + bot.sendMessage(chatId, response, { + parse_mode: 'Markdown', + reply_markup: { force_reply: true } + }).then(sentMessage => { + bot.onReplyToMessage(sentMessage.chat.id, sentMessage.message_id, (reply) => { + const faqIndex = parseInt(reply.text, 10) - 1; + + if (isNaN(faqIndex) || faqIndex < 0 || faqIndex >= faqs.length) { + bot.sendMessage(chatId, '❌ Ungültige Auswahl.'); + return; + } + + // FAQ löschen + faqs.splice(faqIndex, 1); + saveFaqs(faqs); + + bot.sendMessage(chatId, '✅ FAQ erfolgreich gelöscht.'); + }); + }); +}); + + // Handler für den /admin-Befehl bot.onText(/\/admin/, (msg) => { const chatId = msg.chat.id; @@ -531,7 +645,7 @@ bot.on('message', async (msg) => { console.log('Sende Nachricht an Entwickler-Chat-ID:', DEV_CHAT_ID); // Debugging-Ausgabe await bot.sendMessage(DEV_CHAT_ID, devMessage, { parse_mode: 'Markdown' }); console.log('Nachricht erfolgreich gesendet.'); - bot.sendMessage(chatId, '✅ Ihre Nachricht wurde erfolgreich gesendet! Vielen Dank für Ihr Feedback.'); + bot.sendMessage(chatId, '✅ Ihre Nachricht wurde erfolgreich gesendet! Vielen Dank.'); } catch (error) { console.error('Fehler beim Senden der Nachricht:', error); bot.sendMessage(chatId, '🚫 Etwas ist schiefgelaufen. Ihre Nachricht konnte nicht gesendet werden.'); @@ -1326,15 +1440,6 @@ function getTypeKeyboard() { }; } - - - - - - - - - // Funktion zum Senden des Wunsches an zwei Benutzer async function sendWish(wish, type, chatId) { const message = `✨ **Achtung!** ✨\n\nEin neuer Wunsch ist eingegangen:\n\n🔹 **Typ:** ${type}\n\n🔹 **Titel:**\n${wish}`; @@ -1978,10 +2083,10 @@ bot.onText(/\/f_log/, (msg) => { } }); -// Funktion zum Erstellen der Hilfennachricht -function createHelpMessage(chatId) { - // Basis-Hilfe-Nachricht für alle Benutzer - let helpMessage = `📜 *Hier ist eine Liste der verfügbaren Befehle:*\n\n` + + +// Funktion zum Erstellen der allgemeinen Hilfennachricht +function createHelpMessage() { + return `📜 *Hier ist eine Liste der verfügbaren Befehle:*\n\n` + `👋 /start - Registriert deinen Zugang.\n\n` + `🔔 /notification\\_on - Aktiviert Benachrichtigungen für neue Filme.\n\n` + `🔕 /notification\\_off - Deaktiviert Benachrichtigungen für neue Filme.\n\n` + @@ -1995,44 +2100,56 @@ function createHelpMessage(chatId) { `💭 /wunsch - Nutze diesen Befehl, um einen Filmwunsch zu äußern.\n\n` + `🔝 /empfehlung - Film Empfehlung des Tages.\n\n` + `💬 /feedback - Gib Feedback zum Bot.\n\n` + - `🔧 /dev - Funktionswunsch oder Bug melden. \n\n` + - `❓ /help - Zeigt diese Hilfennachricht an. \n\n\n`; + `🔧 /dev - Funktionswunsch oder Bug melden.\n\n` + + `❓ /faq - Zeigt eine Liste der häufig gestellten Fragen an.\n\n` + + `❓ /help - Zeigt diese Hilfennachricht an.\n\n`; +} - const additionalCommands = `*👨‍💻 Admin Befehle* \n\n` + +// Funktion zum Erstellen der Admin-Hilfennachricht +function createAdminHelpMessage() { + return `*👨‍💻 Admin Befehle* \n\n` + `🤖 /bot - Zeigt Informationen über den Bot.\n\n` + `🛠️ /admin - sendet eine Nachricht an alle Nutzer.\n\n` + `👤 /user - Zeigt Benutzerinformationen an.\n\n` + `📝 /logs - Zeigt die letzten Fehlermeldungen an.\n\n` + `🗑️ /log\\_delete - Löscht Logs.\n\n` + - `📝 /f\\_log - Sendet die Feedback als .txt-Datei.`; - - - // Debug-Ausgaben zur Überprüfung - console.log(`Received chatId: ${chatId}`); - console.log(`Configured USER1_ID: ${USER1_ID}`); - console.log(`Configured USER2_ID: ${USER2_ID}`); - - // Nur Benutzer in der .env-Datei erhalten die zusätzlichen Befehle - if (chatId.toString() === USER1_ID || chatId.toString() === USER2_ID) { - helpMessage += additionalCommands; - } - - return helpMessage; + `📝 /f\\_log - Sendet die Feedback als .txt-Datei.\n\n` + + `❓ /add\\_faq - Fügt eine neue Frage zur FAQ hinzu.\n\n` + + `🗑️ /del\\_faq - Löscht eine FAQ.\n\n`; } // /help-Befehl verarbeiten bot.onText(/\/help/, (msg) => { - const chatId = msg.chat.id; + const chatId = msg.chat.id; + const helpMessage = createHelpMessage(); - const helpMessage = createHelpMessage(chatId); + bot.sendMessage(chatId, helpMessage, { parse_mode: 'Markdown' }).catch(error => { + console.log(`Error sending help message to chatId ${chatId}: ${error.message}`); + }); - bot.sendMessage(chatId, helpMessage, { parse_mode: 'Markdown' }).catch(error => { - logError(`Error sending help message to chatId ${chatId}: ${error.message}`); - }); - - logMessage(`Sent help message to chatId ${chatId}`); + console.log(`Sent help message to chatId ${chatId}`); }); +// /admin_help-Befehl verarbeiten +bot.onText(/\/a_help/, (msg) => { + const chatId = msg.chat.id; + + // Überprüfung, ob der Benutzer berechtigt ist + if (chatId.toString() === process.env.USER1_ID || chatId.toString() === process.env.USER2_ID) { + const adminHelpMessage = createAdminHelpMessage(); + bot.sendMessage(chatId, adminHelpMessage, { parse_mode: 'Markdown' }).catch(error => { + console.log(`Error sending admin help message to chatId ${chatId}: ${error.message}`); + }); + + console.log(`Sent admin help message to chatId ${chatId}`); + } else { + bot.sendMessage(chatId, "Du hast keine Berechtigung, diesen Befehl zu verwenden.", { parse_mode: 'Markdown' }).catch(error => { + console.log(`Error sending unauthorized message to chatId ${chatId}: ${error.message}`); + }); + } +}); + + // Funktion zum Abrufen der letzten 10 hinzugefügten Filme async function fetchLatest10Movies() {