Advertisement
Not a member of Pastebin yet?
Sign Up,
it unlocks many cool features!
- using SteamKit2;
- using System;
- using System.Collections.Generic;
- using System.Linq;
- using SteamAPI.TradeOffers;
- using SteamAPI.TradeOffers.Objects;
- using System.Timers;
- using System.Net;
- using System.Collections.Specialized;
- using System.Threading;
- namespace SteamBot
- {
- public class BackendBot : UserHandler
- {
- private static System.Timers.Timer aTimer;
- int i;
- string apiurl;
- string apikey;
- ulong groupid;
- string botid;
- public BackendBot(Bot bot, SteamID sid) : base(bot, sid) {
- botid = Bot.SteamUser.SteamID.ConvertToUInt64().ToString();
- Log.Warn(botid);
- string botsettings_unparsed = System.IO.File.ReadAllText("botsettings.json");
- dynamic botsettings = Newtonsoft.Json.JsonConvert.DeserializeObject(botsettings_unparsed);
- apikey = botsettings[botid].apikey;
- apiurl = botsettings[botid].apiurl;
- groupid = botsettings[botid].groupid;
- }
- public override void OnTradeOfferChecked(TradeOffer tradeOffer)
- {
- // polling has been completed once for our sent trade offer, and it is still active
- // this will always be a trade offer from the bot
- }
- public override void OnTradeOfferReceived(TradeOffer tradeOffer)
- {
- var myItems = tradeOffer.ItemsToGive;
- var userItems = tradeOffer.ItemsToReceive;
- if (IsAdmin)
- {
- Log.Warn("Admin wants " + myItems.Length + " of my items.");
- Log.Warn("And I will get " + userItems.Length + " of their items.");
- try
- {
- // see documentation for more info on when TradeOfferSteamException is thrown
- ulong tradeId;
- if (TradeOffers.AcceptTrade(tradeOffer.Id, out tradeId))
- {
- Log.Warn("Accepted trade offer : " + tradeOffer.Id + " from Admin " + OtherSID.ConvertToUInt64());
- }
- }
- catch (TradeOfferSteamException ex)
- {
- if (ex.ErrorCode == 11 | ex.ErrorCode == 16)
- {
- // trade offer might have been accepted still
- }
- }
- }
- }
- public override void OnTradeOfferAccepted(TradeOffer tradeOffer)
- {
- var tradeOfferId = tradeOffer.Id;
- var myItems = tradeOffer.ItemsToGive;
- var userItems = tradeOffer.ItemsToReceive;
- Log.Info("Trade offer #{0} accepted. Items given: {1}, Items received: {2}", tradeOfferId, myItems.Length, userItems.Length);
- using (WebClient client = new WebClient())
- {
- client.DownloadString(apiurl + "?accepted=" + tradeOffer.Id + "&apikey=" + apikey);
- }
- // myItems is now in user inventory
- // userItems is now in bot inventory
- }
- public override void OnTradeOfferDeclined(TradeOffer tradeOffer)
- {
- Log.Warn("Trade offer #{0} has been declined.", tradeOffer.Id);
- using (WebClient client = new WebClient())
- {
- client.DownloadString(apiurl + "?declined=" + tradeOffer.Id + "&apikey=" + apikey);
- }
- }
- public override void OnTradeOfferCanceled(TradeOffer tradeOffer)
- {
- Log.Warn("Trade offer #{0} has been canceled by bot.", tradeOffer.Id);
- using (WebClient client = new WebClient())
- {
- client.DownloadString(apiurl + "?declined=" + tradeOffer.Id + "&apikey=" + apikey);
- }
- }
- public override void OnTradeOfferInvalid(TradeOffer tradeOffer)
- {
- Log.Warn("Trade offer #{0} is invalid, with state: {1}.", tradeOffer.Id, tradeOffer.State);
- using (WebClient client = new WebClient())
- {
- client.DownloadString(apiurl + "?declined=" + tradeOffer.Id + "&apikey=" + apikey);
- }
- }
- public override void OnTradeOfferInEscrow(TradeOffer tradeOffer)
- {
- Log.Warn("Trade offer #"+ tradeOffer.Id + " is in escrow until " + tradeOffer.EscrowEndDate);
- }
- public override void OnTradeOfferConfirmed(TradeOffer tradeOffer)
- {
- Log.Success("Trade offer #{0} has been successfully confirmed.", tradeOffer.Id);
- }
- public override void OnTradeOfferFailedConfirmation(TradeOffer tradeOffer)
- {
- // confirmation failed, so cancel it just to be safe
- if (tradeOffer.IsOurOffer)
- {
- try
- {
- TradeOffers.CancelTrade(tradeOffer);
- }
- catch (TradeOfferSteamException ex)
- {
- var tradeErrorCode = ex.ErrorCode; // you can do something with this if you want
- }
- }
- else
- {
- try
- {
- TradeOffers.DeclineTrade(tradeOffer);
- }
- catch (TradeOfferSteamException ex)
- {
- var tradeErrorCode = ex.ErrorCode; // you can do something with this if you want
- }
- }
- Log.Warn("Trade offer #{0} failed to confirm. Cancelled the trade.");
- }
- public override void OnTradeOfferNoData(TradeOffer tradeOffer)
- {
- // Steam's GetTradeOffer/v1 API only gives data for the last 1000 received and 500 sent trade offers, so sometimes this will be called.
- // 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.
- // Trade offers in this state will be gone once the bot is restarted, so this will only be called once.
- // If your bot is offline when Steam loses data about the trade offer, this will never be called.
- Log.Warn("No data from Steam for trade offer #{0}!", tradeOffer.Id);
- }
- public override void OnMessage(string message, EChatEntryType type)
- {
- if (IsAdmin)
- {
- if (message == "auth")
- {
- Bot.SteamFriends.SendChatMessage(OtherSID, EChatEntryType.ChatMsg, Bot.SteamGuardAccount.GenerateSteamGuardCode());
- }
- }
- }
- public override bool OnGroupAdd() { return false; }
- public override bool OnFriendAdd() { return true; }
- public override void OnFriendRemove() { }
- public override void OnLoginCompleted() {
- aTimer = new System.Timers.Timer();
- aTimer.Interval = 10000;
- aTimer.Elapsed += OnTimedEvent;
- aTimer.AutoReset = true;
- aTimer.Start();
- string botsettings_unparsed = System.IO.File.ReadAllText("botsettings.json");
- dynamic botsettings = Newtonsoft.Json.JsonConvert.DeserializeObject(botsettings_unparsed);
- apiurl = botsettings[botid].apiurl;
- apikey = botsettings[botid].apikey;
- groupid = botsettings[botid].groupid;
- }
- private void canceloffer(int id)
- {
- Log.Error("Offer Canceled");
- using (WebClient client = new WebClient())
- {
- client.DownloadString(apiurl + "?failed=" + id + "&apikey=" + apikey);
- }
- }
- private void OnTimedEvent(Object source, System.Timers.ElapsedEventArgs e)
- {
- //Downloading API
- string apidata;
- bool accept = true;
- using (WebClient client = new WebClient())
- {
- apidata = client.DownloadString(apiurl);
- }
- dynamic data = Newtonsoft.Json.JsonConvert.DeserializeObject(apidata);
- if (data.id != null)
- {
- int id = data.id;
- SteamID OfferSID = new SteamID();
- OfferSID.SetFromUInt64(Convert.ToUInt64(data.steamid));
- string token = data.tradeoffertoken;
- string message = data.tradeoffermessage;
- string comment = data.tradeoffercomment;
- Log.Warn("ID: " + id + " Token: " + token + " SteamID: " + OfferSID);
- i++;
- if (i == 3)
- {
- canceloffer(id);
- i = 0;
- }
- bool escrow = false;
- var duration = Bot.GetEscrowDuration(OfferSID, token).DaysTheirEscrow;
- if (duration != 0)
- {
- escrow = true;
- Log.Warn("Offer would result in " + duration + " days escrow! Canceling Offer");
- }
- if (escrow == false)
- {
- var offerWithToken = TradeOffers.CreateTrade(OfferSID);
- //Taking TF2 Items
- //foreach (var item in data.taketf2items)
- //{
- // offerWithToken.AddOtherItem(440, 2, Convert.ToUInt64(item));
- //}
- //Log.Warn("Taking TF2 Items");
- //Giving TF2 Items
- //foreach (var item in data.givetf2items)
- //{
- // offerWithToken.AddMyItem(440, 2, Convert.ToUInt64(item));
- //}
- //Log.Warn("Giving TF2 Items");
- //Taking CSGO Items
- Log.Warn("Taking CS:GO Items");
- try
- {
- foreach (var item in data.takecsgoitems)
- {
- offerWithToken.AddOtherItem(730, 2, Convert.ToUInt64(item));
- }
- }
- catch
- {
- Log.Error("Failed to take CS:GO Items");
- accept = false;
- }
- //Giving CSGO Items
- Log.Warn("Giving CS:GO Items");
- try
- {
- foreach (var item in data.givecsgoitems)
- {
- offerWithToken.AddMyItem(730, 2, Convert.ToUInt64(item));
- }
- }
- catch
- {
- Log.Error("Failed to give CS:GO Items");
- accept = false;
- }
- //Taking Dota2 Items
- //foreach (var item in data.takedota2items)
- //{
- // offerWithToken.AddOtherItem(570, 2, Convert.ToUInt64(item));
- //}
- //Log.Warn("Giving Dota2 Items");
- //Giving Dota2 Items
- //foreach (var item in data.givedota2items)
- //{
- // offerWithToken.AddMyItem(570, 2, Convert.ToUInt64(item));
- //}
- //Log.Warn("Taking Dota2 Items");
- if (i != 1)
- {
- Log.Warn("Failed to send Offer, current fails " + (i - 1));
- }
- //Send Offer
- if (accept == true)
- {
- try
- {
- // sending trade offer with token
- // "token" should be replaced with the actual token from the other user
- var tradeOfferIdWithToken = offerWithToken.SendTradeWithToken(message, token);
- Log.Success("Trade offer sent: Offer ID " + tradeOfferIdWithToken);
- using (WebClient client = new WebClient())
- {
- client.DownloadString(apiurl + "?complete=" + id + "&apikey=" + apikey + "&tradeofferid=" + tradeOfferIdWithToken);
- //Posting Comment
- NameValueCollection collection = new NameValueCollection();
- collection.Add("comment", comment);
- collection.Add("sessionid", Bot.SteamWeb.SessionId);
- var Comment = SteamWeb.Fetch("http://steamcommunity.com/comment/Profile/post/" + OfferSID.ConvertToUInt64() + "/-1/", "POST", collection);
- if (Comment.IndexOf("do not allow") > -1)
- {
- Log.Warn("Can't post comment!");
- }
- else
- {
- Log.Success("Successfully posted Comment!");
- }
- Bot.InviteUserToGroup(OtherSID, groupid);
- }
- i = 0;
- }
- catch (TradeOfferSteamException ex)
- {
- if (ex.ErrorCode == 11 || ex.ErrorCode == 16)
- {
- }
- }
- }
- else
- {
- canceloffer(id);
- i = 0;
- }
- } else
- {
- canceloffer(id);
- i = 0;
- }
- }
- }
- }
- }
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement