Genel sohbet kanalları, aile dostu topluluklar ya da kurumsal destek kanalları çoğu zaman küfür ve hakaret içeren mesajların otomatik olarak süzülmesini ister. UnrealIRCd 6 bunu sunucu tarafında, istemciye ek bir eklenti kurdurmadan yapar: badword { } blokları filtrelenecek kelimeleri tanımlar, +G kanal ve kullanıcı modları ise filtreyi devreye alır. Bu rehberde badword bloğunun sözdizimini, eşleşme mantığını, engelleme ile değiştirme arasındaki farkı ve istisna tanımlamayı resmî UnrealIRCd belgeleri ve kaynak koduna dayanarak ele alıyoruz.

+G modları ve ilgili modüller

Filtreleme iki ayrı modla çalışır:

ModModülEtkisi
Kanal modu +Gchanmodes/censorKanala gönderilen mesajlarda badword kurallarını uygular; ayarlamak için +o veya üstü gerekir
Kullanıcı modu +Gusermodes/censorKullanıcıya gelen özel mesajlarda badword kurallarını uygular


Kanal operatörü filtreyi şu komutla açar:

CODE TERMINAL
/MODE #sohbet +G


Bir kullanıcı kendi özel mesajları için filtreyi şöyle etkinleştirir:

CODE TERMINAL
/MODE KullaniciAdi +G


Badword blokları tek başına hiçbir mesajı etkilemez; kurallar yalnızca ilgili +G modu açık olduğunda uygulanır.

Hazır kelime listesi: badwords.conf

UnrealIRCd'nin örnek yapılandırma dosyası example.conf, dağıtımla gelen hazır bir listeyi şu satırla içeri alır:

CODE TERMINAL
include "badwords.conf";


Bu dosya badword all { word "..."; } biçiminde İngilizce küfürlerden oluşan bir liste içerir. Türkçe konuşulan bir ağda bu liste tek başına yeterli değildir; kendi kurallarınızı ayrı bir dosyada tutup onu da include etmek, güncellemelerde dağıtım dosyasıyla çakışmayı önler:

CODE TERMINAL
include "badwords-tr.conf";


badword bloğunun sözdizimi

CODE TERMINAL
badword  {
    word ;
    replace ;
    action ;
}


Tür kuralın hangi mesajlara uygulanacağını belirler:


  • channel: +G modu açık kanallardaki mesajlar.
  • message: +G kullanıcı modu açık bir kullanıcıya gönderilen özel mesajlar (kanal içi mesajlar değil).
  • all: Hem kanal hem özel mesajlar.



word: eşleşme nasıl çalışır?

Resmî belgeye göre word basit bir kelime ya da bir düzenli ifade (regex) olabilir. UnrealIRCd'nin kaynak kodu iki yöntemi ayırır:


  • Hızlı eşleşme: Düz kelimeler ve yalnızca başında ya da sonunda * bulunan kalıplar için kullanılır. Eşleşme büyük/küçük harf duyarsızdır ve kelime sınırlarına bakar. Örneğin word "aptal"; kuralı "aptal" kelimesini yakalar ama "aptallık" içinde tetiklenmez. word "*aptal*"; ise kelimenin geçtiği her yeri yakalar.
  • Regex eşleşmesi: Kalıpta harf ve rakam dışında bir karakter (baştaki ve sondaki * hariç) varsa kural düzenli ifade olarak, büyük/küçük harf duyarsız biçimde işlenir. Türkçe harfler bu ayrımı tetiklemez; "küfür" gibi bir kelime hızlı eşleşmeyle çalışır. Yapılandırma denetimi sırasında geçersiz bir regex, "contains an invalid regex" hatasıyla reddedilir.



Kelime ortasında * kullanımı hızlı eşleşmeye girmez; basit kalıplar hem daha öngörülebilir hem daha hafif olduğu için mümkün olduğunca tercih edilmelidir.

replace ve action: değiştirmek mi, engellemek mi?

action iki değer alır:


  • replace: Eşleşen kelime değiştirilir, mesajın geri kalanı iletilir. action belirtilmezse varsayılan budur.
  • block: Mesajın tamamı engellenir.



replace eşleşen kelimenin yerine konacak metni belirler; yazılmazsa kelime <censored> ile değiştirilir. Resmî belgedeki örnek:

CODE TERMINAL
badword channel {
    word shit;
    replace shoot;
}


Dikkat edilmesi gereken bir kural: aynı blokta action block ile birlikte replace yazılırsa UnrealIRCd bunu yapılandırma hatası sayar ("badword::action is block but badword::replace exists"). Engelleme kurallarında replace satırı bulunmamalıdır.

Engellenen mesajı gönderen kullanıcı bir hata bildirimi alır. Kaynak koda göre kanal için "Swearing is not permitted in this channel", özel mesaj için "User does not accept private messages containing swearing" mesajı döner.

Türkçe bir kanal için örnek kurallar

Aşağıdaki örnekte kelimeler yer tutucudur; kendi listenizle değiştirin:

CODE TERMINAL
/* Hafif ifadeler yıldızla değiştirilir */
badword all {
    word "kelime1";
    replace "***";
}

/* Kelimenin geçtiği her yer yakalanır */
badword channel {
    word "*kelime2*";
    replace "***";
}

/* Ağır hakaret içeren mesajlar tamamen engellenir */
badword all {
    word "kelime3";
    action block;
}


Büyük/küçük harf duyarsızlığına Türkçe karakterlerde (Ş/ş, İ/i gibi) güvenmeyin; bu harflerin büyük ve küçük hâlleri ile ı/i, ş/s gibi yazım varyantlarını ayrı kurallar olarak eklemek daha güvenlidir.

Kanalda filtreyi aşabilecekler: ~msgbypass istisnası

Bazı kullanıcıların ya da botların +G filtresinden muaf tutulması gerekebilir; örneğin küfür içeren kayıtları alıntılayan bir moderasyon botu. Bunun için ~msgbypass (kısa hâli ~m) genişletilmiş istisnası kullanılır. Bu genişletilmiş tür yalnızca +e (istisna) olarak kullanılabilir, +b olarak kullanılamaz:

CODE TERMINAL
/MODE #sohbet +e ~msgbypass:censor:*!*@moderasyon.ornek.net
/MODE #sohbet +e ~msgbypass:censor:~account:ModBot


Aynı genişletilmiş istisna external (+n), moderated (+m/+M), color (+S/+c) ve notice (+T) türleriyle de çalışır.

PART ve QUIT mesajları da süzülür

Kanal modülü yalnızca kanal mesajlarını değil, kullanıcının +G kanalından ayrılırken yazdığı PART mesajını da süzer. Kullanıcı en az bir +G kanalındaysa QUIT mesajı da aynı kurallardan geçer; block türünde bir kurala takılan ayrılma mesajı tamamen kaldırılır. Bu, filtreyi ayrılma mesajlarıyla aşma girişimlerini engeller.

Kuralları görüntüleme ve uygulama

Yüklü kuralları listelemek için IRC operatörleri şu komutu kullanabilir:

CODE TERMINAL
/STATS badword


Çıktıda her kural için hızlı eşleşme F, regex ise R harfiyle gösterilir; replace kurallarında yerine konacak metin de listelenir. Yapılandırma değişikliğinden sonra değişiklikler /REHASH ile devreye alınır; hatalı bir blok varsa UnrealIRCd rehash sırasında hatayı dosya adı ve satır numarasıyla bildirir.

Sınırlar ve spamfilter ile ilişkisi

Badword kelime tabanlı bir filtredir: yalnızca +G açık kanal ve kullanıcılarda çalışır, harfler arasına boşluk ya da özel karakter koyma gibi yazım oyunlarıyla atlatılabilir. Bu nedenle tek başına bir moderasyon çözümü değil, ek bir katmandır. Ağ genelinde, kullanıcıların mod ayarından bağımsız olarak spam, reklam ya da zararlı bağlantıları engellemek için spamfilter kullanılmalıdır; badword ise kanalların kendi tercihine bırakılan, daha hafif bir içerik filtresidir. Engelleme yerine değiştirme davranışıyla başlamak, yanlış pozitiflerin kullanıcıyı sessizce susturmasını da önler.

Kaynaklar

  • UnrealIRCd Docs, Badword block: https://www.unrealircd.org/docs/Badword_block
  • UnrealIRCd Docs, Channel modes: https://www.unrealircd.org/docs/Channel_modes
  • UnrealIRCd Docs, User modes: https://www.unrealircd.org/docs/User_modes
  • UnrealIRCd Docs, Extended bans: https://www.unrealircd.org/docs/Extended_bans
  • UnrealIRCd kaynak kodu, chanmodes/censor: https://github.com/unrealircd/unrealircd/blob/unreal60_dev/src/modules/chanmodes/censor.c

TR Siber Ekibi Yazar · TRSiber
← Ana sayfaya dön