rito 0.2.0 → 0.3.1

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
checksums.yaml CHANGED
@@ -1,7 +1,7 @@
1
1
  ---
2
2
  SHA256:
3
- metadata.gz: 690356f1167c30f7662373519e4806837f61a9c63f9b5ebde867bd98d435176d
4
- data.tar.gz: 9aabb8d8a1b21d828e37594b174d938898281e056994e384da1f0261bbb69d5d
3
+ metadata.gz: 6b7b56e2ebcc806ea4e657c2eaf6de65fbf5e2abcb6447a2543c9c7f88fb053f
4
+ data.tar.gz: a33ab0b69073f9864d843c857b1dd1ff47664f1ea682e75f4feaa9171f00229c
5
5
  SHA512:
6
- metadata.gz: 91ed7d221b18a711a3f4370fec9c65d6092c01048a202750c6108dadfcbb4baa2c83f58fbbe658bcdd6bd8c87380f8f54904abaca5ff62e7bc5470064658ee38
7
- data.tar.gz: 5aac876d18b27fb577889e7218689c179bc04d5fcff5c0bb657d42292f0a7b9f88900e00e8613bd3b38013d1ebb1f7a664e4cdd9e372f8cac54b10742c68e166
6
+ metadata.gz: 423b3499635cb2c42180112e470ea0dad001b38c91d35ea28cc33ef58e59ad513abb4751f4c5b39a226ed49041fff64affc5b98e689aec2cc9a60aaad4225c8e
7
+ data.tar.gz: 89c6a06c5aabad571775d23faf15dc5c316ec0cf8e8d67b3f294217fd4249c337867e833524a0953002d34b45a93948b65c175184a6c09e108895681c8cfe18b
data/CHANGELOG.md CHANGED
@@ -1,5 +1,58 @@
1
1
  # Changelog
2
2
 
3
+ ## 0.3.1 (2026-09-05)
4
+
5
+ Fixed endpoint diffs against the current riotapi-schema (last generated
6
+ 2026-08-05):
7
+
8
+ - **val-console-match-v1 paths were wrong** (`/val/console/match/v1/...` →
9
+ `/val/match/console/v1/...`) — every console match call would 404.
10
+ The matchlist now sends the required `platformType` query param
11
+ (`ids_by_puuid` gained a required `platform_type:` keyword) and
12
+ `recent_by_queue` was added (GET recent-matches/by-queue).
13
+ - TFT match `ids_by_puuid` gained `start_time:` / `end_time:` params.
14
+ - TFT league `challenger` / `grandmaster` / `master` gained an optional
15
+ `queue:` param.
16
+ - `apac` is now a valid regional (lor-match-v1).
17
+ - The Riftbound endpoint class moved out of the LoR file into its own
18
+ `endpoints/riftbound.rb` (no API change).
19
+ - CI: GitHub releases now use the tagged version's CHANGELOG section as
20
+ the release body instead of auto-generated notes.
21
+
22
+ ## 0.3.0 (2026-09-05)
23
+
24
+ Aligned the endpoint surface with the current Riot API reference
25
+ (cross-checked against riotapi-schema). **Breaking:** phantom endpoints
26
+ Riot has removed were dropped, and outdated paths were corrected.
27
+
28
+ - **Removed (no longer in the API docs)**: summoner-v4 `by_name` /
29
+ `by_account_id` / `by_summoner_id`; TFT summoner `by_account_id` /
30
+ `by_summoner_id`; spectator-v5 and spectator-tft-v5 `featured_games`;
31
+ league-v4 `league(leagueId)` and `entries_by_summoner_id`; TFT league
32
+ `entries_by_summoner_id`; clash `players_by_summoner_id`; LoR
33
+ `decks.deck(deck_id)`; tournament-stub `update_code`.
34
+ - **Renamed/fixed paths**: spectator active games (`by-summoner-id` →
35
+ `by-summoner/{puuid}`, TFT: `by-puuid/{puuid}`), TFT league routing is
36
+ platform (`na1`), not regional; tournament-v5/stub code paths
37
+ (`codes/by-code/{code}` → `codes/{code}`); challenges leaderboard param
38
+ `top`/`page` → `limit`.
39
+ - **Added**: `lol-rso-match-v1` (`client.rso_matches` — RSO bearer token;
40
+ `ids`, `by_id`, `timeline_by_id`), `val-console-ranked-v1`
41
+ (`client.val.console_ranked` with required `platform_type:`),
42
+ match-v5 `replays`, tournament-v5 `games_by_code`, clash
43
+ `tournament(tournamentId)`, league-v4 `entries_by_puuid`, TFT league
44
+ `entries_by_puuid` / `entries(tier, division)`, challenges
45
+ `challenge_config` / `challenge_percentiles`, summoner-v4 `me` (RSO),
46
+ LoR `decks.create_deck` (POST).
47
+ - **Queues reference**: `Rito::Queues` — frozen snapshot of the League
48
+ client's game select data (408 queue ids) with name, description,
49
+ category (`:pvp` / `:bots` / `:custom`), mode, limited-time and bot
50
+ flags; `MatchInfo#queue` resolves a match's `queueId`.
51
+ - **Routing**: VALORANT platform `na1` → `na`; VALORANT platforms accept
52
+ `esports` (content/match only) and console accepts `br`/`latam`
53
+ (console match); dropped dead `ph2`/`th2`; added `pbe1` (challenges,
54
+ status) and `esports`/`esportseu` regionals (tft-match-v1).
55
+
3
56
  ## 0.2.0 (2026-09-05)
4
57
 
5
58
  - **Riot Sign On (RSO)**: new `Rito::RSO` module implementing the OAuth2
data/README.md CHANGED
@@ -44,6 +44,28 @@ Rito.rate_limiter # rate limit strategy (default: AdaptiveLimiter)
44
44
  client = Rito::Client.new(api_key: "RGAPI-...", region: :kr)
45
45
  ```
46
46
 
47
+ ## Queues
48
+
49
+ `Rito::Queues` is a frozen, built-in reference for League queue ids as
50
+ they appear in match data (match-v5 `queueId`, the `queue` filter on
51
+ match lists). Snapshot of the League client's game select data (408 ids).
52
+
53
+ ```ruby
54
+ Rito::Queues.find(420).name # => "Ranked Solo/Duo"
55
+ Rito::Queues[450].mode # => :aram
56
+ Rito::Queues.find(2450).limited_time # => true (rotating game mode)
57
+ Rito::Queues.select { |q| q.category == :bots }.map(&:name).first(3)
58
+
59
+ match = client.matches.by_id("NA1_123")
60
+ match.info.queue.name # => "Ranked Flex" (convenience on MatchInfo)
61
+ ```
62
+
63
+ Each queue is a frozen `Data` object: `id`, `name`, `short_name`,
64
+ `description`, `detailed_description`, `category` (`:pvp`, `:bots`,
65
+ `:custom`), `mode` (`:summoners_rift`, `:aram`, `:tft`, `:jade`,
66
+ `:other`), `limited_time`, `bot_honoring_allowed`. The module includes
67
+ `Enumerable`. Unknown ids return `nil` (Riot adds queues without notice).
68
+
47
69
  ## Riot Sign On (RSO)
48
70
 
49
71
  `Rito::RSO` implements the OAuth2 authorization code flow against
@@ -199,9 +221,10 @@ entry.raw # => full payload hash
199
221
 
200
222
  | Accessor | API |
201
223
  | --- | --- |
202
- | `client.account` | account-v1 |
203
- | `client.summoner` | summoner-v4 |
204
- | `client.matches` | match-v5 (matches, matchlist, timeline) |
224
+ | `client.account` | account-v1 (accounts, active shards, region, `me` for RSO) |
225
+ | `client.summoner` | summoner-v4 (`by_puuid`, `me` for RSO) |
226
+ | `client.matches` | match-v5 (matches, matchlist, timeline, replays) |
227
+ | `client.rso_matches` | lol-rso-match-v1 (RSO bearer token; player resolved from the token) |
205
228
  | `client.champion_masteries` | champion-mastery-v4 |
206
229
  | `client.champions` | champion-v3 (rotations) |
207
230
  | `client.leagues` / `client.league_exp` | league-v4 / league-exp-v4 |
@@ -211,12 +234,17 @@ entry.raw # => full payload hash
211
234
  | `client.challenges` | lol-challenges-v1 |
212
235
  | `client.tournaments` / `client.tournament_stub` | tournament-v5 / stub-v5 |
213
236
  | `client.tft.summoner` / `.leagues` / `.matches` / `.status` / `.spectator` | tft-summoner-v1, tft-league-v1, tft-match-v1, tft-status-v1, spectator-tft-v5 |
214
- | `client.val.content` / `.matches` / `.console_matches` / `.ranked` / `.status` | val-content-v1, val-match-v1, val-console-match-v1, val-ranked-v1, val-status-v1 |
237
+ | `client.val.content` / `.matches` / `.console_matches` / `.ranked` / `.console_ranked` / `.status` | val-content-v1, val-match-v1, val-console-match-v1, val-ranked-v1, val-console-ranked-v1, val-status-v1 |
215
238
  | `client.lor.matches` / `.ranked` / `.status` / `.decks` / `.inventory` | lor-match-v1, lor-ranked-v1, lor-status-v1, lor-deck-v1 / lor-inventory-v1 (RSO) |
216
239
  | `client.riftbound` | riftbound-content-v1 |
217
240
 
218
- Note: VALORANT uses its own platform routing values (`na1, eu, ap, kr, latam, br`;
219
- console: `na, eu, ap`) — the client validates against the right set per product.
241
+ Note: VALORANT uses its own platform routing values (`na, eu, ap, kr,
242
+ latam, br`; console: `na, eu, ap, br, latam`) — the client validates
243
+ against the right set per product. `esports` is a valid platform for
244
+ VALORANT content/match and a valid regional for tft-match-v1 (with
245
+ `esportseu`); `apac` is a valid regional for lor-match-v1. The
246
+ tournament endpoints only exist on the `americas`
247
+ platform — pass `region: :na1` or `:americas`.
220
248
 
221
249
  ## Testing your own app
222
250
 
data/lib/rito/client.rb CHANGED
@@ -32,6 +32,10 @@ module Rito
32
32
  Endpoints::Lol::MatchV5.new(self)
33
33
  end
34
34
 
35
+ def rso_matches
36
+ Endpoints::Lol::RsoMatchV1.new(self)
37
+ end
38
+
35
39
  def champion_masteries
36
40
  Endpoints::Lol::ChampionMasteryV4.new(self)
37
41
  end
@@ -10,14 +10,21 @@ module Rito
10
10
  get('/lol/challenges/v1/challenges/config', region)
11
11
  end
12
12
 
13
+ def challenge_config(challenge_id, region: nil)
14
+ get("/lol/challenges/v1/challenges/#{escape(challenge_id)}/config", region)
15
+ end
16
+
13
17
  def percentiles(region: nil)
14
18
  get('/lol/challenges/v1/challenges/percentiles', region)
15
19
  end
16
20
 
17
- def leaderboard(challenge_id, level, top: nil, page: nil, region: nil)
21
+ def challenge_percentiles(challenge_id, region: nil)
22
+ get("/lol/challenges/v1/challenges/#{escape(challenge_id)}/percentiles", region)
23
+ end
24
+
25
+ def leaderboard(challenge_id, level, limit: nil, region: nil)
18
26
  params = {}
19
- params['top'] = top if top
20
- params['page'] = page if page
27
+ params['limit'] = limit if limit
21
28
  get("/lol/challenges/v1/challenges/#{escape(challenge_id)}/leaderboards/by-level/#{escape(level)}", region,
22
29
  params: params)
23
30
  end
@@ -6,8 +6,8 @@ module Rito
6
6
  class ClashV1 < Base
7
7
  ROUTING = :platform
8
8
 
9
- def players_by_summoner_id(summoner_id, region: nil)
10
- get("/lol/clash/v1/players/by-summoner/#{escape(summoner_id)}", region)
9
+ def players_by_puuid(puuid, region: nil)
10
+ get("/lol/clash/v1/players/by-puuid/#{escape(puuid)}", region)
11
11
  end
12
12
 
13
13
  def team(team_id, region: nil)
@@ -18,6 +18,10 @@ module Rito
18
18
  get('/lol/clash/v1/tournaments', region)
19
19
  end
20
20
 
21
+ def tournament(tournament_id, region: nil)
22
+ get("/lol/clash/v1/tournaments/#{escape(tournament_id)}", region)
23
+ end
24
+
21
25
  def tournament_by_team(team_id, region: nil)
22
26
  get("/lol/clash/v1/tournaments/by-team/#{escape(team_id)}", region)
23
27
  end
@@ -24,8 +24,8 @@ module Rito
24
24
  )
25
25
  end
26
26
 
27
- def entries_by_summoner_id(summoner_id, region: nil)
28
- get("/lol/league/v4/entries/by-summoner/#{escape(summoner_id)}", region)
27
+ def entries_by_puuid(puuid, region: nil)
28
+ get("/lol/league/v4/entries/by-puuid/#{escape(puuid)}", region)
29
29
  .map { |hash| Models::LeagueEntry.from_api(hash) }
30
30
  end
31
31
 
@@ -35,12 +35,6 @@ module Rito
35
35
  get("/lol/league/v4/entries/#{escape(tier)}/#{escape(division)}", region, params: params)
36
36
  .map { |hash| Models::LeagueEntry.from_api(hash) }
37
37
  end
38
-
39
- def league(league_id, region: nil)
40
- Models::LeagueList.from_api(
41
- get("/lol/league/v4/leagues/#{escape(league_id)}", region)
42
- )
43
- end
44
38
  end
45
39
 
46
40
  class LeagueExpV4 < Base
@@ -28,6 +28,12 @@ module Rito
28
28
  def timeline_by_id(match_id, region: nil)
29
29
  get("/lol/match/v5/matches/#{escape(match_id)}/timeline", region)
30
30
  end
31
+
32
+ def replays(puuid, region: nil)
33
+ Models::Replay.from_api(
34
+ get("/lol/match/v5/matches/by-puuid/#{escape(puuid)}/replays", region)
35
+ )
36
+ end
31
37
  end
32
38
  end
33
39
  end
@@ -0,0 +1,37 @@
1
+ # frozen_string_literal: true
2
+
3
+ module Rito
4
+ module Endpoints
5
+ module Lol
6
+ # Requires the client to be configured with a bearer_token (RSO) instead
7
+ # of an API key. The player is identified by the token itself; payload
8
+ # shapes are the same as match-v5.
9
+ class RsoMatchV1 < Base
10
+ ROUTING = :regional
11
+
12
+ def ids(region: nil, start: nil, count: nil, queue: nil,
13
+ type: nil, start_time: nil, end_time: nil)
14
+ params = {}
15
+ params['start'] = start if start
16
+ params['count'] = count if count
17
+ params['queue'] = queue if queue
18
+ params['type'] = type if type
19
+ params['startTime'] = start_time if start_time
20
+ params['endTime'] = end_time if end_time
21
+
22
+ get('/lol/rso-match/v1/matches/ids', region, params: params)
23
+ end
24
+
25
+ def by_id(match_id, region: nil)
26
+ Models::Match.from_api(
27
+ get("/lol/rso-match/v1/matches/#{escape(match_id)}", region)
28
+ )
29
+ end
30
+
31
+ def timeline_by_id(match_id, region: nil)
32
+ get("/lol/rso-match/v1/matches/#{escape(match_id)}/timeline", region)
33
+ end
34
+ end
35
+ end
36
+ end
37
+ end
@@ -7,15 +7,11 @@ module Rito
7
7
  ROUTING = :platform
8
8
 
9
9
  # Returns nil when the summoner is not in an active game (HTTP 404).
10
- def active_game(summoner_id, region: nil)
11
- get("/lol/spectator/v5/active-games/by-summoner-id/#{escape(summoner_id)}", region)
10
+ def active_game(puuid, region: nil)
11
+ get("/lol/spectator/v5/active-games/by-summoner/#{escape(puuid)}", region)
12
12
  rescue NotFound
13
13
  nil
14
14
  end
15
-
16
- def featured_games(region: nil)
17
- get('/lol/spectator/v5/featured-games', region)
18
- end
19
15
  end
20
16
  end
21
17
  end
@@ -12,22 +12,9 @@ module Rito
12
12
  )
13
13
  end
14
14
 
15
- def by_name(name, region: nil)
16
- Models::Summoner.from_api(
17
- get("/lol/summoner/v4/summoners/by-name/#{escape(name)}", region)
18
- )
19
- end
20
-
21
- def by_account_id(account_id, region: nil)
22
- Models::Summoner.from_api(
23
- get("/lol/summoner/v4/summoners/by-account/#{escape(account_id)}", region)
24
- )
25
- end
26
-
27
- def by_summoner_id(summoner_id, region: nil)
28
- Models::Summoner.from_api(
29
- get("/lol/summoner/v4/summoners/#{escape(summoner_id)}", region)
30
- )
15
+ # Requires the client to be configured with a bearer_token (RSO).
16
+ def me(region: nil)
17
+ Models::Summoner.from_api(get('/lol/summoner/v4/summoners/me', region))
31
18
  end
32
19
  end
33
20
  end
@@ -8,7 +8,7 @@ module Rito
8
8
  PREFIX = '/lol/tournament/v5'
9
9
 
10
10
  def code(tournament_code, region: nil)
11
- get("#{PREFIX}/codes/by-code/#{escape(tournament_code)}", region)
11
+ get("#{PREFIX}/codes/#{escape(tournament_code)}", region)
12
12
  end
13
13
 
14
14
  def create_codes(tournament_id:, count: nil, body: {}, region: nil)
@@ -18,7 +18,11 @@ module Rito
18
18
  end
19
19
 
20
20
  def update_code(tournament_code, body: {}, region: nil)
21
- put("#{PREFIX}/codes/by-code/#{escape(tournament_code)}", region, body: body)
21
+ put("#{PREFIX}/codes/#{escape(tournament_code)}", region, body: body)
22
+ end
23
+
24
+ def games_by_code(tournament_code, region: nil)
25
+ get("#{PREFIX}/games/by-code/#{escape(tournament_code)}", region)
22
26
  end
23
27
 
24
28
  def lobby_events(tournament_code, region: nil)
@@ -39,7 +43,7 @@ module Rito
39
43
  PREFIX = '/lol/tournament-stub/v5'
40
44
 
41
45
  def code(tournament_code, region: nil)
42
- get("#{PREFIX}/codes/by-code/#{escape(tournament_code)}", region)
46
+ get("#{PREFIX}/codes/#{escape(tournament_code)}", region)
43
47
  end
44
48
 
45
49
  def create_codes(tournament_id:, count: nil, body: {}, region: nil)
@@ -48,10 +52,6 @@ module Rito
48
52
  post("#{PREFIX}/codes", region, params: params, body: body)
49
53
  end
50
54
 
51
- def update_code(tournament_code, body: {}, region: nil)
52
- put("#{PREFIX}/codes/by-code/#{escape(tournament_code)}", region, body: body)
53
- end
54
-
55
55
  def lobby_events(tournament_code, region: nil)
56
56
  get("#{PREFIX}/lobby-events/by-code/#{escape(tournament_code)}", region)
57
57
  end
@@ -39,8 +39,9 @@ module Rito
39
39
  get('/lor/deck/v1/decks/me', region)
40
40
  end
41
41
 
42
- def deck(deck_id, region: nil)
43
- get("/lor/deck/v1/decks/me/#{escape(deck_id)}", region)
42
+ # Requires the client to be configured with a bearer_token (RSO).
43
+ def create_deck(body:, region: nil)
44
+ post('/lor/deck/v1/decks/me', region, body: body)
44
45
  end
45
46
  end
46
47
 
@@ -53,16 +54,6 @@ module Rito
53
54
  end
54
55
  end
55
56
  end
56
-
57
- class Riftbound < Base
58
- ROUTING = :regional
59
-
60
- def contents(locale: nil, region: nil)
61
- params = {}
62
- params['locale'] = locale if locale
63
- get('/riftbound/content/v1/contents', region, params: params)
64
- end
65
- end
66
57
  end
67
58
 
68
59
  module Lor
@@ -0,0 +1,15 @@
1
+ # frozen_string_literal: true
2
+
3
+ module Rito
4
+ module Endpoints
5
+ class Riftbound < Base
6
+ ROUTING = :regional
7
+
8
+ def contents(locale: nil, region: nil)
9
+ params = {}
10
+ params['locale'] = locale if locale
11
+ get('/riftbound/content/v1/contents', region, params: params)
12
+ end
13
+ end
14
+ end
15
+ end
@@ -11,14 +11,6 @@ module Rito
11
11
  Models::Summoner.from_api(get("#{PREFIX}/by-puuid/#{escape(puuid)}", region))
12
12
  end
13
13
 
14
- def by_account_id(account_id, region: nil)
15
- Models::Summoner.from_api(get("#{PREFIX}/by-account/#{escape(account_id)}", region))
16
- end
17
-
18
- def by_summoner_id(summoner_id, region: nil)
19
- Models::Summoner.from_api(get("#{PREFIX}/#{escape(summoner_id)}", region))
20
- end
21
-
22
14
  # Requires the client to be configured with a bearer_token (RSO).
23
15
  def me(region: nil)
24
16
  Models::Summoner.from_api(get("#{PREFIX}/me", region))
@@ -26,26 +18,35 @@ module Rito
26
18
  end
27
19
 
28
20
  class LeagueV1 < Base
29
- ROUTING = :regional
21
+ ROUTING = :platform
22
+
23
+ def entries_by_puuid(puuid, region: nil)
24
+ get("/tft/league/v1/by-puuid/#{escape(puuid)}", region)
25
+ end
30
26
 
31
- def entries_by_summoner_id(summoner_id, queue: nil, tier: nil, division: nil, region: nil)
27
+ def entries(tier, division, queue: nil, page: nil, region: nil)
32
28
  params = {}
33
29
  params['queue'] = queue if queue
34
- params['tier'] = tier if tier
35
- params['division'] = division if division
36
- get("/tft/league/v1/entries/by-summoner/#{escape(summoner_id)}", region, params: params)
30
+ params['page'] = page if page
31
+ get("/tft/league/v1/entries/#{escape(tier)}/#{escape(division)}", region, params: params)
37
32
  end
38
33
 
39
- def challenger(region: nil)
40
- get('/tft/league/v1/challenger', region)
34
+ def challenger(queue: nil, region: nil)
35
+ params = {}
36
+ params['queue'] = queue if queue
37
+ get('/tft/league/v1/challenger', region, params: params)
41
38
  end
42
39
 
43
- def grandmaster(region: nil)
44
- get('/tft/league/v1/grandmaster', region)
40
+ def grandmaster(queue: nil, region: nil)
41
+ params = {}
42
+ params['queue'] = queue if queue
43
+ get('/tft/league/v1/grandmaster', region, params: params)
45
44
  end
46
45
 
47
- def master(region: nil)
48
- get('/tft/league/v1/master', region)
46
+ def master(queue: nil, region: nil)
47
+ params = {}
48
+ params['queue'] = queue if queue
49
+ get('/tft/league/v1/master', region, params: params)
49
50
  end
50
51
 
51
52
  def rated_ladder_top(queue, region: nil)
@@ -56,10 +57,12 @@ module Rito
56
57
  class MatchV1 < Base
57
58
  ROUTING = :regional
58
59
 
59
- def ids_by_puuid(puuid, count: nil, start: nil, region: nil)
60
+ def ids_by_puuid(puuid, count: nil, start: nil, start_time: nil, end_time: nil, region: nil)
60
61
  params = {}
61
62
  params['count'] = count if count
62
63
  params['start'] = start if start
64
+ params['startTime'] = start_time if start_time
65
+ params['endTime'] = end_time if end_time
63
66
  get("/tft/match/v1/matches/by-puuid/#{escape(puuid)}/ids", region, params: params)
64
67
  end
65
68
 
@@ -80,15 +83,11 @@ module Rito
80
83
  ROUTING = :platform
81
84
 
82
85
  # Returns nil when the summoner is not in an active game (HTTP 404).
83
- def active_game(summoner_id, region: nil)
84
- get("/tft/spectator/v5/active-games/by-summoner-id/#{escape(summoner_id)}", region)
86
+ def active_game(puuid, region: nil)
87
+ get("/lol/spectator/tft/v5/active-games/by-puuid/#{escape(puuid)}", region)
85
88
  rescue NotFound
86
89
  nil
87
90
  end
88
-
89
- def featured_games(region: nil)
90
- get('/tft/spectator/v5/featured-games', region)
91
- end
92
91
  end
93
92
  end
94
93
  end
@@ -33,11 +33,16 @@ module Rito
33
33
  ROUTING = :valorant_console_platform
34
34
 
35
35
  def by_id(match_id, region: nil)
36
- get("/val/console/match/v1/matches/#{escape(match_id)}", region)
36
+ get("/val/match/console/v1/matches/#{escape(match_id)}", region)
37
37
  end
38
38
 
39
- def ids_by_puuid(puuid, region: nil)
40
- get("/val/console/match/v1/matchlists/by-puuid/#{escape(puuid)}", region)
39
+ def ids_by_puuid(puuid, platform_type:, region: nil)
40
+ get("/val/match/console/v1/matchlists/by-puuid/#{escape(puuid)}", region,
41
+ params: { 'platformType' => platform_type })
42
+ end
43
+
44
+ def recent_by_queue(queue, region: nil)
45
+ get("/val/match/console/v1/recent-matches/by-queue/#{escape(queue)}", region)
41
46
  end
42
47
  end
43
48
 
@@ -52,6 +57,17 @@ module Rito
52
57
  end
53
58
  end
54
59
 
60
+ class ConsoleRankedV1 < Base
61
+ ROUTING = :valorant_console_platform
62
+
63
+ def leaderboard(act_id, platform_type:, size: nil, start_index: nil, region: nil)
64
+ params = { 'platformType' => platform_type }
65
+ params['size'] = size if size
66
+ params['startIndex'] = start_index if start_index
67
+ get("/val/console/ranked/v1/leaderboards/by-act/#{escape(act_id)}", region, params: params)
68
+ end
69
+ end
70
+
55
71
  class StatusV1 < Base
56
72
  ROUTING = :valorant_platform
57
73
 
@@ -80,6 +96,10 @@ module Rito
80
96
  Endpoints::Valorant::ConsoleMatchV1.new(@client)
81
97
  end
82
98
 
99
+ def console_ranked
100
+ Endpoints::Valorant::ConsoleRankedV1.new(@client)
101
+ end
102
+
83
103
  def ranked
84
104
  Endpoints::Valorant::RankedV1.new(@client)
85
105
  end
@@ -31,6 +31,10 @@ module Rito
31
31
  MatchInfo = Data.define(:game_creation, :game_duration, :game_end_timestamp,
32
32
  :game_id, :game_mode, :game_start_timestamp, :game_type,
33
33
  :game_version, :map_id, :participants, :queue_id, :raw) do
34
+ def queue
35
+ Rito::Queues.find(queue_id)
36
+ end
37
+
34
38
  def self.from_api(hash)
35
39
  return nil if hash.nil?
36
40
 
@@ -67,5 +71,15 @@ module Rito
67
71
  )
68
72
  end
69
73
  end
74
+
75
+ Replay = Data.define(:total, :match_file_urls, :raw) do
76
+ def self.from_api(hash)
77
+ new(
78
+ total: hash['total'],
79
+ match_file_urls: hash['matchFileURLs'],
80
+ raw: hash.freeze
81
+ )
82
+ end
83
+ end
70
84
  end
71
85
  end
@@ -0,0 +1,449 @@
1
+ # frozen_string_literal: true
2
+
3
+ module Rito
4
+ # Static reference for League queue ids as they appear in match data
5
+ # (match-v5 `queueId`, the `queue` filter on match lists, ...). Frozen
6
+ # snapshot of the League client's game select data.
7
+ #
8
+ # Rito::Queues.find(420).name # => "Ranked Solo/Duo"
9
+ module Queues
10
+ Queue = Data.define(
11
+ :id, :name, :short_name, :description, :detailed_description,
12
+ :category, :mode, :limited_time, :bot_honoring_allowed
13
+ )
14
+
15
+ class << self
16
+ include Enumerable
17
+
18
+ def all
19
+ QUEUES
20
+ end
21
+
22
+ def find(id)
23
+ return nil if id.nil?
24
+
25
+ INDEX[id.to_i]
26
+ end
27
+
28
+ alias [] find
29
+
30
+ def each(&)
31
+ QUEUES.each(&)
32
+ end
33
+ end
34
+
35
+ ROWS = [
36
+ [0, 'Custom', 'Custom', 'Custom', '', :pvp, :other, false, false],
37
+ [1, 'Normal', 'Normal', 'Blind Pick', 'Normal (Blind Pick)', :pvp, :other, false, false],
38
+ [2, 'Normal', 'Normal', 'Blind Pick', 'Normal (Blind Pick)', :pvp, :other, false, false],
39
+ [7, '', '', '', '', :pvp, :other, false, false],
40
+ [8, 'Normal', 'Normal', 'Blind Pick', 'Normal (Blind Pick)', :pvp, :other, false, false],
41
+ [9, 'Ranked Flex', 'Ranked Flex', 'Ranked Flex', '', :pvp, :other, false, false],
42
+ [14, 'Normal', 'Normal', 'Draft Pick', 'Normal (Draft Pick)', :pvp, :other, false, false],
43
+ [16, '', '', '', '', :pvp, :other, false, false],
44
+ [25, '', '', '', '', :pvp, :other, false, false],
45
+ [31, 'Intro', 'Intro', 'Intro', '', :pvp, :other, false, false],
46
+ [32, 'Beginner', 'Beginner', 'Beginner', '', :pvp, :other, false, false],
47
+ [33, 'Intermediate', 'Intermediate', 'Intermediate', '', :pvp, :other, false, false],
48
+ [34, 'Intro', 'Intro', 'Intro', '', :pvp, :other, false, false],
49
+ [35, 'Beginner', 'Beginner', 'Beginner', '', :pvp, :other, false, false],
50
+ [36, 'Intermediate', 'Intermediate', 'Intermediate', '', :pvp, :other, false, false],
51
+ [41, 'Team', 'Team', 'Team', '', :pvp, :other, false, false],
52
+ [42, 'Team', 'Team', 'Team', '', :pvp, :other, false, false],
53
+ [52, 'Beginner', 'Beginner', 'Beginner', '', :pvp, :other, false, false],
54
+ [61, '', '', '', '', :pvp, :other, false, false],
55
+ [62, 'ARAM', 'ARAM', 'ARAM', '', :pvp, :other, false, false],
56
+ [63, 'ARAM', 'ARAM', 'ARAM', '', :pvp, :other, false, false],
57
+ [64, 'ARAM', 'ARAM', 'ARAM', '', :pvp, :other, false, false],
58
+ [65, 'ARAM', 'ARAM', 'ARAM', '', :pvp, :other, false, false],
59
+ [72, '', '', '', '', :pvp, :other, false, false],
60
+ [73, '', '', '', '', :pvp, :other, false, false],
61
+ [75, '', '', '', '', :pvp, :other, false, false],
62
+ [83, '', '', '', '', :pvp, :other, false, false],
63
+ [90, 'The Teemoing', 'The Teemoing', 'The Teemoing', '', :pvp, :other, false, false],
64
+ [91, 'The Teemoing', 'The Teemoing', 'The Teemoing', '', :pvp, :other, false, false],
65
+ [92, 'Level 100 Gauntlet', 'Level 100 Gauntlet', 'Level 100 Gauntlet', '', :pvp, :other, false, false],
66
+ [96, 'Ascension', 'Ascension', 'Ascension', '', :pvp, :other, false, false],
67
+ [97, 'Ascension', 'Ascension', 'Ascension', '', :pvp, :other, false, false],
68
+ [100, 'Normal', 'Normal', 'Blind Pick', 'Normal (Blind Pick)', :pvp, :other, false, false],
69
+ [300, 'Legend of the Poro King', 'Poro King', 'Poro King', '', :pvp, :other, false, false],
70
+ [301, 'Legend of the Poro King', 'Poro King', 'Poro King', '', :pvp, :other, false, false],
71
+ [310, '', '', '', '', :pvp, :other, false, false],
72
+ [314, 'Nexus Siege', 'Nexus Siege', 'Nexus Siege', '', :pvp, :other, false, false],
73
+ [315, 'Nexus Siege', 'Nexus Siege', 'Nexus Siege', '', :pvp, :other, false, false],
74
+ [316, 'Definitely Not Dominion', 'Definitely Not Dominion', 'Definitely Not Dominion', '', :pvp, :other, false, false],
75
+ [317, 'Definitely Not Dominion', 'Definitely Not Dominion', 'Definitely Not Dominion', '', :pvp, :other, false, false],
76
+ [318, 'AR Ultra Rapid Fire', 'ARURF', 'AR Ultra Rapid Fire', '', :pvp, :other, false, false],
77
+ [319, 'AR Ultra Rapid Fire', 'ARURF', 'AR Ultra Rapid Fire', '', :pvp, :other, false, false],
78
+ [320, 'Blood Moon', 'Blood Moon', 'Blood Moon', '', :pvp, :other, false, false],
79
+ [321, 'Blood Moon', 'Blood Moon', 'Blood Moon', '', :pvp, :other, false, false],
80
+ [324, 'ARSR', 'ARSR', 'ARSR', '', :pvp, :other, false, false],
81
+ [325, 'ARSR', 'ARSR', 'ARSR', '', :pvp, :other, false, false],
82
+ [400, 'Normal', 'Normal', 'Draft Pick', 'Normal (Draft Pick)', :pvp, :summoners_rift, false, false],
83
+ [401, 'Normal', 'Normal', 'Draft Pick', 'Normal (Draft Pick)', :pvp, :summoners_rift, false, false],
84
+ [402, 'Normal', 'Normal', 'Draft Pick', 'Normal (Draft Pick)', :pvp, :summoners_rift, false, false],
85
+ [403, 'Normal', 'Normal', 'Draft Pick', 'Normal (Draft Pick)', :pvp, :summoners_rift, false, false],
86
+ [410, 'Ranked', 'Ranked', 'Ranked Draft', '', :pvp, :other, false, false],
87
+ [411, 'Ranked', 'Ranked', 'Ranked Draft', '', :pvp, :other, false, false],
88
+ [412, 'Ranked', 'Ranked', 'Ranked Draft', '', :pvp, :other, false, false],
89
+ [413, 'Ranked', 'Ranked', 'Ranked Draft', '', :pvp, :other, false, false],
90
+ [420, 'Ranked Solo/Duo', 'Ranked Solo/Duo', 'Ranked Solo/Duo', '', :pvp, :summoners_rift, false, false],
91
+ [421, 'Ranked Solo/Duo', 'Ranked Solo/Duo', 'Ranked Solo/Duo', '', :pvp, :summoners_rift, false, false],
92
+ [422, 'Ranked Solo/Duo', 'Ranked Solo/Duo', 'Ranked Solo/Duo', '', :pvp, :summoners_rift, false, false],
93
+ [430, 'Normal', 'Normal', 'Blind Pick', 'Normal (Blind Pick)', :pvp, :summoners_rift, false, false],
94
+ [431, 'Normal', 'Normal', 'Blind Pick', '', :pvp, :summoners_rift, false, false],
95
+ [432, 'Normal', 'Normal', 'Blind Pick', '', :pvp, :summoners_rift, false, false],
96
+ [433, 'Normal', 'Normal', 'Blind Pick', 'Normal (Blind Pick)', :pvp, :summoners_rift, false, false],
97
+ [440, 'Ranked Flex', 'Ranked Flex', 'Ranked Flex', '', :pvp, :summoners_rift, false, false],
98
+ [441, 'Ranked Flex', 'Ranked Flex', 'Ranked Flex', '', :pvp, :summoners_rift, false, false],
99
+ [442, 'Ranked Flex', 'Ranked Flex', 'Ranked Flex', '', :pvp, :summoners_rift, false, false],
100
+ [450, 'ARAM', 'ARAM', 'ARAM', '', :pvp, :aram, false, false],
101
+ [451, '3v3', '3v3', '3v3', '', :pvp, :aram, false, false],
102
+ [452, '1v1', '1v1', '1v1', '', :pvp, :aram, false, false],
103
+ [460, 'Normal', 'Normal', 'Blind Pick', 'Normal (Blind Pick)', :pvp, :other, false, false],
104
+ [461, 'Twisted Treeline 1v1', 'Twisted Treeline 1v1', 'Twisted Treeline 1v1', 'Twisted Treeline 1v1', :pvp, :other, false, false],
105
+ [470, 'Ranked Flex', 'Ranked Flex', 'Ranked Flex', '', :pvp, :other, false, false],
106
+ [480, 'Swiftplay', 'Swiftplay', 'Swiftplay', 'Normal (Swiftplay)', :pvp, :summoners_rift, false, false],
107
+ [481, '', '', '', '', :pvp, :other, false, false],
108
+ [482, '', '', '', '', :pvp, :other, false, false],
109
+ [483, '', '', '', '', :pvp, :other, false, false],
110
+ [490, 'Quickplay', 'Quickplay', 'Quickplay', 'Normal (Quickplay)', :pvp, :summoners_rift, false, false],
111
+ [491, '', '', '', '', :pvp, :other, false, false],
112
+ [492, '', '', '', '', :pvp, :other, false, false],
113
+ [493, '', '', '', '', :pvp, :other, false, false],
114
+ [501, '', '', '', '', :pvp, :other, false, false],
115
+ [502, '', '', '', '', :pvp, :other, false, false],
116
+ [600, 'Blood Moon', 'Blood Moon', 'Blood Moon', '', :pvp, :other, false, false],
117
+ [601, 'Blood Moon', 'Blood Moon', 'Blood Moon', '', :pvp, :other, false, false],
118
+ [610, 'Dark Star: Singularity', 'Dark Star', 'Dark Star: Singularity', '', :pvp, :other, false, false],
119
+ [611, 'Dark Star: Singularity', 'Dark Star', 'Dark Star: Singularity', '', :pvp, :other, false, false],
120
+ [700, 'Clash', 'Clash', 'Clash', '', :pvp, :summoners_rift, false, false],
121
+ [701, 'Clash', 'Clash', 'Clash', '', :pvp, :summoners_rift, false, false],
122
+ [702, '', '', '', '', :pvp, :other, false, false],
123
+ [710, 'Ranked 5s', 'Ranked 5s', 'Ranked 5s', '', :pvp, :summoners_rift, false, false],
124
+ [720, 'Clash', 'Clash', 'Clash', '', :pvp, :aram, false, false],
125
+ [721, 'Clash', 'Clash', 'Clash', '', :pvp, :aram, false, false],
126
+ [740, 'AR Ultra Rapid Fire Clash', 'ARURF Clash', 'AR Ultra Rapid Fire Clash', '', :pvp, :other, false, false],
127
+ [741, 'AR Ultra Rapid Fire Clash', 'ARURF Clash', 'AR Ultra Rapid Fire Clash', '', :pvp, :other, false, false],
128
+ [800, 'Intermediate', 'Intermediate', 'Intermediate', '', :bots, :summoners_rift, false, false],
129
+ [801, 'Co-op vs. AI', 'Co-op vs. AI', 'Co-op vs. AI', '', :bots, :summoners_rift, false, false],
130
+ [810, 'Intro', 'Intro', 'Intro', '', :bots, :summoners_rift, false, false],
131
+ [820, 'Beginner', 'Beginner', 'Beginner', '', :bots, :summoners_rift, false, false],
132
+ [830, 'Intro', 'Intro', 'Intro', '', :bots, :summoners_rift, false, false],
133
+ [831, 'Bots Intro 3v3', 'Bots Intro 3v3', 'Bots Intro 3v3', 'Bots Intro 3v3', :bots, :summoners_rift, false, false],
134
+ [832, 'Bots Intro 1v1', 'Bots Intro 1v1', 'Bots Intro 1v1', 'Bots Intro 1v1', :bots, :summoners_rift, false, false],
135
+ [840, 'Beginner', 'Beginner', 'Beginner', '', :bots, :summoners_rift, false, false],
136
+ [841, 'Bots Easy 3v3', 'Bots Easy 3v3', 'Bots Easy 3v3', 'Bots Easy 3v3', :bots, :summoners_rift, false, false],
137
+ [842, 'Bots Easy 1v1', 'Bots Easy 1v1', 'Bots Easy 1v1', 'Bots Easy 1v1', :bots, :summoners_rift, false, false],
138
+ [850, 'Intermediate', 'Intermediate', 'Intermediate', '', :bots, :summoners_rift, false, false],
139
+ [851, 'Bots Medium 3v3', 'Bots Medium 3v3', 'Bots Medium 3v3', 'Bots Medium 3v3', :bots, :summoners_rift, false, false],
140
+ [852, 'Bots Medium 1v1', 'Bots Medium 1v1', 'Bots Medium 1v1', 'Bots Medium 1v1', :bots, :summoners_rift, false, false],
141
+ [860, 'ARAM 5v5 Bots', 'ARAM 5v5 Bots', 'ARAM 5v5 Bots', 'ARAM 5v5 Bots', :bots, :aram, false, false],
142
+ [861, 'ARAM 1v1 Bots', 'ARAM 1v1 Bots', 'ARAM 1v1 Bots', 'ARAM 1v1 Bots', :pvp, :aram, false, false],
143
+ [862, '', '', '', '', :pvp, :other, false, false],
144
+ [865, '', '', '', '', :pvp, :other, false, false],
145
+ [870, 'Intro', 'Intro', 'Intro', 'Intro', :bots, :summoners_rift, false, false],
146
+ [880, 'Beginner', 'Beginner', 'Beginner', 'Beginner', :bots, :summoners_rift, false, false],
147
+ [890, 'Intermediate', 'Intermediate', 'Intermediate', 'Intermediate', :bots, :summoners_rift, false, false],
148
+ [891, '', '', '', '', :pvp, :other, false, false],
149
+ [893, 'Bots Easy 1v1', 'Bots Easy 1v1', 'Bots Easy 1v1', 'Bots Easy 1v1', :bots, :summoners_rift, false, false],
150
+ [894, '', '', '', '', :pvp, :other, false, false],
151
+ [900, 'AR Ultra Rapid Fire', 'ARURF', 'AR Ultra Rapid Fire', '', :pvp, :other, false, false],
152
+ [901, 'Test : ARURF 1v1', 'Test : ARURF 1v1', 'Test : ARURF 1v1', '', :pvp, :other, false, false],
153
+ [902, 'Test: ARURF 2v2', 'Test: ARURF 2v2', 'Test: ARURF 2v2', '', :pvp, :other, false, false],
154
+ [903, 'Test: ARURF 3v3', 'Test: ARURF 3v3', 'Test: ARURF 3v3', '', :pvp, :other, false, false],
155
+ [904, 'Test: ARURF 4v4', 'Test: ARURF 4v4', 'Test: ARURF 4v4', '', :pvp, :other, false, false],
156
+ [905, 'Test: ARURF 5v5 - SYD', 'Test: ARURF 5v5 - SYD', 'Test: ARURF 5v5 - SYD', '', :pvp, :other, false, false],
157
+ [906, 'Test: ARURF 1v1 - SYD', 'Test: ARURF 1v1 - SYD', 'Test: ARURF 1v1 - SYD', '', :pvp, :other, false, false],
158
+ [907, 'Test: ARURF 2v2 - SYD', 'Test: ARURF 2v2 - SYD', 'Test: ARURF 2v2 - SYD', '', :pvp, :other, false, false],
159
+ [908, 'Test: ARURF 3v3 - SYD', 'Test: ARURF 3v3 - SYD', 'Test: ARURF 3v3 - SYD', '', :pvp, :other, false, false],
160
+ [909, 'Test: ARURF 4v4 - SYD', 'Test: ARURF 4v4 - SYD', 'Test: ARURF 4v4 - SYD', '', :pvp, :other, false, false],
161
+ [910, 'Ascension', 'Ascension', 'Ascension', '', :pvp, :other, false, false],
162
+ [911, 'Test: ARURF 1v0 - SYD', 'Test: ARURF 1v0 - SYD', 'Test: ARURF 1v0 - SYD', '', :pvp, :other, false, false],
163
+ [920, 'Legend of the Poro King', 'Poro King', 'Poro King', '', :pvp, :other, false, false],
164
+ [921, 'Legend of the Poro King', 'Poro King', 'Poro King', '', :pvp, :other, false, false],
165
+ [930, 'ARAM', 'ARAM', 'ARAM', '', :pvp, :aram, false, false],
166
+ [931, 'ARAM', 'ARAM', 'ARAM', '', :pvp, :aram, false, false],
167
+ [940, 'Nexus Siege', 'Nexus Siege', 'Nexus Siege', '', :pvp, :other, false, false],
168
+ [941, 'Nexus Siege', 'Nexus Siege', 'Nexus Siege', '', :pvp, :other, false, false],
169
+ [950, 'Level 100 Gauntlet', 'Level 100 Gauntlet', 'Level 100 Gauntlet', '', :pvp, :other, false, false],
170
+ [951, 'Level 100 Gauntlet', 'Level 100 Gauntlet', 'Level 100 Gauntlet', '', :pvp, :other, false, false],
171
+ [960, 'The Teemoing', 'The Teemoing', 'The Teemoing', '', :pvp, :other, false, false],
172
+ [961, 'The Teemoing', 'The Teemoing', 'The Teemoing', '', :pvp, :other, false, false],
173
+ [970, 'Hexakill', 'Hexakill', 'Hexakill', '', :pvp, :other, false, false],
174
+ [971, 'Hexakill 1v1', 'Hexakill 1v1', 'Hexakill 1v1', 'Hexakill 1v1', :pvp, :other, false, false],
175
+ [980, 'Invasion (Normal)', 'Invasion (Normal)', 'Normal', 'Invasion (Normal)', :pvp, :other, false, false],
176
+ [981, 'Invasion (Normal)', 'Invasion (Normal)', 'Normal', 'Invasion (Normal)', :pvp, :other, false, false],
177
+ [982, 'Invasion (Normal)', 'Invasion (Normal)', 'Normal', 'Invasion (Normal)', :pvp, :other, false, false],
178
+ [990, 'Invasion (Onslaught)', 'Invasion (Onslaught)', 'Onslaught', 'Invasion (Onslaught)', :pvp, :other, false, false],
179
+ [1000, 'Overcharge', 'Overcharge', 'Overcharge', '', :pvp, :other, false, false],
180
+ [1001, 'Overcharge', 'Overcharge', 'Overcharge', '', :pvp, :other, false, false],
181
+ [1010, 'Snow Battle ARURF', 'Snow ARURF', 'Snow Battle ARURF', '', :pvp, :other, false, false],
182
+ [1011, 'Snow Battle ARURF', 'Snow ARURF', 'Snow Battle ARURF', '', :pvp, :other, false, false],
183
+ [1012, 'Snow Battle ARURF', 'Snow ARURF', 'Snow Battle ARURF', '', :pvp, :other, false, false],
184
+ [1020, 'One For All', 'One For All', 'One For All', '', :pvp, :other, false, false],
185
+ [1021, '1v1', '1v1', '1v1', '', :pvp, :other, false, false],
186
+ [1022, '3v3', '3v3', '3v3', '', :pvp, :other, false, false],
187
+ [1023, '2v2', '2v2', '2v2', '', :pvp, :other, false, false],
188
+ [1024, '4v4', '4v4', '4v4', '', :pvp, :other, false, false],
189
+ [1030, 'Odyssey (Intro)', 'Odyssey (Intro)', 'Intro', 'Odyssey (Intro)', :pvp, :other, false, false],
190
+ [1031, 'Odyssey Intro 1v0', 'Odyssey Intro 1v0', 'Odyssey Intro 1v0', 'Odyssey Intro 1v0', :pvp, :other, false, false],
191
+ [1032, 'Odyssey Intro 3v0', 'Odyssey Intro 3v0', 'Odyssey Intro 3v0', 'Odyssey Intro 3v0', :pvp, :other, false, false],
192
+ [1040, 'Odyssey (Cadet)', 'Odyssey (Cadet)', 'Cadet', 'Odyssey (Cadet)', :pvp, :other, false, false],
193
+ [1041, 'Odyssey Easy 1v0', 'Odyssey Easy 1v0', 'Odyssey Easy 1v0', 'Odyssey Easy 1v0', :pvp, :other, false, false],
194
+ [1050, 'Odyssey (Crewmember)', 'Odyssey (Crewmember)', 'Crewmember', 'Odyssey (Crewmember)', :pvp, :other, false, false],
195
+ [1051, 'Odyssey Medium 1v0', 'Odyssey Medium 1v0', 'Odyssey Medium 1v0', 'Odyssey Medium 1v0', :pvp, :other, false, false],
196
+ [1060, 'Odyssey (Captain)', 'Odyssey (Captain)', 'Captain', 'Odyssey (Captain)', :pvp, :other, false, false],
197
+ [1061, 'Odyssey Hard 1v0', 'Odyssey Hard 1v0', 'Odyssey Hard 1v0', 'Odyssey Hard 1v0', :pvp, :other, false, false],
198
+ [1070, 'Odyssey (Onslaught)', 'Odyssey (Onslaught)', 'Onslaught', 'Odyssey (Onslaught)', :pvp, :other, false, false],
199
+ [1071, 'Odyssey Uber 1v0', 'Odyssey Uber 1v0', 'Odyssey Uber 1v0', 'Odyssey Uber 1v0', :pvp, :other, false, false],
200
+ [1090, 'Teamfight Tactics (Normal)', 'Teamfight Tactics (Normal)', 'Normal', 'Teamfight Tactics (Normal)', :pvp, :tft, false, false],
201
+ [1091, '1v0', '1v0', '1v0', '', :pvp, :tft, false, false],
202
+ [1092, '2v0', '2v0', '2v0', '', :pvp, :tft, false, false],
203
+ [1093, '3v0', '3v0', '3v0', '', :pvp, :tft, false, false],
204
+ [1094, '4v0', '4v0', '4v0', '', :pvp, :tft, false, false],
205
+ [1095, '1v7 Bots', '1v7 Bots', '1v7 Bots', '', :pvp, :tft, false, false],
206
+ [1100, 'Teamfight Tactics (Ranked)', 'Teamfight Tactics (Ranked)', 'Ranked', 'Teamfight Tactics (Ranked)', :pvp, :tft, false, false],
207
+ [1101, '1v0 (Ranked)', '1v0 (Ranked)', '1v0 (Ranked)', '', :pvp, :tft, false, false],
208
+ [1102, '2v0 (Ranked)', '2v0 (Ranked)', '2v0 (Ranked)', '', :pvp, :tft, false, false],
209
+ [1110, 'Teamfight Tactics (Tutorial)', 'Teamfight Tactics (Tutorial)', 'Tutorial', '', :pvp, :tft, false, false],
210
+ [1111, 'TFT Simulation', 'TFT Simulation', 'Simulation', '', :pvp, :tft, false, false],
211
+ [1112, 'TFT Simulation (Automated Testing)', 'TFT Simulation (Automated Testing)', 'Simulation (Auto Testing)', '', :pvp, :tft, false, false],
212
+ [1120, 'Teamfight Tactics (Normal Hyper Roll)', 'Teamfight Tactics (Normal Hyper Roll)', 'Normal Hyper Roll', 'Teamfight Tactics (Normal Hyper Roll)', :pvp, :tft, false, false],
213
+ [1121, '1v0 (Normal Hyper Roll)', '1v0 (Normal Hyper Roll)', '1v0 (Normal Hyper Roll)', '', :pvp, :tft, false, false],
214
+ [1122, '2v0 (Normal Hyper Roll)', '2v0 (Normal Hyper Roll)', '2v0 (Normal Hyper Roll)', '', :pvp, :tft, false, false],
215
+ [1130, 'Teamfight Tactics (Hyper Roll)', 'Teamfight Tactics (Hyper Roll)', 'Hyper Roll', 'Teamfight Tactics (Hyper Roll)', :pvp, :tft, false, false],
216
+ [1131, '1v0 (Hyper Roll)', '1v0 (Hyper Roll)', '1v0 (Hyper Roll)', '', :pvp, :tft, false, false],
217
+ [1132, '2v0 (Hyper Roll)', '2v0 (Hyper Roll)', '2v0 (Hyper Roll)', '', :pvp, :tft, false, false],
218
+ [1133, '3v0 (Hyper Roll)', '3v0 (Hyper Roll)', '3v0 (Hyper Roll)', '', :pvp, :tft, false, false],
219
+ [1135, '1v7 (Hyper Roll)', '1v7 (Hyper Roll)', '1v7 (Hyper Roll)', '', :pvp, :tft, false, false],
220
+ [1140, 'Teamfight Tactics (Normal Double Up)', 'Teamfight Tactics (Normal Double Up)', 'Normal Double Up', 'Teamfight Tactics (Normal Double Up)', :pvp, :tft, false, false],
221
+ [1141, 'Teamfight Tactics (Double Up 1v7 Bots)', 'Teamfight Tactics (Double Up 1v7 Bots)', '1v7 Bots (Double Up)', 'Teamfight Tactics (Double Up 1v7 Bots)', :pvp, :tft, false, false],
222
+ [1142, '2v0 (Normal Double Up)', '2v0 (Normal Double Up)', '2v0 (Normal Double Up)', '2v0 (Normal Double Up)', :pvp, :tft, false, false],
223
+ [1143, '4v0 (Normal Double Up)', '4v0 (Normal Double Up)', '4v0 (Normal Double Up)', '4v0 (Normal Double Up)', :pvp, :tft, false, false],
224
+ [1150, 'Teamfight Tactics (Double Up)', 'Teamfight Tactics (Double Up)', 'Double Up', 'Teamfight Tactics (Double Up)', :pvp, :tft, false, false],
225
+ [1151, '2v0 (Double Up)', '2v0 (Double Up)', '2v0 (Double Up)', '2v0 (Double Up)', :pvp, :tft, false, false],
226
+ [1152, '4v0 (Double Up)', '4v0 (Double Up)', '4v0 (Double Up)', '4v0 (Double Up)', :pvp, :tft, false, false],
227
+ [1160, 'Teamfight Tactics (Double Up)', 'Teamfight Tactics (Double Up)', 'Double Up', 'Teamfight Tactics (Double Up)', :pvp, :tft, false, false],
228
+ [1161, '2v0 (Double Up)', '2v0 (Double Up)', '2v0 (Double Up)', '2v0 (Double Up)', :pvp, :tft, false, false],
229
+ [1162, '4v0 (Double Up)', '4v0 (Double Up)', '4v0 (Double Up)', '4v0 (Double Up)', :pvp, :tft, false, false],
230
+ [1170, 'Teamfight Tactics (Fortune\'s Favor)', 'Teamfight Tactics (Fortune\'s Favor)', 'Fortune\'s Favor', 'Teamfight Tactics (Fortune\'s Favor)', :pvp, :tft, false, false],
231
+ [1171, '1v0 (Fortune\'s Favor)', '1v0 (Fortune\'s Favor)', '1v0 (Fortune\'s Favor)', '1v0 (Fortune\'s Favor)', :pvp, :tft, false, false],
232
+ [1172, '2v0 (Fortune\'s Favor)', '2v0 (Fortune\'s Favor)', '2v0 (Fortune\'s Favor)', '2v0 (Fortune\'s Favor)', :pvp, :tft, false, false],
233
+ [1175, '1v7 Bots (Fortune\'s Favor)', '1v7 Bots (Fortune\'s Favor)', '1v7 Bots (Fortune\'s Favor)', '1v7 Bots (Fortune\'s Favor)', :pvp, :tft, false, false],
234
+ [1180, 'Teamfight Tactics (Soul Brawl)', 'Teamfight Tactics (Soul Brawl)', 'Soul Brawl', 'Teamfight Tactics (Soul Brawl)', :pvp, :tft, false, false],
235
+ [1181, '1v0 (Soul Brawl)', '1v0 (Soul Brawl)', '1v0 (Soul Brawl)', '1v0 (Soul Brawl)', :pvp, :tft, false, false],
236
+ [1182, '2v0 (Soul Brawl)', '2v0 (Soul Brawl)', '2v0 (Soul Brawl)', '2v0 (Soul Brawl)', :pvp, :tft, false, false],
237
+ [1185, '1v7 Bots (Soul Brawl)', '1v7 Bots (Soul Brawl)', '1v7 Bots (Soul Brawl)', '1v7 Bots (Soul Brawl)', :pvp, :tft, false, false],
238
+ [1190, 'Teamfight Tactics (Choncc\'s Classic Treasure)', 'Teamfight Tactics (Choncc\'s Classic Treasure)', 'Choncc\'s Classic Treasure', 'Teamfight Tactics (Choncc\'s Classic Treasure)', :pvp, :tft, false, false],
239
+ [1191, '1v0 (Choncc\'s Classic Treasure)', '1v0 (Choncc\'s Classic Treasure)', '1v0 (Choncc\'s Classic Treasure)', '1v0 (Choncc\'s Classic Treasure)', :pvp, :tft, false, false],
240
+ [1192, '2v0 (Choncc\'s Classic Treasure)', '2v0 (Choncc\'s Classic Treasure)', '2v0 (Choncc\'s Classic Treasure)', '2v0 (Choncc\'s Classic Treasure)', :pvp, :tft, false, false],
241
+ [1195, '1v7 Bots (Choncc\'s Treasure)', '1v7 Bots (Choncc\'s Treasure)', '1v7 Bots (Choncc\'s Treasure)', '1v7 Bots (Choncc\'s Treasure)', :pvp, :tft, false, false],
242
+ [1200, 'Nexus Blitz', 'Nexus Blitz', 'Blind Pick', '', :pvp, :other, false, false],
243
+ [1201, '1v1', '1v1', '1v1', '1v1', :pvp, :other, false, false],
244
+ [1210, 'Teamfight Tactics (Choncc\'s Classic Treasure)', 'Teamfight Tactics (Choncc\'s Classic Treasure)', 'Choncc\'s Classic Treasure', 'Teamfight Tactics (Choncc\'s Classic Treasure)', :pvp, :tft, false, false],
245
+ [1211, '1v0 (Choncc\'s Classic Treasure)', '1v0 (Choncc\'s Classic Treasure)', '1v0 (Choncc\'s Classic Treasure)', '1v0 (Choncc\'s Classic Treasure)', :pvp, :tft, false, false],
246
+ [1212, '2v0 (Choncc\'s Classic Treasure)', '2v0 (Choncc\'s Classic Treasure)', '2v0 (Choncc\'s Classic Treasure)', '2v0 (Choncc\'s Classic Treasure)', :pvp, :tft, false, false],
247
+ [1220, 'Tocker\'s Trials', 'Tocker\'s Trials', 'Tocker\'s Trials', 'Tocker\'s Trials', :pvp, :tft, false, false],
248
+ [1271, '', '', '', '', :pvp, :other, false, false],
249
+ [1272, '', '', '', '', :pvp, :other, false, false],
250
+ [1275, '', '', '', '', :pvp, :other, false, false],
251
+ [1300, 'Nexus Blitz', 'Nexus Blitz', 'Blind Pick', '', :pvp, :other, false, false],
252
+ [1301, '1v1', '1v1', '1v1', '1v1', :pvp, :other, false, false],
253
+ [1400, 'Ultimate Spellbook', 'Ultimate Spellbook', 'Ultimate Spellbook', '', :pvp, :other, false, false],
254
+ [1401, 'UltBook 1v1', 'UltBook 1v1', 'UltBook 1v1', 'UltBook 1v1', :pvp, :other, false, false],
255
+ [1402, 'UltBook 2v2', 'UltBook 2v2', 'UltBook 2v2', 'UltBook 2v2', :pvp, :other, false, false],
256
+ [1403, 'UltBook 3v3', 'UltBook 3v3', 'UltBook 3v3', 'UltBook 3v3', :pvp, :other, false, false],
257
+ [1404, 'UltBook 4v4', 'UltBook 4v4', 'UltBook 4v4', 'UltBook 4v4', :pvp, :other, false, false],
258
+ [1405, 'UltBook OCE 5v5', 'UltBook OCE 5v5', 'UltBook OCE 5v5', 'UltBook OCE 5v5', :pvp, :other, false, false],
259
+ [1406, 'UltBook OCE 1v1', 'UltBook OCE 1v1', 'UltBook OCE 1v1', 'UltBook OCE 1v1', :pvp, :other, false, false],
260
+ [1408, 'UltBook OCE 3v3', 'UltBook OCE 3v3', 'UltBook OCE 3v3', 'UltBook OCE 3v3', :pvp, :other, false, false],
261
+ [1409, 'UltBook OCE 4v4', 'UltBook OCE 4v4', 'UltBook OCE 4v4', 'UltBook OCE 4v4', :pvp, :other, false, false],
262
+ [1411, 'UltBook 1v0', 'UltBook 1v0', 'UltBook 1v0', 'UltBook 1v0', :pvp, :other, false, false],
263
+ [1412, 'UltBook OCE 1v0', 'UltBook OCE 1v0', 'UltBook OCE 1v0', 'UltBook OCE 1v0', :pvp, :other, false, false],
264
+ [1601, '', '', '', '', :pvp, :other, false, false],
265
+ [1602, '', '', '', '', :pvp, :other, false, false],
266
+ [1603, '', '', '', '', :pvp, :other, false, false],
267
+ [1604, '', '', '', '', :pvp, :other, false, false],
268
+ [1605, '', '', '', '', :pvp, :other, false, false],
269
+ [1606, '', '', '', '', :pvp, :other, false, false],
270
+ [1607, '', '', '', '', :pvp, :other, false, false],
271
+ [1608, '', '', '', '', :pvp, :other, false, false],
272
+ [1609, '', '', '', '', :pvp, :other, false, false],
273
+ [1611, '', '', '', '', :pvp, :other, false, false],
274
+ [1612, '', '', '', '', :pvp, :other, false, false],
275
+ [1613, '', '', '', '', :pvp, :other, false, false],
276
+ [1614, '', '', '', '', :pvp, :other, false, false],
277
+ [1615, '', '', '', '', :pvp, :other, false, false],
278
+ [1616, '', '', '', '', :pvp, :other, false, false],
279
+ [1617, '', '', '', '', :pvp, :other, false, false],
280
+ [1618, '', '', '', '', :pvp, :other, false, false],
281
+ [1700, 'Arena', 'Arena', 'Arena', 'Arena', :pvp, :other, false, false],
282
+ [1701, '1v0 (Arena)', '1v0 (Arena)', '1v0 (Arena)', '1v0 (Arena)', :pvp, :other, false, false],
283
+ [1704, 'Arena (PBE 2v2)', 'Arena (PBE 2v2)', 'Arena (PBE 2v2)', 'Arena (PBE 2v2)', :pvp, :other, false, false],
284
+ [1710, 'Arena', 'Arena', 'Arena', 'Arena', :pvp, :other, false, false],
285
+ [1720, 'Arena internal', 'Arena internal', 'Arena internal', 'Arena internal', :pvp, :other, false, false],
286
+ [1731, '1v0 (Arena)', '1v0 (Arena)', '1v0 (Arena)', '1v0 (Arena)', :pvp, :other, false, false],
287
+ [1732, '1v0 (Arena)', '1v0 (Arena)', '1v0 (Arena)', '1v0 (Arena)', :pvp, :other, false, false],
288
+ [1740, 'Bravery Arena', 'Bravery Arena', 'Bravery Arena', 'Bravery Arena', :pvp, :other, false, false],
289
+ [1750, 'Arena 3x6', 'Arena 3x6', 'Arena 3x6', 'Arena 3x6', :pvp, :other, false, false],
290
+ [1767, '', '', '', '', :pvp, :other, false, false],
291
+ [1810, 'Swarm', 'Swarm', 'Swarm', 'Swarm', :pvp, :other, false, false],
292
+ [1820, 'Swarm', 'Swarm', 'Swarm', 'Swarm', :pvp, :other, false, false],
293
+ [1830, 'Swarm', 'Swarm', 'Swarm', 'Swarm', :pvp, :other, false, false],
294
+ [1840, 'Swarm', 'Swarm', 'Swarm', 'Swarm', :pvp, :other, false, false],
295
+ [1900, 'Ultra Rapid Fire', 'URF', 'Ultra Rapid Fire', '', :pvp, :other, false, false],
296
+ [2000, 'Tutorial Part 1', 'Tutorial Part 1', 'Tutorial Part 1', '', :pvp, :other, false, false],
297
+ [2010, 'Tutorial Part 2', 'Tutorial Part 2', 'Tutorial Part 2', '', :pvp, :other, false, false],
298
+ [2020, 'Tutorial Part 3', 'Tutorial Part 3', 'Tutorial Part 3', '', :pvp, :other, false, false],
299
+ [2021, '', '', '', '', :pvp, :other, false, false],
300
+ [2200, 'Teamfight Tactics (Normal)', 'Teamfight Tactics (Normal)', 'Normal', 'Teamfight Tactics (Normal)', :pvp, :tft, false, false],
301
+ [2220, '', '', '', '', :pvp, :other, false, false],
302
+ [2300, 'Brawl', 'Brawl', 'Brawl', 'Brawl', :pvp, :other, false, false],
303
+ [2301, 'Brawl 1v1', 'Brawl 1v1', 'Brawl 1v1', 'Brawl 1v1', :pvp, :other, false, false],
304
+ [2302, 'Brawl 2v2', 'Brawl 2v2', 'Brawl 2v2', 'Brawl 2v2', :pvp, :other, false, false],
305
+ [2303, 'Brawl 3v3', 'Brawl 3v3', 'Brawl 3v3', 'Brawl 3v3', :pvp, :other, false, false],
306
+ [2304, 'Brawl 4v4', 'Brawl 4v4', 'Brawl 4v4', 'Brawl 4v4', :pvp, :other, false, false],
307
+ [2305, 'Brawl 1v0', 'Brawl 1v0', 'Brawl 1v0', 'Brawl 1v0', :pvp, :other, false, false],
308
+ [2400, 'ARAM: Mayhem', 'ARAM: Mayhem', 'ARAM: Mayhem', '', :pvp, :aram, false, false],
309
+ [2401, 'ARAM: Mayhem', 'ARAM: Mayhem', 'ARAM: Mayhem', '', :pvp, :aram, false, false],
310
+ [2403, 'ARAM: Mayhem', 'ARAM: Mayhem', 'ARAM: Mayhem', '', :pvp, :aram, false, false],
311
+ [2405, 'ARAM: Mayhem', 'ARAM: Mayhem', 'ARAM: Mayhem', '', :pvp, :aram, false, false],
312
+ [2410, 'ARAM: Mayhem Tournament', 'ARAM: Mayhem Tournament', 'ARAM: Mayhem Tournament', '', :pvp, :aram, false, false],
313
+ [2450, 'ARAM: Mayhem Classic-ish', 'ARAM: Mayhem Classic-ish', 'ARAM: Mayhem Classic-ish', '', :pvp, :aram, true, false],
314
+ [3000, 'TFT Standard Custom', 'TFT Standard Custom', 'TFT Standard Custom', 'TFT Standard Custom', :pvp, :other, false, false],
315
+ [3010, 'TFT Hyper Roll Custom', 'TFT Hyper Roll Custom', 'TFT Hyper Roll Custom', 'TFT Hyper Roll Custom', :pvp, :other, false, false],
316
+ [3020, 'TFT Double Up Custom', 'TFT Double Up Custom', 'TFT Double Up Custom', 'TFT Double Up Custom', :pvp, :other, false, false],
317
+ [3100, 'SR Blind Pick Custom', 'SR Blind Pick Custom', 'SR Blind Pick Custom', 'SR Blind Pick Custom', :pvp, :other, false, false],
318
+ [3110, 'SR Draft Pick Custom', 'SR Draft Pick Custom', 'SR Draft Pick Custom', 'SR Draft Pick Custom', :pvp, :other, false, false],
319
+ [3120, 'SR All Random', 'SR All Random', 'SR All Random', 'SR All Random', :pvp, :other, false, false],
320
+ [3130, 'SR Tournament Draft', 'SR Tournament Draft', 'SR Tournament Draft', 'SR Tournament Draft', :pvp, :other, false, false],
321
+ [3140, 'Multiplayer Practice Tool Custom', 'Multiplayer Practice Tool Custom', 'Multiplayer Practice Tool Custom', 'Multiplayer Practice Tool Custom', :pvp, :other, false, false],
322
+ [3150, '', '', '', '', :pvp, :other, false, false],
323
+ [3200, 'Howling Abyss Blind Custom', 'Howling Abyss Blind Custom', 'Howling Abyss Blind Custom', 'Howling Abyss Blind Custom', :pvp, :other, false, false],
324
+ [3210, 'Howling Abyss Draft Custom', 'Howling Abyss Draft Custom', 'Howling Abyss Draft Custom', 'Howling Abyss Draft Custom', :pvp, :other, false, false],
325
+ [3220, 'Howling Abyss All Random', 'Howling Abyss All Random', 'Howling Abyss All Random', 'Howling Abyss All Random', :pvp, :other, false, false],
326
+ [3230, 'Howling Abyss Tournament Draft Custom', 'Howling Abyss Tournament Draft Custom', 'Howling Abyss Tournament Draft Custom', 'Howling Abyss Tournament Draft Custom', :pvp, :other, false, false],
327
+ [3240, 'ARAM: Mayhem', 'ARAM: Mayhem', 'ARAM: Mayhem', '', :custom, :other, false, false],
328
+ [3250, 'Howling Abyss First Blood', 'Howling Abyss First Blood', 'Howling Abyss First Blood', 'Howling Abyss First Blood', :pvp, :other, false, false],
329
+ [3260, 'Classic Rift', 'Classic (Custom Blind Pick)', 'Classic (Custom Blind Pick)', 'Classic', :custom, :jade, false, false],
330
+ [3261, 'Jade Sydney', 'Jade Sydney', 'Jade Sydney', 'Jade Sydney', :custom, :jade, false, false],
331
+ [3262, 'Classic Rift', 'Classic (Custom Draft Pick)', 'Classic (Custom Draft Pick)', 'Jade Sydney', :custom, :jade, false, false],
332
+ [3270, 'ARAM: Mayhem', 'ARAM: Mayhem', 'ARAM: Mayhem', 'ARAM: Mayhem', :custom, :other, false, false],
333
+ [3280, 'ARAM: Mayhem Classic-ish', 'ARAM: Mayhem Classic-ish', 'ARAM: Mayhem Classic-ish', 'ARAM: Mayhem Classic-ish', :custom, :aram, false, false],
334
+ [4011, '', '', '', '', :pvp, :other, false, false],
335
+ [4016, 'WIPMODEWIP', 'WIPMODEWIP', 'WIPMODEWIP', 'WIPMODEWIP', :pvp, :other, false, false],
336
+ [4017, 'WIPMODEWIP', 'WIPMODEWIP', 'WIPMODEWIP', 'WIPMODEWIP', :pvp, :other, false, false],
337
+ [4018, 'WIPMODEWIP', 'WIPMODEWIP', 'WIPMODEWIP', 'WIPMODEWIP', :pvp, :other, false, false],
338
+ [4019, 'WIPMODEWIP', 'WIPMODEWIP', 'WIPMODEWIP', 'WIPMODEWIP', :pvp, :other, false, false],
339
+ [4020, 'WIPMODEWIP', 'WIPMODEWIP', 'WIPMODEWIP', 'WIPMODEWIP', :pvp, :other, false, false],
340
+ [4033, '', '', '', '', :pvp, :other, false, false],
341
+ [4044, '', '', '', '', :pvp, :other, false, false],
342
+ [4100, '', '', '', '', :pvp, :other, false, false],
343
+ [4101, '', '', '', '', :pvp, :other, false, false],
344
+ [4102, '', '', '', '', :pvp, :other, false, false],
345
+ [4103, '', '', '', '', :pvp, :other, false, false],
346
+ [4106, '', '', '', '', :pvp, :other, false, false],
347
+ [4107, '', '', '', '', :pvp, :other, false, false],
348
+ [4121, '', '', '', '', :pvp, :other, false, false],
349
+ [4122, '', '', '', '', :pvp, :other, false, false],
350
+ [4123, '', '', '', '', :pvp, :other, false, false],
351
+ [4124, '', '', '', '', :pvp, :other, false, false],
352
+ [4126, '', '', '', '', :pvp, :other, false, false],
353
+ [4127, '', '', '', '', :pvp, :other, false, false],
354
+ [4200, 'Doom Bots 5v5', 'Doom Bots 5v5', 'Doom Bots 5v5', 'Doom Bots 5v5', :pvp, :other, false, true],
355
+ [4201, 'Doom Bots 1v1', 'Doom Bots 1v1', 'Doom Bots 1v1', 'Doom Bots 1v1', :pvp, :other, false, true],
356
+ [4202, 'Doom Bots 2v2', 'Doom Bots 2v2', 'Doom Bots 2v2', 'Doom Bots 2v2', :pvp, :other, false, true],
357
+ [4203, 'Doom Bots 3v3', 'Doom Bots 3v3', 'Doom Bots 3v3', 'Doom Bots 3v3', :pvp, :other, false, true],
358
+ [4204, 'Doom Bots 4v4', 'Doom Bots 4v4', 'Doom Bots 4v4', 'Doom Bots 4v4', :pvp, :other, false, true],
359
+ [4205, 'Doom Bots 5v5 - NA', 'Doom Bots 5v5 - NA', 'Doom Bots 5v5 - NA', 'Doom Bots 5v5 - NA', :pvp, :other, false, true],
360
+ [4210, 'Doom Bots', 'Doom Bots', 'Doom Bots', 'Doom Bots', :pvp, :other, false, true],
361
+ [4211, '', '', '', '', :pvp, :other, false, false],
362
+ [4212, '', '', '', '', :pvp, :other, false, false],
363
+ [4220, 'Doom Bots - Hard', 'Doom Bots - Hard', 'Doom Bots - Hard', 'Doom Bots - Hard', :pvp, :other, false, true],
364
+ [4221, '', '', '', '', :pvp, :other, false, false],
365
+ [4222, '', '', '', '', :pvp, :other, false, false],
366
+ [4240, 'DOOM BOTS - VEIGAR\'S CURSE!', 'DOOM BOTS - VEIGAR\'S CURSE!', 'DOOM BOTS - VEIGAR\'S CURSE!', 'DOOM BOTS - VEIGAR\'S CURSE!', :pvp, :other, true, true],
367
+ [4241, 'DOOM BOTS - VEIGAR\'S CURSE!', 'DOOM BOTS - VEIGAR\'S CURSE!', 'DOOM BOTS - VEIGAR\'S CURSE!', 'DOOM BOTS - VEIGAR\'S CURSE!', :pvp, :other, true, true],
368
+ [4242, 'DOOM BOTS - VEIGAR\'S CURSE!', 'DOOM BOTS - VEIGAR\'S CURSE!', 'DOOM BOTS - VEIGAR\'S CURSE!', 'DOOM BOTS - VEIGAR\'S CURSE!', :pvp, :other, true, true],
369
+ [4250, 'DOOM BOTS - VEIGAR\'S EVIL!', 'DOOM BOTS - VEIGAR\'S EVIL!', 'DOOM BOTS - VEIGAR\'S EVIL!', 'DOOM BOTS - VEIGAR\'S EVIL!', :pvp, :other, true, true],
370
+ [4251, 'DOOM BOTS - VEIGAR\'S EVIL!', 'DOOM BOTS - VEIGAR\'S EVIL!', 'DOOM BOTS - VEIGAR\'S EVIL!', 'DOOM BOTS - VEIGAR\'S EVIL!', :pvp, :other, true, true],
371
+ [4252, 'DOOM BOTS - VEIGAR\'S EVIL!', 'DOOM BOTS - VEIGAR\'S EVIL!', 'DOOM BOTS - VEIGAR\'S EVIL!', 'DOOM BOTS - VEIGAR\'S EVIL!', :pvp, :other, true, true],
372
+ [4260, 'DOOM BOTS - VEIGAR\'S DOOM!', 'DOOM BOTS - VEIGAR\'S DOOM!', 'DOOM BOTS - VEIGAR\'S DOOM!', 'DOOM BOTS - VEIGAR\'S DOOM!', :pvp, :other, true, true],
373
+ [4261, 'DOOM BOTS - VEIGAR\'S DOOM!', 'DOOM BOTS - VEIGAR\'S DOOM!', 'DOOM BOTS - VEIGAR\'S DOOM!', 'DOOM BOTS - VEIGAR\'S DOOM!', :pvp, :other, true, true],
374
+ [4262, 'DOOM BOTS - VEIGAR\'S DOOM!', 'DOOM BOTS - VEIGAR\'S DOOM!', 'DOOM BOTS - VEIGAR\'S DOOM!', 'DOOM BOTS - VEIGAR\'S DOOM!', :pvp, :other, true, true],
375
+ [4300, '5v5 Jade', 'Classic', '5v5 Classic', '5v5 Jade', :pvp, :jade, false, false],
376
+ [4301, '1v1 Jade', '1v1 Classic', '1v1 Classic', '1v1 Jade', :pvp, :jade, false, false],
377
+ [4302, '2v2 Jade', '2v2 Classic', '2v2 Classic', '2v2 Jade', :pvp, :jade, false, false],
378
+ [4303, '3v3 Jade', '3v3 Classic', '3v3 Classic', '3v3 Jade', :pvp, :jade, false, false],
379
+ [4304, '4v4 Jade', '4v4 Classic', '4v4 Classic', '4v4 Jade', :pvp, :jade, false, false],
380
+ [4305, '5v5 Jade Sydney', '5v5 Classic Sydney', '5v5 Classic Sydney', '5v5 Jade Sydney', :pvp, :jade, false, false],
381
+ [4306, '1v1 Jade Sydney', '1v1 Classic Sydney', '1v1 Classic Sydney', '1v1 Jade Sydney', :pvp, :jade, false, false],
382
+ [4307, '2v2 Jade Sydney', '2v2 Classic Sydney', '2v2 Classic Sydney', '2v2 Jade Sydney', :pvp, :jade, false, false],
383
+ [4308, '3v3 Jade Sydney', '3v3 Classic Sydney', '3v3 Classic Sydney', '3v3 Jade Sydney', :pvp, :jade, false, false],
384
+ [4309, '4v4 Jade Sydney', '4v4 Classic Sydney', '4v4 Classic Sydney', '4v4 Jade Sydney', :pvp, :jade, false, false],
385
+ [4310, '', 'Classic', 'Classic 5v5', '', :pvp, :jade, false, true],
386
+ [4311, '1v1 Jade Ranked', '', '', '', :pvp, :jade, false, false],
387
+ [4320, 'Jade', 'Classic', 'Classic Co-op vs. AI', 'Jade', :bots, :jade, false, false],
388
+ [4321, 'Jade', 'Classic', 'Classic Co-op vs. AI 1v1', 'Jade', :bots, :jade, false, false],
389
+ [6000, 'Teamfight Tactics (Set 3.5 Revival: Galaxies)', 'Teamfight Tactics (Set 3.5 Revival: Galaxies)', 'Set 3.5 Revival: Galaxies', 'Teamfight Tactics (Set 3.5 Revival: Galaxies)', :pvp, :tft, false, false],
390
+ [6001, '1v0 (Set 3.5 Revival: Galaxies)', '1v0 (Set 3.5 Revival: Galaxies)', '1v0 (Set 3.5 Revival: Galaxies)', '1v0 (Set 3.5 Revival: Galaxies)', :pvp, :tft, false, false],
391
+ [6002, '1v0 (Set 4.5 Revival)', '1v0 (Set 4.5 Revival)', '1v0 (Set 4.5 Revival)', '1v0 (Set 4.5 Revival)', :pvp, :tft, false, false],
392
+ [6005, '1v7 Bots (Set 3.5 Revival: Galaxies)', '1v7 Bots (Set 3.5 Revival: Galaxies)', '1v7 Bots (Set 3.5 Revival: Galaxies)', '1v7 Bots (Set 3.5 Revival: Galaxies)', :pvp, :tft, false, false],
393
+ [6010, 'Set Queue 1', 'Set Queue 1', 'Set Queue 1', 'Set Queue 1', :pvp, :tft, false, false],
394
+ [6015, 'Set Queue 1 1v7', 'Set Queue 1 1v7', 'Set Queue 1 1v7', 'Set Queue 1 1v7', :pvp, :tft, false, false],
395
+ [6020, 'Set Queue 2', 'Set Queue 2', 'Set Queue 2', 'Set Queue 2', :pvp, :tft, false, false],
396
+ [6023, 'Set Queue 2 3v0', 'Set Queue 2 3v0', 'Set Queue 2 3v0', '', :pvp, :tft, false, false],
397
+ [6025, 'Set Queue 2 1v7', 'Set Queue 2 1v7', 'Set Queue 2 1v7', 'Set Queue 2 1v7', :pvp, :tft, false, false],
398
+ [6030, 'Set Queue 3', 'Set Queue 3', 'Set Queue 3', 'Set Queue 3', :pvp, :tft, false, false],
399
+ [6031, 'Set 13 1v0', 'Set 13 1v0', 'Set 13 1v0', 'Set 13 1v0', :pvp, :tft, false, false],
400
+ [6032, 'Set 13 2v0', 'Set 13 2v0', 'Set 13 2v0', 'Set 13 2v0', :pvp, :tft, false, false],
401
+ [6033, 'Set 13 3v0', 'Set 13 3v0', 'Set 13 3v0', 'Set 13 3v0', :pvp, :tft, false, false],
402
+ [6034, 'Set 13 4v0', 'Set 13 4v0', 'Set 13 4v0', 'Set 13 4v0', :pvp, :tft, false, false],
403
+ [6035, 'Set Queue 3 1v7', 'Set Queue 3 1v7', 'Set Queue 3 1v7', 'Set Queue 3 1v7', :pvp, :tft, false, false],
404
+ [6060, 'Set 13 Normal Hyper Roll', 'Set 13 Normal Hyper Roll', 'Set 13 Normal Hyper Roll', 'Set 13 Normal Hyper Roll', :pvp, :tft, false, false],
405
+ [6061, 'Set 13 1v0 (Normal Hyper Roll)', 'Set 13 1v0 (Normal Hyper Roll)', 'Set 13 1v0 (Normal Hyper Roll)', 'Set 13 1v0 (Normal Hyper Roll)', :pvp, :tft, false, false],
406
+ [6062, 'Set 13 2v0 (Normal Hyper Roll)', 'Set 13 2v0 (Normal Hyper Roll)', 'Set 13 2v0 (Normal Hyper Roll)', 'Set 13 2v0 (Normal Hyper Roll)', :pvp, :tft, false, false],
407
+ [6063, 'Set 13 Double Up', 'Set 13 Double Up', 'Set 13 Double Up', 'Set 13 Double Up', :pvp, :tft, false, false],
408
+ [6064, 'Set 13 2v0 (Double Up)', 'Set 13 2v0 (Double Up)', 'Set 13 2v0 (Double Up)', 'Set 13 2v0 (Double Up)', :pvp, :tft, false, false],
409
+ [6065, 'Set 13 4v0 (Double Up)', 'Set 13 4v0 (Double Up)', 'Set 13 4v0 (Double Up)', 'Set 13 4v0 (Double Up)', :pvp, :tft, false, false],
410
+ [6067, 'Set 13 1v0', 'Set 13 1v0', 'Set 13 1v0', 'Set 13 1v0', :pvp, :tft, false, false],
411
+ [6071, '', '', '', '', :pvp, :other, false, false],
412
+ [6072, '', '', '', '', :pvp, :other, false, false],
413
+ [6073, '', '', '', '', :pvp, :other, false, false],
414
+ [6075, '', '', '', '', :pvp, :other, false, false],
415
+ [6081, '', '', '', '', :pvp, :other, false, false],
416
+ [6082, '', '', '', '', :pvp, :other, false, false],
417
+ [6092, '', '', '', '', :pvp, :other, false, false],
418
+ [6094, '', '', '', '', :pvp, :other, false, false],
419
+ [6100, 'CHONCC\'S K.O. COLISEUM', 'Choncc\'s K.O. Coliseum', 'Choncc\'s K.O. Coliseum', 'CHONCC\'S K.O. COLISEUM', :pvp, :tft, false, false],
420
+ [6101, 'CHONCC\'S K.O. COLISEUM (1v0)', 'CHONCC\'S K.O. COLISEUM (1v0)', 'CHONCC\'S K.O. COLISEUM (1v0)', 'CHONCC\'S K.O. COLISEUM (1v0)', :pvp, :tft, false, false],
421
+ [6102, 'CHONCC\'S K.O. COLISEUM (2v0)', 'CHONCC\'S K.O. COLISEUM (2v0)', 'CHONCC\'S K.O. COLISEUM (2v0)', 'CHONCC\'S K.O. COLISEUM (2v0)', :pvp, :tft, false, false],
422
+ [6105, '', '', '', '', :pvp, :other, false, false],
423
+ [6110, 'Set 17 (Normal)', 'Set 17 (Normal)', 'Set 17 (Normal)', 'SET 17 (NORMAL)', :pvp, :tft, true, false],
424
+ [6111, '1v0 (Set 4.5 Revival)', '1v0 (Set 4.5 Revival)', '1v0 (Set 4.5 Revival)', '1v0 (Set 4.5 Revival)', :pvp, :tft, false, false],
425
+ [6112, '2v0 (Set 4.5 Revival)', '2v0 (Set 4.5 Revival)', '2v0 (Set 4.5 Revival)', '2v0 (Set 4.5 Revival)', :pvp, :tft, false, false],
426
+ [6115, '1v7 (Set 4.5 Revival)', '1v7 (Set 4.5 Revival)', '1v7 (Set 4.5 Revival)', '1v7 (Set 4.5 Revival)', :pvp, :tft, false, false],
427
+ [6120, 'Pengu\'s Party', 'Pengu\'s Party', 'Pengu\'s Party', 'PENGU\'S PARTY', :pvp, :tft, false, false],
428
+ [6121, '1v0 (PENGU\'S PARTY)', '1v0 (PENGU\'S PARTY)', '1v0 (PENGU\'S PARTY)', '1v0 (PENGU\'S PARTY)', :pvp, :tft, false, false],
429
+ [6122, '2v0 (PENGU\'S PARTY)', '2v0 (PENGU\'S PARTY)', '2v0 (PENGU\'S PARTY)', '2v0 (PENGU\'S PARTY)', :pvp, :tft, false, false],
430
+ [6125, '1v7 Bots (PENGU\'S PARTY)', '1v7 Bots (PENGU\'S PARTY)', '1v7 Bots (PENGU\'S PARTY)', '1v7 Bots (PENGU\'S PARTY)', :pvp, :tft, false, false],
431
+ [6130, 'Ao Shin\'s Ascent', 'Ao Shin\'s Ascent', 'Ao Shin\'s Ascent', 'Ao Shin\'s Ascent', :pvp, :tft, false, false],
432
+ [6140, '', '', '', '', :pvp, :other, false, false],
433
+ [6141, '', '', '', '', :pvp, :other, false, false],
434
+ [6142, '', '', '', '', :pvp, :other, false, false],
435
+ [6220, '', '', '', '', :pvp, :other, false, false],
436
+ [6300, '', '', '', '', :pvp, :other, false, false],
437
+ [6310, '', '', '', '', :pvp, :other, false, false],
438
+ [6320, '', '', '', '', :pvp, :other, false, false],
439
+ [7001, '', '', '', '', :pvp, :other, false, false],
440
+ [7011, 'TFT Cosmetics Asset Viewer', 'TFT Cosmetics Asset Viewer', 'TFT Cosmetics Asset Viewer', '', :pvp, :tft, false, false],
441
+ [7021, '', '', '', '', :pvp, :other, false, false],
442
+ [7022, '', '', '', '', :pvp, :other, false, false],
443
+ [9001, '', '', '', '', :pvp, :other, false, false]
444
+ ].freeze
445
+
446
+ INDEX = ROWS.each_with_object({}) { |row, map| map[row[0]] = Queue.new(*row) }.freeze
447
+ QUEUES = INDEX.values.freeze
448
+ end
449
+ end
data/lib/rito/routing.rb CHANGED
@@ -3,21 +3,24 @@
3
3
  module Rito
4
4
  module Routing
5
5
  PLATFORMS = %w[
6
- br1 eun1 euw1 jp1 kr la1 la2 me1 na1 oc1 ph2 ru sg2 th2 tr1 tw2 vn2
6
+ br1 eun1 euw1 jp1 kr la1 la2 me1 na1 oc1 pbe1 ru sg2 tr1 tw2 vn2
7
7
  ].freeze
8
- REGIONALS = %w[americas asia europe sea].freeze
8
+ # esports/esportseu are accepted by tft-match-v1; apac by lor-match-v1.
9
+ REGIONALS = %w[americas apac asia esports esportseu europe sea].freeze
9
10
 
10
11
  CLUSTERS = {
11
12
  'americas' => %w[na1 br1 la1 la2],
12
13
  'europe' => %w[euw1 eun1 tr1 ru me1],
13
14
  'asia' => %w[kr jp1],
14
- 'sea' => %w[oc1 sg2 tw2 vn2 ph2 th2]
15
+ 'sea' => %w[oc1 sg2 tw2 vn2]
15
16
  }.freeze
16
17
 
17
18
  ACCOUNT_REGIONALS = %w[americas asia europe].freeze
18
19
 
19
- VALORANT_PLATFORMS = %w[na1 eu ap kr latam br].freeze
20
- VALORANT_CONSOLE_PLATFORMS = %w[na eu ap].freeze
20
+ # esports is accepted by val-content-v1 and val-match-v1 only.
21
+ VALORANT_PLATFORMS = %w[na eu ap kr latam br esports].freeze
22
+ # br / latam are accepted by val-console-match-v1 only; console ranked is na / eu / ap.
23
+ VALORANT_CONSOLE_PLATFORMS = %w[na eu ap br latam].freeze
21
24
 
22
25
  class << self
23
26
  def platform?(value)
data/lib/rito/version.rb CHANGED
@@ -1,5 +1,5 @@
1
1
  # frozen_string_literal: true
2
2
 
3
3
  module Rito
4
- VERSION = '0.2.0'
4
+ VERSION = '0.3.1'
5
5
  end
data/lib/rito.rb CHANGED
@@ -11,6 +11,7 @@ require 'faraday/retry'
11
11
 
12
12
  # modules
13
13
  require_relative 'rito/routing'
14
+ require_relative 'rito/queues'
14
15
  require_relative 'rito/errors'
15
16
  require_relative 'rito/rate_limiting/header_parser'
16
17
  require_relative 'rito/rate_limiting/bucket'
@@ -33,6 +34,7 @@ require_relative 'rito/endpoints/base'
33
34
  require_relative 'rito/endpoints/account_v1'
34
35
  require_relative 'rito/endpoints/lol/summoner_v4'
35
36
  require_relative 'rito/endpoints/lol/match_v5'
37
+ require_relative 'rito/endpoints/lol/rso_match_v1'
36
38
  require_relative 'rito/endpoints/lol/champion_mastery_v4'
37
39
  require_relative 'rito/endpoints/lol/champion_v3'
38
40
  require_relative 'rito/endpoints/lol/league_v4'
@@ -44,6 +46,7 @@ require_relative 'rito/endpoints/lol/tournament_v5'
44
46
  require_relative 'rito/endpoints/tft'
45
47
  require_relative 'rito/endpoints/valorant'
46
48
  require_relative 'rito/endpoints/lor'
49
+ require_relative 'rito/endpoints/riftbound'
47
50
  require_relative 'rito/version'
48
51
 
49
52
  module Rito
metadata CHANGED
@@ -1,14 +1,14 @@
1
1
  --- !ruby/object:Gem::Specification
2
2
  name: rito
3
3
  version: !ruby/object:Gem::Version
4
- version: 0.2.0
4
+ version: 0.3.1
5
5
  platform: ruby
6
6
  authors:
7
7
  - kodbilenadam
8
8
  autorequire:
9
9
  bindir: bin
10
10
  cert_chain: []
11
- date: 2026-09-04 00:00:00.000000000 Z
11
+ date: 2026-09-05 00:00:00.000000000 Z
12
12
  dependencies:
13
13
  - !ruby/object:Gem::Dependency
14
14
  name: faraday
@@ -59,11 +59,13 @@ files:
59
59
  - lib/rito/endpoints/lol/clash_v1.rb
60
60
  - lib/rito/endpoints/lol/league_v4.rb
61
61
  - lib/rito/endpoints/lol/match_v5.rb
62
+ - lib/rito/endpoints/lol/rso_match_v1.rb
62
63
  - lib/rito/endpoints/lol/spectator_v5.rb
63
64
  - lib/rito/endpoints/lol/status_v4.rb
64
65
  - lib/rito/endpoints/lol/summoner_v4.rb
65
66
  - lib/rito/endpoints/lol/tournament_v5.rb
66
67
  - lib/rito/endpoints/lor.rb
68
+ - lib/rito/endpoints/riftbound.rb
67
69
  - lib/rito/endpoints/tft.rb
68
70
  - lib/rito/endpoints/valorant.rb
69
71
  - lib/rito/errors.rb
@@ -76,6 +78,7 @@ files:
76
78
  - lib/rito/models/lol.rb
77
79
  - lib/rito/models/match.rb
78
80
  - lib/rito/models/summoner.rb
81
+ - lib/rito/queues.rb
79
82
  - lib/rito/rate_limiting/adaptive_limiter.rb
80
83
  - lib/rito/rate_limiting/bucket.rb
81
84
  - lib/rito/rate_limiting/header_parser.rb