; Channel Botnet Flood Protection ; Author : SeeknDestroy ; Release Date : October 21st, 2006 alias ialscan { return $ialchan($$2,$$1,0) } alias ialnicks { var %i = 1 var %z = $ialscan($$1,$$2) var %ns = $null while (%i <= %z) { var %n = $ialchan($$2,$$1,%i).nick var %ns = $addtok(%ns,%n,32) inc %i 1 } return %ns } alias ialkick { var %ii = 1 var %zz = $ialscan($$1,$$2) var %ns = $ialnicks($$1,$$2) var %nm = $iif($3,$3-,Clones from $$2) while (%ii <= %zz) { var %n = $gettok(%ns,%ii,32) kick $$1 %n %nm inc %ii 1 } } ; [m]ass[k]ick[b]an ; usage : /mkb #chan nick1 nick2 nick3 ... alias mkb { mb $1- mk $1- } ; [m]ass[b]an alias ; usage : /mb #chan nick1 nick2 nick3 ... alias mb { if (%mb.chan) { if (%mb.chan != $$1) { mode %mb.chan + $+ $str(b,$numtok(%mb.masks,32)) %mb.masks unset %mb.masks } } set -u10 %mb.chan $$1 tokenize 32 $2- while ($1) { var %x = 1 var %mb.ibl.total = $ibl(%mb.chan,0) var %mb.ibl.check = 0 var %mb.ibl.address = $iif($address($1,2),$address($1,2),$hget(floodbanmask,$1)) while (%x <= %mb.ibl.total) { if ($ibl(%mb.chan,%x) == %mb.ibl.address) { %mb.ibl.check = 1 } inc %x 1 } if (!%mb.ibl.check) { set %mb.masks $addtok(%mb.masks,%mb.ibl.address,32) } tokenize 32 $2- if ($numtok(%mb.masks,32) == 6) { mode %mb.chan + $+ $str(b,$numtok(%mb.masks,32)) %mb.masks .timermbban off unset %mb.masks } } if (%mb.masks) { .timermbban 1 1 mode %mb.chan + $+ $str(b,$numtok(%mb.masks,32)) %mb.masks .timermbban2 1 1 unset %mb.masks } } ; [m]ass[k]ick alias ; usage : /mk #chan nick1 nick2 nick3 ... alias mk { var %mk.chan = $$1 tokenize 32 $2- while ($1) { if (!$timer(mk. [ $+ [ $1 ] ])) { inc -u10 %mk 5 .timermk. [ $+ [ $1 ] ] 1 %mk mk2 %mk.chan $1 } tokenize 32 $2- } } ; since /mk starts a timer, /mk2 checks to see if they're ; still there before kicking when kick timer(s) trigger(s) alias mk2 { if ($2 ison $1) { inc -u30 %mktotal 1 ialkick $1 $address($2,2) %mktotal } } on shitlist:join:#:{ mkb $chan $nick } alias autoshit { set -u60 %auto.shitlist. [ $+ [ $$1 ] ] 1 msg $$1 Auto-Shitlisting anyone joining for the next 60 seconds } alias plusm { if ($network == dalnet) { var %mode.m = M } else { var %mode.m = m } mode $$1 + $+ %mode.m .timerminusr [ $+ [ $chan ] ] 1 120 mode $$1 - $+ %mode.m } alias plusr { if ($network == dalnet) { var %mode.r = R } else { var %mode.r = r } mode $$1 + $+ %mode.r .timerminusr [ $+ [ $chan ] ] 1 120 mode $$1 - $+ %mode.r } alias plusmr { if ($network == dalnet) { var %mode.mr = MR } else { var %mode.mr = mr } mode $$1 + $+ %mode.mr .timerminusmr [ $+ [ $chan ] ] 1 120 mode $$1 - $+ %mode.mr } ; (F)lood (S)hift (N)icks alias fsn { set %fsn.7 %fsn.6 | set %fsn.6 %fsn.5 | set %fsn.5 %fsn.4 | set %fsn.4 %fsn.3 | set %fsn.3 %fsn.2 | set %fsn.2 %fsn.1 | set %fsn.1 $$1 set %fsn %fsn.7 %fsn.6 %fsn.5 %fsn.4 %fsn.3 %fsn.2 %fsn.1 .timerunsetfsn 1 15 unset %fsn* } on @*:join:#:{ hadd -mu15 $chan joined $+ . $+ $nick 1 if (%auto.shitlist. [ $+ [ $chan ] ] == 1) { auser shitlist $address($nick,2) mkb $chan $nick } elseif ($regex($nick,/\d\d\d/)) { fsn $nick inc -u15 %random.nick. [ $+ [ $chan ] ] 1 if (%random.nick. [ $+ [ $chan ] ] == 6) { plusm $chan } elseif (%random.nick. [ $+ [ $chan ] ] == 7) { mkb $chan %fsn $nick | unset %fsn* } elseif (%random.nick. [ $+ [ $chan ] ] == 15) { plusr $chan mkb $chan $nick } elseif (%random.nick. [ $+ [ $chan ] ] > 7) { mkb $chan $nick } } else { if (%clone.flood. [ $+ [ $chan ] $+ [ $site ] ]) { fsn $nick inc -u30 %clone.flood. [ $+ [ $chan ] ] 1 if (%clone.flood. [ $+ [ $chan ] ] == 6) { plusm $chan } elseif (%clone.flood. [ $+ [ $chan ] ] == 7) { mkb $chan %fsn $nick } elseif (%clone.flood. [ $+ [ $chan ] ] == 15) { plusr $chan mkb $chan $nick } elseif (%clone.flood. [ $+ [ $chan ] ] > 3) { mkb $chan $nick } } inc -u30 %clone.flood. [ $+ [ $chan ] $+ [ $site ] ] 1 } } on @*:text:*:#:{ if (($nick isop $chan) || (exempt isin $level($fulladdress))) halt if ($hget(text.floodpro, $chan) == $1-) { fsn $nick inc -u15 %repeat.counter. [ $+ [ $chan ] ] 1 if (%repeat.counter. [ $+ [ $chan ] ] == 6) { plusm $chan } elseif (%repeat.counter. [ $+ [ $chan ] ] == 7) { mkb $chan %fsn $nick | unset %fsn* } elseif (%repeat.counter. [ $+ [ $chan ] ] == 15) { plusr $chan mkb $chan $nick } elseif (%repeat.counter. [ $+ [ $chan ] ] > 7) { mkb $chan $nick } } hadd -m text.floodpro $chan $1- } on @*:action:*:#:{ if (($nick isop $chan) || (exempt isin $level($fulladdress))) halt if ($hget(text.floodpro, $chan) == $1-) { fsn $nick inc -u15 %repeat.counter. [ $+ [ $chan ] ] 1 if (%repeat.counter. [ $+ [ $chan ] ] == 6) { plusm $chan } elseif (%repeat.counter. [ $+ [ $chan ] ] == 7) { mkb $chan %fsn $nick | unset %fsn* } elseif (%repeat.counter. [ $+ [ $chan ] ] == 15) { plusr $chan mkb $chan $nick } elseif (%repeat.counter. [ $+ [ $chan ] ] > 7) { mkb $chan $nick } } hadd -m text.floodpro $chan $1- } on @*:notice:*:#:{ if (($nick isop $chan) || (exempt isin $level($fulladdress))) halt if ($hget(text.floodpro, $chan) == $1-) { fsn $nick inc -u15 %repeat.counter. [ $+ [ $chan ] ] 1 if (%repeat.counter. [ $+ [ $chan ] ] == 6) { plusm $chan } elseif (%repeat.counter. [ $+ [ $chan ] ] == 7) { mkb $chan %fsn $nick | unset %fsn* } elseif (%repeat.counter. [ $+ [ $chan ] ] == 15) { plusr $chan mkb $chan $nick } elseif (%repeat.counter. [ $+ [ $chan ] ] > 7) { mkb $chan $nick } } hadd -m text.floodpro $chan $1- } on @*:part:#:{ if (exempt isin $level($fulladdress)) halt hadd -mu30 floodbanmask $nick $address($nick,2) if ($hget($chan,joined $+ . $+ $nick)) { inc -u5 %revolving.door.floodpro. [ $+ [ $chan ] ] 1 } if ($hget(text.floodpro, $chan) == $1-) { fsn $nick inc -u15 %repeat.counter. [ $+ [ $chan ] ] 1 if (%repeat.counter. [ $+ [ $chan ] ] == 6) { plusm $chan } elseif (%repeat.counter. [ $+ [ $chan ] ] == 7) { mb $chan %fsn $nick | unset %fsn* } elseif (%repeat.counter. [ $+ [ $chan ] ] == 15) { plusr $chan mb $chan $nick } elseif (%repeat.counter. [ $+ [ $chan ] ] > 7) { mb $chan $nick } } elseif (%revolving.door.floodpro. [ $+ [ $chan ] ] == 10) { plusmr $chan mb $chan $nick } elseif (%revolving.door.floodpro. [ $+ [ $chan ] ] > 10) { mb $chan $nick } if ($1) { hadd -m text.floodpro $chan $1- } } ctcp *:*:#:{ if ($me isop $chan) { if (exempt isin $level($fulladdress)) halt inc -u30 %repeat.counter.ctcp. [ $+ [ $chan ] ] 1 if (%repeat.counter.ctcp. [ $+ [ $chan ] ] == 6) { plusm $chan } elseif (%repeat.counter.ctcp. [ $+ [ $chan ] ] == 7) { mkb $chan %fsn $nick | unset %fsn* } elseif (%repeat.counter.ctcp. [ $+ [ $chan ] ] == 15) { plusr $chan mkb $chan $nick } elseif (%repeat.counter.ctcp. [ $+ [ $chan ] ] > 7) { mkb $chan $nick } } }