public async Task DBDStats(string steamId) { PullPlayerStats PullStats = new PullPlayerStats(); SaveStatsToJson Save = new SaveStatsToJson(); ReadStatsFiles ReadFiles = new ReadStatsFiles(); DateTime Time = GetTime.CurrentTime(); DaylightStatModel.Playerstats PlayerStats = ReadFiles.ReadIndividualPlayerFile(steamId); if (PlayerStats == null || Time.AddHours(-24) > PlayerStats.LastUpdated) { PlayerStats = PullStats.PlayerStats(steamId); } if (PlayerStats.SteamId != "1") { //File Write AccessDropbox LinkToStatsDownload = new AccessDropbox(); GetCheckDirectory.CheckDirectory(); Save.WriteToFile(PlayerStats); var BuildOutput = EmbedOutput.BuildDBDStats(PlayerStats, LinkToStatsDownload.SCreateDBoxClient(PlayerStats).Result); await Context.Channel.SendMessageAsync("", false, BuildOutput.Build()); } else { await Context.Channel.SendMessageAsync("", false, EmbedOutput.DBDAPIFailure(PlayerStats.SteamId).Build()); } }
public async Task <string> SCreateDBoxClient(DaylightStatModel.Playerstats PlayerData) { using (var dbox = new DropboxClient(StaticDetails.DropboxToken)) { using (var mem = new MemoryStream(File.ReadAllBytes(StaticDetails.BuildFilePath(StaticDetails.DataDirectoryPath, $"{PlayerData.SteamId}.json")))) { try { var UploadFileDbox = dbox.Files.UploadAsync($"/{PlayerData.SteamId}.json", WriteMode.Overwrite.Instance, body: mem); UploadFileDbox.Wait(); var DboxListSharedLinks = dbox.Sharing.ListSharedLinksAsync($"/{PlayerData.SteamId}.json"); DboxListSharedLinks.Wait(); //SharedLinkSettings Settings = new SharedLinkSettings(); //Settings.Expires.Value.Add foreach (var current in DboxListSharedLinks.Result.Links) { if (current.Name == $"{PlayerData.SteamId}.json") { return(current.Url); } } var DownloadLink = dbox.Sharing.CreateSharedLinkWithSettingsAsync($"/{PlayerData.SteamId}.json"); DownloadLink.Wait(); return(DownloadLink.Result.Url); } catch (Exception msg) { return("Failed to created link"); } } } }
/// <summary> /// Class file that reads the json file from disk. If the file isn't empty we return it's contents. /// Otherwise we return null. /// </summary> /// <returns></returns> public DaylightStatModel.Playerstats ReadIndividualPlayerFile(string id) { DaylightStatModel.Playerstats obj = new DaylightStatModel.Playerstats(); try { if (!File.Exists(StaticDetails.BuildFilePath(StaticDetails.DataDirectoryPath, $"{id}.json"))) { var SteamIDJson = File.Create(StaticDetails.BuildFilePath(StaticDetails.DataDirectoryPath, $"{id}.json")); SteamIDJson.Close(); return(null); } var file = File.ReadAllText(StaticDetails.BuildFilePath(StaticDetails.DataDirectoryPath, $"{id}.json")); if (file != "") { JsonConvert.PopulateObject(file, obj); return(obj); } else { return(null); } } catch (Exception msg) { Console.WriteLine(msg); throw; } }
///< summary > /// Class built to house any output the bot may need to distribute. We do this by using the EmbedBuilder from Discord. /// </ summary > public static EmbedBuilder BuildDBDStats(DaylightStatModel.Playerstats obj, string url) { PullSteamUserData Pull = new PullSteamUserData(); RemoveFilteredItems FilterItems = new RemoveFilteredItems(); var SteamInfo = Pull.UserSummary(obj.SteamId); obj = FilterItems.RemoveUselessStats(obj); EmbedBuilder DBDStatsOutput = new EmbedBuilder(); if (SteamInfo != null) { DBDStatsOutput.Title = $"{SteamInfo.response.players[0].Personaname}'s Dead By Daylight Stats."; } else { DBDStatsOutput.Title = "Interesting DBD Stats."; } DBDStatsOutput.Timestamp = obj.LastUpdated; DBDStatsOutput.WithFooter("Contact Coaction#5994 for any issues. This is a work in progress."); DBDStatsOutput.WithDescription( $"Download the rest of your stats [HERE]({url})! \n\n Hours Played: {(SteamInfo.Game.playtime_forever / 60).ToString() ?? "No Hours Found"} \n"); DBDStatsOutput.WithColor(4124426); foreach (var x in obj.Stats) { DBDStatsOutput.AddField(x.Name, String.Format("{0:n0}", x.Value), true); } return(DBDStatsOutput); }
public DaylightStatModel.Playerstats RemoveUselessStats(DaylightStatModel.Playerstats obj) { ///< summary > /// Loop through < see cref="aryFilter"/> in order to remove unncessary stats stats from <see cref="DaylightStatModel"/> object. /// </ summary > /// DaylightStatModel.Playerstats newobj = new DaylightStatModel.Playerstats(); newobj.Stats = new List <DaylightStatModel.Stat>(); if (StatFilterDictionary.DictionaryFilter.Count == 0) { StatFilterDictionary.DictionaryFilter = StatFilterDictionary.GetFilterDictionary(); } newobj.GameName = obj.GameName; newobj.LastUpdated = obj.LastUpdated; newobj.SteamId = obj.SteamId; foreach (var item in StatFilterDictionary.DictionaryFilter) { var current = obj.Stats.Find(x => x.Name == item.Key); if (current == null) { break; } current.Name = StatFilterDictionary.DictionaryFilter[current.Name]; newobj.Stats.Add(current); } return(newobj); }
/// <summary> /// Class file designed to save our list of player's stats, steam ID and Game to a JSON file. /// </summary> /// <param name="newEntryObj"></param> public void WriteToFile(DaylightStatModel.Playerstats newEntryObj) { using (StreamWriter file = File.CreateText(StaticDetails.BuildFilePath(StaticDetails.DataDirectoryPath, $"{newEntryObj.SteamId}.json"))) { JsonSerializer serializer = new JsonSerializer(); serializer.Formatting = Formatting.Indented; serializer.Serialize(file, newEntryObj); } }
///< summary > /// API Call to Steam's API and storing the call within the < see cref = "DaylightStatModel" /> data model. /// </ summary > /// public DaylightStatModel.Playerstats PlayerStats(string _steamID) { DaylightStatModel.Playerstats obj = new DaylightStatModel.Playerstats(); using (var web = new WebClient()) { try { var _url = string.Format($"http://api.steampowered.com/ISteamUserStats/GetUserStatsForGame/v0002/?appid={StaticDetails.AppID}&key={StaticDetails.SteamAPIKey}&steamid={_steamID}&format=json"); _downloadNews = web.DownloadString(_url); } catch (WebException msg) { obj.SteamId = "1"; return(obj); } //Store downloaded stats into memory. var DownloadedStats = JsonConvert.DeserializeObject <DaylightStatModel>(_downloadNews); obj = DownloadedStats.PlayerStats; obj.LastUpdated = GetTime.CurrentTime(); return(obj); } }