He importado un foro de 20 años de antigüedad a Discourse.
Contiene muchas cuentas inactivas o de spam, así como mensajes no deseados.
Me gustaría realizar una limpieza.
He configurado todos mis usuarios en el nivel de confianza 0.
Intenté averiguar cuántos usuarios nunca han publicado ningún mensaje con esta consulta de Data Explorer:
SELECT COUNT (DISTINCT user_id) from posts
El resultado es 28530.
Luego intenté saber cuántos usuarios tengo en total:
SELECT COUNT (DISTINCT id) FROM users
El resultado es 180000 (las estadísticas de vBulletin confirmaban que teníamos 180000 cuentas).
Ejecuté el trabajo de Sidekiq CleanUpInactiveUsers.
Solo se eliminaron unos pocos cientos de usuarios. Revisé uno de estos perfiles inactivos y no mostraba actividad: ni publicaciones, ni temas… Sin embargo, Discobot les envió un mensaje después de que importara todos los usuarios desde vBulletin. Esto ocurrió hace 5 días.
Así que en la configuración de Discourse, establecí limpiar usuarios inactivos después de días en 1.
Ejecuté nuevamente el trabajo de Sidekiq CleanUpInactiveUsers.
Perdí aproximadamente 1000 usuarios.
Aún tengo 178000 usuarios y sé que la mayoría son perfiles vacíos e inactivos sin ningún mensaje.
¿Alguna idea de por qué no son eliminados por CleanUpInactiveUsers?
Además, dado que hay muchas cuentas y mensajes de spam, ¿es posible activar la detección de spam en usuarios y mensajes existentes, y limpiar todo eso también?
Honestamente, no lo sé. No tengo idea de qué usa Discourse para detectar y prevenir el spam.
Además, creo que un buen número de mis spammers publicaron mensajes en los perfiles de usuarios públicos, una función que no existe en Discourse.
Estos mensajes se importaron en Discourse como temas “normales”, sin categoría ni título, lo que los hace fáciles de identificar:
No quiero eliminar todos estos mensajes sin título, ya que la mayoría son inofensivos y podrían contener información que algunos usuarios querrían recuperar.
Lo que me gustaría hacer es eliminar los usuarios que publicaron únicamente temas sin título y también borrar los temas de ese usuario.
¿Se podría hacer algo así de manera bastante sencilla con comandos de Rails?
Puede que requiera un poco de experimentación, pero sí. Algo como esto podría funcionar como punto de partida:
User.find_each do |user|
untitled_topic_count = user.topics.where(title: "").count
titled_topic_count = user.topics.where.not(title: "").count
if untitled_topic_count > 0 && titled_topic_count == 0
# eliminar los temas y/o el usuario
end
end