Очень нужный скрипт для борьбы с дураками.
Об ошибках сообщайте тут, возможно не совсем корректно вырезал, сам не проверял скрипт.
- Код: Выделить всё
## Total Control Script by Handbrake
## Основан на проекте <KALICH> (продолжение основной его идеи). Russian edition by Britney (c)2003.
## Фишка для бана инвайтеров. Время бана - примерно два месяца.
## Если инвайт пришел от любого юзера у которого нет минимального канального +m (на любом канале) -
## поставит глобальный бан по маске *!*ident*@full.host.ru Закомментировать для отключения.
## Ники и хосты сервисов (IrcNet.ru)
set ServNick1 "ChanServ"
set ServNick2 "NickServ"
set ServHost1 "Services@ircnet.ru"
set ServHost2 "Services@ircnet.ru"
bind raw - "INVITE" inviterban
# ban inviters
proc inviterban {from keyword args} { global botnick;
set hand [finduser $from]
set args [join $args]
set destchan [string range [lindex [split $args] 1] 1 end]
set nick [lindex [split [join $from] "!"] 0]
set uhost [lindex [split [join $from] "!"] 1]
putcmdlog "Inviter detected !!$hand!! USER: $from DEST: $destchan"
if { [ServiceCheck $nick $uhost] } { putcmdlog "invite by services to $destchan"; return 0 }
if { $hand != "*" } {
set invcheck [check:access $hand "|m" ""]
if { ($invcheck != "none") || ([matchattr $hand "m"]) } { putcmdlog "Received invite by master $nick!$uhost, return."; return 0 }
}
set banhost [simask $nick $uhost 4]
newban $banhost $botnick "F*king inviter" 100000
putcmdlog "Banning inviter $banhost - complete."
}
proc check:access {who flags exclude} {
foreach c [channels] {
if { ([matchattr $who "[join $flags]" $c]) && ($c != "[join $exclude]") } { return $c }
}
return "none"
}
proc ServiceCheck {nick host} {
global ServNick1 ServNick2 ServHost1 ServHost2
set nick [tolow [join $nick]]
set host [tolow [join $host]]
if { ($nick == [tolow $ServNick1]) || ($nick == [tolow $ServNick2]) || ($host == [tolow $ServHost1]) || ($host == [tolow $ServHost2]) } { return 1 }
return 0
}
proc simask {nick host maskmode} {
set userhost [MakeIdent $host]
if {([string index $userhost 0] == "~") || ([string index $userhost 0] == "^")} { set userhost [string range [join $userhost] 1 end] } { set userhost [join $userhost] }
set userhost [transhost $userhost]
if { ($maskmode != 2) && ($maskmode != 3) && ($maskmode != 4) } { return "*!*[lindex [split $userhost "@"] 0]*@[lindex [split [maskhost $userhost] "@"] 1]" }
if { $maskmode == 2 } { return "*!*@[lindex [split $userhost "@"] 1]"}
if { $maskmode == 3 } { return "*$nick*!*[lindex [split $userhost "@"] 0]*@*"}
if { $maskmode == 4 } { return "*!*[lindex [split $userhost "@"] 0]*@[lindex [split $userhost "@"] 1]" }
}
proc MakeIdent {umask} {
set che [lindex [split $umask "@"] 0]
set fh [lindex [split $umask "@"] 1]
if {[string length $che] > 9} {return "[string range $che 1 8]@$fh"}
if {[string length $che] > 8} {return "[string range $che 1 end]@$fh"}
return $umask
}
proc tolow {text} { return [string tolower [string map {А а Б б В в Г г Д д Е е Ё ё Ж ж З з И и Й й К к Л л М м Н н О о П п Р р С с Т т У у Ф ф Х х Ц ц Ч ч Ш ш Щ щ Ъ ъ Ы ы Ь ь Э э Ю ю Я я} $text]] }