server_monitor_bot.js aktualisiert

This commit is contained in:
M_Viper 2024-01-25 20:09:20 +01:00
parent 366e09340a
commit 38a13342fe
1 changed files with 88 additions and 21 deletions

View File

@ -9,6 +9,8 @@ const logDirectory = 'logs/';
let usersAddingServer = {}; let usersAddingServer = {};
let isShowingDetails = false; let isShowingDetails = false;
const botStartTime = new Date(); const botStartTime = new Date();
const { promisify } = require('util');
const exec = promisify(require('child_process').exec);
const developerChatIds = process.env.DEVELOPER_CHAT_IDS.split(','); const developerChatIds = process.env.DEVELOPER_CHAT_IDS.split(',');
@ -18,7 +20,7 @@ const bot = new TelegramBot(token, { polling: true });
if (!tgId) { 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); console.error(errorMessage);
sendErrorNotification(developerChatIds[0], errorMessage); sendErrorNotification(developerChatIds[0], errorMessage);
process.exit(1); process.exit(1);
@ -82,7 +84,7 @@ bot.onText(/\/stats/, (msg) => {
// Version des Telegram Bot API-Pakets // Version des Telegram Bot API-Pakets
const telegramBotApiVersion = getTelegramBotApiVersion(); const telegramBotApiVersion = getTelegramBotApiVersion();
// Nachricht mit den Statistiken senden // Nachricht mit den Statistiken senden
bot.sendMessage(chatId, ` bot.sendMessage(chatId, `
*Statistik* *Statistik*
Gesamtanzahl der überwachten Server: ${serverCount} Gesamtanzahl der überwachten Server: ${serverCount}
@ -363,36 +365,87 @@ bot.onText(/\/info/, (msg) => {
bot.sendMessage(chatId, infoMessage, options); bot.sendMessage(chatId, infoMessage, options);
}); });
// Füge diese Funktion hinzu, um Fehlerbenachrichtigungen und das Protokoll zu handhaben // Event-Handler für den Befehl /log_clear
bot.on('polling_error', (error) => { bot.onText(/\/error_clear/, (msg) => {
console.error(`Polling error: ${error.message}`); const chatId = msg.chat.id;
sendErrorNotification(developerChatId, `Polling error: ${error.message}`);
// Ü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) => { // Event-Handler für den Befehl /error_send
console.error('Unhandled rejection:', reason); bot.onText(/\/error_send/, (msg) => {
sendErrorNotification(developerChatId, `Unhandled rejection: ${reason}`); const chatId = msg.chat.id;
});
process.on('uncaughtException', (error) => { // Überprüfen, ob die Chat-ID des Benutzers in den Developer-Chat-IDs enthalten ist
console.error('Uncaught exception:', error); if (!isDeveloperChat(chatId)) {
sendErrorNotification(developerChatId, `Uncaught exception: ${error}`); 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 // Füge diese Funktion hinzu, um Fehlerbenachrichtigungen und das Protokoll zu handhaben
bot.on('polling_error', (error) => { bot.on('polling_error', (error) => {
console.error(`Polling error: ${error.message}`); console.error(`Polling error: ${error.message}`);
sendErrorNotification(developerChatId, `Polling error: ${error.message}`); sendErrorNotification(developerChatIds, `Polling error: ${error.message}`);
}); });
process.on('unhandledRejection', (reason, promise) => { process.on('unhandledRejection', (reason, promise) => {
console.error('Unhandled rejection:', reason); console.error('Unhandled rejection:', reason);
sendErrorNotification(developerChatId, `Unhandled rejection: ${reason}`); sendErrorNotification(developerChatIds, `Unhandled rejection: ${reason}`);
}); });
process.on('uncaughtException', (error) => { process.on('uncaughtException', (error) => {
console.error('Uncaught exception:', 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 // Funktion zum Senden von Fehlerbenachrichtigungen und Erstellen des Fehlerprotokolls
@ -566,10 +619,22 @@ function sendStatusMessage(chatId, serverName, serverStatus) {
bot.sendMessage(chatId, statusMessage); 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 chatId = msg.chat.id;
const uptime = await getUptime(); const { days, hours, minutes } = getBotUptime();
bot.sendMessage(chatId, `Bot Uptime: ${uptime}`); bot.sendMessage(chatId, `Bot Uptime: ${days} Tage, ${hours} Stunden und ${minutes} Minuten`);
}); });
bot.onText(/\/start/, (msg) => { bot.onText(/\/start/, (msg) => {
@ -926,7 +991,9 @@ if (isDeveloperChat(chatId)) {
'- /error: Zeigt den error Log an\n' + '- /error: Zeigt den error Log an\n' +
'- /stats: Zeigt an, wie viele Personen den Bot nutzen\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_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); bot.sendMessage(chatId, helpMessage);
@ -997,4 +1064,4 @@ async function checkAndSendServerStatus() {
} }
} }
} }
} }