public void _OnTradeAwaitingConfirmation(long tradeOfferID) { Bot.AcceptAllMobileTradeConfirmations(); TradeOffer tradeOffer; if (Bot.TryGetTradeOffer(tradeOfferID.ToString(), out tradeOffer)) { if (tradeOffer.OfferState == TradeOfferState.TradeOfferStateNeedsConfirmation) { OnTradeAwaitingConfirmation(tradeOfferID); } } }
public void checkTradeStatuses() { string password = System.IO.File.ReadAllText(@"../cstrade_admin_password.txt"); foreach(KeyValuePair<int, TradeStatus> trade in tradeStatuses) { if(trade.Value.state == TradeOfferState.TradeOfferStateCanceled || trade.Value.state == TradeOfferState.TradeOfferStateCountered || trade.Value.state == TradeOfferState.TradeOfferStateDeclined || trade.Value.state == TradeOfferState.TradeOfferStateExpired || trade.Value.state == TradeOfferState.TradeOfferStateInvalid || trade.Value.state == TradeOfferState.TradeOfferStateInvalidItems || trade.Value.state == TradeOfferState.TradeOfferStateCanceledBySecondFactor || trade.Value.itemsPushed == true) { } else { TradeOffer tradeOfferData; bool traderequest = Bot.TryGetTradeOffer(trade.Value.steam_trade_id, out tradeOfferData); if(traderequest) { if (trade.Value.state != tradeOfferData.OfferState) { Log.Info ("Trade " + trade.Value.steam_trade_id + "/" + trade.Value.server_trade_id + " has status of " + tradeOfferData.OfferState + "/" + (int)tradeOfferData.OfferState); trade.Value.state = tradeOfferData.OfferState; } else { continue; //go to next trade because state hasnt changed... } List<long> itemids = new List<long>(); if(trade.Value.trade_type.Equals("d", StringComparison.Ordinal) || trade.Value.trade_type.Equals("t", StringComparison.Ordinal) ) { if(tradeOfferData.OfferState == TradeOfferState.TradeOfferStateAccepted) { for (int attempts = 0;; attempts++) { try { string tradeReceipt = Bot.SteamWeb.Fetch("http://steamcommunity.com/trade/"+tradeOfferData.TradeID+"/receipt/", "GET", null, false); string start = "oItem = "; string end = ";"; string input = tradeReceipt; Regex r = new Regex("(?<="+start+")" + "(.*?)" + "(?="+end+")"); MatchCollection matches = r.Matches(input); foreach (Match match in matches) { string itemJSON; itemJSON = match.Value.Split(',')[0] + "}"; //Strips everything past the id to prevent any issues dynamic itemJsonified = JsonConvert.DeserializeObject (itemJSON); string itemID = itemJsonified.id; long id = Convert.ToInt64 (itemID); itemids.Add(id); } break; } catch (Exception e) { Log.Error (e.Message); if (attempts > 4) throw e; } } } } else if(trade.Value.trade_type.Equals("w", StringComparison.Ordinal)) { if(tradeOfferData.OfferState == TradeOfferState.TradeOfferStateNeedsConfirmation) { Bot.AcceptAllMobileTradeConfirmations(); } } string postData = "password="******"&trade_id=" + trade.Value.server_trade_id; postData += "&steam_trade_id=" + trade.Value.steam_trade_id; postData += "&trade_status=" + (int)tradeOfferData.OfferState; postData += "&user_steam_id=" + trade.Value.steam_user_id; postData += "&bot_steam_id=" + Bot.SteamUser.SteamID.ConvertToUInt64(); postData += "&trade_asset_ids=" + JsonConvert.SerializeObject(itemids); postData += "&trade_type=" + trade.Value.trade_type; string url = "http://skinbonanza.com/backend/update_trade.php"; var updaterequest = (HttpWebRequest)WebRequest.Create (url); var data = Encoding.ASCII.GetBytes (postData); updaterequest.Method = "POST"; updaterequest.ContentType = "application/x-www-form-urlencoded"; updaterequest.ContentLength = data.Length; using (var stream = updaterequest.GetRequestStream ()) { stream.Write (data, 0, data.Length); } for (int attempts = 0;; attempts++) { try { var response = (HttpWebResponse)updaterequest.GetResponse (); var responseString = new StreamReader (response.GetResponseStream ()).ReadToEnd (); if(responseString.Contains("success")) { Log.Success("Trade " + trade.Value.steam_trade_id + "/" + trade.Value.server_trade_id + " status updated."); } if(trade.Value.trade_type.Equals("d", StringComparison.Ordinal)) { if(responseString.Contains("itemspushed")) { trade.Value.itemsPushed = true; Log.Success("Trade items successfully added to user account"); } } else if(responseString.Contains("completed")) { trade.Value.itemsPushed = true; } break; } catch (Exception e) { Log.Error (e.Message); if (attempts > 4) throw e; } } } else { Log.Warn("Trade offer state request failed."); } } } }