Untitled

mail@pastecode.io avatar
unknown
plain_text
a year ago
11 kB
2
Indexable
Never
import json
import websocket

with open('./buff.json', 'r') as f:
    buff = json.load(f)

with open('./steam.json', 'r', encoding="utf-8") as f:
    steam = json.load(f)

while True:
    try:

        header = [
        "Pragma: no-cache",
        "Cache-Control: no-cache",
        "User-Agent: Mozilla/5.0 (Macintosh; Intel Mac OS X 10_15_7) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/111.0.0.0 Safari/537.36",
        "Accept-Encoding: gzip, deflate, br",
        "Accept-Language: en-GB,en-US;q=0.9,en;q=0.8",
        "Sec-WebSocket-Extensions: permessage-deflate; client_max_window_bits",
        "Sec-WebSocket-Protocol: graphql-transport-ws"]

        cookie = 'session=s:tSnj-WU-NSniq0tEjaC8ajpZaGqMIA32.DTNkM9JNqHv8a4uArbBq3IES4962wGjkkUFgiBAPYB8'

        msg_con = '{"type":"connection_init"}'
        msg_sub_remove = '{"id":"7e987ea8-36f1-4bf9-840e-289a69b4c106","type":"subscribe","payload":{"variables":{},"extensions":{},"operationName":"OnRemoveFromListedTrade","query":"subscription OnRemoveFromListedTrade {  removeFromListedTrade {    tradeId    __typename  }}"}}'
        msg_sub_add = '{"id":"696f26db-b696-4564-a40e-2e1d5768fa64","type":"subscribe","payload":{"variables":{},"extensions":{},"operationName":"OnCreateTrade","query":"subscription OnCreateTrade($userId: ID) {  createTrade(userId: $userId) {    trade {      ...Trade      __typename    }    __typename  }}fragment Trade on Trade {  id  status  steamAppName  cancelReason  canJoinAfter  markupPercent  createdAt  depositor {    id    steamId    avatar    displayName    steamDisplayName    __typename  }  promoCode {    id    percentageReward    maxBalance    __typename  }  expiresAt  withdrawerSteamTradeUrl  customValue  withdrawer {    id    steamId    avatar    displayName    steamDisplayName    __typename  }  totalValue  updatedAt  tradeItems {    id    marketName    value    customValue    itemVariant {      ...ItemVariant      __typename    }    markupPercent    __typename  }  trackingType  suspectedTraderCanJoinAfter  joinedAt  __typename}fragment ItemVariant on ItemVariant {  id  itemId  name  brand  iconUrl  value  currency  displayValue  exchangeRate  shippingCost  usable  obtainable  withdrawable  depositable  externalId  type  category {    id    name    __typename  }  color  size  rarity  availableAssets {    steamAssetId    availableAt    __typename  }  purchasable  totalRequested  totalAvailable  totalFulfilled  totalUnfulfilled  createdAt  __typename}"}}'
        msg_sub_wallet = '{"id":"ad44beda-85a5-45c0-972f-f13007b0ba82","type":"subscribe","payload":{"variables":{},"extensions":{},"operationName":"OnUpdateWallet","query":"subscription OnUpdateWallet {  updateWallet {    wallet {      id      amount      name      __typename    }    walletChange {      id      type      externalId      valueChange      __typename    }    __typename  }}"}}'
        msg_buy1 = '{"id":"138e87a5-842c-4f84-8b7b-ade522c06858","type":"subscribe","payload":{"variables":{"input":{"tradeIds":["--TRADEID--"],"recaptcha":"03AL8dmw98RhV6axsNrSfSbobgxj3WRlH86Qi5il4AixFP0NZ-fzRs4hTdvxfLvX5lEayuiff_tAwAieydD5qkpR8ALagmjhPpud0ZdAZdnTwqTnvjKBDWd_mJ9u7Mb12senBCpNuCtOFnJU8XTigAurhGKoN4HzvajfLPFahtAAC-YowrOLJbCDTxabH2hOmMhyUiCas-tvu3JuQZb4sRPrGKZyIHKUtLZLZ7AD9D_5irlLL10esRXgGo5krCeDpAnESpN-g0ve-FBNYOVPtGYiuG_uSHwuGCq7pXah9U15bjUpFg_HJV9Hr_1m4e1UEd1qgTkiVH9n_-jq4wpGA4nMIsciTlS7QJTTz9PIolobSO0nnyeUHOQMCxX14mKWmwAbj1XPNnuQlU8dSCvDxtMj9KN_rWruBY4Su2VpH-hhdSCagnBR3hG-7C9FaySq-0L_AYqTMh_CIiNdKt91PHHSawCLLmncqd09BMgNWB2y5v4lSBy8wZFiBZvbCjg7iHqJ2npRySMxBTvHFwtpUxPLAZ2cy7w_Faa_gpZklqtLBhsPjxEFwturSS-T6jHzsV5rDtWGEzPgMFdaC91ief6POI0tZ2yeivLHcuvMtQyJejW64u1sI2VQdbw4OfLyKUAO2Rbz3Vm9xxwQAIcxbFWYe4SyA92q1JyaiodduovDmRIkQRbKEHbVg96_LX8_aZAEc2ItnpSTBXoizHR96Rb6o7XTu8WvMcbfZRkARuOMIvSAwZlZyN4nnUzFvLdY5b01hjJqvD6h4uixsJvtsQL4o6yM0CyzVH56SPY70XL3QryKe0uPkCccqHZtACPYGLplnPYOC6599gAOdnqND5znccdbeb5LxScYvan6mAbxkp9Y61QtePkdqwTVkiw5u8Hss2GGwTMC4Gv1Y2QkXMvHLqn0B0Sus1rTyrCT-wcLN2qwttYgVPJVOcjACF99KnO-Vc03cyKdWW2wfVe61xle0oTw9LGOmeikYk46LEIx1Lt3KEd9IRXRWF0FSnoQ9kCno8th8pcprk0NMlNN_YSkQH5of5p4TmQQadwnhIUt7a4LB34ycYq-h_B2XrStxeeHseBqvnU7H_qE25LhwU832E0PKlc9Llaa1Y70raDI6q2bDwErIlwFRGnnf_-EiRndAjrEoUgxnwPpDTBW0Omnq3NkO4g6KqS99-S4hCC-1iZjC6W2vZp_2QJmvgr1UFkvYkGwRqzPo-QwW67Y7kuYeTLoq_zKcmZTqh6EdlmfxsL2-rkocettXFl3hPyHCXhYJ-ja7ypfWhCwAj_am7SSUJ685N76etsnrMFEaQO0vaS5kR9azA8a1BZsBnguhUUom0ubztcXlo3y_K5dh9wWnGywh-2y723VQisuf_rUcItVdFhW7IxN7xcQH8WkWRWYJXmF89bic7iCdtftb3-x3a_oHILpok8mmGylJq4DrJfRIPdD6g-H-4eowlL4DYPHs_Ncm1UxwtWiG6zH7nPr-9r_6gqUCTNw"}},"extensions":{},"operationName":"JoinTrades","query":"mutation JoinTrades($input: JoinTradesInput!) {  joinTrades(input: $input) {    trades {      id      status      totalValue      updatedAt      expiresAt      withdrawer {        id        steamId        avatar        displayName        steamDisplayName        __typename      }      __typename    }    __typename  }}"}}'
        msg_buy2 = '{"id":"138e87a5-842c-4f84-8b7b-ade522c06858","type":"subscribe","payload":{"variables":{"input":{"tradeIds":["--TRADEID--"],"recaptcha":"03AL8dmw-mKumz8NlsiHxKeVO_whWTAjzqKTPb4tOLSA7jbVx54-4BjU9y6z7200J6NkmJA-Hz6cZCrekzxzndxxgR3Qeh89tQk0xNcs61CC9g_RLYPiBmx1bAcixy0MUpVDJ6Oy3qsQVO1Jme23Gc1qQcxVQ9W5r2P-oQg0gnWPdCUAZ3rhpzytNBqo5fUVwqgLWs5ZyrIfFFf8T4aZadvb1EddCynXIj5WwofY_NLbZ5D-HU8ibeuD8pzZ2oSY6qywpIDPMngaX74e-G71GQmgj10_5_uRzsUZB6VhdHyMiJGPTTzOn9JiZP_1lrURSpBZoTn69jNQfAJxeTttJWYCGnqBqGUulbrvIHMQLEhqS69HF2NJsARpYsHvM4CRqxSG5T3wPY2u8rD6bp5vDXfDg3rFrZbeqoceuGFIivCXL2sF5g_TAFHGzv5XJFD04B1mVBk0vOnM-VnAttZK5KidOkLSm6eLZeCVmPgoJhpzsT8_0NODhlhI3d_iIdcK80OzP3RbgS8UG14rp-5iEalyJpfZNjK2ds-9RY6WicZgfHn1J_s2zuCefdfc591oFapEp3WacA-Yy426j8Bfu80FJJN9Mg0pT9isOtnZvdZkNNnYhI1C2e9cJr0vhC25FH4Vmqu0pFtT1FiZ_58tymRcri19CxyeH1S5yGnPwX1UCHn25BLC1zDGVt4cqiOhDu2jrgZaifJp7MlGSxW14s9pxMmLm-8w98WSvTyhhbDHfcS_coWUbdt0gA6HhH3c-KezDeSWlF2Dtt6ChXOJfBjIOq5dPNF6nbISQRneKCXbEudG9lG0sLAQqcGJ8pGlzvNtZdXPoTQTCD9jGNvR2ImjjhUfX83p-9pPH0IywD-eY4kKrhex2dHwbVgF_cKkc_7yysVOM1iIyOhcvEEZXN6Uvn8HMYR0ukYMOWDUamcWs0P10gJOfW7gLWFVGmihty8R63tfkjOV_fxLzdeLqerlogJ4MOTA6RfDaibsVNLMc8DZyFPzBtgry3dy7ujI5m_H_hzaCp-3P5KiOL7O6KbHKwiSYMBCzSMFMDm8RnX5BxhYCQTxt_ce8t4M7DJHVWAlEwG18ElbIa9xEkO4DKoAZ4qBjBs9uZ-G0ZliWBEDIukI9H0AUHow60lKf44TMkKl8wC9hpmmEkTKdyL6jAcYUUtHs8pzcooqRCTkQJ4JxAv7ImCY--tFhijbpjeGktR9l5Hq45Y3qZC3QQ5rpX2u9UKboXqvSFO5RFRruD9SIzYfE6ALn8Kaii7Cayvu2ZsIl2c--nzJzEsZNs3BIu8_7wh1yrqs6wkFMzPu6fcA-B_gE4YmqAKZ1GyEXcga5RYgQETV08W13Oi-Zy0pGMVQdSPUddlTxWgKNPp3j9BQY3bJ6hCZ31g28iWfK2wKwVkm2L6sOFzavzlZpRG9BQyd7QXU5SHsDZaBQ5qfNreSQxGqYjgBfFr2awq5KREaI4cRXJeoXVROAQp0hH1tT8rQtEfcuZNkLUTA"}},"extensions":{},"operationName":"JoinTrades","query":"mutation JoinTrades($input: JoinTradesInput!) {  joinTrades(input: $input) {    trades {      id      status      totalValue      updatedAt      expiresAt      withdrawer {        id        steamId        avatar        displayName        steamDisplayName        __typename      }      __typename    }    __typename  }}"}}'
        msg_sub_complete = '{"id":"a0d79d83-c9f4-4fac-b7c5-a013ce121920","type":"complete"}'
        current = 1
        ws = websocket.create_connection("wss://api.csgoroll.com/graphql", header=header, origin="https://www.csgoroll.com", cookie=cookie)
        ws.send(msg_con)
        print("connection message sent")
        while not "connection_ack" in ws.recv():
            pass
        print("connection ack received")

        ws.send(msg_sub_add)
        #ws.send(msg_sub_remove)
        ws.send(msg_sub_wallet)
        #ws.send(msg_sub_complete)
        print("subscription messages sent")

        trades = {}
        balance = 30

        def process(data):
            try:
                if 'createTrade' in data['payload']['data']:
                    process_create_trade(data)
            except Exception:
                pass
            try:
                if 'removeFromListedTrade' in data['payload']['data']:
                    process_remove_trade(data)
            except Exception:
                pass
            try:
                if 'updateWallet' in data['payload']['data']:
                    process_wallet_update(data)
            except Exception:
                pass
            try:
                if 'joinTrades' in data['payload']['data']:
                    process_success(data)
            except Exception:
                pass
            try:
                if 'error' in data['payload']:
                    process_failure(data)
            except Exception:
                pass


        def process_create_trade(data):
            global trades
            id = data['payload']['data']['createTrade']['trade']['id']
            name = data['payload']['data']['createTrade']['trade']['tradeItems'][0]['marketName']
            value = data['payload']['data']['createTrade']['trade']['tradeItems'][0]['value']
            if id in trades.keys():
                return
            trades[id] = (id, name, value)
            prices = steam.get(name)
            if prices is None or "buy_max_price" not in prices:
                current_buy_margin = -1
            else:
                current_buy_margin = prices["buy_max_price"]/value - 1
            if prices is None or "sell_min_price" not in prices:
                current_sell_margin = -1
            else:
                current_sell_margin = prices["sell_min_price"]/value - 1
            if current_buy_margin - 0.1 > current_sell_margin:
                to_buy = (0.35 <= current_sell_margin and 0.1 < current_buy_margin)
            else:
                to_buy = (0.2 <= current_buy_margin) or (0.35 <= current_sell_margin and 0.1 < current_buy_margin)
            if value > 50:
                buy(id)
                print(f"Trying to buy:  {name:<70} coins: {value:<7} buy margin: {current_buy_margin:<7.2f} sell margin: {current_sell_margin:<7.2f}")


        def process_remove_trade(data):
            global trades
            id = data['payload']['data']['removeFromListedTrade']['tradeId']


        def process_wallet_update(data):
            global balance
            balance = data['payload']['data']['updateWallet']['wallet']['amount']


        def process_success(data):
            print(f"Success: {data}")


        def process_failure(data):
            print(f"Failure: {data}")


        def buy(id):
            global msg_buy1,msg_buy2,current
            if current == 1:
                msg_buy = msg_buy1
                current = 2
            else:
                msg_buy = msg_buy2
                current = 1
            msg = msg_buy.replace('--TRADEID--', id)
            ws.send(msg)
        while True:
            new = ws.recv()
            data = json.loads(new)
            process(data)
    except Exception:
        pass