private void AddToAlertPostQueue(WarframeAlert alert, bool notifyClient, bool alertHasExpired) { if (!_alertMessagePostQueue.Any(x => x.WarframeEvent.GUID == alert.GUID)) { _alertMessagePostQueue.Add(new MessageQueueElement <WarframeAlert>(alert, notifyClient, alertHasExpired)); } }
//Parse the mission information into a readable presentation public static string DiscordMessage(this WarframeAlert alert, bool isNotification) { MissionInfo info = alert.MissionDetails; string rewardMessage = (!string.IsNullOrEmpty(info.Reward) ? info.Reward : string.Empty); string rewardQuantityMessage = (info.RewardQuantity > 1 ? info.RewardQuantity + "x" : string.Empty); string creditMessage = (!string.IsNullOrEmpty(rewardMessage) ? ", " : string.Empty) + (info.Credits > 0 ? info.Credits + "cr" : string.Empty); var statusMessage = new StringBuilder(); if (!alert.IsExpired()) { if (DateTime.Now < alert.StartTime) { statusMessage.Append($"Starts {alert.StartTime:HH:mm} ({(alert.GetMinutesRemaining(true) > 0 ? ParseMinutesAsTime(alert.GetMinutesRemaining(true), 2) : "<1m")})"); } else { statusMessage.Append($"Expires {alert.ExpireTime:HH:mm} ({(alert.GetMinutesRemaining(false) > 0 ? ParseMinutesAsTime(alert.GetMinutesRemaining(false), 2) : "<1m")})"); } } else { statusMessage.Append($"Expired ({alert.ExpireTime:HH:mm})"); } var returnMessage = new StringBuilder(); var expireMessage = $"Expires {alert.ExpireTime:HH:mm} ({alert.GetMinutesRemaining(false)}m)"; if (!isNotification) { returnMessage.AppendLine(alert.DestinationName); returnMessage.AppendLine($"{info.Faction} {info.MissionType} ({info.MinimumLevel}-{info.MaximumLevel}){(info.RequiresArchwing ? $" (Archwing)" : string.Empty)}"); returnMessage.AppendLine($"{rewardQuantityMessage + rewardMessage + creditMessage}"); returnMessage.Append(statusMessage.ToString()); } else { returnMessage.AppendLine("New Alert"); returnMessage.AppendLine($"{rewardQuantityMessage + rewardMessage + creditMessage}"); returnMessage.Append(expireMessage); } return(returnMessage.ToString()); }
public IEnumerable <WarframeAlert> GetAlerts() { JObject worldState = _scraper.WorldState; var resultAlerts = new List <WarframeAlert>(); //Find Alerts foreach (var jsonAlert in worldState["Alerts"]) { WarframeAlert currentAlert = _alertsList.Find(x => x.GUID == jsonAlert["_id"]["$oid"].ToString()); if (currentAlert == null) { string id = jsonAlert["_id"]["$oid"].ToString(); string loc = jsonAlert["MissionInfo"]["location"].ToString(); //Loot - Can be countable (Alertium etc.) or single (Blueprints) items JToken countables = (jsonAlert["MissionInfo"]["missionReward"]["countedItems"]), nonCountables = (jsonAlert["MissionInfo"]["missionReward"]["items"]); var rewardStr = string.Empty; var nodeName = loc; using (var unit = new UnitOfWork(new WarframeDataContext())) { rewardStr = (countables != null ? unit.WarframeItems.GetItemName(countables[0]["ItemType"].ToString()) : (nonCountables != null ? unit.WarframeItems.GetItemName(nonCountables[0].ToString()) : "")); nodeName = unit.WFSolarNodes.GetNodeName(loc); } var millisecondsUntilStart = long.Parse(jsonAlert["Activation"]["$date"]["$numberLong"].ToString()) - (long.Parse(worldState["Time"].ToString()) * TIME_TO_LONG_MULTIPLIER); var millisecondsUntilExpire = long.Parse(jsonAlert["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); var creditReward = int.Parse(jsonAlert["MissionInfo"]["missionReward"]["credits"].ToString()); var reqArchwingData = jsonAlert["MissionInfo"]["archwingRequired"]; bool requiresArchwing = reqArchwingData != null?bool.Parse(reqArchwingData.ToString()) : false; JToken rewardParam = null; if (countables != null) { rewardParam = countables[0]["ItemType"].ToString(); } else if (nonCountables != null) { rewardParam = nonCountables[0].ToString(); } if (RewardIsNotIgnored(creditReward, (rewardParam != null) ? rewardParam.ToString() : null)) { if (DateTime.Now < expireTime) { MissionInfo alertInfo = new MissionInfo(jsonAlert["MissionInfo"]["faction"].ToString(), jsonAlert["MissionInfo"]["missionType"].ToString(), creditReward, //If for whatever reason, an alert returns both countables and non-countables, currently only the countables will be returned. //In addition, if an alert returns multiple different countables, only the first instance will be returned. This affects invasions as well! rewardStr, int.Parse((countables != null ? countables[0]["ItemCount"] : 1).ToString()), int.Parse(jsonAlert["MissionInfo"]["minEnemyLevel"].ToString()), int.Parse(jsonAlert["MissionInfo"]["maxEnemyLevel"].ToString()), requiresArchwing); currentAlert = new WarframeAlert(alertInfo, id, nodeName, startTime, expireTime); _alertsList.Add(currentAlert); #if DEBUG Console.WriteLine("New Alert Event"); #endif } } } _alertsList.RemoveAll(x => x.ExpireTime < DateTime.Now); if ((currentAlert != null) && (currentAlert.ExpireTime > DateTime.Now)) { resultAlerts.Add(currentAlert); } } return(_alertsList); }