Ein Telegram-Bot ist eines der lohnendsten Einsteigerprojekte in Python: Mit wenigen Dutzend Zeilen Code entsteht etwas, das wirklich funktioniert und das man Freunden zeigen kann. Auf genau diesem Weg sind meine Bots mit echten Nutzern entstanden — etwa der Preisüberwachungs-Bot in meinem Portfolio.

Voraussetzungen

Schritt 1: Token vom BotFather holen

Öffnen Sie in Telegram den offiziellen Bot @BotFather und:

  1. Senden Sie /newbot
  2. Vergeben Sie einen Anzeigenamen (z. B. „Mein erster Bot”)
  3. Vergeben Sie einen Benutzernamen, der auf bot endet (z. B. mein_erster_1234_bot)

BotFather antwortet mit einem Token wie:

7412345678:AAHfXw3v9tK2mQ...

Dieses Token ist der Schlüssel zu Ihrem Bot — niemals weitergeben und niemals auf GitHub einchecken.

Schritt 2: Bibliothek installieren

Installieren Sie in einer virtuellen Umgebung die beliebteste Telegram-Bot-Bibliothek:

pip install python-telegram-bot

Schritt 3: Ein Bot, der Hallo sagt

Erstellen Sie bot.py:

from telegram import Update
from telegram.ext import Application, CommandHandler, MessageHandler, filters, ContextTypes

TOKEN = "hier-dein-token-einsetzen"

async def start(update: Update, context: ContextTypes.DEFAULT_TYPE):
    await update.message.reply_text("Hallo! Ich bin dein erster Bot 🤖")

async def echo(update: Update, context: ContextTypes.DEFAULT_TYPE):
    await update.message.reply_text(f"Du hast gesagt: {update.message.text}")

app = Application.builder().token(TOKEN).build()
app.add_handler(CommandHandler("start", start))
app.add_handler(MessageHandler(filters.TEXT & ~filters.COMMAND, echo))

print("Bot läuft...")
app.run_polling()

Ausführen:

python bot.py

Suchen Sie Ihren Bot nun in Telegram und senden Sie /start — er antwortet! Jede andere Textnachricht wirft er als Echo zurück.

Den Code verstehen

  • CommandHandler("start", start) — sendet ein Nutzer /start, läuft die Funktion start
  • MessageHandler(filters.TEXT & ~filters.COMMAND, echo) — jede Textnachricht (außer Befehlen) geht an echo
  • run_polling() — der Bot fragt Telegrams Server laufend: „Gibt es neue Nachrichten?”

Schritt 4: Eine echte Funktion

Bauen wir einen Befehl /dollar, der (vorerst) eine feste Zahl liefert:

async def dollar(update: Update, context: ContextTypes.DEFAULT_TYPE):
    await update.message.reply_text("USD heute: 100.500")

app.add_handler(CommandHandler("dollar", dollar))

Der natürliche nächste Schritt? Den echten Preis von einer Website holen — genau das Thema von Web-Scraping mit Python.

Übung

Fügen Sie einen /help-Befehl hinzu, der die Befehle des Bots auflistet, und erweitern Sie echo um eine Bedingung, die auf „hallo” eine besondere Antwort gibt.

Zurück zu den Tutorials