مرحباً @kirupa
لقد واجهت نفس المشكلة بطريقة ما.
لقد قمنا بمراجعة آلاف المشاركات/المستخدمين الذين تم تمييزهم تلقائيًا (النظام و Akismet) على منتداي.
كانت دقة كل من النظام و Akismet قريبة جدًا من 100٪ (إيجابي خاطئ واحد على حد علمي مقابل 2500 علامة). هذا ليس هو الحال في كل منتدى، لذلك يجب أن تكون متأكدًا مما تفعله إذا كنت ترغب في أتمتة حظر المستخدمين الذين تم تمييزهم تلقائيًا.
في النهاية، قمت بإنشاء برنامج PHP باستخدام بيانات Discourse webhook:
لقد أنشأت أولاً الـ webhook:
ثم استخدمت Use Discourse webhooks with PHP لاستقبال الطلب وتحليل البيانات.
لقد أضفت رمزًا مخصصًا لتشغيل الحظر التلقائي عن طريق إرسال طلب API إلى Discourse، بناءً على معايير اعتباطية:
إليك الرمز النهائي:
<?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);
// للأمان، قم بتكوين الـ webhook مع سر في Discourse وضعه أدناه.
$discourse_payload_secret = 'xxxxxxxxxxxxxxxxxxxxx';
// التحقق من أن الطلب تم إرساله من webhook مصرح به.
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;
// إعداد عنوان 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” على المستخدمين في المنتديات التي تحتاج إلى التحقق من صحة المستخدمين يدويًا (لا أعرف ما إذا كان هذا هو الحال، إنه مجرد مثال). قد تكون المنتديات الأخرى قد غيرت عتبات اكتشاف البريد العشوائي في إعداداتها، أو قد يكون الاكتشاف التلقائي أقل دقة ببساطة في منتداها.
