sc2cli 0.1.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.
Files changed (40) hide show
  1. checksums.yaml +7 -0
  2. data/.gitignore +28 -0
  3. data/.gitlab-ci.yml +37 -0
  4. data/Gemfile +13 -0
  5. data/LICENSE.txt +21 -0
  6. data/Rakefile +13 -0
  7. data/bin/console +16 -0
  8. data/bin/setup +18 -0
  9. data/exe/sc2 +44 -0
  10. data/lib/sc2cli.rb +7 -0
  11. data/lib/sc2cli/shared.rb +15 -0
  12. data/lib/sc2cli/shared/api.rb +79 -0
  13. data/lib/sc2cli/shared/cache.rb +112 -0
  14. data/lib/sc2cli/shared/configuration.rb +119 -0
  15. data/lib/sc2cli/shared/console.rb +69 -0
  16. data/lib/sc2cli/shared/names.rb +101 -0
  17. data/lib/sc2cli/shared/region.rb +112 -0
  18. data/lib/sc2cli/shared/season.rb +123 -0
  19. data/lib/sc2cli/shared/token.rb +139 -0
  20. data/lib/sc2cli/subcommands.rb +9 -0
  21. data/lib/sc2cli/subcommands/history.rb +114 -0
  22. data/lib/sc2cli/subcommands/history/historymatch.rb +118 -0
  23. data/lib/sc2cli/subcommands/history/historymatches.rb +72 -0
  24. data/lib/sc2cli/subcommands/ladder.rb +120 -0
  25. data/lib/sc2cli/subcommands/ladder/ladderdetails.rb +110 -0
  26. data/lib/sc2cli/subcommands/ladder/ladderdetailsmembership.rb +64 -0
  27. data/lib/sc2cli/subcommands/ladder/ladderdetailsrank.rb +101 -0
  28. data/lib/sc2cli/subcommands/ladder/ladderdetailsteam.rb +114 -0
  29. data/lib/sc2cli/subcommands/ladder/ladderdetailsteammember.rb +110 -0
  30. data/lib/sc2cli/subcommands/ladder/ladderdetailsteammembers.rb +85 -0
  31. data/lib/sc2cli/subcommands/ladder/ladderdetailsteams.rb +85 -0
  32. data/lib/sc2cli/subcommands/ladder/laddersummary.rb +82 -0
  33. data/lib/sc2cli/subcommands/league.rb +190 -0
  34. data/lib/sc2cli/subcommands/league/leaguetier.rb +112 -0
  35. data/lib/sc2cli/subcommands/league/leaguetiers.rb +79 -0
  36. data/lib/sc2cli/subcommands/raw.rb +89 -0
  37. data/lib/sc2cli/subcommands/season.rb +74 -0
  38. data/lib/sc2cli/version.rb +13 -0
  39. data/sc2cli.gemspec +36 -0
  40. metadata +85 -0
@@ -0,0 +1,64 @@
1
+ ###############################################################################
2
+
3
+ module SC2Cli
4
+
5
+ ###############################################################################
6
+
7
+ module Subcommands
8
+
9
+ ###############################################################################
10
+
11
+ module LadderShared
12
+
13
+ ###############################################################################
14
+
15
+ class LadderDetailsMembership
16
+
17
+ ###############################################################################
18
+
19
+ @@console = Shared::Console.instance
20
+
21
+ ###############################################################################
22
+
23
+ attr_reader :type
24
+
25
+ ###############################################################################
26
+
27
+ def initialize(json:)
28
+ @@console.fatal("Failed to get ladder membership details: game mode / type missing!") unless json.key?("localizedGameMode")
29
+
30
+ type = json["localizedGameMode"]
31
+
32
+ @@console.fatal("Failed to get ladder membership details: game mode / type is not a string!") unless type.kind_of?(String)
33
+ @@console.fatal("Failed to get ladder membership details: game mode / type is blank!") if type.empty?
34
+
35
+ @type = type
36
+ end
37
+
38
+ ###############################################################################
39
+
40
+ def to_s
41
+ result = String.new
42
+
43
+ result = "Type: #{@type}\n"
44
+
45
+ return result
46
+ end
47
+
48
+ ###############################################################################
49
+
50
+ end
51
+
52
+ ###############################################################################
53
+
54
+ end
55
+
56
+ ###############################################################################
57
+
58
+ end
59
+
60
+ ###############################################################################
61
+
62
+ end
63
+
64
+ ###############################################################################
@@ -0,0 +1,101 @@
1
+ ###############################################################################
2
+
3
+ module SC2Cli
4
+
5
+ ###############################################################################
6
+
7
+ module Subcommands
8
+
9
+ ###############################################################################
10
+
11
+ module LadderShared
12
+
13
+ ###############################################################################
14
+
15
+ class LadderDetailsRank
16
+
17
+ ###############################################################################
18
+
19
+ @@console = Shared::Console.instance
20
+
21
+ ###############################################################################
22
+
23
+ attr_reader :bonus
24
+ attr_reader :mmr
25
+ attr_reader :rank
26
+
27
+ ###############################################################################
28
+
29
+ def initialize(json:)
30
+ bonus = 0
31
+ mmr = 0
32
+ rank = 0
33
+
34
+ @@console.warn("Ladder details contains multiple rank/pool details. Will ignore all but the first!") if json.length > 1
35
+
36
+ result = json[0]
37
+
38
+ if result.key?("bonusPool") then
39
+ bonus = result["bonusPool"] if result["bonusPool"].kind_of?(Integer)
40
+ end
41
+
42
+ if result.key?("mmr") then
43
+ mmr = result["mmr"] if result["mmr"].kind_of?(Integer)
44
+ end
45
+
46
+ if result.key?("rank") then
47
+ rank = result["rank"] if result["rank"].kind_of?(Integer)
48
+ end
49
+
50
+ @bonus = bonus
51
+ @mmr = mmr
52
+ @rank = rank
53
+ end
54
+
55
+ ###############################################################################
56
+
57
+ def bonus_s
58
+ return bonus.to_s
59
+ end
60
+
61
+ ###############################################################################
62
+
63
+ def mmr_s
64
+ result = mmr > 0 ? mmr.to_s : "Unknown"
65
+ return result
66
+ end
67
+
68
+ ###############################################################################
69
+
70
+ def rank_s
71
+ result = rank > 0 ? rank.to_s : "Unknown"
72
+ return result
73
+ end
74
+
75
+ ###############################################################################
76
+
77
+ def to_s
78
+ result = String.new
79
+
80
+ result = " - MMR: #{mmr_s}, Bonus Pool: #{bonus_s}, Rank: #{rank_s}\n"
81
+
82
+ return result
83
+ end
84
+
85
+ ###############################################################################
86
+
87
+ end
88
+
89
+ ###############################################################################
90
+
91
+ end
92
+
93
+ ###############################################################################
94
+
95
+ end
96
+
97
+ ###############################################################################
98
+
99
+ end
100
+
101
+ ###############################################################################
@@ -0,0 +1,114 @@
1
+ ###############################################################################
2
+
3
+ module SC2Cli
4
+
5
+ ###############################################################################
6
+
7
+ module Subcommands
8
+
9
+ ###############################################################################
10
+
11
+ module LadderShared
12
+
13
+ ###############################################################################
14
+
15
+ class LadderDetailsTeam
16
+
17
+ ###############################################################################
18
+
19
+ @@console = Shared::Console.instance
20
+
21
+ ###############################################################################
22
+
23
+ @@colour_wins = 40
24
+ @@colour_losses = 160
25
+
26
+ ###############################################################################
27
+
28
+ attr_reader :joined
29
+ attr_reader :losses
30
+ attr_reader :members
31
+ attr_reader :mmr
32
+ attr_reader :points
33
+ attr_reader :previous
34
+ attr_reader :wins
35
+
36
+ ###############################################################################
37
+
38
+ def initialize(json:)
39
+ joined = 0
40
+ losses = 0
41
+ members = Array.new
42
+ mmr = 0
43
+ points = 0
44
+ previous = 0
45
+ wins = 0
46
+
47
+ if json.key?("joinTimestamp") then
48
+ joined = json["joinTimestamp"] if json["joinTimestamp"].kind_of?(Integer)
49
+ end
50
+
51
+ if json.key?("losses") then
52
+ losses = json["losses"] if json["losses"].kind_of?(Integer)
53
+ end
54
+
55
+ if json.key?("teamMembers") then
56
+ members = json["teamMembers"] if json["teamMembers"].kind_of?(Array)
57
+ end
58
+
59
+ if json.key?("mmr") then
60
+ mmr = json["mmr"] if json["mmr"].kind_of?(Integer)
61
+ end
62
+
63
+ if json.key?("points") then
64
+ points = json["points"] if json["points"].kind_of?(Integer)
65
+ end
66
+
67
+ if json.key?("previousRank") then
68
+ previous = json["previousRank"] if json["previousRank"].kind_of?(Integer)
69
+ end
70
+
71
+ if json.key?("wins") then
72
+ wins = json["wins"] if json["wins"].kind_of?(Integer)
73
+ end
74
+
75
+ @members = LadderDetailsTeamMembers.new(json: members)
76
+ @joined = Time.at(joined)
77
+
78
+ @losses = losses
79
+ @mmr = mmr
80
+ @points = points
81
+ @previous = previous
82
+ @wins = wins
83
+ end
84
+
85
+ ###############################################################################
86
+
87
+ def to_s
88
+ result = String.new
89
+
90
+ joined = @joined.strftime("%Y-%m-%d %H:%M:%S")
91
+
92
+ result += @members.to_s
93
+ result += "MMR: #{@mmr.to_s}, Points: #{@points.to_s}, Wins: #{@@console.format(colour: @@colour_wins, message: @wins.to_s)}, Losses: #{@@console.format(colour: @@colour_losses, message: @losses.to_s)}, Joined: #{joined}\n\n"
94
+
95
+ return result
96
+ end
97
+
98
+ ###############################################################################
99
+
100
+ end
101
+
102
+ ###############################################################################
103
+
104
+ end
105
+
106
+ ###############################################################################
107
+
108
+ end
109
+
110
+ ###############################################################################
111
+
112
+ end
113
+
114
+ ###############################################################################
@@ -0,0 +1,110 @@
1
+ ###############################################################################
2
+
3
+ module SC2Cli
4
+
5
+ ###############################################################################
6
+
7
+ module Subcommands
8
+
9
+ ###############################################################################
10
+
11
+ module LadderShared
12
+
13
+ ###############################################################################
14
+
15
+ class LadderDetailsTeamMember
16
+
17
+ ###############################################################################
18
+
19
+ @@console = Shared::Console.instance
20
+
21
+ ###############################################################################
22
+
23
+ @@race_colour_default = 247
24
+
25
+ @@race_colour = {
26
+ "protoss" => 220,
27
+ "random" => 76,
28
+ "terran" => 39,
29
+ "zerg" => 99
30
+ }
31
+
32
+ ###############################################################################
33
+
34
+ attr_reader :clan
35
+ attr_reader :id
36
+ attr_reader :name
37
+ attr_reader :race
38
+
39
+ ###############################################################################
40
+
41
+ def initialize(json:)
42
+ @@console.fatal("Failed to get ladder team member details: ID missing!") unless json.key?("id")
43
+
44
+ id = json["id"]
45
+
46
+ id = id.to_i if id.kind_of?(String)
47
+
48
+ @@console.fatal("Failed to get ladder team member details: ID is not an integer!") unless id.kind_of?(Integer)
49
+ @@console.fatal("Failed to get ladder team member details: ID is not valid!") unless id > 0
50
+
51
+ clan = "None"
52
+ name = "Unknown"
53
+ race = "Unknown"
54
+
55
+ if json.key?("clanTag") then
56
+ if json["clanTag"].kind_of?(String)
57
+ clan = json["clanTag"] unless json["clanTag"].empty?
58
+ end
59
+ end
60
+
61
+ if json.key?("displayName") then
62
+ if json["displayName"].kind_of?(String)
63
+ name = json["displayName"] unless json["displayName"].empty?
64
+ end
65
+ end
66
+
67
+ if json.key?("favoriteRace") then
68
+ if json["favoriteRace"].kind_of?(String)
69
+ race = json["favoriteRace"] unless json["favoriteRace"].empty?
70
+ end
71
+ end
72
+
73
+ @clan = clan
74
+ @id = id
75
+ @name = name
76
+ @race = race
77
+ end
78
+
79
+ ###############################################################################
80
+
81
+ def name_with_clan
82
+ result = clan == "None" ? name : "[#{clan}]#{name}"
83
+ end
84
+
85
+ ###############################################################################
86
+
87
+ def to_s
88
+ colour = @@race_colour.key?(race) ? @@race_colour[race] : @@race_colour_default
89
+ race = "%-10.10s" % @race
90
+ result = "#{@@console.format(colour: colour, message: race)}#{name_with_clan}\n"
91
+ return result
92
+ end
93
+
94
+ ###############################################################################
95
+
96
+ end
97
+
98
+ ###############################################################################
99
+
100
+ end
101
+
102
+ ###############################################################################
103
+
104
+ end
105
+
106
+ ###############################################################################
107
+
108
+ end
109
+
110
+ ###############################################################################
@@ -0,0 +1,85 @@
1
+ ###############################################################################
2
+
3
+ module SC2Cli
4
+
5
+ ###############################################################################
6
+
7
+ module Subcommands
8
+
9
+ ###############################################################################
10
+
11
+ module LadderShared
12
+
13
+ ###############################################################################
14
+
15
+ class LadderDetailsTeamMembers
16
+
17
+ ###############################################################################
18
+
19
+ @members
20
+
21
+ ###############################################################################
22
+
23
+ def initialize(json:)
24
+ @members = Array.new
25
+
26
+ json.each do |member|
27
+ member = LadderDetailsTeamMember.new(json: member)
28
+ add(member: member)
29
+ end
30
+ end
31
+
32
+ ###############################################################################
33
+
34
+ def add(member:)
35
+ @members << member if member.kind_of?(LadderDetailsTeamMember)
36
+ @members.sort_by!{ |member| member.name }
37
+ end
38
+
39
+ ###############################################################################
40
+
41
+ def count
42
+ return @members.length
43
+ end
44
+
45
+ ###############################################################################
46
+
47
+ def has_player(player:)
48
+ result = false
49
+
50
+ @members.each do |member|
51
+ result = true if member.id == player
52
+ end
53
+
54
+ return result
55
+ end
56
+
57
+ ###############################################################################
58
+
59
+ def to_s
60
+ result = String.new
61
+
62
+ @members.each do |member|
63
+ result += member.to_s
64
+ end
65
+
66
+ return result
67
+ end
68
+
69
+ ###############################################################################
70
+
71
+ end
72
+
73
+ ###############################################################################
74
+
75
+ end
76
+
77
+ ###############################################################################
78
+
79
+ end
80
+
81
+ ###############################################################################
82
+
83
+ end
84
+
85
+ ###############################################################################