From 04c86ad98af7f3f12e00ab753dbbcff4a7b215f4 Mon Sep 17 00:00:00 2001 From: SinusFox Date: Sat, 15 Nov 2025 21:22:01 +0100 Subject: [PATCH] Adding previous bot --- pawhub-bot.py | 133 ++++++++++++++++++++++++++++++++++++++++++++++++++ 1 file changed, 133 insertions(+) create mode 100644 pawhub-bot.py diff --git a/pawhub-bot.py b/pawhub-bot.py new file mode 100644 index 0000000..bbf0d8b --- /dev/null +++ b/pawhub-bot.py @@ -0,0 +1,133 @@ +from telegram import Update +from telegram.ext import ApplicationBuilder, CommandHandler, ContextTypes +import json +import os + +# Konfiguration +ADMINS = [ID1, ID2, ID3] # Telegram-IDs der Admins +LIST_FILE = "event_list.json" + +# Lade die Liste, falls vorhanden +if os.path.exists(LIST_FILE): + with open(LIST_FILE, "r") as f: + event_list = json.load(f) +else: + event_list = [] + +# Hilfsfunktion zum Speichern +def save_list(): + with open(LIST_FILE, "w") as f: + json.dump(event_list, f) + +# /anmeldung Handler +async def anmeldung(update: Update, context: ContextTypes.DEFAULT_TYPE): + if not context.args: + await update.message.reply_text("Bitte Namen angeben: /anmeldung Name") + return + name = " ".join(context.args) + if name in event_list: + await update.message.reply_text(f"{name}, du bist doch schon angemeldet.") + else: + event_list.append(name) + save_list() + await update.message.reply_text(f"{name} will unbedingt auch dabei sein!") + +# /abmeldung Handler +async def abmeldung(update: Update, context: ContextTypes.DEFAULT_TYPE): + if not context.args: + await update.message.reply_text("Bitte Namen angeben: /abmeldung Name") + return + name = " ".join(context.args) + if name in event_list: + event_list.remove(name) + save_list() + await update.message.reply_text(f"{name} kann nich mehr oder hat kein Bock auf uns.") + else: + await update.message.reply_text(f"{name}, du warst eh nich auf der Liste.") + +# /liste Handler (nur privat für Admins) +async def liste(update: Update, context: ContextTypes.DEFAULT_TYPE): + if update.effective_user.id not in ADMINS: + await update.message.reply_text("Epic fail, kein Zugriff für dich") + return + + if event_list: + antwort = "*Aktuelle Anmeldungen:*\n\n" + for i, name in enumerate(event_list, start=1): + antwort += f"{i}. {name}\n" + antwort += f"\n Insgesamt angemeldet: *{len(event_list)}*" + await update.message.reply_text( + antwort, parse_mode="Markdown" + ) + else: + await update.message.reply_text("Chill, es is noch gar keiner angemeldet.") + +# /reset Handler (nur privat für Admins, mit Archivierung) +import datetime +import shutil + +async def reset(update: Update, context: ContextTypes.DEFAULT_TYPE): + if update.effective_user.id not in ADMINS: + await update.message.reply_text("Epic fail, Zugriff verweigert") + return + + # Nur archivieren, wenn es überhaupt etwas gibt + if event_list: + timestamp = datetime.datetime.now().strftime("%Y-%m-%d_%H-%M-%S") + backup_file = f"event_list_{timestamp}.json" + try: + shutil.copy(LIST_FILE, backup_file) + await update.message.reply_text( + f"Ich hab die Liste mal gespeichert, falls du sie aus Versehen resettet hast, liegt jetz unter:\n`{backup_file}`", + parse_mode="Markdown" + ) + except Exception as e: + await update.message.reply_text(f"Fehler beim Sichern: {e}") + else: + await update.message.reply_text("Liste ist leer, nichts zu sichern") + + # Liste zurücksetzen (neue, leere Liste) + event_list.clear() + save_list() + await update.message.reply_text("WOOOSH! Und die Liste is wieder leer.") + +# /hilfe Handler +async def hilfe(update: Update, context: ContextTypes.DEFAULT_TYPE): + text = ( + "Dude, ich erklär dir mal wie das hier läuft:\n\n" + "In der Gruppe:\n" + "/anmeldung Name - zum Anmelden\n" + "/abmeldung Name - zum Abmelden\n" + "/status - check wie viele Fussel dabei sind\n\n" + ) + await update.message.reply_text(text) + +# /status Handler (für alle) +async def status(update: Update, context: ContextTypes.DEFAULT_TYPE): + count = len(event_list) + if count == 0: + text = "Is noch keiner eingecheckt..." + elif count == 1: + text = "Es ist aktuell *1 Fussel* dabei!" + else: + text = f"Es sind aktuell *{count} Fussel* dabei!" + await update.message.reply_text(text, parse_mode="Markdown") + +# Bot starten +def main(): + app = ApplicationBuilder().token("hier token").build() + + app.add_handler(CommandHandler("anmeldung", anmeldung)) + app.add_handler(CommandHandler("abmeldung", abmeldung)) + app.add_handler(CommandHandler("liste", liste)) + app.add_handler(CommandHandler("reset", reset)) + app.add_handler(CommandHandler("hilfe", hilfe)) + app.add_handler(CommandHandler("status", status)) + + print("Bot läuft...") + app.run_polling() + +if __name__ == "__main__": + main() + +