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()