var checkable_accounts = { '76561198311319887': 'Weapon Crusher', '76561199039790818': 'Megumin', '76561199140988104': 'Bela', '76561198104201017': 'Daniela', '76561199125108615': 'Squid Girl Bot', '76561199550718094': 'refbot.tf', '76561199202848205': 'The Agency', '76561199034865605': 'Amazon Prime' }; var ignorable_accounts = ['76561198042562877', '76561199193118161', '76561199090583973', '76561198103306049']; var ignored_accounts = []; decaled_objects = { 'Conscientious Objector': '3.66', 'Clan Pride': '2.11', 'Flair!': '4.22', 'Photo Badge': '2.44' } backpack_page_limit = 10; function fetchAccounts() { for (const [item, price] of Object.entries(decaled_objects)) { handleItem(item, price); } } function handleItem(item, price) { var stop = false; for (let i = 1; i <= backpack_page_limit; i++) { var url = 'https://backpack.tf/classifieds'; var data = 'page=' + i + '&item=' + encodeURIComponent(item) + '&quality=6&tradable=1&craftable=1&australium=-1&killstreak_tier=0&numeric=price&comparison=lt&value=' + price + '&low=' + price; $.ajax({ dataType: 'html', url: url, data: data, tryCount: 0, retryLimit: 20, success: function (msg) { if ($('.col-md-6:first .alert', msg).length > 0) { stop = true; return false; } $('.col-md-6:first .user-link', msg).each(function () { var steam_id = $(this).attr('data-id'); var steam_name = $(this).attr('data-name'); if (ignorable_accounts.includes(steam_id)) { if (!ignored_accounts.includes(steam_id)) { var ignore_accounts = $('#ignored-accounts'); ignore_accounts.append('' + steam_name + '; '); ignore_accounts.fadeIn(); ignored_accounts.push(steam_id); } } else if (!(steam_id in checkable_accounts)) { handleAccount(steam_id, steam_name); checkable_accounts[steam_id] = steam_name; } }); }, error: function (response, status, error) { if (response.status == 429) { this.tryCount++; if (this.tryCount <= this.retryLimit) { setTimeout(() => { $.ajax(this); }, 3000 + i * 300 + this.retryCount * 70 + Math.floor(Math.random() * 1000)); return; } } } }); if (stop) { break; } } } function handleAccounts() { for (const [steam_id, steam_name] of Object.entries(checkable_accounts)) { handleAccount(steam_id, steam_name); } } function handleAccount(steam_id, steam_name) { var url = "https://backpack.tf/_inventory/" + steam_id; $.ajax({ dataType: 'json', url: url, tryCount: 0, retryLimit: 30, success: function (msg) { handleHTML(steam_id, steam_name, msg['html']); }, error: function (response, status, error) { this.tryCount++; if (this.tryCount <= this.retryLimit) { setTimeout(() => { $.ajax(this); }, 3000 + this.tryCount * 40 + Math.floor(Math.random() * 1000)); return; } } }); } function getHiddenAccountLink(steam_id, steam_name) { return '' + steam_name + '; '; } function handleHTML(steam_id, steam_name, html_string) { var html = $.parseHTML(html_string); var filtered_item_count = 0; var decaled_items = $('div.decal', html); if (decaled_items.length == 0) { var empty_accounts = $('#empty-accounts'); empty_accounts.append(getHiddenAccountLink(steam_id, steam_name)); empty_accounts.fadeIn(); return false; } var inventory = $('
'); inventory.append('

' + steam_name + '

'); decaled_items.each(function () { var parent = $(this).parent(); if (parent.hasClass('q-440-11') || parent.hasClass('nocraft') || parent.attr('data-listing_price').includes('keys')) { filtered_item_count++; return; } var url = "https://next.backpack.tf/item/" + parent.attr('data-id'); var a = $(''); a.append(parent); inventory.append(a); }); if (filtered_item_count) { var link = getHiddenAccountLink(steam_id, steam_name + ' (' + filtered_item_count + ')'); $('#filtered-accounts').append(link); $('#filtered-accounts').fadeIn(); } var item_count = inventory.children().length - 1; if (item_count <= 0) { return false; } var inventories = $('.inventory'); if (inventories.length > 0) { inventory.attr('data-items', item_count); var last_div = null; inventories.each(function () { if (child_count > $(this).children().length) { return false; } last_div = $(this); }); if (last_div) { last_div.after(inventory); } else { $('body').prepend(inventory); } } else { $('#filtered-accounts').before(inventory); } } $(document).ready(function () { handleAccounts(); fetchAccounts(); });