## First Edit 22.Jan.2002 ## Last Edit 05.Mar.2002 ### Configure here ## status - OnlyDiff=Only if the bot Work IdleDiff=Extra Counter IncrIdle=Count the idle? set BotnetOper(Status) "1" set BotnetOper(OnlyDiff) "1" set BotnetOper(IncrIdle) "0" set BotnetOper(Minutes) "60" set BotnetOper(Tick) "99" ## static settings .. let it default set BotnetOper(Netsplit) "0" ### proc proc BotnetOper:OtherIsOP {chan} { global BotnetOper set noop "- " set num "0" foreach usr [string tolower [chanlist $chan]] { incr num if {[isop $usr $chan]} { # putlog "CHECK-OP: User $usr in Chan $chan is op ( $noop )" return 1 } set noop "${noop}${usr} - " } # putlog "CHECK-OP: No OP in Chan $chan (${noop}${num} -)" set BotnetOper(Usermax) $num return 0 } proc BotnetOper:IsIN { multi test } { if {([lsearch [string tolower $multi] [string tolower $test]] != -1)} { return 1 } if {($multi == "")} { return 0 } return -1 } bind need -|- "*" BotnetOper:HandlerNeed proc BotnetOper:HandlerNeed {chan args} { global BotnetOper botnick set chan [string tolower $chan] if {![onchan $botnick $chan]} {return 0} if {$BotnetOper(Netsplit)=="1"} { if {$BotnetOper(NetsplitCounter) > "0"} { incr BotnetOper(NetsplitCounter) -1; # putcmdlog "Netsplit detected, wait $BotnetOper(NetsplitCounter) ticks for new request" return 0 } else { set BotnetOper(Netsplit) "0" } } if {[botisop $chan]} {return 0} if {[BotnetOper:OtherIsOP $chan]} {return 0} if {$BotnetOper(Tick) > 9 } { set BotnetOper(Tick) 0 putcmdlog "go go go - chan $chan args $args" } { incr BotnetOper(Tick) putcmdlog "waiting $BotnetOper(Tick)" return 0 } if {$BotnetOper(Usermax) < 6} { # putlog "Weniger als 6 User - PRIVMSG O :requestop $chan $botnick" incr {BotnetOper(Steps)} putserv "PRIVMSG O :requestop $chan $botnick" putserv "PRIVMSG Z :requestop $chan $botnick" # putserv "PRIVMSG #cybex.test :requestop $botnick" putcmdlog "Weniger als 6 User - PRIVMSG O :requestop $chan $botnick" } else { putcmdlog "Mehr als 5 User - $chan - [string tolower [chanlist $chan]]" foreach bot [chanlist $chan] { if {[onchan $bot $chan]} { set bot "[nick2hand $bot]" # if {[islinked $bot]} { set lnk "Yes" } else { set lnk "No" } # putlog "ONH-BOT-FOUND: Nick: $bot - Linked $lnk" if {[islinked $bot] && $bot != $botnick} { incr {BotnetOper(Steps)} putserv "PRIVMSG O :requestop $chan $botnick" putserv "PRIVMSG Z :requestop $chan $botnick" # putserv "PRIVMSG #cybex.test :requestop $botnick with $bot" set botmsg "BotnetOper reqop $chan $botnick" # putcmdlog "BotnetOper $chan - bot $bot - with $botnick - msg $botmsg" putbot $bot $botmsg } } } } } bind bot -|- BotnetOper BotnetOper:Request proc BotnetOper:Request {from cmd args} { global BotnetOper set arg [lindex [split $args "{"] 1] set arg [lindex [split $arg "}"] 0] set what [lindex [split $arg " "] 0] set chan [lindex [split $arg " "] 1] set nick [lindex [split $arg " "] 2] putcmdlog "BOT-REQ From: $nick - CMD: $cmd - What: $what - Chan: $chan - Args: $args" incr {BotnetOper(Steps)} putserv "PRIVMSG O :requestop $chan $nick" putserv "PRIVMSG Z :requestop $chan $nick" # putserv "PRIVMSG #cybex.test :requestnetop $chan $nick" } bind msgm -|- "*" BotnetOper:Msgs proc BotnetOper:Msgs {nick uhost handle args } { global BotnetOper; #putcmdlog "Received Msg from $nick ($uhost) \[$handle\]" #putcmdlog "Received Msg: $args" if {[BotnetOper:IsIN $args "*Netsplit*"]==1} { putcmdlog "Netsplit detect" set BotnetOper(Netsplit) "1" set BotnetOper(NetsplitCounter) "60" } return 0; } bind raw -|- NOTICE notc_server proc notc_server { from keyword arg } { putcmdlog "NOTICE from $from keyword $keyword arg $arg" if { [regexp {^(.*) :\*\*\* Notice -- (.*)} $arg arg recvr message]} { putcmdlog "if true - $arg" #boep } } proc BotnetOper:Log {} { global BotnetOper if {[info exist BotnetOper(Steps)]!="1"} { incr BotnetOper(Steps) set BotnetOper(newlog) "${BotnetOper(Name)} ${BotnetOper(version)} by ${BotnetOper(Author)} loaded" } else { set BotnetOper(newlog) "${BotnetOper(Name)} ${BotnetOper(version)}.${BotnetOper(Steps)}" } if { $BotnetOper(newlog) != $BotnetOper(oldlog) } { set BotnetOper(oldlog) $BotnetOper(newlog) putlog "$BotnetOper(newlog)" } else { if { $BotnetOper(OnlyDiff) != "1" } { putlog "$BotnetOper(newlog)" } } } proc BotnetOper:Timer {} { global BotnetOper while {[timerexists BotnetOper:Timer] != ""} { return 1; } BotnetOper:Log; if {$BotnetOper(Status)!="0"} { set BotnetOper(Timer) [timer 1 BotnetOper:Timer] if { $BotnetOper(IncrIdle) == "1" } { incr BotnetOper(Steps) } } } proc BotnetOper:Init {} { global BotnetOper if { $BotnetOper(OnlyDiff) != "1" } { putlog "ATTENTION: BotnetOper makes partyline traffic!" } while {[timerexists BotnetOper:Timer] != ""} { return 1; } set BotnetOper(Steps) "0" set BotnetOper(newlog) "" set BotnetOper(oldlog) "" if {$BotnetOper(Status)!="0"} { set BotnetOper(Timer) [timer 1 BotnetOper:Timer] if { $BotnetOper(IncrIdle) == "1" } { incr BotnetOper(Steps) } } BotnetOper:Log } ### basement ### Please let it be default set BotnetOper(Name) "BotnetOper" set BotnetOper(version) "v 0.3.2" set BotnetOper(Author) "CyBex" if {[info exist BotnetOper(Steps)]!="1"} { set BotnetOper(Steps) "0" BotnetOper:Init; } else { BotnetOper:Timer putcmdlog "${BotnetOper(Name)} ${BotnetOper(version)}.${BotnetOper(Steps)} rehashed" } return