Advertisement
Not a member of Pastebin yet?
Sign Up,
it unlocks many cool features!
- package me.neznamy.tf2hack.TradeOffers;
- import java.awt.Robot;
- import java.awt.Toolkit;
- import java.awt.datatransfer.DataFlavor;
- import java.awt.event.InputEvent;
- import java.io.BufferedReader;
- import java.io.BufferedWriter;
- import java.io.File;
- import java.io.FileReader;
- import java.io.FileWriter;
- import java.time.LocalTime;
- import java.util.ArrayList;
- import java.util.HashMap;
- import java.util.List;
- import java.util.Map.Entry;
- import org.openqa.selenium.By;
- import org.openqa.selenium.JavascriptExecutor;
- import org.openqa.selenium.WebDriver;
- import org.openqa.selenium.WebElement;
- import org.openqa.selenium.chrome.ChromeDriver;
- import org.openqa.selenium.chrome.ChromeOptions;
- public class TradeOffers {
- private static WebDriver driver;
- private static JavascriptExecutor js;
- private static File config;
- private static String username;
- private static String password;
- private static String mainWindow;
- private static boolean copyCode = false;
- private static String copyButtonLocation = "0x0";
- private static List<String> ignoredOffers = new ArrayList<String>();
- private static List<Item> items = new ArrayList<Item>();
- public static void main(String[] args) {
- items.add(new Item("REFINED_METAL", 9, "https://steamcommunity-a.akamaihd.net/economy/image/fWFc82js0fmoRAP-qOIPu5THSWqfSmTELLqcUywGkijVjZULUrsm1j-9xgEbZQsUYhTkhzJWhsO1Mv6NGucF1Ygzt8ZQijJukFMiMrbhYDEwI1yRVKNfD6xorQ3qW3Jr6546DNPuou9IOVK4p4kWJaA/96fx96f"));
- items.add(new Item("RECLAIMED_METAL", 3, "https://steamcommunity-a.akamaihd.net/economy/image/fWFc82js0fmoRAP-qOIPu5THSWqfSmTELLqcUywGkijVjZULUrsm1j-9xgEbZQsUYhTkhzJWhsO0Mv6NGucF1YJlscMEgDdvxVYsMLPkMmFjI1OSUvMHDPBp9lu0CnVluZQxA9Gwp-hIOVK4sMMNWF4/96fx96f"));
- items.add(new Item("SCRAP_METAL", 1, "https://steamcommunity-a.akamaihd.net/economy/image/fWFc82js0fmoRAP-qOIPu5THSWqfSmTELLqcUywGkijVjZULUrsm1j-9xgEbZQsUYhTkhzJWhsPZAfOeD-VOn4phtsdQ32ZtxFYoN7PkYmVmIgeaUKNaX_Rjpwy8UHMz6pcxAIfnovUWJ1t9nYFqYw/96fx96f"));
- items.add(new Item("BATTLE_WORN_ROBOT_KB-808", 5, "https://steamcommunity-a.akamaihd.net/economy/image/fWFc82js0fmoRAP-qOIPu5THSWqfSmTELLqcUywGkijVjZULUrsm1j-9xgEGegouTxTgsSxQt5ixMv6NGucF1Y5gvMYNiGU9xVIqMeK3aTUyJVPBBKMLDKNorAq6WXY0vZZmAYDu9ehIOVK4_IjPtrU/96fx96f"));
- items.add(new Item("BATTLE_WORN_ROBOT_TAUNT_PROCESSOR", 5, "https://steamcommunity-a.akamaihd.net/economy/image/fWFc82js0fmoRAP-qOIPu5THSWqfSmTELLqcUywGkijVjZULUrsm1j-9xgEGegouTxTgsSxQt5iwMv6NGucF1Y4wtsRXjmVuyVcuYrGxNGY-IwGVUqEGDKA-oA3uDSFq7JNnVYayrr5IOVK4CVyuuBM/96fx96f"));
- items.add(new Item("BATTLE_WORN_ROBOT_MONEY_FURNACE", 5, "https://steamcommunity-a.akamaihd.net/economy/image/fWFc82js0fmoRAP-qOIPu5THSWqfSmTELLqcUywGkijVjZULUrsm1j-9xgEGegouTxTgsSxQt5i-Mv6NGucF1YxmtZYCizNvxgd_NbWwZjZhcVWSA_AOWPRtrFC7UCVj6Z4zANG3r-tIOVK4uvXQm80/96fx96f"));
- items.add(new Item("PRISTINE_ROBOT_CURRENCY_DIGESTER", 7, "https://steamcommunity-a.akamaihd.net/economy/image/fWFc82js0fmoRAP-qOIPu5THSWqfSmTELLqcUywGkijVjZULUrsm1j-9xgEGegouTxTgsSxQt5i3Mv6NGucF1YpttsRQ3WVplVkuNeCwZmUyc1SXV_NcBPc-8Q28Xn83655mBIDipe5IOVK4pmv2u60/96fx96f"));
- items.add(new Item("PRISTINE_ROBOT_BRAINSTORM_BULB", 7, "https://steamcommunity-a.akamaihd.net/economy/image/fWFc82js0fmoRAP-qOIPu5THSWqfSmTELLqcUywGkijVjZULUrsm1j-9xgEGegouTxTgsSxQt5i0Mv6NGucF1Y5mvZINiG5qk1V9ZrKxZG5kd1eQVaRdWPduo1u8CHVn6cRhAoXu87pIOVK4pj8j204/96fx96f"));
- items.add(new Item("WINTER_2017_COSMETIC_CASE", 0, "https://steamcommunity-a.akamaihd.net/economy/image/fWFc82js0fmoRAP-qOIPu5THSWqfSmTELLqcUywGkijVjZULUrsm1j-9xgEYYQ4CThbjqwcR2JmxMvGNG-U_l9sn4pUbiDBqwgUrYeLnY2FhIlCRWfJYWfE59Qq7Xncz7J81V9Syo7pRcQS6s5yGbeczMaAW_A/96fx96f"));
- items.add(new Item("MANN_CO_SUPPLY_CRATE_KEY", 337, "https://steamcommunity-a.akamaihd.net/economy/image/fWFc82js0fmoRAP-qOIPu5THSWqfSmTELLqcUywGkijVjZULUrsm1j-9xgEAaR4uURrwvz0N252yVaDVWrRTno9m4ccG2GNqxlQoZrC2aG9hcVGUWflbX_drrVu5UGki5sAij6tOtQ/96fx96f"));
- // items.add(new Item());
- try {
- if (configured()){
- initialize();
- Thread.sleep(1000);
- login(true, false);
- System.out.println("-------------------------------");
- while(true){
- driver.get("http://steamcommunity.com/id/__NEZNAMY__/tradeoffers/");
- char[] source = driver.getPageSource().toCharArray();
- String offerID = "";
- for (int i=0; i<source.length-40; i++) {
- if ((int)source[i] == (int)'S' &&
- (int)source[i+1] == (int)'h' &&
- (int)source[i+2] == (int)'o' &&
- (int)source[i+3] == (int)'w' &&
- (int)source[i+4] == (int)'T' &&
- (int)source[i+5] == (int)'r' &&
- (int)source[i+6] == (int)'a' &&
- (int)source[i+7] == (int)'d' &&
- (int)source[i+8] == (int)'e' &&
- (int)source[i+9] == (int)'O' &&
- (int)source[i+10] == (int)'f' &&
- (int)source[i+11] == (int)'f' &&
- (int)source[i+12] == (int)'e' &&
- (int)source[i+13] == (int)'r') {
- for (int j=17; j<=26; j++) {
- offerID += source[i+j];
- }
- if (ignoredOffers.contains(offerID)) {
- offerID = "";
- } else {
- break;
- }
- }
- }
- if (offerID.length() == 10) {
- System.out.println("Received trade offer " + offerID);
- System.out.println();
- processTradeOffer(offerID);
- }
- Thread.sleep(5000);
- }
- }
- } catch (Exception e) {
- error("An error occured in the main loop:");
- e.printStackTrace();
- }
- }
- private static boolean configured() throws Exception{
- config = new File("config.txt");
- if (!config.exists()){
- config.createNewFile();
- BufferedWriter buf = new BufferedWriter(new FileWriter(config, true));
- buf.write("name=username");
- buf.write(System.getProperty("line.separator"));
- buf.write("password=mypassword");
- buf.write(System.getProperty("line.separator"));
- buf.write("copy-code=false");
- buf.write(System.getProperty("line.separator"));
- buf.write("copy-button-location=0x0");
- buf.write(System.getProperty("line.separator"));
- buf.close();
- return false;
- } else {
- return true;
- }
- }
- private static void initialize() throws Exception{
- String chromedriver = new File("chromedriver.exe").getAbsolutePath();
- BufferedReader br = new BufferedReader(new FileReader(config));
- while (true) {
- String line = br.readLine();
- if (line == null || line.isEmpty()) {
- break;
- }
- if (line.split("=")[0].equals("name")) username = line.split("=")[1];
- if (line.split("=")[0].equals("password")) password = line.split("=")[1];
- if (line.split("=")[0].equals("copy-code")) copyCode = Boolean.parseBoolean(line.split("=")[1]);
- if (line.split("=")[0].equals("copy-button-location")) copyButtonLocation = line.split("=")[1];
- }
- br.close();
- System.setProperty("webdriver.chrome.driver", chromedriver);
- ChromeOptions cOptions = new ChromeOptions();
- cOptions.addArguments("--mute-audio");
- driver = new ChromeDriver(cOptions);
- driver.get("http://steamcommunity.com/id/__NEZNAMY__/tradeoffers/");
- js = (JavascriptExecutor) driver;
- mainWindow = driver.getWindowHandle();
- }
- private static void login(boolean wait, boolean remember) throws Exception{
- driver.findElement(By.id("steamAccountName")).sendKeys(username);
- WebElement passwordField = driver.findElement(By.id("steamPassword"));
- passwordField.sendKeys(password);
- if (remember) driver.findElement(By.id("remember_login")).click();
- passwordField.submit();
- Thread.sleep(3000);
- if (copyCode) {
- WebElement codeField = driver.findElement(By.id("twofactorcode_entry"));
- codeField.sendKeys(getCode());
- Thread.sleep(100);
- codeField.submit();
- }
- if (wait) while(!driver.getCurrentUrl().startsWith("http://steamcommunity.com/id/__NEZNAMY__/tradeoffers/")) Thread.sleep(100);
- }
- private static boolean tradeLoadedSuccessfully(){
- return !driver.getPageSource().contains("Sorry, some kind of error has occurred:")
- && !driver.getPageSource().contains("Omlouváme se, vyskytla se chyba:");
- }
- private static void processTradeOffer(String id) throws Exception {
- js.executeScript("ShowTradeOffer( '" + id + "' );");
- for (String winHandle : driver.getWindowHandles()){
- driver.switchTo().window(winHandle);
- }
- while (!tradeLoadedSuccessfully()){
- Thread.sleep(1000);
- driver.navigate().refresh();
- }
- process(id);
- driver.close();
- driver.switchTo().window(mainWindow);
- }
- private static void info(String text) {
- System.out.println(getTime() + "[INFO] " + text);
- }
- private static void error(String text) {
- System.out.println(getTime() + "[ERROR] " + text);
- }
- private static void process(String id){
- try{
- if (driver.getCurrentUrl().contains("https://steamcommunity.com/login")){
- login(false, true);
- Thread.sleep(3000);
- process(id);
- return;
- }
- Thread.sleep(5000);
- if (isOfferCorrect()){
- js.executeScript("ToggleReady( true )");
- Thread.sleep(50);
- try{
- driver.findElement(By.xpath("//*[@class='btn_green_white_innerfade btn_medium']")).click();
- } catch (Exception e){
- //not reported
- }
- Thread.sleep(50);
- js.executeScript("ConfirmTradeOffer()");
- Thread.sleep(2000);
- }
- ignoredOffers.add(id);
- } catch (Exception e){
- info("Trade offer loaded incorrectly, trying again..");
- driver.navigate().refresh();
- process(id);
- }
- }
- private static boolean isOfferCorrect() {
- HashMap<String, Integer> counts = new HashMap<String, Integer>();
- boolean invalid = false;
- int i=0;
- int value1 = 0;
- System.out.println("My items:");
- while (true) {
- try {
- WebElement e = driver.findElement(By.id("your_slot_" + i));
- WebElement tag = e.findElement(By.tagName("img"));
- String image = tag.getAttribute("src");
- Item item = Item.getByImage(image);
- if (item != null) {
- if (item.isValid()) {
- value1 += item.getPrice();
- } else {
- invalid = true;
- }
- if (!counts.containsKey(item.getName())) counts.put(item.getName(), 0);
- counts.put(item.getName(), counts.get(item.getName())+1);
- }
- } catch (Exception e) {
- break;
- }
- i++;
- }
- for (Entry<String, Integer> entry : counts.entrySet()) {
- System.out.println(entry.getKey() + " x" + entry.getValue());
- }
- counts.clear();
- i=0;
- int value2 = 0;
- System.out.println();
- System.out.println("Their items:");
- while (true) {
- try {
- WebElement e = driver.findElement(By.id("their_slot_" + i));
- WebElement tag = e.findElement(By.tagName("img"));
- String image = tag.getAttribute("src");
- Item item = Item.getByImage(image);
- if (item != null) {
- if (item.isValid()) {
- value2 += item.getPrice();
- } else {
- invalid = true;
- }
- if (!counts.containsKey(item.getName())) counts.put(item.getName(), 0);
- counts.put(item.getName(), counts.get(item.getName())+1);
- }
- } catch (Exception e) {
- break;
- }
- i++;
- }
- for (Entry<String, Integer> entry : counts.entrySet()) {
- System.out.println(entry.getKey() + " x" + entry.getValue());
- }
- if (invalid) {
- System.out.println("INVALID TRADE");
- System.out.println("-------------------------------");
- return false;
- } else {
- System.out.println();
- System.out.println("My items value: " + value1 + " scrap");
- System.out.println("Their items value: " + value2 + " scrap");
- if (value1 <= value2) {
- System.out.println("Trade correct. Accepting.");
- System.out.println("-------------------------------");
- return true;
- } else {
- System.out.println("Trade incorrect.");
- System.out.println("-------------------------------");
- return false;
- }
- }
- }
- private static String getCode() throws Exception{
- try {
- String oldClipboard = "";
- try {
- oldClipboard = (String) Toolkit.getDefaultToolkit().getSystemClipboard().getData(DataFlavor.stringFlavor);
- } catch (Exception e) {
- }
- Robot r = new Robot();
- int x = Integer.parseInt(copyButtonLocation.split("x")[0]);
- int y = Integer.parseInt(copyButtonLocation.split("x")[1]);
- r.mouseMove(x, y);
- r.mousePress(InputEvent.BUTTON1_DOWN_MASK);
- Thread.sleep(50);
- r.mouseRelease(InputEvent.BUTTON1_DOWN_MASK);
- Thread.sleep(50);
- String newClipboard = (String) Toolkit.getDefaultToolkit().getSystemClipboard().getData(DataFlavor.stringFlavor);
- if (!newClipboard.equals(oldClipboard)){
- return newClipboard;
- } else {
- Thread.sleep(3000);
- return getCode();
- }
- } catch (Exception e) {
- error("An error occured when getting code, trying again..");
- Thread.sleep(3000);
- return getCode();
- }
- }
- private static String getTime() {
- LocalTime lt = LocalTime.now();
- String h = lt.getHour() < 10 ? "0" + lt.getHour() : lt.getHour()+"";
- String m = lt.getMinute() < 10 ? "0" + lt.getMinute() : lt.getMinute()+"";
- String s = lt.getSecond() < 10 ? "0" + lt.getSecond() : lt.getSecond()+"";
- return "[" + h + ":" + m + ":" + s + "]";
- }
- public static class Item {
- private String image;
- private String name;
- private int price;
- public Item(String name, int price, String image) {
- this.image = image;
- this.price = price;
- this.name = name;
- }
- public String getName() {
- return name;
- }
- public int getPrice() {
- return price;
- }
- public String getImage() {
- return image;
- }
- public static Item getByImage(String image) {
- if (image == null || image.equals("null")) return null;
- for (Item i : items) {
- if (i.getImage().equals(image)) {
- return i;
- }
- }
- return new Item("UNKNOWN", 0, image);
- }
- public boolean isValid() {
- return price > 0;
- }
- }
- }
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement