## protection.tcl

set repeat-kick 4
set banreason "BAD nick/ident 1 minute ban"
set bantime 1

bind pubm - * repeat_pubm
bind join - "*fuck*" join_badnick
bind join - "*bitch*" join_badnick
bind join - "*asshole*" join_badnick 
bind join - "*kontol*" join_badnick
bind join - "*pepek*" join_badnick
bind join - "*ngentot*" join_badnick
bind join - "*kentot*" join_badnick
bind join - "*jembut*" join_badnick
bind join - "*pantat*" join_badnick
bind join - "*vagina*" join_badnick
bind join - "*pukimak*" join_badnick
bind join - "*cibai*" join_badnick
bind join - "*bangsat*" join_badnick
bind join - "*lanciau*" join_badnick
bind join - "*memek*" join_badnick
bind join - "*itil*" join_badnick
bind join - "*nonok*" join_badnick
bind join - "*penis*" join_badnick
bind join - "*shit*" join_badnick
bind join - "*toket*" join_badnick
bind join - "*peler*" join_badnick
bind join - "*KONTOL*" join_badnick
bind pubm - "*fuck*" badword
bind pubm - "*pantek*" badword
bind pubm - "damn*" badword
bind pubm - "*asshole*" badword
bind pubm - "*bitch*" badword
bind pubm - "slut" badword
bind pubm - "*dick*" badword
bind pubm - "*suck*" badword
bind pubm - "*shit*" badword 
bind pubm - "*whore*" badword 
bind pubm - "*pilat*" badword
bind pubm - "*memek*" badword
bind pubm - "*nonok*" badword
bind pubm - "*kontol*" badword
bind pubm - "*kampang*" badword
bind pubm - "*pepek*" badword
bind pubm - "*vevek*" badword
bind pubm - "*kacuk*" badword
bind pubm - "*ngentot*" badword
bind pubm - "*kentot*" badword
bind pubm - "*jembut*" badword
bind pubm - "*totong*" badword
bind pubm - "*burit*" badword
bind pubm - "*pukimak*" badword
bind pubm - "*bujanginam*" badword
bind pubm - "*tapiras*" badword
bind pubm - "*peler*" badword
bind pubm - "*itil*" badword
bind pubm - "*ngewe*" badword
bind pubm - "*bangsat*" badword
bind pubm - "*pler*" badword
bind pubm - "*join #*" pub_dont_invite
bind pubm - "*www.*" pub_dont_invite
bind pubm - "*http://*" pub_dont_invite
bind pubm - "*/join #*" pub_dont_invite
bind pubm - "*/j #*" pub_dont_invite
bind pubm - "*goto #*" pub_dont_invite
bind pubm - "*into #*" pub_dont_invite
bind pubm - "*come #*" pub_dont_invite
bind pubm - "*undang ke #*" pub_dont_invite
bind pubm - "*masuk ke #*" pub_dont_invite
bind pubm - "*datang ke #*" pub_dont_invite

## Badnick scans
set badnicks {
 "jembut"
 "shit"
 "jancok"
 "penis"
 "fuck" 
 "bitch" 
 "asshole" 
 "kontol"
 "asu"
 "contol" 
 "pepek"
 "ngentot" 
 "kentot"
 "jembut" 
 "zembut" 
 "pantat" 
 "tetek" 
 "vagina" 
 "pukimak" 
 "bujanginam" 
 "c1b41" 
 "lanciau" 
 "gigolo"
 "peler"
 "anjing"
 "4nj1ng"
 "4njing"
 "anj1ng"
 "bangsat"
 "b4ngs4t"
 "b4ngsat"
 "bangs4t"
 "pantek*"
 "nenen"
 "cibe"
 "pler*"
 "memek"
 "tempek"
 "lonte"
 "nonok"
 "l0nt3"
 "lont3"
 "l0nte"
 "n0nok"
 "n0n0k"
 "non0k"
 }

proc repeat_pubm {nick uhost hand chan text} {
  if {[matchattr $hand m]||[matchattr $hand bf]} {return 0}
  global repeat_last repeat_num repeat-kick
  if [info exists repeat_last([set n [string tolower $nick]])] {
    if {[string compare [string tolower $repeat_last($n)] \
        [string tolower $text]] == 0} {
      if {[incr repeat_num($n)] >= ${repeat-kick}} {
        putserv "KICK $chan $nick :(k) do NOT repeat! -!4ckc-"
        unset repeat_last($n)
        unset repeat_num($n)
      }
      return
    }
  }
  set repeat_num($n) 1
  set repeat_last($n) $text
}

proc repeat_timr {} {
  global repeat_last
  catch {unset repeat_last}
  catch {unset repeat_num}
  timer 3 repeat_timr
}

if ![regexp repeat_timr [timers]] {
  timer 1 repeat_timr
}

bind nick - * Detected_changebad

proc Detected_changebad {nick uhost hand chan newnick} {
 global badnicks botnick 
if {(![matchattr $hand b]) && ($nick != $botnick)} {
  foreach badchange [string tolower $badnicks] {
   if {[string match *$badchange* [string tolower $newnick]]} {
    set banmask $newnick!*@*
    putserv "MODE $chan +b $banmask"
    putserv "KICK $chan $nick :(kb) Please Changes Your Nick/Ident Now ! -!4ckc-"
    return 0
    }  
  }
 }
}

set allprotect_chans "*"

proc join_badnick {nick uhost hand chan} {
  putlog "\[!4ckc\] $nick $hand $chan $uhost"
  set banmask $nick!*@*
  global banreason bantime
  if {[matchattr $hand f]} { return 0 }
  newchanban $chan $banmask badident $banreason $bantime
  putserv "MODE $chan +b $banmask"
  putserv "KICK $chan $nick :(kb) BAD nick/ident detected! -!4ckc-"
  return 0
}

proc badword {nick uhost hand chan arg} {
  global channel
  set banmask $nick!*@*
  if {$hand != "*"} {
    if {([matchattr $hand b]) || ([matchattr $hand f])} {
      return 1
    }
  }  
  putserv "MODE $chan +b $banmask"
  putserv "KICK $chan $nick :(kb) BAD word detected! -!4ckc-"
  return 0
}

proc badunban {chan host} {
putserv "MODE $chan -b $nick!*@*"
}


proc pub_dont_invite {nick host handle channel arg} {
  global botnick
  if {![isop $botnick $channel]} {return 0}
  if {[isop $nick $channel]} {
    return 0
  }
  set n2hand [nick2hand $nick $channel]
  if {([matchattr $n2hand m] || [matchattr $n2hand p] || [matchattr $n2hand b] || [matchattr $n2hand n] || [matchattr $n2hand f])} {
    return 0
  }
  if [regexp -nocase dcc $nick] {return 0}
  set banmask "*!*[string trimleft [maskhost [getchanhost $nick $channel]] *!]"
  set targmask "*!*[string trimleft $banmask *!]"
  set ban $targmask
  putserv "KICK $channel $nick :(kb) INVITER detected! -!4ckc-"
  pushmode $channel +b $ban
  return 0
}

putlog "\[\!4ckc\] *** protection.tcl loaded."
