みなさんこんにちは。ここ数日、当フォーラムにはスパム登録が多数寄せられており、適切にフラグが立てられ、レビュー対象となっています。問題は、数時間ごとにその数が膨大になることです。
これらを一括で確認し、編集して、各エントリーをクリックして「削除+禁止」オプションを選択する作業を繰り返す必要がないような、迅速な確認・一括処理の方法はありませんか?時間が経つにつれて、その作業は非常に面倒になってきます。
みなさんこんにちは。ここ数日、当フォーラムにはスパム登録が多数寄せられており、適切にフラグが立てられ、レビュー対象となっています。問題は、数時間ごとにその数が膨大になることです。
これらを一括で確認し、編集して、各エントリーをクリックして「削除+禁止」オプションを選択する作業を繰り返す必要がないような、迅速な確認・一括処理の方法はありませんか?時間が経つにつれて、その作業は非常に面倒になってきます。
You are catching up on a backlog of old spam profiles. Once you fully catch up you should be ok.
ジェフさん、チームの皆さん
スパムの量が非常に多く、毎日約30〜40件の投稿がレビューのためにフラグ付けされています。これは、繰り返し行われるポイント&クリック作業が多く、大変です。この作業をあまり面倒でなくすために、新しいテクニックは導入されましたか?
こんにちは、@kirupa様
私も同様の問題を抱えていました。
私のフォーラムでは、自動的にフラグ付けされた(システムおよびAkismetによる)数千件の投稿/ユーザーを確認しました。
システムとAkismetの両方の精度は、ほぼ100%に近かったです(私の知る限り、2500件のフラグに対して1件の誤検知)。これはすべてのフォーラムに当てはまるわけではないので、自動的にフラグ付けされたユーザーの自動禁止を自動化したい場合は、自分が何をしているのかを確信する必要があります。
最終的に、DiscourseのWebhookデータを使用してPHPスクリプトを作成しました。
まずWebhookを作成しました。
次に、Use Discourse webhooks with PHP を使用してリクエストを受信し、データを解析しました。
カスタムコードを追加して、任意の基準に基づいてDiscourseへのAPIリクエストを送信することにより、自動禁止をトリガーしました。
最終的なコードは次のとおりです。
<?php
// Immediately verify the authenticity of the request.
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);
// For security, configure the webhook with a secret in Discourse and set it below.
$discourse_payload_secret = 'xxxxxxxxxxxxxxxxxxxxx';
// Verify that the request was sent from an authorized webhook.
if (hash_hmac('sha256', $discourse_payload_raw, $discourse_payload_secret) == $discourse_payload_sha256) {
echo 'received';
}
else {
die('authentication failed');
}
}
else {
die('access denied');
}
// Prepare the payload for use in the PHP script.
$discourse_json = json_decode($discourse_payload_raw);
$reviewable = $discourse_json->reviewable;
// Set up the API URL
$api_url = "https://unicyclist.com/review/$reviewable->id/perform/delete_user?version=0";
// Verify that the "type" and "score" properties are valid
if (($reviewable->type == "ReviewableUser" || $reviewable->type == "ReviewableAkismetUser" || $reviewable->type == "ReviewableQueuedPost") && $reviewable->score > 0) {
// Set up the curl options
$options = array(
CURLOPT_URL => $api_url,
CURLOPT_RETURNTRANSFER => true,
CURLOPT_CUSTOMREQUEST => "PUT", // Set the request method to PUT
CURLOPT_HTTPHEADER => array(
"Api-Key: xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx",
"Api-Username: system"
)
);
// Initialize the curl session
$curl = curl_init();
curl_setopt_array($curl, $options);
// Make the API call
$response = curl_exec($curl);
curl_close($curl);
// Decode the response
$response_data = json_decode($response);
print_r($response_data);
} else {
exit;
}
?>
今のところ完璧に機能しています。
私のコードは、他のコンテキストで使用すると非常に危険である可能性があり、コンテンツは慎重に検討する必要があることに注意してください。
たとえば、「ReviewableUser」フラグは、ユーザーを手動で検証する必要があるフォーラムのユーザーに設定される可能性があります(そうかどうかはわかりませんが、単なる例です)。他のフォーラムでは、設定でスパマー検出のしきい値が変更されている可能性があり、または自動検出がそれらのフォーラムでは単に精度が低い可能性があります。
共有ありがとうございます。このようなものを使用する必要があるかもしれません!Discourseがこのワークフローを自動的にサポートしてくれることを願っています:slight_smile:
個人用ディスコースで@Canapinのソリューションを使用していますが、別の会社用に別のインスタンスも設定しています。そちらのソリューションではこのスクリプトを使用しないようにしたいです。
フラグが付けられた登録およびスパムとしてフラグが付けられた投稿の両方に適用される、代替アプローチに関するディスコースチームからのアップデートはありますか?
現時点では、レビューキューに一括操作を追加する予定はありませんが、Feature request を作成していただければ、提案の人気度をより簡単に測定でき、注目を集める可能性があります。