Notas de trabajo después de la revisión mediante el API de administrador y el código del núcleo de Discourse (rama Cursor en el repositorio hoee).
Objeto
En la instancia, la tarjeta de administrador: /admin/users/-4/chatbot (Chatbot en la administración).
Qué devuelve el JSON administrativo (captura de verificación)
id: -4 (es un bot según las reglas del núcleo:user_id > 0solo para usuarios «vivos»)username: Chatbotadmin: truemoderator: falsepost_count: 0can_be_deleted: falsecan_be_anonymized: false
¿Por qué can_be_deleted: false aunque tenga cero publicaciones
En Guardian#can_delete_user? el borrado está prohibido si el usuario objetivo es admin. Esto no tiene relación con el número de publicaciones en nuestro caso.
¿Por qué manualmente mediante UI o HTTP administrativo a veces «no funciona»
Para operaciones como revoke admin / destroy, no pasa Guardian#can_administer? en caso de un ID negativo: allí hay una condición que exige que el identificador objetivo sea positivo (obj.id.positive?). Por lo tanto, las solicitudes a rutas member del tipo «como un username normal» devuelven 404, mientras que con el segmento -4 se puede obtener un 403 invalid_access, incluso cuando el actor del API es staff.
Conclusión: no es posible quitar el rol de admin ni eliminar la cuenta mediante el API de administrador de forma estándar, como se hace con usuarios normales — se requiere otro camino (abajo).
Camino suave sin borrar la fila en la base de datos
Desactivar el módulo de bot de IA en las configuraciones del sitio: el parámetro ai_bot_enabled (false — el comportamiento del bot GPT y la interfaz relacionada en mensajes privados/encabezado se atenúa; la fila del usuario puede permanecer).
En la máquina con checkout del repositorio hoee y archivo discourse.env añadido un helper:
scripts/discourse-ai-chatbot-operator.sh audit— dump breve de campos desde/admin/users/-4/list.jsonai-bot-disable/ai-bot-enable— PUT enai_bot_enabled(claves system dediscourse.env, no publicar)
Camino duro: eliminar realmente al usuario
Solo en el host del aplicativo Discourse, con un snapshot de la base de datos antes de las modificaciones: en la consola de Rails, quitar la bandera admin de la entrada (por ejemplo, con update_columns), luego usar UserDestroyer desde un admin vivo con id > 0 y delete_posts: true si es necesario. El texto del bloque para copiar: scripts/discourse-ai-chatbot-operator.sh rails-destroy-snippet.
Riesgos: el plugin discourse-ai puede recrear bots al actualizar; pueden aparecer mensajes sobre bot user missing mientras el módulo no arregle el estado.
Enlaces al código upstream
- discourse/discourse
app/models/user.rb-human?/ IDs negativos - discourse/discourse
lib/guardian.rb-can_administer? - discourse/discourse
lib/guardian/user_guardian.rb-can_delete_user?
Si es necesario, en las respuestas se puede extraer una instrucción separada sobre «cómo verificar el valor actual de ai_bot_enabled a través de Administración → Configuración → plugin discourse-ai» sin usar API.