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
|
||||
//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 |