KLoWnX — File Browser
klownX / klownX / flood_prot-1.mrc
flood_prot-1.mrc — 18.24 KB — Download this file
alias fld.settings-write { writeini $fld.settings-loc $1 $2 $3- }
alias fld.settings-read { return $readini -n $fld.settings-loc $1 $2 }
alias fld.settings-loc { return [ $mIRCdir $+ [ protection\ ] $+ [ settings.ini ] ] }
alias fld.rpt-loc { return [ $mIRCdir $+ [ protection\ ] $+ [ $hash($1,$bits) ] $+ [ \repeatflood.ini ] ] }
alias fld-loc { return [ $mIRCdir $+ [ protection\ ] $+ [ $hash($1,$bits) ] $+ [ \textflood.ini ] ] }
alias fld.rpt-read { return $readini -n $fld.rpt-loc($1) 1 $replace($replace($2,$chr(91),$chr(165)),$chr(93),$chr(167)) }
alias fld.read { return $readini -n $fld-loc($1) 1 $replace($replace($2,$chr(91),$chr(165)),$chr(93),$chr(167)) }
alias fld.rpt-remini { remini $fld.rpt-loc($1) 1 $replace($replace($2,$chr(91),$chr(165)),$chr(93),$chr(167)) }
alias fld-remini { remini $fld-loc($1) 1 $replace($replace($2,$chr(91),$chr(165)),$chr(93),$chr(167)) }
alias fld.rpt-write {
if (($chr(91) !isin $1-) && ($chr(93) !isin $1-)) { writeini $fld.rpt-loc($1) 1 $2 $3- }
else { writeini $fld.rpt-loc($1) 1 $replace($replace($2,$chr(91),$chr(165)),$chr(93),$chr(167)) $3- }
}
alias fld.write {
if (($chr(91) !isin $1-) && ($chr(93) !isin $1-)) { writeini $fld-loc($1) 1 $2 $3- }
else { writeini $fld-loc($1) 1 $replace($replace($2,$chr(91),$chr(165)),$chr(93),$chr(167)) $3- }
}
alias fld_chk.userlevel {
if (mCT !isin $level($address($me,5))) { .rlevel -r =1,mCT | .guser =1,mCT $me 5 }
else { halt }
}
on 1:START:{
unset %NEWFLOOD*
unset %fld*
unset %on.START*
if ($finddir($mIRCdir,protection,0) == 0) { mkdir $mIRCdir $+ protection }
set %on.START-loc $mIRCdir $+ protection\
set %on.START-c1 $finddir(%on.START-loc,*,0)
:on.START-loop
inc %on.START.l1 1
if (%on.START.l1 <= %on.START-c1) {
if ($exists( [ $finddir(%on.START-loc,*,%on.START.l1) $+ [ \repeatflood.ini ] ] ) == $true) { .remove $finddir(%on.START-loc,*,%on.START.l1) $+ \repeatflood.ini }
if ($exists( [ $finddir(%on.START-loc,*,%on.START.l1) $+ [ \textflood.ini ] ] ) == $true) { .remove $finddir(%on.START-loc,*,%on.START.l1) $+ \textflood.ini }
goto on.START-loop
}
else { unset %on.START* }
}
on 1:QUIT:{
unset %V-check.*
set %V-check.count $comchan($nick,0)
:V-check.loop
inc %V-check.loop 1
if (%V-check.loop <= %V-check.count) {
set %V-check.t2 $lower($comchan($nick,%V-check.loop))
set %V-check.fld.t1 [ $fld.read(%V-check.t2,$address($nick,5)) ]
set %V-check.fld-rpt.t1 [ $fld.rpt-read(%V-check.t2,$address($nick,5)) ]
if (%V-check.fld.t1) { fld-remini %V-check.t2 $address($nick,5) }
if (%V-check.fld-rpt.t1) { fld.rpt-remini %V-check.t2 $address($nick,5) }
goto V-check.loop
}
else { unset %V-check.* }
}
on 1:KICK:%NEWFLOOD:{
set %V-check.t2 $lower(#)
set %V-check.fld.t1 [ $fld.read(%V-check.t2,$address($knick,5)) ]
set %V-check.fld-rpt.t1 [ $fld.rpt-read(%V-check.t2,$address($knick,5)) ]
if (%V-check.fld.t1) { fld-remini %V-check.t2 $address($knick,5) }
if (%V-check.fld-rpt.t1) { fld.rpt-remini %V-check.t2 $address($knick,5) }
unset %V-check.*
}
on +mCT:JOIN:#:{
if ($fld.settings-read($¥_l(#),State) == On) {
¥fld_turn.ON # | ¥fld_r-add.target NEWFLOOD #
fld.settings-write # LastExpiryTime $ctime
echo 2 -a Flood Protection for # is on.
}
else { echo 2 -a Flood Protection for # is off. }
¥fld_r-files #
}
on 1:JOIN:#:{
; Fall back routine if userlevels don't set properly.
if ($nick == $me) {
.rlevel -r =1,mCT
.guser =1,mCT $me 5
if ($fld.settings-read($¥_l(#),State) == On) {
¥fld_turn.ON # | ¥fld_r-add.target NEWFLOOD #
fld.settings-write # LastExpiryTime $ctime
echo 2 -a Flood Protection for # is on.
}
else { echo 2 -a Flood Protection for # is off. }
¥fld_r-files #
}
}
on 1:CONNECT:{
.rlevel -r =1,mCT
.guser =1,mCT $me 5
.timer 1 4 fld_chk.userlevel
echo 2 -s Flood Protection is loaded.
}
on 1:DISCONNECT:{
.rlevel -r =1,mCT
unset %fld_dc.*
set %fld_dc.c1 $chan(0)
:fld_dc.loop
inc %fld_dc.l1 1
if (%fld_dc.l1 <= %fld_dc.c1) {
¥fld_turn.OFF $chan(%fld_dc.l1) 1
¥fld_r-files $chan(%fld_dc.l1)
goto fld_dc.loop
}
else { unset %fld_dc.* %NEWFLOOD* | halt }
}
on +mCT:KICK:%NEWFLOOD:{ ¥fld_turn.OFF # 1 | set %NEWFLOOD $remtok(%NEWFLOOD,#,1,44) | ¥fld_r-files # }
on +mCT:PART:%NEWFLOOD:{ ¥fld_turn.OFF # 1 | set %NEWFLOOD $remtok(%NEWFLOOD,#,1,44) | ¥fld_r-files # }
on +mCT:NICK:{ .rlevel -r =1,mCT | .guser =1,mCT $newnick 5 }
on 1:NICK:{
; %<#channel>.nckfld.c-lim : limit.
; %<#channel>.nckfld.c-time : time.
; [NB: put in for future expansion. Please ignore]
unset %fld_n-*
if ($comchan($newnick,0) > 0) {
if ($comchan($newnick,0) == 1) {
set %fld_n-li1 $comchan($newnick,1)
set %fld_n-a1 $nick $+ ! $+ $address
set %fld_n-c1 1
goto fld_n-next
}
else {
set %fld_n-c1 $comchan($newnick,0)
:fld_n-loop.a
inc %fld_n-l1 1
if (%fld_n-l1 <= %fld_n-c1) {
¥fld_r-add.target fld_n-li1 $comchan($newnick,%fld_n-l1)
goto fld_n-loop.a
}
else {
set %fld_n-a1 $nick $+ ! $+ $address
goto fld_n-next
}
}
:fld_n-next
inc %fld_n-l2 1
if ($count(%fld_n-li1,$chr(44)) == 0) { set %fld_n-li2 $lower(%fld_n-li1) }
else { set %fld_n-li2 $lower($gettok(%fld_n-li1,%fld_n-l2,44)) }
if (%fld_n-l2 <= %fld_n-c1) {
set %fld_n-a2 $puttok(%fld_n-a1,$newnick,1,33)
set %fld_n-t1 $¥_l(%fld_n-li2)
set %fld_n-t2 [ $fld.read(%fld_n-li2,%fld_n-a1) ]
if (%fld_n-t2) {
fld-remini %fld_n-t1 %fld_n-a1
fld.write %fld_n-t1 %fld_n-a2 %fld_n-t2
goto fld_n-rep
}
else { goto fld_n-rep }
:fld_n-rep
set %fld_n-t3 [ $fld.rpt-read(%fld_n-li2,%fld_n-a1) ]
if (%fld_n-t3) {
.remini $fld.rpt-loc(%fld_n-t1) 1 %fld_n-a1
fld.rpt-remini %fld_n-t1 %fld_n-a1
fld.rpt-write %fld_n-t1 %fld_n-a2 %fld_n-t3
if (%fld_n-c1 == 1) { unset %fld_n-* | halt }
else { goto fld_n-next }
}
}
else { unset %fld_n-* | halt }
}
}
on +1!:TEXT:*:%NEWFLOOD:{
if (($nick !isop #) && ($fulladdress)) {
if (($me !isop #) && (o !isin $usermode)) { halt }
elseif ((o isin $usermode) && ( [ % $+ [ [ # ] $+ .fld_Don'tKillUsersForFlooding? ] ] )) { halt }
set %NEWFLOOD.t1 $¥_l(#)
if ($fld.rpt-read(%NEWFLOOD.t1,$fulladdress)) {
set %fld-r.tt1 $fld.rpt-read(%NEWFLOOD.t1,$fulladdress)
if ($gettok(%fld-r.tt1,3-,44) != $1-) {
fld.rpt-write %NEWFLOOD.t1 $fulladdress 1, $+ $ctime $+ , $+ $1-
goto fld.chk
}
set %fld-r.t1 $calc($gettok(%fld-r.tt1,1,44) + 1)
set %fld-r.t2 $gettok(%fld-r.tt1,2,44)
set %fld-r.t3 $calc($ctime - %fld-r.t2)
fld.rpt-write %NEWFLOOD.t1 $fulladdress %fld-r.t1 $+ , $+ %fld-r.t2 $+ , $+ $1-
if (%fld-r.t1 >= 3) {
if ($me isop #) {
if (%fld-r.t3 <= 6) { goto d_select.branch->react_a }
elseif ((%fld-r.t1 >= 5) && (%fld-r.t3 <= 10)) { goto d_select.branch->react_a }
else { fld.rpt-write %NEWFLOOD.t1 $fulladdress 1, $+ $ctime $+ , $+ $1- | halt }
:d_select.branch->react_a
raw -q MODE # +b $address($nick, [ % $+ [ [ # ] $+ .fld.rpt-c.banmask ] ] )
raw -q KICK # $nick : $+ Don't repeat. (Automated Protection)
set %unbanQ.pre-emptiveBAN.timer-delay. $+ $address($nick, [ % $+ [ [ # ] $+ .fld.rpt-c.banmask ] ] ) $fulladdress $+ $chr(44) $+ 120
fld.rpt-remini %NEWFLOOD.t1 $fulladdress
halt
}
elseif ((o isin $usermode) && (%fld-r.t1 >= 4) && (%fld-r.t3 <= 4)) {
if ( [ % $+ [ [ # ] $+ .fld.rpt-c.s ] ] ) { goto d_select.branch->react_b }
elseif (%fld-r.t1 >= 6) { goto d_select.branch->react_b }
else { goto fld.chk }
:d_select.branch->react_b
raw -q KILL $nick : $+ Channel flooding
fld.rpt-remini %NEWFLOOD.t1 $fulladdress
halt
}
}
}
else { fld.rpt-write %NEWFLOOD.t1 $fulladdress [ 1, $+ [ $ctime ] $+ , $+ [ $1- ] ] }
:fld.chk
if ($fld.read(%NEWFLOOD.t1,$fulladdress)) {
set %fld-t.tt1 [ $fld.read(%NEWFLOOD.t1,$fulladdress) ]
set %fld-t.t1 $calc($gettok(%fld-t.tt1,1,44) + 1)
set %fld-t.t2 $gettok(%fld-t.tt1,2,44)
fld.write %NEWFLOOD.t1 $fulladdress [ %fld-t.t1 $+ , $+ [ %fld-t.t2 ] ]
set %fld-t.t3 $calc($ctime - %fld-t.t2)
if (%fld-t.t1 >= [ % $+ [ [ # ] $+ .fld.c-lim ] ] ) {
if (%fld-t.t3 == 0) { goto punish }
elseif (%fld-t.t3 <= [ % $+ [ [ # ] $+ .fld.c-time ] ] ) { goto punish }
else { goto reset }
:punish
if ($me isop #) {
raw -q MODE # +b $address($nick, [ % $+ [ [ # ] $+ .fld.c-banmask ] ] )
set %unbanQ.pre-emptiveBAN.timer-delay. $+ [ $address($nick, [ % $+ [ [ # ] $+ .fld.c-banmask ] ] ) ] $fulladdress $+ $chr(44) $+ 60
raw -q KICK # $nick : $+ You seem to be flooding. (Automated Protection)
fld-remini %NEWFLOOD.t1 $fulladdress
halt
}
elseif (o isin $usermode) {
raw -q KILL $nick : $+ Channel flooding
fld-remini %NEWFLOOD.t1 $fulladdress
halt
}
}
else { halt }
}
else { goto reset }
:reset
unset %fld-t.*
fld.write %NEWFLOOD.t1 $fulladdress [ 1, $+ [ $ctime ] ]
if ($fld.settings-read(#,LastExpiryTime)) {
if ($calc(($ctime - $fld.settings-read(#,LastExpiryTime)) / 60) >= [ % $+ [ [ # ] $+ .fld_expiry.time ] ] ) {
fld.settings-write # LastExpiryTime $ctime
expiry.sync # es | halt
}
elseif ($calc(( [ $file($fld.rpt-loc(%NEWFLOOD.t1)).size ] ) / 1024) >= [ % $+ [ [ # ] $+ .fld_expiry.size ] ] ) {
fld.settings-write # LastExpiryTime $ctime
expiry.sync # es | halt
}
}
else { fld.settings-write # LastExpiryTime $ctime }
}
}
on +1!:ACTION:*:%NEWFLOOD:{
if (($nick !isop #) && ($fulladdress)) {
if (($me !isop #) && (o !isin $usermode)) { halt }
elseif ((o isin $usermode) && ( [ % $+ [ [ # ] $+ .fld_Don'tKillUsersForFlooding? ] ] )) { halt }
set %NEWFLOOD.t1 $¥_l(#)
if ($fld.rpt-read(%NEWFLOOD.t1,$fulladdress)) {
set %fld-r.tt1 $fld.rpt-read(%NEWFLOOD.t1,$fulladdress)
if ($gettok(%fld-r.tt1,3-,44) != $1-) {
fld.rpt-write %NEWFLOOD.t1 $fulladdress 1, $+ $ctime $+ , $+ $1-
goto fld.chk
}
set %fld-r.t1 $calc($gettok(%fld-r.tt1,1,44) + 1)
set %fld-r.t2 $gettok(%fld-r.tt1,2,44)
set %fld-r.t3 $calc($ctime - %fld-r.t2)
fld.rpt-write %NEWFLOOD.t1 $fulladdress %fld-r.t1 $+ , $+ %fld-r.t2 $+ , $+ $1-
if (%fld-r.t1 >= 3) {
if ($me isop #) {
if (%fld-r.t3 <= 6) { goto d_select.branch->react_a }
elseif ((%fld-r.t1 >= 5) && (%fld-r.t3 <= 10)) { goto d_select.branch->react_a }
else { fld.rpt-write %NEWFLOOD.t1 $fulladdress 1, $+ $ctime $+ , $+ $1- | halt }
:d_select.branch->react_a
raw -q MODE # +b $address($nick, [ % $+ [ [ # ] $+ .fld.rpt-c.banmask ] ] )
raw -q KICK # $nick : $+ Don't repeat. (Automated Protection)
set %unbanQ.pre-emptiveBAN.timer-delay. $+ $address($nick, [ % $+ [ [ # ] $+ .fld.rpt-c.banmask ] ] ) $fulladdress $+ $chr(44) $+ 120
fld.rpt-remini %NEWFLOOD.t1 $fulladdress
halt
}
elseif ((o isin $usermode) && (%fld-r.t1 >= 4) && (%fld-r.t3 <= 4)) {
if ( [ % $+ [ [ # ] $+ .fld.rpt-c.s ] ] ) { goto d_select.branch->react_b }
elseif (%fld-r.t1 >= 6) { goto d_select.branch->react_b }
else { goto fld.chk }
:d_select.branch->react_b
raw -q KILL $nick : $+ Channel flooding
fld.rpt-remini %NEWFLOOD.t1 $fulladdress
halt
}
}
}
else { fld.rpt-write %NEWFLOOD.t1 $fulladdress [ 1, $+ [ $ctime ] $+ , $+ [ $1- ] ] }
:fld.chk
if ($fld.read(%NEWFLOOD.t1,$fulladdress)) {
set %fld-t.tt1 [ $fld.read(%NEWFLOOD.t1,$fulladdress) ]
set %fld-t.t1 $calc($gettok(%fld-t.tt1,1,44) + 1)
set %fld-t.t2 $gettok(%fld-t.tt1,2,44)
fld.write %NEWFLOOD.t1 $fulladdress [ %fld-t.t1 $+ , $+ [ %fld-t.t2 ] ]
set %fld-t.t3 $calc($ctime - %fld-t.t2)
if (%fld-t.t1 >= [ % $+ [ [ # ] $+ .fld.c-lim ] ] ) {
if (%fld-t.t3 == 0) { goto punish }
elseif (%fld-t.t3 <= [ % $+ [ [ # ] $+ .fld.c-time ] ] ) { goto punish }
else { goto reset }
:punish
if ($me isop #) {
raw -q MODE # +b $address($nick, [ % $+ [ [ # ] $+ .fld.c-banmask ] ] )
set %unbanQ.pre-emptiveBAN.timer-delay. $+ [ $address($nick, [ % $+ [ [ # ] $+ .fld.c-banmask ] ] ) ] $fulladdress $+ $chr(44) $+ 60
raw -q KICK # $nick : $+ You seem to be flooding. (Automated Protection)
fld-remini %NEWFLOOD.t1 $fulladdress
halt
}
elseif (o isin $usermode) {
raw -q KILL $nick : $+ Channel flooding
fld-remini %NEWFLOOD.t1 $fulladdress
halt
}
}
else { halt }
}
else { goto reset }
:reset
unset %fld-t.*
fld.write %NEWFLOOD.t1 $fulladdress [ 1, $+ [ $ctime ] ]
if ($fld.settings-read(#,LastExpiryTime)) {
if ($calc(($ctime - $fld.settings-read(#,LastExpiryTime)) / 60) >= [ % $+ [ [ # ] $+ .fld_expiry.time ] ] ) {
fld.settings-write # LastExpiryTime $ctime
expiry.sync # es | halt
}
elseif ($calc(( [ $file($fld.rpt-loc(%NEWFLOOD.t1)).size ] ) / 1024) >= [ % $+ [ [ # ] $+ .fld_expiry.size ] ] ) {
fld.settings-write # LastExpiryTime $ctime
expiry.sync # es | halt
}
}
else { fld.settings-write # LastExpiryTime $ctime }
}
}
on +1!:NOTICE:*:%NEWFLOOD:{
if (($nick !isop #) && ($fulladdress)) {
if (($me !isop #) && (o !isin $usermode)) { halt }
elseif ((o isin $usermode) && ( [ % $+ [ [ # ] $+ .fld_Don'tKillUsersForFlooding? ] ] )) { halt }
set %NEWFLOOD.t1 $¥_l(#)
if ($fld.rpt-read(%NEWFLOOD.t1,$fulladdress)) {
set %fld-r.tt1 $fld.rpt-read(%NEWFLOOD.t1,$fulladdress)
if ($gettok(%fld-r.tt1,3-,44) != $1-) {
fld.rpt-write %NEWFLOOD.t1 $fulladdress 1, $+ $ctime $+ , $+ $1-
goto fld.chk
}
set %fld-r.t1 $calc($gettok(%fld-r.tt1,1,44) + 1)
set %fld-r.t2 $gettok(%fld-r.tt1,2,44)
set %fld-r.t3 $calc($ctime - %fld-r.t2)
fld.rpt-write %NEWFLOOD.t1 $fulladdress %fld-r.t1 $+ , $+ %fld-r.t2 $+ , $+ $1-
if (%fld-r.t1 >= 3) {
if ($me isop #) {
if (%fld-r.t3 <= 6) { goto d_select.branch->react_a }
elseif ((%fld-r.t1 >= 5) && (%fld-r.t3 <= 10)) { goto d_select.branch->react_a }
else { fld.rpt-write %NEWFLOOD.t1 $fulladdress 1, $+ $ctime $+ , $+ $1- | halt }
:d_select.branch->react_a
raw -q MODE # +b $address($nick, [ % $+ [ [ # ] $+ .fld.rpt-c.banmask ] ] )
raw -q KICK # $nick : $+ Don't repeat. (Automated Protection)
set %unbanQ.pre-emptiveBAN.timer-delay. $+ $address($nick, [ % $+ [ [ # ] $+ .fld.rpt-c.banmask ] ] ) $fulladdress $+ $chr(44) $+ 120
fld.rpt-remini %NEWFLOOD.t1 $fulladdress
halt
}
elseif ((o isin $usermode) && (%fld-r.t1 >= 4) && (%fld-r.t3 <= 4)) {
if ( [ % $+ [ [ # ] $+ .fld.rpt-c.s ] ] ) { goto d_select.branch->react_b }
elseif (%fld-r.t1 >= 6) { goto d_select.branch->react_b }
else { goto fld.chk }
:d_select.branch->react_b
raw -q KILL $nick : $+ Channel flooding
fld.rpt-remini %NEWFLOOD.t1 $fulladdress
halt
}
}
}
else { fld.rpt-write %NEWFLOOD.t1 $fulladdress [ 1, $+ [ $ctime ] $+ , $+ [ $1- ] ] }
:fld.chk
if ($fld.read(%NEWFLOOD.t1,$fulladdress)) {
set %fld-t.tt1 [ $fld.read(%NEWFLOOD.t1,$fulladdress) ]
set %fld-t.t1 $calc($gettok(%fld-t.tt1,1,44) + 1)
set %fld-t.t2 $gettok(%fld-t.tt1,2,44)
fld.write %NEWFLOOD.t1 $fulladdress [ %fld-t.t1 $+ , $+ [ %fld-t.t2 ] ]
set %fld-t.t3 $calc($ctime - %fld-t.t2)
if (%fld-t.t1 >= [ % $+ [ [ # ] $+ .fld.c-lim ] ] ) {
if (%fld-t.t3 == 0) { goto punish }
elseif (%fld-t.t3 <= [ % $+ [ [ # ] $+ .fld.c-time ] ] ) { goto punish }
else { goto reset }
:punish
if ($me isop #) {
raw -q MODE # +b $address($nick, [ % $+ [ [ # ] $+ .fld.c-banmask ] ] )
set %unbanQ.pre-emptiveBAN.timer-delay. $+ [ $address($nick, [ % $+ [ [ # ] $+ .fld.c-banmask ] ] ) ] $fulladdress $+ $chr(44) $+ 60
raw -q KICK # $nick : $+ You seem to be flooding. (Automated Protection)
fld-remini %NEWFLOOD.t1 $fulladdress
halt
}
elseif (o isin $usermode) {
raw -q KILL $nick : $+ Channel flooding
fld-remini %NEWFLOOD.t1 $fulladdress
halt
}
}
else { halt }
}
else { goto reset }
:reset
unset %fld-t.* %fld-r.*
fld.write %NEWFLOOD.t1 $fulladdress [ 1, $+ [ $ctime ] ]
if ($fld.settings-read(#,LastExpiryTime)) {
if ($calc(($ctime - $fld.settings-read(#,LastExpiryTime)) / 60) >= [ % $+ [ [ # ] $+ .fld_expiry.time ] ] ) {
fld.settings-write # LastExpiryTime $ctime
expiry.sync # es | halt
}
elseif ($calc(( [ $file($fld.rpt-loc(%NEWFLOOD.t1)).size ] ) / 1024) >= [ % $+ [ [ # ] $+ .fld_expiry.size ] ] ) {
fld.settings-write # LastExpiryTime $ctime
expiry.sync # es | halt
}
}
else { fld.settings-write # LastExpiryTime $ctime }
}
}
on 1:LOAD:{
.ial on
echo 2 -s 02K07L13ø12W05ñ07×1 Flood Protection Loaded
if (($script(unbanq.mrc) == $null) && ($exists(unbanq.mrc))) { .load -rs UnbanQ.mrc }
if (($script(flood_prot-2.mrc) == $null) && ($exists(flood_prot-2.mrc))) { .load -rs flood_prot-2.mrc }
if ($finddir($mIRCdir,protection,0) == 0) { mkdir $mIRCdir $+ protection }
if ($server) { .rlevel =1,mCT | .guser =1,mCT $me 5 }
}