Advertisement
Guest User

Untitled

a guest
Apr 24th, 2016
230
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
C# 13.86 KB | None | 0 0
  1. using SteamKit2;
  2. using System;
  3. using System.Collections.Generic;
  4. using System.Linq;
  5. using SteamAPI.TradeOffers;
  6. using SteamAPI.TradeOffers.Objects;
  7. using System.Timers;
  8. using System.Net;
  9. using System.Collections.Specialized;
  10. using System.Threading;
  11.  
  12. namespace SteamBot
  13. {
  14.     public class BackendBot : UserHandler
  15.     {
  16.  
  17.         private static System.Timers.Timer aTimer;
  18.         int i;
  19.  
  20.  
  21.         string apiurl;
  22.         string apikey;
  23.         ulong groupid;
  24.         string botid;
  25.         public BackendBot(Bot bot, SteamID sid) : base(bot, sid) {
  26.             botid = Bot.SteamUser.SteamID.ConvertToUInt64().ToString();
  27.             Log.Warn(botid);
  28.             string botsettings_unparsed = System.IO.File.ReadAllText("botsettings.json");
  29.             dynamic botsettings = Newtonsoft.Json.JsonConvert.DeserializeObject(botsettings_unparsed);
  30.             apikey = botsettings[botid].apikey;
  31.             apiurl = botsettings[botid].apiurl;
  32.             groupid = botsettings[botid].groupid;
  33.  
  34.         }
  35.         public override void OnTradeOfferChecked(TradeOffer tradeOffer)
  36.         {
  37.             // polling has been completed once for our sent trade offer, and it is still active
  38.             // this will always be a trade offer from the bot
  39.         }
  40.  
  41.  
  42.         public override void OnTradeOfferReceived(TradeOffer tradeOffer)
  43.         {
  44.             var myItems = tradeOffer.ItemsToGive;
  45.             var userItems = tradeOffer.ItemsToReceive;
  46.             if (IsAdmin)
  47.             {
  48.                 Log.Warn("Admin wants " + myItems.Length + " of my items.");
  49.                 Log.Warn("And I will get " + userItems.Length + " of their items.");
  50.                 try
  51.                 {
  52.                     // see documentation for more info on when TradeOfferSteamException is thrown
  53.                     ulong tradeId;
  54.                     if (TradeOffers.AcceptTrade(tradeOffer.Id, out tradeId))
  55.                     {
  56.                         Log.Warn("Accepted trade offer : " + tradeOffer.Id + " from Admin " + OtherSID.ConvertToUInt64());
  57.                     }
  58.                 }
  59.                 catch (TradeOfferSteamException ex)
  60.                 {
  61.                     if (ex.ErrorCode == 11 | ex.ErrorCode == 16)
  62.                     {
  63.                         // trade offer might have been accepted still
  64.                     }
  65.                 }
  66.             }
  67.  
  68.         }
  69.  
  70.         public override void OnTradeOfferAccepted(TradeOffer tradeOffer)
  71.         {
  72.             var tradeOfferId = tradeOffer.Id;
  73.             var myItems = tradeOffer.ItemsToGive;
  74.             var userItems = tradeOffer.ItemsToReceive;
  75.  
  76.             Log.Info("Trade offer #{0} accepted. Items given: {1}, Items received: {2}", tradeOfferId, myItems.Length, userItems.Length);
  77.  
  78.             using (WebClient client = new WebClient())
  79.             {
  80.                 client.DownloadString(apiurl + "?accepted=" + tradeOffer.Id + "&apikey=" + apikey);
  81.             }
  82.  
  83.             // myItems is now in user inventory
  84.             // userItems is now in bot inventory
  85.         }
  86.  
  87.         public override void OnTradeOfferDeclined(TradeOffer tradeOffer)
  88.         {
  89.             Log.Warn("Trade offer #{0} has been declined.", tradeOffer.Id);
  90.             using (WebClient client = new WebClient())
  91.             {
  92.                 client.DownloadString(apiurl + "?declined=" + tradeOffer.Id + "&apikey=" + apikey);
  93.             }
  94.         }
  95.  
  96.         public override void OnTradeOfferCanceled(TradeOffer tradeOffer)
  97.         {
  98.             Log.Warn("Trade offer #{0} has been canceled by bot.", tradeOffer.Id);
  99.             using (WebClient client = new WebClient())
  100.             {
  101.                 client.DownloadString(apiurl + "?declined=" + tradeOffer.Id + "&apikey=" + apikey);
  102.             }
  103.         }
  104.  
  105.  
  106.         public override void OnTradeOfferInvalid(TradeOffer tradeOffer)
  107.         {
  108.             Log.Warn("Trade offer #{0} is invalid, with state: {1}.", tradeOffer.Id, tradeOffer.State);
  109.             using (WebClient client = new WebClient())
  110.             {
  111.                 client.DownloadString(apiurl + "?declined=" + tradeOffer.Id + "&apikey=" + apikey);
  112.             }
  113.         }
  114.  
  115.         public override void OnTradeOfferInEscrow(TradeOffer tradeOffer)
  116.         {
  117.             Log.Warn("Trade offer #"+  tradeOffer.Id + " is in escrow until " + tradeOffer.EscrowEndDate);
  118.         }
  119.  
  120.         public override void OnTradeOfferConfirmed(TradeOffer tradeOffer)
  121.         {
  122.             Log.Success("Trade offer #{0} has been successfully confirmed.", tradeOffer.Id);
  123.         }
  124.  
  125.         public override void OnTradeOfferFailedConfirmation(TradeOffer tradeOffer)
  126.         {
  127.             // confirmation failed, so cancel it just to be safe
  128.             if (tradeOffer.IsOurOffer)
  129.             {
  130.                 try
  131.                 {
  132.                     TradeOffers.CancelTrade(tradeOffer);
  133.                 }
  134.                 catch (TradeOfferSteamException ex)
  135.                 {
  136.                     var tradeErrorCode = ex.ErrorCode; // you can do something with this if you want
  137.                 }
  138.             }
  139.             else
  140.             {
  141.                 try
  142.                 {
  143.                     TradeOffers.DeclineTrade(tradeOffer);
  144.                 }
  145.                 catch (TradeOfferSteamException ex)
  146.                 {
  147.                     var tradeErrorCode = ex.ErrorCode; // you can do something with this if you want
  148.                 }
  149.             }
  150.             Log.Warn("Trade offer #{0} failed to confirm. Cancelled the trade.");
  151.         }
  152.  
  153.         public override void OnTradeOfferNoData(TradeOffer tradeOffer)
  154.         {
  155.             // Steam's GetTradeOffer/v1 API only gives data for the last 1000 received and 500 sent trade offers, so sometimes this will be called.
  156.             // The only property from this trade offer object you can access is its ID. It's up to you how you want to handle it.
  157.             // Trade offers in this state will be gone once the bot is restarted, so this will only be called once.
  158.             // If your bot is offline when Steam loses data about the trade offer, this will never be called.
  159.  
  160.             Log.Warn("No data from Steam for trade offer #{0}!", tradeOffer.Id);
  161.         }
  162.  
  163.         public override void OnMessage(string message, EChatEntryType type)
  164.         {
  165.             if (IsAdmin)
  166.             {
  167.                 if (message == "auth")
  168.                 {
  169.                     Bot.SteamFriends.SendChatMessage(OtherSID, EChatEntryType.ChatMsg, Bot.SteamGuardAccount.GenerateSteamGuardCode());
  170.                 }
  171.             }
  172.         }
  173.  
  174.         public override bool OnGroupAdd() { return false; }
  175.  
  176.         public override bool OnFriendAdd() { return true; }
  177.  
  178.         public override void OnFriendRemove() { }
  179.  
  180.         public override void OnLoginCompleted() {
  181.             aTimer = new System.Timers.Timer();
  182.             aTimer.Interval = 10000;
  183.             aTimer.Elapsed += OnTimedEvent;
  184.             aTimer.AutoReset = true;
  185.             aTimer.Start();
  186.             string botsettings_unparsed = System.IO.File.ReadAllText("botsettings.json");
  187.             dynamic botsettings = Newtonsoft.Json.JsonConvert.DeserializeObject(botsettings_unparsed);
  188.             apiurl = botsettings[botid].apiurl;
  189.             apikey = botsettings[botid].apikey;
  190.             groupid = botsettings[botid].groupid;
  191.         }
  192.  
  193.         private void canceloffer(int id)
  194.         {
  195.             Log.Error("Offer Canceled");
  196.             using (WebClient client = new WebClient())
  197.             {
  198.                 client.DownloadString(apiurl + "?failed=" + id + "&apikey=" + apikey);
  199.             }
  200.         }
  201.  
  202.         private void OnTimedEvent(Object source, System.Timers.ElapsedEventArgs e)
  203.         {
  204.             //Downloading API
  205.             string apidata;
  206.             bool accept = true;
  207.             using (WebClient client = new WebClient())
  208.             {
  209.                 apidata = client.DownloadString(apiurl);
  210.             }
  211.             dynamic data = Newtonsoft.Json.JsonConvert.DeserializeObject(apidata);
  212.             if (data.id != null)
  213.             {
  214.                 int id = data.id;
  215.                 SteamID OfferSID = new SteamID();
  216.                 OfferSID.SetFromUInt64(Convert.ToUInt64(data.steamid));
  217.                 string token = data.tradeoffertoken;
  218.                 string message = data.tradeoffermessage;
  219.                 string comment = data.tradeoffercomment;
  220.                 Log.Warn("ID: " + id + " Token: " + token + " SteamID: " + OfferSID);
  221.  
  222.                 i++;
  223.                 if (i == 3)
  224.                 {
  225.                     canceloffer(id);
  226.                     i = 0;
  227.                 }
  228.  
  229.                 bool escrow = false;
  230.                 var duration = Bot.GetEscrowDuration(OfferSID, token).DaysTheirEscrow;
  231.                 if (duration != 0)
  232.                 {
  233.                     escrow = true;
  234.                     Log.Warn("Offer would result in " + duration + " days escrow! Canceling Offer");
  235.                 }
  236.  
  237.                 if (escrow == false)
  238.                 {
  239.                     var offerWithToken = TradeOffers.CreateTrade(OfferSID);
  240.                     //Taking TF2 Items
  241.                     //foreach (var item in data.taketf2items)
  242.                     //{
  243.                     //   offerWithToken.AddOtherItem(440, 2, Convert.ToUInt64(item));
  244.                     //}
  245.                     //Log.Warn("Taking TF2 Items");
  246.                     //Giving TF2 Items
  247.                     //foreach (var item in data.givetf2items)
  248.                     //{
  249.                     //    offerWithToken.AddMyItem(440, 2, Convert.ToUInt64(item));
  250.                     //}
  251.                     //Log.Warn("Giving TF2 Items");
  252.  
  253.                     //Taking CSGO Items
  254.                     Log.Warn("Taking CS:GO Items");
  255.                     try
  256.                     {
  257.                         foreach (var item in data.takecsgoitems)
  258.                         {
  259.                             offerWithToken.AddOtherItem(730, 2, Convert.ToUInt64(item));
  260.                         }
  261.                     }
  262.                     catch
  263.                     {
  264.                         Log.Error("Failed to take CS:GO Items");
  265.                         accept = false;
  266.                     }
  267.                     //Giving CSGO Items
  268.                     Log.Warn("Giving CS:GO Items");
  269.                     try
  270.                     {
  271.                         foreach (var item in data.givecsgoitems)
  272.                         {
  273.                             offerWithToken.AddMyItem(730, 2, Convert.ToUInt64(item));
  274.                         }
  275.                     }
  276.                     catch
  277.                     {
  278.                         Log.Error("Failed to give CS:GO Items");
  279.                         accept = false;
  280.                     }
  281.  
  282.                     //Taking Dota2 Items
  283.                     //foreach (var item in data.takedota2items)
  284.                     //{
  285.                     //    offerWithToken.AddOtherItem(570, 2, Convert.ToUInt64(item));
  286.                     //}
  287.                     //Log.Warn("Giving Dota2 Items");
  288.                     //Giving Dota2 Items
  289.                     //foreach (var item in data.givedota2items)
  290.                     //{
  291.                     //    offerWithToken.AddMyItem(570, 2, Convert.ToUInt64(item));
  292.                     //}
  293.                     //Log.Warn("Taking Dota2 Items");
  294.  
  295.  
  296.                     if (i != 1)
  297.                     {
  298.                         Log.Warn("Failed to send Offer, current fails " + (i - 1));
  299.                     }
  300.                     //Send Offer
  301.  
  302.                     if (accept == true)
  303.                     {
  304.                         try
  305.                         {
  306.                             // sending trade offer with token
  307.                             // "token" should be replaced with the actual token from the other user
  308.                             var tradeOfferIdWithToken = offerWithToken.SendTradeWithToken(message, token);
  309.                             Log.Success("Trade offer sent: Offer ID " + tradeOfferIdWithToken);
  310.                             using (WebClient client = new WebClient())
  311.                             {
  312.                                 client.DownloadString(apiurl + "?complete=" + id + "&apikey=" + apikey + "&tradeofferid=" + tradeOfferIdWithToken);
  313.  
  314.                                 //Posting Comment
  315.                                 NameValueCollection collection = new NameValueCollection();
  316.                                 collection.Add("comment", comment);
  317.                                 collection.Add("sessionid", Bot.SteamWeb.SessionId);
  318.                                 var Comment = SteamWeb.Fetch("http://steamcommunity.com/comment/Profile/post/" + OfferSID.ConvertToUInt64() + "/-1/", "POST", collection);
  319.                                 if (Comment.IndexOf("do not allow") > -1)
  320.                                 {
  321.                                     Log.Warn("Can't post comment!");
  322.                                 }
  323.                                 else
  324.                                 {
  325.                                     Log.Success("Successfully posted Comment!");
  326.                                 }
  327.  
  328.                                 Bot.InviteUserToGroup(OtherSID, groupid);
  329.                             }
  330.                             i = 0;
  331.                         }
  332.                         catch (TradeOfferSteamException ex)
  333.                         {
  334.                             if (ex.ErrorCode == 11 || ex.ErrorCode == 16)
  335.                             {
  336.  
  337.                             }
  338.                         }
  339.                     }
  340.                     else
  341.                     {
  342.                         canceloffer(id);
  343.                         i = 0;
  344.                     }
  345.                 } else
  346.                 {
  347.                     canceloffer(id);
  348.                     i = 0;
  349.                 }
  350.             }
  351.  
  352.         }
  353.  
  354.     }
  355. }
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement