Skip to main content

Simple Python library for querying Quake 3 based principal servers and their game servers

Project description

pyq3serverlist

ci License Package Last commit

Simple Python 🐍 library for querying Quake 3 based principal servers and their game servers. Very much based on jacklul's PHP implementation.

Features

  • retrieve a list of game servers from a Quake 3 principal ("master") server
  • supports both UDP (default) and TCP for server list retrieval
  • retrieve status details and current players from game servers

Installation

Simply install the package via pip.

$ pip install pyq3serverlist

Usage

The following example retrieves and prints a game server list for Call of Duty 4: Modern Warfare directly from Activision via UDP.

from pyq3serverlist import PrincipalServer, PyQ3SLError, PyQ3SLTimeoutError

principal = PrincipalServer('cod4master.activision.com', 20810)

try:
    servers = principal.get_servers(6)
    print(servers)
except (PyQ3SLError, PyQ3SLTimeoutError) as e:
    print(e)

Longer server lists are usually split into multiple packets. Unfortunately, some principal servers implemented the Quake3 protocol without any indication of whether the response consists of multiple packets. For these principal servers (e.g. master.quake3arena.com, *.idsoftware.com, master0.etmaster.net), we need to keep reading packets until a read attempt times out.

To enable this behavior, use the TimeoutReader instead of the default EOFReader.

from pyq3serverlist import PrincipalServer, TimeoutReader, PyQ3SLError, PyQ3SLTimeoutError

principal = PrincipalServer('master.quake3arena.com', 27950, reader=TimeoutReader())

try:
    servers = principal.get_servers(68)
    print(servers)
except (PyQ3SLError, PyQ3SLTimeoutError) as e:
    print(e)

If you want to query a specific server, initialize a game server object for a known server directly and query its status.

from pyq3serverlist import Server, PyQ3SLError, PyQ3SLTimeoutError

server = Server('198.144.177.2', 27963)
try:
    info = server.get_status()
    print(info)
except (PyQ3SLError, PyQ3SLTimeoutError) as e:
    print(e)

Medal of Honor: Allied Assault, Medal of Honor: Allied Assault Spearhead, Medal of Honor: Allied Assault Breakthrough and Medal of Honor: Pacific Assault all use GameSpy for listing server and support the GameSpy1 query protocol. They do, however, also support a Quake3 protocol variant, which allows queries via the game port.

You can query any known game server for the mentioned Medal of Honor games using MedalOfHonorServer instead of Server.

from pyq3serverlist import MedalOfHonorServer, PyQ3SLError, PyQ3SLTimeoutError

server = MedalOfHonorServer('217.247.241.12', 12203)
try:
    info = server.get_status()
    print(info)
except (PyQ3SLError, PyQ3SLTimeoutError) as e:
    print(e)

You can find a few more examples in the examples folder.

Project details


Download files

Download the file for your platform. If you're not sure which to choose, learn more about installing packages.

Source Distribution

pyq3serverlist-0.4.0.tar.gz (9.5 kB view details)

Uploaded Source

Built Distribution

If you're not sure about the file name format, learn more about wheel file names.

pyq3serverlist-0.4.0-py3-none-any.whl (10.5 kB view details)

Uploaded Python 3

File details

Details for the file pyq3serverlist-0.4.0.tar.gz.

File metadata

  • Download URL: pyq3serverlist-0.4.0.tar.gz
  • Upload date:
  • Size: 9.5 kB
  • Tags: Source
  • Uploaded using Trusted Publishing? No
  • Uploaded via: twine/6.1.0 CPython/3.9.22

File hashes

Hashes for pyq3serverlist-0.4.0.tar.gz
Algorithm Hash digest
SHA256 3bdf109a34577a261d14cfe4bb5233f8d6918cb0bc5e6cffeba71348e0972546
MD5 1013ed6c3edb67a664c1c673c25fd8d2
BLAKE2b-256 03c3cd56bfadc53b2fa813d015c8e8738e9726f0cd5d6d22d1b263d00fdd5777

See more details on using hashes here.

File details

Details for the file pyq3serverlist-0.4.0-py3-none-any.whl.

File metadata

  • Download URL: pyq3serverlist-0.4.0-py3-none-any.whl
  • Upload date:
  • Size: 10.5 kB
  • Tags: Python 3
  • Uploaded using Trusted Publishing? No
  • Uploaded via: twine/6.1.0 CPython/3.9.22

File hashes

Hashes for pyq3serverlist-0.4.0-py3-none-any.whl
Algorithm Hash digest
SHA256 e311726f78ad0405370b4461eb64dd3a4872340a84c9a0de92c568f742c33659
MD5 6808bb97b0a09e085f97726f73c103dd
BLAKE2b-256 e46b01a092887c40fa182e7f308e61a4b661624b83e8d72ef2df38dff1e59365

See more details on using hashes here.

Supported by

AWS Cloud computing and Security Sponsor Datadog Monitoring Depot Continuous Integration Fastly CDN Google Download Analytics Pingdom Monitoring Sentry Error logging StatusPage Status page