Quickstart¶
Basic listener¶
import asyncio
from rlstatsapi import StatsClient
async def main() -> None:
async with StatsClient() as client:
client.on_any(lambda msg: print(msg.event, msg.data))
await asyncio.Event().wait()
asyncio.run(main())
This prints incoming events from the local Rocket League exporter.
Filter specific events¶
async with StatsClient() as client:
async for message in client.events("GoalScored", "MatchEnded"):
print(message.event, message.data)
You can also register one handler for several events:
client.on_many(["MatchCreated", "MatchEnded"], lambda msg: print(msg.event))
Typed payload pattern (Pylance-friendly)¶
from rlstatsapi.models import EventMessage
from rlstatsapi.types import GoalScoredPayload, cast_event_data
def on_goal(msg: EventMessage) -> None:
data: GoalScoredPayload = cast_event_data("GoalScored", msg.data)
scorer = data.get("Scorer", {})
print(scorer.get("Name"))
Why this pattern:
StatsClient.on(...)handlers receiveEventMessagecast_event_data(...)narrows to the event-specific payload type- no runtime validation overhead
CLI quick checks¶
rlstatsapi status
rlstatsapi listen --event GoalScored