From c217d44fef838d1db58d30b26146b301d109ca0a Mon Sep 17 00:00:00 2001 From: Alex Date: Fri, 2 Aug 2024 23:02:13 +0200 Subject: [PATCH] refactor --- osiris_listener.py | 94 ++++++++++++++++++++++++---------------------- 1 file changed, 49 insertions(+), 45 deletions(-) diff --git a/osiris_listener.py b/osiris_listener.py index 6a9da1f..1200469 100644 --- a/osiris_listener.py +++ b/osiris_listener.py @@ -1,26 +1,24 @@ -from flask import Flask, request, jsonify -import subprocess import os import logging +from flask import Flask, request, jsonify +#from win10toast import ToastNotifier +import asyncio +import subprocess import signal import psutil -#from win10toast import ToastNotifier import telegram -from telegram.ext import Updater, CommandHandler, MessageHandler, filters -import asyncio - +from telegram import Update +from telegram.ext import Updater, CommandHandler, CallbackContext, MessageHandler, filters +import telegram.error logging.basicConfig(filename='osiris_listener.log', level=logging.DEBUG, format='%(asctime)s %(message)s') app = Flask(__name__) #toaster = ToastNotifier() -# Telegram bot token -TELEGRAM_BOT_TOKEN = '5103145116:AAE_sVgkx8atxgizMuE38ClwbRLAyDUMSeM' -bot = telegram.Bot(token=TELEGRAM_BOT_TOKEN) - -# File to store subscriber chat IDs -SUBSCRIBERS_FILE = 'telegramm_subscribers.txt' +#### +# Constants +#### # Global list to store process handles processes = [] @@ -42,6 +40,39 @@ SCRIPTS = { ] } +#### +# Telegramm Functions +#### + +# Telegram bot token +TELEGRAM_BOT_TOKEN = '6984289827:AAHNUM4F_U6233oa75nX5jXyQY6vC0NlZvw' + +# Create an Bot with a larger connection pool and longer pool timeout +bot = telegram.Bot(token=TELEGRAM_BOT_TOKEN) + +# File to store subscriber chat IDs +SUBSCRIBERS_FILE = 'telegramm_subscribers.txt' + +def load_subscribers(): + """Load subscriber chat IDs from the file.""" + if os.path.exists(SUBSCRIBERS_FILE): + with open(SUBSCRIBERS_FILE, 'r') as file: + return [line.strip() for line in file.readlines()] + return [] + +async def send_telegram_message(message): + """Send a message to all subscribers.""" + subscribers = load_subscribers() + for chat_id in subscribers: + try: + prepped_message = f"{message}" + await bot.send_message(chat_id=chat_id, text=prepped_message) + except telegram.error.TelegramError as e: + logging.error(f"Error sending message to {chat_id}: {e}") + +#### +# Tool Functions +#### def read_pid_file(pid_file): """Read the PID from the specified PID file.""" try: @@ -61,28 +92,9 @@ def is_java_process_running(pid): return False return False -def load_subscribers(): - """Load subscriber chat IDs from the file.""" - if os.path.exists(SUBSCRIBERS_FILE): - with open(SUBSCRIBERS_FILE, 'r') as file: - return [line.strip() for line in file.readlines()] - return [] - -def save_subscriber(chat_id): - """Save a new subscriber chat ID to the file.""" - with open(SUBSCRIBERS_FILE, 'a') as file: - file.write(f"{chat_id}\n") - -async def send_telegram_message(message): - """Send a message to all subscribers.""" - subscribers = load_subscribers() - for chat_id in subscribers: - try: - prepped_message = f"[nuc_morroc]{message}" - await bot.send_message(chat_id=chat_id, text=prepped_message) - except telegram.error.TelegramError as e: - logging.error(f"Error sending message to {chat_id}: {e}") - +#### +# Flask Functions +#### @app.route('/osiris_execute', methods=['POST']) def execute_script(): @@ -134,7 +146,7 @@ def execute_script(): pid_file = os.path.join(os.path.dirname(path), 'server.pid') pid = read_pid_file(pid_file) - if is_java_process_running(command): + if is_java_process_running(pid): logging.info(f"Script {script_name} is already running.") results.append({ "script": path, @@ -254,6 +266,7 @@ def status_gameservers(): logging.info("Check Status der Server") global processes_info running_servers = [] + server_list = [] for process in processes_info: running_servers.append(process['name']) server_list = "\n - ".join(running_servers) @@ -261,19 +274,10 @@ def status_gameservers(): return jsonify({"message": f"Aktuell laufende Server: {server_list}" }) -# Endpoint to add subscribers | Note: aktuell nur händisch mittels Übertrag der ID aus IOBroker heraus -@app.route('/subscribe', methods=['POST']) -def subscribe(): - data = request.get_json() - chat_id = data.get('chat_id') - if chat_id: - save_subscriber(chat_id) - return jsonify({'message': 'Subscribed successfully.'}) - return jsonify({'error': 'No chat_id provided'}), 400 - if __name__ == '__main__': #toaster.show_toast("Starte Osiris", "Osiris Listener wurde gestartet. Warte auf Befehle...", duration=30) logging.info("Starte Server.") asyncio.run(send_telegram_message(f"Nuc_Morroc hier. Bin jetzt wach ;-)")) + app.run(host='0.0.0.0', port=9713) \ No newline at end of file