システムによってフラグが立てられたユーザーを自動的に削除しますか?

こんにちは!

毎日、「この新規ユーザーはトピックや投稿を一切読まずにプロフィール情報を入力しました」とフラグが立てられたスパムアカウントが数十件あります。

2年間で、誤検出は0件でした。

そのため、この特定の理由でフラグが立てられたアカウントは自動的に削除できるのではないかと考えています。

オプションとして、削除前に受信者に自動メールを送信し、アカウントが自動削除されたこと、ただしフォーラムを通じて管理者にメールで連絡できることを伝えることができます。

Discourse Automation を確認しましたが、標準ではそのような機能は提供されていません。

Discourseの自動化メソッドを使用してプラグインをコーディングすることは可能でしょうか、それともゼロからコーディングする必要がありますか?

あるいは、この終わりのないスパムがレビューリストに載るのを防ぐ簡単な方法はありませんか?

「いいね!」 4

そこで、これまで使ったことのないWebフックを試してみます。
テンプレートとして Use Discourse webhooks with PHP を使い始め、Discourseに正しくデータを返しています。

しかし、レビュー可能なスパムアイテムを(「ユーザーが速すぎる」「投稿を読まずにプロフィールを埋めた」など)手動で作成する必要があります。何かアイデアはありますか?

動作しました。

Insomnia でユーザーを作成し、Akismet トリガーでプロフィールを埋めると、レビューがトリガーされます。
いくつかのチェックが行われ、ユーザーは自動的に削除されます。

ユーザー削除をトリガーするスクリプトのレビュープロパティは次のとおりです。

  • Type: ReviewableAkismetUserReviewableUser、または ReviewableQueuedPost
  • Score > 0

@system 以外のユーザーによってフラグ付けされたユーザーを自動的に削除したくありません。

以下は、私が使用している PHP スクリプトです。

<?php

// リクエストの認証を直ちに検証します。
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);
    
    // セキュリティのため、Discourse で Webhook にシークレットを設定し、以下に設定してください。
    $discourse_payload_secret = '2J3tM5X4WYGkGp0tTkmu';
    
    // リクエストが承認された Webhook から送信されたことを検証します。
    if (hash_hmac('sha256', $discourse_payload_raw, $discourse_payload_secret) == $discourse_payload_sha256) {
        echo 'received';
    }
    else {
        die('authentication failed');
    }
}
else {
    die('access denied');
}

// PHP スクリプトで使用するためにペイロードを準備します。
$discourse_json = json_decode($discourse_payload_raw);

$reviewable = $discourse_json->reviewable;

// API URL を設定します
$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";


// "type" および "score" プロパティが有効であることを検証します
if (($reviewable->type == "ReviewableUser" || $reviewable->type == "ReviewableAkismetUser" || $reviewable->type == "ReviewableQueuedPost") && $reviewable->score > 0) {
  // curl オプションを設定します
    $options = array(
        CURLOPT_URL => $api_url,
        CURLOPT_RETURNTRANSFER => true,
        CURLOPT_CUSTOMREQUEST => "PUT", // リクエストメソッドを PUT に設定します
        CURLOPT_HTTPHEADER => array(
            "Api-Key: 6666666666666666666666666666666666666666666",
            "Api-Username: system"
        )
    );
    // curl セッションを初期化します
    $curl = curl_init();
    curl_setopt_array($curl, $options);
    // API を呼び出します
    $response = curl_exec($curl);
    curl_close($curl);
    // レスポンスをデコードします
    $response_data = json_decode($response);
    print_r($response_data);
}   else {
    exit;
}

?>

0から10のスケールで…(0は2年間Discourseとakismet検出で偽陽性なし)で、それが機能するコンテキスト(0偽陽性/2年)に関して、どれくらい(醜い)信頼性がありますか?


Discourse が潜在的なスパムアカウントを検出したときにトリガーされるレビューリクエストペイロードについて、いくつか質問があります。

  1. 最小限の違いしかない 2 つの ReviewableUser リクエストがあるのはなぜですか(最初の要求は左側にあります)?

  2. link_admin とは何を意味しますか?

  3. レビューパネルから(Akismet によって検出された)ユーザーを手動で削除すると、"user_deleted": false を含む新しいペイロードでレビュー Webhook がトリガーされます。これは true になるべきではありませんか? :thinking:

  4. URL https://discourse.canapin.com/review/355/perform/delete_user?version=0" では、ここの「version」はペイロードで見つかった「version」を指しますか?このパラメータを気にする必要がありますか?ペイロードの version パラメータと等しくなければなりませんか?

現在の状態では、それが機能すると確信しています(まあ、ほとんど直感ですが…)そして、ウェブフックの結果を見ることで潜在的な問題を追跡できます…
または、レビューされたアイテムのリストを表示します。

しかし、ここで解決できない問題があります。

時々、レビューされたアイテムのリストは、情報なしでこのようになります。

そして時々、このようになります。

削除された誤検出があった場合に、より簡単に追跡できるように、すべての情報を保持したいと思います。

この動作の原因について何かアイデアはありますか?

自動削除後に発生するようですが、どのように、なぜかはわかりません。

Discourseのインターフェースから欠落しているすべての情報を含む、レビューされたアイテムページのJSONバージョンを追加します。


編集:わかりました。これは、Akismetプラグインを無効にした場合に発生することです。

ちなみに、これが数回表示されるのを見たことがありますが、一度だけ誤検出がありました。それは、思慮深く思いやりのある新規メンバーが最初にプロフィールを記入したときでした。ですので、起こり得ることです。

「いいね!」 1

はい。正直なところ、2年以上という期間で誤検知は(私の知る限り)1件でした。
ユーザーはその後、問題が発生した場合にウェブサイトで簡単に見つけられるメールで私に連絡してきました。

私の場合は、数千人のユーザーを手動でレビューした後、この自動削除の利点は、特にニッチなフォーラムであるため、私の意見ではかなり明白になるでしょう。トピックに本当に興味のあるユーザーは、不便に直面した場合、私たちに連絡するでしょう。:slight_smile:

「いいね!」 2

このトピックは、最後の返信から30日後に自動的にクローズされました。新しい返信は許可されていません。