Skip to main content

Python wrapper for the Oxford Response API

Project description

oxrpy

A Python wrapper for the Oxford Response API.

Installation

Install from PyPI:

pip install oxrpy

Usage

from oxrpy import OxfordAPI

# Initialize with your server key (server-id is no longer required)
api = OxfordAPI(server_key="your_server_key")

# Use all methods directly
server_info = api.get_server()
players = api.get_players()

# Or use grouped managers via properties
servers = api.servers
server_info = servers.get_server()
players = servers.get_players()
bans = servers.get_bans()

logs = api.logs
kill_logs = logs.get_killlogs()
mod_calls = logs.get_modcalls()

commands = api.commands
result = commands.execute_command("announce Hello!")

Advanced Configuration

# Default rate limiting (recommended for most users) - ~29 requests/second with burst capacity
# Uses token bucket algorithm for smooth throttling and burst handling
api = OxfordAPI(server_key="your_server_key")
# or explicitly:
api = OxfordAPI(server_key="your_server_key", rate_limit="auto")

# For heavy command usage (execute_command), use stricter rate limiting
api = OxfordAPI(server_key="your_server_key", rate_limit=1.0)

# Disable rate limiting entirely (use with caution)
api = OxfordAPI(server_key="your_server_key", rate_limit="none")

# Custom rate limiting (specify seconds between requests)
api = OxfordAPI(server_key="your_server_key", rate_limit=0.5)  # 0.5 seconds

# Configure retry behavior for rate-limited requests
api = OxfordAPI(
    server_key="your_server_key", 
    rate_limit="auto",
    max_retries=5  # Retry up to 5 times on rate limit errors
)

# Legacy usage with server-id (still supported for backward compatibility)
api = OxfordAPI(server_key="your_server_key", server_id="your_server_id")

You can also import the managers directly:

from oxrpy import OxfordAPI, Servers, Logs, Commands

api = OxfordAPI(server_key="your_server_key")

servers = Servers(api)
logs = Logs(api)
commands = Commands(api)

# Now use them
server_info = servers.get_server()
kill_logs = logs.get_killlogs()
result = commands.execute_command("kick PlayerOne")

Error Handling

from oxrpy import OxfordAPI, OxfordAPIError, RateLimitError

api = OxfordAPI(server_key="your_key")

try:
    server_info = api.get_server()
    print("Server info:", server_info)
except RateLimitError as e:
    print(f"Rate limit exceeded: {e}")
    # Handle rate limiting (e.g., wait and retry)
except OxfordAPIError as e:
    print(f"API Error: {e}")

Features

  • Advanced Rate Limiting: Token bucket algorithm with burst capacity and automatic retries
  • Configurable Retry Logic: Exponential backoff for rate-limited requests
  • Separate Command Limiting: Stricter 1/sec limit for command execution endpoints
  • Comprehensive error handling with custom exceptions
  • Request timeouts
  • Logging support
  • Input validation

Supported Endpoints

  • get_server(): Returns general server information.
  • get_players(): Returns list of current players.
  • get_queue(): Returns the reserved server queue.
  • get_bans(): Returns active bans.
  • get_killlogs(): Returns recent kill logs (max 100 entries).
  • get_commandlogs(): Returns recent command execution logs.
  • get_joinlogs(): Returns recent player join/leave logs.
  • get_modcalls(): Returns recent moderator call requests.
  • get_vehicles(): Returns vehicles currently spawned.
  • execute_command(command): Executes a permitted command (e.g., "announce Hello!"). get_robberies(): Returns the current status of all robbery locations (Name, Alarm, Available).
  • get_radiocalls(): Returns recent radio calls (last 100).

API Endpoints

get_server(): Returns general server information. Example response:

{
  "Name": "Oxford Roleplay",
  "StyledName": "Oxford RP",
  "Description": "UK emergency roleplay server",
  "Tags": ["UK", "RP"],
  "ThemeColour": "#ffffff",
  "OwnerId": 123456789,
  "CurrentPlayers": 18,
  "MaxPlayers": 32,
  "JoinCode": "OXFD-ABCD",
  "CreatedAt": 1700000000,
  "Packages": []
}

get_players(): Returns list of current players. Example response:

[
  {
    "Username": "PlayerOne",
    "DisplayName": "PlayerOne",
    "UserId": 12345,
    "Team": "Civilian",
    "WantedLevel": 0,
    "Permission": "Admin",
    "Callsign": "A12",
    "Location": "Near Oxford City Centre"
  }
]

get_queue(): Returns the reserved server queue. Example response:

{
  "total": 2,
  "users": [12345, 67890]
}

get_bans(): Returns active bans. Example response:

[
  {
    "UserId": 12345,
    "Username": "BannedUser",
    "Reason": "Fail RP",
    "BannedBy": "API",
    "BannedById": 2,
    "Expiry": 1701000000
  }
]

get_killlogs(): Returns recent kill logs (maximum 100 entries). Example response:

[
  {
    "Timestamp": 1700000100,
    "KillerUserId": 123,
    "KillerUsername": "OfficerA",
    "VictimUserId": 456,
    "VictimUsername": "SuspectB",
    "Distance": 42,
    "Weapon": "Taser"
  }
]

get_commandlogs(): Returns recent command execution logs. Example response:

[
  {
    "Timestamp": 1700000200,
    "UserId": 789,
    "Username": "AdminUser",
    "Command": "kick",
    "Args": ["PlayerOne"]
  }
]

get_joinlogs(): Returns recent player join/leave logs. Example response:

[
  {
    "Timestamp": 1700000250,
    "UserId": 12345,
    "Username": "PlayerOne",
    "Action": "joined"
  },
  {
    "Timestamp": 1700000260,
    "UserId": 67890,
    "Username": "PlayerTwo",
    "Action": "left"
  }
]

get_modcalls(): Returns recent moderator call requests. Example response:

[
  {
    "Timestamp": 1700000300,
    "CallerUserId": 123,
    "CallerUsername": "PlayerOne",
    "CallerDisplayName": "Player One",
    "CaseId": "CASE-001",
    "Responders": [
      {
        "UserId": 789,
        "Username": "ModeratorA"
      }
    ]
  }
]

get_vehicles(): Returns vehicles currently spawned in the server. Example response:

[
  {
    "OwnerUserId": 123,
    "OwnerUsername": "PlayerOne",
    "Registration": "OX12 ABC",
    "Model": "Volvo XC90",
    "Electric": false,
    "ELS": true,
    "ELS_Style": "UK"
  }
]

execute_command(command): Executes a permitted command on the server. Example response:

{
  "message": "Command sent successfully"
}

get_robberies(): Returns the current status of all robbery locations. Example response:

[
  {
    "Name": "Berry",
    "Alarm": false,
    "Available": true
  },
  {
    "Name": "Jewellers",
    "Alarm": true,
    "Available": false
  }
]

get_radiocalls(): Returns recent radio calls. Example response:

[
  {
    "Timestamp": 1765814500,
    "AuthorUserId": 123456789,
    "AuthorUsername": "Officer_Johnson",
    "Location": "City Hall",
    "Description": "Armed robbery in progress",
    "Channel": "Police"
  }
]

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

oxrpy-1.3.3.tar.gz (7.3 kB view details)

Uploaded Source

Built Distribution

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

oxrpy-1.3.3-py3-none-any.whl (7.5 kB view details)

Uploaded Python 3

File details

Details for the file oxrpy-1.3.3.tar.gz.

File metadata

  • Download URL: oxrpy-1.3.3.tar.gz
  • Upload date:
  • Size: 7.3 kB
  • Tags: Source
  • Uploaded using Trusted Publishing? No
  • Uploaded via: twine/6.2.0 CPython/3.12.10

File hashes

Hashes for oxrpy-1.3.3.tar.gz
Algorithm Hash digest
SHA256 e0b78f6fe4b191f42781c0a0e77d246ae497559aef501d7a719de62c786d7f8f
MD5 167ca77376b68c8c7fe5136d162373f7
BLAKE2b-256 f8f4856c04ae6ebfea672536a292c8bf1c11a726af4b198123a0e65148094b11

See more details on using hashes here.

File details

Details for the file oxrpy-1.3.3-py3-none-any.whl.

File metadata

  • Download URL: oxrpy-1.3.3-py3-none-any.whl
  • Upload date:
  • Size: 7.5 kB
  • Tags: Python 3
  • Uploaded using Trusted Publishing? No
  • Uploaded via: twine/6.2.0 CPython/3.12.10

File hashes

Hashes for oxrpy-1.3.3-py3-none-any.whl
Algorithm Hash digest
SHA256 3b2ad575a8a3a0321773061137bc452e27aaeb2e0009ae5e23a31cd4285a25f3
MD5 48d10da901fbd5a39e4ea10ee254a19b
BLAKE2b-256 0c3f45e4aaa5b63fb2838e383cb9d19e3556610732b5f00f549318a46226901c

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