Skip to content

ParticipantList Methods

ParticipantList provides ergonomic filtering and ranking methods: highest_kda, most_kills, most_damage, and more.

import asyncio
import os

from nexar.cache import DEFAULT_CACHE_CONFIG
from nexar.client import NexarClient
from nexar.enums import MatchParticipantPosition, Region

client = NexarClient(
    riot_api_key=os.getenv("RIOT_API_KEY", ""),
    cache_config=DEFAULT_CACHE_CONFIG,
)


async def main() -> None:
    async with client:
        player = await client.get_player(riot_id="bexli#bex", region=Region.NA1)
        last_match = await player.get_last_match()
        assert last_match

        participants = last_match.participants

        # highest_kda: top 3 by KDA
        print("Top 3 KDA:")
        for p in participants.highest_kda(3):
            print(f"  {p.champion_name:<12} {p.kda(as_str=True)}")

        # most_kills: top 3 by kills
        print("\nMost Kills:")
        for p in participants.most_kills(3):
            print(f"  {p.champion_name:<12} {p.kills} kills")

        # most_damage: top 3 by damage to champions
        print("\nMost Damage:")
        for p in participants.most_damage(3):
            print(f"  {p.champion_name:<12} {p.total_damage_dealt_to_champions:,}")

        # Filter by position
        junglers = participants.by_position(MatchParticipantPosition.JUNGLE)
        print(f"\nJunglers: {[p.champion_name for p in junglers]}")

        # Winners / losers
        print(f"Winners: {len(participants.winners())} players")
        print(f"Losers:  {len(participants.losers())} players")

        # Get a Player from a participant for further queries
        top_kda_participant = participants.highest_kda(1)[0]
        top_player = await top_kda_participant.get_player(client, region=Region.NA1)
        print(f"\nTop KDA player: {top_player}")


if __name__ == "__main__":
    asyncio.run(main())