private void AddToSortiePostQueue(WarframeSortie sortie, bool notifyClient, bool sortieHasExpired) { if (!_sortieMessagePostQueue.Any(x => x.WarframeEvent.GUID == sortie.GUID)) { _sortieMessagePostQueue.Add(new MessageQueueElement <WarframeSortie>(sortie, notifyClient, sortieHasExpired)); } }
public static string DiscordMessage(this WarframeSortie sortie, bool isNotification) { var info = sortie.VariantDetails; var varDest = sortie.VariantDestinations; var varConditions = sortie.VariantConditions; var statusMessage = new StringBuilder(); if (!sortie.IsExpired()) { if (DateTime.Now < sortie.StartTime) { statusMessage.Append($"Starts {sortie.StartTime:HH:mm} ({ParseMinutesAsTime(sortie.GetMinutesRemaining(true))})"); } else { statusMessage.Append($"Expires {sortie.ExpireTime:HH:mm} ({ParseMinutesAsTime(sortie.GetMinutesRemaining(false))})"); } } else { statusMessage.Append($"Expired ({sortie.ExpireTime:HH:mm})"); } var returnMessage = new StringBuilder(); if (!isNotification) { //Stored boss name in Reward property for convenience. returnMessage.AppendLine($"{sortie.VariantDetails.First().Reward}"); returnMessage.AppendLine(statusMessage + Environment.NewLine); //Stored condition in parsed reward for convenience also. for (var i = 0; i < sortie.VariantDetails.Count; ++i) { returnMessage.AppendLine(varDest[i]); returnMessage.AppendLine($"{info[i].Faction} {info[i].MissionType}"); returnMessage.AppendLine(varConditions[i] + Environment.NewLine); } } else { returnMessage.AppendLine("New Sortie"); returnMessage.AppendLine(sortie.VariantDetails.First().Faction); } return(returnMessage.ToString()); }
public IEnumerable <WarframeSortie> GetSorties() { JObject worldState = _scraper.WorldState; var resultSorties = new List <WarframeSortie>(); //Find Sorties foreach (var jsonSortie in worldState["Sorties"]) { //Check if the sortie has already being tracked WarframeSortie currentSortie = _sortieList.Find(x => x.GUID == jsonSortie["_id"]["$oid"].ToString()); if (currentSortie == null) { var id = jsonSortie["_id"]["$oid"].ToString(); //Variant details var varDests = new List <string>(); var varMissions = new List <MissionInfo>(); var varConditions = new List <string>(); var millisecondsUntilStart = long.Parse(jsonSortie["Activation"]["$date"]["$numberLong"].ToString()) - long.Parse(worldState["Time"].ToString()) * TIME_TO_LONG_MULTIPLIER; var millisecondsUntilExpire = long.Parse(jsonSortie["Expiry"]["$date"]["$numberLong"].ToString()) - long.Parse(worldState["Time"].ToString()) * TIME_TO_LONG_MULTIPLIER; var startTime = DateTime.Now.AddMilliseconds(millisecondsUntilStart); var expireTime = DateTime.Now.AddMilliseconds(millisecondsUntilExpire); //If this sortie doesn't exist in the current list, then loop through the variant node to get mission info for all variants foreach (var variant in jsonSortie["Variants"]) { using (var unit = new UnitOfWork(new WarframeDataContext())) { var loc = variant["node"].ToString(); varDests.Add(unit.WFSolarNodes.GetNodeName(loc)); varConditions.Add(unit.WFSorties.GetCondition(variant["modifierType"].ToString())); //Mission type varies depending on the region var sortieBossID = jsonSortie["Boss"].ToString(); string missionName = variant["missionType"].ToString(); var varMission = new MissionInfo(unit.WFSorties.GetFaction(sortieBossID), missionName, 0, unit.WFSorties.GetBoss(sortieBossID), 0, 0, 0, false); varMissions.Add(varMission); } } if (DateTime.Now < expireTime) { currentSortie = new WarframeSortie(varMissions, id, varDests, varConditions, startTime, expireTime); _sortieList.Add(currentSortie); #if DEBUG Console.WriteLine("New Sortie Event"); #endif } } _sortieList.RemoveAll(x => x.ExpireTime < DateTime.Now); if ((currentSortie != null) && (currentSortie.ExpireTime > DateTime.Now)) { resultSorties.Add(currentSortie); } } return(_sortieList); }