Cuenta Chatbot id -4: ¿por qué no se puede eliminar mediante el panel de administración y qué alternativas existen?

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 > 0 solo para usuarios «vivos»)
  • username: Chatbot
  • admin: true
  • moderator: false
  • post_count: 0
  • can_be_deleted: false
  • can_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.json
  • ai-bot-disable / ai-bot-enable — PUT en ai_bot_enabled (claves system de discourse.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

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.

Actualización: cuenta eliminada

La operación en el host se realizó no mediante el Admin API (aún no permite acceder Guardian para un id negativo), sino mediante rails runner dentro del contenedor de producción app del usuario discourse:

  • se retiró la bandera admin del usuario User.find(-4) mediante update_columns + reload;
  • luego, UserDestroyer desde un administrador activo con id > 0 con la opción delete_posts: true (en nuestro caso, no había publicaciones).

Verificación desde fuera: GET /u/chatbot.json ya no devuelve al usuario, GET /admin/users/-4/list.jsonnot_found.

Recordatorio: al reactivar el módulo discourse-ai, el plugin puede volver a crear la cuenta del bot si es necesario.