Those of you who craft steam badges probably know and use https://www.steamtradematcher.com/ site.
Unfortunately, this site can't now work well, because of new changes in Steam rate limits. You have to wait to sync your inventory, then you have to wait in a queue to make matching, and then results are also a bit outdated, because bot inventories are cached. Still great tool, but not as useful as before.
Also some of you may know that ASF, popular tool to farm cards, also have an official plugin that implements alternative to STM, and public list of bots, involved in this process: https://asf.justarchi.net/STM - but while you may easily setup your account as automatic bot and enroll in listing - you can't actually match without paying money to Archi - for the same reason as above - steam rate limits are too low, so Archi maintains a pool of proxies for matching to work, this feature can't be free anymore.
So, since when I made this script, you have a third alternative - this script can use api of ASF public listing to match your badges with all available bots! Be warned though, that you can still get temporary inventory ban for trading with bots with huge inventories (but matching process itself is safe).


Pros:

  1. Unlike majority of tools after steam rate limits update, it works!
  2. It's free!
  3. You don't need ASF, just an userscript in your browser. Perfect if you only want to find matches occasionally, not all the time.
  4. Unlike STM, it's executed on your PC, so it will always work (may be unstable though if steam is under heavy load)
  5. You send all trades yourself, so everything is under your control.
  6. You only trade with bots, so your trades will be confirmed almost instantly (if everything is okay)
    7. It supports STM's userscript, if you use it - cards will be added to trade automatically (If you use this script - I recommend to apply patch by Nimmy).
  7. Automatically adds cards to trade offer, can auto-send it too.

Cons:

  1. Only works with ASF listing. You can't find matches with your friends or other users, you still need STM for this.
  2. EXTREMELY slow. May take an hour or even more to scan all bots.
  3. For now it lacks many some of STM features.

You can install this script from GREASYFORK


Consider this a permanent beta version, it's very raw and may contain bugs. So, please, check every trade before sending and report bugs and suggestions.

If you want to participate in development - script is now also available on github, feel free to send issues and pull requests there!

Future plans (re-ordered):

  1. Fix trades with too many items causing an error!
  2. For now script works only with regular cards. I plan to add foil cards matching too
  3. Add an option to match cards for already completed badges too.
  4. Add whitelist of matched apps, to make it possible to match only a couple of needed badges without wasting time on the rest.
  5. Add link to bot's profile under bot's name DONE!
  6. Add some configuration options (from suggestion - order in which bots processed, including random)
  7. Maybe add blacklists or other ways to limit which bots should be scanned. (probably as part of configuration)
  8. Make better filter window (relevant to people with a lot of games to match) ADDED SCROLL, THANKS ngoclong19 !
  9. Maybe add filtering by game, same as STM
  10. Add stop button
  11. "select all" and "select none" option for the filters
  12. Progressive timeout increase on errors
  13. Cache number of cards in a badge LOST RELEVANCE
  14. Match emoticons and backgrounds too. NOT GOING TO HAPPEN
  15. ??? your suggestions. (LOL, I have too much TODO already, fat chance!)

Hopefully it will be useful to someone.

Changelog

v0.1 2020-06-05 - First release
v0.2 2020-06-08 - changed an appid detecting logic to avoid false matches. changed getPartner to bigint (faster)
v0.3 2020-06-09 - Now script don't stop on 403 error, just tries next bot. Also added indicator for bots with matchEverything=1.
v1.0 2020-06-13 - Added filters; Removed delay between requests; Some improvements & Fixes
v1.1 2020-06-15 - Added stop button; fixed incorrect behavior upon restart
v1.2 2020-06-16 - added "all", "none", "invert" to filters; further improved error handling; code style improved
v1.3 2020-06-17 - updated for compatibility with greasemonkey; fixed check for "no cards to match", now script don't scan bots in this case.
v1.4 2020-06-21 - fixed matching logic, now finds more matches; improved compatibility with greasemonkey and old browsers
v2.1 2022-12-13 - Completely re-worked script that works with new steam rate limits. Also, uses new ASF STM backend endpoint!
v2.3 2022-12-14 - Fixed some bugs, added display of total number of items in bot's inventory.
v2.4 2022-12-16 - Fixed a lot of different issues, script should now work more stable.
v2.5 2022-12-16 - More fixes
v2.7 2022-12-18 - Greatly improved fetching of card classids. Added caching of bots list to reduce load on ASF backend.
v2.8 2022-12-22 - Fixed a bug that prevented functioning during sale.
v2.9 2023-01-23 - ASF backend api update
v2.10 2023-04-21 - Scroll added to filter window, results sorted by game name, Thanks to ngoclong19 for PR!
v3.3 2023-07-06 - Major update! Integrated (modified) STM helper script, added configuration, added blacklist, fixed bugs.

View attached image.
4 years ago*

Comment has been collapsed.

That sounds pretty cool! I already have ASF set up to passively accept all trades that help me complete sets but nevertheless I'm more or less tech-illiterate.

Can I run this with Tampermonkey or do I need Greasemonkey?


Edit: Nevermind. Reading educates ':D Apparently it works with all the monkeys.

4 years ago*
Permalink

Comment has been collapsed.

Follow up question: How is the script intended to be used? Should I wait until it has finished scanning all bots from the ASF bot listing or can I already start sending trades while the script is still running?

I'm asking because I'm wondering what happens if Trade N°1 and N°3 contain one or more of the same cards and thus N°1 makes N°3 untradable because I no longer have that card?

Normally when I'm going through the listing manually I scan them 3 at a time and reload when I notice they contain identical cards to avoid that very problem.


Edit: Ok, so far it is working great but the fact that my card constellation changes after each trade (or when ASF accepts a passive trade) seems to me as a layman like an almost unsolvable problem.

The best thing I could come up spontaniously is maybe something like a re-check button for individual proposed trades / users so you could go through the proposed trades and pick one here one there for the not so common sets.

4 years ago*
Permalink

Comment has been collapsed.

ASF users should be much better with active ASF matching available with MatchActively setting. This script is for people that are not really using ASF or for some reason don't want to use MatchActively offered by ASF - normally it's much better choice, exactly because it solves all of the issues you stated above, as ASF is able to synchronize with itself and avoid a lot of problems both Steam and STM-related, not to mention that it's much faster than your browser can be. If you're already using passive matching, you meet all the requirements to extend it to active matching.

See https://github.com/JustArchiNET/ArchiSteamFarm/wiki/Trading#matchactively

4 years ago*
Permalink

Comment has been collapsed.

Damn ':D I must be seeing a ghost or is that really you?

Oh, that's great. I vaguely remember I've read that before but was probably too worried I might mess something up and completly forgot about it by now.

Ok. My trading preferences are
"TradingPreferences": 2,
so that should be fine but my config files are very old but still work flawlessy beside that I had to change Trading preferences a couple of months ago because my bot turned Match Everything without me noticing for a week or so ':D

Could you tell me which line I have to add to my config to enable active matching?
I can't seem to find the config explained page in the wiki right now. At least not the detailed one and I can't find anything about matching under Configuration.

4 years ago*
Permalink

Comment has been collapsed.

MatchEverything is under trading preferences - https://github.com/JustArchiNET/ArchiSteamFarm/wiki/Configuration#tradingpreferences, while further explanation is in trading section.

If you have difficulties editing config by hand, I recommend using our web config generator. Or just put 18 there

4 years ago
Permalink

Comment has been collapsed.

Ohhh, ok now I see it. Thanks! 😅
But you mean 16, right?

4 years ago
Permalink

Comment has been collapsed.

No, I meant 18, enabling match actively alone actually won't do anything, as stated on the wiki. Which is why I said that you most likely want to use web config generator and not guess numbers yourself (especially if you're confused how they're generated).

4 years ago
Permalink

Comment has been collapsed.

Ok, then 18 it is.
I just assumed because I couldn't find 18 listed under Trading preferences and 16 was the only 2 digit number.

Tbh the Wiki is very extensive reading material and normally I rather go with belletristic 😅


Edit: So does 18 mean that "MatchEverything" is disabled since I would normally put that under Trading preferences as well? Like 16 for active matching + 2 for SteamTradeMatcher?


Edit 2: Nevermind I found the explanation:

Please notice that this property is flags field, therefore it's possible to choose any combination of available values. Check out flags mapping if you'd like to learn more. Not enabling any of flags results in None option.

Well, I'll just leave it running over night. Curious what will happen.
Thanks again!

4 years ago*
Permalink

Comment has been collapsed.

As Archi already told you, if you are using ASF anyway, you really will benefit more from using MatchActively. And even with passive matching - there is no reason to use this script, since your cards will be matched eventually, just little longer than with MatchActively.

Other than that, it should be okay to send trades as soon as you see something you like, no need to wait for scan to complete. If you send trades one by one there is very little chance that cards will become unavailable, since STM script will only add existing cards to trade, and previous trades accepted almost instantly. However, it does not solve the question "if I traded that, what else I need to trade?". And " re-check button for individual proposed trades / users " only makes sense after scan is finished, since it's basically the separate scan with just one bot, and running to scans at the same time is really bad idea because of steam request rate limiting. So, for now you either handle it yourself (you can see which bots have cards you still missing, so it's easier anyway), or re-load the page and start scan again. I'm thinking about adding a "STOP" button though, with it individual re-checks will be useful, but it's not so trivial to make, so it takes time.

4 years ago
Permalink

Comment has been collapsed.

Yeah, with Archi's help I managed to switch to active matching yesterday anyway so I no longer need this script but it's still a cool and very useful project!

I'm thinking about adding a "STOP" button though, with it individual re-checks will be useful, but it's not so trivial to make, so it takes time.

Yeah, that might be useful. I wanted to stop the script yesterday because I wanted to go to bed and shut down my computer but I wasn't sure if it's a good idea to simply close a tab while there's still a script running. The question rendered itself mute then anyway because the last 200 bots took less time to scan than the first 50 because bots are arranged from most to least items.

4 years ago
Permalink

Comment has been collapsed.

Yes, most time-consuming part is getting inventories of bots, because we can't send requests too often to avoid temporal block from steam side.
And yes, of course it's safe to close or reload tab.

4 years ago
Permalink

Comment has been collapsed.

Seems to work really nicely, it's great for me because I didn't want to fiddle about with 2FA settings to get the automatic trading working in ASF. Thank you for sharing. 😀

4 years ago
Permalink

Comment has been collapsed.

This is awesome! Thank you!!

4 years ago
Permalink

Comment has been collapsed.

How about a setting to sort the results for the game - instead for all one bot hast to offer? Or maybe a search function that lets us search within the results to filter only those we're looking for?

4 years ago
Permalink

Comment has been collapsed.

Yes, filters are planned.

4 years ago
Permalink

Comment has been collapsed.

Works nice thanks :)

4 years ago
Permalink

Comment has been collapsed.

Little suggestion: As it takes some time, why not check the bots every time in a random order instead of always in the order of the ASF list. This way you should get faster some new results :)

4 years ago
Permalink

Comment has been collapsed.

I actually sort the bots before checking, to check bots with most items first, as they are more likely to have what we need. But if I eventually add settings to the script, choosing order of bots may be an option too.

4 years ago
Permalink

Comment has been collapsed.

I got this wrong match:

Mine for Torchlight II, other one is for this but with name Torchlight II

View attached image.
4 years ago
Permalink

Comment has been collapsed.

Wow. I never expected this. Do you remember by any chance which bot was it?

4 years ago
Permalink

Comment has been collapsed.

ImlaBot ( it's on the screenshot ;))

4 years ago
Permalink

Comment has been collapsed.

Damn, I wasn't completely awake when asked this. Thank you for report, I will research and try to fix that.

4 years ago
Permalink

Comment has been collapsed.

No worries :) Let me know when I should check again. Haven't switched my card yet.

4 years ago
Permalink

Comment has been collapsed.

New version uploaded, please check if it solves this issue for you.

4 years ago
Permalink

Comment has been collapsed.

Works fine, thank you :)

4 years ago
Permalink

Comment has been collapsed.

Sorry found another problem 😅

There is a guy on the public listing whose inventory is set to private at the moment so the following request results in a 403 forbidden error and the script stops: /inventory/[STEAMUID]/753/6?l=english&count=5000&l=english

4 years ago
Permalink

Comment has been collapsed.

Hm. I stop script at 4xx errors so that it won't push further in case of occasional rate limit, but it seems this check is not enough and I need to distinguish different errors and process them separately. Thanks for the report! Also, don't feel sorry for reporting bugs, it's great to know somebody actually uses this script.

4 years ago
Permalink

Comment has been collapsed.

Updated the script, hopefully it will fix this issue (I can't reproduce it, probably this bot is out of listing already, as it should be).

4 years ago
Permalink

Comment has been collapsed.

yep I still get the 403 in the console, but the script is going on :) Well done, thank you! =)

4 years ago
Permalink

Comment has been collapsed.

ASF can't update stuff in real-time, but it'll usually get rid of the bot in maximum of several hours since the user modified the settings and he's no longer eligible for listing.

4 years ago
Permalink

Comment has been collapsed.

I understand that of course. But I still decided to add a workaround so that in rare cases of "bot is not eligible anymore, but not removed from listing yet" script kept working.

4 years ago
Permalink

Comment has been collapsed.

And that is a very good addition.

4 years ago
Permalink

Comment has been collapsed.

Hi there! Pretty cool script you have there, very nice to see people like you who work on those in benefit of the community. I already used and found some matches I couldn't find on STM, but at a certain point when fetching bots it stops and gives an error : "Error getting inventory, ERROR 403".

Don't let this project die, thank you!

4 years ago
Permalink

Comment has been collapsed.

Should be fixed with next update, let me know if it happens again.

4 years ago
Permalink

Comment has been collapsed.

Been using it quite in a daily basis and it's been perfect

4 years ago
Permalink

Comment has been collapsed.

Bump for new version with filters!

4 years ago
Permalink

Comment has been collapsed.

Gave me a "Error getting inventory, ERROR 500" - no idea what might have caused it though.

4 years ago
Permalink

Comment has been collapsed.

It means Steam returned "500 Internal Server Error" even after 5 retries. I'm unsure how to handle this, and if it's even possible...

  • Maybe steam belives that we made too many request in a short time (it should be error 429, but Valve may not care) - then we just need to increase delay between requests... But since this error is pretty rare, I don't know how to check if it helped or not. Obviously, increasing the timeout will make the scan longer.
  • Maybe it's just temporal steam downtime, in this case, my only alternative to current behavior is to increase timeout with every error, and then reset to default on successful request.
4 years ago
Permalink

Comment has been collapsed.

Would skipping the current user/bot and moving on to the next one be a solution and possibly go back to the one where the error occured at a later point again?

4 years ago
Permalink

Comment has been collapsed.

I don't think it has any correlation to current bot. For now I implemented second approach - after every error I wait for some time, increased progressively, and reset this waiting time upon successful request. Works so far for me, I'll test it a bit more and release with next version.

4 years ago
Permalink

Comment has been collapsed.

I've uploaded new version, feel free to update and test if issue with error 500 solved for you. Also added "all", "none" and "invert" to filters section.

4 years ago
Permalink

Comment has been collapsed.

I've updated and will report back, should Error 500 show up again. Thanks.

4 years ago
Permalink

Comment has been collapsed.

Deleted

This comment was deleted 4 years ago.

4 years ago*
Permalink

Comment has been collapsed.

Lately I can't run the script without getting error 429. Is there anything I can do about this, like increasing a timer or something to give it a try?

3 years ago
Permalink

Comment has been collapsed.

it means "too many requests". make sure you are not requesting steam inventories while script is running (for example, opening many trade windows from script), or edit the script, find variable called limiter on top of it and increase it's value. It's zero by default and means time between requests in milliseconds, I would start with 100 and then increase it if it does not help.

3 years ago
Permalink

Comment has been collapsed.

I'm doing nothing at all besides it. Thanks for hinting to the variable though, I appreciate it!
Giving that a try now...

3 years ago
Permalink

Comment has been collapsed.

Setting it to 50 made it work to the end. Thanks again for the tip!

3 years ago
Permalink

Comment has been collapsed.

Suggestion: Like with STM, a "selevet all" and "select none" option for the filters would be nice.

Also a filter for trading partners - similarly to the game filters, one that lists all the partners. If there was a cached list of people/bots we could select who's going to get listed in the first place.

4 years ago
Permalink

Comment has been collapsed.

You want to select from a list with 300 bots? It is possible, but it's kinda strange to me... what criteria will you use? Maybe instead of manually selecting it would be better to implement some automatic sorting/filtering?

4 years ago
Permalink

Comment has been collapsed.

A start would be options to choose between only "all" trades or only "fair" trades.
And yes, why not have a list to select which bots (or users) to trade with or who not to trade with. If I don't want to trade with a bot because their inventory is so huge, it takes 15 minutes to cache it in the trade window and similarly long for the script to check them - I could just deselect them and just trade with other bots/users instead. Or if there's a user who never accepts trades, I could exclude them. Or if I want to specifically trade with certain bots because of their huge inventory that option would be nice to have. This could speed up the search for trade matches (and ease on the Steam servers) if only those inventories are looked through that are necessary.

4 years ago
Permalink

Comment has been collapsed.

A start would be options to choose between only "all" trades or only "fair" trades.

I have that option in plans.

Or if there's a user who never accepts trades,

That's impossible, there are only bots in this listing, all of them accept valid trades. If someone uses modified bots that don't accept valid trades - it should be reported, and I'm pretty sure Archi will ban this account from the listing.

And yes, rest of your reasons seems valid to me, I'll consider adding full listing to select bots when/if I will come with script options.

4 years ago*
Permalink

Comment has been collapsed.

I think you had meant to say "that don't accept valid trades"?

Heading over to https://asf.justarchi.net/STM, scrolling all the way down (to make it easier for me) that's definitely not all bots - looking at some of these profiles that's actual people (possibly using a bot on their account).
Some of the trades set up with your script took hours, some even until the next day to be accepted or denied(!). I doubt that's a bots doing. Maybe you can set asf to ignore trades and possibly set it to notify the owner about the open trade? No idea how it works but if it's taking a "bot" that long to trade I'm pretty sure it's not a bot but a user - maybe running the bot on his main account or whatever. I don't know.

4 years ago
Permalink

Comment has been collapsed.

I think you had meant to say "that don't accept valid trades"?

Yes, thank you, fixed.

looking at some of these profiles that's actual people (possibly using a bot on their account).

Exactly. Only way to get to this list - is run a bot on account. Of course you can keep using this account at the same time. But bot will accept all valid trades anyway.

Some of the trades set up with your script took hours, some even until the next day to be accepted or denied(!).

Then why do you never reported it? If some trade is denied - I surely want to check, how this happened, just to make sure it's not some bug in my script.

Maybe you can set asf to ignore trades and possibly set it to notify the owner about the open trade?

You can, but then you will be kicked out of list very soon. It's automatic. Bot either accept trades automatically - or it's not in the list.

Your trade may take long if bot receiving a lot of trades from other users, because of rate limiting. And trade may be declined for the same reason - if bot accepts only fair trades, and while you were sending your trade someone already traded with this bot (possibly even other bots - remember, they also match cards with each other) - trade may not be neutral+ anymore.

4 years ago
Permalink

Comment has been collapsed.

1, I didn't think reporting was an issue and 2, I simply moved on to the next one offering a trade for what I have to offer/am looking for.
I doubt it's an error in your script once the trade is properly set up (trading single or two cards the most at once) and confirmed via the app from my side.

Hm... so you can setup a bot to ignore trade but this will trigger you to being kicked from the list? Ok, then I have no idea how they were doing it.
Yeah, sure it can take long because of many requests - like with that ponyexpress trading bot. But that's shouldn't be an issue with those where the trade page pops up filled out pretty quick, letting me assume they have a smaller inventory that naturally gets less trade requests. And even ponyexpress replies to a trade within 10-15 minutes, not hours or half a day.
Anyways, no I know.

4 years ago
Permalink

Comment has been collapsed.

Hm... so you can setup a bot to ignore trade but this will trigger you to being kicked from the list? Ok, then I have no idea how they were doing it.

As stated on ASF's wiki, users that have chosen to participate in the listing are shown on the list if they meet ASF criteria (listed on the wiki). If user no longer meets ASF criteria (e.g. he changed his inventory to private), he'll be taken off the listing in up to several hours maximum. Of course it's possible for malicious users to work it around and report false data to my server, but I don't have any signals of that happening, and those users would be banned from the listing fast enough.

It's still possible for bot to not react (or even deny) your trade, while actually being valid for the listing. First of all, there are Steam issues, and ASF might be unable to accept the trade for one reason or another - it'll hang until retry. The fair bot you're matching could've already traded his dupes in a way your trade is no longer neutral+ (in this case he can even deny the trade, mind you) and lastly the userscript might actually have a bug and suggest trade offers that are, well, not fair, in which case ASF doesn't care if the trade comes from other ASF bots, userscript or any other source - it has its own rules, and if you do not match those rules then you'll be denied, regardless of reason.

I'm just saying that sending a trade offer to bot listed on my listing doesn't mean that trade is guaranteed to be accepted, there are no guarantees for anything, but assuming that Steam is working properly with no issues and bot status (e.g. inventory privacy) didn't change, bots listed as Any will accept any 1:1 trade from you, while Fair ones will accept any 1:1 trade from you, as long as it doesn't cause them to lose any badge progress.

4 years ago
Permalink

Comment has been collapsed.

(No idea where on the wiki these criteria were listed - I couldn't find them.)
I'm aware about some of the reasons why a trade could be denied but I again had an issue earlier today - twice - where trades got declined. The first was one card out of each inventory of equal worth, in the second trade mine was even the more expensive one. So there's no reason why the trades should've been denied. The first trade got denied after maybe 15 minutes, the second trade (which I had send maybe a minute before the first one got denied) got denied right after.
I then checked the "bots" inventory via it's steam profile page and the cards that I requested where still in its inventory. So I contacted the "bot" via chat and a few hours later got a reply... part of which said:
"If I don´t own the set (or atleast some more of those cards) he will not allow the trade till I have more."

Now I don't know much about how your script works but from all that you and Ryzhehvost said a bot should always accept a trade (especially when fair) as long as there's no other issues interfering. But the reply that "bot" (owner) gave me seems to imply that it indeed only accepts trades that help him complete his sets and then trades with the left overs. Now I don't know if your script is capable of doing that but it doesn't sound like that's what a bot on that trading bot list is supposed to be doing.
Anyways, this supports what I said before, that there's "bots" (or people acting as bots) that don't accept trades if they don't help them. Which is fine in itself but kinda goes against the idea of the trading bot list from how I understood it.

(I'm not mentioning any names because I don't want to throw anyone under the bus. Especially since I've successfully initiated trades with that "bot"/user in the past where now it seems that I was just lucky with offering just what he needed and asking for what he needed to get rid of. I'm just mentioning this because either I understood the whole idea of the trading bot list wrong or I indeed don't understand the criteria to get on the list in the first place. It just - to me - seems like such a "bot" shouldn't be on that list.)

4 years ago*
Permalink

Comment has been collapsed.

(No idea where on the wiki these criteria were listed - I couldn't find them.)

https://github.com/JustArchiNET/ArchiSteamFarm/wiki/Statistics + https://github.com/JustArchiNET/ArchiSteamFarm/wiki/Trading

The first was one card out of each inventory of equal worth, in the second trade mine was even the more expensive one. So there's no reason why the trades should've been denied.

You still seem to misunderstand that fair bots are not trading "any card of equal value" or "any cards from the same set", but explicitly trades that are neutral+ for them (as, again, stated on the wiki), and if you by any chance send them a trade that is not neutral+ for them, then they'll decline it, either automatically, or manually, depending on how user configured his bot. There are at least several reasons for your trade being denied, and I already listed some of them above.

And I also believe you're misunderstanding the whole concept of ASFs running on user accounts. Those are not any dedicated "bot" accounts trading cards, 75% of the listing is made out of users running ASFs on their accounts, and ASF is only guaranteed to accept automatically trades that pass neutral+ rules, those trades that do not pass the rule is either declined (if the user configured it so), or ignored (where user himself decides whether to accept/decline the trade, which you classify as non-automated response, totally by a mistake - there was automated ASF response already, and your trade was found to NOT pass the requirements).

Nothing you stated is a problem of the listing or ASFs, the owner of the bot you actually contacted even told you that. It's only you sending non-neutral+ trades (or Ryzhe's script sending those in your name by a mistake - which I'm not interested in, as I maintain the listing, not develop the script). And I know that it works properly, because my ASF has active matching and actually sends valid trades to all of those any and fair bot accounts, all the time - and all the time I'm getting automatic ASF accept response, so if those users wouldn't be running ASFs, as you "imply", then they wouldn't accept my trades automatically under 30 seconds.

4 years ago*
Permalink

Comment has been collapsed.

Thanks for the links.

Maybe I should've added to my previous "I then checked the "bots" inventory via it's steam profile page and the cards that I requested where still in its inventory." that not only where they still in its inventory, but they were also dupes. Which was obvious to me at the point of writing my previous comment. That made both my trade requests neutral+.
Again, this - and what I've described previously with other users/bots, that are reacting to my request only a day after offers were sent - to me seems like some bots are set to ignore every incoming trade offer letting the owner generally decide if he wants do accept or deny a trade, using the bot itself only to further their own set progress. Which - again, in my opinion - defeats the purpose of getting listed on your page (the list used in this script described on this page) as ASF for them only is set up to help the owner of the bot. Which basically is what I'm saying the whole time and the only thing that I'm "implying".
Good for you if you're trades automatically get accepted in "under 30 seconds" "all the time". That certainly is not always the case for me nor for other people I've talked to about the issue. Just to pick one example: PonyExpress always takes about 10-15 minutes to reply to trade requests apparently because it's so busy.

4 years ago
Permalink

Comment has been collapsed.

I'm not sure if you also realize that it's not up to the users to show up on listing or not. ASF checks all the conditions before it announces itself, and keeps checking them every few hours if they're still up-to-date, that is, if ASF is there listening for trade offers and reacting to them. It's impossible for user to disable that ASF functionality and still show up on the listing, there is no magical button allowing users to show up on the listing with wrongly configured ASF, and I proved it countless of times trading with all kind of bots announced. Either you meet the conditions (which guarantee ASF response to neutral+ trade offers) and show up on the listing, or not.

It's not possible for somebody to show up on the listing who doesn't meet the pre-requirements. PonyExpress is fair bot owning over 255k of Steam items, which means that his ASF needs to check its whole inventory before deciding whether to accept the trade or not, and if it fails for any reason (e.g. Steam not loading inventory of 255k items, guess why) then the trade is not accepted in time. Show me Any bot example which doesn't accept trades in time, and then we'll talk - because those do not need to fetch 255k items inventory to accept the trade in time - because I'm not shocked at all that this bot takes over 15 minutes to react to trades, I'm shocked it reacts to any trades to begin with, considering this huge amount of items and popularity.

And this whole situation falls under one of possible reasons of bots not accepting trade offers in time I mentioned above. And yes, until you prove that there are users who through some kind of crafted, malicious requests, fooled my listing by working around ASF logic responsible for checking the pre-reqs, I'll believe the data I have, not the assumptions that you're presenting, which are outright wrong in regards to how ASF and the listing works.

4 years ago*
Permalink

Comment has been collapsed.

I've mentioned PonyExpress in reply to your general statement that bots always accept your requests within less than 30 seconds.
I'm not making assumptions - I've told you about my personal experiences with some of the bots/users. Do with that whatever you want - or don't, which you surely will since you seem to be convinced that you're absolutely right anyways.
I simply move on to trade with someone else if a bot/user declines or doesn't react after a few days - no need for me to spend any more of my time with that than I already have, trying to prove anything to you after I already have told you about my experiences.
Have a good one.

4 years ago*
Permalink

Comment has been collapsed.

It would really help if you could report such issues back to me to analyze. Especially if you bother to check what cards from the same set bot has at the moment it declines the trade. This would both help me to check if my script working as intended and check if bot is not modified to abuse listing rules (in which case I'll report it to Archi).

to me seems like some bots are set to ignore every incoming trade offer letting the owner generally decide if he wants do accept or deny a trade, using the bot itself only to further their own set progress

Once again - it's only possible if user modified asf code, and those should be reported to Archi (or me) to be banned from the list, since they are abusing service.

PonyExpress always takes about 10-15 minutes to reply to trade requests apparently because it's so busy

Quite possible, if there is a lot of requests to this bot, especially if it's InventoryLimiter parameter was configured to pretty high value.

4 years ago
Permalink

Comment has been collapsed.

I might let you know in the future if cases like these repeat. Thanks for offering looking into it.

4 years ago
Permalink

Comment has been collapsed.

If I don't want to trade with a bot because their inventory is so huge, it takes 15 minutes to cache it in the trade window and similarly long for the script to check them - I could just deselect them and just trade with other bots/users instead.

This is actually why ASF STM listing (and ASF active matching) sorts by games the items are from first, then items, exactly because user doesn't want 65k cards from 10 games, but 15k cards from 4k games. I'm unsure why Ryzhe thought sorting by items will be a better idea, but here it is. It's much better approach to try bots according to number of games their items are from, because with better diversity of games, it's far more likely to get a match on average.

4 years ago
Permalink

Comment has been collapsed.

In case people use the STM userscript they might be interested in patching it:
https://steamcommunity.com/groups/steamtradematcher/discussions/2/2865910035027970856/

Otherwise they may experience bugs if the bot doesn't have one of their cards anymore.

4 years ago
Permalink

Comment has been collapsed.

Thanks, I'll add this to description.

4 years ago
Permalink

Comment has been collapsed.

I don't have duplicate cards now, but I wanted to give your script a try to see if it works with emoticons & backgrounds, but...

Script error in [Script Greasemonkey https://greasyfork.org/users/2205/ASF STM; version 1.2]:
ReferenceError: GM_xmlhttpRequest is not defined ASF STM:1070:19
    <anonyme> user-script:https://greasyfork.org/users/2205/ASF STM:1070

I use GreaseMonkey 4.9 and FireFox 77.0.1 x64.
Is it intended to work with another script monkey ?

4 years ago
Permalink

Comment has been collapsed.

I develop it for tampermonkey and haven't tested anything else for now. I'll see if I can make it compatible with greasemonkey, thanks for the report!

4 years ago
Permalink

Comment has been collapsed.

Also, it does not works for emoticons & backgrounds, and I'm not really interested in implementing this. But who knows, maybe if it will be a high demand feature, and after I implement everything else...

4 years ago
Permalink

Comment has been collapsed.

It works with TM, and it seems I can install & run both monkeys simultaneously (it's a weird idea).
I don't know why few people cares about E & B... even bot owners with 10K+ cards in inventory often have no B, no E ! So any tool helping those trades could be appreciated by people willing to trade E & B.

Anyway, I launched your script, and I saw it scanning bots inventories... but why ? since I have no duplicate cards, there's no point in going that far ! So, a little suggestion : start your algorithms by scanning user's own inventory ! (and a feature to report the dupes found may be useful, providing there's not too many dupes to list :)

4 years ago
Permalink

Comment has been collapsed.

start your algorithms by scanning user's own inventory !

Actually, that's what I do, and script wasn't supposed to scan bots if there is no matches. But it seems I forgot about one more check. Thanks for the report!

I can install & run both monkeys simultaneously (it's a weird idea).

Nothing weird about it. I run both, with exactly one script in greasemonkey. There are some features that one script manager has while the other not.

4 years ago*
Permalink

Comment has been collapsed.

I've uploaded a new version, should work in greasemonkey now. Also, "scan without cards to match" fixed too. Thank you!

4 years ago
Permalink

Comment has been collapsed.

It no longer scans the bots, so it's fixed. (yes I didn't saw it was scanning my inventory the 1st time, sorry about that).
But the GM issue is not fixed, only the error message vanished. I just added a few console.log(...); to see what happens : GM_xmlhttpRequest is now well-typed as a function, but it never gets into the onload event function (I don't know why...). I failed to trap any error with try {...} catch(e) {...} statement, and I'm not skilled enough in JS to go any further in debugging...
Anyway, it's working with TM, so maybe just adding a warning like "doesn't work with GM" may do the trick, after all there's other scripts that don't work in GM...

4 years ago
Permalink

Comment has been collapsed.

Well, it works for me with GM & Firefox Developer Edition 78.0b8, and no idea why would it not work.
I added onerror handler to GM_xmlhttpRequest, so if you manually re-install script (I did not bump version, so it won't update) and enable debug=true on top of script, maybe you'll be able to find out a reason why it fails.

4 years ago
Permalink

Comment has been collapsed.

No :(
I'm seeing message found total 278 bots with TM ; but with GM it just doesn't work...
I tried to change the requestUrl to see what happens :

  • with TM, an invalid url correctly gives a 404 error in the console
  • with TM, a valid url to something other than the list of the bots correctly gives the error message can't fetch list of bots
  • with TM, an url not on the @connect list correctly gives an error message in the console
    ...
  • but with GM... nothing at all... ...it's like the GM_xmlhttpRequest(...) function acts like a black hole eating all and any coding effort... !

It's maybe a conflict with something else on my Firefox : an extension, a configuration flag, I don't know (already tried to disable some), and I don't use any other script with the same function to compare.

4 years ago
Permalink

Comment has been collapsed.

Tried on a fresh install of regular (not Developers Edition) Firefox, works out of the box. Tried on Pale Moon with pretty outdated greasemonkey, made some fixes for it to work there too. No fallbacks must be more robust, hopefully. Give it a try if you're curious.
Also, I found out that any errors from greasemonkey forwarded to browser console (opened with Ctrl+Shift+J), not to regular one. Maybe it will show actual error message for you.

4 years ago
Permalink

Comment has been collapsed.

Thank you for the info, I wasn't aware of this console... Do you know what ? It's another dead-end (-x
I'm getting this error both with TM and GM on page load, so it's not the problem :

[Exception... "Component returned failure code: 0x80070057 (NS_ERROR_ILLEGAL_VALUE) [nsIDOMWindowUtils.addSheet]"  nsresult: "0x80070057 (NS_ERROR_ILLEGAL_VALUE)"  location: "JS frame :: resource://gre/modules/ExtensionCommon.jsm :: runSafeSyncWithoutClone :: line 75"  data: no] ExtensionCommon.jsm:75:12
    runSafeSyncWithoutClone resource://gre/modules/ExtensionCommon.jsm:75
    cssPromise resource://gre/modules/ExtensionContent.jsm:516

and with GM only, I also get 2 messages about undefined cookies & first party isolation :

cookies is undefined on-user-script-xhr.js:128
    open moz-extension://8a811161-f03d-4a96-8b57-99be61d60435/src/bg/on-user-script-xhr.js:128
    apply self-hosted:1870
    applySafeWithoutClone resource://gre/modules/ExtensionCommon.jsm:614
    wrapPromise resource://gre/modules/ExtensionCommon.jsm:843
    withLastError resource://gre/modules/ExtensionCommon.jsm:762
    wrapPromise resource://gre/modules/ExtensionCommon.jsm:831

Unchecked lastError value: Error: First-Party Isolation is enabled, but the required 'firstPartyDomain' attribute was not set. on-user-script-xhr.js:127
    open moz-extension://8a811161-f03d-4a96-8b57-99be61d60435/src/bg/on-user-script-xhr.js:127

The extension with ID 8a811161-f03d-4a96-8b57-99be61d60435 is GreaseMonkey, not another conflicting one.

I can easily cancel those 2 error by re-setting privacy.firstparty.isolate = false in about:config ; but it only does that. I mean the 2 errors specific to GM are no longer reported (minor side-effect is my steam saved credentials also become unreachable), but your script still shows no button... So it's not the problem.

I'm giving up, that's too much time spent with no idea of where to look for an issue ! Thank you again

4 years ago
Permalink

Comment has been collapsed.

I'm giving up too, it seems something specific to your settings or conflict with some other addon (since it works in clean installation of FF+GM) , and since it works fine in TM for you - I will call it a day. Anyway, with your help I improved compatibility a lot, it even works on Pale Moon now, so I believe it should be enough for most users.

4 years ago
Permalink

Comment has been collapsed.

Nice script, thank you. :-)

4 years ago
Permalink

Comment has been collapsed.

great, way better than 1 server sending all the requests to steam and getting rate limited

does this script have a cache? (getting badge data every request sounds like a pain)

4 years ago
Permalink

Comment has been collapsed.

i changed rgba( 103, 193, 245, 0.2 ) to #171A21E6
i think 90% transparency is the minimum value so you can easily read the filters also this bg color is better for the font color (better contrast)

4 years ago*
Permalink

Comment has been collapsed.

can you add a filter button for each trade/badge inside trade so i can filter what i traded?

i see that the checkboxes have id's astm_STEAMID and the blocks inside each trade have a class asf_stm_appid_STEAMID

4 years ago
Permalink

Comment has been collapsed.

I don't think I understand what you mean. Another button to filter appid, but placed next to the found matches? Sounds excessive to me. And if not that - could you please elaborate?

4 years ago
Permalink

Comment has been collapsed.

after i send a trade i filter the apps from the trade, so i can send another trade without the duplicates

4 years ago
Permalink

Comment has been collapsed.

Well, you can do so already from the floating panel.

4 years ago
Permalink

Comment has been collapsed.

it would be great to have a button to click and have this process automated

4 years ago
Permalink

Comment has been collapsed.

We have no means to know if you actually send trade or just opened it and then just closed. I'm not going to implement something like this, feel free to make your fork with this feature if you want it.

4 years ago
Permalink

Comment has been collapsed.

Deleted

This comment was deleted 4 years ago.

4 years ago
Permalink

Comment has been collapsed.

ok, i finished it
too bad i can't test it now cause i don't have anymore trades to send

4 years ago
Permalink

Comment has been collapsed.

I plan to cache number of cards in a badge, no idea what else can I cache to improve performance.

4 years ago
Permalink

Comment has been collapsed.

everytime i run the script the 3rd xhr request freze my browser for 5-10 sec
from where does that call originates? and can you make it asynchronous?

View attached image.
4 years ago
Permalink

Comment has been collapsed.

I dunno what you mean by 3rd request, could you please elaborate?
But all requests apart from the very first one (that happens on page load, before button appears) are made to steam server, so making them async makes no sense, we will just hit steam rate limiter and get temporal ban.
Also, I don't know what those messages mean, but it seems not the request itself took a lot of time, but processing of results. And yes, parsing whole inventory of bots with a lot of items may take a lot of time. I tried to optimize this procedure, but let's be frank - I don't know javascript, so I have no idea how to write optimized code in it too.

4 years ago
Permalink

Comment has been collapsed.

ok, im gonna add you

4 years ago
Permalink

Comment has been collapsed.

Hi there :)

I'm still loving this script, it was especially helpful during Steam Sale when STM often was down.

There is one thing which would make it even more helpful.

Given the following situaltion:

I have Card 1 and 2 each two times and am missing Card 3 and 4
User 1 has Card 3 and 4 and needs Card 1
User 2 has Card 3 and needs Card 1 and 2

At the moment it would show me for both the match Card 1 for Card 3.

Would it be possible to show me that I also could get Card 4 from User 1 and also could give Card 2 to User 2? So that at the end I can make two trades:

User 1: Card 1 for Card 4
User 2: Card 2 for Card 3

4 years ago
Permalink

Comment has been collapsed.

So, basically, what STM doing right now. Yes, I know my algorithm is different than STM, and I actually thought that I might add stm-like matching as an option. But matching algorithm itself is pretty complex, so I don't have time and will do do it right now. So, all I can for say - maybe when I'll have some spare time and inspiration - I'll do it.

4 years ago
Permalink

Comment has been collapsed.

No worries, I understand that this could be quite difficult :)

Maybe you can add a link to the card badge page of the game from the other user instead? :)

4 years ago
Permalink

Comment has been collapsed.

I... never thought about it. It should be easy, I just need to find where to put the link.

4 years ago
Permalink

Comment has been collapsed.

hi! I'm getting "Error getting inventory, ERROR 429" every time the progress bar reach like 1/4. am I doing something wrong?

4 years ago
Permalink

Comment has been collapsed.

it means "too many requests". make sure you are not requesting steam inventories while script is running (for example, opening many trade windows from script), or edit the script, find variable called limiter on top of it and increase it's value. It's zero by default and means time between requests in milliseconds, I would start with 100 and then increase it if it does not help.

4 years ago
Permalink

Comment has been collapsed.

Good to know. I was using STM before... This may be the problem. Thanks!

4 years ago
Permalink

Comment has been collapsed.

Bump for major update! Now works with new steam rate limits. Feedback is welcome!

1 year ago
Permalink

Comment has been collapsed.

Winter sale is coming, and one can again get mystery cards for crafting badges. So I will shamelessly bump my script that can help you to complete badges. If this script helped you - please bump the thread to tell others about it!

1 year ago
Permalink

Comment has been collapsed.

Bump for people in different timezones.

1 year ago
Permalink

Comment has been collapsed.

Hey!
Thanks for the update!
Checking now!

1 year ago
Permalink

Comment has been collapsed.

thank you for the update

1 year ago
Permalink

Comment has been collapsed.

Just a heads up: If someone already has this script installed, your update will not work. Maybe because of the same name? Or maybe because of the same functionality? I don't know.

1 year ago
Permalink

Comment has been collapsed.

Well, name looks different to me, but that script has separate update source (obviously), and you only should probably have one of them installed and active to avoid conflicts (no idea how will it work if both are active at the same time, but I don't think it will end well). If you plan to use that script you should ask it's author to update it, either by re-basing it on last version of my script, or by themself.

1 year ago
Permalink

Comment has been collapsed.

I tried that script in the past but was not satisfied with the results. Now I'm testing your updated script, but it is still running since I started it 3 hours ago XD No wonder, because it had to deal with 66xx badges ^^
I just wanted to inform you that there is a problem if one has both scripts installed at the same time.

Edit: Oh, while typing your script has finished :D It returned a lot of results, way more than STM at the moment, but it aborted with "Error getting badge data, malformed HTML".

1 year ago
Permalink

Comment has been collapsed.

Thanks for the heads up!

it aborted with "Error getting badge data, malformed HTML".

Interesting, thank you for report. I guess I need to add more details to this error message to find out why it happens. It may be just steam being unstable, and it will work next time, but I would prefer to be sure.

1 year ago
Permalink

Comment has been collapsed.

Addition: Your script works wonders!
Not only does it find soooo many more matches than STM does at the moment, no, it instantly recognizes when a card is given away and modifies what cards it adds to a trade window accordingly. Something I always wanted from the STM userscript.

Example:
I found 8 trades with user A and 5 trades with user B. 3 of the five trades of user B are already included within the 8 trades of user A. So i traded with user A (cards are gone now) and unchecked the filters for the 8 correspending games. Now user B only shows 2 trades. I clicked on "Trade for all" (or however it's called) for user B and only the missing 2 trades are added to the trade window.
Fantastic!
STMs userscript would add all 5 trades of user B to the trade window because without a new scan, it doesn't recognize that those cards are already gone. With STMs userscript, I would have to manually remove the 3 already traded cards from the trade window.

1 year ago
Permalink

Comment has been collapsed.

it instantly recognizes when a card is given away and modifies what cards it adds to a trade window accordingly. Something I always wanted from the STM userscript.

Well, it's awkward... because my script does not add cards to trade, it's STM userscript doing that...

1 year ago
Permalink

Comment has been collapsed.

XD

Then I'm at a loss for words ^^

1 year ago
Permalink

Comment has been collapsed.

Thank you for this, been a really nice alternative to stm!

1 year ago
Permalink

Comment has been collapsed.

Kudos for the script! 😍
I've used it once (before winter sale started) and it worked, but now i'm getting 'Error getting card data for 2243720, please report this!'
Using version 2.7

1 year ago
Permalink

Comment has been collapsed.

Thank you for the report, should be fixed in version 2.8

1 year ago
Permalink

Comment has been collapsed.

It works now! thanks for the quick fix!

1 year ago
Permalink

Comment has been collapsed.

Sign in through Steam to add a comment.