Comment traiter/supprimer en masse les inscriptions signalées ?

Bonjour à tous - depuis quelques jours, nos forums reçoivent un grand nombre d’inscriptions spam qui sont correctement signalées pour examen. Le problème est la quantité importante de ces inscriptions toutes les quelques heures :

Existe-t-il un moyen de les examiner rapidement et d’effectuer une modification en masse afin que nous n’ayons pas à cliquer sur chaque entrée et à cliquer à nouveau pour sélectionner l’option supprimer + bannir ? Cela devient assez fastidieux après un certain temps.

En alternative, pouvons-nous simplement supprimer automatiquement les utilisateurs qui tombent dans cette catégorie :

Vous êtes en train de rattraper un retard de vieux profils spam. Une fois que vous aurez totalement rattrapé ce retard, tout devrait aller bien.

Salut Jeff, l’équipe - la quantité de spam que nous recevons est assez élevée, et nous avons environ 30 à 40 publications signalées pour examen quotidiennement. C’est beaucoup de clics répétitifs. Y a-t-il eu de nouvelles techniques introduites pour rendre cela moins fastidieux ?

Salut @kirupa

J’ai eu le même problème.

Nous avons examiné des milliers de publications/utilisateurs signalés automatiquement (par le système et Akismet) sur mon forum.
La précision du système et d’Akismet était très proche de 100 % (1 faux positif à ma connaissance pour 2500 signalements). Ce n’est pas le cas pour tous les forums, vous devez donc être sûr de ce que vous faites si vous souhaitez automatiser le bannissement des utilisateurs signalés automatiquement.

Finalement, j’ai créé un script PHP utilisant les données d’un webhook Discourse :

J’ai d’abord créé le webhook :

Ensuite, j’ai utilisé Use Discourse webhooks with PHP pour recevoir la requête et analyser les données.

J’ai ajouté du code personnalisé pour déclencher le bannissement automatique en envoyant une requête API à Discourse, basée sur des critères arbitraires :

Voici le code final :

<?php

// Vérifier immédiatement l'authenticité de la requête.
if (array_key_exists('HTTP_X_DISCOURSE_EVENT_SIGNATURE', $_SERVER)) {
    $discourse_payload_raw = file_get_contents('php://input');
    $discourse_payload_sha256 = substr($_SERVER['HTTP_X_DISCOURSE_EVENT_SIGNATURE'], 7);
    
    // Pour des raisons de sécurité, configurez le webhook avec un secret dans Discourse et définissez-le ci-dessous.
    $discourse_payload_secret = 'xxxxxxxxxxxxxxxxxxxxx';
    
    // Vérifier que la requête a été envoyée par un webhook autorisé.
    if (hash_hmac('sha256', $discourse_payload_raw, $discourse_payload_secret) == $discourse_payload_sha256) {
        echo 'reçu';
    }
    else {
        die('authentification échouée');
    }
}
else {
    die('accès refusé');
}

// Préparer la charge utile pour utilisation dans le script PHP.
$discourse_json = json_decode($discourse_payload_raw);

$reviewable = $discourse_json->reviewable;

// Définir l'URL de l'API
$api_url = "https://unicyclist.com/review/$reviewable->id/perform/delete_user?version=0";

// Vérifier que les propriétés "type" et "score" sont valides
if (($reviewable->type == "ReviewableUser" || $reviewable->type == "ReviewableAkismetUser" || $reviewable->type == "ReviewableQueuedPost") && $reviewable->score > 0) {
  // Configurer les options curl
    $options = array(
        CURLOPT_URL => $api_url,
        CURLOPT_RETURNTRANSFER => true,
        CURLOPT_CUSTOMREQUEST => "PUT", // Définir la méthode de requête sur PUT
        CURLOPT_HTTPHEADER => array(
            "Api-Key: xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx",
            "Api-Username: system"
        )
    );
    // Initialiser la session curl
    $curl = curl_init();
    curl_setopt_array($curl, $options);
    // Effectuer l'appel API
    $response = curl_exec($curl);
    curl_close($curl);
    // Décoder la réponse
    $response_data = json_decode($response);
    print_r($response_data);
}   else {
    exit;
}

?>

Cela fonctionne parfaitement jusqu’à présent.

:warning: Notez que mon code peut être très dangereux à utiliser dans un autre contexte et que le contenu doit être soigneusement réfléchi.

Par exemple, un signalement “ReviewableUser” peut être appliqué aux utilisateurs des forums qui ont besoin de valider manuellement les utilisateurs (je ne sais pas si c’est le cas, ce n’est qu’un exemple). D’autres forums pourraient avoir modifié les seuils de détection de spam dans leurs paramètres, ou la détection automatique pourrait simplement être moins précise sur leur forum.

Merci de partager - je pourrais avoir à utiliser quelque chose comme ça ! J’aimerais que Discourse prenne en charge ce flux de travail automatiquement :slight_smile:

J’utilise la solution de @Canapin sur mon forum Discourse personnel, mais j’ai également une instance séparée configurée pour une autre entreprise. Je préférerais ne pas utiliser ce script sur leur solution.

Y a-t-il une mise à jour de l’équipe Discourse concernant des approches alternatives ? Ceci s’applique aussi bien aux enregistrements signalés qu’aux publications signalées comme spam :

Pour l’instant, nous n’avons rien prévu pour ajouter des actions groupées à la file d’attente de révision, mais si vous pouviez créer une demande de fonctionnalité (Feature request) pour cela, nous pourrions plus facilement évaluer la popularité de la suggestion, ce qui pourrait lui attirer plus d’attention.