Tekil Mesaj gösterimi
Alt 02 Mayıs 2008, 01:25   #1
Çevrimdışı
SpecifiC
Kullanıcıların profil bilgileri misafirlere kapatılmıştır.
IF Ticaret Sayısı: (0)
IF Ticaret Yüzdesi:(%)
Hızlı (regex) ve Gelişmiş (Küfür&Reklam/FLOOD/REPLACE/ASCII) 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
Bu forumdaki linkleri ve resimleri görebilmek için en az 25 mesajınız olması gerekir.
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 :p)
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.

echo $sw(T^EX%T&,c).asc 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,<FLAG>).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
Bu forumdaki linkleri ve resimleri görebilmek için en az 25 mesajınız olması gerekir.


$sw(TEXT,r,<biçim>).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 <veri>
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 (siker) databasedeki hangi kelime ile çakıştı bulabilecekmi bakalım.

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

olacaktır.

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

bittii
Bu forumdaki linkleri ve resimleri görebilmek için en az 25 mesajınız olması gerekir.
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;

нαℓιℓ nickli arkadaşımızın [Üye Olmadan Linkleri Göremezsiniz. Üye Olmak için TIKLAYIN...] başlıklı konudaki fikri üzerine yeni bir özellik daha eklenmiştir.

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
Bu forumdaki linkleri ve resimleri görebilmek için en az 25 mesajınız olması gerekir.


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 <Karakter> <Türkçe Karşılıgı>
/sw -da é e
/sw -da æ a

ve silmek için de;

-d = degistir
-r = remove

/sw -dr <Silinecek Karakter>
/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.

Son olarak fikir için нαℓιℓ nickli arkadaşa teşekkür ederiz
Bu forumdaki linkleri ve resimleri görebilmek için en az 25 mesajınız olması gerekir.

-----





Kod:   Kodu kopyalamak için üzerine çift tıklayın!
;########################## ;# Coded Date 02/05/2008 ;# Swearing -> SW ;) ;# Coded by SpecifiC ;# mail/MSN:
Bu forumdaki linkleri ve resimleri görebilmek için en az 25 mesajınız olması gerekir.
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),<TEXT>,$chr(44),$2,$chr(41))$+ .asc] } } ;### # # # # # # # # # # # # # # # # # # # ### ;### Tekrar koruması ### ;### $sw(TEXT,SN,LINE,<FLAG>).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$) { ;### Searching 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) ;### Searching 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 ;### Searching ########################### 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 } ;### Searching 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 <karakter> <yeni karakter> 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($scriptdirswdata\swdata.db) { if !$hget(sw.data) { .hmake sw.data 1000 } | hload sw.data $+(",$scriptdirswdata\swdata.db,") } }



Konu SpecifiC tarafından (03 Eylül 2008 Saat 23:22 ) değiştirilmiştir. Sebep: Güncelleme
 
Alıntı ile Cevapla

IRCForumlari.NET Reklamlar
sohbet odaları eglen sohbet reklamver