continued work on ~lolchamp, added items
| @@ -43,7 +43,7 @@ namespace NadekoBot.Classes.Trivia { | ||||
|                 CurrentQuestion = TriviaQuestionPool.Instance.GetRandomQuestion(oldQuestions); | ||||
|                 if (CurrentQuestion == null) { | ||||
|                     await _channel.SendMessage($":exclamation: Failed loading a trivia question"); | ||||
|                     End(); | ||||
|                     End().Wait(); | ||||
|                     return; | ||||
|                 } | ||||
|                 oldQuestions.Add(CurrentQuestion); //add it to exclusion list so it doesn't show up again | ||||
| @@ -64,7 +64,6 @@ namespace NadekoBot.Classes.Trivia { | ||||
|                     //timeout | ||||
|                     await Task.Delay(QuestionDurationMiliseconds - HintTimeoutMiliseconds, triviaCancelSource.Token); | ||||
|  | ||||
|  | ||||
|                 } catch (TaskCanceledException) { | ||||
|                     Console.WriteLine("Trivia cancelled"); | ||||
|                      | ||||
| @@ -81,6 +80,7 @@ namespace NadekoBot.Classes.Trivia { | ||||
|         } | ||||
|  | ||||
|         private async Task End() { | ||||
|             ShouldStopGame = true; | ||||
|             await _channel.SendMessage("**Trivia game ended**"); | ||||
|             await _channel.SendMessage(GetLeaderboard()); | ||||
|             TriviaGame throwAwayValue; | ||||
|   | ||||
| @@ -7,24 +7,90 @@ using Discord.Commands; | ||||
| using NadekoBot; | ||||
| using System.Drawing; | ||||
| using NadekoBot.Extensions; | ||||
|  | ||||
| using Newtonsoft.Json.Linq; | ||||
| namespace NadekoBot.Commands { | ||||
|     class LoLCommands : DiscordCommand { | ||||
|         public override Func<CommandEventArgs, Task> DoFunc() { | ||||
|             throw new NotImplementedException(); | ||||
|         } | ||||
|  | ||||
|         class MatchupModel { | ||||
|             public int Games { get; set; } | ||||
|             public float WinRate { get; set; } | ||||
|             [Newtonsoft.Json.JsonProperty("key")] | ||||
|             public string Name { get; set; } | ||||
|             public float StatScore { get; set; } | ||||
|         } | ||||
|  | ||||
|         public override void Init(CommandGroupBuilder cgb) { | ||||
|             cgb.CreateCommand("~lolchamp") | ||||
|                   .Description("Checks champion statistic for a lol champion.") | ||||
|                   .Parameter("region", ParameterType.Unparsed) | ||||
|                   .Parameter("champ", ParameterType.Required) | ||||
|                   .Parameter("position", ParameterType.Unparsed) | ||||
|                   .Do(async e => { | ||||
|                       if (string.IsNullOrWhiteSpace(e.GetArg("region"))) | ||||
|                           return; | ||||
|                       try { | ||||
|                           var arg = e.GetArg("region"); | ||||
|                           var data = Newtonsoft.Json.Linq.JArray.Parse(await Classes.SearchHelper.GetResponseAsync($"http://api.champion.gg/stats/champs/{e.GetArg("region")}?api_key={NadekoBot.creds.LOLAPIKey}"))[0]; | ||||
|                           //get role | ||||
|                           string role = ResolvePos(e.GetArg("position")); | ||||
|                           var name = e.GetArg("champ").Replace(" ",""); | ||||
|  | ||||
|                           //get basic champion stats | ||||
|                           var allData = JArray.Parse(await Classes.SearchHelper.GetResponseAsync($"http://api.champion.gg/stats/champs/{name}?api_key={NadekoBot.creds.LOLAPIKey}")); | ||||
|                           JToken data = null; | ||||
|                           if (role != null) { | ||||
|                               for (int i = 0; i < allData.Count; i++) { | ||||
|                                   if (allData[i]["role"].ToString().Equals(role)) { | ||||
|                                       data = allData[i]; | ||||
|                                       break; | ||||
|                                   } | ||||
|                               } | ||||
|                               if (data == null) { | ||||
|                                   await e.Channel.SendMessage("💢 Data for that role does not exist."); | ||||
|                                   return; | ||||
|                               } | ||||
|                           } | ||||
|                           else { | ||||
|                               data = allData[0]; | ||||
|                               role = allData[0]["role"].ToString(); | ||||
|                           } | ||||
|                           //name = data["title"].ToString(); | ||||
|                           // get all possible roles, and "select" the shown one | ||||
|                           var roles = new string[allData.Count]; | ||||
|                           for (int i = 0; i < allData.Count; i++) { | ||||
|                               roles[i] = allData[i]["role"].ToString(); | ||||
|                               if (roles[i] == role) | ||||
|                                   roles[i] = ">" + roles[i] + "<"; | ||||
|                           } | ||||
|                           var general = data["general"]; | ||||
|  | ||||
|                           //get build data for this role | ||||
|                           var buildDatas = JArray.Parse(await Classes.SearchHelper.GetResponseAsync($"http://api.champion.gg/champion/{name}/items/finished/mostPopular?api_key={NadekoBot.creds.LOLAPIKey}")); | ||||
|                           JToken buildData = null; | ||||
|                           for (int i = 0; i < buildDatas.Count; i++) { | ||||
|                               if (buildDatas[i]["role"].ToString() == role) { | ||||
|                                   buildData = buildDatas[i]; | ||||
|                               } | ||||
|                           } | ||||
|                           if (buildData == null) | ||||
|                               return; // wtf would cause this tho? | ||||
|                           var items = new string[6]; | ||||
|                           for (int i = 0; i < 6; i++) { | ||||
|                               items[i] = buildData["items"][i].ToString(); | ||||
|                           } | ||||
|                           var matchupDatas = JArray.Parse(await Classes.SearchHelper.GetResponseAsync($"http://api.champion.gg/champion/{name}/matchup?api_key={NadekoBot.creds.LOLAPIKey}")); | ||||
|                           List<MatchupModel> matchupDataIE = null; | ||||
|                           for (int i = 0; i < matchupDatas.Count; i++) { | ||||
|                               if (matchupDatas[i]["role"].ToString() == role) { | ||||
|                                   matchupDataIE = matchupDatas[i]["matchups"].ToObject<List<MatchupModel>>(); | ||||
|                               } | ||||
|                           } | ||||
|                           if (matchupDataIE == null) | ||||
|                               return; | ||||
|                           var matchupData = matchupDataIE.OrderBy(m => m.StatScore).ToArray(); | ||||
|                           //matchupData.OrderBy(mm => mm.WinRate); | ||||
|  | ||||
|                           var countered = new[] { matchupData[0].Name, matchupData[1].Name, matchupData[2].Name }; | ||||
|                           var counters = new[] { matchupData[matchupData.Length - 1].Name, matchupData[matchupData.Length - 2].Name, matchupData[matchupData.Length - 3].Name }; | ||||
|  | ||||
|                           //todo save this for at least 1 hour | ||||
|                           Image img = Image.FromFile("data/lol/bg.png"); | ||||
|                           using (Graphics g = Graphics.FromImage(img)) { | ||||
| @@ -32,19 +98,23 @@ namespace NadekoBot.Commands { | ||||
|                               int margin = 5; | ||||
|                               int imageSize = 75; | ||||
|                               var normalFont = new Font("Times New Roman", 9, FontStyle.Regular); | ||||
|                               var smallFont = new Font("Times New Roman", 8, FontStyle.Regular); | ||||
|                               //draw champ image | ||||
|                               g.DrawImage(Image.FromFile($"data/lol/champions/{data["title"].ToString()}.png"), new Rectangle(margin, margin, imageSize, imageSize)); | ||||
|                               g.DrawImage(Image.FromFile($"data/lol/champions/{name}.png"), new Rectangle(margin, margin, imageSize, imageSize)); | ||||
|                               //draw champ name | ||||
|                               g.DrawString($"{data["title"]}", new Font("Times New Roman", 25, FontStyle.Regular), Brushes.WhiteSmoke, margin + imageSize + margin, margin); | ||||
|                               //draw champ surname | ||||
|                               //todo | ||||
|                               //draw roles | ||||
|                               g.DrawString( | ||||
| @"    Average Stats | ||||
|  | ||||
| Kills: 5.12    CS: 250.5 | ||||
| Deaths: 0.01   Win: 99% | ||||
| Assists: 6.55  Ban: 10% | ||||
|                               g.DrawString("Roles: " + string.Join(", ", roles), normalFont, Brushes.WhiteSmoke, margin, margin + imageSize + margin); | ||||
|                               //draw average stats | ||||
|                               g.DrawString( | ||||
| $@"    Average Stats | ||||
|  | ||||
| Kills: {general["kills"]}     CS: {general["minionsKilled"]} | ||||
| Deaths: {general["deaths"]}  Win: {general["winPercent"]}% | ||||
| Assists: {general["assists"]}  Ban: {general["banRate"]}% | ||||
| ", normalFont, Brushes.WhiteSmoke, img.Width - 150, margin); | ||||
|                               //draw masteries | ||||
|                               g.DrawString($"MASTERIES: 18 / 0 / 12", normalFont, Brushes.WhiteSmoke, margin, margin + imageSize + margin + 20); | ||||
| @@ -55,39 +125,44 @@ Assists: 6.55  Ban: 10% | ||||
| 9 x Greater Seal of Armor | ||||
| 3 x Greater Quintessence of Attack Speed", normalFont, Brushes.WhiteSmoke, margin, margin + imageSize + margin + 40); | ||||
|                               //draw counters | ||||
|                               g.DrawString($"Best against", smallFont, Brushes.WhiteSmoke, margin, img.Height - imageSize + margin); | ||||
|                               int smallImgSize = 50; | ||||
|                               var counters = new string[] { "Yasuo", "Yasuo", "Yasuo" }; | ||||
|  | ||||
|                               for (int i = 0; i < counters.Length; i++) { | ||||
|                                   g.DrawImage(Image.FromFile("data/lol/champions/" + counters[i] + ".png"), new Rectangle(i * (smallImgSize + margin) + margin, img.Height - smallImgSize - margin, smallImgSize, smallImgSize)); | ||||
|                                   g.DrawImage(Image.FromFile("data/lol/champions/" + counters[i] + ".png"), | ||||
|                                               new Rectangle(i * (smallImgSize + margin) + margin, img.Height - smallImgSize - margin, | ||||
|                                               smallImgSize, | ||||
|                                               smallImgSize)); | ||||
|                               } | ||||
|                               //draw countered by | ||||
|                               var countered = new string[] { "Yasuo", "Yasuo", "Yasuo" }; | ||||
|                               g.DrawString($"Worst against", smallFont, Brushes.WhiteSmoke, img.Width - 3 * (smallImgSize + margin), img.Height - imageSize + margin); | ||||
|  | ||||
|                               for (int i = 0; i < countered.Length; i++) { | ||||
|                                   g.DrawImage(Image.FromFile("data/lol/champions/" + counters[i] + ".png"), new Rectangle(i * (smallImgSize + margin) + margin, img.Height - smallImgSize - margin, smallImgSize, smallImgSize)); | ||||
|                                   int j = countered.Length - i; | ||||
|                                   g.DrawImage(Image.FromFile("data/lol/champions/" + countered[i] + ".png"), | ||||
|                                               new Rectangle(img.Width - (j * (smallImgSize + margin) + margin), img.Height - smallImgSize - margin, | ||||
|                                               smallImgSize, | ||||
|                                               smallImgSize)); | ||||
|                               } | ||||
|                               //draw item build | ||||
|                               var build = new string[] { "Bloodthirster", "Bloodthirster", "Bloodthirster", "Bloodthirster", "Bloodthirster", "Bloodthirster" }; | ||||
|                               g.DrawString("Popular build", normalFont, Brushes.WhiteSmoke, img.Width - (3 * (smallImgSize + margin) + margin), 77); | ||||
|  | ||||
|                               for (int i = 0; i < 6; i++) { | ||||
|                                   var inverse_i = 5 - i; | ||||
|                                   var j = inverse_i % 3 + 1; | ||||
|                                   var k = inverse_i / 3; | ||||
|                                   Console.WriteLine(k); | ||||
|                                   g.DrawImage(Image.FromFile("data/lol/items/" + items[i] + ".png"), | ||||
|                                               new Rectangle(img.Width - (j * (smallImgSize + margin) + margin), 92 + k * (smallImgSize + margin), | ||||
|                                               smallImgSize, | ||||
|                                               smallImgSize)); | ||||
|                               } | ||||
|  | ||||
|                               /* | ||||
|                               int kdkdPosTop = 75; | ||||
|                               Font kdkdFont = new Font("Bodoni MT", statsFontSize, FontStyle.Regular); | ||||
|                               string killsString = "Kills:"; | ||||
|                               SizeF killsSize = g.MeasureString(killsString, kdkdFont); | ||||
|                               string deathsString = "Deaths:"; | ||||
|                               SizeF deathsSize = g.MeasureString(deathsString, kdkdFont); | ||||
|                               string k_dString = "K/D:"; | ||||
|                               SizeF k_dSize = g.MeasureString(k_dString, kdkdFont); | ||||
|                              // g.DrawString(k_dString, Brushes.WhiteSmoke,200, kdkdPosTop); | ||||
|                               g.DrawString($"       {general["kills"]}             { general["deaths"]}        { float.Parse(general["kills"].ToString()) / float.Parse(general["deaths"].ToString()):f2}" | ||||
|                                   ,new Font("Bodoni MT", statsFontSize, FontStyle.Regular), Brushes.OrangeRed, 200, kdkdPosTop); | ||||
|                                | ||||
|                                   */ | ||||
|                           } | ||||
|                           await e.Channel.SendFile(data["title"] + "_stats.png", img.ToStream()); | ||||
|                           await e.Channel.SendMessage( | ||||
| $@"**`Champion Name:` {data["title"]} | ||||
|  | ||||
| `Minions:` **{general["minionsKilled"]}** | ||||
| `Win percentage:` **{general["winPercent"]}%** | ||||
| "); | ||||
|                       } | ||||
|                       catch (Exception ex) { | ||||
|                           await e.Channel.SendMessage("💢 Failed retreiving data for that champion."); | ||||
| @@ -95,5 +170,43 @@ $@"**`Champion Name:` {data["title"]} | ||||
|                       } | ||||
|                   }); | ||||
|         } | ||||
|  | ||||
|         private string ResolvePos(string pos) { | ||||
|             if (string.IsNullOrWhiteSpace(pos)) | ||||
|                 return null; | ||||
|             switch (pos.ToLowerInvariant()) { | ||||
|                 case "m": | ||||
|                 case "mid": | ||||
|                 case "midorfeed": | ||||
|                 case "midd": | ||||
|                 case "middle": | ||||
|                     return "Middle"; | ||||
|                 case "top": | ||||
|                 case "topp": | ||||
|                 case "t": | ||||
|                 case "toporfeed": | ||||
|                     return "Top"; | ||||
|                 case "j": | ||||
|                 case "jun": | ||||
|                 case "jungl": | ||||
|                 case "jungle": | ||||
|                     return "Jungle"; | ||||
|                 case "a": | ||||
|                 case "ad": | ||||
|                 case "adc": | ||||
|                 case "carry": | ||||
|                 case "ad carry": | ||||
|                 case "adcarry": | ||||
|                 case "c": | ||||
|                     return "ADC"; | ||||
|                 case "s": | ||||
|                 case "sup": | ||||
|                 case "supp": | ||||
|                 case "support": | ||||
|                     return "Support"; | ||||
|                 default: | ||||
|                     return pos; | ||||
|             } | ||||
|         } | ||||
|     } | ||||
| } | ||||
|   | ||||
| @@ -13,7 +13,7 @@ namespace NadekoBot.Modules { | ||||
|     class Searches : DiscordModule { | ||||
|         private Random _r; | ||||
|         public Searches() : base() { | ||||
|             //commands.Add(new LoLCommands()); | ||||
|             commands.Add(new LoLCommands()); | ||||
|             _r = new Random(); | ||||
|         } | ||||
|  | ||||
|   | ||||
							
								
								
									
										
											BIN
										
									
								
								NadekoBot/bin/Debug/data/lol/bg.png
									
									
									
									
									
										Normal file
									
								
							
							
						
						| After Width: | Height: | Size: 84 KiB | 
							
								
								
									
										
											BIN
										
									
								
								NadekoBot/bin/Debug/data/lol/champions/Aatrox.png
									
									
									
									
									
										Normal file
									
								
							
							
						
						| After Width: | Height: | Size: 14 KiB | 
							
								
								
									
										
											BIN
										
									
								
								NadekoBot/bin/Debug/data/lol/champions/Ahri.png
									
									
									
									
									
										Normal file
									
								
							
							
						
						| After Width: | Height: | Size: 18 KiB | 
| Before Width: | Height: | Size: 38 KiB After Width: | Height: | Size: 17 KiB | 
| Before Width: | Height: | Size: 35 KiB After Width: | Height: | Size: 18 KiB | 
| Before Width: | Height: | Size: 39 KiB After Width: | Height: | Size: 14 KiB | 
							
								
								
									
										
											BIN
										
									
								
								NadekoBot/bin/Debug/data/lol/champions/Anivia.png
									
									
									
									
									
										Normal file
									
								
							
							
						
						| After Width: | Height: | Size: 16 KiB | 
| Before Width: | Height: | Size: 41 KiB After Width: | Height: | Size: 20 KiB | 
| Before Width: | Height: | Size: 43 KiB After Width: | Height: | Size: 21 KiB | 
| Before Width: | Height: | Size: 33 KiB After Width: | Height: | Size: 16 KiB | 
| Before Width: | Height: | Size: 42 KiB After Width: | Height: | Size: 20 KiB | 
| Before Width: | Height: | Size: 30 KiB | 
| Before Width: | Height: | Size: 38 KiB After Width: | Height: | Size: 20 KiB | 
| Before Width: | Height: | Size: 42 KiB After Width: | Height: | Size: 21 KiB | 
| Before Width: | Height: | Size: 35 KiB After Width: | Height: | Size: 14 KiB | 
| Before Width: | Height: | Size: 36 KiB | 
| Before Width: | Height: | Size: 38 KiB After Width: | Height: | Size: 18 KiB | 
| Before Width: | Height: | Size: 38 KiB After Width: | Height: | Size: 17 KiB | 
| Before Width: | Height: | Size: 39 KiB After Width: | Height: | Size: 21 KiB | 
| Before Width: | Height: | Size: 14 KiB After Width: | Height: | Size: 16 KiB | 
| Before Width: | Height: | Size: 36 KiB After Width: | Height: | Size: 14 KiB | 
| Before Width: | Height: | Size: 36 KiB After Width: | Height: | Size: 13 KiB | 
| Before Width: | Height: | Size: 37 KiB After Width: | Height: | Size: 18 KiB | 
| Before Width: | Height: | Size: 36 KiB After Width: | Height: | Size: 14 KiB | 
| Before Width: | Height: | Size: 38 KiB After Width: | Height: | Size: 16 KiB | 
| Before Width: | Height: | Size: 34 KiB After Width: | Height: | Size: 19 KiB | 
| Before Width: | Height: | Size: 35 KiB After Width: | Height: | Size: 17 KiB | 
| Before Width: | Height: | Size: 42 KiB After Width: | Height: | Size: 22 KiB | 
| Before Width: | Height: | Size: 36 KiB After Width: | Height: | Size: 16 KiB | 
| Before Width: | Height: | Size: 40 KiB After Width: | Height: | Size: 19 KiB | 
| Before Width: | Height: | Size: 39 KiB After Width: | Height: | Size: 15 KiB | 
| Before Width: | Height: | Size: 40 KiB After Width: | Height: | Size: 20 KiB | 
| Before Width: | Height: | Size: 38 KiB After Width: | Height: | Size: 19 KiB | 
| Before Width: | Height: | Size: 42 KiB After Width: | Height: | Size: 19 KiB | 
| Before Width: | Height: | Size: 34 KiB After Width: | Height: | Size: 17 KiB | 
| Before Width: | Height: | Size: 36 KiB After Width: | Height: | Size: 19 KiB | 
| Before Width: | Height: | Size: 33 KiB After Width: | Height: | Size: 18 KiB | 
| Before Width: | Height: | Size: 38 KiB After Width: | Height: | Size: 16 KiB | 
| Before Width: | Height: | Size: 42 KiB After Width: | Height: | Size: 22 KiB | 
| Before Width: | Height: | Size: 33 KiB After Width: | Height: | Size: 17 KiB | 
| Before Width: | Height: | Size: 38 KiB After Width: | Height: | Size: 18 KiB | 
| Before Width: | Height: | Size: 38 KiB After Width: | Height: | Size: 18 KiB | 
| Before Width: | Height: | Size: 35 KiB After Width: | Height: | Size: 18 KiB | 
| Before Width: | Height: | Size: 38 KiB After Width: | Height: | Size: 18 KiB | 
| Before Width: | Height: | Size: 37 KiB After Width: | Height: | Size: 13 KiB | 
| Before Width: | Height: | Size: 32 KiB After Width: | Height: | Size: 17 KiB | 
| Before Width: | Height: | Size: 14 KiB After Width: | Height: | Size: 17 KiB | 
| Before Width: | Height: | Size: 16 KiB After Width: | Height: | Size: 18 KiB | 
| Before Width: | Height: | Size: 39 KiB After Width: | Height: | Size: 18 KiB | 
| Before Width: | Height: | Size: 36 KiB After Width: | Height: | Size: 18 KiB | 
| Before Width: | Height: | Size: 42 KiB After Width: | Height: | Size: 21 KiB | 
| Before Width: | Height: | Size: 36 KiB After Width: | Height: | Size: 17 KiB | 
| Before Width: | Height: | Size: 39 KiB After Width: | Height: | Size: 18 KiB | 
| Before Width: | Height: | Size: 38 KiB After Width: | Height: | Size: 23 KiB | 
| Before Width: | Height: | Size: 38 KiB After Width: | Height: | Size: 13 KiB | 
| Before Width: | Height: | Size: 16 KiB After Width: | Height: | Size: 20 KiB | 
| Before Width: | Height: | Size: 38 KiB After Width: | Height: | Size: 19 KiB | 
| Before Width: | Height: | Size: 9.8 KiB After Width: | Height: | Size: 16 KiB | 
| Before Width: | Height: | Size: 36 KiB After Width: | Height: | Size: 15 KiB | 
| Before Width: | Height: | Size: 39 KiB After Width: | Height: | Size: 21 KiB | 
| Before Width: | Height: | Size: 42 KiB After Width: | Height: | Size: 18 KiB | 
| Before Width: | Height: | Size: 38 KiB After Width: | Height: | Size: 19 KiB | 
| Before Width: | Height: | Size: 39 KiB After Width: | Height: | Size: 17 KiB | 
| Before Width: | Height: | Size: 42 KiB After Width: | Height: | Size: 19 KiB | 
| Before Width: | Height: | Size: 36 KiB After Width: | Height: | Size: 17 KiB | 
| Before Width: | Height: | Size: 37 KiB After Width: | Height: | Size: 16 KiB | 
| Before Width: | Height: | Size: 38 KiB After Width: | Height: | Size: 19 KiB | 
| Before Width: | Height: | Size: 38 KiB After Width: | Height: | Size: 18 KiB | 
| Before Width: | Height: | Size: 33 KiB | 
| Before Width: | Height: | Size: 17 KiB After Width: | Height: | Size: 17 KiB | 
							
								
								
									
										
											BIN
										
									
								
								NadekoBot/bin/Debug/data/lol/champions/MonkeyKing.png
									
									
									
									
									
										Normal file
									
								
							
							
						
						| After Width: | Height: | Size: 19 KiB | 
| Before Width: | Height: | Size: 40 KiB After Width: | Height: | Size: 17 KiB | 
| Before Width: | Height: | Size: 42 KiB After Width: | Height: | Size: 18 KiB | 
| Before Width: | Height: | Size: 38 KiB After Width: | Height: | Size: 20 KiB | 
| Before Width: | Height: | Size: 42 KiB After Width: | Height: | Size: 18 KiB | 
| Before Width: | Height: | Size: 37 KiB After Width: | Height: | Size: 17 KiB | 
| Before Width: | Height: | Size: 40 KiB After Width: | Height: | Size: 15 KiB | 
| Before Width: | Height: | Size: 39 KiB After Width: | Height: | Size: 18 KiB | 
| Before Width: | Height: | Size: 41 KiB After Width: | Height: | Size: 18 KiB | 
| Before Width: | Height: | Size: 39 KiB After Width: | Height: | Size: 20 KiB | 
| Before Width: | Height: | Size: 35 KiB After Width: | Height: | Size: 16 KiB | 
| Before Width: | Height: | Size: 13 KiB After Width: | Height: | Size: 16 KiB | 
| Before Width: | Height: | Size: 40 KiB After Width: | Height: | Size: 22 KiB | 
| Before Width: | Height: | Size: 38 KiB After Width: | Height: | Size: 18 KiB | 
| Before Width: | Height: | Size: 38 KiB After Width: | Height: | Size: 21 KiB | 
| Before Width: | Height: | Size: 15 KiB | 
							
								
								
									
										
											BIN
										
									
								
								NadekoBot/bin/Debug/data/lol/champions/RekSai.png
									
									
									
									
									
										Normal file
									
								
							
							
						
						| After Width: | Height: | Size: 18 KiB | 
| Before Width: | Height: | Size: 38 KiB After Width: | Height: | Size: 20 KiB | 
| Before Width: | Height: | Size: 40 KiB After Width: | Height: | Size: 21 KiB | 
| Before Width: | Height: | Size: 37 KiB After Width: | Height: | Size: 17 KiB | 
| Before Width: | Height: | Size: 37 KiB After Width: | Height: | Size: 20 KiB | 
| Before Width: | Height: | Size: 41 KiB After Width: | Height: | Size: 16 KiB | 
| Before Width: | Height: | Size: 43 KiB After Width: | Height: | Size: 20 KiB | 
| Before Width: | Height: | Size: 38 KiB After Width: | Height: | Size: 18 KiB | 
| Before Width: | Height: | Size: 37 KiB After Width: | Height: | Size: 16 KiB | 
| Before Width: | Height: | Size: 36 KiB After Width: | Height: | Size: 20 KiB | 
| Before Width: | Height: | Size: 40 KiB After Width: | Height: | Size: 18 KiB |