From 611e101483f29c06a86fe70dfb6df4250bf28723 Mon Sep 17 00:00:00 2001 From: M_Viper Date: Wed, 17 Jan 2024 15:20:39 +0100 Subject: [PATCH] support_bot.js aktualisiert --- support_bot.js | 174 +++++++++++++++++++++++++++---------------------- 1 file changed, 97 insertions(+), 77 deletions(-) diff --git a/support_bot.js b/support_bot.js index 4fb2680..d70a6a3 100644 --- a/support_bot.js +++ b/support_bot.js @@ -13,11 +13,9 @@ const emailConfig = { }; const botToken = process.env.BOT_TOKEN; -const ADMIN_ID = process.env.ADMIN_ID; +const adminChatId = process.env.ADMIN_CHAT_ID; - -// Lade die erlaubten Admin-IDs aus der .env-Datei -const allowedAdminIds = ADMIN_ID.split(','); +const allowedAdminIds = adminChatId.split(','); const botInfo = { name: 'Telegram Support Bot', @@ -32,7 +30,6 @@ const ticketCreationStatus = new Map(); const logoPath = path.join(__dirname, 'logo.png'); - function sendErrorNotification(error) { try { const adminChatId = 5507179337; @@ -46,24 +43,40 @@ function sendErrorNotification(error) { } } - -async function checkBotStatus(chatId) { +async function checkBotStatus(msg) { try { - const isBotOnline = true; + console.log('Received message:', msg); + + // Überprüfe, ob der Befehl /status ausgeführt wurde + const isStatusCommand = msg && msg.text && msg.text.toLowerCase() === '/status'; + + console.log('Is /status command?', isStatusCommand); + + const isBotOnline = true; // Hier sollte deine Logik stehen, um den Bot-Status zu überprüfen. const statusMessage = isBotOnline ? 'Der Bot ist online.' : 'Der Bot ist offline.'; - bot.sendMessage(chatId, statusMessage); + + if (isStatusCommand) { + bot.sendMessage(msg.chat.id, statusMessage); + } } catch (error) { console.error('Fehler beim Überprüfen des Bot-Status:', error); sendErrorNotification(error); - bot.sendMessage(chatId, 'Fehler beim Überprüfen des Bot-Status.'); + + if (msg && msg.text && msg.text.toLowerCase() === '/status') { + bot.sendMessage(msg.chat.id, 'Fehler beim Überprüfen des Bot-Status.'); + } } } -async function checkWebsiteStatus(chatId) { +/* bot.onText(/\/status/, checkBotStatus); + +async function checkWebsiteStatus() { + const adminChatId = process.env.ADMIN_CHAT_ID; + const websites = [ { name: process.env.WEBSITE_1_NAME, - url: process.env.WEBSITE_1_URL, + url: process.env.WEBSITE_1_URL, }, { name: process.env.WEBSITE_2_NAME, @@ -75,18 +88,23 @@ async function checkWebsiteStatus(chatId) { try { const response = await axios.get(website.url); const statusMessage = `✅ ${website.name} ist online.`; - bot.sendMessage(chatId, statusMessage, { parse_mode: 'HTML' }); + if (!website.online) { + website.online = true; + bot.sendMessage(adminChatId, statusMessage, { parse_mode: 'HTML' }); + } } catch (error) { console.error(`Fehler beim Zugriff auf ${website.name}:`, error); const errorMessage = `❌ ${website.name} ist offline. Fehler: ${error.message}`; - sendErrorNotification(errorMessage); - bot.sendMessage(chatId, errorMessage, { parse_mode: 'HTML' }); + if (website.online !== false) { + website.online = false; + sendErrorNotification(errorMessage); + bot.sendMessage(adminChatId, errorMessage, { parse_mode: 'HTML' }); + } } } } - -setInterval(checkWebsiteStatus, 30000); +setInterval(checkWebsiteStatus, 3600000); */ async function loadFromYaml(filePath) { try { @@ -94,7 +112,7 @@ async function loadFromYaml(filePath) { return yaml.load(fileContents); } catch (error) { console.error(`Fehler beim Laden der YAML-Datei für ${path.basename(filePath)}:`, error); - sendErrorNotification(error); + sendErrorNotification(error); return []; } } @@ -105,7 +123,7 @@ async function loadLinks() { return await loadFromYaml(linksDataPath); } catch (error) { console.error('Fehler beim Laden der Links:', error); - sendErrorNotification(error); + sendErrorNotification(error); return []; } } @@ -116,7 +134,7 @@ async function loadTeam() { return await loadFromYaml(teamDataPath); } catch (error) { console.error('Fehler beim Laden des Teams:', error); - sendErrorNotification(error); + sendErrorNotification(error); return []; } } @@ -127,34 +145,55 @@ async function loadFragen() { return await loadFromYaml(fragenDataPath); } catch (error) { console.error('Fehler beim Laden der Fragen:', error); - sendErrorNotification(error); + sendErrorNotification(error); return []; } } -function sendWelcomeMessage(chatId) { - const welcomeMessage = ` - **Herzlich willkommen beim Support!** +function sendWelcomeMessage(chatId, isStatusCommand = false) { + const excludedCommands = ['/status', '/info', '/help', '/menu']; - Wir freuen uns, dass Sie sich für unseren Support entschieden haben. Unser vorrangiges Ziel ist es, Ihnen bestmöglich zu helfen und Ihre Anliegen so schnell wie möglich zu klären. Falls Sie Unterstützung benötigen, bieten wir Ihnen verschiedene Optionen: - - 👉 Um unser Menü anzuzeigen, tippen Sie einfach "/menu" ein. + if (!isStatusCommand && !excludedCommands.includes('/' + chatId)) { + const welcomeMessage = ` +Herzlich willkommen beim Support! - 👉 Sollte Ihre Frage nicht beantwortet werden, können Sie unkompliziert ein Ticket erstellen, um spezifische Unterstützung zu erhalten. - - Für weitere Hilfe steht Ihnen unser "/help"-Befehl zur Verfügung. - - Wir sind jederzeit für Sie da und bearbeiten gerne Ihre Anfragen. Bitte teilen Sie uns so viele Details wie möglich mit, damit wir Ihnen effektiv helfen können. - - Vielen Dank für Ihr Vertrauen. - - Herzliche Grüße, - Das Support-Team +Wir freuen uns, dass Sie sich für unseren Support entschieden haben. Unser vorrangiges Ziel ist es, Ihnen bestmöglich zu helfen und Ihre Anliegen so schnell wie möglich zu klären. Falls Sie Unterstützung benötigen, bieten wir Ihnen verschiedene Optionen: + +👉 Um unser Menü anzuzeigen, tippen Sie einfach "/menu" ein. + +👉 Sollte Ihre Frage nicht beantwortet werden, können Sie unkompliziert ein Ticket erstellen, um spezifische Unterstützung zu erhalten. + +Für weitere Hilfe steht Ihnen unser "/help"-Befehl zur Verfügung. + +Wir sind jederzeit für Sie da und bearbeiten gerne Ihre Anfragen. Bitte teilen Sie uns so viele Details wie möglich mit, damit wir Ihnen effektiv helfen können. + +Vielen Dank für Ihr Vertrauen. + +Herzliche Grüße, +Das Support-Team `; - bot.sendMessage(chatId, welcomeMessage, { parse_mode: 'Markdown' }); + bot.sendMessage(chatId, welcomeMessage, { parse_mode: 'Markdown' }); + } } + +function handleStatusCommand(msg) { + const chatId = msg.chat.id; + const userId = msg.from.id; + + if (allowedAdminIds.includes(userId.toString())) { + bot.sendMessage(chatId, 'Aktueller Bot- und Webseitenstatus wird abgerufen...'); + + checkBotStatus(chatId); + checkWebsiteStatus(chatId); + } else { + bot.sendMessage(chatId, 'Du hast keine Berechtigung, diesen Befehl zu verwenden.'); + } +} + +bot.onText(/\/status/, handleStatusCommand); + async function initializeBot() { try { const linksData = await loadLinks(); @@ -169,18 +208,17 @@ async function initializeBot() { bot.on('message', async (msg) => { const chatId = msg.chat.id; - - // Überprüfe, ob die Nachricht "/help" ist, und sende die Hilfe-Nachricht + if (msg.text && msg.text.toLowerCase() === '/help') { const helpMessage = ` 🤖 ${botInfo.name} - Hilfe 🤖 - + Verfügbare Befehle: 1. /menu - Zeigt das Hauptmenü an. 2. /help - Zeigt diese Hilfe an. -2. /info - Zeigt Informationen zum Bot an. -3. /status - Überprüft den aktuellen Bot- und Webseitenstatus. "Nur für Administrator" +3. /info - Zeigt Informationen zum Bot an. + 🎫 Ticket erstellen: 🎫 @@ -190,60 +228,43 @@ Verfügbare Befehle: 👉 Zeigt Links zu verschiedenen Kategorien an. ❓ Fragen: ❓ - 👉 Zeigt häufig gestellte Fragen (FAQs) an. +👉 Zeigt häufig gestellte Fragen (FAQs) an. - 👮 Team: 👮 +👮 Team: 👮 👉 Zeigt Informationen zum Support-Team an. ‼️ Hinweis: Weitere Funktionen werden folgen ‼️ `; - + bot.sendMessage(chatId, helpMessage) .catch((error) => { console.error('Fehler beim Senden der Hilfe:', error); }); - + return; } - - // Überprüfe, ob es sich um den Befehl /menu handelt + if (msg.text === '/menu') { handleMainMenu(msg, chatId, linksData, fragenData); return; } - - // Überprüfe, ob es sich um den Befehl /info handelt + if (msg.text && msg.text.toLowerCase() === '/info') { // Code für den Befehl /info return; } - - // Überprüfe, ob sich der Benutzer im Ticketerstellungsstatus befindet + + if (msg.text && msg.text.toLowerCase() === '/status') { + // Code für den Befehl /status + return; + } + if (ticketCreationStatus.has(chatId)) { handleTicketCreation(msg, chatId, linksData); return; } - - // Wenn keiner der speziellen Befehle erkannt wurde, sende die Willkommensnachricht - sendWelcomeMessage(chatId); - bot.onText(/\/status/, (msg) => { - const chatId = msg.chat.id; - const userId = msg.from.id; - - // Prüfe, ob der Benutzer die Berechtigung hat, den /status-Befehl zu verwenden - if (allowedAdminIds.includes(userId.toString())) { - // Führe die Logik für den /status-Befehl aus - bot.sendMessage(chatId, 'Aktueller Bot- und Webseitenstatus wird abgerufen...'); - - // Hier kannst du die Logik für den Statusbefehl implementieren - // Z.B., rufe Funktionen auf, um den aktuellen Bot- und Webseitenstatus zu überprüfen - checkBotStatus(chatId); - checkWebsiteStatus(chatId); - } else { - bot.sendMessage(chatId, 'Du hast keine Berechtigung, diesen Befehl zu verwenden.'); - } - }); + sendWelcomeMessage(chatId); }); bot.on('callback_query', (callbackQuery) => { @@ -288,7 +309,6 @@ Verfügbare Befehle: `); } catch (error) { console.error('Fehler beim Initialisieren des Bots:', error); - sendErrorNotification(error); } } @@ -297,13 +317,13 @@ function showBotInfo(chatId) { bot.sendPhoto(chatId, logoPath, { caption: '*Der Bot wurde am 08.01.2024 erstellt*' }) .then(() => { const botInfoMessage = ` - 🤖Bot Information:🤖 +🤖Bot Information: - *Name:* ${escapeMarkdown(botInfo.name)} - *Author:* ${escapeMarkdown(botInfo.author)} - *License:* ${escapeMarkdown(botInfo.license)} - `; +`; - return bot.sendMessage(chatId, botInfoMessage, { parse_mode: 'Markdown' }); +bot.sendMessage(chatId, botInfoMessage, { parse_mode: 'Markdown' }); }) .then(() => { console.log('Bot-Informationen erfolgreich gesendet.');