EIRCD Services — File Browser

EIRCDServicesv3.1 / EIRCDServicesv3.1 / EIRCD Services.mrc

EIRCD Services.mrc — 66.79 KB — Download this file

;######################################################################################################
;######################################################################################################
;####                                                                                              ####
;####                                     EIRCD Services v3.1                                      ####
;####                                                                                              ####
;######################################################################################################
;######################################################################################################
;
;
;
;
;
;
;
;
;
;
;
;    Before using EIRCD Services please read the help file and change any of the settings that you need.
;
;
;
;
;
;
;
;
;
;
;
;
;
;

alias eircdserv {
  if ($exists($+(",$scriptdir,settings.ini,")) == $false) { .echo -q $input(Your configuration is missing.,o,Error.) | return }
  elseif ($exists($+(",$scriptdir,help.ini,")) == $false) { .echo -q $input(Your ChanServ help is missing.,o,Error.) | return }
  if ($eircdserv.set(other,accountlen) !isnum 1-) || ($eircdserv.set(other,hskick) !isnum) || (#* !iswm $eircdserv.set(other,mainchan)) || (!$eircdserv.set(other,tmstart)) || (!$eircdserv.set(other,tmend)) { .echo -q $input(Your configuration is incorrect.,o,Error.) | return }
  if ($gettok($eircdserv.set(other,csaccount),0,32) != 2) && ($gettok($eircdserv.set(other,hsaccount),0,32) != 2) { .echo -q $input(Your ChanServ or HelpServ accounts are incorrect.,o,Error.) | return }
  if (!$sock(eircd2)) { .echo -q $input(EIRCD is not on.,o,Error.) | return }
  window -Ek0 @EIRCDServices -1 -1 1 1 | titlebar @EIRCDServices Console
  sockopen eircdserv.cs 127.0.0.1 $sock(eircd2).port
  var %a $ini($+(",$scriptdir,chanset.ini,"),0)
  while %a { hmake cs. [ $+ [ $v1 ] ] 100 | hload -i cs. [ $+ [ $v1 ] ] $+(",$scriptdir,chanset.ini,") $v1 | dec %a }
  .remove $+(",$scriptdir,chanset.ini,")
}
alias eircdservoff {
  window -c @EIRCDServices
  unset %eircdserv.temp
  sockclose eircdserv.*
  var %i 1 | while %i <= $hget(0) { if (cs.* !iswm $hget(%i)) { inc %i | continue } | hdel $hget(%i) names | hsave -i $hget(%i) $+(",$scriptdir,chanset.ini,") $right($hget(%i),-3) | hfree $hget(%i) }
  while ($ini($+(",$scriptdir,settings.ini,"),logged,1)) remini $+(",$scriptdir,settings.ini,") logged $ini($+(",$scriptdir,settings.ini,"),logged,1)
  hfree -w hs.*
}
on *:CLOSE:@:{ if ($target == @EIRCDServices) { eircdservoff } }
alias eserv { return 3 }
alias -l eircdserv.set { return $readini($scriptdirsettings.ini,$1,$2) }
alias -l eircdserv.acc { return $iif($eircdserv.set($2,$eircdserv.set(logged,$1)),$ifmatch,0) }
alias -l eircd.find { return $iif($hfind(users,$1,$2,w).data,$hfind(users,$1,$2,w).data,$iif($hfind(ircops,$1,$2,w).data,$hfind(ircops,$1,$2,w).data)) }
alias -l eircdserv.info { echo $color($1) @EIRCDServices $iif($2 != *,$+($2,$chr(40),$3,/,$iif($eircdserv.set(logged,$2),$eircdserv.set(logged,$2),Not Loged In),$chr(41),:),*) $iif($2 != *,$4-,$3-) }
alias -l eircd.info { echo $color($1) @EIRCD $iif($2 != *,$+($2,$chr(40),$iif($eircd.user($2,1),$eircd.user($2,1),CONNECTING),/,$iif($eircd.user($2,3),$eircd.user($2,3),CONNECTING),$chr(41),:),*) $3- }
alias -l eircd.ircop { return $iif($hget(ircops,$1),$true) }
on *:SOCKOPEN:eircdserv.cs:{ sockwrite -n $sockname NICK CSLogin | sockwrite -n $sockname USER ChanServ "Chan.Serv" "127.0.0.1" :ChanServ }
on *:SOCKOPEN:eircdserv.hs:{ sockwrite -n $sockname NICK HSLogin | sockwrite -n $sockname USER HelpServ "Help.Serv" "127.0.0.1" :HelpServ }
on *:SOCKREAD:eircdserv.cs:{
  var %sockread
  sockread %sockread
  tokenize 32 %sockread
  if ($2 == 376) { set %eircdserv.temp $1 | sockwrite -n $sockname OPER $eircdserv.set(other,csaccount) }
  elseif ($1 == %eircdserv.temp) && ($2 == NOTICE) && ($4- == :That is an invalid Oper account. All Opers have been notified of the failed login attempt.) { eircdserv.info info * ChanServ Oper account missing. All services stopped. | eircdservoff }
  elseif ($1 == %eircdserv.temp) && ($2 == NOTICE) && ($4- == :That is an invalid password. All Opers have been notified of the failed login attempt.) { eircdserv.info info * ChanServ Oper password incorrect. All services stopped. | eircdservoff }
  elseif ($1 == %eircdserv.temp) && ($2 == NOTICE) && ($4- == :You have successfully logged in as an Oper.) { eircdserv.info info * ChanServ started successfully. | sockwrite -n $sockname NICK :ChanServ }
  elseif ($2 == 433) { eircdserv.info info * The nick ChanServ is in use. All services stopped. | eircdservoff }
  elseif ($2 == 353) { hadd -m cs. [ $+ [ $5 ] ] names $replace($right($6-,-1),@,,+,) }
  elseif ($2 == 332) { hadd -m cs. [ $+ [ $4 ] ] topic $right($5-,-1) }
}
on *:SOCKREAD:eircdserv.hs:{
  var %sockread
  sockread %sockread
  tokenize 32 %sockread
  if ($2 == 376) { sockwrite -n $sockname OPER $eircdserv.set(other,hsaccount) }
  elseif ($1 == %eircdserv.temp) && ($2 == NOTICE) && ($4- == :That is an invalid Oper account. All Opers have been notified of the failed login attempt.) { eircdserv.info info * HelpServ Oper account missing. All services stopped. | eircdservoff }
  elseif ($1 == %eircdserv.temp) && ($2 == NOTICE) && ($4- == :That is an invalid password. All Opers have been notified of the failed login attempt.) { eircdserv.info info * HelpServ Oper password incorrect. All services stopped. | eircdservoff }
  elseif ($1 == %eircdserv.temp) && ($2 == NOTICE) && ($4- == :You have successfully logged in as an Oper.) { eircdserv.info info * HelpServ started successfully. | sockwrite -n $sockname NICK :HelpServ }
  elseif ($2 == 433) { eircdserv.info info * The nick HelpServ is in use. All services stopped. | eircdservoff }
  elseif ($2 == 353) {
    var %i 1
    while %i <= $gettok($right($6-,-1),0,32) { 
      echo -s $+(",$remove($gettok($right($6-,-1),%i,32),@,+),")
      if ($istok(ChanServ HelpServ,$remove($gettok($right($6-,-1),%i,32),@,+),32)) { inc %i | continue }
      if (@* iswm $gettok($right($6-,-1),%i,32)) { hadd -m hs.helpers $remove($gettok($right($6-,-1),%i,32),@) . | sockwrite -n $sockname PRIVMSG $remove($gettok($right($6-,-1),%i,32),@) :Hello $remove($gettok($right($6-,-1),%i,32),@) $+ ! The help list is being populated. }
      elseif ($left($gettok($right($6-,-1),%i,32),1) != +) { hadd -m hs.help $gettok($right($6-,-1),%i,32) Not specified. | sockwrite -n $sockname PRIVMSG $gettok($right($6-,-1),%i,32) :Welcome to $5 $+ ! You are $hget(hs.help,0).item on the list to be helped. Please wait patiently for a helper to be assigned to you. | sockwrite -n $sockname PRIVMSG $gettok($right($6-,-1),%i,32) :To get help quicker, type /desc Information about your problem. } 
      inc %i 
    } 
  }
}
on *:SIGNAL:eircd:{
  if ($1 == unknown) && ($4 == serv) { if ($eircd.ircop($2)) { if ($5 == on) { eircdserv } | elseif ($5 == off) { eircdservoff } | elseif ($5 == restart) { eircdservoff | eircdserv } | else { enotice $2 Services You must supply either on, off, or restart.))) } } | else { enotice $2 Services You must be an Oper to use that command. } }
  if (!$sock(eircdserv.cs)) { return }
  var %cs eircdserv.cs, %hs eircdserv.hs
  if ($1 == nick) && ($3 == CSLogin) && ($4 == ChanServ) { eircdserv.info nick * ChanServ nick change successfull! Joining channels and starting HelpServ. | sockopen eircdserv.hs 127.0.0.1 $sock(eircd2).port | var %i 1 | while %i <= $ini($scriptdirsettings.ini,0) { if (#* iswm $ini($scriptdirsettings.ini,%i)) { sockwrite -n %cs JOIN $ini($scriptdirsettings.ini,%i) | sockwrite -n %cs MODE $ini($scriptdirsettings.ini,%i) | sockwrite -n %cs MODE $ini($scriptdirsettings.ini,%i) +o ChanServ | if ($hget(cs. $+ $ini($scriptdirsettings.ini,%i),topic)) { sockwrite -n eircdserv.cs TOPIC $ini($scriptdirsettings.ini,%i) : $+ $hget(cs. $+ $ini($scriptdirsettings.ini,%i),topic) } } | inc %i } }
  elseif ($1 == nick) && ($3 == HSLogin) && ($4 == HelpServ) { unset %eircdserv.temp | eircdserv.info nick * HelpServ nick change successfull! Joining main channel. | sockwrite -n %hs JOIN $eircdserv.set(other,mainchan) | sockwrite -n %hs MODE $eircdserv.set(other,mainchan) | sockwrite -n %hs MODE $eircdserv.set(other,mainchan) +om HelpServ }
  elseif ($1 == privmsg) && (#* iswm $4) { if (!#* iswm $5) { eircdserv.cs $2-3 $right($5,-1) $6- } | elseif (!* iswm $5) { eircdserv.cs $2-3 $4 $right($5-,-1) } }
  elseif ($1 == unknown) && ($4 == CS) { eircdserv.cs $2-3 $iif(#* iswm $5,$5-,cs $5-) }
  elseif ($1 == unknown) && ($istok(hnext hdone hdesc,$4,32)) { eircdserv.hs $2-3 $4- }
  elseif ($1 == join) && ($hget(cs. $+ $4)) {
    if ($eircdserv.acc($2,$4) >= 200) { sockwrite -n %cs MODE $4 +o $3 }
    elseif ($eircdserv.acc($2,$4) isnum 100-199) { sockwrite -n %cs MODE $4 +v $3 }
    if ($4 == $eircdserv.set(other,mainchan)) && (!$istok(ChanServ HelpServ,$3,32)) {
      if ($eircdserv.acc($2,$4) >= 200) { sockwrite -n %hs PRIVMSG $3 :Hello $3 $+ ! There are $hget(hs.help,0).item people waiting to be helped. | hadd hs.helpers $2 . }
      else { hadd -m hs.help $3 Not Specified. | sockwrite -n %hs PRIVMSG $3 :Welcome to $4 $+ ! You are $hget(hs.help,0).item on the list to be helped. Please wait patiently for a helper to be assigned to you. | sockwrite -n %hs PRIVMSG $3 :To get help quicker, type /hdesc Information about your problem. }
    }
    hadd cs. [ $+ [ $4 ] ] names $hget(cs. $+ $4,names) $3
  }
  elseif ($1 == part) && ($hget(cs. $+ $4)) { hadd cs. [ $+ [ $4 ] ] names $remtok($hget(cs. $+ $4,names),$3,1,32) | if ($hget(hs.help,$3)) { hdel hs.help $3 | enotice $1 HelpServ You have been removed from the help list. } | if ($hget(hs.helpers,$2)) { hdel hs.helpers $2 } }
  elseif ($1 == quit) { var %i 1 | while %i <= $hget(0) { if (cs.* iswm $hget(%i)) { hadd $hget(%i) names $remtok($hget($hget(%i),names),$3,1,32) } | inc %i } | if ($eircdserv.set(logged,$2)) { remini $+(",$scriptdir,settings.ini,") logged $2 } | if ($hget(hs.help,$3)) { hdel hs.help $3 } | if ($hget(hs.helpers,$3)) { hdel hs.helpers $3 } }
  elseif ($1 == kick) { if ($istok(ChanServ HelpServ,$6,32)) { sockwrite -n $iif($6 == ChanServ,%cs,%hs) JOIN $4 | sockwrite -n $iif($6 == ChanServ,%cs,%hs) MODE $4 | sockwrite -n $iif($6 == ChanServ,%cs,%hs) MODE $4 +o $6 | if ($6 == ChanServ) { sockwrite -n %cs KICK $4 $3 :You are not allowed to kick that user. } } | hadd cs. [ $+ [ $4 ] ] names $remtok($hget(cs. $+ $4,names),$3,1,32) | if ($hget(hs.help,$3)) { hdel hs.help $3 } | if ($hget(hs.helpers,$3)) { hdel hs.helpers $3 } }
  elseif ($1 == nick) { var %i 1 | while %i <= $hget(0) { if (cs.* iswm $hget(%i)) { hadd $hget(%i) names $reptok($hget($hget(%i),names),$3,$4,1,32) } | inc %i } | if ($hget(hs.help,$3)) { hdel hs.help $3 | hadd hs.help $4 } | if ($hget(hs.helpers,$3)) { hdel hs.helpers $3 | hadd hs.helpers $4 } }
  elseif ($1 == mode) && ($5 == -o) && ($6 == ChanServ) { sockwrite -n eircdserv.cs MODE $4 +o ChanServ }
  elseif ($1 == mode) && ($5 == -o) && ($6 == HelpServ) { sockwrite -n eircdserv.hs MODE $4 +o HelpServ }
  elseif ($1 == mode) && ($4 == $eircdserv.set(other,mainchan)) && ($5 == -m) { sockwrite -n eircdserv.hs MODE $4 +m }
  elseif ($1 == motd) { enotice $2 ChanServ The server is currently running EIRCD Services v3.1. }
  if ($1 == mode) && ($hget(cs. $+ $4,modelock)) {
    var %a 1,%modelock+,%modelock-,%m+ +,%m- -,%+- $left($5,1)
    .echo -q $regsub($gettok($hget(cs. $+ $4,modelock),1,32),/(.)/g,\1\.,%modelock+)
    if ($gettok($hget(cs. $+ $4,modelock),2,32)) .echo -q $regsub($gettok($hget(cs. $+ $4,modelock),2,32),/(.)/g,\1\.,%modelock-)
    while %a <= $len($5) { if ($istok(+ -,$mid($5,%a,1),32)) %+- = $mid($5,%a,1) | elseif (%+- == -) && ($istokcs(%modelock+,$mid($5,%a,1),46)) %m+ = %m+ $+ $mid($5,%a,1) | elseif (%+- == +) && ($istokcs(%modelock-,$mid($5,%a,1),46)) %m- = %m- $+ $mid($5,%a,1) | inc %a }
    if (%m+ != +) || (%m- != -) sockwrite -n eircdserv.cs MODE $4 %m+ $+ %m-
  }
}
alias eircdserv.cs {
  eircdserv.info own $1-2 ChanServ $iif($3 != cs,$3 ! $+ $4-,/cs $4-)
  if ($3 == cs) && ($4 == help) {
    if (!$ini($scriptdirhelp.ini,$iif($5,$5,help))) { enotice $1 ChanServ There is no help on that topic. }
    else { var %i 1 | while %i <= $ini($scriptdirhelp.ini,$iif($5,$5,help),0) { enotice $1 ChanServ $replace($readini($scriptdirhelp.ini,$iif($5,$5,help),%i),,,~,$chr(160)) | inc %i } }
  }
  elseif ($3 != cs) && ($4 == help) { enotice $1 ChanServ You must use /cs help for that command. }
  ; ACCOUNT
  elseif ($3 == cs) && ($4 == register) {
    if ($eircdserv.set(logged,$1)) { enotice $1 ChanServ You are already logged in to account $eircdserv.set(logged,$1) $+ . | return }
    if (!$5) { enotice $1 ChanServ You must supply an account and password | return }
    if ($len($5) > $eircdserv.set(other,accountlen)) { enotice $1 ChanServ The account name is too long( $+ $eircdserv.set(other,accountlen) charactors max) | return }
    if ($regex($5,/[a-zA-Z0-9_]/g) != $len($5)) { enotice $1 ChanServ Invalid account name. Only letters, numbers, and _ allowed. | return }
    if ($eircdserv.set(accounts,$5)) { enotice $1 ChanServ That account is already registered. | return }
    if (!$6) { enotice $1 ChanServ You must supply a password. | return }
    if ($regex($6,/[a-zA-Z0-9_]/g) != $len($6)) { enotice $1 ChanServ Invalid password. Only letters, numbers, and _ allowed. | return }
    writeini $+(",$scriptdir,settings.ini,") accounts $5 $md5($6)
    enotice $1 ChanServ The account $5 has successfully been registered.
  }
  elseif ($3 != cs) && ($4 == register) { enotice $1 ChanServ You must use /cs register for that command. }
  elseif ($3 == cs) && ($4 == auth) {
    if ($eircdserv.set(logged,$1)) { enotice $1 ChanServ You are already logged in to account $eircdserv.set(logged,$1) $+ . | return }
    if (!$eircdserv.set(accounts,$5)) { enotice $1 ChanServ That is an invalid account. | return }
    if ($md5($6) != $eircdserv.set(accounts,$5)) { enotice $1 ChanServ That is and invalid password. | return }
    var %i 1 | while %i <= $ini($+(",$scriptdir,settings.ini,"),logged,0) { if ($eircdserv.set(logged,$ini($+(",$scriptdir,settings.ini,"),logged,%i)) == $5) { enotice $1 ChanServ That account is already in use. | return } | inc %i }
    writeini $+(",$scriptdir,settings.ini,") logged $1 $5
    enotice $1 ChanServ You have successfully logged into account $5 $+ .
  }
  elseif ($3 != cs) && ($4 == auth) { enotice $1 ChanServ You must use /cs auth for that command. }
  elseif ($3 == cs) && ($4 == newpass) {
    if (!$eircdserv.set(logged,$1)) { enotice $1 ChanServ You are not logged in. | return }
    if (!$6) { enotice $1 ChanServ You must supply the old password and a new password. | return }
    if ($md5($5) != $eircdserv.set(accounts,$eircdserv.set(logged,$1))) { enotice $1 ChanServ The password is incorrect. | return }
    writeini $+(",$scriptdir,settings.ini,") accounts $eircdserv.set(logged,$1) $md5($5)
    enotice $1 ChanServ Your password has been successfully changed.
  }
  elseif ($3 != cs) && ($4 == newpass) { enotice $1 ChanServ You must use /cs newpass for that command. }
  ; USER
  elseif ($4 == addcoowner) {
    if ($eircdserv.acc($1,$3) < 500) { enotice $1 ChanServ You don't have enough access for that command. | return }
    if ($5 == ChanServ) || ($4 == HelpServ) { enotice $1 ChanServ This command does not work for ChanServ or HelpServ. | return }
    if ($istok($hget(cs. $+ $3,names),$5,32)) {
      if (!$eircdserv.set(logged,$eircd.find($5 *,1))) { enotice $1 ChanServ That user must first login. | return }
      if ($eircdserv.set($3,$eircdserv.set(logged,$eircd.find($5 *,1))) isnum 400-499) { enotice $1 ChanServ That user is already a co-owner. | return }
      if ($eircdserv.set($3,$eircdserv.set(logged,$eircd.find($5 *,1))) == 500) { enotice $1 ChanServ That user is already an owner of the channel. | return }
      writeini $+(",$scriptdir,settings.ini,") $3 $eircdserv.set(logged,$eircd.find($5 *,1)) 400
      enotice $1 ChanServ $5 has been successfully added as a co-owner.
    }
    elseif ($ini($+(",$scriptdir,settings.ini,"),accounts,$5)) {
      if ($eircdserv.set($3,$5) isnum 400-499) { enotice $1 ChanServ That account is already a co-owner. | return }
      if ($eircdserv.set($3,$5) == 500) { enotice $1 ChanServ That account is already an owner of the channel. | return }
      writeini $+(",$scriptdir,settings.ini,") $3 $5 400
      enotice $1 ChanServ The accont $5 has been successfully added as a co-owner.
    }
    else { enotice $1 ChanServ That user is not in the channel. | return }
  }
  elseif ($4 == addmaster) {
    if ($eircdserv.acc($1,$3) < 400) { enotice $1 ChanServ You don't have enough access for that command. | return }
    if ($5 == ChanServ) || ($4 == HelpServ) { enotice $1 ChanServ This command does not work for ChanServ or HelpServ. | return }
    if ($istok($hget(cs. $+ $3,names),$5,32)) {
      if (!$eircdserv.set(logged,$eircd.find($5 *,1))) { enotice $1 ChanServ That user must first login. | return }
      if ($eircdserv.set($3,$eircdserv.set(logged,$eircd.find($5 *,1))) isnum 300-399) { enotice $1 ChanServ That user is already a master. | return }
      if ($eircdserv.set($3,$eircdserv.set(logged,$eircd.find($5 *,1))) isnum 400-499) { enotice $1 ChanServ That user is already a co-owner. | return }
      if ($eircdserv.set($3,$eircdserv.set(logged,$eircd.find($5 *,1))) == 500) { enotice $1 ChanServ That user is already the owner. | return }
      writeini $+(",$scriptdir,settings.ini,") $3 $eircdserv.set(logged,$eircd.find($5 *,1)) 300
      enotice $1 ChanServ $5 has been successfully added as a master.
    }
    elseif ($ini($+(",$scriptdir,settings.ini,"),accounts,$5)) {
      if ($eircdserv.set($3,$5) isnum 300-399) { enotice $1 ChanServ That account is already a master. | return }
      if ($eircdserv.set($3,$5) isnum 400-499) { enotice $1 ChanServ That account is already a co-owner. | return }
      if ($eircdserv.set($3,$5) == 500) { enotice $1 ChanServ That account is already the owner. | return }
      writeini $+(",$scriptdir,settings.ini,") $3 $5 300
      enotice $1 ChanServ The accont $5 has been successfully added as a master.
    }
    else { enotice $1 ChanServ That user is not in the channel. | return }
  }
  elseif ($4 == addop) {
    if ($eircdserv.acc($1,$3) < 300) { enotice $1 ChanServ You don't have enough access for that command. | return }
    if ($5 == ChanServ) || ($4 == HelpServ) { enotice $1 ChanServ This command does not work for ChanServ or HelpServ. | return }
    if ($istok($hget(cs. $+ $3,names),$5,32)) {
      if (!$eircdserv.set(logged,$eircd.find($5 *,1))) { enotice $1 ChanServ That user must first login. | return }
      if ($eircdserv.set($3,$eircdserv.set(logged,$eircd.find($5 *,1))) isnum 200-299) { enotice $1 ChanServ That user is already an op. | return }
      if ($eircdserv.set($3,$eircdserv.set(logged,$eircd.find($5 *,1))) isnum 300-399) { enotice $1 ChanServ That user is already a master. | return }
      if ($eircdserv.set($3,$eircdserv.set(logged,$eircd.find($5 *,1))) isnum 400-499) { enotice $1 ChanServ That user is already a co-owner. | return }
      if ($eircdserv.set($3,$eircdserv.set(logged,$eircd.find($5 *,1))) == 500) { enotice $1 ChanServ That user is already the owner. | return }
      writeini $+(",$scriptdir,settings.ini,") $3 $eircdserv.set(logged,$eircd.find($5 *,1)) 200
      enotice $1 ChanServ $5 has been successfully added as an op.
    }
    elseif ($ini($+(",$scriptdir,settings.ini,"),accounts,$5)) {
      if ($eircdserv.set($3,$5) isnum 200-299) { enotice $1 ChanServ That account is already an op. | return }
      if ($eircdserv.set($3,$5) isnum 300-399) { enotice $1 ChanServ That account is already a master. | return }
      if ($eircdserv.set($3,$5) isnum 400-499) { enotice $1 ChanServ That account is already a co-owner. | return }
      if ($eircdserv.set($3,$5) == 500) { enotice $1 ChanServ That account is already the owner. | return }
      writeini $+(",$scriptdir,settings.ini,") $3 $5 200
      enotice $1 ChanServ The accont $5 has been successfully added as an op.
    }
    else { enotice $1 ChanServ That user is not in the channel. | return }
  }
  elseif ($4 == addpeon) {
    if ($eircdserv.acc($1,$3) < 200) { enotice $1 ChanServ You don't have enough access for that command. | return }
    if ($5 == ChanServ) || ($4 == HelpServ) { enotice $1 ChanServ This command does not work for ChanServ or HelpServ. | return }
    if ($istok($hget(cs. $+ $3,names),$5,32)) {
      if (!$eircdserv.set(logged,$eircd.find($5 *,1))) { enotice $1 ChanServ That user must first login. | return }
      if ($eircdserv.set($3,$eircdserv.set(logged,$eircd.find($5 *,1))) isnum 100-199) { enotice $1 ChanServ That user is already a peon. | return }
      if ($eircdserv.set($3,$eircdserv.set(logged,$eircd.find($5 *,1))) isnum 200-299) { enotice $1 ChanServ That user is already an op. | return }
      if ($eircdserv.set($3,$eircdserv.set(logged,$eircd.find($5 *,1))) isnum 300-399) { enotice $1 ChanServ That user is already a master. | return }
      if ($eircdserv.set($3,$eircdserv.set(logged,$eircd.find($5 *,1))) isnum 400-499) { enotice $1 ChanServ That user is already a co-owner. | return }
      if ($eircdserv.set($3,$eircdserv.set(logged,$eircd.find($5 *,1))) == 500) { enotice $1 ChanServ That user is already the owner. | return }
      writeini $+(",$scriptdir,settings.ini,") $3 $eircdserv.set(logged,$eircd.find($5 *,1)) 100
      enotice $1 ChanServ $5 has been successfully added as a peon.
    }
    elseif ($ini($+(",$scriptdir,settings.ini,"),accounts,$5)) {
      if ($eircdserv.set($3,$5) isnum 100-199) { enotice $1 ChanServ That account is already a peon. | return }
      if ($eircdserv.set($3,$5) isnum 200-299) { enotice $1 ChanServ That account is already an op. | return }
      if ($eircdserv.set($3,$5) isnum 300-399) { enotice $1 ChanServ That account is already a master. | return }
      if ($eircdserv.set($3,$5) isnum 400-499) { enotice $1 ChanServ That account is already a co-owner. | return }
      if ($eircdserv.set($3,$5) == 500) { enotice $1 ChanServ That account is already the owner. | return }
      writeini $+(",$scriptdir,settings.ini,") $3 $5 100
      enotice $1 ChanServ The accont $5 has been successfully added as a peon.
    }
    else { enotice $1 ChanServ That user is not in the channel. | return }
  }
  elseif ($4 == adduser) {
    if ($eircdserv.acc($1,$3) < 200) { enotice $1 ChanServ You don't have enough access for that command. | return }
    if ($5 == ChanServ) || ($4 == HelpServ) { enotice $1 ChanServ This command does not work for ChanServ or HelpServ. | return }
    if ($istok($hget(cs. $+ $3,names),$5,32)) {
      if (!$istok($hget(cs. $+ $3,names),$5,32)) { enotice $1 ChanServ That user is not in the channel. | return }
      if (!$eircdserv.set(logged,$eircd.find($5 *,1))) { enotice $1 ChanServ That user must first login. | return }
      if ($eircdserv.set($3,$eircdserv.set(logged,$eircd.find($5 *,1)))) { enotice $1 ChanServ That user already has access to $3 $+ . | return }
      if ($6 !isnum 1-500) { enotice $1 ChanServ That is an invalid access level. | return }
      if ($eircdserv.acc($1,$3) <= $6) { enotice $1 ChanServ You can not add a user with the same, or higher access than yourself. | return }
      writeini $+(",$scriptdir,settings.ini,") $3 $eircdserv.set(logged,$eircd.find($5 *,1)) $6
      enotice $1 ChanServ $5 has been successfully added with $6 access.
    }
    elseif ($ini($+(",$scriptdir,settings.ini,"),accounts,$5)) {
      if ($eircdserv.set($3,$5)) { enotice $1 ChanServ That account already has access to $3 $+ . | return }
      if ($6 !isnum 1-500) { enotice $1 ChanServ That is an invalid access level. | return }
      if ($eircdserv.acc($1,$3) <= $6) { enotice $1 ChanServ You can not add an account with the same, or higher access than yourself. | return }
      writeini $+(",$scriptdir,settings.ini,") $3 $5 $6
      enotice $1 ChanServ The account $5 has been successfully added with $6 access.
    }
    else { enotice $1 ChanServ That user is not in the channel. | return }
  }
  elseif ($4 == clvl) {
    if ($eircdserv.acc($1,$3) < 200) { enotice $1 ChanServ You don't have enough access for that command. | return }
    if ($5 == ChanServ) || ($4 == HelpServ) { enotice $1 ChanServ This command does not work for ChanServ or HelpServ. | return }
    if ($istok($hget(cs. $+ $3,names),$5,32)) {
      if (!$istok($hget(cs. $+ $3,names),$5,32)) { enotice $1 ChanServ That user is not in the channel. | return }
      if (!$eircdserv.set(logged,$eircd.find($5 *,1))) { enotice $1 ChanServ That user must first login. | return }
      if (!$eircdserv.set($3,$eircdserv.set(logged,$eircd.find($5 *,1)))) { enotice $1 ChanServ That user doesn't have access to $3 $+ . | return }
      if ($6 !isnum 1-500) { enotice $1 ChanServ That is an invalid access level. | return }
      if ($eircdserv.acc($1,$3) <= $6) { enotice $1 ChanServ You can not clvl a user to the same, or higher access than yourself. | return }
      if ($eircdserv.acc($1,$3) <= $eircdserv.set($3,$eircdserv.set(logged,$eircd.find($5 *,1)))) { enotice $1 ChanServ You can not clvl a user with the same, or higher access than yourself. | return }
      writeini $+(",$scriptdir,settings.ini,") $3 $eircdserv.set(logged,$eircd.find($5 *,1)) $6
      enotice $1 ChanServ $5 has been successfully clvled to $6 access.
    }
    elseif ($ini($+(",$scriptdir,settings.ini,"),accounts,$5)) {
      if (!$eircdserv.set($3,$5)) { enotice $1 ChanServ That account doesn't have access to $3 $+ . | return }
      if ($6 !isnum 1-500) { enotice $1 ChanServ That is an invalid access level. | return }
      if ($eircdserv.acc($1,$3) <= $6) { enotice $1 ChanServ You can not clvl an account to the same, or higher access than yourself. | return }
      if ($eircdserv.acc($1,$3) <= $eircdserv.set($3,$5)) { enotice $1 ChanServ You can not clvl an account with the same, or higher access than yourself. | return }
      writeini $+(",$scriptdir,settings.ini,") $3 $5 $6
      enotice $1 ChanServ The account $5 has been successfully clvled to $6 access.
    }
    else { enotice $1 ChanServ That user is not in the channel. | return }
  }
  elseif ($4 == deluser) {
    if ($eircdserv.acc($1,$3) < 200) { enotice $1 ChanServ You don't have enough access for that command. | return }
    if ($istok($hget(cs. $+ $3,names),$5,32)) {
      if (!$eircdserv.set(logged,$eircd.find($5 *,1))) { enotice $1 ChanServ That user must first login. | return }
      if (!$eircdserv.set($3,$eircdserv.set(logged,$eircd.find($5 *,1)))) { enotice $1 ChanServ That user doesn't have access to $3 $+ . | return }
      if ($eircdserv.acc($1,$3) <= $eircdserv.set($3,$eircdserv.set(logged,$eircd.find($5 *,1)))) { enotice $1 ChanServ You can not deluser a user that has the same, or higher access tham yourself. | return }
      remini $+(",$scriptdir,settings.ini,") $3 $eircdserv.set(logged,$eircd.find($5 *,1))
      enotice $1 ChanServ $5 has been successfully deleted from the userlist.
    }
    elseif ($ini($+(",$scriptdir,settings.ini,"),accounts,$5)) {
      if (!$eircdserv.set($3,$5)) { enotice $1 ChanServ That account doesn't have access to $3 $+ . | return }
      if ($eircdserv.acc($1,$3) <= $eircdserv.set($3,$5)) { enotice $1 ChanServ You can not deluser an account that has the same, or higher access tham yourself. | return }
      remini $+(",$scriptdir,settings.ini,") $3 $5
      enotice $1 ChanServ The account $5 has been successfully deleted from the userlist.
    }
    else { enotice $1 ChanServ That user is not in the channel. | return }
  }
  elseif ($4 == deleteme) {
    if (!$eircdserv.acc($1,$3)) { enotice $1 ChanServ You don't have access to $3 $+ . | return }
    remini $+(",$scriptdir,settings.ini,") $3 $eircdserv.set(logged,$1)
    enotice $1 ChanServ You have been successfully deleted from the userlist.
  }
  elseif ($4 == giveowner) {
    if ($eircdserv.acc($1,$3) < 500) { enotice $1 ChanServ You don't have enough access for that command. | return }
    if ($istok($hget(cs. $+ $3,names),$5,32)) {
      if (!$eircdserv.set(logged,$eircd.find($5 *,1))) { enotice $1 ChanServ That user must first login. | return }
      if ($eircdserv.set($3,$eircdserv.set(logged,$eircd.find($5 *,1))) == 500) { enotice $1 ChanServ That account is already an owner of the channel. | return }
      writeini $+(",$scriptdir,settings.ini,") $3 $eircdserv.set(logged,$eircd.find($5 *,1)) 500
      writeini $+(",$scriptdir,settings.ini,") $3 $eircdserv.set(logged,$1) 400
      enotice $1 ChanServ $5 is now the channel owner.
    }
    elseif ($ini($+(",$scriptdir,settings.ini,"),accounts,$5)) {
      if ($eircdserv.set($3,$5) == 500) { enotice $1 ChanServ That account is already an owner of the channel. | return }
      writeini $+(",$scriptdir,settings.ini,") $3 $5 500
      writeini $+(",$scriptdir,settings.ini,") $3 $eircdserv.set(logged,$1) 400
      enotice $1 ChanServ The account $5 is now the channel owner.
    }
    else { enotice $1 ChanServ That user is not in the channel. | return }
  }
  elseif ($4 == access) || ($4 == a) {
    if ($5) {
      if (!$istok($hget(cs. $+ $3,names),$5,32)) { enotice $1 ChanServ That user is not in the channel. | return }
      enotice $1 ChanServ $5 $iif($eircdserv.set($3,$eircdserv.set(logged,$eircd.find($5 *,1))),$chr(40) $+ $eircdserv.set(logged,$eircd.find($5 *,1)) $+ $chr(41) has access $eircdserv.set($3,$eircdserv.set(logged,$eircd.find($5 *,1))) in $3 $+ .,$chr(40) $+ $iif($eircdserv.set(logged,$5),$v1,No Account) $+ $chr(41) lacks access to $3 $+ .)
    }
    else { enotice $1 ChanServ $2 $iif($eircdserv.acc($1,$3),$chr(40) $+ $eircdserv.set(logged,$1) $+ $chr(41) has access $eircdserv.acc($1,$3) in $3 $+ .,$chr(40) $+ $iif($eircdserv.set(logged,$1),$v1,No Account) $+ $chr(41) lacks access to $3 $+ .) }
  }
  elseif ($4 == myaccess) {
    enotice $1 ChanServ Showing all channels with user  $+ $eircdserv.set(logged,$1) $+ .
    var %i 1
    while %i <= $ini($+(",$scriptdir,settings.ini,"),0) {
      if (#* !iswm $ini($+(",$scriptdir,settings.ini,"),%i)) { inc %i | continue }
      if ($readini($+(",$scriptdir,settings.ini,"),$ini($+(",$scriptdir,settings.ini,"),%i),$eircdserv.set(logged,$1))) { enotice $1 ChanServ $+($chr(91),$ini($+(",$scriptdir,settings.ini,"),%i) $chr(40),$readini($+(",$scriptdir,settings.ini,"),$ini($+(",$scriptdir,settings.ini,"),%i),$eircdserv.set(logged,$1)),$chr(44),$iif($readini($+(",$scriptdir,settings.ini,"),$ini($+(",$scriptdir,settings.ini,"),%i),$eircdserv.set(logged,$1)) >= 200,o,$iif($readini($+(",$scriptdir,settings.ini,"),$ini($+(",$scriptdir,settings.ini,"),%i),$eircdserv.set(logged,$1)) isnum 100-199,v)),$chr(41),$chr(93)) }
      inc %i
    }
  }
  elseif ($4 == up) { if ($eircdserv.acc($1,$3) >= 200) { sockwrite -n eircdserv.cs MODE $3 +o $2 } | elseif ($eircdserv.acc($1,$3) isnum 100-199) { sockwrite -n eircdserv.cs MODE $3 +v $2 } }
  elseif ($4 == down) { sockwrite -n eircdserv.cs MODE $3 -ov $2 $2 }
  elseif ($4 == resync) {
    var %i 1
    while %i <= $gettok($hget(cs. $+ $3,names),0,32) {
      if ($gettok($hget(cs. $+ $3,names),%i,32) == ChanServ) || ($gettok($hget(cs. $+ $3,names),%i,32) == HelpServ) { inc %i | continue }
      if ($eircdserv.set($3,$eircdserv.set(logged,$eircd.find($gettok($hget(cs. $+ $3,names),%i,32) *,1))) >= 200) { sockwrite -n eircdserv.cs MODE $3 +o $gettok($hget(cs. $+ $3,names),%i,32) }
      elseif ($eircdserv.set($3,$eircdserv.set(logged,$eircd.find($gettok($hget(cs. $+ $3,names),%i,32) *,1))) isnum 100-199) { sockwrite -n eircdserv.cs MODE $3 +v $gettok($hget(cs. $+ $3,names),%i,32) }
      else { sockwrite -n eircdserv.cs MODE $3 -ov $gettok($hget(cs. $+ $3,names),%i,32) $gettok($hget(cs. $+ $3,names),%i,32) }
      inc %i
    }
  }
  elseif ($4 == upall) {
    var %i 1
    while %i <= $ini($+(",$scriptdir,settings.ini,"),0) {
      if (#* !iswm $ini($+(",$scriptdir,settings.ini,"),%i)) { inc %i | continue }
      if ($readini($+(",$scriptdir,settings.ini,"),$ini($+(",$scriptdir,settings.ini,"),%i),$eircdserv.set(logged,$1)) >= 200) { sockwrite -n eircdserv.cs MODE $ini($+(",$scriptdir,settings.ini,"),%i) +o $2 }
      elseif ($readini($+(",$scriptdir,settings.ini,"),$ini($+(",$scriptdir,settings.ini,"),%i),$eircdserv.set(logged,$1)) isnum 100-199) { sockwrite -n eircdserv.cs MODE $ini($+(",$scriptdir,settings.ini,"),%i) +v $2 }
      inc %i
    }
  }
  elseif ($4 == downall) { var %i 1 | while %i <= $ini($+(",$scriptdir,settings.ini,"),0) { if (#* !iswm $ini($+(",$scriptdir,settings.ini,"),%i)) { inc %i | continue } | sockwrite -n eircdserv.cs MODE $ini($+(",$scriptdir,settings.ini,"),%i) -ov $2 $2 | inc %i } }
  elseif ($4 == op) { if ($eircdserv.acc($1,$3) < 200) { enotice $1 ChanServ You don't have enough access for that command. | return } | sockwrite -n eircdserv.cs MODE $3 +o $5 }
  elseif ($4 == voice) { if ($eircdserv.acc($1,$3) < 200) { enotice $1 ChanServ You don't have enough access for that command. | return } | sockwrite -n eircdserv.cs MODE $3 +v $5 }
  elseif ($4 == deop) { if ($eircdserv.acc($1,$3) < 200) { enotice $1 ChanServ You don't have enough access for that command. | return } | sockwrite -n eircdserv.cs MODE $3 -o $5 }
  elseif ($4 == devoice) { if ($eircdserv.acc($1,$3) < 200) { enotice $1 ChanServ You don't have enough access for that command. | return } | sockwrite -n eircdserv.cs MODE $3 -v $5 }
  elseif ($4 == k) {
    if ($eircdserv.acc($1,$3) < 200) { enotice $1 ChanServ You don't have enough access for that command. | return }
    if ($istok(ChanServ HelpServ,$5,32)) { enotice $1 ChanServ You can't use that command on ChanServ or HelpServ | return }
    if (!$istok($hget(cs. $+ $3,names),$5,32)) { enotice $1 ChanServ That user is not in the channel. | return }
    if ($eircdserv.acc($1,$3) <= $calc(0 + $eircdserv.set($3,$eircdserv.set(logged,$eircd.find($5 *,1))))) { enotice $1 ChanServ You can't kick someone with the same, or higher access then yourself. | return }
    sockwrite -n eircdserv.cs KICK $3 $5 : $+ $6-
  }
  elseif ($4 == kb) {
    if ($eircdserv.acc($1,$3) < 200) { enotice $1 ChanServ You don't have enough access for that command. | return }
    if ($istok(ChanServ HelpServ,$5,32)) { enotice $1 ChanServ You can't use that command on ChanServ or HelpServ | return }
    if (!$istok($hget(cs. $+ $3,names),$5,32)) { enotice $1 ChanServ That user is not in the channel. | return }
    if ($eircdserv.acc($1,$3) <= $calc(0 + $eircdserv.set($3,$eircdserv.set(logged,$eircd.find($5 *,1))))) { enotice $1 ChanServ You can't kick someone with the same, or higher access then yourself. | return }
    sockwrite -n eircdserv.cs KICK $3 $5 : $+ 6-
    sockwrite -n eircdserv.cs MODE $3 +b $5
  }
  elseif ($4 == b) {
    if ($eircdserv.acc($1,$3) < 200) { enotice $1 ChanServ You don't have enough access for that command. | return }
    if ($istok(ChanServ HelpServ,$5,32)) { enotice $1 ChanServ You can't use that command on ChanServ or HelpServ | return }
    if (!$istok($hget(cs. $+ $3,names),$5,32)) { enotice $1 ChanServ That user is not in the channel. | return }
    if ($eircdserv.acc($1,$3) <= $calc(0 + $eircdserv.set($3,$eircdserv.set(logged,$eircd.find($5 *,1))))) { enotice $1 ChanServ You can't kick someone with the same, or higher access then yourself. | return }
    sockwrite -n eircdserv.cs MODE $3 +b $5
  }
  elseif ($4 == tb) {
    if ($eircdserv.acc($1,$3) < 200) { enotice $1 ChanServ You don't have enough access for that command. | return }
    if ($istok(ChanServ HelpServ,$5,32)) { enotice $1 ChanServ You can't use that command on ChanServ or HelpServ | return }
    if (!$istok($hget(cs. $+ $3,names),$6,32)) { enotice $1 ChanServ That user is not in the channel. | return }
    if ($eircdserv.acc($1,$3) <= $calc(0 + $eircdserv.set($3,$eircdserv.set(logged,$eircd.find($6 *,1))))) { enotice $1 ChanServ You can't kick someone with the same, or higher access then yourself. | return }
    if ($5 !isnum 1-) { enotice $1 ChanServ Invalid length. | return }
    sockwrite -n eircdserv.cs MODE $3 +b $6
    .timerunban. [ $+ [ $3 ] $+ . $+ [ $6 ] ] 1 $5 sockwrite -n eircdserv.cs MODE $3 -b $6
  }
  elseif ($4 == ub) {
    if ($eircdserv.acc($1,$3) < 200) { enotice $1 ChanServ You don't have enough access for that command. | return }
    sockwrite -n eircdserv.cs MODE $3 -b $5
    .timerunban. [ $+ [ $3 ] $+ . $+ [ $5 ] ] off
  }
  ; CHANNEL
  elseif ($4 == open) {
    if ($eircdserv.acc($1,$3) < 200) { enotice $1 ChanServ You don't have enough access for that command. | return }
    sockwrite -n eircdserv.cs MODE $3 -ilk $right($gettok($hget(channels,$3),2,32),-1)
  }
  elseif ($4 == users) {
    window -l @ [ $+ [ $3 ] ] 1 1 1 1
    var %a 1 | while %a <= $ini($+(",$scriptdir,settings.ini,"),$3,0) { 
      var %b 1 | while %b <= $calc(1 + $line(@ [ $+ [ $3 ] ],0)) {
        if (%a == 1) { aline @ [ $+ [ $3 ] ] ~ $+ $readini($+(",$scriptdir,settings.ini,"),$3,$ini($+(",$scriptdir,settings.ini,"),$3,%a)) $+ $str(~,$calc(10 - $len($readini($+(",$scriptdir,settings.ini,"),$3,$ini($+(",$scriptdir,settings.ini,"),$3,%a))))) $+ $ini($+(",$scriptdir,settings.ini,"),$3,%a) | break }
        if ($gettok($line(@ [ $+ [ $3 ] ],%b),1,126) < $readini($+(",$scriptdir,settings.ini,"),$3,$ini($+(",$scriptdir,settings.ini,"),$3,%a))) { iline @ [ $+ [ $3 ] ] %b ~ $+ $readini($+(",$scriptdir,settings.ini,"),$3,$ini($+(",$scriptdir,settings.ini,"),$3,%a)) $+ $str(~,$calc(10 - $len($readini($+(",$scriptdir,settings.ini,"),$3,$ini($+(",$scriptdir,settings.ini,"),$3,%a))))) $+ $ini($+(",$scriptdir,settings.ini,"),$3,%a) | break }
        if (%b == $line(@ [ $+ [ $3 ] ],0)) { aline @ [ $+ [ $3 ] ] ~ $+ $readini($+(",$scriptdir,settings.ini,"),$3,$ini($+(",$scriptdir,settings.ini,"),$3,%a)) $+ $str(~,$calc(10 - $len($readini($+(",$scriptdir,settings.ini,"),$3,$ini($+(",$scriptdir,settings.ini,"),$3,%a))))) $+ $ini($+(",$scriptdir,settings.ini,"),$3,%a) | break }
        inc %b
      }
      inc %a
    }
    enotice $1 ChanServ $3 users from level 1 to 500
    enotice $1 ChanServ Access $+ $str($chr(160),4) $+ Account
    if ($line(@ [ $+ [ $3 ] ],0) == 0) { enotice $1 ChanServ $chr(160) $+ None }
    var %i 1 | while %i <= $line(@ [ $+ [ $3 ] ],0) { enotice $1 ChanServ $replace($line(@ [ $+ [ $3 ] ],%i),~,$chr(160)) | inc %i }
    window -c @ [ $+ [ $3 ] ]
  }
  elseif ($4 == wlist) {
    window -l @ [ $+ [ $3 ] ] 1 1 1 1
    var %a 1 | while %a <= $ini($+(",$scriptdir,settings.ini,"),$3,0) { 
      if ($readini($+(",$scriptdir,settings.ini,"),$3,$ini($+(",$scriptdir,settings.ini,"),$3,%a)) != 500) { inc %a | continue }
      var %b 1 | while %b <= $calc(1 + $line(@ [ $+ [ $3 ] ],0)) {
        if ($line(@ [ $+ [ $3 ] ],0) == 0) {  aline @ [ $+ [ $3 ] ] ~ $+ $readini($+(",$scriptdir,settings.ini,"),$3,$ini($+(",$scriptdir,settings.ini,"),$3,%a)) $+ $str(~,$calc(10 - $len($readini($+(",$scriptdir,settings.ini,"),$3,$ini($+(",$scriptdir,settings.ini,"),$3,%a))))) $+ $ini($+(",$scriptdir,settings.ini,"),$3,%a) | break }
        if ($gettok($line(@ [ $+ [ $3 ] ],%b),1,126) < $readini($+(",$scriptdir,settings.ini,"),$3,$ini($+(",$scriptdir,settings.ini,"),$3,%a))) { iline @ [ $+ [ $3 ] ] %b ~ $+ $readini($+(",$scriptdir,settings.ini,"),$3,$ini($+(",$scriptdir,settings.ini,"),$3,%a)) $+ $str(~,$calc(10 - $len($readini($+(",$scriptdir,settings.ini,"),$3,$ini($+(",$scriptdir,settings.ini,"),$3,%a))))) $+ $ini($+(",$scriptdir,settings.ini,"),$3,%a) | break }
        if (%b == $line(@ [ $+ [ $3 ] ],0)) { aline @ [ $+ [ $3 ] ] ~ $+ $readini($+(",$scriptdir,settings.ini,"),$3,$ini($+(",$scriptdir,settings.ini,"),$3,%a)) $+ $str(~,$calc(10 - $len($readini($+(",$scriptdir,settings.ini,"),$3,$ini($+(",$scriptdir,settings.ini,"),$3,%a))))) $+ $ini($+(",$scriptdir,settings.ini,"),$3,%a) | break }
        inc %b
      }
      inc %a
    }
    enotice $1 ChanServ $3 users from level 500 to 500
    enotice $1 ChanServ Access $+ $str($chr(160),4) $+ Account
    if ($line(@ [ $+ [ $3 ] ],0) == 0) { enotice $1 ChanServ $chr(160) $+ None }
    var %i 1 | while %i <= $line(@ [ $+ [ $3 ] ],0) { enotice $1 ChanServ $replace($line(@ [ $+ [ $3 ] ],%i),~,$chr(160)) | inc %i }
    window -c @ [ $+ [ $3 ] ]
  }
  elseif ($4 == clist) {
    window -l @ [ $+ [ $3 ] ] 1 1 1 1
    var %a 1 | while %a <= $ini($+(",$scriptdir,settings.ini,"),$3,0) { 
      echo -s $readini($+(",$scriptdir,settings.ini,"),$3,$ini($+(",$scriptdir,settings.ini,"),$3,%a)) $iif($readini($+(",$scriptdir,settings.ini,"),$3,$ini($+(",$scriptdir,settings.ini,"),$3,%a)) !isnum 400-499,stop,go)
      if ($readini($+(",$scriptdir,settings.ini,"),$3,$ini($+(",$scriptdir,settings.ini,"),$3,%a)) !isnum 400-499) { inc %a | continue }
      var %b 1 | while %b <= $calc(1 + $line(@ [ $+ [ $3 ] ],0)) {
        if ($line(@ [ $+ [ $3 ] ],0) == 0) { aline @ [ $+ [ $3 ] ] ~ $+ $readini($+(",$scriptdir,settings.ini,"),$3,$ini($+(",$scriptdir,settings.ini,"),$3,%a)) $+ $str(~,$calc(10 - $len($readini($+(",$scriptdir,settings.ini,"),$3,$ini($+(",$scriptdir,settings.ini,"),$3,%a))))) $+ $ini($+(",$scriptdir,settings.ini,"),$3,%a) | break }
        if ($gettok($line(@ [ $+ [ $3 ] ],%b),1,126) < $readini($+(",$scriptdir,settings.ini,"),$3,$ini($+(",$scriptdir,settings.ini,"),$3,%a))) { iline @ [ $+ [ $3 ] ] %b ~ $+ $readini($+(",$scriptdir,settings.ini,"),$3,$ini($+(",$scriptdir,settings.ini,"),$3,%a)) $+ $str(~,$calc(10 - $len($readini($+(",$scriptdir,settings.ini,"),$3,$ini($+(",$scriptdir,settings.ini,"),$3,%a))))) $+ $ini($+(",$scriptdir,settings.ini,"),$3,%a) | break }
        if (%b == $line(@ [ $+ [ $3 ] ],0)) { aline @ [ $+ [ $3 ] ] ~ $+ $readini($+(",$scriptdir,settings.ini,"),$3,$ini($+(",$scriptdir,settings.ini,"),$3,%a)) $+ $str(~,$calc(10 - $len($readini($+(",$scriptdir,settings.ini,"),$3,$ini($+(",$scriptdir,settings.ini,"),$3,%a))))) $+ $ini($+(",$scriptdir,settings.ini,"),$3,%a) | break }
        inc %b
      }
      inc %a
    }
    enotice $1 ChanServ $3 users from level 400 to 499
    enotice $1 ChanServ Access $+ $str($chr(160),4) $+ Account
    if ($line(@ [ $+ [ $3 ] ],0) == 0) { enotice $1 ChanServ $chr(160) $+ None }
    var %i 1 | while %i <= $line(@ [ $+ [ $3 ] ],0) { enotice $1 ChanServ $replace($line(@ [ $+ [ $3 ] ],%i),~,$chr(160)) | inc %i }
    window -c @ [ $+ [ $3 ] ]
  }
  elseif ($4 == mlist) {
    window -l @ [ $+ [ $3 ] ] 1 1 1 1
    var %a 1 | while %a <= $ini($+(",$scriptdir,settings.ini,"),$3,0) { 
      if ($readini($+(",$scriptdir,settings.ini,"),$3,$ini($+(",$scriptdir,settings.ini,"),$3,%a)) !isnum 300-399) { inc %a | continue }
      var %b 1 | while %b <= $calc(1 + $line(@ [ $+ [ $3 ] ],0)) {
        if ($line(@ [ $+ [ $3 ] ],0) == 0) { aline @ [ $+ [ $3 ] ] ~ $+ $readini($+(",$scriptdir,settings.ini,"),$3,$ini($+(",$scriptdir,settings.ini,"),$3,%a)) $+ $str(~,$calc(10 - $len($readini($+(",$scriptdir,settings.ini,"),$3,$ini($+(",$scriptdir,settings.ini,"),$3,%a))))) $+ $ini($+(",$scriptdir,settings.ini,"),$3,%a) | break }
        if ($gettok($line(@ [ $+ [ $3 ] ],%b),1,126) < $readini($+(",$scriptdir,settings.ini,"),$3,$ini($+(",$scriptdir,settings.ini,"),$3,%a))) { iline @ [ $+ [ $3 ] ] %b ~ $+ $readini($+(",$scriptdir,settings.ini,"),$3,$ini($+(",$scriptdir,settings.ini,"),$3,%a)) $+ $str(~,$calc(10 - $len($readini($+(",$scriptdir,settings.ini,"),$3,$ini($+(",$scriptdir,settings.ini,"),$3,%a))))) $+ $ini($+(",$scriptdir,settings.ini,"),$3,%a) | break }
        if (%b == $line(@ [ $+ [ $3 ] ],0)) { aline @ [ $+ [ $3 ] ] ~ $+ $readini($+(",$scriptdir,settings.ini,"),$3,$ini($+(",$scriptdir,settings.ini,"),$3,%a)) $+ $str(~,$calc(10 - $len($readini($+(",$scriptdir,settings.ini,"),$3,$ini($+(",$scriptdir,settings.ini,"),$3,%a))))) $+ $ini($+(",$scriptdir,settings.ini,"),$3,%a) | break }
        inc %b
      }
      inc %a
    }
    enotice $1 ChanServ $3 users from level 300 to 399
    enotice $1 ChanServ Access $+ $str($chr(160),4) $+ Account
    if ($line(@ [ $+ [ $3 ] ],0) == 0) { enotice $1 ChanServ $chr(160) $+ None }
    var %i 1 | while %i <= $line(@ [ $+ [ $3 ] ],0) { enotice $1 ChanServ $replace($line(@ [ $+ [ $3 ] ],%i),~,$chr(160)) | inc %i }
    window -c @ [ $+ [ $3 ] ]
  }
  elseif ($4 == olist) {
    window -l @ [ $+ [ $3 ] ] 1 1 1 1
    var %a 1 | while %a <= $ini($+(",$scriptdir,settings.ini,"),$3,0) { 
      if ($readini($+(",$scriptdir,settings.ini,"),$3,$ini($+(",$scriptdir,settings.ini,"),$3,%a)) !isnum 200-299) { inc %a | continue }
      var %b 1 | while %b <= $calc(1 + $line(@ [ $+ [ $3 ] ],0)) {
        if ($line(@ [ $+ [ $3 ] ],0) == 0) { aline @ [ $+ [ $3 ] ] ~ $+ $readini($+(",$scriptdir,settings.ini,"),$3,$ini($+(",$scriptdir,settings.ini,"),$3,%a)) $+ $str(~,$calc(10 - $len($readini($+(",$scriptdir,settings.ini,"),$3,$ini($+(",$scriptdir,settings.ini,"),$3,%a))))) $+ $ini($+(",$scriptdir,settings.ini,"),$3,%a) | break }
        if ($gettok($line(@ [ $+ [ $3 ] ],%b),1,126) < $readini($+(",$scriptdir,settings.ini,"),$3,$ini($+(",$scriptdir,settings.ini,"),$3,%a))) { iline @ [ $+ [ $3 ] ] %b ~ $+ $readini($+(",$scriptdir,settings.ini,"),$3,$ini($+(",$scriptdir,settings.ini,"),$3,%a)) $+ $str(~,$calc(10 - $len($readini($+(",$scriptdir,settings.ini,"),$3,$ini($+(",$scriptdir,settings.ini,"),$3,%a))))) $+ $ini($+(",$scriptdir,settings.ini,"),$3,%a) | break }
        if (%b == $line(@ [ $+ [ $3 ] ],0)) { aline @ [ $+ [ $3 ] ] ~ $+ $readini($+(",$scriptdir,settings.ini,"),$3,$ini($+(",$scriptdir,settings.ini,"),$3,%a)) $+ $str(~,$calc(10 - $len($readini($+(",$scriptdir,settings.ini,"),$3,$ini($+(",$scriptdir,settings.ini,"),$3,%a))))) $+ $ini($+(",$scriptdir,settings.ini,"),$3,%a) | break }
        inc %b
      }
      inc %a
    }
    enotice $1 ChanServ $3 users from level 200 to 299
    enotice $1 ChanServ Access $+ $str($chr(160),4) $+ Account
    if ($line(@ [ $+ [ $3 ] ],0) == 0) { enotice $1 ChanServ $chr(160) $+ None }
    var %i 1 | while %i <= $line(@ [ $+ [ $3 ] ],0) { enotice $1 ChanServ $replace($line(@ [ $+ [ $3 ] ],%i),~,$chr(160)) | inc %i }
    window -c @ [ $+ [ $3 ] ]
  }
  elseif ($4 == plist) {
    window -l @ [ $+ [ $3 ] ] 1 1 1 1
    var %a 1 | while %a <= $ini($+(",$scriptdir,settings.ini,"),$3,0) { 
      if ($readini($+(",$scriptdir,settings.ini,"),$3,$ini($+(",$scriptdir,settings.ini,"),$3,%a)) !isnum 100-199) { inc %a | continue }
      var %b 1 | while %b <= $calc(1 + $line(@ [ $+ [ $3 ] ],0)) {
        if ($line(@ [ $+ [ $3 ] ],0) == 0) { aline @ [ $+ [ $3 ] ] ~ $+ $readini($+(",$scriptdir,settings.ini,"),$3,$ini($+(",$scriptdir,settings.ini,"),$3,%a)) $+ $str(~,$calc(10 - $len($readini($+(",$scriptdir,settings.ini,"),$3,$ini($+(",$scriptdir,settings.ini,"),$3,%a))))) $+ $ini($+(",$scriptdir,settings.ini,"),$3,%a) | break }
        if ($gettok($line(@ [ $+ [ $3 ] ],%b),1,126) < $readini($+(",$scriptdir,settings.ini,"),$3,$ini($+(",$scriptdir,settings.ini,"),$3,%a))) { iline @ [ $+ [ $3 ] ] %b ~ $+ $readini($+(",$scriptdir,settings.ini,"),$3,$ini($+(",$scriptdir,settings.ini,"),$3,%a)) $+ $str(~,$calc(10 - $len($readini($+(",$scriptdir,settings.ini,"),$3,$ini($+(",$scriptdir,settings.ini,"),$3,%a))))) $+ $ini($+(",$scriptdir,settings.ini,"),$3,%a) | break }
        if (%b == $line(@ [ $+ [ $3 ] ],0)) { aline @ [ $+ [ $3 ] ] ~ $+ $readini($+(",$scriptdir,settings.ini,"),$3,$ini($+(",$scriptdir,settings.ini,"),$3,%a)) $+ $str(~,$calc(10 - $len($readini($+(",$scriptdir,settings.ini,"),$3,$ini($+(",$scriptdir,settings.ini,"),$3,%a))))) $+ $ini($+(",$scriptdir,settings.ini,"),$3,%a) | break }
        inc %b
      }
      inc %a
    }
    enotice $1 ChanServ $3 users from level 100 to 199
    enotice $1 ChanServ Access $+ $str($chr(160),4) $+ Account
    if ($line(@ [ $+ [ $3 ] ],0) == 0) { enotice $1 ChanServ $chr(160) $+ None }
    var %i 1 | while %i <= $line(@ [ $+ [ $3 ] ],0) { enotice $1 ChanServ $replace($line(@ [ $+ [ $3 ] ],%i),~,$chr(160)) | inc %i }
    window -c @ [ $+ [ $3 ] ]
  }
  elseif ($4 == topic) {
    if ($eircdserv.acc($1,$3) < 200) { enotice $1 ChanServ You don't have enough access for that command. | return }
    if ($hget(cs. $+ $3,topicmask)) {
      if ($5) && (!$hget(cs. $+ $3,$5)) { enotice $1 ChanServ You must supply a valid mask name. | return }
      elseif ($5) && ($hget(cs. $+ $3,$5)) { hadd cs. [ $+ [ $3 ] ] $5 $iif($6,$6-,$iif($hget(cs. $+ $3,deftopic),$hget(cs. $+ $3,deftopic),$eircdserv.set(other,tmstart) $+ $5 $+ $eircdserv.set(other,tmend))) }
      var %i 1, %topic $hget(cs. $+ $3,topicmask) | while %i <= $hget(cs. $+ $3,0).item { if (!$istok(names topic topicmask deftopic modelock,$hget(cs. $+ $3,%i).item,32)) { %topic = $replace(%topic,$eircdserv.set(other,tmstart) $+ $hget(cs. $+ $3,%i).item $+ $eircdserv.set(other,tmend),$hget(cs. $+ $3,%i).data) } | inc %i }
    }
    else { var %topic $5- }
    sockwrite -n eircdserv.cs TOPIC $3 : $+ %topic
    hadd cs. [ $+ [ $3 ] ] topic %topic
  }
  elseif ($4 == topicmask) {
    if ($eircdserv.acc($1,$3) < 200) { enotice $1 ChanServ You don't have enough access for that command. | return }
    if (!$5) && (!$hget(cs. $+ $3,topicmask)) { enotice $1 ChanServ You must supply a topic mask. | return }
    elseif (!$5) && ($hget(cs. $+ $3,topicmask)) { var %i 1 | while %i <= $hget(cs. $+ $3,0).item { if (!$istok(names topic,$hget(cs. $+ $3,%i).item,32)) { hdel cs. [ $+ [ $3 ] ] $hget(cs. $+ $3,%i).item | continue } | inc %i } }
    hadd cs. [ $+ [ $3 ] ] topicmask $5-
    var %i 1 | while %i <= $hget(cs. $+ $3,0).item { if (!$istok(names topic topicmask deftopic,$hget(cs. $+ $3,%i).item,32)) { hdel cs. [ $+ [ $3 ] ] $hget(cs. $+ $3,%i).item } | inc %i }
    var %i 5 | while %i <= $0 { if ($eircdserv.set(other,tmstart) $+ * $+ $eircdserv.set(other,tmend) iswm $ [ $+ [ %i ] ]) { hadd cs. [ $+ [ $3 ] ] $remove($ [ $+ [ %i ] ],$eircdserv.set(other,tmstart),$eircdserv.set(other,tmend)) $iif($hget(cs. $+ $3,deftopic),$hget(cs. $+ $3,deftopic),$ [ $+ [ %i ] ]) } | inc %i }
    var %i 1, %topic $hget(cs. $+ $3,topicmask) | while %i <= $hget(cs. $+ $3,0).item { if (!$istok(names topic topicmask deftopic modelock,$hget(cs. $+ $3,%i).item,32)) { %topic = $replace(%topic,$eircdserv.set(other,tmstart) $+ $hget(cs. $+ $3,%i).item $+ $eircdserv.set(other,tmend),$hget(cs. $+ $3,%i).data) } | inc %i }
    sockwrite -n eircdserv.cs TOPIC $3 : $+ %topic
    hadd cs. [ $+ [ $3 ] ] topic %topic
  }
  elseif ($4 == deftopic) {
    if ($eircdserv.acc($1,$3) < 200) { enotice $1 ChanServ You don't have enough access for that command. | return }
    if (!$hget(cs. $+ $3,topicmask)) { enotice $1 ChanServ There is no topic mask. | return }
    hadd cs. [ $+ [ $3 ] ] deftopic $5-
    var %i 1 | while %i <= $hget(cs. $+ $3,0).item { if (!$istok(names topic topicmask deftopic modelock,$hget(cs. $+ $3,%i).item,32)) && ($remove($hget(cs. $+ $3,%i).data,$eircdserv.set(other,tmstart),$eircdserv.set(other,tmend)) == $hget(cs. $+ $3,%i).item) { hadd cs. [ $+ [ $3 ] ] $v2 $5- } | inc %i }
    var %i 1, %topic $hget(cs. $+ $3,topicmask) | while %i <= $hget(cs. $+ $3,0).item { if (!$istok(names topic topicmask deftopic modelock,$hget(cs. $+ $3,%i).item,32)) { %topic = $replace(%topic,$eircdserv.set(other,tmstart) $+ $hget(cs. $+ $3,%i).item $+ $eircdserv.set(other,tmend),$hget(cs. $+ $3,%i).data) } | inc %i }
    sockwrite -n eircdserv.cs TOPIC $3 : $+ %topic
    hadd cs. [ $+ [ $3 ] ] topic %topic
  }
  elseif ($4 == mask) { enotice $1 ChanServ $iif($hget(cs. $+ $3,topicmask),Mask: $hget(cs. $+ $3,topicmask),There is no mask for $3 $+ .) }
  elseif ($4 == mode) {
    if ($eircdserv.acc($1,$3) < 200) { enotice $1 ChanServ You don't have enough access for that command. | return }
    if (!$5) { enotice $1 ChanServ You must supply a mode. | return }
    sockwrite -n eircdserv.cs MODE $3 $5-
  }
  elseif ($4 == modelock) {
    if ($eircdserv.acc($1,$3) < 400) { enotice $1 ChanServ You don't have enough access for that command. | return }
    if (!$5) && ($hget(cs. $+ $3,modelock)) { enotice $1 ChanServ Modelock unset. | hdel cs. [ $+ [ $3 ] ] modelock | return }
    var %a 1,%t $5,%m+ +,%m- -,%+- $left($5,1)
    while %a <= $len(%t) { if ($istok(+ -,$mid(%t,%a,1),32)) %+- = $mid(%t,%a,1) | elseif ($istokcs(t m s i k l O x N n H h U u R r C c A S o v b,$mid(%t,%a,1),32)) { %m [ $+ [ %+- ] ] = %m [ $+ [ %+- ] ] $+ $mid(%t,%a,1) | %t = $remove(%t,$mid(%t,%a,1)) | dec %a } | inc %a }
    sockwrite -n eircdserv.cs MODE $3 %m+ $+ %m-
    hadd cs. [ $+ [ $3 ] ] modelock %m+ %m-
    enotice $1 ChanServ Modelock set to: %m+ $+ %m-
  }
  elseif ($4 == inviteme) {
    if (#* iswm $5) && ($ini($+(",$scriptdir,settings.ini,"),$5)) { if ($eircdserv.set($5,$eircdserv.set(logged,$1)) < 1) { enotice $1 ChanServ You don't have enough access for that command. | return } | elseif ($istok($hget(cs. $+ $5,names),$2,32)) { enotice $1 ChanServ You are already in that channel. | return } | sockwrite -n eircdserv.cs INVITE $2 $5 }
    elseif (#* iswm $3) && ($ini($+(",$scriptdir,settings.ini,"),$3)) { if ($eircdserv.acc($1,$3) < 1) { enotice $1 ChanServ You don't have enough access for that command. | return } | elseif ($istok($hget(cs. $+ $5,names),$2,32)) { enotice $1 ChanServ You are already in that channel. | return } | sockwrite -n eircdserv.cs INVITE $2 $3 }
    else { enotice $1 ChanServ That is an invalid channel. }
  }
  ; OPER
  elseif ($4 == say) {
    if (!$eircd.ircop($1)) { enotice $1 ChanServ You must be an Oper to use that command. | return }
    if (#* !iswm $3) && (#* !iswm $5) { enotice $1 ChanServ Invalid channel. | return }
    elseif (#* iswm $3) && (#* !iswm $5) { emsg $3 ChanServ $5- }
    else { emsg $5 ChanServ $6- }
  }
  elseif ($4 == emote) {
    if (!$eircd.ircop($1)) { enotice $1 ChanServ You must be an Oper to use that command. | return }
    if (#* !iswm $3) && (#* !iswm $5) { enotice $1 ChanServ Invalid channel. | return }
    elseif (#* iswm $3) && (#* !iswm $5) { emsg $3 ChanServ ACTION $5- $+  }
    else { emsg $5 ChanServ ACTION $6- $+  }
  }
  elseif ($4 == move) {
    if (!$eircd.ircop($1)) { enotice $1 ChanServ You must be an Oper to use that command. | return }
    if (!$ini($+(",$scriptdir,settings.ini,"),$5)) { enotice $1 ChanServ The channel is not registered. | return }
    if (#* !iswm $6) { enotice $1 ChanServ The channel to move to is invalid. | return }
    if ($ini($+(",$scriptdir,settings.ini,"),$6)) { enotice $1 ChanServ The channel you are trying to move to is already registered. | return }
    var %i 1 | while %i <= $ini($+(",$scriptdir,settings.ini,"),$5,0) { writeini $+(",$scriptdir,settings.ini,") $6 $ini($+(",$scriptdir,settings.ini,"),$5,%i) $readini($+(",$scriptdir,settings.ini,"),$5,$ini($+(",$scriptdir,settings.ini,"),$5,%i)) | inc %i }
    remini $+(",$scriptdir,settings.ini,") $5
    var %i 1 | while %i <= $hget(cs. $+ $5,0).item { hadd -m cs. [ $+ [ $6 ] ] $hget(cs. $+ $5,%i).item $hget(cs. $+ $5,%i).data | inc %i }
    hfree cs. [ $+ [ $5 ] ]
    sockwrite -n eircdserv.cs PART $5 :Moved to $6 by $2 requested by $iif($7,$7,unknown) $+ .
    sockwrite -n eircdserv.cs JOIN $6
    sockwrite -n eircdserv.cs MODE $6
    sockwrite -n eircdserv.cs MODE $6 +o ChanServ
  }
  elseif ($4 == opchan) {
    if (!$eircd.ircop($1)) { enotice $1 ChanServ You must be an Oper to use that command. | return }
    if (#* !iswm $3) && (#* !iswm $5) { enotice $1 ChanServ Invalid channel. | return }
    elseif (#* iswm $3) && (!$ini($+(",$scriptdir,settings.ini,"),$3)) && (#* !iswm $5) { enotice $1 ChanServ Invalid channel. | return }
    elseif (#* iswm $3) && ($ini($+(",$scriptdir,settings.ini,"),$3)) && (#* !iswm $5) { sockwrite -n eircdserv.cs MODE $3 +o ChanServ }
    elseif (#* !iswm $3) && (#* iswm $5) && (!$ini($+(",$scriptdir,settings.ini,"),$5)) { enotice $1 ChanServ Invalid channel. | return }
    elseif (#* !iswm $3) && (#* iswm $5) && ($ini($+(",$scriptdir,settings.ini,"),$5)) { sockwrite -n eircdserv.cs MODE $5 +o ChanServ }
    else { sockwrite -n eircdserv.cs MODE $5 +o ChanServ }
  }
  elseif ($4 == reg) {
    if (!$eircd.ircop($1)) { enotice $1 ChanServ You must be an Oper to use that command. | return }
    if (#* !iswm $5) { enotice $1 ChanServ Invalid channel. | return }
    if ($ini($+(",$scriptdir,settings.ini,"),$5)) { enotice $1 ChanServ That channel is already registered. | return }
    if (!$6) { enotice $1 ChanServ You must supply the person to register the channel to. | return }
    if (!$eircdserv.set(logged,$eircd.find($6 *,1))) { enotice $1 ChanServ $6 must login first. | return }
    if ($eircdserv.set(disallow,$5)) { enotice $1 ChanServ $6 is in the disallow list. | return }
    writeini $+(",$scriptdir,settings.ini,") $5 $eircdserv.set(logged,$eircd.find($6 *,1)) 500
    sockwrite -n eircdserv.cs JOIN $5
    sockwrite -n eircdserv.cs MODE $5
    sockwrite -n eircdserv.cs MODE $5 +o ChanServ
    enotice $1 ChanServ $5 successfully registered to $6 $+ .
  }
  elseif ($4 == unreg) {
    if (!$eircd.ircop($1)) { enotice $1 ChanServ You must be an Oper to use that command. | return }
    if (#* !iswm $5) || ($5 == $eircdserv.set(other,mainchan)) { enotice $1 ChanServ Invalid channel. | return }
    if (!$ini($+(",$scriptdir,settings.ini,"),$5)) { enotice $1 ChanServ That channel isn't registered. | return }
    remini $+(",$scriptdir,settings.ini,") $5
    hfree cs. [ $+ [ $5 ] ]
    sockwrite -n eircdserv.cs PART $5 :Unregistered by $2 $+ , requested by $iif($6,$6,unknown) $+ .
    enotice $1 ChanServ $5 successfully unregistered.
  }
  elseif ($4 == disallow) {
    if (!$eircd.ircop($1)) { enotice $1 ChanServ You must be an Oper to use that command. | return }
    if (#* !iswm $5) { enotice $1 ChanServ Invalid channel. | return }
    if ($eircdserv.set(disallow,$5)) { enotice $1 ChanServ $5 is already in the disallow list. | return }
    writeini $+(",$scriptdir,settings.ini,") disallow $5 .
    enotice $1 ChanServ $5 has been added to the disallow list.
  }
  elseif ($4 == allow) {
    if (!$eircd.ircop($1)) { enotice $1 ChanServ You must be an Oper to use that command. | return }
    if (#* !iswm $5) { enotice $1 ChanServ Invalid channel. | return }
    if (!$eircdserv.set(disallow,$5)) { enotice $1 ChanServ $5 is not on the disallow list. | return }
    remini $+(",$scriptdir,settings.ini,") disallow $5
    enotice $1 ChanServ $5 has been removed from the disallow list.
  }
  elseif ($4 == search) {
    if (!$eircd.ircop($1)) { enotice $1 ChanServ You must be an Oper to use that command. | return }
    if (!$5) { enotice $1 ChanServ Invalid search. | return }
    var %i 1, %results
    while %i <= $hget(0) {
      if (cs. [ $+ [ $5 ] ] iswm $hget(%i)) { %results = %results $right($hget(%i),-3) }
      inc %i
    }
    enotice $1 ChanServ Search results for $5 $+ : $iif(%results,%results,None)
  }
  elseif ($4 == addowner) {
    if (!$eircd.ircop($1)) { enotice $1 ChanServ You must be an Oper to use that command. | return }
    if (#* !iswm $5) { enotice $1 ChanServ Invalid channel. | return }
    if (!$ini($+(",$scriptdir,settings.ini,"),$5)) { enotice $1 ChanServ That channel isn't registered. | return }
    if ($istok($hget(cs. $+ $5,names),$6,32)) {
      if (!$eircdserv.set(logged,$eircd.find($6 *,1))) { enotice $1 ChanServ That user must first login. | return }
      if ($eircdserv.set($5,$eircdserv.set(logged,$eircd.find($6 *,1))) == 500) { enotice $1 ChanServ That user is already an owner of the channel. | return }
      writeini $+(",$scriptdir,settings.ini,") $5 $eircdserv.set(logged,$eircd.find($6 *,1)) 500
      enotice $1 ChanServ $6 has been successfully added as an owner.
    }
    elseif ($ini($+(",$scriptdir,settings.ini,"),accounts,$6)) {
      if ($eircdserv.set($5,$6) == 500) { enotice $1 ChanServ That user is already an owner of the channel. | return }
      writeini $+(",$scriptdir,settings.ini,") $5 $6 500
      enotice $1 ChanServ The accont $6 has been successfully added as an owner.
    }
    else { enotice $1 ChanServ That user is not in the channel. | return }
  }
  elseif ($4 == delowner) {
    if (!$eircd.ircop($1)) { enotice $1 ChanServ You must be an Oper to use that command. | return }
    if (#* !iswm $5) { enotice $1 ChanServ Invalid channel. | return }
    if (!$ini($+(",$scriptdir,settings.ini,"),$5)) { enotice $1 ChanServ That channel isn't registered. | return }
    if ($istok($hget(cs. $+ $5,names),$6,32)) {
      if (!$eircdserv.set(logged,$eircd.find($6 *,1))) { enotice $1 ChanServ That user must first login. | return }
      if (!$eircdserv.set($5,$eircdserv.set(logged,$eircd.find($6 *,1)))) { enotice $1 ChanServ That user doesn't have access to $5 $+ . | return }
      if ($eircdserv.set($5,$eircdserv.set(logged,$eircd.find($6 *,1))) != 500) { enotice $1 ChanServ That user isn't an owner. | return }
      remini $+(",$scriptdir,settings.ini,") $5 $eircdserv.set(logged,$eircd.find($6 *,1))
      enotice $1 ChanServ $6 has been successfully deleted from the userlist.
    }
    elseif ($ini($+(",$scriptdir,settings.ini,"),accounts,$6)) {
      if (!$eircdserv.set($5,$6)) { enotice $1 ChanServ That account doesn't have access to $5 $+ . | return }
      if ($eircdserv.set($5,$6) != 500) { enotice $1 ChanServ That account isn't an owner. | return }
      remini $+(",$scriptdir,settings.ini,") $5 $6
      enotice $1 ChanServ The account $6 has been successfully deleted from the userlist.
    }
    else { enotice $1 ChanServ That user is not in the channel. | return }
  }
  ;Other
  elseif ($4 == ping) { if (#* iswm $3) { emsg $3 ChanServ  $+ $2 $+ : Pong! } | else { enotice $1 ChanServ Pong! } }
  elseif ($4 == roll) {
    if (!$5) { enotice $1 ChanServ Insufficient parameters. | return }
    if (*d* iswm $5) { var %dice $iif($gettok($5,1,100) > 1000,1000,$gettok($5,1,100)) | if (*+* iswm $gettok($5,2,100)) { var %sides $gettok($gettok($5,2,100),1,43) | var %add $gettok($gettok($5,2,100),2,43) } | else { var %sides $gettok($5,2,100) | var %add 0 } }
    else { if (*+* iswm $5) { var %dice 1 | var %sides $gettok($5,1,43) | var %add $gettok($5,2,43) } | elseif ($5 isnum) { var %dice 1 | var %sides $5 | var %add 0 } | else { if (#* iswm $3) { emsg $3 ChanServ Invalid roll. | return } | else { enotice $1 ChanServ Invalid roll. | return } } }
    var %i 1, %total 0 | while %i <= %dice { %total = $calc(%total + $r(1,%sides) + %add) | inc %i }
    if (#* iswm $3) { emsg $3 ChanServ The total value is %total $+ . } | else { enotice $1 ChanServ The total valie is %total $+ . }
  }
  elseif ($4 == netinfo) {
    enotice $1 ChanServ Network Information:
    enotice $1 ChanServ Total Users: $str($chr(160),7) $calc($hget(users,0).item + $hget(ircops,0).item)
    enotice $1 ChanServ IRC Operators: $str($chr(160),5) $hget(ircops,0).item
    enotice $1 ChanServ Total Channels: $str($chr(160),4) $hget(channels,0).item
    var %i 1, %regged 0 | while %i <= $ini($+(",$scriptdir,settings.ini,"),0) { if (#* iswm $ini($+(",$scriptdir,settings.ini,"),%i)) { inc %regged } | inc %i }
    enotice $1 ChanServ Registered Channels: %regged
    var %i 1, %bans 0 | while %i <= $hget(bans,0).item { inc %bans $gettok($hget(bans,%i).item,0,32) | inc %i }
    enotice $1 ChanServ Total Ban Count: $str($chr(160),3) %bans
    enotice $1 ChanServ Total User Count: $str($chr(160),2) $hget(eircd,users)
    enotice $1 ChanServ Services Uptime: $str($chr(160),3) $duration($calc($ctime - $eircdserv.set(other,started)))
  }
  elseif ($4 == info) {
    if (!$ini($+(",$scriptdir,settings.ini,"),$3)) { enotice $1 ChanServ That channel is not registered. | return }
    enotice $1 ChanServ  $+ $3 information:
    enotice $1 ChanServ Modelock: $str($chr(160),4) $iif($hget(cs. $+ $3,modelock),$hget(cs. $+ $3,modelock),None)
    enotice $1 ChanServ Default Topic: $iif($hget(cs. $+ $3,deftopic),$hget(cs. $+ $3,deftopic),None)
    enotice $1 ChanServ Topic Mask: $str($chr(160),2) $iif($hget(cs. $+ $3,topicmask),$hget(cs. $+ $3,topicmask),None)
    var %i 1, %names | while %i <= $hget(cs. $+ $3,0).item { if (!$istok(names topic topicmask deftopic,$hget(cs. $+ $3,%i).item,32)) { %names = %names $+ $iif(%names,$chr(44)) $remove($hget(cs. $+ $3,%i).item,$eircdserv.set(other,tmstart),$eircdserv.set(other,tmend)) } | inc %i }
    enotice $1 ChanServ Mask Names: $str($chr(160),2) $iif(%names,%names,None)
    var %i 1, %owner, %coowners 0, %masters 0, %ops 0, %peons 0, %users 0 | while %i <= $ini($+(",$scriptdir,settings.ini,"),$3,0) { if ($eircdserv.set($3,$ini($+(",$scriptdir,settings.ini,"),$3,%i)) == 500) { %owner = %owner $+ $iif(%owner,$chr(44)) $ini($+(",$scriptdir,settings.ini,"),$3,%i) } | elseif ($eircdserv.set($3,$ini($+(",$scriptdir,settings.ini,"),$3,%i)) isnum 400-499) { inc %coowners } | elseif ($eircdserv.set($3,$ini($+(",$scriptdir,settings.ini,"),$3,%i)) isnum 300-399) { inc %masters } | elseif ($eircdserv.set($3,$ini($+(",$scriptdir,settings.ini,"),$3,%i)) isnum 200-299) { inc %ops } | elseif ($eircdserv.set($3,$ini($+(",$scriptdir,settings.ini,"),$3,%i)) isnum 100-199) { inc %peons } | inc %users | inc %i }
    enotice $1 ChanServ Owners: $str($chr(160),6) $iif(%owner,%owner,None)
    enotice $1 ChanServ Co-Owners: $str($chr(160),3) %coowners
    enotice $1 ChanServ Masters: $str($chr(160),5) %masters
    enotice $1 ChanServ Ops: $str($chr(160),9) %ops
    enotice $1 ChanServ Peons: $str($chr(160),7) %peons
    enotice $1 ChanServ Users: $str($chr(160),7) %users
  }
  else { enotice $1 ChanServ That is an invalid command. }
}
alias eircdserv.hs {
  eircdserv.info own $1-2 HelpServ / $+ $lower($3) $4-
  if ($3 == hnext) {
    if (!$hget(hs.helpers,$2)) { enotice $1 HelpServ You are not a helper. | return }
    if ($hget(hs.helpers,$2) != .) { enotice $1 HelpServ You are already helping $hget(hs.helpers,$2) $+ . | return }
    if (!$hget(hs.help,$hget(hs.help,0).item).item) { enotice $1 HelpServ There is noone to be helped. | return }
    hadd hs.helpers $2 $hget(hs.help,$hget(hs.help,0).item).item
    sockwrite -n eircdserv.hs MODE $eircdserv.set(other,mainchan) +v $hget(hs.help,$hget(hs.help,0).item).item
    emsg $eircd.find($hget(hs.help,$hget(hs.help,0).item).item *,1) HelpServ You have been assigned $2 as your helper.
    enotice $1 HelpServ $hget(hs.help,$hget(hs.help,0).item).item specified the description: $hget(hs.help,$hget(hs.help,0).item).data
    hdel hs.help $hget(hs.help,$hget(hs.help,0).item).item
  }
  elseif ($3 == hdone) {
    if (!$hget(hs.helpers,$2)) { enotice $1 HelpServ You are not a helper. | return }
    if ($hget(hs.helpers,$2) == .) { enotice $1 HelpServ You arn't helping anyone. | return }
    sockwrite -n eircdserv.hs MODE $eircdserv.set(other,mainchan) -v $hget(hs.helpers,$2)
    emsg $eircd.find($hget(hs.helpers,$2) *,1) HelpServ $2 has finished helping you. Please /part $eircdserv.set(other,mainchan) within $eircdserv.set(other,hskick) seconds to avoid being kicked.
    .timerhs. [ $+ [ $hget(hs.helpers,$2) ] ] 1 $eircdserv.set(other,hskick) sockwrite -n eircdserv.hs KICK $eircdserv.set(other,mainchan) $hget(hs.helpers,$2) Did not /part $eircdserv.set(other,mainchan) within $eircdserv.set(other,hskick) seconds.
    hadd hs.helpers $2 .
  }
  elseif ($3 == hdesc) {
    if ($hget(hs.helpers,$2)) { enotice $1 HelpServ Helpers can not use that command. | return }
    if (!$hget(hs.help,$2)) { enotice $1 HelpServ You are not in the queue to be helped. | return }
    hadd hs.help $2 $4-
    emsg $1 HelpServ Your description has been saved.
  }
}
alias eircdserv.cs.account { if ($eircdserv.set(logged,$2)) { eraw $1 330 $3 $eircdserv.set(logged,$2) :is logged in as } }