Jump to content

Extension:مرشح الإساءة

From mediawiki.org
This page is a translated version of the page Extension:AbuseFilter and the translation is 69% complete.
Outdated translations are marked like this.
هذا الامتداد يأتي مع إصدار ميدياويكي 1.38 وما بعده. لذا لن تحتاج لتنزيل هذا الامتداد مرة أخرى. إلا أنك سوف تحتاج لاتباع التعليمات الأخرى المقدمة.
الدليل المرجعي لامتدادات ميدياويكي
AbuseFilter
حالة الإصدار مستقر
تنفيذ نشاط المستخدم , صفحة خاصة , واجهة برمجة التطبيقات
بيان يسمح بوضع قيود معينة "معتمدة على السلوك" على نشاط wiki
المؤلف/المؤلفون
سياسة التوافق تصدر اللقطات البرمجية مع ميدياويكي. الإصدار الرئيسي لا يتوافق مع الإصدارات السابقة.
MediaWiki >= 1.43.0
تغييرات قاعدة البيانات نعم
Composer mediawiki/abuse-filter
جداول abuse_filter
abuse_filter_action
abuse_filter_history
abuse_filter_log
ترخيص رخصة جنو العمومية 2.0 أو ما بعدها
التنزيل
  • $wgAbuseFilterConditionLimit
  • $wgAbuseFilterRangeBlockSize
  • $wgAbuseFilterAnonBlockDuration
  • $wgAbuseFilterLogIPMaxAge
  • $wgAbuseFilterCentralDB
  • $wgAbuseFilterDefaultWarningMessage
  • $wgAbuseFilterEmergencyDisableAge
  • $wgAbuseFilterEnableBlockedExternalDomain
  • $wgAbuseFilterActionRestrictions
  • $wgAbuseFilterActions
  • $wgAbuseFilterProtectedVariables
  • $wgAbuseFilterLogIP
  • $wgAbuseFilterPrivateDetailsForceReason
  • $wgAbuseFilterEmergencyDisableCount
  • $wgAbuseFilterLogPrivateDetailsAccess
  • $wgAbuseFilterSlowFilterRuntimeLimit
  • $wgAbuseFilterEmergencyDisableThreshold
  • $wgAbuseFilterLocallyDisabledGlobalActions
  • $wgAbuseFilterBlockDuration
  • $wgAbuseFilterDefaultDisallowMessage
  • $wgAbuseFilterValidGroups
  • $wgAbuseFilterNotificationsPrivate
  • $wgAbuseFilterBlockAutopromoteDuration
  • $wgAbuseFilterIsCentral
  • $wgAbuseFilterNotifications
  • abusefilter-modify
  • abusefilter-log-detail
  • abusefilter-view
  • abusefilter-log
  • abusefilter-privatedetails
  • abusefilter-privatedetails-log
  • abusefilter-modify-restricted
  • abusefilter-revert
  • abusefilter-view-private
  • abusefilter-log-private
  • abusefilter-hidden-log
  • abusefilter-hide-log
  • abusefilter-modify-global
  • abusefilter-modify-blocked-external-domains
  • abusefilter-bypass-blocked-external-domains
  • abusefilter-access-protected-vars
  • abusefilter-protected-vars-log
تنزيلات ربع سنوية 139 (Ranked 42nd)
استخدام مواقع الويكي العمومية 2,939 (Ranked 186th)
ترجم الامتداد AbuseFilter لو كان متوفرا على translatewiki.net
المسائل المهام المفتوحة · الإبلاغ عن عطل تقني

AbuseFilter

2020 Coolest Tool
Award Winner

in the category
Quality


يسمح ملحق "AbuseFilter" للمستخدمين المتميزين بتعيين إجراءات معينة يتم اتخاذها عندما تتطابق إجراءات المستخدمين -مثل عمليات التحرير- مع معايير معينة.

على سبيل المثال، يمكن إنشاء "مُرشِّح" لمنع المستخدمين المجهولين من إضافة روابط خارجية، أو لحظر مستخدم يزيل أكثر من 2000 حرف.

التثبيت

  • نزّل الملف/الملفات وضعها في دليل يحمل اسم ‎AbuseFilter داخل مجلد ‎extensions/‎ لديك.
    يجب على مطوري البرمجيات والمساهمين بالكود البرمجي تثبيت الامتداد من غت بدلا من ذلك، مستخدمين:cd extensions/
    git clone https://gerrit.wikimedia.org/r/mediawiki/extensions/AbuseFilter
  • حينما تثبته مستخدما غت شغّل Composer كي تثبت اعتمادات بي إتش بي، وذلك عن طريق إصدار composer install --no-dev في مجلد الامتداد. (طالع مهمة T173141 لتطلع على التعقيدات المحتملة.)
  • أضف الكود التالي في الجزء الأسفل من ملف LocalSettings.php :
    wfLoadExtension( 'AbuseFilter' );
    
  • شغل نص التحديث البرمجي الذي سوف ينشئ تلقائيا جداول قاعدة البيانات الضرورية التي يحتاج إليها الامتداد.
  • أعدّ الملحق حسب ما هو مطلوب.
  • Yes تم التنفيذ – اذهب إلى Special:Version على موقع الويكي لديك كي تتحقق من أن الامتداد قد ثبت بنجاح.
عند التثبيت من Git، يرجى ملاحظة أن هذا الامتداد يتطلب Composer .

لذلك، بعد التثبيت من Git، قم بالتغيير إلى الدليل الذي يحتوي على الامتداد، على سبيل المثال. "../extensions/AbuseFilter/" وتشغيل composer install --no-dev، أو عند التحديث: composer update --no-dev.

بدلا من ذلك ويفضل إضافة السطر "extensions/AbuseFilter/composer.json" إلى الملف "composer.local.json" في الدليل الجذر لموقع الويكي الخاص بك مثل على سبيل المثال.

{
	"extra": {
		"merge-plugin": {
			"include": [
				"extensions/AbuseFilter/composer.json"
			]
		}
	}
}

الإعداد

مجموعات المستخدمين

بمجرد تثبيت الملحق، سيتعين عليك إعداد صلاحيات المستخدم في "LocalSettings.php".

User rights for AbuseFilter
الصلاحية الوصف Notes User groups that have this right by default
abusefilter-modify إنشاء أو تعديل عوامل تصفية إساءة الاستخدام Requires the abusefilter-view right sysop
abusefilter-view عرض مرشحات الإساءة *
abusefilter-log عرض سجل الإساءة *
abusefilter-log-detail عرض مدخلات سجل الإساءة المفصلة Requires the abusefilter-log right sysop
abusefilter-privatedetails عرض البيانات السرية في سجل الإساءة Prior to 1.34 this right was named abusefilter-private - Requires the abusefilter-log-detail right
abusefilter-modify-restricted عدل مرشحات الإساءة مع الأفعال المحظورة Requires the abusefilter-modify right sysop
abusefilter-modify-global إنشاء أو تعديل مرشحات الإساءة العالمية Requires the abusefilter-modify right
abusefilter-revert استرجع كل التعديلات لمرشح إساءة محدد. sysop
abusefilter-view-private اعرض مرشحات الإساءة المعلّمة كخاصة Requires the abusefilter-view right (not needed if the group already has the abusefilter-modify right) sysop
abusefilter-log-private عرض إدخالات السجل لمرشحات الإساءة المعلمة كخاصة Requires the abusefilter-log right (not needed if the group already has the abusefilter-modify or abusefilter-view-private rights) sysop
abusefilter-hide-log إخفاء إدخالات سجل الإساءة Requires the abusefilter-log right suppress
abusefilter-hidden-log عرض مدخلات سجل الإساءة المخفية Requires the abusefilter-log right suppress
abusefilter-privatedetails-log عرض سجل دخول التفاصيل الخاصة لمرشح الإساءة Prior to 1.34 this right was named abusefilter-private-log
abusefilter-modify-blocked-external-domains إنشاء أو تعديل المجالات الخارجية التي تم حظرها من الارتباط sysop
abusefilter-bypass-blocked-external-domains تم منع تجاوز المجالات الخارجية Requires the edit right bot
abusefilter-access-protected-vars View and create filters that use protected variables sysop
abusefilter-protected-vars-log View logs related to accessing protected variable values sysop

على سبيل المثال، سيسمح النموذج التالي للإداريين sysops بالقيام بكل ما يريدونه باستخدام "مُرَشِّح" AbuseFilter، ويسمح للجميع بعرض السجل ومشاهدة إعدادات المُرشِّح العامة:

$wgGroupPermissions['sysop']['abusefilter-modify'] = true;
$wgGroupPermissions['*']['abusefilter-log-detail'] = true;
$wgGroupPermissions['*']['abusefilter-view'] = true;
$wgGroupPermissions['*']['abusefilter-log'] = true;
$wgGroupPermissions['sysop']['abusefilter-privatedetails'] = true;
$wgGroupPermissions['sysop']['abusefilter-modify-restricted'] = true;
$wgGroupPermissions['sysop']['abusefilter-revert'] = true;
$wgGroupPermissions['sysop']['abusefilter-access-protected-vars'] = true;
$wgGroupPermissions['sysop']['abusefilter-protected-vars-log'] = true;
لا يمكن عرض المرشحات التي تم تمييزها على أنها خاصة private إلا من خلال المستخدمين الذين لديهم إذن تعديل مرشح الإساءة أو إذن abusefilter-view-private.
Protected filters can only be created and viewed by users with the abusefilter-access-protected-vars permission. Logs pertaining to these filters can only be viewed by users with the abusefilter-protected-vars-log permission. For more information, see Rules format .

معاملات

اسم المتغير القيمة الافتراضية الوصف
$wgAbuseFilterActions
[
    'throttle' => true,
    'warn' => true,
    'disallow' => true,
    'blockautopromote' => true,
    'block' => true,
    'rangeblock' => false,
    'degroup' => false,
    'tag' => true
]
الإجراءات التي يمكن لمرشح الإساءة القيام بها. عند إضافة إجراء جديد، تحقق مما إذا كان مقيدًا في $wgAbuseFilterActionRestrictions ، وإذا كان كذلك، فلا تنس إضافة صلاحية abusefilter-modify-restricted إلى مجموعات المستخدمين المناسبة.
$wgAbuseFilterConditionLimit
1000
أقصى عدد من "الشروط" التي يمكن استخدامها في كل مرة يعمل فيها المرشح مقابل كل تغيير. (تتطلب المرشحات الأكثر تعقيدًا المزيد من "الشروط").
$wgAbuseFilterValidGroups
[
    'default'
]
قائمة "المجموعات" التي يمكن تقسيم المرشحات إليها. افتراضيا هناك مجموعة واحدة فقط. قد تضيف ملحقات أخرى مجموعات أخرى.
$wgAbuseFilterEmergencyDisableThreshold
[
    'default' => 0.05
]
قم بتعطيل الفلتر إذا طابق أكثر من تعديلين، يشكلان أكثر من 5% من الإجراءات التي تم فحصها مقابل مجموعة الفلتر في الفترة "المرصودة" (يوم واحد على الأكثر)، وتم تغيير الفلتر في آخر 86400 ثانية (يوم واحد). راجع تقييد الطوارئ.
$wgAbuseFilterEmergencyDisableCount
[
    'default' => 2
]
$wgAbuseFilterEmergencyDisableAge
[
    'default' => 86400
]
$wgAbuseFilterActionRestrictions
[
	"throttle" => false,
	"warn" => false,
	"disallow" => false,
	"blockautopromote" => true,
	"block" => true,
	"rangeblock" => true,
	"degroup" => true,
	"tag" => false
]
يجب أن يكون لدى المستخدمين حق المستخدم "ausefilter-modify-restricted" بالإضافة إلى "abusefilter-modify" من أجل إنشاء أو تعديل المرشحات التي تنفذ هذه الإجراءات.
$wgAbuseFilterNotifications
false
يسمح بتكوين الامتداد لإرسال إشعارات النتائج إلى Special:RecentChanges أو UDP. الخيارات المتاحة: rc, udp, rcandudp
لإرسال التغييرات على مرشحات إساءة الاستخدام إلى Special:RecentChanges، استخدم unset($wgLogRestrictions['abusefilter']);.
$wgAbuseFilterNotificationsPrivate
false
تمكين الإخطارات للمرشحات الخاصة.
$wgAbuseFilterCentralDB
null
MW 1.41+ اسم قاعدة البيانات التي سيتم تخزين عوامل تصفية الإساءة العالمية فيها (مدعومة فقط في الإصدار الأحدث للتطوير). يتطلب تثبيت CentralAuth وإلا ستنقطع المرشحات العامة في مزرعة wiki.
$wgAbuseFilterIsCentral
false
MW 1.41+ قم بتعيين هذا المتغير إلى true للموقع wiki حيث يتم تخزين AbuseFilters العامة (مدعوم فقط في الإصدار الأحدث للتطوير). يتطلب تثبيت CentralAuth وإلا ستنقطع المرشحات العامة في مزرعة wiki.
$wgAbuseFilterLocallyDisabledGlobalActions
[
	"throttle" => false,
	"warn" => false,
	"disallow" => false,
	"blockautopromote" => false,
	"block" => false,
	"rangeblock" => false,
	"degroup" => false,
	"tag" => false
]
عدم السماح للمرشحات المركزية باتخاذ الإجراءات التي تم تعيينها على أنها صحيحة في هذا المتغير.
$wgAbuseFilterBlockDuration
'indefinite'
مدة الكتل التي صنعها AbuseFilter.
اعتبارًا من 1.31.0-wmf.25، يمكن تحديد فترات الفدرة لكل مرشح منفرد وستتجاوز هذا المتغير. يتم استخدام هذا المتغير فقط عند تمكين الكتلة من أجل التحديد المسبق للمدة الافتراضية.
$wgAbuseFilterAnonBlockDuration
null
مدة الحظر التي تم إجراؤها بواسطة AbuseFilter على المستخدمين الذين لم يقوموا بتسجيل الدخول. سيتم استخدام القيمة $wgAbuseFilterBlockDuration إذا لم يتم تعيينها.
اعتبارًا من 1.31.0-wmf.25، يمكن تحديد فترات الفدرة لكل مرشح منفرد وستتجاوز هذا المتغير. يتم استخدام هذا المتغير فقط عند تمكين الكتلة من أجل التحديد المسبق للمدة الافتراضية.
$wgAbuseFilterBlockAutopromoteDuration
5
المدة، بالأيام، التي يتم خلالها حظر الترويج التلقائي للمستخدمين بواسطة الفلاتر.
$wgAbuseFilterDefaultWarningMessage
[
    'default' => 'abusefilter-warning'
]
رسائل التحذير الافتراضية، لكل مجموعة تصفية
$wgAbuseFilterDefaultDisallowMessage
[
    'default' => 'abusefilter-disallowed'
]
عدم السماح بالرسائل الافتراضية، لكل مجموعة تصفية
$wgAbuseFilterLogIP
true
هل يجب تضمين عنوان IP في سجل فلتر السوء؟
$wgAbuseFilterLogIPMaxAge
3 * 30 * 24 * 3600
العمر المستخدم كمعيار لحذف بيانات سجل العناوين IP القديمة. القيمة الافتراضية هي 3 أشهر. يُستخدم ذلك من قبل النص البرمجي للصيانة purgeOldLogIPData.php.
$wgAbuseFilterProfileActionsCap
10000
عدد الإجراءات التي تحدد متى يجب إعادة تعيين إحصاءات التحليل الشخصي.
$wgAbuseFilterLogPrivateDetailsAccess
false
هل يتم تسجيل الوصول إلى معلومات خاصة من إدخال سجل فلتر السوء؟
$wgAbuseFilterPrivateDetailsForceReason
false
هل يُجبر المستخدمون على تقديم سبب للوصول إلى معلومات خاصة من إدخال سجل فلتر السوء؟
$wgAbuseFilterSlowFilterRuntimeLimit
500
الوقت التشغيلي بالميلي ثانية قبل اعتبار فلتر بطيء.
$wgAbuseFilterRangeBlockSize
[
    'IPv4' => '16',
    'IPv6' => '19',
]
حجم النطاق المحظور بواسطة إجراء 'rangeblock'.
$wgAbuseFilterProtectedVariables
[ "user_unnamed_ip" ]
Array of variables that are be considered protected (limited access) and require the abusefilter-access-protected-vars right to use/view.

تنظيم الحد الطارئ

يأتي AbuseFilter مع ميزة تقوم تلقائيًا بتنظيم (تعطيل) الفلاتر التي تم تعديلها مؤخرًا وتتطابق مع عتبة معينة من آخر الإجراءات.

يتم ذلك لمنع التعديلات الضارة على الفلاتر التي تحظر كل مستخدم يقوم بإجراء على الويكي أو ما شابه ذلك.

شرط تعطيل الفلتر يعتمد على هذه المتغيرات:

  • $wgAbuseFilterEmergencyDisableThreshold - نسبة الاطابات على اجمالي عدد الإجراءات في الفترة المراقبة.
  • $wgAbuseFilterEmergencyDisableCount - عدد المطابقات للفلتر في الفترة المراقبة.
  • $wgAbuseFilterEmergencyDisableAge - عمر الفلتر المراد احتسابه. إذا كان آخر تعديل للفلتر أقدم من هذا العدد من الثواني، فلن يتم تنظيم الفلتر، ما لم يكن قد تم بالفعل تنظيمه.

الفلاتر التي تم تنظيمها يمكن تحديدها في قائمة الفلاتر (Special:AbuseFilter) بالحالة مفعل, درجة عالية من التطابق. يتم تنظيم الفلاتر بشكل صامت، ولا يوجد طريقة لرؤية متى تم تنظيم فلتر ما، باستثناء عندما يتم تثبيت Extension:Echo ، ثم يتم إرسال إشعار إلى المستخدم الذي قام بآخر تعديل للفلتر.

عندما يتم تنظيم فلتر، فإنه لا ينفذ أي إجراء خطير (الإجراءات التي تقتصر عادة على الحقوق الخاصة مثل حظر المستخدم أو إزالته من المجموعات، والتي يتحكم فيها $wgAbuseFilterActionRestrictions)، ويُسمح فقط بالإجراءات "الآمنة" (تلك التي يمكن أن تحذر أو تمنع الإجراء الجاري). الفلاتر التي تم تنظيمها لا تُمكّن تلقائيًا مجددًا. لإلغاء التنظيم، يجب عليك تعديل الفلتر. لاحظ أنه يجب عليك فعليًا تغيير شيء ما في الفلتر؛ تغيير شيء في ملاحظات الفلتر يكفي.

لاحظ أن تعديل الفلتر يحدث عمره، ويمكن أن يتسبب في تعطيله إذا وصل مرة أخرى إلى الشروط المطلوبة لتنظيمه في فترة قصيرة منذ آخر تعديل، مما يؤدي إلى فلتر غير قابل للاستخدام إذا كان هناك في ويكي الخاص بك مزيد من التعديلات الضارة من التعديلات الشرعية.

إنشاء وإدارة المرشحات

بمجرد تثبيت الملحق، يمكن إنشاء المرشحات /اختبارها /تغييرها /حذفها ويمكن الوصول إلى السجلات من صفحة إدارة مرشحات الإساءة Special:AbuseFilter.

  • لاستيراد فلاتر من ويكيبيديا: عندما تقوم بتثبيت الامتداد، اذهب إلى w:Special:AbuseFilter، اختر فلترًا (مثلاً w:Special:AbuseFilter/3، ثم انقر فوق "تصدير هذا الفلتر إلى ويكي آخر"، انسخ النص، انتقل إلى "Special:AbuseFilter/import" على ويكيك، والصق النص.

واجهة برمجة التطبيقات (API)

يضيف AbuseFilter وحدتين لقائمة واجهة برمجة التطبيقات (API)، واحدة لتفاصيل فلاتر السوء ("abusefilters") والأخرى لسجل السوء، حيث يكون منفصلاً عن سجلات ميدياويكي الأخرى ("abuselog"). لا يمكن إنشاء أو تعديل فلاتر السوء باستخدام واجهة برمجة التطبيقات (API).

list = abusefilters

قائمة المعلومات حول الفلاتر

المعلمات
  • abfstartid - معرف الفلتر للبدء في عملية التعداد
  • abfendid - معرف الفلتر لإنهاء عملية التعداد
  • abfdir - الاتجاه الذي يتم فيه التعداد (أقدم، أحدث)
  • abfshow - عرض الفلاتر التي تلبي هذه الشروط (مُفعلة|غير مُفعلة|محذوفة|غير محذوفة|خاصة|غير خاصة)
  • abflimit - أقصى عدد من الفلاتر ليتم سردها
  • abfprop - الخصائص التي تُراد الحصول عليها (المعرف|الوصف|النمط|الإجراءات|المطابقات|التعليقات|المحرر الأخير|وقت آخر تعديل|الحالة|الخاص)

عندما تكون الفلاتر خاصة، قد يكون بعض الخصائص المحددة بواسطة abfprop غير موجودة ما لم تكن لديك الحقوق المناسبة كمستخدم.

أمثلة
عرض فلاتر السوء غير الخاصة
النتيجة
{
    "batchcomplete": "",
    "continue": {
        "abfstartid": 18,
        "continue": "-||"
    },
    "query": {
        "abusefilters": [
            {
                "id": 1,
                "hits": 41430
            },
            {
                "id": 3,
                "hits": 957485
            },
            {
                "id": 5,
                "hits": 5931
            },
            {
                "id": 6,
                "hits": 19
            },
            {
                "id": 8,
                "hits": 7
            },
            {
                "id": 9,
                "hits": 41354
            },
            {
                "id": 11,
                "hits": 132971
            },
            {
                "id": 12,
                "hits": 139693
            },
            {
                "id": 14,
                "hits": 63
            },
            {
                "id": 15,
                "hits": 15
            }
        ]
    }
}

list = abuselog

سرد الحالات التي أثارت فلتر السوء الإجراءات.

المعلمات
  • aflstart - الطابع الزمني للبدء في عملية التعداد
  • aflend - الطابع الزمني لإنهاء عملية التعداد
  • afldir - الاتجاه الذي يجب فيه تعداد العناصر (الأقدم، الأحدث)
  • afluser - عرض فقط الإدخالات التي تم تنفيذها من قبل مستخدم أو عنوان IP معين.
  • afltitle - عرض فقط الإدخالات التي تضمنت الصفحة المحددة.
  • aflfilter - إظهار الإدخالات التي أثرتها معرّفات التصفية المعطاة
  • afllimit - أقصى عدد من الإدخالات لعرضها
  • aflprop - أي الخصائص للاسترداد؟ (ids|filter|user|ip|title|action|details|result|timestamp|hidden|revid|wiki)
مثال
قائمة الحالات التي تم فيها تنشيط مرشح السوء ردًا على إجراءات المستخدم "SineBot".
النتيجة
{
    "batchcomplete": "",
    "continue": {
        "aflstart": "2018-03-06T02:34:18Z",
        "continue": "-||"
    },
    "query": {
        "abuselog": [
            {
                "id": 27219261,
                "filter_id": "1073"
            },
            {
                "id": 26938051,
                "filter_id": ""
            },
            {
                "id": 23388942,
                "filter_id": "1"
            },
            {
                "id": 22044912,
                "filter_id": ""
            },
            {
                "id": 22032235,
                "filter_id": ""
            },
            {
                "id": 22032196,
                "filter_id": ""
            },
            {
                "id": 21983882,
                "filter_id": ""
            },
            {
                "id": 20594818,
                "filter_id": "904"
            },
            {
                "id": 20593489,
                "filter_id": "904"
            },
            {
                "id": 20590442,
                "filter_id": "904"
            }
        ]
    }
}

أخطاء محتملة

  • قد يواجه بعض المستخدمين مشكلة في إنشاء فلاتر جديدة أو تعديل الفلاتر القديمة، حيث يتم إعادة توجيه المستخدم إلى الصفحة الأصلية دون نجاح العملية. إذا كانت الويكي تستخدم شهادات SSL، فقد يكون هذا الخطأ ناتجًا عن قيمة $wgServer ، التي قد تستخدم "http://" بدلاً من "https://". إشارة إلى هذا الخطأ ستكون أن المتصفح يعطي تحذير https لصفحات Special:AbuseFilter. (Topic:T23dyyih0ofjada5)

التكامل مع الإضافات الأخرى

يمكنك دمج AbuseFilter مع الإضافات الأخرى بطرق متنوعة.

إضافة متغيرات للتصفية

من الممكن إضافة متغيرات جديدة لاستخدامها في فلاتر الاستخدام السيء. قائمة أمثلة متوفرة . للقيام بذلك، يجب عليك:

  • أضف معالجًا لخطاف AbuseFilter-builder . لإضافة متغير، يجب استخدام $builder['vars']['variable_name'] = 'i18n-key';، حيث variable_name هو اسم المتغير، وi18n-key هو جزء من مفتاح i18n. المفتاح الكامل سيكون abusefilter-edit-builder-vars-{$your_key}.
  • أضف الرسائل i18n التي اخترتها في النقطة السابقة.
  • اختر منبثق الخطاف حيث سيتم حساب المتغير. يمكنك، استنادًا إلى حالتك الاستخدامية،
    • تطبيق الخطاف AbuseFilter-generateTitleVars ؛ هذا مخصص خصيصًا للمتغيرات المتعلقة بالصفحة.
    • تطبيق الخطاف AbuseFilter-generateUserVars ؛ هذا مخصص خصيصًا للمتغيرات المتعلقة بالصفحة.
    • Implement the AbuseFilter-generateGenericVars hook; this is for variables not bound to a specific page or user;
    • Implement the AbuseFilterAlterVariables hook; this is a bit more flexible than the other hooks, but it has a downside: your variable will not be available when examining past RecentChanges entries. If you want to implement that feature (and it's recommended to do so), you should use one of the hooks listed above, and use its third parameter ($RCRow).
  • Inside the hook handler, there are two ways to add a variable:
    • The "direct" way is calling $vars->setVar( 'var_name', var_value );. This is ideal only when the value is easy and quick to compute: the value is computed even if no active filter will use it.
    • The "lazy" way is calling $vars->setLazyLoadVar( 'var_name', 'method_name', $params );. Here, 'method_name' is a (unique) identifier that will be used to compute the variable (it's recommended to prefix it with the name of your extension). To register the method, you should add a handler for the AbuseFilter-computeVariable hook; therein, you should check if the $method passed matches your 'method_name', and if so, compute the variable. Lastly, $params is an array of parameters that you'll need to compute the variable; these are passed to the computeVariable hook handler. For an example of this, you can check out CentralAuth's global_user_groups.

Adding custom actions

You can add custom action handlers, so that each filter may perform further actions. To do that, you choose a name for the action ('my-action' from now on), and then:

  • Create a class named e.g. MyAction, that should extend \MediaWiki\Extension\AbuseFilter\Consequence, which can also implement HookAborterConsequence or ConsequencesDisablerConsequence
  • Add a subscriber to the AbuseFilterCustomActions hook; the subscriber should provide a callback as documented in the hook documentation, that returns an instance of the class created above, for instance:
class MyAction extends \MediaWiki\Extension\AbuseFilter\Consequence {
    public function run() {
        throw new \Exception( 'Write me' );
    }
}
public function onAbuseFilterCustomActions( &$actions ) {
    $actions[] = function ( \MediaWiki\Extension\AbuseFilter\Consequence\Parameters $params, array $rawParams ) : MyConsequence {
        return new MyAction( $params, $rawParams );
    };
}

Then you should add the following i18n messages; you can replace 'my_action' with e.g. 'block' to see what the messages are for:

  • 'abusefilter-edit-action-${my_action}'
  • 'abusefilter-action-${my_action}'

Adding rule groups

You can also add extra rule groups, which can be used to group existing abuse filters. Note that, at the moment, each filter can only be in a single group (T116642). Currently, the only known consumer of this feature is Extension:StructuredDiscussions . To do that, you should:

  • Append the name of the group to $wgAbuseFilterValidGroups.
  • Add some code to run the filters with your group. Note that AbuseFilter won't do that on its own. To do that, you should construct an AbuseFilterRunner object, passing in the name of your group.

See also