Verschiedene Fragen zur Bereinigung eines importierten vBulletin

Hallo,
ich habe ein 20 Jahre altes Forum nach Discourse migriert.
Es gibt viele ungenutzte oder Spam-Konten sowie Spam-Nachrichten.
Ich möchte eine Bereinigung durchführen.

Ich habe alle Benutzer auf Vertrauenslevel 0 gesetzt.
Ich habe versucht, herauszufinden, wie viele Benutzer noch nie eine Nachricht geschrieben haben, mit dieser Data Explorer-Abfrage:

SELECT COUNT (DISTINCT user_id) from posts

Das Ergebnis ist 28.530.

Ich habe versucht, die Gesamtzahl meiner Benutzer herauszufinden:

SELECT COUNT (DISTINCT id) FROM users

Das Ergebnis ist 180.000 (die vBulletin-Statistiken bestätigten, dass wir tatsächlich 180.000 Konten hatten).

Ich habe den Sidekiq-Job CleanUpInactiveUsers ausgelöst.
Nur einige hundert Benutzer wurden entfernt. Ich habe mir eines dieser ungenutzten Profile angesehen und sah keine Aktivität: keine Beiträge, keine Themen … Allerdings hat Discobot ihnen eine Nachricht gesendet, nachdem ich alle Benutzer aus vBulletin importiert hatte. Das war vor 5 Tagen.
Deshalb habe ich in den Discourse-Einstellungen die Option Clean up inactive users after days auf 1 gesetzt.
Ich habe den Sidekiq-Job CleanUpInactiveUsers erneut ausgelöst.
Ich habe etwa 1.000 Benutzer verloren.
Ich habe immer noch 178.000 Benutzer, und ich weiß, dass die meisten davon leere und ungenutzte Profile ohne Nachrichten sind.

Haben Sie eine Idee, warum sie von CleanUpInactiveUsers nicht entfernt werden?

Außerdem: Da es viele Spam-Konten und -Nachrichten gibt, ist es möglich, die Spam-Erkennung für bestehende Benutzer und Nachrichten auszulösen und das ebenfalls zu bereinigen?

Der Job ist pro Durchlauf auf 1000 Einträge begrenzt, um die Sidekiq-Warteschlange nicht zu verstopfen.

Du kannst ihn über die Rails-Konsole ausführen, zum Beispiel so:

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

Und dann in einer Schleife:

100.times do 
  Jobs::CleanUpInactiveUsers.new.execute({})
  puts "Durchlauf abgeschlossen. Gesamtzahl der Benutzer: #{User.count}"
end

Welche Art von Spam-Erkennung hattest du im Sinn? Akismet?

Danke für die Klärung!

Ehrlich gesagt, ich weiß es nicht. Ich weiß nicht, was Discourse zur Erkennung und Verhinderung von Spam verwendet.

Außerdem glaube ich, dass eine beträchtliche Anzahl meiner Spammer Nachrichten auf den öffentlichen Benutzerprofilen hinterlassen hat, eine Funktion, die es bei Discourse nicht gibt.
Diese Nachrichten wurden in Discourse als „normale

Es könnte etwas Ausprobieren erfordern, aber ja. Etwas in dieser Art könnte als Ausgangspunkt funktionieren:

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
    # Löschen der Themen und/oder des Benutzers
  end
end

Zur Aktennotiz, hier sind meine Bedingungen:

In meinem Fall muss ein Spammer folgendes erfüllen:

  • Mehr als 1 Beitrag
  • Mindestens 1 Thema ohne Titel
  • Keine Themen mit Titel
  • Die gleiche Anzahl von Beiträgen wie von Themen (da ein Thema EIN Beitrag ist)

Also habe ich einfach folgende Bedingungen hinzugefügt:

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

Hoffen wir, dass damit keine legitimen Nutzer erfasst werden, aber es scheint bisher sicher zu sein, bei einer zufälligen Überprüfung der Ziele. :wink: