private void AddToVoidTraderPostQueue(WarframeVoidTrader trader, bool notifyClient, bool traderHasExpired) { if (!_voidTraderMessagePostQueue.Any(x => x.WarframeEvent.GUID == trader.GUID)) { _voidTraderMessagePostQueue.Add(new MessageQueueElement <WarframeVoidTrader>(trader, notifyClient, traderHasExpired)); } }
public IEnumerable <WarframeVoidTrader> GetVoidTrader() { JObject worldState = _scraper.WorldState; var resultVoidTraders = new List <WarframeVoidTrader>(); foreach (var jsonTrader in worldState["VoidTraders"]) { WarframeVoidTrader currentTrader = _voidTraders.Find(x => x.GUID == jsonTrader["_id"]["$oid"].ToString()); if (currentTrader == null) { var id = jsonTrader["_id"]["$oid"].ToString(); var loc = jsonTrader["Node"].ToString(); var millisecondsUntilStart = long.Parse(jsonTrader["Activation"]["$date"]["$numberLong"].ToString()) - (long.Parse(worldState["Time"].ToString()) * TIME_TO_LONG_MULTIPLIER); var millisecondsUntilExpire = long.Parse(jsonTrader["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 (DateTime.Now < expireTime) { var nodeName = loc; var itemName = string.Empty; using (var unit = new UnitOfWork(new WarframeDataContext())) { nodeName = unit.WFSolarNodes.GetNodeName(loc); } currentTrader = new WarframeVoidTrader(id, nodeName, startTime, expireTime); _voidTraders.Add(currentTrader); } if (currentTrader != null) { JToken traderInventory = jsonTrader["Manifest"]; if (!traderInventory.IsNullOrEmpty()) { foreach (var i in traderInventory) { using (var unit = new UnitOfWork(new WarframeDataContext())) { currentTrader.AddTraderItem(unit.WarframeItems.GetItemName(i["ItemType"].ToString()), int.Parse(i["RegularPrice"].ToString()), int.Parse(i["PrimePrice"].ToString())); } } } } } _voidTraders.RemoveAll(x => x.ExpireTime < DateTime.Now); if ((currentTrader != null) && (currentTrader.ExpireTime > DateTime.Now)) { resultVoidTraders.Add(currentTrader); } } return(_voidTraders); }
public static string DiscordMessage(this WarframeVoidTrader trader, bool isNotification) { var ts = (DateTime.Now < trader.StartTime) ? trader.GetTimeRemaining(true) : trader.GetTimeRemaining(false); var days = ts.Days; var hours = ts.Hours; var minutes = ts.Minutes; var traderName = "Baro Ki Teer"; var traderInventory = new StringBuilder(); //Ensure that the trader's inventory is not empty first. if (trader.Inventory.Count() > 0) { foreach (var i in trader.Inventory) { traderInventory.Append(i.Name); if (i.Credits > 0) { traderInventory.Append($" {i.Credits}cr{(i.Ducats > 0 ? " +" : string.Empty)}"); } if (i.Ducats > 0) { traderInventory.Append($" {i.Ducats}dc"); } traderInventory.AppendLine(); } } var traderAction = (DateTime.Now < trader.StartTime) ? "arriving at" : "leaving"; var returnMessage = new StringBuilder(); if (!isNotification) { returnMessage.AppendLine($"{traderName} is {traderAction} {trader.DestinationName} in {$"{days} days {hours} hours and {minutes} minutes"}.{Environment.NewLine}"); returnMessage.Append(traderInventory.ToString()); } else { returnMessage.AppendLine(traderName); returnMessage.AppendLine(trader.DestinationName); } return(returnMessage.ToString()); }