kendi botuma göre ayarlayıp ,sorun olup olmadığını test ettim.
bot ana dizininde spam.txt oluşturup
denemek için botun yakalaması için birkaç "yasak" kelimeyi alt alta girdim.
kimini : *s*p*a*m - kiminide : yassağ - vs gibi ekledim ki neyi yakalayıp neyi yakalamadığını görebileyim.
denemeler sonucunda koda biraz "rütuş" yapmak gerekti.. en iyi sonucu :
Kod: Kodu kopyalamak için üzerine çift tıklayın!
bind pubm - "% *" ad:words
proc ad:words {nick uhost hand chan text} {
# bot ana dizininde spam.txt dosyası oluşturun içine yasak sözleri alt alta yazın
# wildcard kullanarak ta ekleme yapılabilir *sp*a? vs gibi .
# bunlarda büyük-küçük harf fark etmez.
set dosya "spam.txt"
# yakalanacak kanal mesajındaki olası renk kodlarını ve özel karakterleri ayıklamak için
set text [filter [stripcodes bcruag $text]]
#kanalda hangi mesajı yakalayıp, postalayan nicki ve yazdığı şeyleri yakaladığı kısım
if {[regexp -nocase -- {\((.*?):PRIVMSG:(.*)$} $text "" hedef laf]} {
# spam sözü,harfler arasına farklı karakterler yerleştirip atanlar için alttaki satır.
# ilk attığım kodda bu satırda hata yapmışım.o nedenle beklenen işi yapmıyor-du...
# olması gereken şekli budur.
regsub -all -- {[A-Z\+\%\`\=\&\#\+\-\_\!\~\<\,\@\#\$\%\^\&\*]} $laf "A+%`=&#+-_!~<,@#$%^&*" laf
# bu satıra gerek yokmuş.bu olsada,olmasada yapacağını yapıyor.
#set laf *[string map -nocase {" " *} $laf]*
set i 0
set fp [open $dosya r]
while {[gets $fp b] >= 0} {
# kanaldan yakalanan mesajlar "laf" dosyadan okunanlarla eşleşiyormu ?
# diğer deyişle ,yasak kelime/ler içeriyor mu?
if {[string match -nocase "*$b*" $laf]} {
# kendi botumda denerken eklediğim satır. "laf" ları ve nick kısmını, dosyadan okunan
# kelimelerle eşleşme olduğunda kanala yakalanan nicki ve "laf" ları nasıl yakaladığını
# "laf" içinde ve nick'te olabilecek özel karakterlerin bot için bir sorun
# olup olmadığını görmek için kullandım. siz kullanmayın..
#puthelp "privmsg $chan :laf çıktısı: -> $laf - hedef-nick çıktısı: -> $hedef"
#putquick "shun $hedef 5m :det!!!"
#putquick "sajoin $hedef 0"
#putquick "sajoin $hedef #uyarı"
incr i
}
}
close $fp
}
return 0
}
# Tcl için özel karakterleri filtre etmek için prosedür.
# bunda da "sorun" vardı .. istenen işi iyi yapmıyordu...onarıldı..
proc filter {text} {
set text [string map {"\\" "\\\\" "\[" "\\\[" "\]" "\\\]" "\{" "\\\{" "\}" "\\\}" "\$" "\\\$" "\"" "\\\""} $text]
return [subst $text]
}
Bu forumdaki linkleri ve resimleri görebilmek için en az 25 mesajınız olması gerekir.
bu şekilde verdi... buna göre kodun son "çalışan" denenmiş ,sizin kullanmak isteyebileceğiniz hali :
Kod: Kodu kopyalamak için üzerine çift tıklayın!
bind pubm - "#adwords *" ad:words
proc ad:words {nick uhost hand chan text} {
set dosya "spam.txt"
set text [filter [stripcodes bcruag $text]]
if {[regexp -nocase -- {\((.*?):PRIVMSG:(.*)$} $text "" hedef laf]} {
regsub -all {[A-Z\+\%\`\=\&\#\+\-\_\!\~\<\,\@\#\$\%\^\&\*]} $laf "A+%`=&#+-_!~<,@#$%^&*" laf
set i 0
set fp [open $dosya r]
while {[gets $fp b] >= 0} {
if {[string match -nocase "*$b*" $laf]} {
putquick "shun $hedef 5m :det!!!"
putquick "sajoin $hedef 0"
putquick "sajoin $hedef #uyarı"
incr i
}
}
close $fp
}
return 0
}
proc filter {text} {
set text [string map {"\\" "\\\\" "\[" "\\\[" "\]" "\\\]" "\{" "\\\{" "\}" "\\\}" "\$" "\\\$" "\"" "\\\""} $text]
return [subst $text]
}