Way to bulk process/delete flagged registrations?

您好 @kirupa

我似乎遇到了同样的问题。

我们审查了我论坛上数千条自动标记(系统和 Akismet)的帖子/用户。
就我所知,系统和 Akismet 的准确率都接近 100%(2500 条标记中只有 1 条误报)。并非所有论坛都如此,因此如果您想自动禁止被自动标记的用户,您必须确保您所做的事情是正确的。

最后,我使用 Discourse 网页钩子数据编写了一个 PHP 脚本:

我首先创建了网页钩子:

然后我使用了 Use Discourse webhooks with PHP 来接收请求并解析数据。

我添加了自定义代码,通过向 Discourse 发送 API 请求来触发自动禁止,该请求基于任意标准:

这是最终代码:

<?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 中配置网页钩子并设置一个密钥,然后在此处设置。
    $discourse_payload_secret = 'xxxxxxxxxxxxxxxxxxxxx';
    
    // 验证请求是否来自授权的网页钩子。
    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://unicyclist.com/review/$reviewable->id/perform/delete_user?version=0";

// 验证 "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: xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx",
            "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;
}

?>

到目前为止,一切正常。

:warning: 请注意,我的代码在其他上下文中可能非常危险,并且内容必须仔细考虑。

例如,“ReviewableUser”标记可能会针对需要手动验证用户的论坛上的用户设置(我不知道是否是这种情况,这只是一个例子)。其他论坛可能在其设置中更改了垃圾邮件检测阈值,或者其论坛上的自动检测可能不够准确。

3 个赞