All pastes #638235 Raw Edit

Stuff

public text v1 · immutable
#638235 ·published 2007-07-29 17:30 UTC
rendered paste body
on *:input:@:{
  var %window $+(@,$hget(config,nickname))
  if ($target == %window) && $left($1,1) != / { 
    if $sock($+(PugBot_,$hget(config,nickname))).status == Active { 
      sockwrite -n $+(PugBot_,$hget(config,nickname)) $1-
      aline -p %window $timestamp Sent: $1-
    }
    else aline %window $timestamp Not Connected.
  }
}
alias cpanel { 
  dialog -m cpanel cpanel
  var %sockname $+(PugBot_,$hget(config,nickname))

  if ($sock(%sockname)) did -b cpanel 2
  else did -b cpanel 1
}
dialog cpanel {
  title "PugBot Control Panel"
  size -1 -1 147 81
  option dbu
  button "Start Bot", 2, 6 29 40 10
  button "Stop Bot", 1, 6 41 40 10
  button "Edit Config.ini", 3, 6 53 40 11
  button "Edit Servers.ini", 4, 6 66 40 11
  button "Reload main.mrc", 5, 4 12 44 13
  ;icon 6, 53 7 88 68, c:\PugBot\PugBot\logo.bmp, 0
}
on *:dialog:cpanel:sclick:5:{ reload -rs $qt($script) }
on *:dialog:cpanel:sclick:1:{ 
  var %me $hget(config,nickname)
  .sockclose $+(PugBot_,%me) | did -b $dname 1 | did -e $dname 2 
  if ($window(@ $+ %me)) { 
    aline $v1 $timestamp - Stopped $+(',%me,') -
  }
}
on *:dialog:cpanel:sclick:2:{
  var %me $hget(config,nickname)
  if (%cfg.error) { dialog -m cfg.error cfg.error | unset %cfg.error | halt }
  StartBot | did -b $dname 2 | did -e $dname 1

}
on *:dialog:cpanel:sclick:3:{ editcfg }
on *:dialog:cpanel:sclick:4:{ editservs }
dialog cfg.error {
  title "Error"
  size -1 -1 98 39
  option dbu
  text "Error: Config not setup properly.", 1, 10 8 87 16
  button "OK", 2, 30 21 37 12
}
on *:dialog:cfg.error:sclick:2:{ 
  dialog -c $dname
}
dialog editcfg {
  title "Edit Config.ini"
  size -1 -1 246 90
  option dbu
  edit "", 1, 19 9 205 57, multi return autovs
  button "Save", 2, 104 72 37 12
}
alias editcfg { 
  dialog -m editcfg editcfg
  var %x 1 
  while (%x <= $lines($scriptdirconfig.ini)) { 
    did -a editcfg 1 $read($scriptdirconfig.ini,nt,%x) $+ $crlf
    inc %x
  }
}

alias editservs { 
  dialog -m editservs editservs
  var %x 1 
  while (%x <= $lines($scriptdirservers.ini)) { 
    did -a editservs 1 $read($scriptdirservers.ini,nt,%x) $+ $crlf
    inc %x
  }
}
dialog editservs {
  title "Edit Servers.ini"
  size -1 -1 246 90
  option dbu
  edit "", 1, 19 9 205 57, multi return autovs vsbar
  button "Save", 2, 104 72 37 12
}

on *:dialog:editcfg:sclick:2:{
  .remove $scriptdirconfig.ini
  var %x 1
  while $did($dname,1,%x) { 
    write $scriptdirconfig.ini $v1
    inc %x
  }
  dialog -c $dname
}
on *:dialog:editservs:sclick:2:{
  .remove $scriptdirservers.ini
  var %x 1
  while %x <= $did($dname,1,0).lines { 
    if $regex($did($dname,1,%x),^\[.*\]$) && %x != 1 { write $scriptdirservers.ini $crlf } 
    write $scriptdirservers.ini $did($dname,1,%x)
    inc %x
  }
  dialog -c $dname
}
on *:start:{
  unset %cfg.error 
  .timerrefreshcfg 0 1 check_cfg
  .timercpanel 1 1 cpanel
  startbot 
}
alias startbot { 
  if ($check_cfg) { 
    var %nickname $hget(config,nickname), %server = $hget(config,server)
    var %authserv $hget(config,authserv), %botmaster = $hget(config,botmaster)
    var %trigger $hget(config,trigger), %skin = $hget(config,trigger)
    var %sockname PugBot_ $+ %nickname

    .sockopen %sockname $replace(%server,:,$chr(32))
    .sockmark %sockname 1

    if (!$window(@ $+ %nickname)) .window -e @ $+ %nickname
    else clear @ $+ %nickname
    aline @ $+ %nickname $timestamp - Starting $+(',%nickname,') -

  }
}

alias check_cfg {  

  var %cfg $scriptdirconfig.ini, %x
  if ($read(%cfg,r,/^nickname=(.*)$/i)) .hadd -m config nickname $regml(1)
  else { 
    if (%cfg.error) halt
    var %error Config Error: could not find 'nickname' in $qt($+($scriptdir,config.ini)) 
    echo -a %error | inc %x 
  }


  if ($read(%cfg,r,/^server=(.*)$/i)) .hadd -m config server $regml(1)
  else { 
    if (%cfg.error) halt
    var %error Config Error: could not find 'server' in $qt($+($scriptdir,config.ini)) 
    echo -a %error | inc %x
  }

  if ($read(%cfg,r,/^authserv=(.*)$/i)) .hadd -m config authserv $regml(1)
  else {
    if (%cfg.error) halt
    var %error Config Error: could not find 'authserv' in $qt($+($scriptdir,config.ini)) 
    echo -a %error | inc %x 
  }

  if ($read(%cfg,r,/^botmaster=(.*)$/i)) .hadd -m config botmaster $regml(1)
  else { 
    if (%cfg.error) halt
    var %error Config Error: could not find 'botmaster' in $qt($+($scriptdir,config.ini))  
    echo -a %error | inc %x 
  }

  if ($read(%cfg,r,/^channels=(.*)$/i)) .hadd -m config channels $regml(1)
  else { 
    if (%cfg.error) halt
    var %error Config Error: could not find 'channels' in $qt($+($scriptdir,config.ini)) 
    echo -a %error | inc %x 
  }


  if ($read(%cfg,r,/^trigger=(.*)$/i)) .hadd -m config trigger $regml(1)
  else { 
    if (%cfg.error) halt
    var %error Config Error: could not find 'trigger' in $qt($+($scriptdir,config.ini)) 
    echo -a %error | inc %x
  }


  if ($read(%cfg,r,/^skin=(.*)$/i)) .hadd -m config skin $regml(1)
  else {
    if (%cfg.error) halt
    var %error Config Error: could not find 'skin' in $qt($+($scriptdir,config.ini)) 
    echo -a %error | inc %x
  }

  if ($read(%cfg,r,/^rconport=(.*)$/i)) .hadd -m config rconport $regml(1)
  else {
    if (%cfg.error) halt
    var %error Config Error: could not find 'rconport' in $qt($+($scriptdir,config.ini)) 
    echo -a %error | inc %x
  }


  if (!%x) { unset %cfg.error | return 1 }
  else {
    set %cfg.error 1
  }
}
on *:sockopen:PugBot_*:{
  if ($sockerr) return 
  var %me $hget(config,nickname), %user = $lower($regsubex(%me,/\W/g,)), %sw = sockwrite -n $sockname
  %sw NICK %me
  %sw USER %user $qt(%user) $qt($ip) : $+ %user
}

on *:sockwrite:PugBot_*:{ 
  if (!$1) halt
  var %window $+(@,$hget(config,nickname))
  if ($window(%window)) aline -p $v1 $timestamp Sent: $1-
}
on *:sockread:PugBot_*:{ 
  var %data, %me = $hget(config,nickname), %skin $hget(config,skin), %sw = rawsend $sockname
  var %trigger $hget(config,trigger), %botmaster = $hget(config,botmaster) 
  sockread %data | tokenize 32 %data

  var %window @ $+ %me
  if (!$window(%window)) window -e %window
  aline -p %window $timestamp Received: $1-

  if $1 == PING { 
    if $sock($sockname).mark { 
      if $hget(config,authserv) { .timer 1 1 %sw mode %me +x | .timer 1 1 %sw as AUTH $v1 }
      if ($hget(config,channels)) { .timer 1 2 %sw JOIN $v1 }
      if ($timer($sockname)) { .timer $+ $sockname off }
      .sockmark %sockname *
    }
    %sw Pong $2
  }

  ;Raw Numeric events.
  elseif $regex($1,:.+) && $2 isnum {
    ;Catch nicks
    if $2 == 353 {
      var %chan $5, %nicks $regsubex($6-,/^:/g,)
      var %x 1
      while $gettok(%nicks,%x,32) { 
        var %nick $remove($v1,+,@,&)
        if ($left($v1,1) == @) { hadd -m $+(%chan,_nickmodes) %nick op }
        elseif ($left($v1,1) == +) { hadd -m $+(%chan,_nickmodes) %nick voice }
        inc %x
      }
    }

    elseif $2 == 330 {
      if $hget($sockname,getauthname) { 
        var %authname $5
        .hadd -m $sockname gotauthname $5
        .hdel -sw $sockname getauthname
      }
    }
  }

  ;On Text
  elseif $regex($1-,^:(.*)!.*@(.*) PRIVMSG (.*) :(.*)$) {
    var %nick $regml(1), %address = $+(*!*@,$regml(2)), %target = $regml(3), %text = $regml(4)
    var %botmaster $hget(config,botmaster)


    if (!$hget(Authname,%address)) .hadd -m Authname %address $iif($authname($sockname,%nick),$v1,0)
    if ($hget(Authname,%address)) var %authname $v1
    if (%authname) && ($read($scriptdirusers.db,w,%authname $+ :*)) var %userlevel $iif($gettok($v1,2,58),$v1,1)
    if ($left(%target,1) == $(#,0)) var %chan %target
    if $regex(%address,^(.*)\..*\.gamesurge$) { var %gsauth $regml(1) }

    tokenize 32 %text

    if $1- == %trigger $+ version { 
      var %msg Hi %nick $+ , im running %me v1.0. 
      sendcmd %nick notice %nick : $+ $skin(%skin,Version,%msg)
    }

    elseif $1- == %trigger $+ commands || $1- == %trigger $+ help {
      sendcmd %nick notice %nick : $+ $skin(%skin,Admin-Commands,%trigger $+ Pug %trigger $+ EndPug - %trigger $+ Bind %trigger $+ Set %trigger $+ Unbind %trigger $+ Binds - %trigger $+ Adduser %trigger $+ Deluser %trigger $+ Users - %trigger $+ help Levels)
      sendcmd %nick notice %nick : $+ $skin(%skin,Commands,%trigger $+ Help <CmdName> - %trigger $+ Access %trigger $+ Version %trigger $+ Commands %trigger $+ Add)
      if ($mybot_binds(%me)) sendcmd %nick notice %nick : $+ $skin(%skin,Binds,$showbinds($v1))
    }
    elseif $1 == %trigger $+ help { 
      if $2- == %trigger $+ bind || $2- == bind { 
        sendcmd %nick notice %nick : $+ $skin(%skin,Bind,Syntax: %trigger $+ bind <Name> <Text>)
      }
      elseif $2- == %trigger $+ unbind || $2- == unbind { 
        sendcmd %nick notice %nick : $+ $skin(%skin,Unbind,Syntax: %trigger $+ unbind <Name>)
      }
      elseif $2- == %trigger $+ set || $2- == set { 
        sendcmd %nick notice %nick : $+ $skin(%skin,Set,Syntax: %trigger $+ set <BindName> <Text>)
      }
      elseif $2- == %trigger $+ add || $2- == add { 
        sendcmd %nick notice %nick : $+ $skin(%skin,Add,This adds you to a pug $+ $chr(44) an admin needs to type %trigger $+ startpug before you can add your self to it.)
      }
      elseif $2- == %trigger $+ adduser || $2- == adduser { 
        sendcmd %nick notice %nick : $+ $skin(%skin,Adduser,Syntax: %trigger $+ adduser <Nick|*AuthName> <AccessLevel>)
      }
      elseif $2- == %trigger $+ deluser || $2- == deluser { 
        sendcmd %nick notice %nick : $+ $skin(%skin,Deluser,Syntax: %trigger $+ deluser <Nick|*AuthName> <AccessLevel>)
      }
      elseif $2 == %trigger $+ pug || $2- == pug {
        sendcmd %nick notice %nick : $+ $skin(%skin,StartPug,Syntax: %trigger $+ startpug <ip:port|ServerName> <Map>)
      }
      elseif ($2- == %trigger $+ access || $2- == access || $2- == %trigger $+ a || $2- == a) { 
        sendcmd %nick notice %nick : $+ $skin(%skin,Access,Syntax: $+(%trigger,access|,%trigger,a) [Nick])
      }
      elseif $2 == levels { 
        sendcmd %nick notice %nick : $+ $skin(%skin,Access Levels,[100=Channel-Peon] [200=Channel-Op] [300=StartPug/StopPug] [400=AddBind/Set/DelBind/Binds] [500=AddUser/Deluser/Users]) 
      }
      else sendcmd %nick notice %nick : $+ $skin(%skin,Error,There isnt any help for that command.)
    }

    elseif $1 == %trigger $+ a || $1 == %trigger $+ access {
      if (!$2) sendcmd %nick notice %nick : $+ $skin(%skin,Access,Authname: $iif(%authname,$v1,not authed) Userlevel: $iif(%userlevel,$v1,0) Address: %address)
      else { 
        var %authname $authname($sockname,$2)
        if (!%authname) { sendcmd %nick notice %nick : $+ $skin(%skin,Error,That user isnt authenticated.) | halt }
        set -u0 %tmp.authname $read($scriptdirusers.db,w,%authname $+ :*)
        var %targ_level $gettok(%tmp.authname,2,58) 
        sendcmd %nick notice %nick : $+ $skin(%skin,Access,Authname: $iif(%authname,$v1,not authed) Userlevel: $iif(%targ_level,$v1,0))
      }
    }

    elseif $1 == %trigger $+ adduser {  
      if %address != %botmaster && $iif(%userlevel,$v1,1) < 300  {
        sendcmd %nick notice %nick : $+ $skin(%skin,Error,You dont have access to that command.)
        halt
      }
      elseif !$3 { 
        sendcmd %nick notice %nick : $+ $skin(%skin,Error,Invalid Syntax $+ $chr(44) use like this %trigger $+ adduser <nick|*authname> <level>) 
        halt
      }
      elseif $read($scriptdirusers.db,w,$2 $+ :*) { 
        sendcmd %nick notice %nick : $+ $skin(%skin,Error,That user is already on my userlist.) 
        halt 
      }
      if $left($2,1) != * {
        var %targ_name $authname($sockname,$2)
        if (!%targ_name) { 
          sendcmd %nick notice %nick : $+ $skin(%skin,Error,$2 needs to authenticate with AuthServ.) 
          halt 
        }
      }
      else {
        if !$accountexists($sockname,$2) { 
          sendcmd %nick notice %nick : $+ $skin(%skin,Error,That account doesnt exist.) 
          halt 
        }
        var %targ_name $remove($2,*)
      }
      write $scriptdirusers.db $+(%targ_name,:,$3) 
      sendcmd %nick notice %nick : $+ $skin(%skin,Adduser,Successfully added user.)
    }

    elseif $1- == %trigger $+ users { 
      if %address != %botmaster && $iif(%userlevel,$v1,1) < 100  {
        sendcmd %nick notice %nick : $+ $skin(%skin,Error,You dont have access to that command.)
        halt
      }
      elseif !$lines($scriptdirusers.db) { 
        sendcmd %nick notice %nick : $+ $skin(%skin,Error,No users exist.)
        halt
      }
      elseif $lines($scriptdirusers.db) < 20 {
        var %x 1 | while $read($scriptdirusers.db,%x) { var %y = %y $v1 | inc %x }
        sendcmd %nick notice %nick : $+ $skin(%skin,Users,%y)
      }
      else { 
        sendcmd %nick notice %nick : $+ $skin(%skin,Error,To many users to list.)
        halt
      }
    }

    elseif $1 == %trigger $+ deluser { 
      if %address != %botmaster && $iif(%userlevel,$v1,1) < 300  {
        sendcmd %nick notice %nick : $+ $skin(%skin,Error,You dont have access to that command.)
        halt
      }
      elseif $hget(Authname,%address) == 0 { 
        sendcmd %nick notice %nick : $+ $skin(%skin,Error,You need to authenticate with AuthServ.)
        halt
      }
      elseif !$2 { 
        sendcmd %nick notice %nick : $+ $skin(%skin,Error,Invalid Syntax $+ $chr(44) use like this %trigger $+ adduser <nick|*authname>)
        halt
      }

      if ($left($2,1) != *) {
        var %targ_name $authname($sockname,$2)
        if (!%targ_name) { 
          sendcmd %nick notice %nick : $+ $skin(%skin,Error,$2 is either offline or needs to authenticate with AuthServ.)
          halt
        }
      }
      elseif ($left($2,1) == *) {
        var %nick2 $remove($2,*)
        if ($read($scriptdirusers.db,w,%nick2 $+ :*)) var %targ_name %nick2
        elseif (!$accountexists($sockname,$2)) {
          sendcmd %nick notice %nick : $+ $skin(%skin,Error,That account doesnt exist.)
          halt
        }
      }

      if (!$read($scriptdirusers.db,w,%targ_name $+ :*)) { 
        sendcmd %nick notice %nick : $+ $skin(%skin,Error,%targ_name isnt on my userlist.)
        halt
      }
      write -dl $+ $readn $scriptdirusers.db
      sendcmd %nick notice %nick : $+ $skin(%skin,Deluser,Successfully removed user.)
    }

    elseif $1 == %trigger $+ bind { 
      if %address != %botmaster && $iif(%userlevel,$v1,1) < 400  {
        sendcmd %nick notice %nick : $+ $skin(%skin,Error,You dont have access to that command.)
        halt
      }
      elseif $hget(Authname,%address) == 0 { sendcmd %nick notice %nick : $+ $skin(%skin,Error,You need to authenticate with AuthServ.) }
      var %binds $+(%me,_binds)
      if !$3 || $regex($2,\W) { 
        sendcmd %nick notice %nick : $+ $skin(%skin,Error,Invalid syntax $+ $chr(44) use like this %trigger $+ bind <Name> <Text>)
      }
      else {
        if !$hget(%binds,$2) {
          hadd -m %binds $2 $3-
          sendcmd %nick notice %nick : $+ $skin(%skin,Bind,Successfully bound $qt($2) to $qt($3-))
          .hsave %binds $+($scriptdir,%binds,.db)
        }
        else sendcmd %nick notice %nick : $+ $skin(%skin,Bind,That bind already exists)
      }
    }

    elseif $1 == %trigger $+ set {
      var %binds $+(%me,_binds)
      if !$3 { sendcmd %nick notice $nick : $+ $skin(%skin,Error,Invalid syntax $+ $chr(44) use like this %trigger $+ set <bindname> <newvalue>) | halt }
      elseif !$hget(%binds,$remove($2,%trigger)) { sendcmd %nick notice $nick : $+ $skin(%skin,Error,No bind by that name exists.) | halt }
      hadd -m %binds $2 $3- | .hsave %binds $+($scriptdir,%binds,.db)
      sendcmd %nick notice %nick : $+ $skin(%skin,Set,Successfully set $qt($2) to $qt($3-))
    }

    elseif $1 == %trigger $+ unbind {
      if %address != %botmaster && $iif(%userlevel,$v1,1) < 300 {
        sendcmd %nick notice %nick : $+ $skin(%skin,Error,You dont have access to that command.)
        halt
      }
      elseif $hget(Authname,%address) == 0 { sendcmd %nick notice %nick : $+ $skin(%skin,Error,You need to authenticate with AuthServ.) }
      var %me $hget(config,nickname), %binds = %me $+ _binds
      if $1 && !$2 { 
        var %msg Invalid syntax, use like this %trigger $+ unbind <Name>
        sendcmd %nick notice %nick : $+ $skin(%skin,Error,%msg) 
      }
      else {
        if $hget(%binds,$2) {
          .hdel -sw %binds $2
          sendcmd %nick notice %nick : $+ $skin(%skin,Unbind,Successfully unbound $qt($2))
          .hsave %binds $+($scriptdir,%binds,.db)
          if $lines($+($scriptdir,%binds,.db)) < 1) .remove $+($scriptdir,%binds,.db)
        }
        else sendcmd %nick notice %nick : $+ $skin(%skin,Error,There is no command named $qt($2))
      }
    }

    elseif $1- == %trigger $+ binds {
      if %address != %botmaster && $iif(%userlevel,$v1,1) < 300  {
        sendcmd %nick notice %nick : $+ $skin(%skin,Error,You dont have access to that command.)
        halt
      }
      elseif $hget(Authname,%address) == 0 { sendcmd %nick notice %nick : $+ $skin(%skin,Error,You need to authenticate with AuthServ.) }
      sendcmd %nick notice %nick : $+ $iif($mybinds(%me),$skin(%skin,Binds,$v1),$skin(%skin,Binds,No binds exist.)) 
    }

    elseif $1 == %trigger $+ eval {
      if %address != %botmaster {
        sendcmd %nick notice %nick : $+ $skin(%skin,Error,You dont have access to that command.)
        halt
      }
      var %ticks $ticks, %str = $2- == $($2-,2) $+([,$calc($ticks - %ticks),ms])
      sendcmd %nick privmsg %chan : $+ $skin(%skin,Eval,%str)
    }

    elseif $1 == %trigger $+ a || $1 == %trigger $+ access { 
      if (!$2) sendcmd %nick notice %nick : $+ $skin(%skin,Access,Authname: $iif(%authname,$v1,not authed) Userlevel: $iif(%userlevel,$v1,0) Address: %address)
      else { 
        var %authname $authname($sockname,$2)
        if (!%authname) { sendcmd %nick notice %nick : $+ $skin(%skin,Error,That user isnt authenticated.) | halt }
        set -u0 %tmp.authname $read($scriptdirusers.db,w,%authname $+ :*)
        var %targ_level $gettok(%tmp.authname,2,58) 
        sendcmd %nick notice %nick : $+ $skin(%skin,Access,Authname: $iif(%authname,$v1,not authed) Userlevel: $iif(%targ_level,$v1,0))
      }
    }

    elseif $1 == %trigger $+ pug { 
      if (!%authname) { 
        sendcmd %nick notice %nick : $+ $skin(%skin,Pug,You need to authenticate to use this.)
      }
      elseif ($hget(Pug-Starter)) {  
        sendcmd %nick notice %nick : $+ $skin(%skin,Pug,A Pug is already in progress.)
      }
      elseif (!$2) { 
        sendcmd %nick notice %nick : $+ $skin(%skin,Error,Invalid syntax $+ $chr(44) use like this: %trigger $+ Pug <map>)
      } 
      elseif (!$read($scriptdirmaps.txt,w,$2 $+ .bsp)) { 
        sendcmd %nick notice %nick : $+ $skin(%skin,Error,Map not found.)
      }
      else {
        var %randpass $regsubex(*****,/\*/g,$iif($r(1,5) > 2,$iif($r(1,2) > 1,$r(a,z),$r(A,Z)),$r(1,9))) 
        sockwrite -n $sockname privmsg %chan : $+ $skin(%skin,$hget(config,nickname),%nick Started a Pug $+ $chr(44) to play type %trigger $+ addme)
        sockwrite -n $sockname privmsg %nick : $+ $skin(%skin,Pug,Pug Started $+ $chr(44) Waiting for players..)
        sockwrite -n $sockname privmsg %nick : $+ $skin(%skin,Pug,When you are in game type %trigger $+ login %randpass)

        hadd -m Pug-Players %address %nick
        hadd -m Pug-Starter %address %nick

        var %file $scriptdirservers.ini
        var %serv $ini(%file,1), %rconpass = $readini(%file,%serv,rconpass), %maxplayers = $readini(%file,%serv,maxplayers)

        rcon %serv %rconpass logaddress_add $netip 1337
      }

    } 

    elseif $hget(%me $+ _binds,$remove($1,%trigger)) { 
      var %value $v1
      sendcmd %nick notice %nick : $+ $skin(%skin,$remove($1,%trigger),%value)
    }

  }


  elseif $regex($1-,/:(.+)\!.+@.+ MODE (#[^\s]+) ([^\s]+) (.+)/g) { 
    var %nick $regml(1), %chan = $regml(2), %modes = $regml(3), %nicks = $regml(4) 

    if +* iswm %modes { var %+modes $mid(%modes,2-) }
    if -* iswm %modes { var %-modes $mid(%modes,2-) }
    if (%+modes) || (%-modes) {                  
      var %x 1, %tmpmodes = $remove(%modes,-,+)
      while (%x <= $len(%tmpmodes)) { 
        if ($mid(%tmpmodes,%x,1) == o) {
          if (%+modes) var %opnicks = %opnicks $gettok(%nicks,%x,32)
          if (%-modes) var %dopnicks = %dopnicks $gettok(%nicks,%x,32)
        }
        elseif ($mid(%tmpmodes,%x,1) == v) {
          if (%+modes) var %vnicks = %vnicks $gettok(%nicks,%x,32)
          if (%-modes) var %dvnicks = %dvnicks $gettok(%nicks,%x,32)
        }
        inc %x
      }
      if %opnicks { var %x = 1 | while ($gettok($v1,%x,32)) { .hadd -m $+(%chan,_nickmodes) $v1 op | inc %x } }
      if %vnicks { var %x = 1 | while ($gettok($v1,%x,32)) { .hadd -m $+(%chan,_nickmodes) $v1 voiced | inc %x } }
      if %dopnicks { var %x = 1 | while ($gettok($v1,%x,32)) { .hdel -m $+(%chan,_nickmodes) $v1 | inc %x } }
      if %dvnicks { var %x = 1 | while ($gettok($v1,%x,32)) { .hdel -m $+(%chan,_nickmodes) $v1 | inc %x } }
    }

  }

  ;On Notice
  elseif $regex($1-,^:(.+)\!.*\@.* NOTICE .* :(.*)$) { 
    var %nick $regml(1), %text = $regml(2)
    tokenize 32 %text

    if %nick == AuthServ { 
      if $hget($sockname,accountexists) == 0 { 
        if ($regex($1-,^Account information for .+:$)) { .hadd -m $sockname accountexists 1 }
        else .hdel -sw $sockname accountexits
      }
    }
  }

  ;On Join 
  elseif $regex($1-,^:(.+)\!.+\@.+ JOIN (.+)) {  
    var %nick $regml(1), %chan = $regml(2), %hostmask = *!*@ $+ $gettok($1,2,64)
    if (%nick != %me) { 
      if (!$hget(Authname,%hostmask)) .hadd -m Authname %address $iif($authname($sockname,%nick),$v1,0)
      if ($hget(Authname,%hostmask)) var %authname $v1
      if (%authname) && ($read($scriptdirusers.db,w,%authname $+ :*)) var %userlevel $gettok($v1,2,58)

      if (%userlevel >= 100) && (%userlevel < 200) || (%botmaster iswm %hostmask) %sw mode %chan +v %nick
      elseif (%userlevel >= 200) || (%botmaster iswm %hostmask) %sw mode %chan +o %nick
    }
  }


  ;On Part 
  elseif $regex($1-,^:(.+)\!.+\@.+ PART (.+)) {   
    var %nick $regml(1), %chan = $regml(2)
    ;Remove all names from list when you part
    if (%nick == %me) { .hfree -sw $+(%chan,_nickmodes) }
    else .hdel -sw $+(%chan,_nickmodes) %nick
  }

  ;On Quit
  elseif $regex($1-,^:(.+)\!.+\@.+ QUIT) { 
    ;Remove persons name when they quit.
    var %x 1
    while $hget(%x) { 
      var %y 1
      while ($hfind($v1,*,%y,w)) { .hdel -sw $hget(%x) $v1 | inc %y }
      inc %x
    }
  }
}
on *:socklisten:test:{ sockaccept test2 }
on *:udpread:rcon.logs:{ 
  sockread %data
  echo -s $bvar(%data,1-).text
}
on *:sockclose:PugBot_*:{ 
  .timer $+ $sockname 0 30 sopen $sockname
}
alias -l sopen { 
  if (!$sock($1)) { 
    sockopen $1 $replace($hget(config,server),:,$chr(32))
    sockmark $1 1
  }
}
alias rawsend {
  var %window $+(@,$hget(config,nickname)) 
  if ($sock($1).status != Active) halt
  sockwrite -n $1 $2-
  if ($window(%window)) aline -p $v1 $timestamp Sent: $1-
}
alias rcon { var %sockname $+(rcon,$r(1,1000)) | sockudp -k %sockname $replace($1,:,$chr(32)) ÿÿÿÿchallenge rcon | sockmark %sockname $1- }
on *:udpread:rcon*:{ 
  var %data | sockread %data | tokenize 32 %data
  if ($1-2 == ÿÿÿÿchallenge rcon) { 
    var %challenge $3
    if ($sock($sockname).mark) {
      var %serv $gettok($v1,1,32), %rconpass = $gettok($v1,2,32), %cmd = $gettok($v1,3-,32)
      sockudp $sockname $replace(%serv,:,$chr(32)) ÿÿÿÿrcon $qt(%challenge) %rconpass %cmd
    }
  }
  sockclose $sockname
}


alias queryserv {
  var %serv $gettok($1,1,58), %port = $gettok($1,2,58)
  sockudp -k queryserv %serv %port ÿÿÿÿTSource Engine Query
  sockmark queryserv %serv %port
  set %beginticks $ticks
  pause ms 150
  if ($hget(queryserv,result)) { .hfree -sw queryserv | return $v1 }
}
on *:udpread:queryserv:{
  var %ping = $calc($ticks - %beginticks)
  sockread &data
  breplace &data 0 254 32 160 | var %data $bvar(&data,1,$bvar(&data,0)).text
  if %data {
    var %hostname = $gettok(%data,2,254), %map = $gettok(%data,3,254), %gamedir = $gettok(%data,4,254)
    var %mod = $gettok(%data,5,254)
    if (!%pos) var %pos = 1

    var %posn = $pos(%data,$gettok(%data,5,254),%pos), %gamechars = $len($gettok(%data,5,254))
    var %chrclc = $calc(%posn + %gamechars), %bots = $iif($asc($right(%data,1)) == 254,0,$ifmatch)
    var %tmpplayers = $mid(%data,%chrclc,3), %players = $iif($asc($mid(%tmpplayers,2,1)) == 254,0,$ifmatch)
    var %maxplayers = $asc($right(%tmpplayers,1))
    if (%maxplayers == 160) var %maxplayers = 32

    var %string = $gettok(%data,6,254)
    var %players2 = $iif($asc($mid(%players,2,1)) == 254,0,$ifmatch)

    var %pwpos = $calc(%chrclc + $pos(%string,5,1) + 1)
    var %password = $iif($right($mid(%data,%pwpos,6),1) == $chr(254),no,yes)

    var %protocol = $asc($mid(%string,$iif(%players2 == 0,2,3),1))
    if (!%protocol) var %protocol = 0
    var %servertype = $iif($mid(%string,$iif(%players == 0,3,4),1) == d,Dedicated,Listen)
    var %serveros = $iif($mid(%string,$iif(%players == 0,4,5),1) == l,Linux,Windows)
    var %secure = $iif($mid($calc($len(%data) - 1),1) == $chr(254),no,yes)

    .hadd -m $sockname result $gettok($sock($sockname).mark,1,32) ¶ %map ¶ %players ¶ %hostname ¶ %password
    unset %beginticks | sockclose $sockname
  }
}


alias -l mybinds {
  var %x 1
  while $hfind($+($1,_binds),*,%x,w) {
    if (!$hget($sockname,tmpb)) hadd -mu1 $sockname tmpb $hget(config,trigger) $+ $hfind($+($1,_binds),*,%x,w)
    else hadd -mu1 $sockname tmpb $hget($sockname,tmpb) $hget(config,trigger) $+ $hfind($+($1,_binds),*,%x,w)
    inc %x
  }
  .hfree -sw $1 trigger
  if $hget($sockname,tmpb) { .hfree -sw $sockname tmpb | return $v1 }
}
alias pause {
  if ($version < 5.91) halt  
  elseif (!$regex(pause,$1-,/^m?s \d+$/Si)) halt
  elseif ($1 == ms) && ($istok(95 98 ME,$os,32)) halt
  elseif ($2 !isnum 1-) halt

  var %wsh = wsh $+ $ticks, %cmd
  if ($1 == s) %cmd = ping.exe -n $int($calc($2 + 1)) 127.0.0.1
  else %cmd = pathping.exe -n -w 1 -q 1 -h 1 -p $iif($2 > 40,$calc($2 - 40),$2) 127.0.0.1
  .comopen %wsh wscript.shell | .comclose %wsh $com(%wsh,run,1,bstr*,% $+ comspec% /c %cmd >nul,uint,0,bool,true)
}
alias -l sendcmd {
  var %sw sockwrite -n $sockname, %nick = $1, %skin = $hget(config,skin)
  if (!$sockname) echo -a Error, not connected.
  elseif !$hget(%nick,ignored) {
    var %lines 5, %secs = 4, %time = 30 
    .hinc $+(-mu,%secs) %nick floodcount
    if $hget($1,floodcount) >= %lines { 
      %sw notice %nick : $+ $skin(%skin,Error,You are sending commands to quickly $+ $chr(44) you will be ignored for 30 secs)
      .hadd $+(-mu,%time) %nick ignored 1
    }
    %sw $2-
  }

}
alias authname {
  if (!$2) || (!$sock($1)) halt
  .hadd -m $1 getauthname $2
  sockwrite -n $1 whois $2
  pause ms 600
  if ($hget($1,gotauthname)) { .hdel -sw $1 gotauthname | return $v1 }
}
;$skin(<SkinNumber>,<bindname>,<text>)
alias skin {
  if ($1 == 1) { return 15,1[14,1«0,1»15,1 9 $+ $2 0,1«14,1»15,1]: 4,1 $+ $3- $+  }
  elseif ($1 == 2) { return 15,1[14,1«0,1»15,1 4 $+ $2 0,1«14,1»15,1]: 9,1 $+ $3- $+  }
  elseif ($1 == 3) { 
    var %color1 9,1, %color2 = 7,1, %color3 = 3,1
    return 15,1[14,1«0,1»15,1 9 $+ $2 0,1«14,1»15,1]: %color1 $replace($3-,IP:,%color2 $+ IP: $+ %color1,PW:,%color3 $+ PW: $+ %color1,Map:,%color2 $+ Map:)
  }
  else return $3-
}

alias netip { 
  if ($1) || (!$isid) halt
  elseif !$ip {
    if ($hget(mIRC,ip)) return $v1
    else {  
      var %sock getip
      .sockclose %sock | .sockopen %sock whatismyip.com 80
      pause s 1
      if $hget(%sock,ip) { .hadd -m mIRC ip $v1 | .hfree -sw %sock | return $hget(mIRC,ip) }
    }
  }
  else return $ip
}
on *:sockopen:getip:{  
  var %sw sockwrite -n $sockname
  %sw GET / HTTP/1.1
  %sw Host: whatismyip.com
  %sw Connection: Close
  %sw
}
on *:sockread:getip:{
  var %data | sockread %data
  if ($regex(%data,/<TITLE>WhatIsMyIP\.com - (.+)<\/TITLE>/i)) { .hadd -m $sockname ip $regml(1) }
}