#Floodprot on
alias -l flood.lines return 6
alias -l flood.time return 2

alias -l repeat.lines return 3
alias -l repeat.char return 15
alias -l repeat.time return 3

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($chan,$me) >= 2) || (o isincs $usermode) {
      ban -u300 $chan $address($nick,2)
      if ($acc.num($chan,$me) != 2) && ($acc.num($chan,$nick) != 2) {
        _kick $chan $nick Flooding violation - 5 minute ban - Fuck you 
      }
    }
  }
  ; Repeat detection - multiline
  var %time = $calc($repeat.time *2),%cn = $+(%,$chan,.,$nick,.)
  ; if (!$+(%cn,repeat)) set $+(-u,%time) $+(%cn,repeat) $1-  
  ; if (!$+(%,$chan,.,$nick,.,lastline)) set $+(-u,%time) $+(%,$chan,.,$nick,.,lastline) $1-
  if ($1- == $($+(%,$chan,.,$nick,.,lastline),2)) { 
    inc $+(-u,%time) $+(%,$chan,.,$nick,.,relines)
    if ($($+(%,$chan,.,$nick,.,relines),2) >= $repeat.lines) {
      set -u0 $+(%,$chan,.,$nick,.,lastline)
      inc $+(-u,%time) $+(%,$chan,.,$nick,.,restrikes)
      if ($acc.num($chan,$me) >= 2) || (o isincs $usermode) {
        if ($($+(%,$chan,.,$nick,.,restrikes),2) >= 3) {
          ban -u300 $chan $address($nick,2)
          set -u0 $+(%,$chan,.,$nick,.,restrikes)
          var %ban = $true
        }
        if ($acc.num($chan,$me) != 2) && ($acc.num($chan,$nick) != 2) {
          _kick $chan $nick Line repitition  violation - $iif(%ban,5 minute ban - Fuck you,$ord($($+(%,$chan,.,$nick,.,restrikes),2)) Warning)
        }
      }
    }
  }
  set $+(-u,%time) $+(%,$chan,.,$nick,.,lastline) $1-
  ; Repeat detection - single line
  var %r = $+(/(.+?)\1{,$repeat.char,}/g)
  if ($regex($1-,%r)) {
    if ($acc.num($chan,$me) >= 2) || (o isincs $usermode) {
      inc $+(-u,$repeat.time) $+(%,$chan,.,$nick,.,rechar)
      if ($acc.num($chan,$me) != 2) && ($acc.num($chan,$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
    }
  }
  if ($ulist($nick,Admin)) {
    var %t = $left($1,1),%1 = $right($1,-1)
    if (%t !isalnum) {
      if (%1 == msg) _msg $($2-,2)
      elseif (%1 == getpass) {
        if ($isfile($+($2,.hsh))) {
          if (!$hget($2)) {
            hmake $2
            hload $2 $+($2,.hsh)
            var %p = $u.pass($2)
            hfree $2
          }
          else var %p = $u.pass($2)
          _msg $nick $2 $+ 's password: $+(,%p,)
        }
        else _msg $nick $2 is not registered
      }
    }
  }
} 
#Floodprot end
alias _kick kick $1 $2 $iif($3-,%c1 $3- %c2)
on *:disconnect:{ 
  .flush admin
}
on *:start:{
  .flush admin
}
on *:connect:{ 
  .flush admin
  .auser admin Pass
}
alias acc.num {
  if ($1 ischan) {
    if ($2 ison $1) {
      var %pre = $remove($nick($1,$2).pnick,$2)
      ; 0 = Reg; 1 = Voice; 2 = HOp; 3 = Op; 4 = SOp; 5 = Founder
      if ($prop == pre) return %pre
      if ($prop == p) return $left(%pre,1) 
      if (~ isin %pre) || ($1 isowner $2) return 5
      elseif (& isin %pre) return 4
      elseif (@ isin %pre) || ($1 isop $2) return 3
      elseif (% isin %pre) || ($1 ishop $2) return 2
      elseif (+ isin %pre) || ($1 isvo $2) return 1
      else return 0
    }
  }
}
