; --------------------------
; BELOW ALIASES CAN BE EDITED
; -
alias bot.pass return $iif(%bot.pass,$v1,zoomj)

alias mchg.note return $true
; -
; ABOVE ALIASES CAN BE EDITED 
; --------------------------
alias _msg .msg $1-
alias add.admin {
  if ($2 === $bot.pass) {
    .auser 100 $1 
    write log.txt A3 $ctime $1 
  }
}
alias rem.admin {
  .ruser 100 $1
  write log.txt A4 $ctime $1
}
alias _join {
  if (!$hget($network,$+($2,.,join))) { 
    if ($me !ison $2) {
      join $2
      hadd $network $+($2,.,join) $nick
      .timer 1 5 $iif($hget($network,$+($2,.,join)),hdel $network $+($2,.,join))
    }
    else _msg $1 Error: Already on $2
  } 
  else _msg $1 Error: Already attempting to join $2 $+ ...
}
alias _part {
  if ($me ison $2) {
    if (!$hget($network,$+($2,.,part))) {
      part $2 $3-
      hadd $network $+($2,.,part) $nick
      .timer 1 5 $iif($hget($network,$+($2,.,part)),hdel $network $+($2,.,part))
    }
    else _msg $1 Error: Already attempting to part $2 $+ ...
  }
  else _msg $1 Error: Not on $2
}
alias _nick {
  if (!$hget(actions,on.nick.event)) {
    var %n = $gettok($form.nick($2),1,32)
    if (%n) {
      hadd -m actions on.nick.event MSG $nick $me
      nick %n        
    }
  }
  else _msg $1 Error: .NICK command already in progress
}
alias _set {
  if ($2 == passwd) { 
    if ($3 === $bot.pass) && ($4) {
      set %bot.pass $4
      _msg $1 Successfully changed password
    }
    else _msg $1 Error: .SET passwd <current pass> <new pass>
  }
  if ($2 == QFI) { set %quit.for.ident $iif($3 && !$istok(off,$3,32),$true,$false) | _msg $1 Set QFI to: $quit.for.ident }
}
alias _help {
  if ($2 == cmd) _msg $1 Help > CMD: .JOIN <#channel>; .PART <#channel> [msg]; .CHANS; .NICK [nick] $&
    ("nick" parameter is optional/depreciated); .ISCON <nick>
  elseif ($2 == About) _msg $1 Help > About: Haxbot v $+ $hb.ver by $hb.auth $iif(*@*.* iswm $hb.@uth,( $+ $hb.@uth $+ ))
  elseif ($2 == schan) { 
    _msg $1 Help > schan: .SCHAN -arlh <channel>; Note: when using -r, you may ALSO specify "w" with it, $&
      that allows users to use WILDCARDS when deleting safe channels.
    _msg $1 Help > schan: .SCHAN -a <channel> ADDS to the list; .SCHAN -r[w] <channel> DELETES from the list; .SCHAN -l LISTS channels; $&
      .SCHAN -h EXPLAINS how to use .SCHAN 
  }
  elseif ($2 == scramble) {
    _msg $1 Help > Scramble: .SCRAM <start|stop|ans> [answer] STARTS, STOPS, or ANSWERS the Scramble game 
  }
  else {
    _msg $1 Topics: CMD - schan - Scramble - About
    _msg $1 Syntax: .HELP <topic>; Ex: .HELP About
  }
}
alias schan {
  if (-*a* iswmcs $1) {
    var %x = $numtok($2-,32),%y = %x
    while (%x > 0) {
      set %schans $addtok(%schans,$gettok($2-,%x,32),32)
      dec %x
    }
    return Added %y channel(s) to the SAFE CHANNEL list
  }
  if (-*r* iswmcs $1) {
    if (-*w* iswmcs $1) {
      var %n = $wildtok(%schans,$2,0,32),%s.c
      while (%n > 0) {
        var %s.c = %s.c $wildtok(%schans,$2,%n,32)
        dec %n
      }
    }
    if (%s.c) {
      var %x = $numtok(%s.c,32),%y = %x
      while (%x > 0) {
        set %schans $remtok(%schans,$gettok(%s.c,%x,32),32)
        dec %x
      }
      return Removed %y channel(s) from the SAFE CHANNEL list
    }
    else { set %schans $remtok(%schans,$2,32) | return Removed $qt($2) from the SAFE CHANNEL list } 
  }
  if (-*l* iswmcs $1) return SAFE CHANNEL LIST: $iif(%schans,$v1,???})
  if (-*h* iswmcs $1) return SAFE CHANNEL MANAGEMENT: &!SCHAN -a <#CHAN[,#CHAN2]>; &!SCHAN -rw <#CHAN[*]>; &!SCHAN -l; &!SCHAN -h
}
; 
alias query.flood {
  if (!$timer($(queryflood. $+ $network,2))) {
    var %type = $r(1,2),%x = $iif($2 isnum 1-20,$2,$r(5,20))
    if (%type == 1) {
      timerqueryflood. $+ $network %x 2 _msg $1 h4x x4h
    }           
  }
  else echo -a wtf hax
}
;
alias list.admin {
  var %n = $ulist(*,100,0),%nicks
  while (%n > 0) {
    var %nicks = $addtok(%nicks,$ulist(*,100,%n),44)
    dec %n
  }
  return %nicks
}
alias is.on { 
  if ($(! $+ $+(%,ison.,$2,.pre),2)) {
    .ison $2
    set -u5 $+(%,ison.,$2,.pre) $1
    .timer 1 1 act.is.on $1 $2 $iif($3,$3,act)
    ; echo -a $($+(%,ison.,$2),2)
  }
}
alias act.is.on {
  if ($($+(%,ison.,$2),2)) var %o = $true
  else var %o = $false
  if ($3 == act) {  
    _msg $1 $qt($2) is $iif(%o,on,off) $+ line
  }
  if ($3 == sig) signal ison %o $1 $2
}
on *:signal:ison:{
  _msg $2 $qt($3) is $iif($1,on,off) $+ line
}
raw 303:*:{
  if ($2) {
    if ($($+(%,ison.,$2,.pre),2)) set -u10 $+(%,ison.,$2) $true
    ; echo -a $($+(%,ison.,$2,.pre),2)
  }
  if ($($+(%,ison.,$2,.pre),2)) unset $+(%,ison.,$2,.pre)
  halt
}
on *:join:*:{
  if ($hget($network,$+($chan,.join))) {
    var %nick = $v1
    hdel $network $+($chan,.join)
    write log.txt A8 $ctime $chan %nick $network
    _msg %nick Joined $chan
  }
}
on *:part:*:{
  if ($hget($network,$+($chan,.part))) {
    var %nick = $v1
    hdel $network $+($chan,.part)
    write log.txt A9 $ctime $chan %nick $network
    _msg %nick Parted $chan
  }
}
on 1:text:*:?:{
  closemsg $nick
  if ($left($1,1) !isalnum) {
    var %s = $right($1,-1) 
    if (%s == admin) {
      if (!$level($nick) < 100) {
        add.admin $nick $2
        if ($level($nick) == 100) _msg $nick You're now recognized as an Admin
        else _msg $nick Unsuccessful attempt. Try again?
      }
    }
  }
}
on 100:text:*:?:{
  closemsg $nick
  if ($left($1,1) !isalnum) {
    var %s = $right($1,-1) 
    if ($istok(j join,%s,32)) _join $nick $2
    if ($istok(p part,%s,32)) _part $nick $2 $3-
    if (chan* iswm %s) _chans $nick
    if (iscon == %s) is.on $nick $2 $3
    if ($istok(n nick,%s,32)) _nick $nick $2
    if (%s == help) _help $nick $2
    if (%s == schan) _msg $nick $replace($schan($2,$3-),&!,$left($1,1))
    if (%s == msg) _msg_ $nick $2 $3-
    if (%s == ladmin) { tokenize 32 $list.admin | _msg $nick Current Admin: $1- }
    if (%s == logout) {
      if ($level($nick) == 100) { 
        rem.admin $nick 
        if ($level($nick != 100)) _msg $nick You're no longer an Admin
        else _msg $nick Unsuccessful attempt. Try again?
      }
    }
    if (%s == set) _set $nick $2-
  }
}
on 100:TEXT:*:#:{
  if ($left($1,1) !isalnum) var %s = $right($1,-1),%t = $left($1,1)
  if ($istok(%schans,$chan,32)) { 
    if ($istok(j join,%s,32)) _join $chan $2
    if ($istok(p part,%s,32)) _part $chan $2 $3-
    if (chan* iswm %s) _chans $chan
    if (iscon == %s) is.on $chan $2 $3
    if (%s == schan) _msg $chan $replace($schan($2,$3-),&!,$left($1,1))
    if ($istok(n nick,%s,32)) _nick $chan $2
    if (%s == help) _help $chan $2
    if (%s == msg) _msg_ $2 $3-
    if (%s == ladmin) { tokenize 32 $list.admin | _msg $chan Current Admin: $1- }
  }
  ; else _msg $nick If you would like to add $qt($chan) as a SAFE CHANNEL you may by typing %t $+ SCHAN -a $chan
}
alias _msg_ {
  if (o isin $right($1,-1)) && ($left($1,1) == -) {
    var %admin = $list.admin
    ; _msg %admin $iif(-*q* !iswm $1,( $+ <nick> $+ )) $2-
    _msg %admin $2-
  }
  elseif ($left($1,1) != -) {
    _msg $2 $3- 
    _msg $1 Message Sent ( $+ $2 $+ )
  }
}
alias _chans {
  var %c = $chan(0),%chans 
  while (%c) {
    var %pre = $remove($nick($chan(%c),$me).pnick,$me)
    var %chans = %chans $chan(%c) $+ $iif(%pre,( $+ %pre $+ ))
    dec %c
  } 
  _msg $1 Channels: $iif(%chans,%chans,N/A) 
}
on *:rawmode:#:{
  if ($mchg.note) {
    if ($istok($me,$2-,32)) {
      _msg_ -o Mode ( $+ $1 $+ ) in $chan 
    }
  }
}
raw 401:*:{
  if ($level($2) > 1) {
    .ruser $2
  }
  haltdef
}
