Koruma ‘$sw’ identifier
Öncelik SW kavramı, ingilizcede ‘swearing’ ve Türkçe meaili küfürbaz olan kelimenin kısaltılmasından geliyor. Daha önce sadece küfür koruması amaclı yayımlamış oldugum $sw identifierin ilerlemiş versionu diyebiliriz.

– SW ismini verdigin bu kod yıgını nedir? Forumda bir sürü küfür/reklam cart curt koruması zaten mevcuttu ne geregi vardı böyle gereksiz kod yıgınlarına forumu kirletiyorsunuz kardeşim!!

Şeklinde sorular ve söylemlerde bulunabilirsiniz Ve bu tarz soru ve söylemlere cevaben; SW’nin diger spam/küfür korumalarından farkı, döngü içerisine girmeden çok daha hızlı search yapabilmesi ve tamamen REGEX(Regular Expressions) kullanarak çalışır olması, yani bir spam filtre gibi kullanılabilir olmasıdır. Bu durum bize çok daha hassas/esnek ve hızlı sonuçları vermektedir.

Bu muhabbeti fazla uzatmadan kullanımı hakkında bilgi verelim.

$sw(TEXT,Nc).asc ASCII Karakterleri kontrolünüz altında tutun!(Reklam sloganı gibi bir başlık oldu )
Bu özellik alfabe dışındaki karakterlerin kullanımı ile yapılan küfürleri/reklamları engellemek amacı ile eklenmiştir. Yukarıda aliasa gönderilen ikinci kısımdaki argümanlar (Nc) bizim almak istedigimiz sonuçlara yön verir. Bunu örnek ile açıkayacak olursak

N parmetresi bir sayı olmalı 0 veya üstü;

echo $sw(T^EX%T&,0).asc sonuç => 3 neden üç, sıfır’0′ parametresi aliasa bana text içindeki alfabe dışındaki absurd karakterlerin sayısını döndermesini söylüyor.

echo $sw(T^EX%T&,2).asc sonuç => % Burada göründügü gibi iki’2′ argümanı ile aliasa bana TEXT içerisindeki alfabe dışındaki ikinci karakteri çevir diyor, eger üç’3′ olsaydı deger & olarak dönerdi.
[B]
echo $sw(T^EX%T&,c).asc/B] sonuç => TEXT Göründügü gibi ‘c’ argümanı ile aliasa gönderilen TEXT içerisindeki alfabe dışındaki karakterler temizlenerek tekrar bize döndürülmüş.

echo $sw(T^EX%T&).asc sonuç => ^%& Aliasa ikinci bir argüman gönderilmemiş ve bize dönen degerde sadece TEXT argümanı içerisindeki alfabe dışındaki karakterler var.

$sw(TEXT,SN,LINE,).rep İle tekrar eden yazıları yakalayın!

Bir örnek ile kullanımını gösterelim;

$sw(Bu bir deneeemmee yazısıdırr tteesst,5,3).rep Burada aliasa FLAG olarak birşey göndermedik bu “Bu bir deneeemmee yazısıdırr tteesst” i oldugu gibi işlemesini saglayacak ve 5 saniyede 3 kez tekrarlanırsa deer $true olarak dönecektir.

$sw(Bu bir deneeemmee yazısıdırr tteesst,5,3,r).rep Burada FLAG olarak r argümanını gönderdik, Aliasa “Bu bir deneeemmee yazısıdırr tteesst” argümanını oldugu gibi degilde, tekrar eden harfleri silerek işleme almasını söyledik yani “Bu bir deneme yazısıdır test” şeklinde işeleme alacak böylelikle;
seellaammm
ssseellllaaammm
sseeeeeellaam
gibi tekrarları yakalayabilecegiz.

NOT: Göründügü gibi kanal ismi ve rumuz argüman olarak aktarılmıyor. identifer bu verileri event içerisinden kullanıyor.

$sw(SN,LINE).flood Flood koruması
Kullanımı gayet basit argüman olarak sadece saniye ve satır sayısını gönderiyoruz örnek;

$sw(3,2).flood >> 3 saniyede 2 satır yazılırsa $true olara döner.

NOT: Göründügü gibi kanal ismi ve rumuz argüman olarak aktarılmıyor. identifer bu verileri event içerisinden kullanıyor.

Ve geldik kzurnanın zırt dedigi yere

$sw(TEXT,r,).spm Reklam/Küfür Spam identiferi

Bu identiferi örnek ile açıklayalım
EXP:
Varsayalım nbizim spam datamızda “deneme” kelimesi mevcut.

$sw(bu bir deneme reklam yazısıdır reklamlarr).spm sonuç => $true olacaktır.

(r) parametresi ile;
$sw(bu bir deneme reklam yazısıdır reklamlarr,r).spm

sonuç => bu bir deneme reklam yazısıdır reklamlarr

Yani cümle içerisindeki uyuşan kelimeleri default olark kırmızı ve bold biçiminde bize geri çevirecektir.

üçüncü parametre ikinci iel beraber kullanılır bu parametrede aliasa bize uyuşan keliemerin hangi renkte nasıl belirtmesi gerektigini söyleriz bu argümanda kontrol karakterleri ile renk biçimin göndeririz. (forum bu karakterleri göstermedigi için örnek vermiyorum biçim argümanı ile umarım anlaşılmıştır)

Ve şimdi veri ekleme,silme,arama ve listeme

/sw -lasr
a : Veri ekler
r : Veri siler
s : Verilen cümle ile databasedeki uyuşan verileri listeler.
l : Database içerisindeki dataları listeler

örnek;

/sw -a s(i|I|j)ker

Gördügünüz gibi regex operatörleri kullanarak veri girişmizi yapıyoruz, Böylece cümlelerde daha esne kve hızlı search yapabilecegiz. Ve sw aliası eklenen verileri hafızasına almadan kontrol eder regex oepratörleri dogru biçimde kullanılmışmı diye.

Örnegin;

/sw -a si|I|jker -> Hata verecektir.
/sw -a s(|i|I)ker -> Hata verecektir.
/sw -a s((i|I)ker -> Hata verecektir.
/sw -a s()iker -> Hata verecektir.

gibi basit hatalarıda böylelikle engellemiş oluyor.

/sw -r s(i|I|j)ker Bu veriyi databaseden silecektir.
/sw -s Bu cümledeki küfür (*****) databasedeki hangi kelime ile çakıştı bulabilecekmi bakalım.

sonuç:
* Data Base Taranıyor
Aranan Kelime: *****im
1 -> s(i|I|j)ker
* Arama Sona Erdi

olacaktır.

/sw -l DB içerisindeki tüm verileri listeler.

bittii the end
Sürç-ü lisan ettikse affola. Code üzerinde HATA var ise ve bu konu altına yazarsanız çözmeye çalışırız.
—-
Code güncelleme;

Yeni özellik ‘Flag -d’ ve $sw(TEXT,r).asc

Öncelikle bu özelligi örnek ile ne işe yaradığını anlatalım;
Elimizde ‘s{é][r{c}\æ/n’ şeklinde bir karakter katarımız var. Biz bu karakter katarını Türkçe alfabesine göre düzelemek istiyoruz, o zaman

$sw(s{é][r{c}\æ/n,r).asc => sercan
$sw(s{éée]]rr{{{cææn}}n,r).asc => sercan
$sw(s/é/r/c/æ/n,r).asc => sercan

Sonuç sercan olacaktır. Görüldügü üzere ([,],{,},\,/) karakterleri temizlenip Türkçe alfabesinde yer almayan ‘é’ ve ‘æ’ karakteleri Türkçe karşılığı olan ‘e’ ve ‘a’ harflerine çevrilmiştir. Tabi bu karakterlerin Türkçe’de hangi karaktere karşılık geldiğini bizim belirtmemiz gerekir, bildigimiz üzere bilgisayar buna kendisi karar verebilecek kadar akıllı değildir

Bunun için ‘sw’ aliasına -d flagı eklenmiştir bu flag ‘degistir’ kelimesinden geliyor ve bu flag, ‘a’ (add) veya ‘r’ (remove) parametreleri ile beraber kullanılır

Kullanımı;

-d = degistir
-a = add

/sw -da
/sw -da é e
/sw -da æ a

ve silmek için de;

-d = degistir
-r = remove

/sw -dr
/sw -dr é
/sw -dr æ

Umarım anlaşılır olmuştur. Bu eklentide SW’nin yazılım amacına uygun biçimde yazımıştır yani döngüye girmeden işlem yapıyor.

PHP- Kodu:
;##########################
;# Coded Date 02/05/2008
;# Swearing -> SW ;)
;# Coded by SpecifiC
;# mail/MSN: cron@mynet.com
alias sw {
if $isid {
;### # # # # # # # # # # # # # # # # # # # ###
;### Alfabe dışındaki karakterler ###
;### ###
;### $sw(TEXT,Nc).asc veya $sw(TEXT).asc ###
;### N paremetresi ‘0’(sıfır) degerinde ###
;### ise TEXT içerisindeki alfabe dışın- ###
;### daki karakterlerin sayısını verir. ###
;### Eğer ‘0’(sıfır)dan büyük bir değer ###
;### ise o sıradaki karakteri deger ola- ###
;### rak çevirir. ###
;### ###
;### exp: ###
;### echo $sw(T^EX%T&,0).asc sonuç => 3 ###
;### echo $sw(T^EX%T&,2).asc sonuç => % ###
;### echo $sw(T^EX%T&,c).asc sonuç => TEXT ###
;### echo $sw(T^EX%T&).asc sonuç => ^%& ###
;### ###
if $regex($prop,^asc$) {
if ($len($2) == 0) {
return $regsubex($1,/(w+|s|ı|İ|Ü|ü|Ö|ö|Ç|ç|Ş|ş)/g,$null)
}
elseif $regex($2,^0$) {
return $len($regsubex($1,/(w+|s|ı|İ|Ü|ü|Ö|ö|Ç|ç|Ş|ş)/g,$null))
}
elseif ($regsubex($2,/(D+)/g,$null) > 0) {
var %n = $v1
if ($regex(ASCII_C,$regsubex($1,/(s|ı|İ|Ü|ü|Ö|ö|Ç|ç|Ş|ş)/g,$null),/(W+)/g) > %n) {
return $regml(ASCII_C,%n)
}
else {
return 0
}
}
elseif $regex($2,^c$) {
;replaced $regsubex($1,/(W)/g,$iif(1 != $chr(32),$null,1))
return $regsubex($1,/(W)/g,$iif(!$istok($+($chr(32),|ı|Ü|ü|Ç|ç|Ö|ö|Ş|ş|İ),1,124),$null,1))
}
elseif $regex($2,^r$) {
var %sw.text = $1
;# No loop ;)
%sw.text = $regsubex(%sw.text,/(.)/g,$iif($hget(sw.data,1),$v1,1))
%sw.text = $regsubex(%sw.text,/(W)/g,$iif(!$istok($+($chr(32),|ı|Ü|ü|Ç|ç|Ö|ö|Ş|ş|İ),1,124),$null,1))
return $regsubex(%sw.text,/(.)1+/g,1))
}
else {
echo $color(info) -a * [Geçersiz parametre : $+($chr(36),sw,$chr(40),,$chr(44),$2,$chr(41))$+ .asc]
}
}
;### # # # # # # # # # # # # # # # # # # # ###
;### Tekrar koruması ###
;### $sw(TEXT,SN,LINE,).rep ###
;### flag: ‘r’ bu flag ile veri gönderil- ###
;### diginde ‘seelllaamm’ şeklindeki cüm- ###
;### leyi ‘selam’ olarak dikkate alır. ###
;### exp: ###
;### $sw(Test test test,2,3,r).rep ###
;### ###
if $regex($prop,^rep$) {
if $1 && $2 && $3 {
var %sn = $regsubex($2,/(D+)/g,$null), %line = $regsubex($3,/(D+)/g,$null)
if $regex($4,^r$) || $4 == $null {
var %rgx = $iif($4 == $null,$1,$regsubex($1,/(.)1+/g,1)))
hinc $+(-mu,%sn) sw.replace $md5($+($nick,$chan,%rgx,%sn,%line)) 1
if (%line == $hget(sw.replace,$md5($+($nick,$chan,%rgx,%sn,%line)))) {
.hdel sw.replace $md5($+($nick,$chan,%rgx,%sn,%line))
return $true
}
else {
return $false
}
}
else {
echo $color(info) -a * [Geçersiz parametre]
}
}
}
;### # # # # # # # # # # # # # # # # # # # ###
;### Flood Protect ###
;### $sw(SN,LINE).flood ###
;### ###
if $regex($prop,^flood$) {
if $regex($1,d) && $regex($2,d) {
var %s = $regsubex($1,/(D+)/g,$null), %line = $regsubex($2,/(D+)/g,$null)
hinc $+(-mu,%s) sw.flood $md5($+($nick,$chan,%s,%line)) 1
if (%line == $hget(sw.flood,$md5($+($nick,$chan,%s,%line)))) {
.hdel sw.flood $md5($+($nick,$chan,%s,%line))
return $true
}
else {
return $false
}
}
else {
echo $color(info) -a * [Geçersiz parametre]
}
}
;### $sw(TEXT,r,biçim).spm
if $regex($prop,^spm$) {
;### Searcing Regex
var %d = $hget(sw.data,0).item, %t = $regsubex($1,/(.)1+/g,1))
while %d {
if $regex($hget(sw.data,%d).item,^(data_)d+) {
var %data = $replace($hget(sw.data,$hget(sw.data,%d).item),$chr(7),$chr(124))
if $regex(%t,$+(/,%data,/gi)) {
var %c = $3
return $iif($regex($2,^r$),$iif($3 && $regex($3,[[:cntrl:]]),$regsubex(%t,$+(/,$chr(40),%data,$chr(41),/gi),$+(%c,1,$chr(15))),$regsubex(%t,$+(/,$chr(40),%data,$chr(41),/gi),$+($chr(3),4,$chr(2),1,$chr(15)))),$true)
halt
}
}
dec %d
}
return $iif($regex($2,^r$),$iif($3 && $regex($3,[[:cntrl:]]),$regsubex(%t,$+(/,$chr(40),%data,$chr(41),/gi),$+(%c,1,$chr(15))),$regsubex(%t,$+(/,$chr(40),%data,$chr(41),/gi),$+($chr(3),4,$chr(2),1,$chr(15)))),$false)
;### Searcing End
}
}
else {
if $regex($1,^-[lasrd]+$) {
;### Flag -a
if $regex($1,^-a$) {
;var %exsess = $regsubex($2,/^(()(.+)())$/g,2)
var %exsess = $2
var %crop_wr = $iif($regex(%exsess,((.)*(()(.)+(|)(.)+())(.)*)),$true,$false), %replaced = $replace(%exsess,$chr(40),$chr(7),$chr(41),$chr(8))
var %crop_pc_n = $iif($regex(%replaced,$+(/,$chr(7),/g)) == $regex(%replaced,$+(/,$chr(8),/g)) && $regex(%exsess,((.)*(()(.)+(|)(.)+())(.)*)) && !$regex(%exsess,((.)*(()())(.)*)),$true,$false)
if %crop_wr == $false || %crop_pc_n == $false && $regex(%exsess,[()|]) {
echo $color(info) -a * Hatalı Exsepssion: $2
halt
}
var %i = 0
;### Searcing ###########################
var %d = $hget(sw.data,0).item
while %d {
if $istok($hget(sw.data,$hget(sw.data,%d).item),%exsess,7) == $true {
goto hata
break
}
dec %d
}
;### Searcing End #######################
:loop
%i = %i + 1
if $len($hget(sw.data,$+(data_,%i))) > 800 { goto loop }
.hadd -m sw.data $+(data_,%i) $addtok($hget(sw.data,$+(data_,%i)),%exsess,7)
echo $color(info) -a * Eklendi: %exsess
halt

:hata
echo $color(info) -a * Zaten mevcut
halt
}
;### Flag -s
if $regex($1,^-((l*)(s)(l*))$) {
echo $color(info) -a * Data Base Taranıyor
echo $color(info) -a $str($chr(160),1) Aranan Kelime: $2-
var %h = $hget(sw.data,0).item, %s = 0
while %h {
if $regex($hget(sw.data,%h).item,^(data_)d+) {
var %nt = $numtok($hget(sw.data,%h).data,7)

while %nt {
if $regex($2-,$+(/,$gettok($hget(sw.data,%h).data,%nt,7),/gi)) {
%s = %s + 1
echo $color(info) -a $str($chr(160),4) %s -> $gettok($hget(sw.data,%h).data,%nt,7)
}
dec %nt
}
}
dec %h
}
if (%s == 0) { echo $color(info) -a $str($chr(160),4) Sonuç bulunamadı (!) }
echo $color(info) -a * Arama Sona Erdi
}
;### Falg -l
if $regex($1,^-(s?)l(s?)$) {
echo $color(info) -a * Data Base Listeleniyor
var %h = $hget(sw.data,0).item, %s = 0
while %h {
if $regex($hget(sw.data,%h).item,^(data_)d+) {
var %nt = $numtok($hget(sw.data,%h).data,7)
while %nt {
if $gettok($hget(sw.data,%h).data,%nt,7) {
%s = %s + 1
echo $color(info) -a $str($chr(160),4) %s -> $gettok($hget(sw.data,%h).data,%nt,7)
}
dec %nt
}
}
dec %h
}
if (%s == 0) { echo $color(info) -a $str($chr(160),4) Data Yok (!) }
echo $color(info) -a * Listeleme Sona Erdi
}
;### Flag -r
if $regex($1,^-r$) {

var %d = $hget(sw.data,0).item, %done
while %d {
if $istok($hget(sw.data,$hget(sw.data,%d).item),$2,7) == $true {
.hadd sw.data $hget(sw.data,%d).item $remtok($hget(sw.data,%d).data,$2,7)
%done = $true
}
dec %d
}
if %done { echo $color(info) -a * Silindi: $2 } | else { echo $color(info) -a * Eşleşen data bulunamadı }
}
;### Flag -da AND -dr
if $regex($1,^-((a|r|l)?)d((a|r|l)?)) {
var %item = $iif($len($strip($2)) == 1,$strip($2),$null), %data = $iif($len($strip($3)) == 1,$strip($3),$null)
if %item && %data || $regex($1,l) {
if $regex($1,a) {
if !$hget(sw.data,%item) {
.hadd -m sw.data %item %data
echo $color(info) -a * Eklendi: %item > %data
}
else {
echo $color(info) -a * Zaten mevcut
}
}
if $regex($1,r) {
if $hget(sw.data,%item) {
.hdel sw.data %item
echo $color(info) -a * Silindi: %item
}
else {
echo $color(info) -a * Zaten mevcut değil.
}
}
if $regex($1,l) {
echo $color(info) -a * Data Base Listeleniyor: (Değiştirilen karakterler)
var %i = $hget(sw.data,0).item
while %i {
if ($len($hget(sw.data,%i).item) == 1) {
echo $color(info) -a $str($chr(160),4) $hget(sw.data,%i).item -> $hget(sw.data,%i).data
}
dec %i
}
echo $color(info) -a * Liste Sonu
}
}
else {
echo $color(info) -a * Geçerli bir veri giriniz.
echo $color(info) -a * ÖRN: /sw -da
echo $color(info) -a * ÖRN: /sw -da é e
}
}
;### DIR
if !$isfile($scriptdirswdata) { mkdir $+(“,$scriptdirswdata,”) }
.hsave sw.data $+(“,$scriptdirswdata\swdata.db,”)
}
else {
echo $color(info) -a * Böyle bir flag mevcut değil!
}
}
}
;### Starting
on *:start: {
if $isfile($scriptdirswdataswdata.db) { if !$hget(sw.data) { .hmake sw.data 1000 } | hload sw.data $+(“,$scriptdirswdata\swdata.db,”) }
}
Alintidir