# Benutzer automatisch löschen, die vom System markiert wurden?

**URL:** <https://meta.discourse.org/t/automatically-delete-users-flagged-by-system/249765>\
**Category:** Development\
**Created:** [23. Dezember 2022 um 16:20 UTC](https://meta.discourse.org/t/automatically-delete-users-flagged-by-system/249765 "2022-12-23T16:20:45Z")\
**Posts on this page:** 1\
**Showing post:** 3

<div class="post-metadata">

**Author:** ![Canapin](https://sea3.discourse-cdn.com/meta/user_avatar/meta.discourse.org/canapin/32/119591_2.png) [@Canapin](https://meta.discourse.org/u/Canapin)\
**Post date:** [7. Januar 2023 um 19:52 UTC](https://meta.discourse.org/t/automatically-delete-users-flagged-by-system/249765/3 "2023-01-07T19:52:01Z")

</div>

Ich habe es zum Laufen gebracht.

Erstellen eines Benutzers mit Insomnia, Ausfüllen seines Profils mit einem Akismet-Trigger, der eine Überprüfung auslöst.  
Einige Prüfungen werden durchgeführt und der Benutzer wird automatisch gelöscht.

Die Überprüfungseigenschaften, damit das Skript eine Benutzerlöschung auslöst, sind:

- `Type`: `ReviewableAkismetUser`, `ReviewableUser` oder `ReviewableQueuedPost`
- `Score` \> 0

Ich möchte keine Benutzer automatisch löschen, die von anderen Benutzern als @system markiert werden.

Hier ist das PHP-Skript, das ich verwende:

```php
<?php

// Sofort die Authentizität der Anfrage überprüfen.
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 ihn unten.
    $discourse_payload_secret = '2J3tM5X4WYGkGp0tTkmu';
    
    // Ü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://discourse.canapin.com/review/$reviewable->id/perform/delete_user?version=0";
//$api_url = "https://discourse.canapin.com/review/$reviewable->id/perform/delete_user?version=$reviewable->version";

// Ü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: 6666666666666666666666666666666666666666666",
            "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;
}

?>

```

Auf einer Skala von 0 bis 10… Wie ~~hässlich~~ zuverlässig ist es, angesichts des Kontexts, in dem es funktionieren wird (0 False Positives in 2 Jahren für Discourse- und Akismet-Erkennungen)?

* * *

Ich habe ein paar Fragen zur Payload der Überprüfungsanfrage, die von Discourse ausgelöst wird, wenn ein Benutzer als potenzielles Spam-Konto erkannt wird.

1. Warum gibt es 2 Anfragen für 1 `ReviewableUser` mit minimalen Unterschieden zwischen ihren jeweiligen Payloads (die erste Anfrage ist links)?

2. Was bedeutet `link_admin`?

3. Wenn ich manuell einen Benutzer (von Akismet erkannt) aus dem Überprüfungspanel lösche, wird der Webhook zur Überprüfung mit einer neuen Payload ausgelöst, die unter anderem Folgendes enthält: `"user_deleted": false`. Sollte dies nicht `true` sein? 🤔

4. In der URL `https://discourse.canapin.com/review/355/perform/delete_user?version=0\"`, bezieht sich die “version” hier auf die “version”, die in der Payload gefunden wird? Sollte ich mich um diesen Parameter kümmern? Sollte er gleich dem `version`-Parameter der Payload sein?

---

_[View the full topic](https://meta.discourse.org/t/automatically-delete-users-flagged-by-system/249765)._
