This repository provides a Nuget package and a command line console application for querying Zandronum using the Launcher Protocol and also using the RCon protocol.
Using this library it is very possible to build a discord bot (currently a work in progress):
Usage:
zanstat <-server hostname:port> <-rcon RConServerPassword> [command]
where [command] is one of:
-getname Print server name
-getmapname Print current map name
-getmaxplayers Print max players -getpwads Print pwads in use -getiwad Print iwad in use -getskill Print skill setting -getlimits Print various server limits -getplayers Print players currently on the server -getteams Print teams Notes:
- If
-serveris not supplied then it will default tolocalhostand port10666 - If
-rconis supplied then no command is needed. It will go into interactive mode where you can pass through any command you wish. -getteamsdoesn't currently work! My server returns no data for this command.- For commands, you may only query the server every
sv_queryignoretimeseconds. If you query too frequently, the server will return an error code and the library will throw an exception.
To use, instantiate the Zandronum class and pass through the server URL and port:
varzandronum=newRocklan.Zanstat.Zandronum("example.com",10666);Once instantiated you can then query the server for information like Server Name, Current Map, current Players, etc:
varmapName=_zandronum.MapName.Get();varplayers=zandronum.Players.Get();Console.WriteLine($"Players current on map: {mapName}");foreach(varplayerinplayers){Console.WriteLine($" {player}");}You can also connect to the server using RCon and it will raise events whenever the server raises events:
classMyCode{functionConnectToZandronumServer(){varzandronum=newRocklan.Zanstat.Zandronum("example.com",10666);zandronum.Rcon.ServerMessage+=Rcon_ServerMessage;zandronum.Rcon.ConnectToRcon("ThisIsMyRconPassword");Console.WriteLine("Listening to server messages, press enter to quit...");Console.ReadLine();}privatevoidRcon_ServerMessage(objectsender,EventArgse){stringmessage=(easZandronumMessageEventArgs).Message;// Messages from the server have a newline appended, and they also // have color coding embedded. You might want to filter out \\c- from the messageConsole.Write(message);}}If you'd like to send message to the server you can do so using the SendCommand() function:
// return the list of maps_zandronum.Rcon.SendCommand("ListMaps");// change to map03:_zandronum.Rcon.SendCommand("MAP MAP03");Many, many thanks go to legend Sam Izzo for doing 99% of the work - porting (and improving) the Java Huffman encoder, the UDP launcher code, and helping me get the RCon stuff working.
Beware, this library is using UDP, not TCP! UDP is a strange, weird world, brace yourself.

