Bad Nick
PHP Kod: Kodu kopyalamak için üzerine çift tıklayın!
###############################################################################
########### Bad nick Protection by Prince_of_the_net ############
###############################################################################
#While I am in my channel I have seen quite a few people joining with irrtating
#or offensive nicks.This script will teach thoes lamers a lesson by kicking and
#optionally banning them.Like my other scripts,you need to load my counter
#script (counter.tcl,available at
Bu forumdaki linkleri ve resimleri görebilmek için en az 25 mesajınız olması gerekir.
style="color: #0000BB">set bnick {
"*fuck*"
"*rape*"
"*fuk*"
"*badwa"
"*phudi*"
"*fudi"
"*pussy*"
"*boobs*"
"*porn*"
"*p0rn*"}
#Set this to the time for which you would like to place a bad nick host on ban.
#0 makes the ban permanent.(Not recommended)
set bnick_bantime 30
#Set this to the time after which you would like to reset the timer for the
#bad nick.
set bnick_reset 60
#Set this to the number of times you want to warn before you would like to
#place ban.0 gives no warnings.
set bnick_warnings 1
#Set this to the reason to be given while kicking the offender the first time.
set bnick_kick "Your nick offends me.Change it and come back."
#Set this to the reason while banning the user after bnick_warnings have expired
set bnick_ban "I think I told you to change ur nick.Now we don't need you."
# How do you want it to mask a ban? Default == 2
# 0 - *!user@host.domain
# 1 - *!*user@host.domain
# 2 - *!*@host.domain
# 3 - *!*user@*.domain
# 4 - *!*@*.domain
# 5 - nick!user@host.domain
# 6 - nick!*user@host.domain
# 7 - nick!*@host.domain
# 8 - nick!*user@*.domain
# 9 - nick!*@*.domain
# You can also specify a type of 10 to 19 which correspond to masks 0 to 9, but
# instead of using a * wildcard to replace portions of the host.domain, it uses ?
# wildcards to replace the numbers in the address.
set bnick_ban_type 12
###############################################################################
## You can edit below this but dont mail me if things start acting weird :Ş ##
###############################################################################
bind join - * bnick:check
bind nick - * bnick:check
proc bnick:check {nick uhost hand chan {newnick ""}} {
global logo bnicks bnick_bantime bnick bnick_reset bnick_warnings bnick_kick bnick_ban bnick_ban_type
if {$newnick == ""} {set newnick $nick}
foreach bword [split $bnick "\n"] {
if {[regexp -nocase $bword $newnick] && [botisop $chan]} {
if {![info exists bnicks($uhost)]} {
set bnicks($uhost) 1
putkick $chan $newnick "$bnick_kick [count_update 0] $logo"
timer $bnick_reset "unset bnicks($uhost)"
putlog "Warned and kicked $newnick on $chan for using bad nicks."
puthelp "NOTICE $newnick :Change your nick before you come to $chan.The next time I catch you using bad nicks, I will ban you. $logo"
} {
if {$bnicks($uhost) < $bnick_warnings} {
incr bnicks($uhost)
bnick:resettimer "bnicks($uhost)"
timer $bnick_reset "unset bnicks($uhost)"
putkick $chan $newnick "Warning $bnicks($uhost) for using bad nicks.Be careful I am watching you... [count_update 0] $logo"
puthelp "NOTICE $newnick :Join $chan with a bad nick for [expr $bnick_warnings - $bnick($uhost)] more time(s) and I will make sure you will join no more. $logo"
putlog "Warning $bnick($uhost) for $newnick on $chan for using bad nicks."
} {
unset bnicks($uhost)
bnick:resettimer "bnicks($uhost)"
newchanban $chan [bnick:masktype $nick!$uhost $bnick_ban_type] "Bad Nick Protection" "$bnick_ban [count_update 1] $logo" $$bnick_bantime
putkick $chan $newnick "$bnick_ban [count_update 1] $logo"
}
}
}
}
}
proc bnick:resettimer {reset} {
foreach time_check [string tolower [timers]] {
if {[string match *$reset* $time_check]} {killtimer [lindex [split $time_check] end]}
}
}
proc bnick:replace {string subs} {
if {[llength $subs] == "1"} {set subs [lindex $subs 0]}
for {set i 0} {[lindex $subs $i] != ""} {incr i 2} {
regsub -all -- [lindex $subs $i] $string [lindex $subs [expr $i+1]] string
} ; return $string
}
proc bnick:masktype {uhost type} {
if {![string match "*!*@*.*" $uhost]} {
set nick [lindex [split $uhost "!"] 0] ; set uhost "$nick![getchanhost $nick]"
if {$uhost == "$nick!"} {set type "return_nothing"}
}
switch -exact $type {
0 {set ban "*[string range $uhost [string first ! $uhost] e]"}
1 {set ban "*!*[string trimleft [string range $uhost [expr [string first ! $uhost]+1] e] "~"]"}
2 {set ban "*!*[string range $uhost [string first @ $uhost] e]"}
3 {
set ident [string range $uhost [expr [string first ! $uhost]+1] [expr [string last @ $uhost]-1]]
set ban "*!*[string trimleft $ident "~"][string range [maskhost $uhost] [string first @ [maskhost $uhost]] e]"
}
4 {set ban "*!*[string range [maskhost $uhost] [string last "@" [maskhost $uhost]] e]"}
5 {set ban $uhost}
6 {
set nick [string range $uhost 0 [expr [string first "!" $uhost]-1]]
set ident [string range $uhost [expr [string first "!" $uhost]+1] [expr [string last "@" $uhost]-1]]
set ban "$nick!*[string trimleft $ident "~"][string range $uhost [string last "@" $uhost] e]"
}
7 {
set nick [string range $uhost 0 [expr [string first "!" $uhost]-1]]
set ban "$nick!*[string range $uhost [string last "@" $uhost] e]"
}
8 {
set nick [string range $uhost 0 [expr [string first "!" $uhost]-1]]
set ident [string range $uhost [expr [string first "!" $uhost]+1] [expr [string last "@" $uhost]-1]]
set ban "$nick!*[string trimleft $ident "~"][string range [maskhost $uhost] [string last "@" [maskhost $uhost]] e]"
}
9 {
set nick [string range $uhost 0 [expr [string first "!" $uhost]-1]]
set ban "$nick!*[string range [maskhost $uhost] [string last "@" [maskhost $uhost]] e]"
}
10 {
set host [string range $uhost [string last "@" $uhost] e]
if {[bnick:findip [string range $host 1 e]] == "0"} {
set host [bnick:replace $host "1 ? 2 ? 3 ? 4 ? 5 ? 6 ? 7 ? 8 ? 9 ? 0 ?"]
set ident [string range $uhost [expr [string first "!" $uhost]+1] [expr [string last "@" $uhost]-1]]
set ban "*!$ident$host"
} {set ban [bnick:masktype $uhost 0]}
}
11 {
set host [string range $uhost [string last "@" $uhost] e]
if {[bnick:findip [string range $host 1 e]] == "0"} {
set host [bnick:replace $host "1 ? 2 ? 3 ? 4 ? 5 ? 6 ? 7 ? 8 ? 9 ? 0 ?"]
set ident [string range $uhost [expr [string first "!" $uhost]+1] [expr [string last "@" $uhost]-1]]
set ban "*!*[string trimleft $ident "~"]$host"
} {set ban [bnick:masktype $uhost 1]}
}
12 {
set host [string range $uhost [string last "@" $uhost] e]
if {[bnick:findip [string range $host 1 e]] == "0"} {
set host [bnick:replace $host "1 ? 2 ? 3 ? 4 ? 5 ? 6 ? 7 ? 8 ? 9 ? 0 ?"]
set ban "*!*$host"
} {set ban [bnick:masktype $uhost 2]}
}
13 {
set host [string range $uhost [string last "@" $uhost] e]
if {[bnick:findip [string range $host 1 e]] == "0"} {set ban [bnick:masktype $uhost 11]} {set ban [bnick:masktype $uhost 3]}
}
14 {
set host [string range $uhost [string last "@" $uhost] e]
if {[bnick:findip [string range $host 1 e]] == "0"} {set ban [bnick:masktype $uhost 12]} {set ban [bnick:masktype $uhost 4]}
}
15 {
set host [string range $uhost [string last "@" $uhost] e]
if {[bnick:findip [string range $host 1 e]] == "0"} {
set host [bnick:replace $host "1 ? 2 ? 3 ? 4 ? 5 ? 6 ? 7 ? 8 ? 9 ? 0 ?"]
set rest [string range $uhost 0 [expr [string last "@" $uhost]-1]]
set ban $rest$host
} {set ban [bnick:masktype $uhost 5]}
}
16 {
set host [string range $uhost [string last "@" $uhost] e]
if {[bnick:findip [string range $host 1 e]] == "0"} {
set host [bnick:replace $host "1 ? 2 ? 3 ? 4 ? 5 ? 6 ? 7 ? 8 ? 9 ? 0 ?"]
set rest "[string range $uhost 0 [expr [string first "!" $uhost]-1]]!*[string trimleft [string range $uhost [expr [string first "!" $uhost]+1] [expr [string last "@" $uhost]-1]] "~"]"
set ban $rest$host
} {set ban [bnick:masktype $uhost 6]}
}
17 {
set host [string range $uhost [string last "@" $uhost] e]
if {[bnick:findip [string range $host 1 e]] == "0"} {
set host [bnick:replace $host "1 ? 2 ? 3 ? 4 ? 5 ? 6 ? 7 ? 8 ? 9 ? 0 ?"]
set rest "[string range $uhost 0 [expr [string first "!" $uhost]-1]]!*"
set ban $rest$host
} {set ban [bnick:masktype $uhost 7]}
}
18 {
set host [string range $uhost [string last "@" $uhost] e]
if {[bnick:findip [string range $host 1 e]] == "0"} {set ban [bnick:masktype $uhost 16]} {set ban [bnick:masktype $uhost 8]}
}
19 {
set host [string range $uhost [string last "@" $uhost] e]
if {[bnick:findip [string range $host 1 e]] == "0"} {set ban [bnick:masktype $uhost 17]} {set ban [bnick:masktype $uhost 9]}
}
return_nothing {set ban ""}
default {set ban "*!*[string range $uhost [string first "@" $uhost] e]"}
}
set _nick [lindex [split $ban !] 0]
set _ident [string range $ban [expr [string first ! $ban]+1] [expr [string last @ $ban]-1]]
set _host [string range $ban [expr [string last @ $ban]+1] e]
if {$_ident != [set temp [string range $_ident [expr [string length $_ident]-9] e]]} {
set _ident *[string trimleft $temp *]
}
if {$_host != [set temp [string range $_host [expr [string length $_host]-63] e]]} {
set _host *[string trimleft $temp *]
} ; return $_nick!$_ident@$_host
}
proc bnick:findip {args} {
catch {unset bnick_found_ip}
if {![string match *.*.*.* $args]} {return 0}
foreach arg $args {
if {[string match *.*.*.* $arg]} {
set bnick_testa [split $arg "."] ; set i 0
while {[llength $bnick_testa] != $i} {
set bnick_test [lrange $bnick_testa $i end]
if {[string length [lindex $bnick_test 1]]<4 && [string length [lindex $bnick_test 2]]<4} {
if {[lindex $bnick_test 1] < 256 && [lindex $bnick_test 2] < 256 && [lindex $bnick_test 1] >= 0 && [lindex $bnick_test 2] >= 0} {
set first "abcdefghi"
if {[string index [lindex $bnick_test 0] [expr [string length [lindex $bnick_test 0]] - 1]] <= 9 && [string index [lindex $bnick_test 0] [expr [string length [lindex $bnick_test 0]] - 1]] >= 0} {
set first [string range [lindex $bnick_test 0] [expr [string length [lindex $bnick_test 0]] - 1] end]
if {[string index [lindex $bnick_test 0] [expr [string length [lindex $bnick_test 0]] - 2]] <= 9 && [string index [lindex $bnick_test 0] [expr [string length [lindex $bnick_test 0]] - 2]] >= 0} {
set first [string range [lindex $bnick_test 0] [expr [string length [lindex $bnick_test 0]] - 2] end]
if {[string index [lindex $bnick_test 0] [expr [string length [lindex $bnick_test 0]] - 3]] <= 9 && [string index [lindex $bnick_test 0] [expr [string length [lindex $bnick_test 0]] - 3]] >= 0} {
set first [string range [lindex $bnick_test 0] [expr [string length [lindex $bnick_test 0]] - 3] end]
}
}
}
set second [lindex $bnick_test 1] ; set third [lindex $bnick_test 2] ; set fourth "abcdefghi"
if {[string index [lindex $bnick_test 3] 0] <= 9 && [string index [lindex $bnick_test 3] 0] >= 0} {
set fourth [string index [lindex $bnick_test 3] 0]
if {[string index [lindex $bnick_test 3] 1] <= 9 && [string index [lindex $bnick_test 3] 1] >= 0} {
set fourth $fourth[string index [lindex $bnick_test 3] 1]
if {[string index [lindex $bnick_test 3] 2] <= 9 && [string index [lindex $bnick_test 3] 2] >= 0} {
set fourth $fourth[string index [lindex $bnick_test 3] 2]
}
}
}
if {($first < 256) && ($second < 256) && ($third < 256) &&
($fourth < 256) && ($first > 0) && ($second > 0) &&
($third > 0) && ($fourth > 0) && ([string index $first 0] > 0) &&
([string index $second 0] > 0) && ([string index $third 0] > 0) &&
([string index $fourth 0] > 0)} {
if {[info exists bnick_found_ip]} {
set bnick_found_ip "$bnick_found_ip $first.$second.$third.$fourth"
} {set bnick_found_ip $first.$second.$third.$fourth}
}
}
} ; incr i +1
}
}
} ; if {[info exists bnick_found_ip]} {return $bnick_found_ip} {return 0}
}
putlog "Bad nick control v3.0 by \002Prince_of_the_net\002 \[Loaded\]"
###############################################################################
######################## END OF SCRIPT ##########################
###############################################################################