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 > 0gilt nur für „lebende“ Nutzer)username: Chatbotadmin: truemoderator: falsepost_count: 0can_be_deleted: falsecan_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.jsonai-bot-disable/ai-bot-enable– PUT aufai_bot_enabled(Schlüssel system ausdiscourse.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
- discourse/discourse
app/models/user.rb-human?/ negative IDs - discourse/discourse
lib/guardian.rb-can_administer? - discourse/discourse
lib/guardian/user_guardian.rb-can_delete_user?
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.