Extension:AbuseFilter/Rules format/tr

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 + 12
2 * 24
1 / 20.5
9 ** 281
6 % 51

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:

  • <, > * true 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.
  • <=, >= * true 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.
  • ===, !== * true 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 == 2false
1 <= 2true
1 >= 2false
1 != 2true
1 < 2true
1 > 2false
2 = 2true
'' == falsetrue
'' === falsefalse
1 == truetrue
1 === truefalse
['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 & [] == nulltrue
['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
EylemactiondizeAşağıdakilerden biri: edit, move, createaccount, autocreateaccount, delete, upload[2], stashupload[3]
Unix zaman damgasıtimestampdizeint(timestamp) size tarihi, saati, haftanın gününü vb. hesaplayabileceğiniz bir sayı verir.
Vikinin veritabanı adıwiki_namedizeÖrneğin, bu İngilizce Vikipedi'de "enwiki" ve İtalyanca Vikisöz'de "itwikiquote".
Vikinin dil koduwiki_languagedizeÖ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_editcounttamsayı/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_namedize
"createaccount" ve "autocreateaccount" eylemleri için, oluşturulmakta olan hesabın adını istiyorsanız accountname kullanın.
Dikkat! Dikkat: On wikis where temporary accounts are enabled, IPs are not returned for unregistered users. Use user_unnamed_ip instead if the IP is needed. More context is available here .
Kullanıcı hesabının türüuser_typestring 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_emailconfirmdize/boşBiçimde: YYYYMMDDHHMMSS. E-posta onaylanmadıysa boş.
Kullanıcı hesabının yaşıuser_agetamsayıSaniyeler içinde. Kayıtlı olmayan kullanıcılar için 0.
Kullanıcının engelli olup olmadığıuser_blockedbooleEngellenen 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_groupsdizi dizesiSpecial:ListGroupRights sayfasına bakın
Kullanıcının sahip olduğu haklaruser_rightsdizi dizesiSpecial:ListGroupRights sayfasına bakın
Sayfa kimliğiarticle_articleidtamsayı(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_idtamsayı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_namespacetamsayı(kaldırıldı) Bunun yerine page_namespace kullanın.
Sayfa ad alanıpage_namespacetamsayı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_agetamsayı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_textdize(kaldırıldı) Bunun yerine page_title kullanın.
Sayfa başlığı (ad alanı olmadan)page_titledize
Tam sayfa başlığıarticle_prefixedtextdize(kaldırıldı) Bunun yerine page_prefixedtitle kullanın.
Tam sayfa başlığıpage_prefixedtitledize
Sayfanın koruma düzeyini değiştirarticle_restrictions_editdize(kaldırıldı) Bunun yerine page_restrictions_edit kullanın.
Sayfanın koruma düzeyini değiştirpage_restrictions_editdizi dizesi
Sayfanın koruma düzeyini taşıarticle_restrictions_movedize(kaldırıldı) Bunun yerine page_restrictions_move kullanın.
Sayfanın koruma düzeyini taşıpage_restrictions_movedizi dizesi
Dosyanın korumasını yüklearticle_restrictions_uploaddize(kaldırıldı) Bunun yerine page_restrictions_upload kullanın.
Dosyanın korumasını yüklepage_restrictions_uploaddizi dizesi
Sayfayı koruma altına alarticle_restrictions_createdize(kaldırıldı) Bunun yerine page_restrictions_create kullanın.
Sayfayı koruma altına alpage_restrictions_createdizi dizesi
Sayfaya katkıda bulunan son on kullanıcıarticle_recent_contributorsarray of strings(kaldırıldı) Bunun yerine page_recent_contributors kullanın.
Sayfaya katkıda bulunan son on kullanıcıpage_recent_contributorsdizi dizesiBu, 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_contributordize(kaldırıldı) Bunun yerine page_first_contributor kullanın.
Sayfada ilk katkıda bulunan kullanıcıpage_first_contributordizeBu, 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/sebebisummarydizeMediaWiki 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_editdizeDevre 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 önceold_wikitextdizeBu 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 sonranew_wikitextdizeBu 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_diffdize
Düzenleme tarafından yapılan değişikliklerin birleştirilmiş fark, dönüştürülmüş ön-kaydetedit_diff_pstdizeBu, 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 boyutunew_sizetamsayı
Eski sayfa boyutuold_sizetamsayı
Değişiklikteki boyut değişimiedit_deltatamsayı
Değişiklikte eklenen satırlaradded_linesdizi dizesi+ ile başlayan son farktaki tüm satırları içerir
Değişiklikte çıkarılan satırlarremoved_linesdizi dizesi
Düzenlemeye eklenen satırlar, önceden kaydedilmiş dönüştürülmüşadded_lines_pstdizi dizesiMümkünse added_lines kullanın, bu daha etkilidir.
External links in the new text ($1)new_linksarray of stringsThis tends to be slow (see #Performance).
External links in the new text ($1)all_linksdizi dizesi(kaldırıldı) Use new_links instead.
Düzenlemeden önceki sayfadaki bağlantılarold_linksdizi dizesiThis tends to be slow (see #Performance).
Değişiklikte eklenen tüm dış bağlantılaradded_linksdizi dizesiBu, 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ılarremoved_linksdizi dizesiBu, 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_pstdizeThis variable can be very large.
Yeni revizyonun derlenmiş HTML kaynağınew_htmldizeBu 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 olmadannew_textdizeBu 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_htmldizePerformans nedenleriyle devre dışı bırakıldı.
Herhangi bir biçimlendirmeden arındırılmış eski sayfa metni (artık kullanımda değil)old_textdizePerformans nedenleriyle devre dışı bırakıldı.
Son sayfa değişikliğinden beri geçen süre (saniye cinsinden)page_last_edit_ageinteger or nullnull when the page does not exist
Dosya içeriklerinin SHA1 hash'ifile_sha1dize[2]
Dosyanın bayt cinsinden boyutufile_sizetamsayıBayt cinsinden dosya boyutu[2]
Dosyanın piksel cinsinden genişliğifile_widthtamsayıPiksel cinsinden genişlik[2]
Dosyanın piksel cinsinden yüksekliğifile_heighttamsayıPiksel cinsinden yükseklik[2]
Dosyanın renk kanalı başına bitfile_bits_per_channeltamsayıRenk kanalı başına bit miktarı[2]
Dosyanın MIME türüfile_mimedizeMIME türü dosyası.[2]
Dosyanın medya türüfile_mediatypedizeDosya ortam türü.[8][2]
Hedef taşıma sayfasının sayfa limliğimoved_to_articleidtamsayı(kaldırıldı) Bunun yerine moved_to_id kullanın.
Hedef taşıma sayfasının sayfa limliğimoved_to_idtamsayı
Hedef taşıma sayfasının başlığımoved_to_textdize(kaldırıldı) Bunun yerine moved_to_title kullanın.
Hedef taşıma sayfasının başlığımoved_to_titledize
Hedef taşıma sayfasının tam başlığımoved_to_prefixedtextdize(kaldırıldı) Bunun yerine moved_to_prefixedtitle kullanın.
Hedef taşıma sayfasının tam başlığımoved_to_prefixedtitledize
Hedef taşıma sayfasının ad alanımoved_to_namespacetamsayı
Hedef sayfa yaşını taşı (saniye olarak)moved_to_agetamsayı
Taşımanın hedef sayfasındaki son düzenlemeden geçen süre (saniye cinsinden)moved_to_last_edit_age integer or nullnull when the target page does not exist
Hedef sayfanın taşınma koruma düzeyini değiştirmoved_to_restrictions_editdizi dizesipage_restrictions_edit ile aynı, ancak taşımanın hedefi için.
Hedef sayfanın taşınmasını koruma düzeyini taşımoved_to_restrictions_movedizi dizesipage_restrictions_move ile aynı, ancak taşımanın hedefi için.
Taşıma hedefi dosyasının koruma korumasımoved_to_restrictions_uploaddizi dizesipage_restrictions_upload ile aynı, ancak taşımanın hedefi için.
Hedef sayfayı taşı koruma oluşturmoved_to_restrictions_createdizi dizesipage_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_contributorsdizi dizesipage_recent_contributors ile aynı, ancak taşımanın hedefi için.
Hedef sayfayı taşımaya katkıda bulunan ilk kullanıcımoved_to_first_contributordizepage_first_contributor ile aynı, ancak taşımanın hedefi için.
Kaynak taşıma sayfasının ad alanımoved_from_namespacetamsayı
Kaynak taşıma sayfası başlığımoved_from_textdize(kaldırıldı) Bunun yerine moved_from_title kullanın.
Kaynak taşıma sayfası başlığımoved_from_titledize
Kaynak taşıma sayfasının tam başlığımoved_from_prefixedtextdize(kaldırıldı) Bunun yerine moved_from_prefixedtitle kullanın.
Kaynak taşıma sayfasının tam başlığımoved_from_prefixedtitledize
Kaynak taşıma sayfasının sayfa kimliğimoved_from_articleidtamsayı(kaldırıldı) Bunun yerine moved_from_id kullanın.
Kaynak taşıma sayfasının sayfa kimliğimoved_from_idtamsayı
Kaynak sayfa yaşını taşı (saniye olarak)moved_from_agetamsayı
Taşımanın kaynak sayfasındaki son düzenlemeden geçen süre (saniye cinsinden)moved_from_last_edit_ageinteger
Kaynak sayfasının koruma düzeyini değiştirmoved_from_restrictions_editdizi dizesipage_restrictions_edit ile aynı, ancak taşımanın hedefi için.
Kayna sayfasının koruma düzeyini taşımoved_from_restrictions_movedizi dizesipage_restrictions_move ile aynı, ancak taşımanın hedefi için.
Taşıma kaynak dosyasının korumasını yükleyinmoved_from_restrictions_uploaddizi dizesipage_restrictions_upload ile aynı, ancak taşımanın hedefi için.
Taşıma kaynak sayfasının koruması oluşturunmoved_from_restrictions_createdizi dizesipage_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_contributorsdizi dizesipage_recent_contributors ile aynı, ancak taşımanın hedefi için.
Kaynak sayfayı taşımaya katkıda bulunan ilk kullanıcımoved_from_first_contributordizepage_first_contributor ile aynı, ancak taşımanın hedefi için.
Hesap adı (hesap oluşturulduğunda)accountnamedize
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

Protected variables

A variable can be considered protected. For instance, on wikis with temporary accounts enabled, IPs are considered PII and access to them must be restricted. Protected variables and filters that use them (including the logs they create) are only accessible to maintainers with the abusefilter-access-protected-vars right. Using a protected variable flags the filter as protected as well. The filter subsequently cannot be unprotected, even if it no longer actively uses a protected variable, as its historical logs will remain available.

A private log is created when a filter maintainer views the value of a protected variable. This private log is not an abuse filter log. It is a private log only viewable to users with the abusefilter-protected-vars-log right and is stored at Special:Log/abusefilter-protected-vars.

The default protected variables are defined in AbuseFilterProtectedVariables in extension.json.

user_unnamed_ip is null when examining past edits.
Description Name Data type Notes
IP of the user account (for logged-out users and temporary accounts only) ($1)user_unnamed_ip string User IP for anonymous users/temporary accounts
This returns null for registered users.
If the CheckUser extension is installed, then the user must also have access to the IP addresses of temporary accounts.This access is described at Help:Extension:CheckUser#Showing_IPs_for_temporary_accounts.

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 Notes
Kullanıcının ($1) bulunduğu küresel gruplar global_user_groups dizi CentralAuth
Kullanıcının ($1) küresel düzenleme sayısı global_user_editcount tamsayı CentralAuth
Hesap oluşturma sırasında kullanıcının ($1) içinde bulunduğu küresel gruplar global_account_groups array Available only when action is createaccount (then it is always empty) or autocreateaccount. CentralAuth
Hesap oluşturma sırasında kullanıcının ($1) küresel değişiklik sayısı 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 ($1) 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ığı ($1) 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ığı ($1) 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ğı ($1) user_app boole Kullanıcı mobil uygulamadan düzenleme yapıyorsa true, aksi takdirde false. MobileApp
Sayfa görüntüleri article_views tamsayı (kaldırıldı) Bunun yerine page_views kullanın. HitCounters
Sayfa görüntülemeri page_views tamsayı sayfa görüntülemelerinin miktarı HitCounters
Kaynak sayfa görüntülemeleri moved_from_views tamsayı kaynak sayfanın sayfa görüntülemelerinin miktarı HitCounters
Hedef sayfa görüntülemeleri moved_to_views tamsayı hedef sayfanın sayfa görüntülenme miktarı HitCounters
IP adresinin stopforumspam.com listesi kullanılarak engellenip engellenmediği sfs_blocked boole IP adresinin stopforumspam.com listesi kullanılarak engellenip engellenmediği StopForumSpam
Whether the IP being used by the user is known by the IPoid service ($1) ip_reputation_ipoid_known boolean For information about this variable see Extension:IPReputation/AbuseFilter_variables. IPReputation Protected variable
Number of clients associated with IP being used by the user ($1) ip_reputation_client_count integer For information about this variable see Extension:IPReputation/AbuseFilter_variables. IPReputation Protected variable
List of behaviors associated with the IP being used by the user ($1) ip_reputation_client_behaviors array For information about this variable see Extension:IPReputation/AbuseFilter_variables. IPReputation Protected variable
List of proxy services associated with IP being used by the user ($1) ip_reputation_client_proxies array For information about this variable see Extension:IPReputation/AbuseFilter_variables. IPReputation Protected variable
List of risks associated with the IP being used by the user ($1) ip_reputation_risk_types array For information about this variable see Extension:IPReputation/AbuseFilter_variables. IPReputation Protected variable
List of tunnel operators associated with the IP being used by the user ($1) ip_reputation_tunnel_operators array For information about this variable see Extension:IPReputation/AbuseFilter_variables. IPReputation Protected variable

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.

adaçıklama
lcaseKüçük harfe dönüştürülmüş bağımsız değişkeni döndürür.
ucaseBüyük harfe dönüştürülmüş bağımsız değişkeni döndürür.
lengthBağı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.
stringDize veri türüne dönüştürür. Eğer argüman bir diziyse, onu satır sonu ile yerleştirir.
intTamsayı veri türüne dönüştürür.
floatKayan noktalı veri türüne dönüştürür.
boolBoole veri türüne dönüştürür.
normrmwhitespace(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.
specialratioAlfasayı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.
rmspecialsBağı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.)
rmdoublesBağımsız değişkendeki tekrarlanan karakterleri kaldırır ve sonucu döndürür.
rmwhitespaceBeyaz 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_rangeKullanı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_rangesKullanı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.
strlenlength 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_replaceArama 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_regexpNormal 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.
rescapeDize, özel bir anlamı olmayan karakterlerin normal ifadede kullanılabilmesi için, önünde bazı karakterlerin "\" olduğu argümanı döndürür.
setFiltrede 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_varset 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. 1 2 3 4 5 6 7 8 Ş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