Dateien nach "/" hochladen
This commit is contained in:
		
							
								
								
									
										2100
									
								
								package-lock.json
									
									
									
										generated
									
									
									
										Normal file
									
								
							
							
						
						
									
										2100
									
								
								package-lock.json
									
									
									
										generated
									
									
									
										Normal file
									
								
							
										
											
												File diff suppressed because it is too large
												Load Diff
											
										
									
								
							
							
								
								
									
										18
									
								
								package.json
									
									
									
									
									
										Normal file
									
								
							
							
						
						
									
										18
									
								
								package.json
									
									
									
									
									
										Normal file
									
								
							@@ -0,0 +1,18 @@
 | 
			
		||||
{
 | 
			
		||||
  "name": "server",
 | 
			
		||||
  "version": "1.0.0",
 | 
			
		||||
  "description": "",
 | 
			
		||||
  "main": "server_monitor_bot.js",
 | 
			
		||||
  "scripts": {
 | 
			
		||||
    "test": "echo \"Error: no test specified\" && exit 1"
 | 
			
		||||
  },
 | 
			
		||||
  "keywords": [],
 | 
			
		||||
  "author": "",
 | 
			
		||||
  "license": "ISC",
 | 
			
		||||
  "dependencies": {
 | 
			
		||||
    "express": "^4.18.2",
 | 
			
		||||
    "js-yaml": "^4.1.0",
 | 
			
		||||
    "node-telegram-bot-api": "^0.64.0",
 | 
			
		||||
    "ping": "^0.4.4"
 | 
			
		||||
  }
 | 
			
		||||
}
 | 
			
		||||
							
								
								
									
										288
									
								
								server_monitor_bot.js
									
									
									
									
									
										Normal file
									
								
							
							
						
						
									
										288
									
								
								server_monitor_bot.js
									
									
									
									
									
										Normal file
									
								
							@@ -0,0 +1,288 @@
 | 
			
		||||
const TelegramBot = require('node-telegram-bot-api');
 | 
			
		||||
const ping = require('ping');
 | 
			
		||||
const os = require('os');
 | 
			
		||||
const fs = require('fs');
 | 
			
		||||
const yaml = require('js-yaml');
 | 
			
		||||
 | 
			
		||||
const token = '6409908881:AAGoE35Ohy1TIKljSb7Y0gaDWhdR23Z_Pl4';
 | 
			
		||||
const bot = new TelegramBot(token, { polling: true });
 | 
			
		||||
 | 
			
		||||
let userServerConfigurations = loadConfigurations();
 | 
			
		||||
const chatIds = new Set(); // Set für die Chat-IDs
 | 
			
		||||
 | 
			
		||||
function loadConfigurations() {
 | 
			
		||||
    try {
 | 
			
		||||
        if (fs.existsSync('configurations.yml')) {
 | 
			
		||||
            const data = fs.readFileSync('configurations.yml', 'utf8');
 | 
			
		||||
            return yaml.load(data) || {};
 | 
			
		||||
        } else {
 | 
			
		||||
            saveConfigurations({});
 | 
			
		||||
            return {};
 | 
			
		||||
        }
 | 
			
		||||
    } catch (error) {
 | 
			
		||||
        console.error('Fehler beim Laden der Konfigurationen:', error.message);
 | 
			
		||||
        return {};
 | 
			
		||||
    }
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
function saveConfigurations(configurations) {
 | 
			
		||||
    try {
 | 
			
		||||
        const yamlString = yaml.dump(configurations);
 | 
			
		||||
        fs.writeFileSync('configurations.yml', yamlString, 'utf8');
 | 
			
		||||
    } catch (error) {
 | 
			
		||||
        console.error('Fehler beim Speichern der Konfigurationen:', error.message);
 | 
			
		||||
    }
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
function getCpuUsage() {
 | 
			
		||||
    return Math.floor(Math.random() * 101);
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
function getRamUsage() {
 | 
			
		||||
    return Math.floor(Math.random() * 101);
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
function getNetworkTraffic() {
 | 
			
		||||
    return Math.floor(Math.random() * 101);
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
async function getUptime() {
 | 
			
		||||
    const uptimeInSeconds = os.uptime();
 | 
			
		||||
    const days = Math.floor(uptimeInSeconds / (24 * 3600));
 | 
			
		||||
    const hours = Math.floor((uptimeInSeconds % (24 * 3600)) / 3600);
 | 
			
		||||
    const minutes = Math.floor((uptimeInSeconds % 3600) / 60);
 | 
			
		||||
    return `${days} Tage, ${hours} Stunden, ${minutes} Minuten`;
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
async function checkServerStatus(serverAddress) {
 | 
			
		||||
    try {
 | 
			
		||||
        const result = await ping.promise.probe(serverAddress);
 | 
			
		||||
        return result.alive ? 'Online' : 'Offline';
 | 
			
		||||
    } catch (error) {
 | 
			
		||||
        console.error(`Fehler beim Überprüfen des Servers ${serverAddress}: ${error.message}`);
 | 
			
		||||
        return 'Fehler';
 | 
			
		||||
    }
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
const usersAddingServer = {};
 | 
			
		||||
 | 
			
		||||
const onlineIcon = '✅';
 | 
			
		||||
const offlineIcon = '❌';
 | 
			
		||||
const errorIcon = '⚠️';
 | 
			
		||||
const bannerEmoji = '🚀';
 | 
			
		||||
 | 
			
		||||
bot.onText(/\/start/, (msg) => {
 | 
			
		||||
    const chatId = msg.chat.id;
 | 
			
		||||
    chatIds.add(chatId); // Füge die Chat-ID zum Set hinzu
 | 
			
		||||
    bot.sendMessage(chatId, 'Bot gestartet. Benutze /add_server, /delete_server, /status und /help für Serververwaltung.');
 | 
			
		||||
});
 | 
			
		||||
 | 
			
		||||
bot.onText(/\/add_server/, (msg) => {
 | 
			
		||||
    const chatId = msg.chat.id;
 | 
			
		||||
 | 
			
		||||
    bot.sendMessage(chatId, 'Füge einen neuen Server hinzu. Sende mir zuerst den Namen des Servers:');
 | 
			
		||||
 | 
			
		||||
    usersAddingServer[chatId] = { name: null, address: null };
 | 
			
		||||
 | 
			
		||||
    bot.once('text', (serverNameMsg) => {
 | 
			
		||||
        usersAddingServer[chatId].name = serverNameMsg.text;
 | 
			
		||||
 | 
			
		||||
        bot.sendMessage(chatId, `Servername ${bannerEmoji}${serverNameMsg.text}${bannerEmoji} wurde hinzugefügt. Jetzt sende mir die IP-Adresse des Servers:`);
 | 
			
		||||
 | 
			
		||||
        bot.once('text', (serverAddressMsg) => {
 | 
			
		||||
            usersAddingServer[chatId].address = serverAddressMsg.text;
 | 
			
		||||
 | 
			
		||||
            userServerConfigurations[chatId] = userServerConfigurations[chatId] || [];
 | 
			
		||||
            userServerConfigurations[chatId].push(usersAddingServer[chatId]);
 | 
			
		||||
 | 
			
		||||
            saveConfigurations(userServerConfigurations);
 | 
			
		||||
 | 
			
		||||
            bot.sendMessage(chatId, `Server ${bannerEmoji}${usersAddingServer[chatId].name}${bannerEmoji} mit Adresse "${usersAddingServer[chatId].address}" wurde hinzugefügt.`);
 | 
			
		||||
        });
 | 
			
		||||
    });
 | 
			
		||||
});
 | 
			
		||||
 | 
			
		||||
bot.onText(/\/delete_server/, (msg) => {
 | 
			
		||||
    const chatId = msg.chat.id;
 | 
			
		||||
    const userServers = userServerConfigurations[chatId] || [];
 | 
			
		||||
 | 
			
		||||
    if (userServers.length === 0) {
 | 
			
		||||
        bot.sendMessage(chatId, 'Du hast noch keine Server hinzugefügt. Benutze /add_server, um einen Server hinzuzufügen.');
 | 
			
		||||
        return;
 | 
			
		||||
    }
 | 
			
		||||
 | 
			
		||||
    const keyboard = {
 | 
			
		||||
        reply_markup: {
 | 
			
		||||
            inline_keyboard: userServers.map(server => [{
 | 
			
		||||
                text: `${server.name} - ${server.address}`,
 | 
			
		||||
                callback_data: `delete:${server.name}:${server.address}`
 | 
			
		||||
            }])
 | 
			
		||||
        }
 | 
			
		||||
    };
 | 
			
		||||
 | 
			
		||||
    bot.sendMessage(chatId, 'Wähle einen Server zum Löschen aus:', keyboard);
 | 
			
		||||
});
 | 
			
		||||
 | 
			
		||||
bot.on('callback_query', (query) => {
 | 
			
		||||
    const chatId = query.message.chat.id;
 | 
			
		||||
    const [action, serverName, serverAddress] = query.data.split(':');
 | 
			
		||||
 | 
			
		||||
    if (action === 'delete') {
 | 
			
		||||
        userServerConfigurations[chatId] = (userServerConfigurations[chatId] || []).filter(server => !(server.name === serverName && server.address === serverAddress));
 | 
			
		||||
 | 
			
		||||
        saveConfigurations(userServerConfigurations);
 | 
			
		||||
 | 
			
		||||
        bot.answerCallbackQuery(query.id, `Server ${bannerEmoji}${serverName}${bannerEmoji} mit Adresse "${serverAddress}" wurde gelöscht.`);
 | 
			
		||||
    } else if (action === 'details') {
 | 
			
		||||
        showServerDetails(chatId, serverName, serverAddress);
 | 
			
		||||
    }
 | 
			
		||||
});
 | 
			
		||||
 | 
			
		||||
bot.onText(/\/status/, async (msg) => {
 | 
			
		||||
    const chatId = msg.chat.id;
 | 
			
		||||
    const userServers = userServerConfigurations[chatId] || [];
 | 
			
		||||
 | 
			
		||||
    if (userServers.length === 0) {
 | 
			
		||||
        bot.sendMessage(chatId, 'Du hast noch keine Server hinzugefügt. Benutze /add_server, um einen Server hinzuzufügen.');
 | 
			
		||||
        return;
 | 
			
		||||
    }
 | 
			
		||||
 | 
			
		||||
    let statusMessage = 'Server Status:\n';
 | 
			
		||||
 | 
			
		||||
    for (const serverConfig of userServers) {
 | 
			
		||||
        const serverName = serverConfig.name;
 | 
			
		||||
        const serverAddress = serverConfig.address;
 | 
			
		||||
 | 
			
		||||
        try {
 | 
			
		||||
            const serverStatus = await checkServerStatus(serverAddress);
 | 
			
		||||
 | 
			
		||||
            const statusIcon = serverStatus === 'Online' ? '✅' : serverStatus === 'Offline' ? '❌' : '⚠️';
 | 
			
		||||
 | 
			
		||||
            statusMessage += `
 | 
			
		||||
*Server:* ${bannerEmoji}${serverName}${bannerEmoji} ${statusIcon} ${serverStatus}
 | 
			
		||||
`;
 | 
			
		||||
        } catch (error) {
 | 
			
		||||
            console.error(`Fehler beim Überprüfen des Servers ${serverName}: ${error.message}`);
 | 
			
		||||
            statusMessage += `Fehler beim Überprüfen des Servers ${bannerEmoji}${serverName}${bannerEmoji}. ${errorIcon}\n`;
 | 
			
		||||
        }
 | 
			
		||||
    }
 | 
			
		||||
 | 
			
		||||
    const options = {
 | 
			
		||||
        parse_mode: 'Markdown',
 | 
			
		||||
        reply_markup: {
 | 
			
		||||
            inline_keyboard: [
 | 
			
		||||
                [{
 | 
			
		||||
                    text: 'Details',
 | 
			
		||||
                    callback_data: 'details'
 | 
			
		||||
                }]
 | 
			
		||||
            ]
 | 
			
		||||
        }
 | 
			
		||||
    };
 | 
			
		||||
 | 
			
		||||
    bot.sendMessage(chatId, statusMessage, options);
 | 
			
		||||
});
 | 
			
		||||
 | 
			
		||||
async function showServerDetails(chatId, serverName, serverAddress) {
 | 
			
		||||
    const detailsMessage = `
 | 
			
		||||
*Details für Server ${bannerEmoji}${serverName}${bannerEmoji}* 
 | 
			
		||||
*Uptime:* ${await getUptime()}
 | 
			
		||||
*CPU-Auslastung:* ${getCpuUsage()}%
 | 
			
		||||
*RAM-Auslastung:* ${getRamUsage()}%
 | 
			
		||||
*Netzwerk-Traffic:* ${getNetworkTraffic()}%
 | 
			
		||||
*IP/Adresse:* ${serverAddress}
 | 
			
		||||
`;
 | 
			
		||||
 | 
			
		||||
    const options = {
 | 
			
		||||
        parse_mode: 'Markdown',
 | 
			
		||||
    };
 | 
			
		||||
 | 
			
		||||
    bot.sendMessage(chatId, detailsMessage, options);
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
bot.on('callback_query', async (query) => {
 | 
			
		||||
    const chatId = query.message.chat.id;
 | 
			
		||||
    const [action, serverName, serverAddress] = query.data.split(':');
 | 
			
		||||
 | 
			
		||||
    if (action === 'details') {
 | 
			
		||||
        const userServers = userServerConfigurations[chatId] || [];
 | 
			
		||||
 | 
			
		||||
        if (userServers.length === 0) {
 | 
			
		||||
            bot.sendMessage(chatId, 'Du hast noch keine Server hinzugefügt. Benutze /add_server, um einen Server hinzuzufügen.');
 | 
			
		||||
            return;
 | 
			
		||||
        }
 | 
			
		||||
 | 
			
		||||
        const keyboard = {
 | 
			
		||||
            reply_markup: {
 | 
			
		||||
                inline_keyboard: userServers.map(server => [{
 | 
			
		||||
                    text: `${server.name}} - ${server.address}`,
 | 
			
		||||
                    callback_data: `details:${server.name}:${server.address}`
 | 
			
		||||
                }])
 | 
			
		||||
            }
 | 
			
		||||
        };
 | 
			
		||||
 | 
			
		||||
        bot.sendMessage(chatId, 'Wähle einen Server für Details aus:', keyboard);
 | 
			
		||||
    } else if (action === 'details') {
 | 
			
		||||
        showServerDetails(chatId, serverName);
 | 
			
		||||
    }
 | 
			
		||||
});
 | 
			
		||||
 | 
			
		||||
bot.onText(/\/help/, (msg) => {
 | 
			
		||||
    const chatId = msg.chat.id;
 | 
			
		||||
    const helpMessage = `
 | 
			
		||||
    Verfügbare Befehle:
 | 
			
		||||
    - /add_server: Fügt einen neuen Server hinzu.
 | 
			
		||||
    - /delete_server: Löscht einen vorhandenen Server.
 | 
			
		||||
    - /status: Zeigt den Status der konfigurierten Server an.
 | 
			
		||||
    - /help: Zeigt diese Hilfe an.
 | 
			
		||||
    `;
 | 
			
		||||
    bot.sendMessage(chatId, helpMessage);
 | 
			
		||||
});
 | 
			
		||||
 | 
			
		||||
// Intervall für die Serverüberprüfung
 | 
			
		||||
const checkIntervalMinutes = 2;
 | 
			
		||||
const checkIntervalMilliseconds = checkIntervalMinutes * 60 * 1000;
 | 
			
		||||
 | 
			
		||||
setInterval(async () => {
 | 
			
		||||
    await checkAndSendServerStatus();
 | 
			
		||||
}, checkIntervalMilliseconds);
 | 
			
		||||
 | 
			
		||||
async function checkAndSendServerStatus() {
 | 
			
		||||
    // Iteriere über alle gespeicherten Chat-IDs
 | 
			
		||||
    for (const chatId of chatIds) {
 | 
			
		||||
        const userServers = userServerConfigurations[chatId] || [];
 | 
			
		||||
 | 
			
		||||
        if (userServers.length === 0) {
 | 
			
		||||
            bot.sendMessage(chatId, 'Du hast noch keine Server hinzugefügt. Benutze /add_server, um einen Server hinzuzufügen.');
 | 
			
		||||
            continue;
 | 
			
		||||
        }
 | 
			
		||||
 | 
			
		||||
        let statusMessage = 'Automatischer Statusbericht:\n';
 | 
			
		||||
 | 
			
		||||
        for (const serverConfig of userServers) {
 | 
			
		||||
            const serverName = serverConfig.name;
 | 
			
		||||
            const serverAddress = serverConfig.address;
 | 
			
		||||
 | 
			
		||||
            try {
 | 
			
		||||
                const serverStatus = await checkServerStatus(serverAddress);
 | 
			
		||||
 | 
			
		||||
                if (serverStatus === 'Offline') {
 | 
			
		||||
                    const statusIcon = '❌';
 | 
			
		||||
                    statusMessage += `
 | 
			
		||||
*Server:* ${bannerEmoji}${serverName}${bannerEmoji} ${statusIcon} ${serverStatus}
 | 
			
		||||
`;
 | 
			
		||||
                }
 | 
			
		||||
            } catch (error) {
 | 
			
		||||
                console.error(`Fehler beim Überprüfen des Servers ${serverName}: ${error.message}`);
 | 
			
		||||
                statusMessage += `Fehler beim Überprüfen des Servers ${bannerEmoji}${serverName}${bannerEmoji}. ⚠️\n`;
 | 
			
		||||
            }
 | 
			
		||||
        }
 | 
			
		||||
 | 
			
		||||
        if (statusMessage.includes('❌')) {
 | 
			
		||||
            const options = {
 | 
			
		||||
                parse_mode: 'Markdown',
 | 
			
		||||
            };
 | 
			
		||||
 | 
			
		||||
            bot.sendMessage(chatId, statusMessage, options);
 | 
			
		||||
        }
 | 
			
		||||
    }
 | 
			
		||||
}
 | 
			
		||||
		Reference in New Issue
	
	Block a user