Way to bulk process/delete flagged registrations?

Hi everyone - for the past few days, our forums have been getting a lot of spam registrations that are properly being flagged for us to review. The problem is the large quantity of them every few hours:

Is there a way to quickly review and do a bulk edit so that we don’t have to click on each entry and click again to select the delete + ban option? That gets pretty tedious after some time.

2 个赞

As an alternative, can we just auto-delete users who fall into this category:

1 个赞

You are catching up on a backlog of old spam profiles. Once you fully catch up you should be ok.

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

3 个赞

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

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

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

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