Way to bulk process/delete flagged registrations?

Hallo @kirupa

Ich bin zufällig auf ein ähnliches Problem gestoßen.

Wir haben Tausende von automatisch markierten (System und Akismet) Beiträgen/Benutzern in unserem Forum überprüft.
Die Genauigkeit von System und Akismet lag sehr nahe bei 100 % (nach meinem Wissen 1 False Positive bei 2500 Markierungen). Das ist nicht auf jedem Forum der Fall, daher müssen Sie sicher sein, was Sie tun, wenn Sie das automatische Bannen von automatisch markierten Benutzern automatisieren möchten.

Am Ende habe ich ein PHP-Skript mit Discourse-Webhook-Daten erstellt:

Ich habe zuerst den Webhook erstellt:

Dann habe ich Use Discourse webhooks with PHP verwendet, um die Anfrage zu empfangen und die Daten zu parsen.

Ich habe benutzerdefinierten Code hinzugefügt, um den automatischen Bann auszulösen, indem ich eine API-Anfrage an Discourse gesendet habe, basierend auf beliebigen Kriterien:

Hier ist der endgültige Code:

<?php

// Überprüfen Sie sofort die Authentizität der Anfrage.
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);
    
    // Aus Sicherheitsgründen konfigurieren Sie den Webhook mit einem Geheimnis in Discourse und setzen Sie es unten.
    $discourse_payload_secret = 'xxxxxxxxxxxxxxxxxxxxx';
    
    // Überprüfen Sie, ob die Anfrage von einem autorisierten Webhook gesendet wurde.
    if (hash_hmac('sha256', $discourse_payload_raw, $discourse_payload_secret) == $discourse_payload_sha256) {
        echo 'received';
    }
    else {
        die('authentication failed');
    }
}
else {
    die('access denied');
}

// Bereiten Sie die Nutzlast für die Verwendung im PHP-Skript vor.
$discourse_json = json_decode($discourse_payload_raw);

$reviewable = $discourse_json->reviewable;

// Richten Sie die API-URL ein
$api_url = "https://unicyclist.com/review/$reviewable->id/perform/delete_user?version=0";

// Überprüfen Sie, ob die Eigenschaften "type" und "score" gültig sind
if (($reviewable->type == "ReviewableUser" || $reviewable->type == "ReviewableAkismetUser" || $reviewable->type == "ReviewableQueuedPost") && $reviewable->score > 0) {
  // Richten Sie die Curl-Optionen ein
    $options = array(
        CURLOPT_URL => $api_url,
        CURLOPT_RETURNTRANSFER => true,
        CURLOPT_CUSTOMREQUEST => "PUT", // Setzen Sie die Anfragemethode auf PUT
        CURLOPT_HTTPHEADER => array(
            "Api-Key: xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx",
            "Api-Username: system"
        )
    );
    // Initialisieren Sie die Curl-Sitzung
    $curl = curl_init();
    curl_setopt_array($curl, $options);
    // Führen Sie den API-Aufruf durch
    $response = curl_exec($curl);
    curl_close($curl);
    // Dekodieren Sie die Antwort
    $response_data = json_decode($response);
    print_r($response_data);
}   else {
    exit;
}

?>

Es funktioniert bisher perfekt.

:warning: Beachten Sie, dass mein Code in einem anderen Kontext sehr gefährlich sein kann und der Inhalt sorgfältig durchdacht werden muss.

Zum Beispiel kann ein “ReviewableUser”-Flag für Benutzer in Foren gesetzt werden, die Benutzer manuell validieren müssen (ich weiß nicht, ob das der Fall ist, es ist nur ein Beispiel). Andere Foren könnten die Schwellenwerte für die Spam-Erkennung in ihren Einstellungen geändert haben, oder die automatische Erkennung könnte auf ihrem Forum einfach weniger genau sein.

3 „Gefällt mir“