Chatbot-Konto ID -4: Warum kann es nicht über die Admin-Oberfläche gelöscht werden und welche Workarounds gibt es?

Arbeitsnotizen nach dem Durchgang durch das Admin-API und den Kernel-Code von Discourse (Cursor-Branch im Repository hoee).

Objekt

Auf dem Instanz-Admin-Karte: /admin/users/-4/chatbot (Chatbot im Admin-Bereich).

Was liefert der Admin-JSON (Schnappschuss der Prüfung)

  • id: -4 (dies ist gemäß Kernel-Regel ein Bot: user_id > 0 gilt nur für „lebende“ Nutzer)
  • username: Chatbot
  • admin: true
  • moderator: false
  • post_count: 0
  • can_be_deleted: false
  • can_be_anonymized: false

Warum can_be_deleted: false, obwohl 0 Beiträge

In Guardian#can_delete_user? ist die Löschung verboten, wenn der Ziel-Nutzer Admin ist. Dies ist in unserem Fall unabhängig von der Anzahl der Beiträge.

Warum manuell über UI und Admin-HTTP oft „nicht klappt“

Für Aktionen wie revoke admin / destroy wird bei negativem id Guardian#can_administer? nicht durchlaufen: dort gibt es die Bedingung, dass der Ziel-Identifikator positiv sein muss (obj.id.positive?). Daher führen Anfragen an Member-Routen im Stil „wie bei einem normalen username“ zu 404, während mit Segment -4 ein 403 invalid_access möglich ist, selbst wenn der API-Aktor Staff ist.

Ergebnis: Admin-Rechte entfernen und Konto löschen über das „normale“ Admin-API (mit dem gleichen UX wie für Menschen) ist nicht möglich – ein anderer Pfad ist erforderlich (siehe unten).

Weicher Weg ohne Löschung der Zeile in der Datenbank

Deaktiviere den AI-Bot-Modul in den Website-Einstellungen: Parameter ai_bot_enabled (false – das Verhalten des GPT-Bots und das zugehörige UI in den PMs / Header wird gedämpft; die Nutzerzeile bleibt dabei erhalten).

Auf einem System mit checkout des Repositories hoee und Datei discourse.env wird ein Hilfs-Script bereitgestellt:

  • scripts/discourse-ai-chatbot-operator.sh audit – kurzer Dump der Felder aus /admin/users/-4/list.json
  • ai-bot-disable / ai-bot-enable – PUT auf ai_bot_enabled (Schlüssel system aus discourse.env, nicht veröffentlichen)

Harter Weg: Nutzer wirklich löschen

Nur auf dem Discourse-Anwendungshost, mit Datenbank-Snapshot vor den Änderungen: In der Rails-Konsole entferne den admin-Flag von der Zeile (z. B. update_columns), dann löse UserDestroyer von einem echten Admin mit id > 0 und delete_posts: true bei Bedarf. Der Textblock zum Kopieren: scripts/discourse-ai-chatbot-operator.sh rails-destroy-snippet.

Risiken: Der Plugin discourse-ai kann bei Updates die Bots neu erstellen; es können Meldungen über „missing bot user“ auftreten, bis das Modul den Zustand repariert.

Code-Referenzen upstream

Wenn gewünscht, können in den Antworten separate Anweisungen „wie man das aktuelle ai_bot_enabled-Wert über Admin → Einstellungen → Plugin discourse-ai prüft“ ohne API ausgeben.

Aktualisierung: Konto wurde gelöscht

Die Aktion auf dem Host wurde nicht über den Admin-API-Endpoint durchgeführt (dort wird weiterhin kein Zugriff für Guardian mit negativem id gewährt), sondern über rails runner innerhalb des Produktionscontainers app unter dem Benutzer discourse:

  • Der Admin-Flag für User.find(-4) wurde über update_columns + reload entfernt;
  • anschließend wurde UserDestroyer von einem aktiven Administrator mit id > 0 mit der Option delete_posts: true aufgerufen (in unserem Fall gab es keine Beiträge).

Überprüfung von außen: GET /u/chatbot.json liefert den Benutzer nicht mehr, GET /admin/users/-4/list.jsonnot_found.

Erinnerung: Bei erneutem Aktivieren des discourse-ai-Moduls kann der Plugin das Bot-Konto bei Bedarf wieder erstellen.