diff --git a/src/NadekoBot/Modules/Searches/Searches.cs b/src/NadekoBot/Modules/Searches/Searches.cs index 4a120f3b..19642917 100644 --- a/src/NadekoBot/Modules/Searches/Searches.cs +++ b/src/NadekoBot/Modules/Searches/Searches.cs @@ -493,6 +493,160 @@ $@"🌍 **Weather for** 【{obj["target"]}】 return matches[rng.Next(0, matches.Count)].Groups["url"].Value; } } + + [NadekoCommand, Usage, Description, Aliases] + [RequireContext(ContextType.Guild)] + public async Task BFO(IUserMessage umsg, [Remainder] string game = null) + { + var channel = (ITextChannel)umsg.Channel; + if (string.IsNullOrWhiteSpace(game)) + { + await channel.SendMessageAsync("💢 Please enter a game `(bf3, bf4)`").ConfigureAwait(false); + return; + } + await umsg.Channel.TriggerTypingAsync().ConfigureAwait(false); + using (var http = new HttpClient()) + { + http.DefaultRequestHeaders.Clear(); + try + { + if (game.Equals("bf3", StringComparison.OrdinalIgnoreCase)) + { + var res = await http.GetStringAsync($"http://api.bf3stats.com/global/onlinestats/").ConfigureAwait(false); + var items = JObject.Parse(res); + var sb = new StringBuilder(); + var status = items["status"]; + var x360 = items["360"]; + var ps3 = items["ps3"]; + var pc = items["pc"]; + + var response = $@"```css +[☕ BF3 Status: {status.ToString().ToUpper()}] +XBOX360: ✔[{x360.ToString()}] +PS3: ✔[{ps3.ToString()}] +PC: ✔[{pc.ToString()}] +```"; + await channel.SendMessageAsync(response); + } + else if (game.Equals("bf4", StringComparison.OrdinalIgnoreCase)) + { + var res = await http.GetStringAsync($"http://api.bf4stats.com/api/onlinePlayers?output=json").ConfigureAwait(false); + var items = JObject.Parse(res); + var sb = new StringBuilder(); + var status = !string.IsNullOrEmpty(items.ToString()) ? "OK" : "BAD"; + var pc = items["pc"]; + var ps3 = items["ps3"]; + var ps4 = items["ps4"]; + var xbox = items["xbox"]; + var xone = items["xone"]; + + sb.AppendLine("```css"); + sb.AppendLine($"[☕ BF4 Status: {status}]"); + + foreach (var i in items) { + var plat = items[i.Key]; + sb.AppendLine($"{plat["label"]}: ✔[{plat["count"]}] / ↑[{plat["peak24"]}]"); + } + + sb.Append("```"); + await channel.SendMessageAsync(sb.ToString()); + } + } catch + { + await channel.SendMessageAsync($"💢 BF3/BF4 API is most likely not working at the moment or could not find {game}.").ConfigureAwait(false); + } + } + } + + [NadekoCommand, Usage, Description, Aliases] + [RequireContext(ContextType.Guild)] + public async Task BFU(IUserMessage umsg, string platform, string game, [Remainder] string query = null) + { + var channel = (ITextChannel)umsg.Channel; + if (string.IsNullOrWhiteSpace(platform) || string.IsNullOrWhiteSpace(game) || string.IsNullOrWhiteSpace(query)) + { + await channel.SendMessageAsync("💢 Please enter a platform `(pc, xbox, ps3, xone, ps4)`, game `(bf3, bf4)`, followed by a search query.").ConfigureAwait(false); + return; + } + await umsg.Channel.TriggerTypingAsync().ConfigureAwait(false); + using (var http = new HttpClient()) + { + http.DefaultRequestHeaders.Clear(); + try + { + if (game.Equals("bf3", StringComparison.OrdinalIgnoreCase)) + { + var res = await http.GetStringAsync($"http://api.bf3stats.com/{Uri.EscapeUriString(platform)}/playerlist/players={Uri.EscapeUriString(query)}?output=json").ConfigureAwait(false); + var items = JObject.Parse(res); + var sb = new StringBuilder(); + var playerName = items["list"][query]; + var playerTag = playerName["tag"]; + var playerCountryName = playerName["country_name"]; + var playerStats = playerName["stats"]; + var playerRank = playerStats["rank"]; + var playerRank_name = playerRank["name"]; + var playerGlobal_Kills = playerStats["global"]["kills"]; + var playerGlobal_Deaths = playerStats["global"]["deaths"]; + var playerGlobal_KD = Math.Round(Double.Parse(playerGlobal_Kills.ToString()) / Double.Parse(playerGlobal_Deaths.ToString()), 2); + var playerGlobal_Wins = playerStats["global"]["wins"]; + var playerGlobal_Losses = playerStats["global"]["losses"]; + var playerGlobal_WL = Math.Round(Double.Parse(playerGlobal_Wins.ToString()) / Double.Parse(playerGlobal_Losses.ToString()), 2); + var playerGlobal_Shots = playerStats["global"]["shots"]; + var playerGlobal_Hits = playerStats["global"]["hits"]; + var playerGlobal_Accuracy = Math.Round(Double.Parse(playerGlobal_Hits.ToString()) / Double.Parse(playerGlobal_Shots.ToString()), 2); + var playerGlobal_ELO = playerStats["global"]["elo"]; + + var response = $@"```css +[☕ BF3 Player: {query}] +Platform: [{platform.ToUpper()}] +Tag: [{playerTag.ToString()}] +K/D: [{playerGlobal_KD.ToString()}] +W/L: [{playerGlobal_WL.ToString()}] +Accuracy: %[{playerGlobal_Accuracy.ToString()}] +ELO: [{playerGlobal_ELO.ToString()}] +```"; + await channel.SendMessageAsync(response); + } else if (game.Equals("bf4", StringComparison.OrdinalIgnoreCase)) + { + var res = await http.GetStringAsync($"http://api.bf4stats.com/api/playerInfo?plat={Uri.EscapeUriString(platform)}&name={Uri.EscapeUriString(query)}&output=json").ConfigureAwait(false); + var items = JObject.Parse(res); + var sb = new StringBuilder(); + + var player = items["player"]; + var playerStats = items["stats"]; + + var playerName = player["name"]; + var playerTag = player["tag"]; + var playerPlatform = player["plat"]; + var playerKills = playerStats["kills"]; + var playerDeaths = playerStats["deaths"]; + var player_KD = Math.Round(Double.Parse(playerKills.ToString()) / Double.Parse(playerDeaths.ToString()), 2); + var playerWins = playerStats["numWins"]; + var playerRounds = playerStats["numRounds"]; + var player_WL = Math.Round(Double.Parse(playerWins.ToString()) / Double.Parse(playerRounds.ToString()), 2); + var shotsFired = playerStats["shotsFired"]; + var shotsHit = playerStats["shotsHit"]; + var accuracy = Math.Round(Double.Parse(shotsHit.ToString()) / Double.Parse(shotsFired.ToString()), 2); + var playerELO = playerStats["elo"]; + + var response = $@"```css +[☕ BF4 Player: {playerName.ToString()}] +Platform: [{playerPlatform.ToString().ToUpper()}] +Tag: [{playerTag.ToString()}] +K/D: [{player_KD.ToString()}] +W/L: [{player_WL.ToString()}] +Accuracy: %[{accuracy.ToString()}] +ELO: [{playerELO.ToString()}] +```"; + await channel.SendMessageAsync(response); + } + } + catch + { + await channel.SendMessageAsync($"💢 BF3/BF4 API is most likely not working at the moment or could not find {query}.").ConfigureAwait(false); + } + } + } [NadekoCommand, Usage, Description, Aliases] [RequireContext(ContextType.Guild)] diff --git a/src/NadekoBot/Resources/CommandStrings.Designer.cs b/src/NadekoBot/Resources/CommandStrings.Designer.cs index c53865ad..ebfe4e3c 100644 --- a/src/NadekoBot/Resources/CommandStrings.Designer.cs +++ b/src/NadekoBot/Resources/CommandStrings.Designer.cs @@ -761,6 +761,60 @@ namespace NadekoBot.Resources { } } + /// + /// Looks up a localized string similar to bfonline bfo. + /// + public static string bfo_cmd { + get { + return ResourceManager.GetString("bfo_cmd", resourceCulture); + } + } + + /// + /// Looks up a localized string similar to Gives you online players for BF3 and BF4. + /// + public static string bfo_desc { + get { + return ResourceManager.GetString("bfo_desc", resourceCulture); + } + } + + /// + /// Looks up a localized string similar to `{0}bfo bf3` or `{0}bfo bf4`. + /// + public static string bfo_usage { + get { + return ResourceManager.GetString("bfo_usage", resourceCulture); + } + } + + /// + /// Looks up a localized string similar to bfuser bfu. + /// + public static string bfu_cmd { + get { + return ResourceManager.GetString("bfu_cmd", resourceCulture); + } + } + + /// + /// Looks up a localized string similar to Gives you back a battlefield user's stats.. + /// + public static string bfu_desc { + get { + return ResourceManager.GetString("bfu_desc", resourceCulture); + } + } + + /// + /// Looks up a localized string similar to `{0}bfu platform game user`. + /// + public static string bfu_usage { + get { + return ResourceManager.GetString("bfu_usage", resourceCulture); + } + } + /// /// Looks up a localized string similar to boobs. /// @@ -5829,7 +5883,7 @@ namespace NadekoBot.Resources { } /// - /// Looks up a localized string similar to `{0}send serverid|c:channelid` or `{0}send serverid|u:userid`. + /// Looks up a localized string similar to `{0}send serverid|c:channelid message` or `{0}send serverid|u:userid message`. /// public static string send_usage { get { diff --git a/src/NadekoBot/Resources/CommandStrings.resx b/src/NadekoBot/Resources/CommandStrings.resx index 500be372..b2a09d58 100644 --- a/src/NadekoBot/Resources/CommandStrings.resx +++ b/src/NadekoBot/Resources/CommandStrings.resx @@ -2673,4 +2673,22 @@ `{0}wikia mtg Vigilance` or `{0}wikia mlp Dashy` + + bfonline bfo + + + Gives you online players for BF3 and BF4 + + + `{0}bfo bf3` or `{0}bfo bf4` + + + bfuser bfu + + + Gives you back a battlefield user's stats. + + + `{0}bfu platform game user` + \ No newline at end of file