Minecraft Server Query

By SReject on May 25, 2015

About

This script queries the specified minecraft server for version, number of players, and the motd.
 

Installing:

Install my JSON parser
In mIRC create a new remote's script file(alt+r -> file -> new)
Copy the code below into the new script file
Click 'Ok'

Usage:

!mcQuery <server> [port]
/mcquery <server> <port>

on $*:TEXT:/^!mcquery\b:#:{
  if ($0 !isnum 2-3) {
    msg # $chr(3) $+ 04[mcQuery] $+ $chr(15) Invalid number of parameters
  }
  elseif (!$regex($2, /^(?:[a-z\d_\-]+\.)+[a-z\d]+$/)) {
    msg # $chr(3) $+ 04[mcQuery] $+ $chr(15) Invalid parameters specified: Bad host address
  }
  elseif ($0 == 3) && (!$regex($3, /^\d+$/) || $3 !isnum 1-65535) {
    msg # $chr(3) $+ 04[mcQuery] $+ $chr(15) Invalid parameters specified: Bad Port
  }
  else {
    mcQuery $2 $iif($3, $3, 25565) #
  } 
}
on *:SOCKOPEN:mcQuery-*:{
  tokenize 32 $sock($sockname).mark
  if ($sockerr) {
    $3- Unable to connect to $1 $+ : $+ $2
  }
  else {
    var %host = $1, %port = $2
    badd &data 0 47 $varInt($len($1))
    badd -t &data $1
    badd &data $base($left($base(%port, 10, 2, 16), 8), 2, 10) $base($right($base(%port, 10, 2, 16), 8), 2, 10) 1
    bset &data2 1 $varInt($bvar(&data, 0))
    bcopy &data2 $calc($bvar(&data2, 0) +1) &data 1 -1
    badd &data2 1 0
    sockwrite $sockname &data2
  }
}
on *:SOCKREAD:mcQuery-*:{
  tokenize 32 $sock($sockname).mark
  var %cmd = $3-
  if ($sockerr) {
    %cmd Unable to read data from $1 $+ : $+ $2
    mcQuery-Cleanup $sockname
  }
  else {
    noop $hget(mcQuery, $sockname, &read)
    sockread &tmp
    bcopy &read $calc($bvar(&read, 0) + 1) &tmp 1 $bvar(&tmp, 0)
    if ($bvar(&read, $bvar(&read, 0), 1).text === $chr(125)) {
      var %x = $bfind(&read, 1, 123)
      bcopy -c &read 1 &read %x -1
      jsonopen -bd $sockname &read
      var %moto = $replace($json($sockname, description),$cr, $chr(32), $lf, $chr(32))
      %moto = $regsubex(%moto,/§([\da-fklmnor])/gi, $motoRep(\t))
      $3- $chr(3) $+ 03[Server] $+ $chr(15) $1 $+ : $+ $2 - $chr(3) $+ 03[Version] $+ $chr(15) $json($sockname, version, name) - $chr(3) $+ 03[Players] $+ $chr(15) $json($sockname, players, online) $+ / $+ $json($sockname, players, max) - $chr(3) $+ 03[MOTD] $+ $chr(15) %moto
      mcQuery-Cleanup $sockname 
    }
    else {
      hadd -mb mcQuery $sockname &read
    }
  }
}
alias motoRep {
  if ($1 == 0) { return $chr(3) $+ 01 }
  elseif ($1 == 1) { return $chr(3) $+ 02 }
  elseif ($1 == 2) { return $chr(3) $+ 03 }
  elseif ($1 == 3) { return $chr(3) $+ 10 }
  elseif ($1 == 4) { return $chr(3) $+ 05 }
  elseif ($1 == 5) { return $chr(3) $+ 06 }
  elseif ($1 == 6) { return $chr(3) $+ 07 }
  elseif ($1 == 7) { return $chr(3) $+ 15 }
  elseif ($1 == 8) { return $chr(3) $+ 14 }
  elseif ($1 == 9) { return $chr(3) $+ 12 }
  elseif ($1 == a) { return $chr(3) $+ 09 }
  elseif ($1 == b) { return $chr(3) $+ 11 }
  elseif ($1 == c) { return $chr(3) $+ 04 }
  elseif ($1 == d) { return $chr(3) $+ 13 }
  elseif ($1 == e) { return $chr(3) $+ 08 }
  elseif ($1 == f) { return $chr(3) $+ 00 }
  elseif ($1 == l) { return $chr(2) }
  elseif ($1 == n) { return $chr(31) }
  elseif ($1 == o) { return $chr(29) }
  elseif ($1 == r) { return $chr(15) }

}
on *:SOCKWRITE:mcQuery-*:{
  if ($sockerr) {
    tokenize 32 $sock($sockname).mark
    mcQuery-CleanUp $sockname
    $3- Unable to request data from $1 $+ : $+ $2
  } 
}
on *:SOCKCLOSE:mcQuery-*:{
  tokenize 32 $sock($sockname).mark
  noop $hget(mcQuery, $sockname, &read)
  if ($sockerr) {
    $3- The connection to $1 $+ : $+ $2 closed unexpectedly
  }
  elseif (!$bvar(&read, 0)) {
    $3- $1 $+ : $+ $2 did not respond to the status request
  }
  else {
    var %x = $bfind(&read, 1, 123)
    bcopy -c &read 1 &read %x -1
    echo -s $bvar(&read,1-).text
  }
  mcQuery-CleanUp $sockname
}
alias mcQuery {
  if ($regex(Input, $1-,/^(\S+) (\d+)(?: (\S+))?$/)) {
    var %id = 1
    while ($sock(mcQuery- $+ %id) || $var($+(%, mcQuery-, %id),0)) {
      inc %id
    }
    var %dest = $regml(input, 1) $regml(input, 2)
    sockopen mcQuery- $+ %id %dest
    sockmark mcQuery- $+ %id %dest scid $cid $iif($0 == 2, echo -a, msg $3)
  }
  else {
    echo -a :: Invalid Input
  }
}
alias -l mcQuery-Cleanup {
  if ($hget(mcQuery, $1)) {
    hdel mcQuery $1
    if ($hget(mcQuery,0)) {
      hfree mcQuery
    }
  }
  if ($sock($sockname)) {
    sockclose $sockname
  }
}
alias -l badd {
  var %cmd = bset $1
  if ($1 == -t) {
    %cmd = bset -t $2
    tokenize 32 $2-
  }
  %cmd $calc($bvar($1, 0) +1) $2-
}
alias -l VarInt {
  if ($prop != toDec) {
    var %input = $base($1, 10, 2), %newInt, %intPrt, %x
    while ($len(%input)) {
      %intPrt = $right(%input, 7)
      %newInt = %newInt %intPrt 
      %input = $left(%input, -7)
    }

    tokenize 32 %newInt
    %newInt = $null
    %x = 1
    while (%x <= $0) {
      %intPrt = $base($iif(%x !== $0, 1, 0) $+ $base($(,$ $+ %x), 2, 2, 7), 2, 10)
      %newInt = %newInt %intPrt
      inc %x
    }
    return %newInt
  }
}

Comments

Sign in to comment.
Are you sure you want to unfollow this person?
Are you sure you want to delete this?
Click "Unsubscribe" to stop receiving notices pertaining to this post.
Click "Subscribe" to resume notices pertaining to this post.