An unofficial .NET Client for Riot Games and their games League of Legends, Legends of Runeterra, Teamfight Tactics and Valorant.
✅ Purpose-built Open API client generator
✅ Vanilla C# - Code generation done with Roslyn.
✅ Auto-generated overloads for CLR objects.
✅ Continuously tested against the live API.
✅ All tests required to be successful before deploy.
✅ Performance tested - the extra classes have no measurable impact.
✅ Optimized - you call the HttpClient
almost directly.
✅ Embedded symbols and Source link - see the source code while debugging.
✅ Deterministic build - byte-for-byte output is identical across compilations.
❌ POST, PUT, DELETE and queries - for that, use other libraries for now (e.g. for RGAPI, Camille, and or LCU, PoniLCU).
❌ Game API - for that, use other libraries for now (e.g. Camille).
A big thank you for your support!
You can see the library running in your browser using Blazor at masteries.quest, which has a Cloudflare Workers proxy between the browser and Riot Games API.
You can find the latest releases on GitHub Packages and on NuGet.org.
To install the latest version of the package, type the following in the package manager console:
Install-Package MikaelDui.RiotGames.Client
Or use the .NET CLI reference the latest stable and stay up-to-date:
dotnet add package MikaelDui.RiotGames.Client --version *
You can also use a PackageReference to stay up-to-date with the latest stable build:
<PackageReference Include="MikaelDui.RiotGames.Client" Version="*" />
Getting League of Legends masteries
using RiotGames.LeagueOfLegends;
using LeagueOfLegendsClient client = new("RGAPI-SUPERSECRET", Server.NA);
var summoner = await client.GetSummonerByNameAsync("Some summoner name");
var masteries = await client.GetMasteriesAsync(summoner);
foreach(var mastery in masteries)
Console.WriteLine($"Champion #{mastery.ChampionId}: {mastery.championPoints} points");
Getting Legends of Runeterra leadersboard
using RiotGames.LegendsOfRuneterra;
using LegendsOfRuneterraClient client = new("RGAPI-SUPERSECRET", RegionRoute.AMERICAS);
var leaderboards = await client.GetRankedLeaderboardsAsync();
foreach(var player in leaderboards.Players)
Console.WriteLine($"Player #{player.Name}: {player.Lp} LP");
Getting Teamfight Tactics league entires
using RiotGames.TeamfightTactics;
using TeamfightTacticsClient client = new("RGAPI-SUPERSECRET", PlatformRoute.NA1);
var leagueEntries = await client.GetLeagueEntriesAsync("some-summoner-ID");
foreach(var entry in leagueEntries)
Console.WriteLine($"Player #{entry.SummonerName}: {player.LeaguePoints} LP");
using RiotGames.Valorant;
using ValorantClient client = new("RGAPI-SUPERSECRET", ValPlatformRoute.EU);
var match = await client.GetMatchAsync("some-match-ID");
foreach(var player in match.Players)
Console.WriteLine($"Player #{player.Title} played champion #{player.ChampionId}");
Using the RiotGamesClient
class gives you easy access to multiple game clients at once.
using RiotGames;
using RiotGamesClient client = new("RGAPI-SUPERSECRET", PlatformRoute.NA1, ValPlatformRoute.NA);
var lolSummoner = await client.LeagueOfLegends.GetSummonerByNameAsync("some-summoner-name");
var lolMasteries = await client.LeagueOfLegends.GetMasteriesAsync(summoner);
foreach(var mastery in lolMasteries)
Console.WriteLine($"Champion #{mastery.ChampionId}: {mastery.championPoints} points");
var lorLeaderboards = await client.LegendsOfRuneterra.GetRankedLeaderboardsAsync();
foreach(var player in lorLeaderboards.Players)
Console.WriteLine($"Player #{player.Name}: {player.Lp} LP");
Getting the current League of Legends champ select
You can use the LeagueClient
to communicate directly with the League Client (aka LCU).
using RiotGames.LeagueOfLegends.LeagueClient;
using LeagueClient.LeagueOfLegendsClient client = new();
var session = await client.ChampSelect.GetSessionAsync();
foreach(var teamMember in session.MyTeam)
{
var summoner = await client.Summoners.GetSummonerAsync(teamMember);
Console.WriteLine($"Team member: {summoner.DisplayName}");
}
The generated code looks like this:
The client includes these sub-packages:
- MikaelDui.RiotGames.Core
- MikaelDui.RiotGames.LeagueOfLegends.Core
- MikaelDui.RiotGames.LeagueOfLegends.LeagueClient.LockFile
Notice from Riot Games
Riot Games .NET Client (unofficial) isn't endorsed by Riot Games and doesn't reflect the views or opinions of Riot Games or anyone officially involved in producing or managing Riot Games properties. Riot Games, and all associated properties are trademarks or registered trademarks of Riot Games, Inc.