Varie domande sulla pulizia di un vbulletin importato

Ciao,
ho importato un forum vecchio di 20 anni su Discourse.
Ci sono molti account inutilizzati o spam e messaggi spam.
Vorrei eseguire una pulizia.

Ho impostato tutti i miei utenti al livello di fiducia 0.
Ho provato a scoprire quanti utenti non hanno mai pubblicato alcun messaggio con questa query di Data Explorer:

SELECT COUNT (DISTINCT user_id) from posts

Il conteggio è 28530.

Ho provato a sapere quanti utenti ho in totale:

SELECT COUNT (DISTINCT id) FROM users

Il conteggio è 180000 (le statistiche di vBulletin confermavano che avevamo effettivamente 180000 account).

Ho avviato il job Sidekiq CleanUpInactiveUsers.
Solo alcune centinaia di utenti sono stati rimossi. Ho esaminato uno di questi profili inutilizzati e non ho trovato alcuna attività: nessun post, nessun argomento… Tuttavia, Discobot ha inviato loro un messaggio dopo aver importato tutti gli utenti da vBulletin. È successo 5 giorni fa.
Quindi, nelle impostazioni di Discourse, ho impostato pulisci gli utenti inattivi dopo giorni a 1.
Ho riavviato il job Sidekiq CleanUpInactiveUsers.
Ho perso circa 1000 utenti.
Ho ancora 178000 utenti e so che la maggior parte di loro sono profili vuoti e inutilizzati senza messaggi.

Qualcuno ha un’idea del motivo per cui non vengono rimossi da CleanUpInactiveUsers?

Inoltre, dato che ci sono molti account spam e messaggi spam, è possibile attivare il rilevamento dello spam per gli utenti e i messaggi esistenti e pulire tutto anche questo?

Il job ha un limite di 1000 esecuzioni per run, per evitare di intasare la coda Sidekiq.

Potresti eseguirlo dalla console Rails così:

Jobs::CleanUpInactiveUsers.new.execute({})

E poi inserirlo in un ciclo come:

100.times do 
  Jobs::CleanUpInactiveUsers.new.execute({})
  puts "Iterazione completata. Totale utenti: #{User.count}"
end

Che tipo di rilevamento dello spam avevi in mente? Akismet?

Grazie per la chiarificazione!

Onestamente, non lo so. Non so quale strumento utilizzi Discourse per rilevare e prevenire lo spam.

Inoltre, credo che un numero considerevole dei miei spammer abbia pubblicato messaggi sui profili degli utenti pubblici, una funzionalità che non esiste su Discourse.
Questi messaggi sono stati importati su Discourse come argomenti “normali”, senza categoria e senza titolo, rendendoli facili da identificare.:


Esempio di profilo spam:

Non voglio cancellare tutti questi messaggi senza titolo, poiché la maggior parte è innocua e potrebbe contenere informazioni che alcuni utenti vorrebbero recuperare.

Ciò che vorrei fare è eliminare gli utenti che hanno pubblicato solo argomenti senza titolo e rimuovere anche i loro argomenti.
Si potrebbe fare qualcosa del genere abbastanza facilmente con comandi Rails?

Potrebbe richiedere un po’ di sperimentazione, ma sì. Qualcosa del genere potrebbe funzionare come punto di partenza:

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
    # elimina gli argomenti e/o l'utente
  end
end

Per la cronaca, ecco le mie condizioni:

Nel mio caso, uno spammer deve avere:

  • Più di 1 post
  • Almeno 1 argomento senza titolo
  • Nessun argomento con titolo
  • Lo stesso numero di post e di argomenti (dato che un argomento È un post)

Quindi ho appena aggiunto le condizioni:

User.find_each do |user|
  untitled_topic_count = user.topics.where(title: "").count
  titled_topic_count = user.topics.where.not(title: "").count
  topic_count = untitled_topic_count + titled_topic_count
  post_count = user.posts.count
  if post_count > 1 && untitled_topic_count > 0 && titled_topic_count == 0 && post_count == topic_count
    puts "SPAMMER ?"
  end
end

Speriamo che non colpisca utenti legittimi, ma finora sembra sicuro, osservando casualmente i target. :wink: