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?
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