Badnick (Kötü Nick Koruması) TCL

öncelikle botun op (@) olması gerekir. op olduğu kanallarda en az halfop (%) yetkisine sahip kanal yetkilileri bu kod için kullanılan .

!addbadnick rumuz*!*@* ban sebebi (alternatif olarak !addban komutu)
!rembadnick rumuz*!*@* (alternatifi !remban komutu)
!listbadnick (alternatifleri !listbadnicks yada !listbans komutları) kullanılabilir.

eklenen banlar botun oluşturduğu user-kullanıcı dosyası içinde her kanal için bans-banlar listesi içinde eklenir-listelenir.

ban eklerken sadece rumuz-nicke değil idente – host mask’e yada bunların belirlenen kısımlarına wildcard kullanarak ban eklemek mümkün..

örnek vermek gerekirse.

!addbadnick *!k?t?k*@* ban sebebi buraya bir boşlukla yazın
!addbadnick *!*@*.amandaman.net banlandın gülüm..
!addban *!adamim*@*.bilmemne.us de get..

vs vs .. gibi..

tabiki ingilizce bir koddu sizlerin kullanabileceğiniz şekilde lüzumlu yerlerini Türkçe’ye çevirmeye çalıştım.. halen aktif olarak etkin bir şekilde kullanılan hızlı,etkili bir kanal koruma kodudur. sanırım işinize yarayacaktır.

güle güle kullanın..

Kod:
set badnick_version "2.4.4"
#~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
# AYARLAR
#~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
namespace eval ::badnick {
    # BINDS
    set binds(list)     "!ListBadNick !ListBadNicks !ListBans"
    set binds(add)      "!AddBadNick !AddBan"
    set binds(delete)   "!RemBadNick !RemBan"
    # özelde okutulacak banlist'in uzunluğu ne kadar olsun? (sunursuz olması için 0 girin)
    set cfg(maxlist) 120
    # rapor gönderilecek admin kanalı girin
    set cfg(adminchan) "#admin-abiler"
    # hata raporlarının gösterileceği kanal (gerekli değilse boş bırakın)...
    set cfg(debug) "#ağır-abiler"
}

#~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
# KURULUM SONU  -- ne yaptığınızı bilmiyorsanız bundan sonrasına dokunmayın :)
#~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
# init on rehash
set ::badnick::listbadnick 0

#~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
# 
#~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
proc ::badnick::binding { } {
    variable binds
    foreach { type triggers } [array get binds] {
        foreach trigger $triggers {
            bind pub - $trigger ::badnick::b${type}
        }
    }
}

#~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
# LISTBANS - LISTBADNICK
#~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
proc ::badnick::blist { nick uhost hand chan arg } {
    if { ![isop $nick $chan] && ![ishalfop $nick $chan] } { return }
    variable listbadnick
    if { $listbadnick != 0 } {
        putserv "PRIVMSG $nick :Banlist'e şu an başka biri bakıyor .Daha sonra deneyin."
        return
    }
    set listbadnick [unixtime]${chan}
    set banlist [banlist $chan]
    set banlistlength [llength $banlist]
    if { $banlistlength == 0 } {
        puthelp "privmsg $nick : $chan kanalında ban listesi boş."
        set listbadnick 0
        return
    }
    proc isdigit {string} { regexp {^[0-9]+$} $string }
    # öntanımlı seçenekler
    set order       "date"
    set fulloutput  0
    set range       0
    # öntanımlı output
    set out(range)  ""
    foreach argument $arg {
        switch -glob -- [string tolower $argument] {
            "-h"        -
            "--help"    {
                putserv "notice $nick :Syntax: 02$::lastbind <options>17. Valid options are:"
                putserv "notice $nick :02--countonly17 : returns the number of bans from $chan)"
                putserv "notice $nick :02--full17 : returns all the fields from each ban. --all is identical)"
                putserv "notice $nick :02--sortby=<key>17 : (<key> can be 02date17, 02rdate17, 02lastactive17, 02rlastactive17. Example: 02$::lastbind --sortby=rdate17"
                putserv "notice $nick :02--last=<num>17 : return only <num> results. Example: 02$::lastbind --last=517"
                return
                set listbadnick 0
            }
            "-c"          -
            "--countonly" { set length [llength [banlist $chan]]
                            putserv "notice $nick :$chan Ban List has [expr { ($length == 0) ? "no" : $length }] bans."
                            set listbadnick 0
                            return
            }
            "-f"     -
            "--full" -
            "-a"     -
            "--all"  { set fulloutput 1 }
            "-s=*"           -
            "--sortby=*"     {
                switch -- $argument {
                    "--sortby=date"         { set order "date" }
                    "--sortby=rdate"        { set order "reverse date" }
                    "--sortby=lastactive"   { set order "last active date" }
                    "--sortby=rlastactive"  { set order "reverse last active date" }
                    default                 {
                        ::badnick::report "$nick!$uhost @ $chan: Unknown --sortby argument: [lindex [split $argument "="] 1]"
                        putserv "notice $nick :Unknown --sortby argument: [lindex [split $argument "="] 1]"
                    }
                }
            }
            "-l=*"         -
            "--last=*"     {
                set range [lindex [split $argument "="] 1]
                if { ! [isdigit $range] } {
                    puthelp "notice $nick :The --last option accepts only integer digits."
                    ::badnick::report "$nick!$uhost @ $chan: Unknown --last argument: $range"
                    set range 0
                }
            }
            default     {
                ::badnick::report "$nick!$uhost @ $chan: Unknown argument: $argument"
                putserv "notice $nick :Unknown argument: $argument"
            }
        }
    }
    # banlist
    switch -- $order {
        "date"                      { set banlist [lsort -increasing -index 3 $banlist] }
        "reverse date"              { set banlist [lsort -decreasing -index 3 $banlist] }
        "last active date"          { set banlist [lsort -increasing -index 4 $banlist] }
        "reverse last active date"  { set banlist [lsort -decreasing -index 4 $banlist] }
        default                     { putlog "Bad sort option: $order" }
    }
    set out(order) ", sorted by $order"
    set length [llength $banlist]
    if { $length != $banlistlength } {
        set out(length) "$length bans on $banlistlength"
    } else {
        set out(length) "$banlistlength bans"
    }
    # Limit the output if requested
    # Suggest --last if the ban list is too long
    variable cfg
    if { $range != 0 } {
        set banlist [lrange $banlist end-[expr $range -1] end]
        set out(range) ", last $range bans"
    } elseif { $banlistlength > $cfg(maxlist) } {
            puthelp "notice $nick :Mevcud ban listesi $banlistlength uzunluğunda.., lütfen --last seçeneğini kullanın. Örnek: $::lastbind [join $arg] --last=$cfg(maxlist)"
            set listbadnick 0
            return
    }

    set out(start) [string map[list "@length" $out(length) "@order" $out(order) "@range" $out(range)] "Ban listesi $chan kanalı (@length@order@range):"]
    puthelp "PRIVMSG $nick :$out(start)"
    foreach ban $banlist {
        # *!*@fuck {"some tests in progress"} 0 1166470558 0 ToM
        # hostmask, comment, expiration timestamp, time added, last time active, creator
        #    0        1               2                3              4            5
        # ban mask
        set banmask [lindex $ban 0]
        # yorum
        set bancomment [lindex $ban 1]
        # expire - not used, all are perm
        # set banexpire [ctime [expr [lindex $ban 2]]]
        # eklendiği zaman
        set bantimeadded [clock format [lindex $ban 3] -format "%Y/%m/%d %H:%M"]
        # son aktıf zaman
        if { [lindex $ban 4] == 0 } {
            set banlastactive "Never"
        } else {
            set banlastactive [clock format [lindex $ban 4] -format "%Y/%m/%d %H:%M"]
        }
        # creator
        set bancreator [lindex $ban 5]
        if { $fulloutput == 1 } {
            puthelp "PRIVMSG $nick :$chan: $banmask ($bancomment) - $bancreator tarafından ($bantimeadded - Last active: $banlastactive) eklendi."
        } else {
            puthelp "PRIVMSG $nick :$chan: $banmask ($bancomment) $bancreator tarafından eklendi."
        }
    }
    puthelp "PRIVMSG $nick : $chan kanalı için ban listesi sonu."
    set listbadnick 0
    return
}

#~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
# ADDBAN - ADDBADNICK
#~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
proc ::badnick::badd { nick uhost hand chan arg } {
    if { ![isop $nick $chan] && ![ishalfop $nick $chan] } {
        return 0
    }
    set victim [lindex [split $arg] 0]
    if { $victim == "" } {
        puthelp "NOTICE $nick :Bir nick/mask ve bir sebep belirtiniz lütfen."
        return 0
    }
    set reason [join [lrange [split $arg] 1 end]];
    if { $reason == "" } {
        puthelp "NOTICE $nick :Bir sebep belirtiniz lütfen."
        return 0
    }

    if { [string first "!" $victim ] == -1 && [string first "@" $victim ] == -1 } {
        # Turn the single nick to a complete hostmask
        set banmask "$victim!*@*"
    } else {
        # Trying to correct the wrong masks
        set banmask $victim
        if { [string equal [string range $banmask 0 0] "!"] }       { set banmask "*$banmask" }
        if { [string equal [string range $banmask end end] "!"] }   { set banmask "$banmask*@*" }
        if { [string equal [string range $banmask end end] "@"] }   { set banmask "$banmask*" }
        set banmask [string map {"!@" "!*@"} $banmask]
    }
    # Final test
    if { ! [regexp -- {^[^!@]+![^!@]+@[^!@]+$} $banmask] } {
        puthelp "NOTICE $nick :Görünüşe göre02 $victim02 hatalı bir mask. Doğru bir nick!ident@host mask girdiğinize emin olunuz."
        ::badnick::report "!AddBan: $nick!$uhost @ $chan: hatalı mask ($victim): $arg"
        return 0
    }
    # Let's add the ban now !
    if { [isban $banmask $chan] } {
        set out "$banmask halihazırda ban listesinde var. Ban sebebi değiştirildi. \"$reason\"."
    } else {
        set out "$banmask $chan kanalında ban liste eklendi."
    }
    newchanban $chan $banmask $nick $reason 0 none
    puthelp "NOTICE $nick :$out"
}

#~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
# REMBAN - REMBADNICK
#~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
proc ::badnick::bdelete { nick uhost hand chan arg } {
    if { ! [isop $nick $chan] && ! [ishalfop $nick $chan] } {
        return 0
    }
    if { $arg == "" } {
        puthelp "NOTICE $nick :Bana hangi banı kaldırmak istediğinizi yazmalısınız.. Böyle deneyiniz. 02$::lastbind --help17"
        return 0
    }
    if { [lindex $arg 0] == "--help" || [lindex $arg 0] == "-h" } {
        puthelp "NOTICE $nick :Syntax: 02$::lastbind <masks>17 (Birkaç mask verebilirsiniz, aralarında boşluk bırakınız)."
        return 0
    }
    set removed [list] ; set notfound [list] ; set missed [list]
    foreach mask [lrange $arg 0 end] {
        if { [string first "!" $mask ] == -1 } {
            append mask "!*@*"
        }
        if { [killchanban $chan $mask] } {
            lappend removed $mask
        } elseif { [isban $mask $chan] } {
            # This should never happen
            lappend missed $mask
        } else {
            lappend notfound $mask
        }
    }
    proc banbans { masklist } {
        return [expr { ([llength $masklist] == 1) ? "Ban" : "Bans" }]
    }
    if { [llength $removed] }  {
        putserv "notice $nick :[banbans $removed] başarıyla kaldırıldı.: [join $removed ", "]"
    }
    if { [llength $notfound] } {
        putserv "notice $nick :[banbans $notfound] $chan kanalı Ban Listinde 02Bulunamadı17  $chan Ban List: [join $notfound ", "]"
    }
    if { [llength $missed] }   {
        putserv "notice $nick :02Bir 034Hata03 oluştu [banbans $missed]17: [join $missed ", "] ... :("
        putserv "privmsg $::badnick::cfg(adminchan) :Bu banları kaldırırken bir hata oluştu: [join $missed ", "] ( $nick!$uhost tarafından $chan kanalında)"
    }
    return
}

#~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
# Araçlar
#~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
proc ::badnick::edebug { text } {
    variable cfg
    if { $cfg(debug) == "" } { return }
    putserv "privmsg $cfg(debug) :0315(badnick) $text17"
}
proc ::badnick::report { text } {
    variable cfg
    if { $cfg(adminchan) == "" } { return }
    putserv "privmsg $cfg(adminchan) :<BadNick.tcl> $text"
}

#~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
# 
#~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
catch ::badnick::uninstall
::badnick::binding

#~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
# 
#~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
bind evnt - prerehash ::badnick::uninstall
proc ::badnick::uninstall { args } {
    foreach bind [binds [namespace current]::*] {
        foreach {a b c d e} $bind break
        unbind $a $b $c $e
    }
    namespace delete [namespace current]
}

#~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
putlog "BadNick v$badnick_version loaded."

 

Leave a Reply

Fill in your details below or click an icon to log in:

WordPress.com Logo

You are commenting using your WordPress.com account. Log Out / Change )

Twitter picture

You are commenting using your Twitter account. Log Out / Change )

Facebook photo

You are commenting using your Facebook account. Log Out / Change )

Google+ photo

You are commenting using your Google+ account. Log Out / Change )

Connecting to %s