alias -l flood.lines return 6
alias -l flood.time return 2

alias -l repeat.lines return 30
alias -l repeat.char return 400
alias -l repeat.time return 1

on *:text:*:#:{
  ; Flood protection
  inc $+(-u,$flood.time) $+(%,$chan,.,$nick,.,flood)
  if ($($+(%,$chan,.,$nick,.,flood),2) >= $flood.lines) {
    set -u0 $+(%,$chan,.,$nick,.,flood)
    if ($acc.num($me) >= 2) || (o isincs $usermode) {
      ban -u300 $chan $address($nick,2)
      if ($acc.num($me) != 2) && ($acc.num($nick) != 2) {
        kick $chan $nick Flooding violation - 5 minute ban - Fuck you 
      }
    }
  }
  ; Repeat detection - multiline
  var %time = $calc($repeat.time *2)
  if (!$+(%,$chan,.,$nick,.,repeat)) set $+(-u,%time) $+(%,$chan,.,$nick,.,repeat) $1-  

  if ($1- == $($+(%,$chan,.,$nick,.,repeat),2)) inc $+(-u,%time) $+(%,$chan,.,$nick,.,relines)

  if ($($+(%,$chan,.,$nick,.,relines),2) >= $repeat.lines) {
    set -u0 $+(%,$chan,.,$nick,.,repeat)
    inc $+(-u,%time) $+(%,$chan,.,$nick,.,restrikes)
    if ($acc.num($me) >= 2) || (o isincs $usermode) {
      if ($($+(%,$chan,.,$nick,.,restrikes),2) >= 3) {
        echo -a ban -u300 $chan $address($nick,2)
        set -u0 $+(%,$chan,.,$nick,.,restrikes)
        var %ban = $true
      }
      if ($acc.num($me) != 2) && ($acc.num($nick) != 2) {
        echo -a kick $chan $nick Repeated lines violation - $iif(%ban,5 minute ban - Fuck you,$ord($($+(%,$chan,.,$nick,.,restrikes),2)) Warning)
      }
      else echo -a RDM
    }
    else echo -a RDM1
  }
  ; Repeat detection - single line
  var %r = $+(/(.+?)\1{,$repeat.char,}/g)
  if ($regex($1-,%r)) {
    if ($acc.num($me) >= 2) || (o isincs $usermode) {
      inc $+(-u,$repeat.time) $+(%,$chan,.,$nick,.,rechar)
      if ($acc.num($me) != 2) && ($acc.num($nick) != 2) var %k = 1
      if ($($+(%,$chan,.,$nick,.,rechar),2) >= 2) {
        ban -u300 $chan $address($nick,2)
        if (%k) ; kick $chan $nick Repeated character violation - 5 minute ban - Fuck you 
      }
      elseif (%k) kick $chan $nick Repeated character violation - $ord($($+(%,$chan,.,$nick,.,rechar),2)) Warning
    }
  }            
}           

#######################################################################3

alias -l limit.float return 3
alias -l limit.tset return 2
alias limit.chans return $iif(%limit.chans,$v1)
#Limit on
on !*:join:%limit.chans:{
  if ($acc.num($me) >= 3) || (o isincs $usermode) {
    t_set $chan $limit.tset mode $chan +l $calc($nick($chan,0) + $limit.float)
    ;set $+(-u,$calc($limit.tset + 1)) $+(%,join.limit,.,$chan)
  }
}
on !*:part:%limit.chans:{
  if ($acc.num($me) >= 3) || (o isincs $usermode) {
    t_set $chan $limit.tset mode $chan +l $calc($nick($chan,0) - 1)
    ;set $+(-u,$calc($limit.tset + 1)) $+(%,part.limit,.,$chan)
  }
}
on *:kick:%limit.chans:{
  if ($acc.num($me) >= 3) || (o isincs $usermode) {
    t_set $chan $limit.tset mode $chan +l $calc($nick($chan,0) - 1)
    ;set $+(-u,$calc($limit.tset + 1)) $+(%,kick.limit,.,$chan)
  }
}
on *:mode:%limit.chans:{
  if ($acc.num($me) >= 3) || (o isincs $usermode) {
    if (l isincs $1) {
      ;t_set $chan $limit.tset mode $chan +l $calc($nick($chan,0) + $limit.float)
    }
  }
}
#Limit end
alias t_set { 
  if ($timer($+($1,.,limit))) { 
    var %c = $timer($+($1,.,limit)).com,%t = $gettok(%c,4,32),%new_t = $6 
    var %ans = $calc(%new_t - %t),%sym = $iif(%new_c > 0,+,-) 
    var %new_c = $calc($nick($1,0) %sym $abs(%ans))
    if (%new_c <= $nick($1,0)) var %new_c = $calc($nick($1,0) + $limit.float)
    var %command = $reptok(%c,$gettok(%c,4,32),%new_c,32)
    $+(.timer,$1,.,limit) 1 $limit.tset %command
  }
  else $+(.timer,$1,.,limit) 1 $2 $$3-
}
#######################################################################3

alias cchan {
  var %x = 1,%c
  while ($comchan($1,%x)) {
    var %c = %c $v1
    inc %x
  }
  return %c
}
alias harm {
  var %c = $cchan($1),%x = 1
  while ($gettok(%c,%x,32)) {
    msg $v1 Hey - $1's a target
    inc %x
  }
}
#######################################################################3
