如何批量处理/删除被标记的注册?

大家好 - 过去几天,我们的论坛收到了大量垃圾注册,系统已正确标记以供我们审核。问题在于每隔几小时就会出现大量此类注册:

是否有办法快速审核并进行批量编辑,这样我们就不必逐个点击条目并再次点击以选择“删除 + 封禁”选项?这样做时间久了会非常繁琐。

作为替代方案,我们是否可以自动删除属于此类别的用户:

您正在处理积压的旧垃圾资料。一旦完全处理完毕,问题应该就会解决。

嗨 Jeff,团队 - 我们收到的垃圾邮件数量相当高,每天大约有 30-40 篇帖子被标记为待审核。这需要大量的重复点击操作。是否有引入任何新技术来减少这种繁琐的工作?

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

谢谢分享——我可能需要使用类似的东西!我确实希望 Discourse 能自动支持这个工作流程 :slight_smile:

我一直在我的个人 discourse 上使用 @Canapin 的解决方案,但我也为另一家公司设置了单独的实例。我宁愿不在他们的解决方案中使用此脚本。

Discourse 团队是否有关于替代方法的更新?这适用于已标记的注册以及被标记为垃圾邮件的帖子:

目前,我们还没有计划为“审核队列”添加批量操作的功能,但如果您能为此创建一个#feature request(功能请求),我们可以更容易地衡量该建议的受欢迎程度,这可能会引起更多关注。