kirupa
(Kirupa Chinnathambi)
2020 年3 月 30 日 16:44
1
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 个赞
kirupa
(Kirupa Chinnathambi)
2020 年3 月 30 日 16:49
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.
kirupa
(Kirupa Chinnathambi)
2023 年1 月 19 日 01:44
4
嗨 Jeff,团队 - 我们收到的垃圾邮件数量相当高,每天大约有 30-40 篇帖子被标记为待审核。这需要大量的重复点击操作。是否有引入任何新技术来减少这种繁琐的工作?
Canapin
(Coin-coin le Canapin)
2023 年2 月 14 日 15:03
5
您好 @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;
}
?>
到目前为止,一切正常。
请注意,我的代码在其他上下文中可能非常危险,并且内容必须仔细考虑。
例如,“ReviewableUser”标记可能 会针对需要手动验证用户的论坛上的用户设置(我不知道是否是这种情况,这只是一个例子)。其他论坛可能在其设置中更改了垃圾邮件检测阈值,或者其论坛上的自动检测可能不够准确。
3 个赞
kirupa
(Kirupa Chinnathambi)
2023 年4 月 16 日 03:58
6
谢谢分享——我可能需要使用类似的东西!我确实希望 Discourse 能自动支持这个工作流程
kirupa
(Kirupa Chinnathambi)
2024 年3 月 28 日 16:33
7
我一直在我的个人 discourse 上使用 @Canapin 的解决方案,但我也为另一家公司设置了单独的实例。我宁愿不在他们的解决方案中使用此脚本。
Discourse 团队是否有关于替代方法的更新?这适用于已标记的注册以及被标记为垃圾邮件的帖子:
目前,我们还没有计划为“审核队列”添加批量操作的功能,但如果您能为此创建一个#feature request(功能请求),我们可以更容易地衡量该建议的受欢迎程度,这可能会引起更多关注。