Sie haben endlich die schwierigeren Teile des Kurses erreicht, in denen das Ziel darin besteht, die Bot-Anmeldungen für alle verfügbaren Bots zu automatisieren.

Die Themen dieses Abschnitts umfassen Folgendes:

  1. Wie alles zusammenpasst
  2. Automatisierte Anmeldung und Umgehung von Captchas
  3. Datenbankmodelle für Bot-Profile
  4. Backend-Routen
  5. Frontend-Vorlage
  6. Testen

Wie alles zusammenpasst

Hier ist ein allgemeiner Überblick darüber, wie alle Komponenten in tornet_scraper integriert sind:

  1. In Abschnitt 3.1 haben Sie Ihre Entwicklungsumgebung eingerichtet, um loslegen zu können.
  2. In Abschnitt 3.2 haben Sie gelernt, wie Sie Proxys für sichere Verbindungen generieren.
  3. In Abschnitt 3.3 haben Sie sich mit der Erstellung von APIs für die CAPTCHA-Umgehung, der Identifizierung von Initial Access Brokern (IABs) und der Übersetzung von Daten befasst.

Das sind beeindruckende Fähigkeiten. Nun werden wir uns damit befassen, wie diese Elemente zusammenwirken, um Bot-Profile zu verwalten. So funktionieren die Funktionen zusammen:

  1. Proxy-Generierung: Mit dem Proxy-Generator erstellen Sie Tor-Proxys, die Bot-Profile benötigen, um sicher auf die Tor-Website zuzugreifen.
  2. API-Verwaltung: Mit der API-Verwaltung fügen Sie eine CAPTCHA-API hinzu, mit der Bots CAPTCHAs umgehen und sich erfolgreich anmelden können.
  3. Bot-Verwaltung:
    1. Verwenden Sie die Benutzeroberfläche, um Bots zu erstellen, indem Sie deren Benutzernamen, Passwort, Zweck und zugewiesenen Proxy eingeben.
    2. Geben Sie die Anmelde-URL für die Bots an.
    3. Klicken Sie auf „Bot-Anmeldung durchführen”, um alle Bot-Konten anzumelden und CAPTCHAs automatisch zu umgehen.
    4. Nach der Anmeldung aktualisiert das System eine Tabelle, um anzuzeigen, welche Konten aktive Sitzungen haben.

Wenn Sie „Bot-Anmeldung durchführen“ zweimal für alle Konten ausführen, ruft das Backend neue Sitzungen ab. Nur weil eine Sitzung als aktiv markiert ist, bedeutet dies nicht, dass sie gültig ist. Es wird dringend empfohlen, die Bot-Anmeldung bei jedem Start der App durchzuführen, um aktive und funktionierende Sitzungen sicherzustellen.


Automatische Anmeldung und CAPTCHA-Umgehung

Dieses Thema sollte niemanden einschüchtern, es ist keine Zauberei. In früheren Abschnitten haben wir uns mit der Umgehung von CAPTCHAs mithilfe des ChatGPT-Modells o3 befasst, aber da die OpenAI-API für o3 keine Bilder unterstützt, verwenden wir nun das Modell „gpt-4.1“, das sich meiner Erfahrung nach als effektiv für die Umgehung von CAPTCHAs erwiesen hat.

Denken Sie immer daran, dass viele KI-Modelle die Umgehung von CAPTCHAs für böswillige Zwecke verbieten, da dies gegen ihre Nutzungsbedingungen verstößt und illegal sein kann. In diesem Kurs verwenden wir diese Modelle in einer kontrollierten Umgebung zu Bildungszwecken und stellen sicher, dass alle gesetzlichen Standards eingehalten werden. Ich unterstütze oder dulde keine illegalen Aktivitäten mit KI-Modellen.

Auf der OpenAI-Plattform können Sie im Playground mit verschiedenen Modellen experimentieren. Ich empfehle, dies vor dem Fortfahren auszuprobieren, da zum Zeitpunkt der Lektüre dieses Artikels möglicherweise neuere Modelle verfügbar sind. Da KI-Modelle sich monatlich weiterentwickeln, gibt es möglicherweise ein fortschrittlicheres Modell für OCR, wenn Sie diesen Abschnitt bearbeiten.

Der Prozess zum Umgehen von CAPTCHAs ist ganz einfach:

  1. Öffnen Sie die Anmeldeseite.
  2. Laden Sie das CAPTCHA-Bild herunter.
  3. Passen Sie die Größe an, um die Lesbarkeit zu verbessern.
  4. Kodieren Sie das Bild als Base64 und senden Sie es mit einer Eingabeaufforderung an das KI-Modell.
  5. Rufen Sie den extrahierten CAPTCHA-Text ab.
  6. Verwenden Sie den CAPTCHA-Text, den Benutzernamen und das Passwort, um sich anzumelden
  7. Rufen Sie nach erfolgreicher Anmeldung die Sitzung ab
  8. Verwenden Sie die Sitzung, um Marktplätze, Beiträge und Profile zu scrapen

Das mag komplex erscheinen, aber wenn man es in einzelne Funktionen zerlegt, ist leicht zu verstehen, wie alles zusammenhängt.

Der Code für die Anmeldung mit CAPTCHA-Umgehung befindet sich in app/services/tornet_forum_login.py.

Funktionen

  1. image_to_base64:

    • Zweck: Konvertiert eine Bilddatei in eine Base64-kodierte Zeichenfolge für die API-Übermittlung.
    • Wichtige Parameter:
      • image_path: Pfad zur Bilddatei.
    • Rückgabewert: Base64-Zeichenfolge oder None bei einem Fehler.
    • Details: Liest die Bilddatei im Binärmodus, codiert sie in Base64 und protokolliert den Vorgang. Gibt None zurück, wenn der Dateizugriff oder die Codierung fehlschlägt.
  2. resize_image:

    • Zweck: Passt die Größe eines Bildes an die angegebenen Abmessungen an, um eine konsistente CAPTCHA-Verarbeitung zu gewährleisten.
    • Wichtige Parameter:
      • image_path: Pfad zur Eingabebilddatei.
      • output_path: Pfad zum Speichern des in der Größe angepassten Bildes.
      • size: Tupel mit den Zielabmessungen (Standard: 354x112).
    • Rückgabewerte: True bei Erfolg, False bei einem Fehler.
    • Details: Verwendet PIL, um die Größe des Bildes mit LANCZOS-Resampling anzupassen, speichert es als PNG und protokolliert den Vorgang. Gibt False zurück, wenn die Größenänderung oder das Speichern fehlschlägt.
  3. clean_captcha_text:

    • Zweck: Extrahiert einen 6-stelligen CAPTCHA-Code (Großbuchstaben und Zahlen) aus Rohtext.
    • Wichtige Parameter:
      • captcha_text: Textausgabe aus der OpenAI-API.
    • Rückgabewert: 6-stelliger Code oder None, wenn die Extraktion fehlschlägt.
    • Details: Verwendet einen regulären Ausdruck ([A-Z0-9]{6}) zum Auffinden des Codes, protokolliert das bereinigte Ergebnis und gibt None zurück, wenn keine Übereinstimmung gefunden wird oder ein Fehler auftritt.
  4. solve_captcha:

    • Zweck: Löst ein CAPTCHA-Bild mithilfe der OpenAI-API.
    • Wichtige Parameter:
      • image_path: Pfad zum CAPTCHA-Bild.
      • api_key: OpenAI-API-Schlüssel.
      • model_name: OpenAI-Modell (z. B. GPT-4).
      • max_tokens: Maximale Anzahl von Tokens für die API-Antwort.
      • prompt: Anweisungstext für die API.
    • Rückgabewerte: Bereinigter 6-stelliger CAPTCHA-Code oder None bei einem Fehler.
    • Details:
      • Passt die Größe des CAPTCHA-Bildes mit resize_image auf eine feste Größe an.
      • Konvertiert das in der Größe angepasste Bild mit image_to_base64 in Base64.
      • Sendet das Base64-Bild und die Eingabeaufforderung über client.chat.completions.create an die OpenAI-API und fordert den CAPTCHA-Text an.
      • Bereinigt die API-Antwort mit clean_captcha_text und gibt das Ergebnis zurück. Protokolliert Fehler und gibt bei einem Fehler None zurück.
  5. „login_to_tor_website“:

    • Zweck: Melden Sie sich bei einer Tor-Website an, indem Sie CAPTCHAs lösen und Anmeldedaten übermitteln, und geben Sie eine Sitzung mit Cookies zurück.
    • Wichtige Parameter:
      • „api_key“: OpenAI-API-Schlüssel zum Lösen von CAPTCHAs.
      • max_tokens: Maximale Anzahl von Tokens für die OpenAI-API.
      • model_name: Name des OpenAI-Modells.
      • login_url: URL der Anmeldeseite.
      • username: Benutzername für die Anmeldung.
      • password: Passwort für die Anmeldung.
      • tor_proxy: URL des Tor-Proxys (z. B. socks5h://127.0.0.1:9050).
      • prompt: Eingabeaufforderung für die Lösung von OpenAI-CAPTCHAs.
      • timeout: Zeitlimit für Anfragen (Standard: 20 Sekunden).
    • Rückgabewert: requests.Session mit Cookies bei Erfolg, None bei Fehler.
    • Details:
      • Erstellt eine requests.Session mit dem Tor-Proxy und einem zufälligen User-Agent (aus gen_desktop_ua).
      • Versucht bis zu 9 Mal die Anmeldung, mit einer Wartezeit von 5 Minuten nach dem maximalen Anzahl an Versuchen.
      • Ruft die Anmeldeseite auf, extrahiert die CAPTCHA-Bild-URL mit BeautifulSoup und lädt sie herunter.
      • Löst das CAPTCHA mit solve_captcha.
      • Übermittelt die Anmeldedaten (Benutzername, Passwort, CAPTCHA-Code und alle versteckten Formularfelder wie CSRF-Token) per POST.
      • Überprüft die Antwort auf Erfolg („profile” und „logout” im Text), ungültige Anmeldedaten oder ungültiges CAPTCHA. Bei Fehlern wird der Vorgang wiederholt, temporäre Dateien (CAPTCHA-Bilder) werden gelöscht und bei Erfolg die Sitzung mit Cookies zurückgegeben.

Das Skript versucht die Anmeldung bis zu 9 Mal, bevor es eine Pause von 5 Minuten einlegt und es erneut versucht. Die Lösung von CAPTCHAs kann unvorhersehbar sein, da einige CAPTCHAs leichter zu lösen sind als andere. Die Strategie besteht darin, die Versuche so lange fortzusetzen, bis eine erfolgreiche Anmeldung erreicht ist. Meiner Erfahrung nach ist dies in der Regel nach 5 Versuchen der Fall.


Datenbankmodelle für Bot-Profile

Die Datenbankmodelle für Bot-Profile enthalten alle erforderlichen Details, wie z. B. den Zweck des Bots, die URL „tornet_forum“ und die Bot-Konten. Diese sind jedoch zur besseren Verwaltung und Übersichtlichkeit in separaten Modellen organisiert.

Ihre Modelle befinden sich in „app/database/models.py“. Hier sind sie:

class BotPurpose(enum.Enum):
    SCRAPE_MARKETPLACE = "scrape_marketplace"
    SCRAPE_POST = "scrape_post"
    SCRAPE_PROFILE = "scrape_profile"


class BotProfile(Base):
    __tablename__ = "bot_profiles"

    id = Column(Integer, primary_key=True, index=True)
    username = Column(String, unique=True, nullable=False)
    password = Column(String, nullable=False)
    purpose = Column(Enum(BotPurpose), nullable=False)
    tor_proxy = Column(String, nullable=True)
    user_agent = Column(String, nullable=True)
    session = Column(Text)
    timestamp = Column(DateTime, default=datetime.utcnow)

BotPurpose definiert die Hauptaufgabe eines Bots und unterstützt drei Arten des Scrapings:

  1. Scraping von Marktplatz-Post-Links (ohne Inhalt).
  2. Scraping von Beiträgen mit ihren Links.
  3. Scraping von Beitragslinks aus Benutzerprofilen.

Dies erfordert unterschiedliche Bot-Typen für jeden Zweck.


Backend-Routen

Das Modul tornet_forum_login.py übernimmt die zentralen Anmeldefunktionen, sodass hierfür keine besonderen Interaktionen erforderlich sind. Die Bot-Profilschnittstelle erfordert die folgenden Schlüsselfunktionen:

  1. Auflisten vorhandener Bots.
  2. Erstellen neuer Bots.
  3. Aktualisieren von Bot-Details.
  4. Löschen von Bots.
  5. Erstellen und Ändern von Onion-URLs.
  6. Ausführen der Anmeldung.

Diese entsprechen den zuvor beschriebenen CRUD-Operationen. Die Anmeldefunktion basiert auf der Funktion „login_to_tor_website“, sodass über die Standard-CRUD-Funktionen hinaus keine neuen Konzepte eingeführt werden.

Ihr Code befindet sich in „app/routes/bot_profile.py”.

Funktionen

  1. „get_bot_profiles”:

    • Zweck: Ruft alle Bot-Profile aus der Datenbank ab.
    • Wichtige Parameter:
    • „db”: SQLAlchemy „Session” (über „Depends(get_db)”).
    • Rückgabewert: Liste von Wörterbüchern mit Profildetails (ID, Benutzername, maskiertes Passwort, Zweck, Tor-Proxy, Sitzungsstatus, User-Agent, Zeitstempel).
    • Details: Fragt die Tabelle BotProfile ab, maskiert das Passwort aus Sicherheitsgründen und gibt die Profildaten zurück. Löst bei Fehlern eine HTTPException (500) aus.
  2. create_bot_profile:

    • Zweck: Erstellt ein neues Bot-Profil.
    • Wichtige Parameter:
      • profile: BotProfileCreate mit Profildaten.
      • request: FastAPI Request für sitzungsbasierte Flash-Meldungen.
      • db: SQLAlchemy Session.
    • Rückgabewert: Wörterbuch mit Erfolgsmeldung und Flash-Meldung.
    • Details: Überprüft auf doppelte Benutzernamen, erstellt eine BotProfile-Instanz mit einem zufälligen User-Agent (aus gen_desktop_ua), speichert sie in der Datenbank und fügt eine erfolgreiche Flash-Meldung zur Sitzung hinzu. Löst bei einem Fehler eine HTTPException (400 für Duplikate, 500 für Fehler) mit Rollback aus.
  3. update_bot_profile:

    • Zweck: Aktualisiert ein vorhandenes Bot-Profil.
    • Wichtige Parameter:
      • profile_id: Ganzzahlige ID des Profils.
      • profile: BotProfileUpdate mit aktualisierten Feldern.
      • request: FastAPI Request für Flash-Meldungen.
      • db: SQLAlchemy Session.
    • Rückgabewerte: Wörterbuch mit Erfolgsmeldung und Flash-Meldung.
    • Details: Überprüft, ob das Profil vorhanden ist, sucht nach doppelten Benutzernamen (falls geändert), aktualisiert Felder, die nicht None sind (einschließlich der Aufzählung BotPurpose), und übernimmt die Änderungen. Fügt eine erfolgreiche Flash-Meldung hinzu. Löst HTTPException aus (404, wenn nicht gefunden, 400 bei Duplikaten, 500 bei Fehlern) mit Rollback bei Fehler.
  4. delete_bot_profile:

    • Zweck: Löscht ein Bot-Profil.
    • Wichtige Parameter:
      • profile_id: Ganzzahlige ID des Profils.
      • request: FastAPI Request für Flash-Meldungen.
      • db: SQLAlchemy Session.
    • Rückgabewerte: Wörterbuch mit Erfolgsmeldung und Flash-Meldung.
    • Details: Überprüft, ob das Profil vorhanden ist, löscht es aus der Tabelle BotProfile und fügt eine erfolgreiche Flash-Meldung hinzu. Löst bei einem Fehler einen HTTPException (404, wenn nicht gefunden, 500 bei Fehlern) mit Rollback aus.
  5. get_onion_url:

    • Zweck: Ruft die neueste Onion-URL ab.
    • Wichtige Parameter:
      • db: SQLAlchemy Session.
    • Rückgabewert: Wörterbuch mit der neuesten OnionUrl.url oder None.
    • Details: Fragt die Tabelle OnionUrl ab, sortiert nach Zeitstempel (absteigend), und gibt die neueste URL zurück. Löst bei Fehlern eine HTTPException (500) aus.
  6. set_onion_url:

    • Zweck: Erstellt einen neuen Onion-URL-Eintrag.
    • Wichtige Parameter:
      • onion: OnionUrlCreate mit der URL.
      • request: FastAPI Request für Flash-Meldungen.
      • db: SQLAlchemy Session.
    • Rückgabewert: Wörterbuch mit Erfolgsmeldung und Flash-Meldung.
    • Details: Erstellt eine OnionUrl-Instanz, speichert sie in der Datenbank und fügt eine erfolgreiche Flash-Meldung hinzu. Löst bei einem Fehler HTTPException (500) mit Rollback aus.
  7. perform_bot_login:

    • Zweck: Automatisiert die Anmeldung für alle Bot-Profile mithilfe einer CAPTCHA-API.
    • Wichtige Parameter:
      • request: FastAPI Request für Flash-Meldungen.
      • db: SQLAlchemy Session.
    • Rückgabewert: Wörterbuch mit Anmeldergebnissen und Flash-Meldung.
    • Details:
      • Ruft die neueste OnionUrl und die aktive captcha_api aus der Tabelle APIs ab.
      • Fragt alle BotProfile-Einträge ab und versucht, sich für jeden mit login_to_tor_website (aus tornet_forum_login.py) mit CAPTCHA-API-Parametern anzumelden.
      • Wenn ein Sitzungscookie empfangen wird, formatiert es dieses als session=<value>, aktualisiert das Feld session des Profils und erhöht die Anzahl der erfolgreichen Anmeldungen. Fehlgeschlagene Anmeldungen werden protokolliert und gesammelt.
      • Gibt eine Zusammenfassungsmeldung mit der Anzahl der erfolgreichen und fehlgeschlagenen Anmeldungen zurück und fügt eine Flash-Meldung hinzu (Erfolg, wenn eine Anmeldung erfolgreich war, andernfalls Fehler). Löst eine HTTPException (400 für fehlende URL/API/Profile, 500 für Fehler) mit Rollback bei Fehler aus.

Frontend-Vorlage

Ihr Vorlagencode befindet sich in „app/templates/bot_profile.html“.

Die Vorlage „bot_profile.html“ bietet eine Benutzeroberfläche zum Verwalten von Bot-Profilen und Onion-URLs in der Anwendung „tornet_scraper“, die über API-Aufrufe mit dem Backend interagiert, um CRUD-Operationen für Bot-Profile durchzuführen, Onion-URLs festzulegen und Anmeldungen zu automatisieren. Nachfolgend finden Sie eine kurze Erläuterung der Kernfunktionen und Backend-Interaktionen.

  1. Onion-URL-Verwaltung:

    • Zweck: Ermöglicht Benutzern das Festlegen und Anzeigen der .onion-URL für den Zugriff auf Tor-Websites.
    • Backend-Interaktion:
      • Ein Eingabefeld und die Schaltfläche „Update .onion URL” lösen setOnionUrl() aus, wodurch eine AJAX-POST-Anfrage mit der eingegebenen URL an /api/bot-profile/onion-url (verarbeitet von bot_profile.py::set_onion_url) gesendet wird.
      • Das Backend speichert die URL in der Tabelle „OnionUrl“, fügt eine Erfolgsmeldung zur Sitzung hinzu und gibt eine erfolgreiche Antwort zurück. Bei Erfolg wird die Seite neu geladen und „loadOnionUrl()“ ruft die neueste URL über eine GET-Anfrage an „/api/bot-profile/onion-url“ ab und aktualisiert die Anzeige. Fehler lösen eine Fehlermeldung aus.
  2. Erstellung eines Bot-Profils:

    • Zweck: Ermöglicht das Hinzufügen neuer Bot-Profile.
    • Backend-Interaktion:
      • Die Schaltfläche „Bot hinzufügen” öffnet ein Modal mit Feldern für Benutzername, Passwort, Zweck (Dropdown: scrape_marketplace, scrape_post, scrape_profile), Tor-Proxy und Sitzung (optional).
      • Die Funktion createBotProfile() sendet eine AJAX-POST-Anfrage an /api/bot-profile/create (verarbeitet von bot_profile.py::create_bot_profile) mit den Formulardaten.
      • Das Backend validiert den Benutzernamen, erstellt ein BotProfile mit einem zufälligen User-Agent, speichert es in der Datenbank und fügt eine Erfolgsmeldung hinzu. Bei Erfolg wird das Modal geschlossen und die Seite neu geladen. Fehler (z. B. doppelter Benutzername) lösen eine Fehlermeldung aus.
  3. Bot-Profilauflistung und -aktualisierungen:

    • Zweck: Zeigt eine Tabelle mit Bot-Profilen an und aktualisiert sie.
    • Backend-Interaktion:
      • Die Funktion loadBotProfiles(), die beim Laden der Seite und durch die Schaltfläche „Aktualisieren“ ausgelöst wird, sendet eine AJAX-GET-Anfrage an /api/bot-profile/list (verarbeitet durch bot_profile.py::get_bot_profiles).
      • Das Backend gibt eine Liste der Profile (ID, Benutzername, maskiertes Passwort, Zweck, Tor-Proxy, Sitzungsstatus, User-Agent, Zeitstempel) zurück und füllt damit die Tabelle. Fehler lösen eine Fehlermeldung aus.
      • Die Tabelle wird nach dem Erstellen, Aktualisieren oder Löschen automatisch aktualisiert.
  4. Bearbeiten von Bot-Profilen:

    • Zweck: Ermöglicht die Aktualisierung bestehender Bot-Profile.
    • Backend-Interaktion:
      • Die Schaltfläche „Bearbeiten“ in jeder Tabellenzeile ruft openEditModal() auf und füllt ein Modalfenster mit Profildaten.
      • Die Funktion updateBotProfile() sendet eine AJAX-PUT-Anfrage an /api/bot-profile/{profile_id} (verarbeitet von bot_profile.py::update_bot_profile) mit den aktualisierten Feldern (Benutzername, Passwort, Zweck, Tor-Proxy, User-Agent, Sitzung; optionale Felder können unverändert bleiben).
      • Das Backend validiert und aktualisiert das BotProfile und fügt eine Erfolgsmeldung hinzu. Bei Erfolg wird das Modal geschlossen und die Seite neu geladen. Fehler (z. B. doppelter Benutzername) lösen eine Fehler-Flash-Meldung aus.
  5. Bot-Profil löschen:

    • Zweck: Löscht ein Bot-Profil.
    • Backend-Interaktion:
      • Die Schaltfläche „Löschen” in jeder Tabellenzeile öffnet über openDeleteModal() ein Bestätigungsmodal, in dem die Profil-ID gespeichert wird.
      • Die Funktion deleteBotProfile() sendet eine AJAX-DELETE-Anfrage an /api/bot-profile/{profile_id} (verarbeitet von bot_profile.py::delete_bot_profile).
      • Das Backend löscht das Profil aus der Tabelle BotProfile und fügt eine Erfolgsmeldung hinzu. Bei Erfolg wird das Modal geschlossen und die Seite neu geladen. Fehler lösen eine Fehlermeldung aus.
  6. Automatische Bot-Anmeldung:

    • Zweck: Löst die Anmeldung für alle Bot-Profile mithilfe der CAPTCHA-Lösung aus.
    • Backend-Interaktion:
      • Die Schaltfläche „Bot-Anmeldung durchführen“ ruft performBotLogin() auf und sendet eine AJAX-POST-Anfrage an /api/bot-profile/perform-login.
      • Das Backend ruft die neueste Onion-URL, die aktive CAPTCHA-API und alle Profile ab und verwendet dann „login_to_tor_website“, um jedes Profil zu authentifizieren, wobei Sitzungscookies in der Tabelle „BotProfile“ gespeichert werden. Es gibt eine Zusammenfassung der erfolgreichen und fehlgeschlagenen Anmeldungen mit einer Flash-Meldung zurück (Erfolg, wenn eine Anmeldung erfolgreich war, andernfalls Fehler).
      • Bei Erfolg oder Fehler wird die Seite neu geladen und Flash-Meldungen zeigen das Ergebnis an.

Testen

Um diese Funktionalität zu testen, müssen Sie zunächst eine Captcha-API hinzufügen. Ich empfehle Ihnen, einen gpt-4.1 API-Schlüssel zu beantragen und ihn über die Seite API-Verwaltung hinzuzufügen.

Als Eingabeaufforderung können Sie Folgendes verwenden:

The attached image is 6 characters, it contains letters and numbers. The letters are all uppercase. I want you to analyze the image and extract the characters for me, send the combined characters as answer.

Nachdem alles erledigt ist, sollten Sie sich bei einem oder mehreren Konten anmelden können und deren Sitzungen werden aktualisiert. Wenn die Sitzung auf „true“ gesetzt ist, wurde sie wahrscheinlich ausgefüllt.

UI zum Verwalten von Bot-Profilen