Notice
This is stable release candidate. Check out ASF release cycle if you'd like to learn more.
Changelog
Changes since V5.0.6.6:
- [!] ASF V5.1, while fairly compatible for the users, has gone through extensive refactor and maintenance internally which was crucial for the future development. We've reorganized the whole project structure, re-evaluated the decisions made in the past and corrected those that were vastly suboptimal given time. All third-party plugins will need to be recompiled in order to work with this release. For plugin developers, we've also prepared a small "developer changelog" below.
- Our
SteamTokenDumperPlugin
now supports advanced config that might come useful for the developers and other people having access to potentially sensitive apps on Steam. As of today the config includes various exclusion options. - Upon loading a config file, ASF will now automatically migrate it to the latest syntax, if needed. This covers especially the below config property changes, but also the general cleanup of removing default properties and re-ordering the file to follow ASF scheme. All custom plugin properties (such as our
SteamTokenDumperPluginEnabled
) are left in-tact. - Added
--no-config-migrate
command-line argument for setups that can't or don't want to utilize automatic migration explained above. IPC
is nowtrue
by default. The property still exists for people that would like to disable it through"IPC": false
.IdlePriorityQueueOnly
has been renamed toFarmPriorityQueueOnly
, other than that it acts the same as before. ASF will automatically migrate this change if config migration is enabled (default behaviour).IdleRefundableGames
has been renamed toSkipRefundableGames
, other than that it acts as a negation now, as it was counter-intuitive (to deactivate) before. ASF will automatically migrate this change if config migration is enabled (default behaviour).- Latest ASF-ui with new features, improvements and bugfixes.
- Updated localization provided by our community.
- Usual amount of other core improvements, optimizations and bugfixes.
It's also worth mentioning that we've launched GitHub discussions, official support channel related to ASF where we'll try to answer all ASF questions and technical issues like on our Steam group (which remains our second support channel).
In addition to that, ASF commits (and tags starting from the next version) are now signed with my GPG key in order to add another layer of trust in regards to all source code modifications.
Developer changelog
This changelog covers third-party plugin developers only, easing the migration of the plugins from ASF V5.0 to V5.1. You might want to skip over that if you're not a programmer... And maybe even if you are...
The good news is, everything you were using in the past still exists, so you don't have to reimplement anything yourself. The bad news is, you will have some work to do regardless.
If you've been using our huge abomination called If you currently have a code like that:
You need to adapt it to this now:
This therefore mostly involves constructing If you're working with our If you're the sad guy who had to use our Questions? Issues? Existential crisis? Hop on to our GitHub discussions general section and we'll try to help, there is non-zero chance you'll even avoid getting yelled at! I mean, as long as your issue comes from those breaking changes... 😁
Changelog
Bot
is no longer in ArchiSteamFarm
namespace, but rather ArchiSteamFarm.Steam
now. Refer to the source code in order to find other parts you might be interested in. This is easy adaptation to do, but breaking change regardless.
Steam.cs
for some JSON structures, they're now available as standalone classes in ArchiSteamFarm.Steam.Data
namespace. Likewise with our WebBrowser
responses, they're under ArchiSteamFarm.Web.Responses
now. Pretty much everything migrated somewhere deeper.
WebBrowser
, and by extension ArchiWebHandler
now operates on Uri request
instead of string host, string request
.
string request = "/somerequest";
// Extra entry for sessionID
Dictionary<string, string> data = new(3, StringComparer.Ordinal) {
{ "breaking", "yes" },
{ "optional", "no" }
};
ObjectResponse<SomeResponse>? response = await UrlPostToJsonObjectWithSession<SomeResponse>(ArchiWebHandler.SteamCommunityURL, request, data: data).ConfigureAwait(false);
Uri request = new(ArchiWebHandler.SteamCommunityURL, "/somerequest");
// Extra entry for sessionID
Dictionary<string, string> data = new(3, StringComparer.Ordinal) {
{ "breaking", "yes" },
{ "optional", "no" }
};
ObjectResponse<SomeResponse>? response = await UrlPostToJsonObjectWithSession<SomeResponse>(request, data: data).ConfigureAwait(false);
Uri
out of the host
and request
yourself now, then passing it to the rest of the logic as previously.
IDocument
objects as part of e.g. UrlGetToHtmlDocument
, SelectElementNodes(...)
and SelectNodes(...)
previously returned List<IElement>
, now return IEnumerable<IElement>
. The easiest way, just use IEnumerable<IElement>
where you've previously used List<IElement>
. If you're only enumerating over results, you don't need a full collection, we didn't need it anywhere in ASF code when doing this change. Alternatively, if you're lazy or otherwise in need of it, just call .ToList()
on the result yourself.
RuntimeCompatibility
class for netf
compatibility, it has its own ArchiSteamFarm.Compatibility
namespace with a few new functions we had to re-implement.
Support
ASF is available for free, this release was made possible thanks to the people that decided to support the project. If you're grateful for what we're doing, please consider donating. Developing ASF requires massive amount of time and knowledge, especially when it comes to Steam (and its problems). Even $1 is highly appreciated and shows that you care. Thank you!