# TakeOveR 1.0 - by SLadUrAT - Petrohanski@abv.bg
#
# This script is to help people closing channels.
# Do .thelp on the party line for help.
############### BINDS ###########################
bind dcc m thelp cmd_thelp
bind join - * join_proc
bind dcc m massdeop dcc_massdeop
bind dcc m massop dcc_massop
bind dcc m masskick dcc_masskick
bind dcc m takeover dcc_take

set takeover 0
### Don't change anything bellow... #######
set deopnicks "demon"
set mass 1
############## PROCS ############################
putlog "TCL | TakeOver"

#### HELP PROC ###############################
proc cmd_thelp {hand idx arg} {
  putdcc $idx "TaKeOvEr 1.0 by Skandalen"
  putdcc $idx "Commands:"
  putdcc $idx "  massop <#channel>   - To MassOP all the Operators deoped"
  putdcc $idx "  massdeop <#channel> - To MassDEOP all non-ops opped"
  putdcc $idx "  masskick <#channel> - To MassKick all non-ops"
  putdcc $idx "  takeover <1 | 0>    - To turn ON/OFF takeover mode "
  putdcc $idx "                        (i.e. kick all nonops on join)"
  putdcc $idx "    "
  return 1
}

#### MASS DEOP PROC #########################
proc dcc_massdeop {nick idx arg} {
  global botnick mass
  if {$arg== ""} {
     putdcc $idx "TaKeOvEr 1.0 by demon"
     putdcc $idx "    massdeop <#channel> - To MassDEOP all non-ops opped"
     return 1
  }
  if {$mass==1} {
  set deopnicks ""
  set massdeopz 0
  set members [chanlist $arg]
  foreach who $members {
    if {[isop $who $arg] && ![onchansplit $who $arg] && $who != $botnick && $who != $nick} {
if {$massdeopz < 4} {
append deopnicks " $who"
set massdeopz [expr $massdeopz + 1]
}
if {$massdeopz == 4} {
set massdeopz 0
putdcc $idx "*** Mode $arg -oooo $deopnicks"
putserv "MODE $arg -oooo $deopnicks"
set deopnicks ""
append deopnicks " $who"
set massdeopz 1
}
  }
  }
putserv "MODE $arg -oooo $deopnicks"
putdcc $idx "*** Mode $arg -oooo $deopnicks (Last Few)"
putlog "#$nick# massdeop"
}
}

#### MASS OP PROC ###########################
proc dcc_massop {nick idx arg} {
  global botnick mass
  if {$arg== ""} {
     putdcc $idx "TaKeOvEr 1.0 by demon"
     putdcc $idx "  massop <#channel> - To MassOP all the Operators deoped"
     return 1
  }
if {$mass==1} {
  set opnicks ""
  set massopz 0
  set members [chanlist $arg]
  foreach who $members {
   if {![isop $who $arg] && ![onchansplit $who $arg] && $who != $botnick} {
if {$massopz < 4} {
append opnicks " $who"
set massopz [expr $massopz + 1]
}
if {$massopz == 4} {
set massopz 0
putdcc $idx "*** Mode $arg +oooo $opnicks"
putserv "MODE $arg +oooo $opnicks"
set opnicks ""
append opnicks " $who"
set massopz 1
}
  }
  }
putserv "MODE $arg +oooo $opnicks"
putdcc $idx "*** Mode $arg +oooo $opnicks (Last Few)"
putlog "#$nick# massop"
}}

#### MASS KICK #############################

proc dcc_masskick {nick idx arg} {
  global botnick
  if {$arg== ""} {
     putdcc $idx "TaKeOvEr 1.0 by demon"
     putdcc $idx "  masskick <#channel> - To MassKick all non-ops"
     return 1
  }
set masslkz 1
set members [chanlist $arg]
foreach who $members {
    if {![isop $who $arg] && ![onchansplit $who $arg] && $who != $botnick} {
putserv "KICK $arg $who :$masslkz Mass Kick! TaKeOvEr"
set masslkz [expr $masslkz + 1]
}}
}

#### TAKEOVER ON/OFF PROC ##################
proc dcc_take {hand idx arg} {
global takeover
if {$arg == ""} {
putdcc $idx "TaKeOvEr 1.0 by Lider"
putdcc $idx "USAGE : takeover 0 to deactivate takeover mode"
putdcc $idx "        takeover 1 to activate takeover mode"
return 1
}
if {$arg} { 
set takeover 1 
putdcc $idx "TaKeOvEr mode is now ON!!"
}
if {!($arg)} { 
set takeover 0 
putdcc $idx "TaKeOvEr mode is now OFF!!"
}
return 1
}

#### PROC TO KICK ON JOIN (takeover on) #### 
proc join_proc {nick uhost handle channel} {
 global takeover
 if {$takeover} {
   if {!([matchattr $handle o])} {
     putserv "KICK $channel $nick : TaKeOvEr In PrOgReSS..." 
     change_nick
   }
 }
}

proc randltr {} {
  set x [rand 63]
  return [string range "ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz-0123456789" $x $x]
}

proc change_nick {} {
  global botnick
  set i [expr 9 - [string length $botnick]]
  set newnick $botnick
  for {set n 0} {$n < $i} {incr n} {
    set newnick "$newnick|[randltr]"
  }
  putserv "NICK $newnick"
}  

