Diverses questions sur le nettoyage d'un vbulletin importé

Bonjour,
J’ai importé un forum vieux de 20 ans dans Discourse.
Il contient de nombreux comptes inutilisés ou spammeurs ainsi que des messages indésirables.
Je souhaite effectuer un nettoyage.

J’ai défini le niveau de confiance de tous mes utilisateurs à 0.
J’ai essayé de déterminer combien d’utilisateurs n’ont jamais publié de message avec cette requête Data Explorer :

SELECT COUNT (DISTINCT user_id) from posts

Elle indique 28 530.

J’ai ensuite cherché à connaître le nombre total d’utilisateurs :

SELECT COUNT (DISTINCT id) FROM users

Elle indique 180 000 (les statistiques vBulletin confirmaient bien que nous avions 180 000 comptes).

J’ai déclenché le job Sidekiq CleanUpInactiveUsers.
Seulement quelques centaines d’utilisateurs ont été supprimés. J’ai examiné l’un de ces profils inutilisés et n’ai trouvé aucune activité : aucun post, aucun sujet… Cependant, Discobot leur avait envoyé un message après l’importation de tous les utilisateurs depuis vBulletin. Cela remonte à 5 jours.
Dans les paramètres de Discourse, j’ai donc défini Nettoyer les utilisateurs inactifs après (jours) à 1.
J’ai à nouveau déclenché le job Sidekiq CleanUpInactiveUsers.
J’ai perdu environ 1 000 utilisateurs.
Il me reste encore 178 000 utilisateurs et je sais que la plupart sont des profils vides et inutilisés, sans aucun message.

Avez-vous une idée de pourquoi ils ne sont pas supprimés par CleanUpInactiveUsers ?

De plus, comme il existe de nombreux comptes et messages spam, est-il possible de déclencher la détection de spam sur les utilisateurs et les messages existants, et de nettoyer tout cela également ?

Le job est limité à 1000 exécutions par exécution afin d’éviter d’engorger la file d’attente Sidekiq.

Vous pouvez le lancer depuis la console Rails comme ceci :

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

Ensuite, placez-le dans une boucle comme suit :

100.times do 
  Jobs::CleanUpInactiveUsers.new.execute({})
  puts "Itération terminée. Nombre total d'utilisateurs #{User.count}"
end

Quel type de détection de spam aviez-vous en tête ? Akismet ?

2 « J'aime »

Merci pour la clarification !

Honnêtement, je ne sais pas. Je ne connais pas les outils que Discourse utilise pour détecter et prévenir le spam.

De plus, je pense qu’un bon nombre de mes spammeurs ont publié des messages sur les profils d’utilisateurs publics, une fonctionnalité qui n’existe pas sur Discourse.
Ces messages ont été importés sur Discourse sous forme de sujets « classiques », sans catégorie ni titre, ce qui les rend faciles à identifier :


Exemple d’un profil spam :

Je ne souhaite pas supprimer tous ces messages sans titre, la plupart étant inoffensifs et pouvant contenir des informations que certains utilisateurs aimeraient récupérer.

Ce que je voudrais faire, c’est supprimer les utilisateurs qui ont publié uniquement des sujets sans titre et effacer également leurs sujets.
Une telle opération pourrait-elle être réalisée assez facilement avec des commandes Rails ?

1 « J'aime »

Cela pourrait nécessiter un peu d’expérimentation, mais oui. Quelque chose comme ceci pourrait fonctionner comme point de départ :

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
    # supprimer les sujets et/ou l'utilisateur
  end
end
4 « J'aime »

Pour la forme, voici mes conditions :

Dans mon cas, un spammeur doit avoir :

  • Plus d’un post
  • Au moins un sujet sans titre
  • Aucun sujet avec titre
  • Le même nombre de posts que de sujets (car un sujet EST un post)

J’ai donc ajouté les conditions suivantes :

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 "SPAMMEUR ?"
  end
end

Espérons que cela ne ciblera pas d’utilisateurs légitimes, mais cela semble sûr pour l’instant, en regardant au hasard les cibles. :wink:

1 « J'aime »

This topic was automatically closed 30 days after the last reply. New replies are no longer allowed.