Exemple #1
0
        /// <summary>
        /// Retrieves completed trades from /inventoryhistory/
        /// </summary>
        /// <param name="limit">Max number of trades to retrieve</param>
        /// <returns>A List of 'TradeHistory' objects</returns>
        public List <TradeHistory> GetTradeHistory(int limit = 0)
        {
            // most recent trade is first
            List <TradeHistory> TradeHistoryList = new List <TradeHistory>();
            var url  = "http://steamcommunity.com/profiles/" + BotId.ConvertToUInt64() + "/inventoryhistory/";
            var html = RetryWebRequest(SteamWeb, url, "GET", null);
            // TODO: handle rgHistoryCurrency as well
            Regex reg = new Regex("rgHistoryInventory = (.*?)};");
            Match m   = reg.Match(html);

            if (m.Success)
            {
                var json         = m.Groups[1].Value + "}";
                var schemaResult = JsonConvert.DeserializeObject <Dictionary <int, Dictionary <ulong, Dictionary <ulong, GenericInventory.Inventory.Item> > > >(json);
                var trades       = new Regex("HistoryPageCreateItemHover\\((.*?)\\);");
                var tradeMatches = trades.Matches(html);
                foreach (Match match in tradeMatches)
                {
                    if (match.Success)
                    {
                        var tradeHistoryItem = new TradeHistory();
                        tradeHistoryItem.ReceivedItems = new List <Trade.TradeAsset>();
                        tradeHistoryItem.GivenItems    = new List <Trade.TradeAsset>();
                        var historyString    = match.Groups[1].Value.Replace("'", "").Replace(" ", "");
                        var split            = historyString.Split(',');
                        var tradeString      = split[0];
                        var tradeStringSplit = tradeString.Split('_');
                        var tradeNum         = Convert.ToInt32(tradeStringSplit[0].Replace("trade", ""));
                        if (limit > 0 && tradeNum >= limit)
                        {
                            break;
                        }
                        var appId       = Convert.ToInt32(split[1]);
                        var contextId   = Convert.ToUInt64(split[2]);
                        var itemId      = Convert.ToUInt64(split[3]);
                        var amount      = Convert.ToInt32(split[4]);
                        var historyItem = schemaResult[appId][contextId][itemId];
                        var genericItem = new Trade.TradeAsset(appId, contextId, itemId, amount);
                        // given item has ownerId of 0
                        // received item has ownerId of own SteamID
                        if (historyItem.OwnerId == 0)
                        {
                            tradeHistoryItem.GivenItems.Add(genericItem);
                        }
                        else
                        {
                            tradeHistoryItem.ReceivedItems.Add(genericItem);
                        }
                        TradeHistoryList.Add(tradeHistoryItem);
                    }
                }
            }
            return(TradeHistoryList);
        }
Exemple #2
0
        /// <summary>
        /// Manually validate if a trade offer went through by checking /inventoryhistory/
        /// </summary>
        /// <param name="tradeOffer">A 'TradeStatus' object</param>
        /// <returns>True if the trade offer was successfully accepted, false if otherwise</returns>
        public bool ValidateTradeAccept(TradeOffer tradeOffer)
        {
            var history = GetTradeHistory(1);

            foreach (var completedTrade in history)
            {
                var givenItems = new List <Trade.TradeAsset>();
                foreach (var myItem in tradeOffer.ItemsToGive)
                {
                    var genericItem = new Trade.TradeAsset(myItem.AppId, myItem.ContextId, myItem.AssetId, myItem.Amount);
                    givenItems.Add(genericItem);
                }
                var receivedItems = new List <Trade.TradeAsset>();
                foreach (var otherItem in tradeOffer.ItemsToReceive)
                {
                    var genericItem = new Trade.TradeAsset(otherItem.AppId, otherItem.ContextId, otherItem.AssetId, otherItem.Amount);
                    receivedItems.Add(genericItem);
                }
                if (givenItems.Count == completedTrade.GivenItems.Count && receivedItems.Count == completedTrade.ReceivedItems.Count)
                {
                    foreach (var item in completedTrade.GivenItems)
                    {
                        var genericItem = new Trade.TradeAsset(item.appid, item.contextid, item.assetid, item.amount);
                        if (!givenItems.Contains(genericItem))
                        {
                            return(false);
                        }
                    }
                    foreach (var item in completedTrade.ReceivedItems)
                    {
                        var genericItem = new Trade.TradeAsset(item.appid, item.contextid, item.assetid, item.amount);
                        if (!receivedItems.Contains(genericItem))
                        {
                            return(false);
                        }
                    }
                    return(true);
                }
            }
            return(false);
        }
 /// <summary>
 /// Manually validate if a trade offer went through by checking /inventoryhistory/
 /// </summary>
 /// <param name="tradeOffer">A 'TradeStatus' object</param>
 /// <returns>True if the trade offer was successfully accepted, false if otherwise</returns>
 public bool ValidateTradeAccept(TradeOffer tradeOffer)
 {
     var history = GetTradeHistory(1);
     foreach (var completedTrade in history)
     {
         var givenItems = new List<Trade.TradeAsset>();
         foreach (var myItem in tradeOffer.ItemsToGive)
         {
             var genericItem = new Trade.TradeAsset(myItem.AppId, myItem.ContextId, myItem.AssetId, myItem.Amount);
             givenItems.Add(genericItem);
         }
         var receivedItems = new List<Trade.TradeAsset>();
         foreach (var otherItem in tradeOffer.ItemsToReceive)
         {
             var genericItem = new Trade.TradeAsset(otherItem.AppId, otherItem.ContextId, otherItem.AssetId, otherItem.Amount);
             receivedItems.Add(genericItem);
         }
         if (givenItems.Count == completedTrade.GivenItems.Count && receivedItems.Count == completedTrade.ReceivedItems.Count)
         {
             foreach (var item in completedTrade.GivenItems)
             {
                 var genericItem = new Trade.TradeAsset(item.appid, item.contextid, item.assetid, item.amount);
                 if (!givenItems.Contains(genericItem))
                     return false;
             }
             foreach (var item in completedTrade.ReceivedItems)
             {
                 var genericItem = new Trade.TradeAsset(item.appid, item.contextid, item.assetid, item.amount);
                 if (!receivedItems.Contains(genericItem))
                     return false;
             }
             return true;
         }
     }
     return false;
 }
 /// <summary>
 /// Retrieves completed trades from /inventoryhistory/
 /// </summary>
 /// <param name="limit">Max number of trades to retrieve</param>
 /// <returns>A List of 'TradeHistory' objects</returns>
 public List<TradeHistory> GetTradeHistory(int limit = 0)
 {
     // most recent trade is first
     List<TradeHistory> TradeHistoryList = new List<TradeHistory>();
     var url = "http://steamcommunity.com/profiles/" + BotId.ConvertToUInt64() + "/inventoryhistory/";
     var html = RetryWebRequest(SteamWeb, url, "GET", null);
     // TODO: handle rgHistoryCurrency as well
     Regex reg = new Regex("rgHistoryInventory = (.*?)};");
     Match m = reg.Match(html);
     if (m.Success)
     {
         var json = m.Groups[1].Value + "}";
         var schemaResult = JsonConvert.DeserializeObject<Dictionary<int, Dictionary<ulong, Dictionary<ulong, GenericInventory.Inventory.Item>>>>(json);
         var trades = new Regex("HistoryPageCreateItemHover\\((.*?)\\);");
         var tradeMatches = trades.Matches(html);
         foreach (Match match in tradeMatches)
         {
             if (match.Success)
             {
                 var tradeHistoryItem = new TradeHistory();
                 tradeHistoryItem.ReceivedItems = new List<Trade.TradeAsset>();
                 tradeHistoryItem.GivenItems = new List<Trade.TradeAsset>();
                 var historyString = match.Groups[1].Value.Replace("'", "").Replace(" ", "");
                 var split = historyString.Split(',');
                 var tradeString = split[0];
                 var tradeStringSplit = tradeString.Split('_');
                 var tradeNum = Convert.ToInt32(tradeStringSplit[0].Replace("trade", ""));
                 if (limit > 0 && tradeNum >= limit) break;
                 var appId = Convert.ToInt32(split[1]);
                 var contextId = Convert.ToUInt64(split[2]);
                 var itemId = Convert.ToUInt64(split[3]);
                 var amount = Convert.ToInt32(split[4]);
                 var historyItem = schemaResult[appId][contextId][itemId];
                 var genericItem = new Trade.TradeAsset(appId, contextId, itemId, amount);
                 // given item has ownerId of 0
                 // received item has ownerId of own SteamID
                 if (historyItem.OwnerId == 0)
                     tradeHistoryItem.GivenItems.Add(genericItem);
                 else
                     tradeHistoryItem.ReceivedItems.Add(genericItem);
                 TradeHistoryList.Add(tradeHistoryItem);
             }
         }
     }
     return TradeHistoryList;
 }