Extension:AbuseFilter/Kural biçimi

From mediawiki.org
This page is a translated version of the page Extension:AbuseFilter/Rules format and the translation is 97% complete.
Outdated translations are marked like this.

Kurallar özel bir dildir. C/Java/Perl benzeri bir dildeki koşullara benzer şekilde biçimlendirilirler.

Dizeler

Tek veya çift tırnak içine yerleştirerek (dizeler için) veya olduğu gibi yazarak (sayılar için hem kayan nokta hem de tamsayı) bir değişmez belirtebilirsiniz. \n ile satır sonu, \t ile sekme karakterleri alabilir ve ayrıca bir ters eğik çizgi ile tırnak karakterinden kaçabilirsiniz.

+ (artı) sembolünü birleştirme iki değişmez dize veya bir dizeyle iki değişken için kullanın.

Örnekler
"Bu bir dize"
'Buda bir dize'
'Bu dize başarısız olmamalıdır'
"Bu dize\nSatır atlama var"
1234
1.234
-123

Kullanıcı tanımlı değişkenler

Bir koşul içinde bir satırda (; ile kapatılmış) := atama simgesiyle anlaşılması kolay olacak özel değişkenler tanımlayabilirsiniz. Bu tür değişkenler harf, alt çizgi ve sayı (ilk karakter dışında) kullanabilir ve büyük/küçük harfe duyarlı değildir. Örnek (w:Special:AbuseFilter/79):

(
	line1:="(\{\{(r|R)eflist|\{\{(r|R)efs|<references\s?/>|</references\s?>)";
	rcount(line1, removed_lines)
) > (
	rcount(line1, added_lines)
)

Diziler

AbuseFilter, aşağıdaki örneklerde olduğu gibi kullanılabilen ilişkisel olmayan dizileri destekler.

Dikkat! Dikkat: page_namespace in [14, 15] gibi ifadeler beklendiği gibi çalışmayabilir. Bu, page_namespace, 1, 4 veya 5 ise true olarak değerlendirilecektir. Daha fazla bilgi ve olası geçici çözümler için lütfen T181024 sayfasına bakın.
my_array := [ 5, 6, 7, 10 ];
my_array[0] == 5
length(my_array) == 4
int( my_array ) === 4 // Uzunlukla aynı
float( my_array ) === 4.0 // Öğeleri sayar
string(my_array) == "5\n6\n7\n10\n" // Not: Son satır sonu gelecekte kaldırılabilir
5 in my_array == true
'5' in my_array == true
'5\n6' in my_array == true // Not: Bu, dizilerin dizeye nasıl dönüştürüldüğünden, yani onları satır kesmeleriyle doldurduğundan kaynaklanmaktadır.
1 in my_array == true // Not: Bu, 'in' dizgelerine argümanlar attığı için, 1 '10' da yakalandığı ve true döndürdüğü için olur.
my_array[] := 57; // Bu, dizinin sonuna bir öğe ekler
my_array === [ 5, 6, 7, 10, 57 ]
my_array[2] := 42; // Ve bu, dizideki bir öğeyi değiştirmek içindir
my_array === [ 5, 6, 42, 10, 57 ]

Yorumlar

Aşağıdaki sözdizimini kullanarak yorumları belirtebilirsiniz:

/* Bu bir yorum */

Aritmetik

Aşağıdaki sözdizimi ile değişkenler ve değişmezler üzerinde aritmetik yapmak için temel aritmetik sembolleri kullanabilirsiniz:

  • - — Sağ-el işleneni sol-el işlenenden çıkar.
  • + — Sağ-el işleneni sol-el işlenene ekleyin.
  • * — Sol el operandını sağ taraf operandıyla çarpın.
  • / — Soldaki işleneni sağ el işlenene bölün.
  • ** — Sol-el işleneni sağ-el işleneni tarafından belirtilen üssel kuvvete yükseltin.
  • % — Soldaki işlenen sağ taraftaki işlenene bölündüğünde verilen kalanı döndür.

Döndürülen sonucun türü, PHP tarafından döndürülecek olanla aynıdır ve bunun için birçok belge çevrimiçi bulunabilir. Bu AF ayrıştırıcı testinde daha kapsamlı örnekler bulunabilir.

Örnek Sonuç
1 + 1 2
2 * 2 4
1 / 2 0.5
9 ** 2 81
6 % 5 1

Boole işletmeleri

Sadece ve ancak birkaç koşulun tümü true ise, birkaç koşuldan biri true ise veya tüm koşullardan biri ve yalnızca biri true ise eşleşebilirsiniz.

  • x | y — OR – koşullardan biri veya daha fazlası true ise true döndürür.
  • x & y — AND – her iki koşul da true ise true döndürür.
  • x ^ y — XOR – biri true ise ve iki koşuldan yalnızca biri true ise true döndürür.
  • !x — NOT – koşul true değilse true döndürür.

Örnekler

Kod Sonuç
1 | 1 true
1 | 0 true
0 | 0 false
1 & 1 true
1 & 0 false
0 & 0 false
1 ^ 1 false
1 ^ 0 true
0 ^ 0 false
!1 false
!0 true

Basit karşılaştırmalar

Değişkenleri diğer değişkenlerle ve değişmezleri aşağıdaki sözdizimi ile karşılaştırabilirsiniz:

  • <, > — Sol el işlenen sağ taraftaki işlenenden küçük/büyükse true döndür. Dikkat edin: işlenenler dizelere dönüştürülür ve PHP'de olduğu gibi null < herhangi bir sayı === true ve null > herhangi bir sayı === false olur.
  • <=, >= — Sol taraftaki işlenen, sağ taraftaki işlenenden küçük veya ona eşit/büyük ise true döndürür. Dikkat edin: işlenenler dizelere dönüştürülür ve PHP'de olduğu gibi null <= herhangi bir sayı === true ve null >= herhangi bir sayı $4 === false.
  • == (veya =), != — Soldaki işlenen, sırasıyla sağdaki işlenen eşit/eşit değil ise true döndürür.
  • ===, !== — Soldaki işlenen, sağ el işlenene eşit/eşit değil ise VE sol el işlenen, sağ el işleneni için sırasıyla aynı/aynı değil veri türündeyse true döndür.
Örnek Sonuç
1 == 2 false
1 <= 2 true
1 >= 2 false
1 != 2 true
1 < 2 true
1 > 2 false
2 = 2 true
'' == false true
'' === false false
1 == true true
1 === true false
['1','2','3'] == ['1','2','3'] true
[1,2,3] === [1,2,3] true
['1','2','3'] == [1,2,3] true
['1','2','3'] === [1,2,3] false
[1,1,''] == [true, true, false] true
[] == false & [] == null true
['1'] == '1' false[1]

Yerleşik değişkenler

Kötüye kullanım filtresi, çeşitli değişkenleri adlarına göre ayrıştırıcıya aktarır. Bu değişkenlere, harflerin çalışacağı bir yere isimlerini yazarak erişilebilir. Kötüye kullanım günlüğünde her bir taleple ilişkili değişkenleri görüntüleyebilirsiniz.

AbuseFilter'deki değişkenler

Değişkenler her zaman kullanılabilir

Dikkat! Dikkat: Kullanıcıyla ilgili değişkenler, tek bir durum dışında her zaman mevcuttur: oluşturucu oturum açamadığında hesap oluşturma. user_ ile başlayan tüm değişkenler etkilenir.
Açıklama Ad Veri türü Notlar
Eylem action dize Aşağıdakilerden biri: edit, move, createaccount, autocreateaccount, delete, upload[2], stashupload[3]
Unix zaman damgası timestamp dize int(timestamp) size tarihi, saati, haftanın gününü vb. hesaplayabileceğiniz bir sayı verir.
Vikinin veritabanı adı wiki_name dize Örneğin, bu İngilizce Vikipedi'de "enwiki" ve İtalyanca Vikisöz'de "itwikiquote".
Vikinin dil kodu wiki_language dize Örneğin, bu İngilizce Vikipedi'de "en" ve İtalyanca Vikisöz'de "it". Commons, Meta ve Vikiveri gibi çok dilli vikiler de "en" olarak raporlanır.
Kullanıcının değişiklik sayısı user_editcount tamsayı/boş Yalnızca kayıtsız kullanıcılar için boş.
Kullanıcı hesabının adı (IP in case the user is not registered) user_name dize
"createaccount" ve "autocreateaccount" eylemleri için, oluşturulmakta olan hesabın adını istiyorsanız accountname kullanın.
Type of the user account user_type string The type of the user, which will be one of ip, temp (if the user is using a temporary account ), named, external, or unknown.
E-posta adresinin doğrulanma zamanı user_emailconfirm dize/boş Biçimde: YYYYMMDDHHMMSS. E-posta onaylanmadıysa boş.
Kullanıcı hesabının yaşı user_age tamsayı Saniyeler içinde. Kayıtlı olmayan kullanıcılar için 0.
Kullanıcının engelli olup olmadığı user_blocked boole Engellenen kayıtlı kullanıcılar için True. Düzenleyici, engellenmemiş kayıtlı bir kullanıcı olsa bile, engellenen IP adreslerinden yapılan düzenlemeler için de geçerlidir. Aksi takdirde False.
Bu, kısmi ve site genelindeki engeller arasında ayrım yapmaz.
Kullanıcının olduğu gruplar (içinde oldukları dahil) user_groups dizi dizesi Special:ListGroupRights sayfasına bakın
Kullanıcının sahip olduğu haklar user_rights dizi dizesi Special:ListGroupRights sayfasına bakın
Sayfa kimliği article_articleid tamsayı (kaldırıldı) Bunun yerine page_id kullanın.
Sayfa kimliği (kenar çubuğundaki "sayfa bilgileri" bağlantısından görülebilir) page_id tamsayı Teorik olarak bu, yeni sayfalar için 0'dır, ancak bu güvenilir değildir. Tam bir sonuca ihtiyacınız varsa, yeni sayfa oluşturmayı belirlemek için "page_age == 0" kullanın. (bunun daha yavaş olduğuna dikkat edin.) This issue has been fixed in 9369d08, merged on September 11th 2023.
Sayfa ad alanı article_namespace tamsayı (kaldırıldı) Bunun yerine page_namespace kullanın.
Sayfa ad alanı page_namespace tamsayı ad alanı dizi ile ilgilidir "page_namespace == 2" veya "equals_to_any(page_namespace, 1, 3)" gibi ifadeler kullanarak ad alanlarını kontrol edin
Sayfa yaşı (saniyelerle) page_age tamsayı ilk düzenlemeden bu yana geçen saniye sayısı (veya yeni sayfalar için 0). Bu güvenilirdir, ancak yavaş olma eğilimindedir; Çok fazla hassasiyete ihtiyacınız yoksa page_id kullanmayı düşünün.
Sayfa başlığı (ad alanı olmadan) article_text dize (kaldırıldı) Bunun yerine page_title kullanın.
Sayfa başlığı (ad alanı olmadan) page_title dize
Tam sayfa başlığı article_prefixedtext dize (kaldırıldı) Bunun yerine page_prefixedtitle kullanın.
Tam sayfa başlığı page_prefixedtitle dize
Sayfanın koruma düzeyini değiştir article_restrictions_edit dize (kaldırıldı) Bunun yerine page_restrictions_edit kullanın.
Sayfanın koruma düzeyini değiştir page_restrictions_edit dizi dizesi
Sayfanın koruma düzeyini taşı article_restrictions_move dize (kaldırıldı) Bunun yerine page_restrictions_move kullanın.
Sayfanın koruma düzeyini taşı page_restrictions_move dizi dizesi
Dosyanın korumasını yükle article_restrictions_upload dize (kaldırıldı) Bunun yerine page_restrictions_upload kullanın.
Dosyanın korumasını yükle page_restrictions_upload dizi dizesi
Sayfayı koruma altına al article_restrictions_create dize (kaldırıldı) Bunun yerine page_restrictions_create kullanın.
Sayfayı koruma altına al page_restrictions_create dizi dizesi
Sayfaya katkıda bulunan son on kullanıcı article_recent_contributors array of strings (kaldırıldı) Bunun yerine page_recent_contributors kullanın.
Sayfaya katkıda bulunan son on kullanıcı page_recent_contributors dizi dizesi Bu, yavaş olma eğilimindedir (#Performans bölümüne bakın). Sorguyu gereksiz yere çalıştırmamak için bundan önce yanlış olarak değerlendirilme olasılığı daha yüksek koşullar koymaya çalışın. Kullanıcı sayfaya tek katkıda bulunan kişi ise(?) ve yalnızca son 100 revizyonu tarıyorsa bu değer boştur
Sayfada ilk katkıda bulunan kullanıcı article_first_contributor dize (kaldırıldı) Bunun yerine page_first_contributor kullanın.
Sayfada ilk katkıda bulunan kullanıcı page_first_contributor dize Bu, yavaş olma eğilimindedir (#Performans bölümüne bakın).[4] Sorguyu gereksiz yere çalıştırmamak için bundan önce yanlış olarak değerlendirilme olasılığı daha yüksek koşullar koymaya çalışın.

Bazı eylemler için mevcut değişkenler

Dikkat! Dikkat: Kullanmak istediğiniz değişkenlerin filtrelenen mevcut eylem için mevcut olup olmadığını her zaman kontrol edin, örn. action değişkenini kullanarak. Bunu yapmamak (örneğin, bir düzenleme için accountname veya bir silme için edit_delta kullanmak), söz konusu değişkeni kullanan herhangi bir kodu yanlış döndürür.
Geçmiş yüklemeler incelenirken değişkenleri düzenlemesi mevcut değildir. (T345896)
Açıklama Ad Veri türü Notlar
Değişiklik özeti/sebebi summary dize MediaWiki tarafından otomatik olarak oluşturulan özetler ("Yeni bölüm", "Sayfayı boşalttı", vb.), filtre düzenlemeyi kontrol ettikten sonra oluşturulur, böylece hata ayıklayıcı olması gerektiğini gösterse bile, asla yakalayamazlar. The variable contains whatever the user sees in the edit summary window, which may include MediaWiki preloaded section titles.[5]
Düzenlemenin küçük olarak işaretlenip işaretlenmediği (artık kullanımda değil) minor_edit dize Devre dışı bırakıldı ve 2016 ile 2018 arasındaki tüm girişler için false olarak ayarlandı.[6]
Eski sayfa vikimetin, düzenlemeden önce old_wikitext dize Bu değişken çok büyük olabilir. Performansı artırmak için mümkünse removed_lines kullanmayı düşünün.
Yeni sayfa vikimetin, düzenlemeden sonra new_wikitext dize Bu değişken çok büyük olabilir. Performansı artırmak için mümkünse added_lines kullanmayı düşünün.
Değişiklik tarafından yapılan değişikliklerin birleşik farkı edit_diff dize
Düzenleme tarafından yapılan değişikliklerin birleştirilmiş fark, dönüştürülmüş ön-kaydet edit_diff_pst dize Bu, yavaş olma eğilimindedir (#Performans bölümüne bakın). Hem added_lines hem de removed_lines kontrol etmek muhtemelen daha etkilidir.[7]
Yeni sayfa boyutu new_size tamsayı
Eski sayfa boyutu old_size tamsayı
Değişiklikteki boyut değişimi edit_delta tamsayı
Düzenlemeye eklenen satırlar, önceden kaydedilmiş dönüştürülmüş added_lines_pst dizi dizesi Mümkünse added_lines kullanın, bu daha etkilidir.
Değişiklikte eklenen satırlar added_lines dizi dizesi + ile başlayan son farktaki tüm satırları içerir
Değişiklikte çıkarılan satırlar removed_lines dizi dizesi
Yeni metindeki tüm dış bağlantılar all_links dizi dizesi This tends to be slow (see #Performance).
Düzenlemeden önceki sayfadaki bağlantılar old_links dizi dizesi This tends to be slow (see #Performance).
Değişiklikte eklenen tüm dış bağlantılar added_links dizi dizesi Bu, yavaş olma eğilimindedir (#Performans bölümüne bakın). Önce added_lines kontrol etmeyi düşünün, ardından daha az düzenlemenin yavaşlaması için added_links kontrol edin. Bu, MediaWiki'nin dış bağlantılar için kurallarına uygundur. Diziye yalnızca benzersiz bağlantılar eklenir. Bir bağlantının değiştirilmesi 1 eklenen ve 1 kaldırılan bağlantı olarak sayılacaktır.
Değişiklikte çıkarılan tüm dış bağlantılar removed_links dizi dizesi Bu, yavaş olma eğilimindedir (#Performans bölümüne bakın). Önce removed_lines kontrol etmeyi düşünün, ardından daha az düzenlemenin yavaşlaması için removed_links kontrol edin. Bu, MediaWiki'nin dış bağlantılar için kurallarına uygundur. Diziye yalnızca benzersiz bağlantılar eklenir. Bir bağlantının değiştirilmesi 1 eklenen ve 1 kaldırılan bağlantı olarak sayılacaktır.
Yeni sayfa vikimetni, ön kayıt dönüştürüldü new_pst dize This variable can be very large.
Yeni revizyonun derlenmiş HTML kaynağı new_html dize Bu değişken çok büyük olabilir. Performansı artırmak için mümkünse added_lines kullanmayı düşünün.
Yeni sayfa metni, herhangi bir biçimlendirme olmadan new_text dize Bu değişken çok büyük olabilir. Performansı artırmak için mümkünse added_lines kullanmayı düşünün.
Eski sayfa vikimetin, HTML'ye ayrıştırıldı (artık kullanımda değil) old_html dize Performans nedenleriyle devre dışı bırakıldı.
Herhangi bir biçimlendirmeden arındırılmış eski sayfa metni (artık kullanımda değil) old_text dize Performans nedenleriyle devre dışı bırakıldı.
Time since last page edit (in seconds) page_last_edit_age integer or null null when the page does not exist
Dosya içeriklerinin SHA1 hash'i file_sha1 dize [2]
Dosyanın bayt cinsinden boyutu file_size tamsayı Bayt cinsinden dosya boyutu[2]
Dosyanın piksel cinsinden genişliği file_width tamsayı Piksel cinsinden genişlik[2]
Dosyanın piksel cinsinden yüksekliği file_height tamsayı Piksel cinsinden yükseklik[2]
Dosyanın renk kanalı başına bit file_bits_per_channel tamsayı Renk kanalı başına bit miktarı[2]
Dosyanın MIME türü file_mime dize MIME türü dosyası.[2]
Dosyanın medya türü file_mediatype dize Dosya ortam türü.[8][2]
Hedef taşıma sayfasının sayfa limliği moved_to_articleid tamsayı (kaldırıldı) Bunun yerine moved_to_id kullanın.
Hedef taşıma sayfasının sayfa limliği moved_to_id tamsayı
Hedef taşıma sayfasının başlığı moved_to_text dize (kaldırıldı) Bunun yerine moved_to_title kullanın.
Hedef taşıma sayfasının başlığı moved_to_title dize
Hedef taşıma sayfasının tam başlığı moved_to_prefixedtext dize (kaldırıldı) Bunun yerine moved_to_prefixedtitle kullanın.
Hedef taşıma sayfasının tam başlığı moved_to_prefixedtitle dize
Hedef taşıma sayfasının ad alanı moved_to_namespace tamsayı
Hedef sayfa yaşını taşı (saniye olarak) moved_to_age tamsayı
Time since last move destination page edit (in seconds) moved_to_last_edit_age integer or null null when the target page does not exist
Hedef sayfanın taşınma koruma düzeyini değiştir moved_to_restrictions_edit dizi dizesi page_restrictions_edit ile aynı, ancak taşımanın hedefi için.
Hedef sayfanın taşınmasını koruma düzeyini taşı moved_to_restrictions_move dizi dizesi page_restrictions_move ile aynı, ancak taşımanın hedefi için.
Taşıma hedefi dosyasının koruma koruması moved_to_restrictions_upload dizi dizesi page_restrictions_upload ile aynı, ancak taşımanın hedefi için.
Hedef sayfayı taşı koruma oluştur moved_to_restrictions_create dizi dizesi page_restrictions_create ile aynı, ancak taşımanın hedefi için.
Hedef sayfayı taşımak için katkıda bulunan son on kullanıcı moved_to_recent_contributors dizi dizesi page_recent_contributors ile aynı, ancak taşımanın hedefi için.
Hedef sayfayı taşımaya katkıda bulunan ilk kullanıcı moved_to_first_contributor dize page_first_contributor ile aynı, ancak taşımanın hedefi için.
Kaynak taşıma sayfasının ad alanı moved_from_namespace tamsayı
Kaynak taşıma sayfası başlığı moved_from_text dize (kaldırıldı) Bunun yerine moved_from_title kullanın.
Kaynak taşıma sayfası başlığı moved_from_title dize
Kaynak taşıma sayfasının tam başlığı moved_from_prefixedtext dize (kaldırıldı) Bunun yerine moved_from_prefixedtitle kullanın.
Kaynak taşıma sayfasının tam başlığı moved_from_prefixedtitle dize
Kaynak taşıma sayfasının sayfa kimliği moved_from_articleid tamsayı (kaldırıldı) Bunun yerine moved_from_id kullanın.
Kaynak taşıma sayfasının sayfa kimliği moved_from_id tamsayı
Kaynak sayfa yaşını taşı (saniye olarak) moved_from_age tamsayı
Time since last move source page edit (in seconds) moved_from_last_edit_age integer
Kaynak sayfasının koruma düzeyini değiştir moved_from_restrictions_edit dizi dizesi page_restrictions_edit ile aynı, ancak taşımanın hedefi için.
Kayna sayfasının koruma düzeyini taşı moved_from_restrictions_move dizi dizesi page_restrictions_move ile aynı, ancak taşımanın hedefi için.
Taşıma kaynak dosyasının korumasını yükleyin moved_from_restrictions_upload dizi dizesi page_restrictions_upload ile aynı, ancak taşımanın hedefi için.
Taşıma kaynak sayfasının koruması oluşturun moved_from_restrictions_create dizi dizesi page_restrictions_create ile aynı, ancak taşımanın hedefi için.
Kaynak sayfayı taşımak için katkıda bulunan son on kullanıcı moved_from_recent_contributors dizi dizesi page_recent_contributors ile aynı, ancak taşımanın hedefi için.
Kaynak sayfayı taşımaya katkıda bulunan ilk kullanıcı moved_from_first_contributor dize page_first_contributor ile aynı, ancak taşımanın hedefi için.
Hesap adı (hesap oluşturulduğunda) accountname dize
Eski revizyonun içerik modeli old_content_model dize İçerik modeli değişiklikleri hakkında bilgi için Help:ChangeContentModel sayfasına bakın
Yeni revizyonun içerik modeli new_content_model dize İçerik modeli değişiklikleri hakkında bilgi için Help:ChangeContentModel sayfasına bakın

Diğer uzantılardan gelen değişkenler

Bu değişkenlerin çoğu, geçmiş düzenlemeler incelenirken her zaman yanlış olarak ayarlanır ve düzenleme yapıldığı andaki gerçek değerlerini yansıtmayabilir. T102944 sayfasına bakın.
Açıklama Ad Veri türü Değerler Ekleyen
Kullanıcının olduğu küresel gruplar global_user_groups dizi CentralAuth
Kullanıcının genel düzenleme sayısı global_user_editcount tamsayı CentralAuth
Global groups that the user is in (on account creation) global_account_groups array Available only when action is 'createaccount' (then it is always empty) or 'autocreateaccount'. CentralAuth
Global edit count of the user (on account creation) global_account_editcount integer Available only when action is 'createaccount' (then it is always zero) or 'autocreateaccount'. CentralAuth
OAuth consumer used to perform this change oauth_consumer tamsayı OAuth
Yapısal Tartışmalar panosunun sayfa kimliği board_articleid tamsayı (kaldırıldı) Bunun yerine board_id kullanın. StructuredDiscussions
Yapısal Tartışmalar panosunun sayfa kimliği board_id tamsayı StructuredDiscussions
Yapısal Tartışmalar panosunun ad alanı board_namespace tamsayı ad alanı dizi ile ilgilidir StructuredDiscussions
Yapısal Tartışmalar panosunun başlığı (ad alanı olmadan) board_text dize (kaldırıldı) Bunun yerine board_title kullanın. StructuredDiscussions
Yapısal Tartışmalar panosunun başlığı (ad alanı olmadan) board_title dize StructuredDiscussions
Yapısal Tartışmalar kurulunun tam başlığı board_prefixedtext dize (kaldırıldı) Bunun yerine board_prefixedtitle kullanın. StructuredDiscussions
Yapısal Tartışmalar kurulunun tam başlığı board_prefixedtitle dize StructuredDiscussions
Çeviri biriminin kaynak metni translate_source_text dize Translate
Çeviri için hedef dil translate_target_language dize Bu, İngilizce için en gibi dil kodudur. Translate
Değişikliğin bir Tor çıkış düğümünden yapılıp yapılmadığı tor_exit_node boole eylem bir tor çıkış düğümünden geliyorsa true. TorBlock
Bir kullanıcının mobil arayüz üzerinden değişiklik yapıp yapmadığı user_mobile boole mobil kullanıcılar için true, aksi takdirde false. MobileFrontend
Kullanıcının mobil uygulamadan düzenleme yapıp yapmayacağı user_app boole Kullanıcı mobil uygulamadan düzenleme yapıyorsa true, aksi takdirde false. MobileApp
Sayfa görüntüleri[1] article_views tamsayı (kaldırıldı) Bunun yerine page_views kullanın. HitCounters
Sayfa görüntülemeri[2] page_views tamsayı sayfa görüntülemelerinin miktarı HitCounters
Kaynak sayfa görüntülemeleri[3] moved_from_views tamsayı kaynak sayfanın sayfa görüntülemelerinin miktarı HitCounters
Hedef sayfa görüntülemeleri[4] moved_to_views tamsayı hedef sayfanın sayfa görüntülenme miktarı HitCounters
IP adresinin stopforumspam.com listesi kullanılarak engellenip engellenmediği[5] sfs_blocked boole IP adresinin stopforumspam.com listesi kullanılarak engellenip engellenmediği StopForumSpam

Notlar

action='move' olduğunda, yalnızca summary, action, timestamp ve user_* değişkenleri kullanılabilir. page_* değişkenleri de mevcuttur, ancak önek, sırasıyla orijinal makale adının ve hedef olanın değerlerini temsil eden moved_from_ ve moved_to_ ile değiştirilir. Örneğin, page_title yerine moved_from_title ve moved_to_title.

MediaWiki 1.28 (gerrit:295254) sürümünden beri, action='upload' yalnızca bir karşıya yükleme yayınlanırken kullanılır ve saklanacak yüklemeler için kullanılmaz. Depolamaya yapılan yüklemeler de dahil olmak üzere tüm yüklemeler için kullanılan yeni bir action='stashupload' tanıtıldı. Bu, eskiden action='upload' gibi davranır ve yalnızca dosya meta veri değişkenlerini (file_*) sağlar. summary, new_wikitext ve diğerleri dahil olmak üzere sayfa düzenlemeyle ilgili değişkenler artık action='upload' için mevcuttur. Her dosya yüklemesi için, filtreler action='stashupload' ile çağrılabilir (yüklemelerin saklanması için) ve her zaman action='upload'; action='edit' ile çağrılmazlar.

Filtre yazarları, bir dosya yalnızca dosya içeriğine dayalı olarak kontrol edilebildiğinde (örneğin, düşük çözünürlüklü dosyaları reddetmek için) filtre kodunda action='stashupload' | action='upload' ve yalnızca düzenlemenin vikimetin bölümlerinin de incelenmesi gerektiğinde action='upload' kullanmalıdır. Örneğin, açıklaması olmayan dosyaları reddetmek için. Bu, yükleme ayrıntılarını doldurmak için zaman harcamadan önce kullanıcıyı hata konusunda bilgilendirmek için dosyayı karşıya yüklemeyi ve dosyayı yayınlamayı ayıran araçlara (örneğin UploadWizard veya upload dialog) izin verecektir.

Performans

Yukarıdaki tabloda belirtildiği gibi, bu değişkenlerden bazıları çok yavaş olabilir. Filtreleri yazarken, koşul sınırının filtrelerin ne kadar ağır olduğuna dair iyi bir ölçüt olmadığını unutmayın. Örneğin, *_recent_contributors veya *_links gibi değişkenler her zaman hesaplanacak bir DB sorgusuna ihtiyaç duyarken, *_pst değişkenleri metni ayrıştırmak zorunda kalacak, ki bu yine ağır bir işlemdir; tüm bu değişkenler çok dikkatli kullanılmalıdır. Örneğin, İtalyanca Vikipedi'de 135 aktif filtre ve ortalama 450 kullanım koşuluyla, filtrelerin uygulama süresinin 500 ms civarında olduğu ve piklerin 15 saniyeye ulaştığı gözlemlendi. Tek bir filtreden added_links değişkeni kaldırmak ve başka bir filtrenin added_lines_pst kullandığı durumları yarıya indirmek, ortalama yürütme süresini 50 ms'ye getirdi. Daha spesifik olarak:

  • Yüksek doğruluğa ihtiyaç duyduğunuzda _links değişkenleri kullanın ve diğer değişkenlerde (örneğin, added_lines) "http://..." ile kontrol etmek ağır arızalara yol açabilir;
  • PST olmayan değişkenlerin yeterli olmadığından gerçekten emin olduğunuzda _pst değişken kullanın. Hangisini kontrol edeceğinize koşullu olarak da karar verebilirsiniz: örneğin, bir imzayı incelemek istiyorsanız, önce added_lines, ~~~ içerip içermediğini kontrol edin;
  • Genel olarak, bu değişkenlerle uğraşırken, daha fazla koşulu tüketmek, ancak ağır şeyleri hesaplamaktan kaçınmak her zaman çok daha iyidir. Bunu başarmak için her zaman ağır değişkenleri son koşullar olarak koyun.

Son olarak, belirli bir filtre için bir değişken her hesaplandığında, kaydedileceğini ve diğer herhangi bir filtrenin onu hemen alacağını unutmayın. Bu değişkeni hesaplayan tek bir filtrenin onu kullanan düzinelerce filtre olarak saydığı anlamına gelir.

Anahtar kelimeleri

Özellikle belirtilmediğinde, anahtar kelimeler işlenenlerini dizelere dönüştürür

Aşağıdaki özel anahtar sözcükler, sık kullanılan işlevler için dahil edilmiştir:

  • like (veya matches), soldaki işlenen, sağ taraftaki işlenende glob kalıbı ile eşleşirse doğru döndürür.
  • Sağdaki işlenen (bir dizge) sol taraf işleneni içeriyorsa in true döndürür. Not: boş dizeler başka herhangi bir dizede yer almaz veya içermez (boş dizenin kendisi bile).
  • contains, in gibi çalışır, ancak sol ve sağ el işlenenleri değiştirildiğinde. Not: boş dizeler başka herhangi bir dizede yer almaz veya içermez (boş dizenin kendisi bile).
  • rlike (veya regex) ve irlike3, soldaki işlenen, sağ taraftaki işlenendeki düzenli ifade kalıbıyla eşleşiyorsa (içeriyorsa) (irlike, büyük/küçük harf duyarsızdır).
    • Sistem PCRE kullanır.
    • Etkinleştirilen tek PCRE seçeneği PCRE_UTF8 (değiştirici u [$url PHP'de]); irlike için hem PCRE_CASELESS hem de PCRE_UTF8 etkinleştirilir (değiştirici iu)
  • if ... then ... end
  • if ... then ... else ... end
  • ... ? ... : ...
  • true, false, null

Örnekler

Kod Sonuç Yorum
"1234" like "12?4" True
"1234" like "12*" True
"foo" in "foobar" True
"foobar" contains "foo" True
"o" in ["foo", "bar"] True Dize dökümü nedeniyle
"foo" regex "\w+" True
"a\b" regex "a\\\\b" True Normal ifade kullanarak kaçış karakteri ters eğik çizgiyi aramak için dört ters eğik çizgi veya iki \x5C kullanmanız gerekir. (Her ikisi de iyi çalışıyor.)
"a\b" regex "a\x5C\x5Cb" True

İşlevler

Bazı genel sorunları hafifletmek için bir dizi yerleşik işlev dahil edilmiştir. functionName( arg1, arg2, arg3 ) genel biçiminde yürütülürler ve herhangi bir değişmez değer veya değişken yerine kullanılabilirler. Argümanları değişmez değerler, değişkenler ve hatta diğer işlevler olarak verilebilir.

ad açıklama
lcase Küçük harfe dönüştürülmüş bağımsız değişkeni döndürür.
ucase Büyük harfe dönüştürülmüş bağımsız değişkeni döndürür.
length Bağımsız değişken olarak verilen dizenin uzunluğunu döndürür. Argüman bir diziyse, öğe sayısını döndürür.
string Dize veri türüne dönüştürür. Eğer argüman bir diziyse, onu satır sonu ile yerleştirir.
int Tamsayı veri türüne dönüştürür.
float Kayan noktalı veri türüne dönüştürür.
bool Boole veri türüne dönüştürür.
norm rmwhitespace(rmspecials(rmdoubles(ccnorm(arg1)))) ile eşittir.
ccnorm Bağımsız değişkendeki kafa karıştırıcı/benzer karakterleri normalleştirir ve kanonik bir biçim döndürür. Karakterlerin ve değiştirmelerinin bir listesi Git'te bulunabilir, ör. ccnorm( "Eeèéëēĕėęě3ƐƷ" ) === "EEEEEEEEEEEEE".[9] Bu işlevin çıkışı her zaman büyük harftir. Pahalı olmasa da, bu işlev de ucuz değildir ve birçok kez çağrıldığında bir filtreyi yavaşlatabilir.
ccnorm_contains_any Bağımsız değişkenlerdeki kafa karıştırıcı/benzer karakterleri normalleştirir ve ilk dize aşağıdaki bağımsız değişkenlerden herhangi bir dizesi içeriyorsa (sınırsız sayıda bağımsız değişken, mantık OR modu) doğru döndürür. Karakterlerin ve değiştirmelerinin bir listesi Git'te bulunabilir. ccnorm kullanımı nedeniyle, çok fazla bağımsız değişken iletilirse bu işlev yavaş olabilir.
ccnorm_contains_all Bağımsız değişkenlerdeki kafa karıştırıcı/benzer karakterleri normalleştirir ve ilk dize aşağıdaki bağımsız değişkenlerden herhangi bir dizesini içeriyorsa (sınırsız sayıda bağımsız değişken, mantık AND modu) true döndürür. Karakterlerin ve değiştirmelerinin bir listesi Git'te bulunabilir. ccnorm kullanımı nedeniyle, çok fazla bağımsız değişken iletilirse bu işlev yavaş olabilir.
specialratio Alfasayısal olmayan karakterlerin sayısının bağımsız değişkendeki toplam karakter sayısına bölünmesiyle elde edilen değeri döndürür.
rmspecials Bağımsız değişkendeki özel karakterleri kaldırır ve sonucu döndürür. Boşluğu kaldırmaz. (s/[^\p{L}\p{N}\s]//g ile eşdeğerdir.)
rmdoubles Bağımsız değişkendeki tekrarlanan karakterleri kaldırır ve sonucu döndürür.
rmwhitespace Beyaz boşlukları (boşluklar, sekmeler, yeni satırlar) kaldırır.
count İğnenin (ilk dize) samanlıkta (ikinci dize) kaç kez göründüğünü döndürür. Yalnızca bir bağımsız değişken verilmişse, onu virgülle böler ve parça sayısını döndürür.
rcount count ile benzer, ancak iğne bunun yerine normal bir ifade kullanır. Normal ifadenin "(?i)" ile başlamasına izin verilerek büyük/küçük harfe duyarlı hale getirilebilir. Lütfen, düz dizeler için bu işlevin count[10] üzerinden 50 kat daha yavaş olabileceğini unutmayın, bu nedenle mümkün olduğunda onu kullanın.
get_matches MW 1.31+ Samanlıktaki (ikinci dize) normal ifade iğnesinin (ilk dize) eşleşmelerini arar. 0 öğesinin tam eşleşme olduğu ve her [n] öğesinin iğnenin n'inci yakalama grubunun eşleştiği bir dizi döndürür. Normal ifadenin "(?i)" ile başlamasına izin verilerek büyük/küçük harfe duyarlı hale getirilebilir. Bir yakalama grubu eşleşmezse, bu dizi konumu "false" değerini alacaktır.
ip_in_range Kullanıcının IP'si (ilk dize) belirtilen IP aralığıyla eşleşirse true döndürür (ikinci dize CIDR gösterimi, "1.1.1.1-2.2.2.2" gibi açık gösterim veya tek bir IP olabilir). Yalnızca anonim kullanıcılar için çalışır. Hem IPv4 hem de IPv6 adreslerini destekler.
ip_in_ranges Kullanıcının IP'si (ilk dize) belirtilen IP aralıklarının herhangi bir değeriyle eşleşirse true döndürür (aşağıdaki dizeler mantık VEYA modunda, CIDR gösterimi olabilir, açık gösterimde "1.1" .1.1-2.2.2.2" veya tek bir IP). Yalnızca anonim kullanıcılar için çalışır. Hem IPv4 hem de IPv6 adreslerini destekler.
contains_any İlk dize aşağıdaki bağımsız değişkenlerden herhangi bir dizesi içeriyorsa true döndürür (mantık OR modunda sınırsız sayıda bağımsız değişken). İlk argüman bir diziyse, dizeye dönüştürülür.
contains_all İlk dize aşağıdaki bağımsız değişkenlerden her dizesini içeriyorsa true döndürür (mantık AND modunda sınırsız sayıda bağımsız değişken). İlk argümanın dönüşü bir dizi ise, dizgeye dönüştürülür.
equals_to_any İlk bağımsız değişken aşağıdakilerden herhangi biriyle aynıysa (===) (sınırsız sayıda bağımsız değişken) true döndürür. Temel olarak, equals_to_any(a, b, c), a===b | a===c ile aynıdır, ancak daha kapsamlı ve koşulları kaydeder.
substr İlk dizenin bölümünü ikinci bağımsız değişkenden uzaklığa (0'dan başlar) ve üçüncü bağımsız değişkenden maksimum uzunluğa (isteğe bağlı) göre döndürür.
strlen length ile aynıdır.
strpos Samanlıktaki (birinci dize) ilk iğne (ikinci dize) oluşumunun sayısal konumunu, üçüncü bağımsız değişkenden uzaklıktan başlayarak döndürür (isteğe bağlı, varsayılan 0'dır). Bu işlev, iğne samanlığın başında bulunduğunda 0 döndürebilir, bu nedenle başka bir karşılaştırmalı işleç tarafından "false" değer olarak false yorumlanabilir. Daha iyi bir yol, bulunup bulunmadığını test etmek için === veya !== kullanmaktır. Differently from PHP's strpos(), which returns false when the needle is not found, this function returns -1 when the needle is not found.
str_replace Arama dizesinin tüm yinelemelerini yedek dizeyle değiştirir. İşlev şu sırayla 3 bağımsız değişken alır: aramanın gerçekleştirileceği metin, bulunacak metin, değiştirilecek metin.
str_replace_regexp Normal ifadeler kullanarak arama dizesinin tüm oluşumlarını değiştirme dizesiyle değiştirir. İşlev, şu sırayla 3 bağımsız değişken alır: aramayı gerçekleştirecek metin, eşleşecek normal ifade, değiştirme ifadesi.
rescape Dize, özel bir anlamı olmayan karakterlerin normal ifadede kullanılabilmesi için, önünde bazı karakterlerin "\" olduğu argümanı döndürür.
set Filtrede daha sonra kullanılmak üzere belirli bir değere (ikinci bağımsız değişken) sahip bir değişken (ilk dize) ayarlar. Başka bir sözdizimi: name := value.
set_var set ile aynıdır.

Örnekler

Kod Sonuç Yorum
length( "Wikipedia" ) 9
lcase( "WikiPedia" ) wikipedia
ccnorm( "w1k1p3d14" ) WIKIPEDIA ccnorm çıkışı her zaman büyük harftir
ccnorm( "ωɨƙɩᑭƐƉ1α" ) WIKIPEDIA
ccnorm_contains_any( "w1k1p3d14", "wiKiP3D1A", "foo", "bar" ) true
ccnorm_contains_any( "w1k1p3d14", "foo", "bar", "baz" ) false
ccnorm_contains_any( "w1k1p3d14 is 4w3s0me", "bar", "baz", "some" ) true
ccnorm( "ìíîïĩїį!ľ₤ĺľḷĿ" ) IIIIIII!LLLLLL
norm( "!!ω..ɨ..ƙ..ɩ..ᑭᑭ..Ɛ.Ɖ@@1%%α!!" ) WIKIPEDAIA
norm( "F00 B@rr" ) FOBAR norm boşlukları, özel karakterleri ve kopyaları kaldırır, ardından ccnorm kullanır
rmdoubles( "foobybboo" ) fobybo
specialratio( "Wikipedia!" ) 0.1
count( "foo", "foofooboofoo" ) 3
count( "foo,bar,baz" ) 3
rmspecials( "FOOBAR!!1" ) FOOBAR1
rescape( "abc* (def)" ) abc\* \(def\)
str_replace( "foobarbaz", "bar", "-" ) foo-baz
str_replace_regexp( "foobarbaz", "(.)a(.)", "$2a$1" ) foorabzab
ip_in_range( "127.0.10.0", "127.0.0.0/12" ) true
ip_in_ranges( "127.0.10.0", "10.0.0.0/8", "127.0.0.0/12" ) true
contains_any( "foobar", "x", "y", "f" ) true
get_matches( "(foo?ba+r) is (so+ good)", "fobaaar is soooo good to eat" ) ['fobaaar is soooo good', 'fobaaar', 'soooo good']

İşlem sırası

İşlemler genellikle soldan sağa yapılır, ancak çözüldükleri bir sıra vardır. Filtre koşullardan birinde başarısız olur olmaz, geri kalanını kontrol etmeyi durdurur (kısa devre değerlendirmesi nedeniyle) ve bir sonraki filtreye geçer. Değerlendirme sırası şöyledir:

  1. Parantez içine alınan her şey (( ve )) tek bir birim olarak değerlendirilir.
  2. Değişkenleri/değişmezleri ilgili verilerine dönüştürmek. (ör. page_namespace - 0)
  3. İşlev çağrıları (norm, lcase, vb.)
  4. Birli + ve - (pozitif veya negatif değeri tanımlar, ör. -1234, +1234)
  5. Anahtar kelimeleri (in, rlike, vb.)
  6. Boole çevirmesi (!x)
  7. Üs (2**3 → 8)
  8. Çarpma ile ilgili (çarpma, bölme, modulo)
  9. Toplama ve çıkarma (3-2 → 1)
  10. Karşılaştırmalar. (<, >, ==)
  11. Boole işlemleri. (&, |, ^)
  12. Ternary operator (... ? ... : ...)
  13. Assignments (:=)

Örnekler

  • A & B | C, A & (B | C) değil, (A & B) | C ile eşdeğerdir. Özellikle, hem false & true | true hem de false & false | true, true olarak değerlendirilir.
  • A | B & C, A | (B & C) değil, (A | B) & C ile eşdeğerdir. Özellikle, hem true | true & false hem de true | false & false, false olarak değerlendirilir.
  • added_lines rlike "foo" + "|bar" yanlış, bunun yerine added_lines rlike ("foo" + "|bar") kullanın.

Koşul sayımı

Koşul sınırı (aşağı yukarı) karşılaştırma operatörlerinin sayısı + girilen işlev çağrılarının sayısıdır.

Kullanılan koşulların nasıl azaltılacağına ilişkin daha fazla açıklaması Extension:AbuseFilter/Conditions sayfasında bulunabilir.

Hariç tutulanlar

AbuseFilter inceleme işlevi "geri alma" işlemlerini düzenleme olarak tanımlasa da, AbuseFilter eşleştirme için geri alma işlemlerini değerlendirmez.[11]

Yararlı bağlantılar

Notlar

  1. Dizileri diğer türlerle karşılaştırmak, yukarıdaki örnek dışında her zaman false döndürür.
  2. 2.0 2.1 2.2 2.3 2.4 2.5 2.6 2.7 Şu anda dosya yüklemeleri için mevcut olan tek değişken (action='upload') user_*, page_*, file_sha1, file_size, file_mime, file_mediatype, file_width, file_height, file_bits_per_channel (son beş tanesi yalnızca MediaWiki 1.27 gerrit:281503 sürümden bu yana eklenmiştir). Tüm file_* değişkenleri diğer işlemler için kullanılamaz (action='edit' dahil).
  3. MediaWiki 1.28 (gerrit:295254) sürümünden beri
  4. Bu değişkeni kullanan birkaç filtre (12) AbuseFilterSlow Grafana kontrol panelinde gösterildi (görüntülemek için logstash erişimi gerektirir). Bu değişkeni filtrenin sonuna doğru taşımak yardımcı olmuş görünüyordu.
  5. phabricator:T191722 sayfasına bakın
  6. Bu işlem ile kullanımdan kaldırıldı ve bununla devre dışı bırakıldı.
  7. Bu değişkeni kullanan bazı filtreler AbuseFilterSlow Grafana kontrol panelinde göründü (örneği, logstash erişimi gerektirir). Örneğin, "text" in edit_diff_pst (hatta edit_diff) kullanmak yerine "text" in added_lines & !("text" in removed_lines) gibi bir şey düşünün
  8. Türlerin listesi için kaynak koduna bakın.
  9. phab:T27619 farkında olun. Hangi karakterlerin dönüştürüldüğünü görmek için ccnorm( "your string" ) değerlendirmek için Special:AbuseFilter/tools kullanabilirsiniz.
  10. https://3v4l.org/S6IGP
  11. T24713 - geri alma AF ile eşleşmiyor