Anotações de trabalho após análise via Admin API e código do kernel do Discourse (ramo Cursor no repositório hoee).
Objeto
Na instância, a cartão administrativo: /admin/users/-4/chatbot (Chatbot na administração).
O que retornou o JSON administrativo (captura de verificação)
id: -4 (este é um bot conforme regras do kernel:user_id > 0apenas para usuários “vivos”)username: Chatbotadmin: truemoderator: falsepost_count: 0can_be_deleted: falsecan_be_anonymized: false
Por que can_be_deleted: false mesmo com zero posts
No Guardian#can_delete_user?, a exclusão é proibida se o usuário-alvo for admin. Isso não está relacionado ao número de posts no nosso caso.
Por que, manualmente via UI e HTTP administrativo, frequentemente “não dá”
Para operações como revoke admin / destroy, não passa Guardian#can_administer? em identificadores negativos: há uma condição de que o identificador do alvo deve ser positivo (obj.id.positive?). Portanto, requisições aos roteiros member no formato “como um username comum” retornam 404, enquanto com o segmento -4 é possível obter 403 invalid_access, mesmo quando o ator API é staff.
Resultado: remover admin e excluir a conta via Admin API padrão, com o mesmo UX usado para usuários normais, não é possível — é necessário outro caminho (abaixo).
Caminho suave, sem excluir a linha no banco de dados
Desative o módulo de bot de IA nas configurações do site: parâmetro ai_bot_enabled (false — comportamento do bot GPT e UI associada no chat/heads será desativado; a linha do usuário permanecerá).
Na máquina com checkout do repositório hoee e arquivo discourse.env adicionado, há um helper:
scripts/discourse-ai-chatbot-operator.sh audit— dump breve dos campos de/admin/users/-4/list.jsonai-bot-disable/ai-bot-enable— PUT emai_bot_enabled(chaves system dodiscourse.env, não publicar)
Caminho rígido: excluir realmente o usuário
Apenas no host do aplicativo Discourse, com cópia do banco de dados antes das alterações: na console Rails, remova o flag admin da linha (por exemplo, usando update_columns), depois use UserDestroyer de um admin vivo com id > 0 e delete_posts: true se necessário. O texto do bloco para cópia: scripts/discourse-ai-chatbot-operator.sh rails-destroy-snippet.
Riscos: o plugin discourse-ai pode recriar bots em atualizações; podem ocorrer mensagens sobre bot user missing enquanto o módulo não corrigir o estado.
Links no 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?
Se necessário, nas respostas é possível extrair uma instrução separada sobre como verificar o valor atual de ai_bot_enabled via Admin → Configurações → plugin discourse-ai, sem API.