From 38a13342fe804e8ed68820b62d51be73a97f01fa Mon Sep 17 00:00:00 2001 From: M_Viper Date: Thu, 25 Jan 2024 20:09:20 +0100 Subject: [PATCH] server_monitor_bot.js aktualisiert --- server_monitor_bot.js | 109 ++++++++++++++++++++++++++++++++++-------- 1 file changed, 88 insertions(+), 21 deletions(-) diff --git a/server_monitor_bot.js b/server_monitor_bot.js index c473311..80a7082 100644 --- a/server_monitor_bot.js +++ b/server_monitor_bot.js @@ -9,6 +9,8 @@ const logDirectory = 'logs/'; let usersAddingServer = {}; let isShowingDetails = false; const botStartTime = new Date(); +const { promisify } = require('util'); +const exec = promisify(require('child_process').exec); const developerChatIds = process.env.DEVELOPER_CHAT_IDS.split(','); @@ -18,7 +20,7 @@ const bot = new TelegramBot(token, { polling: true }); if (!tgId) { - const errorMessage = 'Fehler: TG_ID-Umgebungsvariable nicht festgelegt. Der Bot wird nicht gestartet.'; + const errorMessage = 'Fehler: Die ID wurde geändert. Der Bot wird nicht gestartet.'; console.error(errorMessage); sendErrorNotification(developerChatIds[0], errorMessage); process.exit(1); @@ -82,7 +84,7 @@ bot.onText(/\/stats/, (msg) => { // Version des Telegram Bot API-Pakets const telegramBotApiVersion = getTelegramBotApiVersion(); - // Nachricht mit den Statistiken senden + // Nachricht mit den Statistiken senden bot.sendMessage(chatId, ` *Statistik* Gesamtanzahl der überwachten Server: ${serverCount} @@ -363,36 +365,87 @@ bot.onText(/\/info/, (msg) => { bot.sendMessage(chatId, infoMessage, options); }); -// Füge diese Funktion hinzu, um Fehlerbenachrichtigungen und das Protokoll zu handhaben -bot.on('polling_error', (error) => { - console.error(`Polling error: ${error.message}`); - sendErrorNotification(developerChatId, `Polling error: ${error.message}`); +// Event-Handler für den Befehl /log_clear +bot.onText(/\/error_clear/, (msg) => { + const chatId = msg.chat.id; + + // Überprüfen, ob die Chat-ID des Benutzers in den Developer-Chat-IDs enthalten ist + if (!isDeveloperChat(chatId)) { + bot.sendMessage(chatId, 'Dieser Befehl ist nur für Entwickler'); + return; + } + + try { + const logFileName = 'error.log'; + const logFilePath = logFileName; // Pfade im gleichen Verzeichnis + + // Lösche den Inhalt des Logfiles + fs.writeFileSync(logFilePath, ''); + + bot.sendMessage(chatId, 'Der Log-Inhalt wurde erfolgreich gelöscht.'); + } catch (error) { + console.error(`Fehler beim Löschen des Log-Inhalts: ${error.message}`); + bot.sendMessage(chatId, 'Fehler beim Löschen des Log-Inhalts.'); + } }); -process.on('unhandledRejection', (reason, promise) => { - console.error('Unhandled rejection:', reason); - sendErrorNotification(developerChatId, `Unhandled rejection: ${reason}`); -}); +// Event-Handler für den Befehl /error_send +bot.onText(/\/error_send/, (msg) => { + const chatId = msg.chat.id; -process.on('uncaughtException', (error) => { - console.error('Uncaught exception:', error); - sendErrorNotification(developerChatId, `Uncaught exception: ${error}`); + // Überprüfen, ob die Chat-ID des Benutzers in den Developer-Chat-IDs enthalten ist + if (!isDeveloperChat(chatId)) { + bot.sendMessage(chatId, 'Dieser Befehl ist nur für Entwickler'); + return; + } + + try { + const logFileName = 'error.log'; + const logFilePath = logFileName; // Pfade im gleichen Verzeichnis + + // Überprüfe, ob die Logdatei existiert + if (fs.existsSync(logFilePath)) { + // Sende die Logdatei als Dokument an den Entwickler + bot.sendDocument(chatId, logFilePath); + } else { + bot.sendMessage(chatId, `Die Logdatei ${logFileName} existiert nicht.`); + } + } catch (error) { + console.error(`Fehler beim Senden der Logdatei: ${error.message}`); + bot.sendMessage(chatId, 'Fehler beim Senden der Logdatei.'); + } }); // Füge diese Funktion hinzu, um Fehlerbenachrichtigungen und das Protokoll zu handhaben bot.on('polling_error', (error) => { console.error(`Polling error: ${error.message}`); - sendErrorNotification(developerChatId, `Polling error: ${error.message}`); + sendErrorNotification(developerChatIds, `Polling error: ${error.message}`); }); process.on('unhandledRejection', (reason, promise) => { console.error('Unhandled rejection:', reason); - sendErrorNotification(developerChatId, `Unhandled rejection: ${reason}`); + sendErrorNotification(developerChatIds, `Unhandled rejection: ${reason}`); }); process.on('uncaughtException', (error) => { console.error('Uncaught exception:', error); - sendErrorNotification(developerChatId, `Uncaught exception: ${error}`); + sendErrorNotification(developerChatIds, `Uncaught exception: ${error}`); +}); + +// Füge diese Funktion hinzu, um Fehlerbenachrichtigungen und das Protokoll zu handhaben +bot.on('polling_error', (error) => { + console.error(`Polling error: ${error.message}`); + sendErrorNotification(developerChatIds, `Polling error: ${error.message}`); +}); + +process.on('unhandledRejection', (reason, promise) => { + console.error('Unhandled rejection:', reason); + sendErrorNotification(developerChatIds, `Unhandled rejection: ${reason}`); +}); + +process.on('uncaughtException', (error) => { + console.error('Uncaught exception:', error); + sendErrorNotification(developerChatIds, `Uncaught exception: ${error}`); }); // Funktion zum Senden von Fehlerbenachrichtigungen und Erstellen des Fehlerprotokolls @@ -566,10 +619,22 @@ function sendStatusMessage(chatId, serverName, serverStatus) { bot.sendMessage(chatId, statusMessage); } -bot.onText(/\/uptime/, async (msg) => { +// Funktion, um die Bot-Uptime in Tagen, Stunden und Minuten zu erhalten +function getBotUptime() { + const uptimeMilliseconds = new Date() - botStartTime; // botStartTime sollte irgendwo definiert und beim Bot-Start festgelegt sein + + // Berechne Tage, Stunden und Minuten + const days = Math.floor(uptimeMilliseconds / (1000 * 60 * 60 * 24)); + const hours = Math.floor((uptimeMilliseconds % (1000 * 60 * 60 * 24)) / (1000 * 60 * 60)); + const minutes = Math.floor((uptimeMilliseconds % (1000 * 60 * 60)) / (1000 * 60)); + + return { days, hours, minutes }; +} + +bot.onText(/\/uptime/, (msg) => { const chatId = msg.chat.id; - const uptime = await getUptime(); - bot.sendMessage(chatId, `Bot Uptime: ${uptime}`); + const { days, hours, minutes } = getBotUptime(); + bot.sendMessage(chatId, `Bot Uptime: ${days} Tage, ${hours} Stunden und ${minutes} Minuten`); }); bot.onText(/\/start/, (msg) => { @@ -926,7 +991,9 @@ if (isDeveloperChat(chatId)) { '- /error: Zeigt den error Log an\n' + '- /stats: Zeigt an, wie viele Personen den Bot nutzen\n' + '- /user_id Zeigt eine Liste von Usern an die den Bot nutzen\n' + - `- /user_delete "ID" löscht alle Server des Benutzer`; + '- /user_delete "ID" löscht alle Server des Benutzer\n' + + '- /error_send schickt die error.log Datei\n' + + '- /error_clear löscht alle einträge im error.log'; } bot.sendMessage(chatId, helpMessage); @@ -997,4 +1064,4 @@ async function checkAndSendServerStatus() { } } } -} \ No newline at end of file +}