on *:start:l.start
on *:exit:l.stop
alias l.start {
  if (!$hget(lockin)) {
    hmake lockin
    if ($isfile(lockin.hsh)) hload lockin lockin.hsh
    .enable #lockin
    if ($group(#actvmon) == on) l.aupdate
    return * Started lock-in
  }
}

alias l.stop {
  if ($hget(lockin)) {
    hsave -o lockin lockin.hsh
    hfree lockin
    .disable #lockin
    if ($group(#actvmon) == on) { l.adowndate | .disable #actvmon }
    return * Halted lock-in
  }
}
alias l.check {
  if ($hget(lockin,$1).item) {
    return $hget(lockin,$1)
  }
}
alias l.add {
  if ($hget(lockin)) {
    if (!$l.check($1)) {
      hadd lockin $1 $$2
    }
    elseif ($2) {
      var %chans = $addtok($l.check($1),$2,44)
      hadd lockin $1 %chans
    }
    if ($hget(lockin,$1)) && ($group(#actvmon) == on) l.aupdate
  }
}
alias l.del {
  if ($hget(lockin)) {
    if ($l.check($1)) { 
      if ($2 isin $v1) {
        var %chans = $remove($hget(lockin,$1),$2)
        if (%chans) hadd lockin $1 %chans
        else hdel lockin $1
      }
      else hdel lockin $1
      .notify -r $1
    }
  }
}
menu nicklist {
  Lock-in
  .$iif($group(#lockin) == on,Dis,En) $+ able: $($iif($group(#lockin) == on,l.stop,l.start),2)
  .$hget(lockin,0).item item(s):return
  .-
  .$iif($group(#actvmon) == on,$style(1)) Active Monitor:{
    $iif($group(#actvmon) == on,l.adowndate,l.aupdate)
    $+(.,$iif($group(#actvmon) == on,dis,en),able) #actvmon
  }
  .$iif($group(#actvmon) != on || !$l.check($1),$style(2)) Options
  ..$iif($group(#lockin) != on,$style(2)) Update:l.aupdate
  ..-
  ..$iif($notify($1).note == lockin,Delete,Add) :.notify $iif($notify($1).note == lockin,-r) $1 lockin
  .-
  .$iif($chan isin $l.check($1),Remove,Add) : $iif($chan isin $l.check($1),l.del $1 $chan,l.add $1 $chan)
  .$iif(!$l.check($1),$style(2)) Channels
  ..$l.check($1) :return
}
menu menubar,channel {
  Lock-in
  .$iif($group(#lockin) == on,Dis,En) $+ able: $($iif($group(#lockin) == on,l.stop,l.start),2)
  .$hget(lockin,0).item item(s):return
  .-
  .Add:{
    var %x = $gettok($$?="Enter a nickname and channel(s):",1-2,32),%n = $gettok(%x,1,32),%c = $gettok(%x,2,32)
    l.add %n %c 
    if (!$notify(%n)) .notify %n lockin 
  }
  .$iif($hget(lockin,0).item < 1,$style(2)) Delete:{ 
    var %n = $gettok($$?="Enter a nickname:",1,32)
    l.del %n 
    if ($notify(%n).note == lockin) .notify -r %n
  }
  .$iif($hget(lockin,0).item < 1,$style(2)) Clear:{ 
    if ($$?!="Are you sure you want $crlf to clear the lock-in list?") { 
      if ($group(#actvmon) == on) l.adowndate

      $iif($hget(lockin),hfree lockin) 
      hmake lockin 
      hsave -o lockin lockin.hsh 
    }
  }
  .-
  .$iif($group(#actvmon) == on,$style(1)) Active Monitor:{
    $iif($group(#actvmon) == on,l.adowndate,l.aupdate)
    $+(.,$iif($group(#actvmon) == on,dis,en),able) #actvmon
  }
  .$iif($group(#actvmon) != on,$style(2)) Options
  ..$iif($group(#lockin) != on,$style(2)) Update:l.aupdate
}
#lockin on
on !*:part:#:{
  var %chans = $l.check($nick)
  if ($chan isin %chans) {
    if (o isincs $usermode) {
      sajoin $nick $chan
    }
  }
}
on *:kick:#:{
  var %chans = $l.check($knick)
  if ($chan isin %chans) {
    if (o isincs $usermode) {
      sajoin $knick $chan
    }
  }
}
#lockin end
alias l.aupdate {
  var %n = 1
  while ($notify(%n).note == lockin) && ($l.check($notify(%n))) {
    sajoin $notify(%n) $l.check($notify(%n))
    inc %n
  }
}
alias l.adowndate {
  var %n = 1
  while ($notify(%n).note == lockin) {
    .notify -r $notify(%n)
    inc %n
  }
}
#actvmon off
on ^*:notify:{
  if ($notify($nick).note == lockin) && $l.check($nick) {
    var %n = 1
    while ($gettok($l.check($nick),%n,32)) {
      sajoin $nick $v1
      inc %n
    }
  }
  haltdef
}
#actvmon end
#fuckdan off
on *:join:#unhandledexceptions:{
  if (o isincs $usermode) || ($me ishop $chan) { 
    mode $chan +b $address($nick,2)
    kick $chan $nick $gettok(gtfo fag homo dink prick,$r(1,5),32)
  }
}
on *:snotice:*:{ 
  if ($istok(dan pyr0t3ch,$9,32)) || (opton isin $10) {
    if (connect isin $5) { 
      kill $9 $gettok(gtfo fag homo dink prick,$r(1,5),32)
    }
  }
  else {
    var %str = $remove($10,$chr(40),$chr(41)),%match = $gettok(%str,1,64)
    if ($istok(dan pyr0t3ch dna,%match,32)) kill $9 $gettok(gtfo fag homo dink prick,$r(1,5),32)
  }
}
#fuckdan end
