Selam
sabahın erken saatlerinde paylaştığım badnick koruma scripti gibi buda eski* sunucularımda botların girdiği kanallarda kanal yetkililerin kullanımına ,o kanalın savunmasına yönelik bir script.
Adından anlaşılacağı üzere badword- kötü söz koruması..komutla botun op (@) olduğu kanalda en az halfop (%) ve üzeri kanal yetkililerinin ekleyip-sileceği ve listeleyeceği şekilde yapılmıştır.
kanalda accessi olan voice (+) ve üzeri kimselere bu koruma işlemez-muaf tutar.ayrıca kod içinde muaf tutulacak kelimelerin eklenebildiği bir bölümde mevcuttur.(bunu kendinize göre düzenlemeniz gerekecektir.)
uluslararası yabancı bir sunucudaki resmi yardım kanallarının koruma botlarında kullanılmış ve halen kullanılan bir kod olduğundan orjinali ingilizce idi. Burda paylaşmak için kendimce Türkçe'leştirdim ve kullanımınıza sunuyorum.
komutlar:
!addbadword kelime* sebep -> !addbadword *napyon* napıyon olcaktı tüh bak...
!rembadword kelime* -> !rembadword *napyon*
!listbadword
görüldüğü üzere wildcard kullanabilme imkanı var.kodun en üstünde badwordlerin saklanacağı .txt dosyasının yerini-dizini doğru şekilde belirtiniz.
ÖNEMLİ: kodda satır 210-222 arasında korumadan muaf tutulacak kelimelerin ekleneceği kısım vardır.bu kısmı kendinize göre düzenleyiniz.çoğaltıp -azaltabilirsiniz o satırları..
Örneğin: korumaya [Üye Olmadan Linkleri Göremezsiniz. Üye Olmak için TIKLAYIN...] yada [Üye Olmadan Linkleri Göremezsiniz. Üye Olmak için TIKLAYIN...] badword- kötü söz olarak eklemişinizdir.ancak bazı sitelerin yazılmasına tölerans göstermek istiyorsunuzudur .işte o bölümde bunları belirtmelisiniz.
umarım ki işinize yarayacaktır.Güle güle kullanın. Kod: Kodu kopyalamak için üzerine çift tıklayın! set badword_version "1.3"
#~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
# KURULUM
#~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
# eklenen kötü sözlerin kayıtedileceği dizini belirtin (sonu slash ile bitmeyecek şekilde)
set badword_cfg(datapath) "/home/broken/ircd/bot/scripts/BadWords"
# set badword_cfg(nameroot) "badwords-"
#~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
# KURULUM SONU - bu bölümden sonrasına ne yaptığınızı bilmiyorsanız dokunmamalısınız :)
#~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
#~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
# ADDBADWORD
#~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
####triggerların olduğu dosyaya yeni bir girdi eklemek için kullanılan prosedür
bind pub - !addbadword badword:pub:add
proc badword:pub:add { nick uhost handle chan arg } {
if { ![isop $nick $chan] && ![ishalfop $nick $chan] } {
return 0
}
set word [swear:filter2 [string range $arg 0 [expr [string first " " $arg]-1]]]
set reason [lrange $arg 1 end]
if { $word == "" || $reason == "" } {
puthelp "NOTICE $nick :Please provide a badword and a reason."
return 0
}
# kontroller tamam.yeni bir girdi ekleyelim.
global badword_cfg
set file "$badword_cfg(datapath)/badword[string range $chan 1 end].txt"
set write [open $file a]
puts $write "$word#$reason"
close $write
puthelp "NOTICE $nick : $word kelimesi $chan kanalında kötü söz olarak eklendi."
}
#~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
# REMBADWORD
#~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
# bu prosedür daha önce eklenmiş kelimenin
# kanalında silinmesi içindir.
bind pub - !rembadword badword:pub:rem
proc badword:pub:rem { nick uhost handle chan badword } {
if { ![isop $nick $chan] && ![ishalfop $nick $chan] } {
return 0
}
# scripti daha okunaklı hale getirir
global badword_cfg
set badwordfile "$badword_cfg(datapath)/badword[string trimleft $chan #].txt"
# eger badword dosyası yoksa...
if { ![file exists $badwordfile ] } {
puthelp "NOTICE $nick : $chan kanalı için bir badword dosyası bulunamadı... Barış :)"
return 0
}
set tempfile "$badword_cfg(datapath)/badword[string trimleft $chan #].bak"
set readfirst [open $badwordfile r]
set linenumb 0
set count 0
puthelp "NOTICE $nick :İşleniyor: Kötü Söz kaldırılıyor."
while { ![eof $readfirst] } {
gets $readfirst line
set helpwanted [string range $line 0 [expr [string first # $line]-1]]
if { $badword != $helpwanted } {
if { $linenumb==0 } {
set writetemp [open $tempfile w]
puts $writetemp $line
close $writetemp
incr linenumb
} else {
set writetemp [open $tempfile a]
puts $writetemp $line
close $writetemp
incr linenumb
}
} else {
incr count
puthelp "NOTICE $nick :($count):!addbadword $helpwanted [string range $line [expr [string first # $line]+1] end]"
}
}
close $readfirst
set readfirst2 [open $tempfile r]
set linenumb2 0
while { ![eof $readfirst2] } {
gets $readfirst2 line
if { [string first # $line] != -1 } {
if { $linenumb2 == 0 } {
set writetemp [open $badwordfile w]
puts $writetemp $line
close $writetemp
incr linenumb2
} else {
set writetemp [open $badwordfile a]
puts $writetemp $line
close $writetemp
}
}
}
# bu dosyayı ne diye açtık bir hiç için ??
# daha güçsüz bırakmak için mi ?
if { $linenumb2 == 0 } {
set writetemp [open $badwordfile w]
close $writetemp
}
close $readfirst2
puthelp "NOTICE $nick :Tamamlandı: Kötü Söz kaldırıldı."
}
#~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
# LISTBADWORDS
#~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
# Daha önce o kanal için eklenmiş tüm kötü sözler
# için soran yetkiliye listelenmesi prosedürü.
bind pub - !listbadword badword:pub:list
bind pub - !listbadwords badword:pub:list
proc badword:pub:list { nick uhost handle chan badword } {
if { ![isop $nick $chan] && ![ishalfop $nick $chan] } {
return 0
}
# scripti daha okunaklı yapıyor
global badword_cfg
set badwordfile "$badword_cfg(datapath)/badword[string trimleft $chan #].txt"
# eğer kötü söz dosyası yoksa...
if { ![file exists $badwordfile ] } {
puthelp "NOTICE $nick : $chan kanalı için oluşturulmuş bir Kötü Söz dosyası bulunamadı... Barış :)"
return 0
}
set read [open $badwordfile r]
set text ""
while { ![eof $read] } {
gets $read line
set text "$text [lindex [split $line #] 0]"
}
close $read
set finish [string range $text 1 [expr [string length $text]-2]]
if { $finish == "" } {
puthelp "NOTICE $nick : $chan kanalı için oluşturulmuş herhangi bir Kötü Söz listesi yok :)"
return 0
}
# eğer ki eklenmiş kötü sözlerin sayısı çok ise.
# listelerken satır aralıkları bırakacak yada satır nosu bildirilecek
set long [split $finish]
if { [llength $long] > 30 } {
for { set c 0} { $c < [llength $long] } { incr c 30 } {
if { $c == 0 } {
puthelp "NOTICE $nick : $chan: kanalı için Kötü Sözler : 4[lrange $long $c [expr $c+29]]"
} else {
puthelp "NOTICE $nick : 4[lrange $long $c [expr $c+29]]"
}
}
} else {
puthelp "NOTICE $nick : $chan: kanalı için Kötü Sözler 4$finish"
}
}
#~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
# BADWORDS kontrol
#~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
# kanal üstündeki yazışmalarda kötü söz kontrolünü
# yapan prosedür
# bind hepsi
bind pubm - "* *" badword:pubm:check
proc badword:pubm:check { nick uhost handle chan arg } {
# yetkililere dokunma
if { [isop $nick $chan] || [ishalfop $nick $chan] || [isvoice $nick $chan] } {
return 0
}
# muaf kelimeleri ayrı tutma.
if { [string match -nocase "*bir-kelime-girin*" $arg] } {
return 0
}
if { [string match -nocase "*atmasın-bu kelimeleri*" $arg] } {
return 0
}
if { [string match -nocase "*bundan-atmasın*" $arg] } {
return 0
}
if { [string match -nocase "*böyle-çoğaltabilirsiniz*" $arg] } {
return 0
}
# scripti daha okunaklı yapalım
global BadwordWarn badword_cfg
set badwordfile "$badword_cfg(datapath)/badword[string trimleft $chan #].txt"
# kötü söz dosyası yoksa..
if { ![file exists $badwordfile ] } {
return 0
}
# kelimeleri kötü söz listesinde araştır
set input " [swear:filter $arg] "
set read [open $badwordfile r]
while { ![eof $read] } {
gets $read line
set helpwanted [string range $line 0 [expr [string first # $line]-1]]
set message [string range $line [expr [string first # $line]+1] end]
if { [string match -nocase "* $helpwanted *" $input] == 1 && $helpwanted != "" } {
if {([info exists BadwordWarn($uhost)] == 1)} {
putserv "MODE $chan +b $uhost"
putserv "KICK $chan $nick : $message ($helpwanted) "
unset BadwordWarn($uhost)
} else {
set BadwordWarn($uhost) 1
timer 5 "unset BadwordWarn($uhost)"
putserv "KICK $chan $nick : $message ($helpwanted) "
}
}
}
close $read
}
#~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
# filtre
#~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
proc swear:filter {str} {
# regsub -all -- {\003[0-9]{0,2}(,[0-9]{0,2})?|\017|\037|\002|\026|\006|\007} $str "" str
regsub -all -nocase {[^a-z,0-9@:/\s\|]} $str "" str
return $str
}
# bunu kim yaptı bilmiyorum.deniyorum...
proc swear:filter2 {str} {
# regsub -all -- {\003[0-9]{0,2}(,[0-9]{0,2})?|\017|\037|\002|\026|\006|\007} $str "" str
regsub -all -nocase {[^a-z,0-9*?@:/\s\|\-]} $str "" str
return $str
}
#~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
putlog "BadWord.tcl v$badword_version yüklendi." |