Compare commits

...

2200 Commits

Author SHA1 Message Date
Archi
7a21c7bc45 Don't copy all variant-specific files if ASFVariant is not declared 2024-02-22 23:44:06 +01:00
renovate[bot]
9358aa5d1f chore(deps): update github/codeql-action action to v3.24.4 2024-02-22 15:09:20 +00:00
Archi
6c9e9da740 Modernize unit tests 2024-02-22 16:08:54 +01:00
renovate[bot]
a78a607f73 chore(deps): update asf-ui digest to cd1173a 2024-02-22 03:20:14 +00:00
ArchiBot
879323ed20 Automatic translations update 2024-02-22 02:04:27 +00:00
renovate[bot]
4e081b26a1 chore(deps): update asf-ui digest to e055bd1 2024-02-21 13:02:17 +00:00
Archi
6cd3459dd4 Misc 2024-02-21 13:20:26 +01:00
Archi
482576f16d Add extra constructors also to other public collections 2024-02-21 13:18:23 +01:00
Archi
f63dbffee3 Add extra constructors 2024-02-21 13:08:32 +01:00
renovate[bot]
d9cdc806fe chore(deps): update wiki digest to 03614e1 2024-02-21 04:05:58 +00:00
Archi
36a78b55a4 Good idea 2024-02-21 03:46:25 +01:00
Archi
ab983099cc Misc 2024-02-21 03:32:14 +01:00
Archi
aab8f5f0b5 BIG BUMP 2024-02-21 03:11:32 +01:00
Łukasz Domeradzki
6b0bf0f9c1 Closes #3061 (#3145)
* Good start

* Misc

* Make ApiAuthenticationMiddleware use new json

* Remove first newtonsoft dependency

* Pull latest ASFB json enhancements

* Start reimplementing newtonsoft!

* One thing at a time

* Keep doing all kind of breaking changes which need to be tested later

* Add back ShouldSerialize() support

* Misc

* Eradicate remaining parts of newtonsoft

* WIP

* Workaround STJ stupidity in regards to derived types

STJ can't serialize derived type properties by default, so we'll use another approach in our serializable file function

* Make CI happy

* Bunch of further fixes

* Fix AddFreeLicense() after rewrite

* Add full support for JsonDisallowNullAttribute

* Optimize our json utilities even further

* Misc

* Add support for fields in disallow null

* Misc optimization

* Fix deserialization of GlobalCache in STD

* Fix non-public [JsonExtensionData]

* Fix IM missing method exception, correct db storage helpers

* Fix saving into generic databases

Thanks STJ

* Make Save() function abstract to force inheritors to implement it properly

* Correct ShouldSerializeAdditionalProperties to be a method

* Misc cleanup

* Code review

* Allow JSON comments in configs, among other

* Allow trailing commas in configs

Users very often add them accidentally, no reason to throw on them

* Fix confirmation ID

Probably needs further fixes, will need to check later

* Correct confirmations deserialization

* Use JsonNumberHandling

* Misc

* Misc

* [JsonDisallowNull] corrections

* Forbid [JsonDisallowNull] on non-nullable structs

* Not really but okay

* Add and use ToJson() helpers

* Misc

* Misc
2024-02-21 03:09:36 +01:00
ArchiBot
3968130e15 Automatic translations update 2024-02-21 02:04:51 +00:00
ArchiBot
dd488a1c9c Automatic translations update 2024-02-20 02:03:29 +00:00
renovate[bot]
de3c332803 chore(deps): update asf-ui digest to 0e9cf35 2024-02-19 22:19:08 +00:00
renovate[bot]
684b7b6e28 chore(deps): update asf-ui digest to 7b31664 2024-02-19 16:19:48 +00:00
ArchiBot
d36f16e205 Automatic translations update 2024-02-18 02:05:50 +00:00
renovate[bot]
c3ab3d767f chore(deps): update asf-ui digest to 82412dc 2024-02-17 22:55:28 +00:00
renovate[bot]
a790c34976 chore(deps): update dependency markdig.signed to v0.35.0 2024-02-17 06:16:26 +00:00
ArchiBot
be208eab92 Automatic translations update 2024-02-17 02:04:16 +00:00
renovate[bot]
c9598709d6 chore(deps): update asf-ui digest to 6eca08a 2024-02-16 09:31:51 +00:00
ArchiBot
367e7f841c Automatic translations update 2024-02-16 02:05:09 +00:00
renovate[bot]
8c988cfed6 chore(deps): update asf-ui digest to eebc86f 2024-02-15 21:33:19 +00:00
renovate[bot]
5b15535661 chore(deps): update github/codeql-action action to v3.24.3 2024-02-15 14:21:59 +00:00
renovate[bot]
e0c692e0ab chore(deps): update wiki digest to 5ea73d0 2024-02-15 04:18:35 +00:00
Archi
1ddf6b34e2 Misc lang correction 2024-02-15 03:50:27 +01:00
ArchiBot
8476c8c221 Automatic translations update 2024-02-14 02:04:50 +00:00
renovate[bot]
24ec938565 chore(deps): update mstest monorepo to v3.2.1 2024-02-13 22:23:04 +00:00
renovate[bot]
0dbfba275e chore(deps): update asf-ui digest to 661a7d1 2024-02-13 19:08:50 +00:00
renovate[bot]
55c5c70b52 chore(deps): update github/codeql-action action to v3.24.1 2024-02-13 15:20:35 +00:00
renovate[bot]
17aa8297da chore(deps): update crowdin/github-action action to v1.19.0 2024-02-13 10:47:17 +00:00
ArchiBot
b0aa2a9104 Automatic translations update 2024-02-13 02:04:51 +00:00
Archi
898c402dfc Misc 2024-02-12 19:20:53 +01:00
Archi
9258819c84 Misc 2024-02-12 15:24:41 +01:00
ArchiBot
b5db0b511c Automatic translations update 2024-02-12 02:05:33 +00:00
renovate[bot]
7c6804449c chore(deps): update wiki digest to e004808 2024-02-11 21:50:56 +00:00
ArchiBot
ff28e2bf8f Automatic translations update 2024-02-11 02:06:02 +00:00
Archi
3510cd1be0 Bump 2024-02-10 18:31:26 +01:00
Archi
5320e8d9cc Misc refactor after #3142 2024-02-10 18:03:32 +01:00
LRFLEW
6ab9e2958d Use FixedTimeEquals for IPC Password testing (#3142) 2024-02-10 17:42:45 +01:00
ArchiBot
e47f286bda Automatic translations update 2024-02-10 02:03:17 +00:00
ArchiBot
84b1599ca6 Automatic translations update 2024-02-09 02:04:10 +00:00
Archi
c5396a8ec8 Update publish.yml 2024-02-08 12:43:42 +01:00
Archi
9a9f18184b Misc 2024-02-08 12:37:50 +01:00
Archi
10d97e16e3 Closes #3140 2024-02-08 12:31:43 +01:00
renovate[bot]
5ece500396 chore(deps): update asf-ui digest to 7406f71 2024-02-08 04:42:12 +00:00
ArchiBot
1a311513ca Automatic translations update 2024-02-08 02:04:11 +00:00
renovate[bot]
6e0e4835d1 chore(deps): update ncipollo/release-action action to v1.14.0 2024-02-07 16:15:35 +00:00
renovate[bot]
ae4a784c3a chore(deps): update asf-ui digest to 558b879 2024-02-07 13:01:40 +00:00
renovate[bot]
287be65e7f chore(deps): update crowdin/github-action action to v1.18.0 2024-02-07 10:34:04 +00:00
renovate[bot]
476653a6cc chore(deps): update actions/setup-node action to v4.0.2 2024-02-07 07:24:21 +00:00
renovate[bot]
407496efd6 chore(deps): update dependency microsoft.net.test.sdk to v17.9.0 2024-02-07 04:18:59 +00:00
ArchiBot
9995b807f9 Automatic translations update 2024-02-07 02:04:09 +00:00
Archi
a6f4692b75 Update TrimmerRoots.xml 2024-02-07 00:16:45 +01:00
Archi
024b7ff824 Bump 2024-02-07 00:16:11 +01:00
Archi
68e46096ad Closes #3137 2024-02-07 00:15:50 +01:00
renovate[bot]
d9f5f60854 chore(deps): update wiki digest to 8f35971 2024-02-06 19:30:47 +00:00
Archi
82ccd4ddce Use different text for private apps 2024-02-06 20:08:21 +01:00
renovate[bot]
5f69b337a6 chore(deps): update actions/upload-artifact action to v4.3.1 2024-02-06 13:05:46 +00:00
Archi
dbbb6802d4 Misc 2024-02-06 12:16:16 +01:00
renovate[bot]
459cb44ff4 chore(deps): update actions/download-artifact action to v4.1.2 2024-02-06 07:31:32 +00:00
renovate[bot]
c1ebc813d5 chore(deps): update asf-ui digest to 630dbb8 2024-02-06 03:42:11 +00:00
ArchiBot
948c42055b Automatic translations update 2024-02-06 02:04:37 +00:00
Archi
06d049d882 Bump 2024-02-06 02:15:36 +01:00
Archi
04f5e91e92 Closes #3109 2024-02-06 02:14:54 +01:00
renovate[bot]
02a479ba13 chore(deps): update wiki digest to 024c6b4 2024-02-06 00:19:11 +00:00
Archi
01b99d20f6 Try to bulletproof against #3119 a bit 2024-02-05 20:49:34 +01:00
Archi
9c6cd7f692 Refactor FarmingResetSemaphore into FarmingResetEvent 2024-02-05 20:41:24 +01:00
Archi
7899829dc7 Refactor docker containers to use /asf
In order to keep compatibility with existing containers, we'll use the same paths for user-related overrides, that is, /app/config, /app/logs or /app/plugins. Instead, the only thing we'll do is moving ASF away from /app to new /asf directory, which will hopefully limit amount of screwups that users are doing within existing /app directory.

Also while at it, add symlink for a bit better integration.
2024-02-05 16:26:54 +01:00
ArchiBot
d0693d362a Automatic translations update 2024-02-05 02:07:18 +00:00
Archi
227066f355 Bump 2024-02-04 22:31:10 +01:00
Archi
348c43b259 Skip spamming ASFB with requests from unlicensed users
Check license prior to fetching inventory and sending data to ASFB, will also limit traffic on Steam side.
2024-02-04 22:28:59 +01:00
ArchiBot
a23b7e1594 Automatic translations update 2024-02-04 02:06:40 +00:00
Archi
1c7952f8dd Bump 2024-02-03 22:02:57 +01:00
Archi
f0ef4c6ba6 Implement basic crash protection
- On start, we create/load crash file, if previous startup was less than 5 minutes ago, we also increase the counter
- If counter reaches 5, we abort the process, that is, freeze the process by not loading anything other than auto-updates
- In order for user to recover from above, he needs to manually remove ASF.crash file
- If process exits normally without reaching counter of 5 yet, we remove crash file (reset the counter), normal exit includes SIGTERM, SIGINT, clicking [X], !exit, !restart, and anything else that allows ASF to gracefully quit
- If process exits abnormally, that includes SIGKILL, unhandled exceptions, as well as power outages and anything that prevents ASF from graceful quit, we keep crash file around
- Update procedure, as an exception, allows crash file removal even with counter of 5. This should allow crash file recovery for people that crashed before, without a need of manual removal.
2024-02-03 21:18:47 +01:00
renovate[bot]
eb71b640c5 chore(deps): update dependency microsoft.identitymodel.jsonwebtokens to v7.3.1 2024-02-03 08:28:40 +00:00
renovate[bot]
6b7a0ff1ce chore(deps): update github/codeql-action action to v3.24.0 2024-02-02 19:35:45 +00:00
Archi
d08740b6d7 Schedule refresh of licenses for STD plugin with delay
This addresses two things:
- It allows for better load-balancing, as STD refresh can be postponed for a short while after bot logs in - it has more important matters to handle right away, and STD is optional/supportive plugin.
- It helps @xPaw sleep better at night working around fools with their ASFs crashing thirty times per second due to third-party plugins.
2024-02-02 13:17:55 +01:00
ArchiBot
70e3649e60 Automatic translations update 2024-02-02 02:04:28 +00:00
renovate[bot]
24d79f9b20 chore(deps): update asf-ui digest to 6ca9093 2024-02-01 22:02:19 +00:00
Archi
43c2ae6746 Remove obsolete stuff 2024-02-01 14:27:56 +01:00
Archi
4bd2a3ec7f Bump 2024-02-01 14:22:53 +01:00
renovate[bot]
a90b375a72 chore(deps): update asf-ui digest to e3fd680 2024-02-01 03:36:01 +00:00
renovate[bot]
9f1e562a19 chore(deps): update asf-ui digest to 7b4a361 2024-01-31 18:14:11 +00:00
renovate[bot]
4edfcff2e0 chore(deps): update asf-ui digest to 9607b07 2024-01-31 14:06:00 +00:00
renovate[bot]
d4b48ab235 chore(deps): update crowdin/github-action action to v1.17.0 2024-01-31 08:04:58 +00:00
ArchiBot
f1e5c31110 Automatic translations update 2024-01-31 02:04:51 +00:00
renovate[bot]
32c4522b47 chore(deps): update asf-ui digest to b207bca 2024-01-30 23:15:29 +00:00
Archi
fc760e1a84 Misc 2024-01-30 14:30:52 +01:00
Archi
2a92bf4dec Bump 2024-01-30 13:51:18 +01:00
Archi
716b253a04 Move from System.IdentityModel.Tokens.Jwt to Microsoft.IdentityModel.JsonWebTokens
> As of IdentityModel 7x, this is a legacy tool that should be replaced with Microsoft.IdentityModel.JsonWebTokens.

> This is a newer, faster version of System.IdentityModel.Tokens.Jwt that has additional functionality
2024-01-30 13:26:32 +01:00
renovate[bot]
0384365315 chore(deps): update dependency system.identitymodel.tokens.jwt to v7.3.0 2024-01-30 06:46:07 +00:00
renovate[bot]
45dc910e01 chore(deps): update asf-ui digest to b341e7f 2024-01-30 04:38:00 +00:00
ArchiBot
f7e57e7d39 Automatic translations update 2024-01-30 02:04:51 +00:00
Archi
ace4151bbc Remove dead code 2024-01-29 19:05:14 +01:00
Archi
088c3a35ed Bump 2024-01-29 18:57:54 +01:00
Archi
608bece8dc Misc 2024-01-29 18:49:29 +01:00
Archi
119caebfa8 Deprecate CachedAccessToken, move to Bot.AccessToken instead
Thanks to @xPaw findings, it seems that access token we get on logon can be used for all functionality we require in ASF. This means we no longer need to fetch the one from points shop in AWH and can safely remove that.

Since access token in AWH is public API, this commit:
- Makes Bot.AccessToken public API.
- Deprecates ArchiWebHandler.CachedAccessToken with intention of removal in the next version. Until then, it resolves to Bot.AccessToken internally so all plugins can keep working during transition period.
- Deprecates Utilities.ReadJwtToken(), probably nobody else than me used it, just switch over to Utilities.TryReadJwtToken(), much better design.
- Reverts ArchiCacheable parts back to stable API, as we no longer need the breaking change done in #3133
2024-01-29 18:42:21 +01:00
Archi
2e0771b8d9 Closes #3133
After investigation, it turns out that the token actually has correct scope (THANK GOD), it's the fact that Valve started issuing those on much shorter notice than our cache.

Up until now, we played it smartly by assuming cached access token should be valid for at least 6 hours, since every time we visited the page, we got a new token that was valid for 24h since issuing. This however is no longer the case and Valve seems to recycle the same token for every request now, probably until we get close to its expiration. This also means that with unlucky timing, we might be trying to use access token that has expired already even for up to 6 more hours, which is unwanted and causes all kind of issues, with 403 in trade offers being one of them.

I could make stupid solution and cache token for shorter, e.g. 1 minute, but instead I did 200 IQ move and rewrote the functionality in a way to actually parse that token, its validity, and set the cache to be valid for a brief moment before the token actually expires. This way, we're not only more efficient (we can cache the token even for 24h if needed), but we're also invalidating it as soon as it goes out of the scope.
2024-01-29 17:53:46 +01:00
Archi
a08080a2ce Do not treat NU190x as error
Selected NU190x warnings can happen retroactively when given library is found with vulnerabilities. While this is important for development and for building, we should not retroactively cause selected git tags fail to build purely because a package we references was found to be vulnerable - warning during build is sufficient.

Resolves https://aur.archlinux.org/packages/asf and other sources trying to build older tag such as 5.5.1.4 as of today. Will apply from future release naturally.
2024-01-28 16:05:10 +01:00
renovate[bot]
d4bcdfde3e chore(deps): update asf-ui digest to abebbe3 2024-01-28 03:59:05 +00:00
ArchiBot
249ebfb590 Automatic translations update 2024-01-28 02:06:03 +00:00
ArchiBot
56fc50e5ad Automatic translations update 2024-01-27 02:03:38 +00:00
renovate[bot]
5d8db36753 chore(deps): update github/codeql-action action to v3.23.2 2024-01-26 17:09:43 +00:00
renovate[bot]
54f493467e chore(deps): update asf-ui digest to 2111058 2024-01-26 02:15:52 +00:00
ArchiBot
7ed39db953 Automatic translations update 2024-01-26 02:05:48 +00:00
Archi
cc28d7520e Misc 2024-01-25 23:34:58 +01:00
renovate[bot]
109b307d0f chore(deps): update peter-evans/dockerhub-description action to v4 (#3132)
Co-authored-by: renovate[bot] <29139614+renovate[bot]@users.noreply.github.com>
2024-01-25 22:11:27 +01:00
renovate[bot]
178ecc2e4a chore(deps): update asf-ui digest to 89945a1 2024-01-25 20:38:29 +00:00
renovate[bot]
ddfa7220d8 chore(deps): update mstest monorepo to v3.2.0 2024-01-25 06:39:34 +00:00
ArchiBot
812523baef Automatic translations update 2024-01-25 02:10:26 +00:00
renovate[bot]
c5fd423a78 chore(deps): update wiki digest to 1324210 2024-01-24 19:28:33 +00:00
Archi
0b6c308d2e Bump 2024-01-24 16:29:27 +01:00
renovate[bot]
d6ef5e5404 chore(deps): update actions/upload-artifact action to v4.3.0 2024-01-24 13:06:56 +00:00
Archi
9c304b8965 Actually make --ignore-unsupported-environment ignore the issue 2024-01-24 12:45:46 +01:00
Archi
05c5a7fc30 Closes #3128 2024-01-24 12:43:36 +01:00
renovate[bot]
2a2d4f09f1 chore(deps): update asf-ui digest to 97c6b06 2024-01-24 04:57:59 +00:00
ArchiBot
ce5cd7bc8f Automatic translations update 2024-01-24 02:09:10 +00:00
renovate[bot]
a072a7b7d6 chore(deps): update wiki digest to d8d3cd4 2024-01-23 22:59:22 +00:00
Archi
8a52f4fbbb Closes #3126
Smartly putting it in the middle making breaking change, since nobody managed to reference this public API yet! \o/
2024-01-23 23:01:22 +01:00
Archi
ba07405d9a Refactor selected boolean bot config properties
All of them are common enough to be contained into a single flags property, this will vastly improve readability of the bot config, among being ready to add more properties in the future without polluting it.

Also hooray for 6 bytes less of memory usage of each bot, glorious.
2024-01-23 22:49:33 +01:00
Archi
6239457f01 Closes #3127 2024-01-23 21:23:06 +01:00
renovate[bot]
584fe4bd37 chore(deps): update wiki digest to 01a1155 2024-01-23 06:32:47 +00:00
renovate[bot]
1f4fa2ed90 chore(deps): update asf-ui digest to 80c331a 2024-01-23 04:45:51 +00:00
renovate[bot]
d24731999a chore(deps): update jetbrains/qodana-action action to v2023.3.1 2024-01-22 23:04:28 +00:00
ArchiBot
1a3e82a1b0 Automatic translations update 2024-01-22 02:11:05 +00:00
ArchiBot
f45b10f2ff Automatic translations update 2024-01-21 02:11:05 +00:00
ArchiBot
2097fea6a0 Automatic translations update 2024-01-20 02:07:31 +00:00
renovate[bot]
c4bdb39c6d chore(deps): update crowdin/github-action action to v1.16.1 2024-01-19 15:58:09 +00:00
renovate[bot]
2f2b411293 chore(deps): update asf-ui digest to 9105e9b 2024-01-19 11:09:53 +00:00
renovate[bot]
860b979afb chore(deps): update actions/upload-artifact action to v4.2.0 2024-01-19 00:18:38 +00:00
renovate[bot]
401d3f65f5 chore(deps): update asf-ui digest to e77a557 2024-01-18 22:35:27 +00:00
renovate[bot]
051cf043f3 chore(deps): update asf-ui digest to d8b90fb 2024-01-18 07:09:47 +00:00
renovate[bot]
4ebb4cfd9e chore(deps): update github/codeql-action action to v3.23.1 2024-01-18 02:20:11 +00:00
ArchiBot
d58a2d2717 Automatic translations update 2024-01-18 02:08:26 +00:00
renovate[bot]
51b764a39f chore(deps): update asf-ui digest to 38f6759 2024-01-17 20:20:07 +00:00
renovate[bot]
0f94a05a69 chore(deps): update asf-ui digest to cd3a947 2024-01-17 06:54:52 +00:00
ArchiBot
16fd3c067f Automatic translations update 2024-01-17 02:08:36 +00:00
ArchiBot
e13881763c Automatic translations update 2024-01-16 02:08:17 +00:00
renovate[bot]
90241c6076 chore(deps): update asf-ui digest to 344cfcf 2024-01-15 04:06:46 +00:00
ArchiBot
d020a97209 Automatic translations update 2024-01-15 02:09:55 +00:00
renovate[bot]
d9ceea448f chore(deps): update asf-ui digest to 255221f 2024-01-14 11:09:25 +00:00
renovate[bot]
ec01846653 chore(deps): update asf-ui digest to 9919655 2024-01-13 10:20:06 +00:00
renovate[bot]
7d3c0a9d13 chore(deps): update asf-ui digest to e1b0524 2024-01-13 05:36:41 +00:00
ArchiBot
de88e3072b Automatic translations update 2024-01-13 02:07:46 +00:00
renovate[bot]
5e2ad8eb19 chore(deps): update actions/upload-artifact action to v4.1.0 2024-01-12 18:29:45 +00:00
renovate[bot]
127107a96c chore(deps): update asf-ui digest to fa12667 2024-01-12 07:29:26 +00:00
Archi
1587c6facb Bump 2024-01-11 16:51:05 +01:00
Archi
042fadca28 Merge branch 'main' of https://github.com/JustArchiNET/ArchiSteamFarm 2024-01-11 16:46:48 +01:00
Archi
4a9e6f6cc6 Deprioritize bots with 1-game inventory
Those are usually stash accounts, and while we still want to match them, we can leave them only as a last resort if no other bots are available.

This decreases chance of hitting a bot that was just recently turned off or had its items traded away, as what usually happens with such accounts.
2024-01-11 16:46:45 +01:00
renovate[bot]
b7ac24eb7b chore(deps): update asf-ui digest to 392b585 2024-01-11 06:54:53 +00:00
renovate[bot]
c78d26a701 chore(deps): update dependency system.identitymodel.tokens.jwt to v7.2.0 2024-01-11 00:47:47 +00:00
renovate[bot]
53614661c1 chore(deps): update asf-ui digest to cd30e8d 2024-01-10 21:09:00 +00:00
renovate[bot]
ea8c300a1a chore(deps): update actions/download-artifact action to v4.1.1 2024-01-10 19:29:00 +00:00
renovate[bot]
bb91bf3918 chore(deps): update dependency system.identitymodel.tokens.jwt to v7.1.2 2024-01-09 18:38:55 +00:00
renovate[bot]
b9f72c293d chore(deps): update asf-ui digest to 701562c 2024-01-09 03:29:49 +00:00
renovate[bot]
7a14a394c2 chore(deps): update github/codeql-action action to v3.23.0 (#3122)
Co-authored-by: renovate[bot] <29139614+renovate[bot]@users.noreply.github.com>
2024-01-08 18:31:49 +01:00
Sebastian Göls
dbf7148fbe Happy new year! (#3121)
Co-authored-by: Sebastian Göls <sebastian.goels@salvagninigroup.com>
2024-01-08 11:33:28 +01:00
ArchiBot
59d51d1b15 Automatic translations update 2024-01-08 02:08:23 +00:00
renovate[bot]
acff4602cd chore(deps): update asf-ui digest to 8a350cd 2024-01-07 03:34:22 +00:00
ArchiBot
44f135eb14 Automatic translations update 2024-01-07 02:10:04 +00:00
renovate[bot]
f4945c024e chore(deps): update asf-ui digest to f30f6ea 2024-01-06 04:22:52 +00:00
ArchiBot
a329e2a3da Automatic translations update 2024-01-06 02:06:55 +00:00
renovate[bot]
608edf2569 chore(deps): update asf-ui digest to e2a9bdb 2024-01-05 04:04:42 +00:00
ArchiBot
f203e02a45 Automatic translations update 2024-01-05 02:07:53 +00:00
renovate[bot]
bdcc00af1f chore(deps): update asf-ui digest to ede4734 2024-01-04 21:04:35 +00:00
renovate[bot]
21d004fb26 chore(deps): update crowdin/github-action action to v1.16.0 2024-01-04 13:47:19 +00:00
renovate[bot]
d4ae307676 chore(deps): update asf-ui digest to 6ce634f 2024-01-04 04:05:08 +00:00
ArchiBot
0a9993e85a Automatic translations update 2024-01-04 02:07:12 +00:00
Archi
1f2269dcf2 Misc code syntax 2024-01-03 15:06:08 +01:00
Archi
bb73916af0 Misc optimizations 2024-01-03 14:57:49 +01:00
Archi
12c4b7e924 Apply frozen collections optimizations 2024-01-03 13:46:54 +01:00
renovate[bot]
c6b78b118c chore(deps): update asf-ui digest to 8a2b86b 2024-01-03 07:37:18 +00:00
Archi
aaa6b6674a Bump 2024-01-03 00:34:34 +01:00
Archi
be2e173404 Misc followup 2024-01-03 00:34:12 +01:00
Archi
bfb189d55b Bump 2024-01-03 00:29:41 +01:00
Archi
3d503ed5ee Fix invalid heartbeats from inactive STM accounts
It was possible before if the inventory state was the same as previously announced, even if server purged the info long time ago. Also, add required logic for recovery if that happens regardless.
2024-01-03 00:23:27 +01:00
Archi
ab01733860 Bump 2024-01-02 01:21:00 +01:00
Archi
dd0949b58d Fix enum pointer failures in swagger schema 2024-01-02 01:19:28 +01:00
Archi
d825f74489 Bump 2024-01-01 23:25:50 +01:00
Archi
7f1ecdd585 Misc 2024-01-01 23:22:19 +01:00
Archi
01b2e205be Make std command return before refresh finishes 2024-01-01 23:16:52 +01:00
Archi
d398e84f25 Misc 2024-01-01 23:00:58 +01:00
Archi
ac427ed1ec Misc match improvements 2024-01-01 22:58:54 +01:00
ArchiBot
0118ccb614 Automatic translations update 2023-12-31 02:08:18 +00:00
renovate[bot]
697e059b66 chore(deps): update asf-ui digest to d9c38ab 2023-12-30 04:15:17 +00:00
renovate[bot]
45539018f5 chore(deps): update dependency nlog.web.aspnetcore to v5.3.8 2023-12-29 22:50:02 +00:00
renovate[bot]
1ebf2b6272 chore(deps): update asf-ui digest to 99254ec 2023-12-29 19:06:24 +00:00
Archi
800dae280a Bump 2023-12-29 13:24:44 +01:00
Archi
bccdf269f0 Closes #3115 2023-12-29 13:23:38 +01:00
renovate[bot]
757072cb01 chore(deps): update asf-ui digest to e52146a 2023-12-29 03:25:23 +00:00
renovate[bot]
b601d31d5c chore(deps): update asf-ui digest to 43ce08a 2023-12-28 18:49:37 +00:00
renovate[bot]
86ae501ce5 chore(deps): update asf-ui digest to bb4c28c 2023-12-27 04:47:07 +00:00
ArchiBot
c22e5c146f Automatic translations update 2023-12-27 02:06:17 +00:00
renovate[bot]
4a710b4ffe chore(deps): update crazy-max/ghaction-import-gpg action to v6.1.0 2023-12-26 20:02:14 +00:00
renovate[bot]
f6ad3747f4 chore(deps): update asf-ui digest to 3eb41f0 2023-12-26 04:04:41 +00:00
ArchiBot
ec205bb7a2 Automatic translations update 2023-12-26 02:06:22 +00:00
renovate[bot]
464edddacf chore(deps): update asf-ui digest to 2e91573 2023-12-25 04:12:10 +00:00
ArchiBot
e6c6bce8a7 Automatic translations update 2023-12-25 02:07:40 +00:00
renovate[bot]
6a413b4d29 chore(deps): update asf-ui digest to 2dbdfaa 2023-12-24 19:43:31 +00:00
ArchiBot
4f30e2e3c7 Automatic translations update 2023-12-24 02:08:02 +00:00
Archi
2bef94e3b4 Misc 2023-12-23 23:37:29 +01:00
Archi
cf94c417d2 Misc 2023-12-23 23:16:44 +01:00
ArchiBot
e82100308c Automatic translations update 2023-12-23 02:05:36 +00:00
renovate[bot]
ada67a0f97 chore(deps): update github/codeql-action action to v3.22.12 2023-12-22 06:50:53 +00:00
renovate[bot]
1bd20f7144 chore(deps): update asf-ui digest to 88a332c 2023-12-22 04:51:36 +00:00
ArchiBot
9b295ad85e Automatic translations update 2023-12-22 02:06:52 +00:00
Archi
d1953215e8 Bump 2023-12-22 00:21:25 +01:00
Archi
e480aca8b2 Use inventories items deduplication logic aligned with ASFB 2023-12-22 00:18:52 +01:00
Archi
2befe20f76 Use set parts also as inventories request optimization 2023-12-21 23:46:42 +01:00
ArchiBot
c16485ad0b Automatic translations update 2023-12-21 02:07:13 +00:00
Archi
f036e99450 Misc
Specifying target framework should no longer be needed, as we have only one left
2023-12-20 18:46:19 +01:00
renovate[bot]
2804a36920 chore(deps): update asf-ui digest to 295cb26 2023-12-20 04:08:32 +00:00
ArchiBot
30e62813c7 Automatic translations update 2023-12-20 01:57:07 +00:00
renovate[bot]
621ce390c2 chore(deps): update asf-ui digest to 53e75ab 2023-12-19 23:06:09 +00:00
renovate[bot]
8d40423d9d chore(deps): update asf-ui digest to 71014eb 2023-12-19 15:49:29 +00:00
renovate[bot]
1cf8959b92 chore(deps): update actions/download-artifact action to v4.1.0 2023-12-19 04:26:50 +00:00
ArchiBot
56aafe3374 Automatic translations update 2023-12-19 02:07:52 +00:00
renovate[bot]
5570bd2999 chore(deps): update actions/setup-node action to v4.0.1 2023-12-18 14:02:50 +00:00
ArchiBot
9bec394436 Automatic translations update 2023-12-18 02:08:05 +00:00
ArchiBot
3ae1a7ccfd Automatic translations update 2023-12-17 02:08:56 +00:00
renovate[bot]
e0b1c4c16f chore(deps): update asf-ui digest to 68c799a 2023-12-16 19:31:03 +00:00
Archi
eb5bc560a4 Misc 2023-12-16 14:33:32 +01:00
Archi
f9309b7c54 Bump 2023-12-16 14:28:13 +01:00
renovate[bot]
3c2a154b39 chore(deps): update asf-ui digest to b924e3b 2023-12-16 07:42:41 +00:00
ArchiBot
23d07eb43e Automatic translations update 2023-12-16 02:06:58 +00:00
Archi
20af0edd4d Misc 2023-12-15 14:22:22 +01:00
Archi
4b29daabd4 Fix possible NRE 2023-12-15 14:20:58 +01:00
renovate[bot]
a60513e998 chore(deps): update asf-ui digest to 531e8ec 2023-12-15 03:03:17 +00:00
ArchiBot
188b96b951 Automatic translations update 2023-12-15 02:08:24 +00:00
renovate[bot]
b8e9dca6d3 chore(deps): update dependency markdig.signed to v0.34.0 2023-12-14 21:15:35 +00:00
Archi
157537c6ec Bump 2023-12-14 22:15:07 +01:00
renovate[bot]
a363b92075 chore(deps): update actions/download-artifact action to v4 (#3099)
Co-authored-by: renovate[bot] <29139614+renovate[bot]@users.noreply.github.com>
2023-12-14 21:44:05 +01:00
renovate[bot]
f993d3d365 chore(deps): update actions/upload-artifact action to v4 (#3100)
Co-authored-by: renovate[bot] <29139614+renovate[bot]@users.noreply.github.com>
2023-12-14 21:43:56 +01:00
Jack Nolddor
3f4520edf3 chore: blacklist Winter Sale 2023 appid (#3098) 2023-12-14 21:09:56 +01:00
Archi
6e7041d8c5 Fix possible unhandled exception crash
We should throw ONLY when caller asked us to cancel, not when httpclient's timeout is reached.

Thanks @nolddor
2023-12-14 21:07:48 +01:00
Archi
e6cf5971a6 Update ArchiSteamFarm.sln.DotSettings 2023-12-14 14:22:53 +01:00
Archi
845af42080 Update qodana.yaml 2023-12-14 14:18:16 +01:00
Archi
c74481590b Update qodana.yaml 2023-12-14 14:10:14 +01:00
Archi
0ac5447198 Update qodana.yaml 2023-12-14 14:03:19 +01:00
ArchiBot
e0428f8a91 Automatic translations update 2023-12-14 02:07:39 +00:00
renovate[bot]
cc0d2cb1d4 Update wiki digest to e1c80a5 2023-12-13 23:16:06 +00:00
Archi
a0769eaf9a Bump 2023-12-14 00:15:37 +01:00
renovate[bot]
dc35545043 Update github/codeql-action action to v3 (#3097)
Co-authored-by: renovate[bot] <29139614+renovate[bot]@users.noreply.github.com>
2023-12-13 18:15:41 +01:00
Archi
890709429c Misc 2023-12-13 10:02:19 +01:00
Archi
6f6a561b9e Update code-quality.yml 2023-12-13 09:46:20 +01:00
ArchiBot
91d314c861 Automatic translations update 2023-12-13 02:08:27 +00:00
renovate[bot]
8abae9d4be Update github/codeql-action action to v2.22.10 2023-12-12 18:36:05 +00:00
Archi
26a390760e Merge branch 'main' of https://github.com/JustArchiNET/ArchiSteamFarm 2023-12-12 14:34:54 +01:00
Archi
87933a2c92 Update ArchiSteamFarm.sln.DotSettings 2023-12-12 14:34:50 +01:00
ArchiBot
1f843bb5d6 Automatic translations update 2023-12-12 02:08:22 +00:00
renovate[bot]
e87e78a372 Update ASF-ui digest to f84a296 2023-12-11 23:25:18 +00:00
Archi
91c82302bb Disable stack trace support in trimmed builds 2023-12-12 00:24:59 +01:00
Archi
d5a41dce1d Misc 2023-12-12 00:05:19 +01:00
Archi
40ab1d848c .NET 8 code enhancements 2023-12-11 23:55:13 +01:00
renovate[bot]
cc3a0a4144 Update JetBrains/qodana-action action to v2023.3.0 2023-12-11 16:31:06 +00:00
renovate[bot]
5448403f43 Update wiki digest to 15af6e4 2023-12-11 13:19:51 +00:00
Archi
636dd139c2 Misc 2023-12-11 11:42:19 +01:00
Archi
e7ad69be26 Closes #3093 2023-12-11 11:38:37 +01:00
ArchiBot
2f56b6dc3a Automatic translations update 2023-12-11 02:08:21 +00:00
renovate[bot]
ba7073df98 Update github/codeql-action action to v2.22.9 2023-12-10 12:22:37 +00:00
renovate[bot]
457bf6dfbb Update dependency NLog.Web.AspNetCore to v5.3.7 2023-12-10 11:22:34 +00:00
renovate[bot]
1e6279e1ca Update ASF-ui digest to 44cbd70 2023-12-10 08:40:06 +00:00
ArchiBot
6e455d0eba Automatic translations update 2023-12-09 02:06:46 +00:00
ArchiBot
9c9a74b448 Automatic translations update 2023-12-08 02:08:17 +00:00
ArchiBot
b7790961fc Automatic translations update 2023-12-07 02:08:13 +00:00
renovate[bot]
5ecc050b12 Update wiki digest to d849fb2 2023-12-06 12:31:12 +00:00
Sebastian Göls
c9819bde7f Add duplicate-check to issue templates (#3092)
* Update Bug-report.yml

* Update Enhancement-idea.yml

* Update Enhancement-idea.yml

* Update Bug-report.yml
2023-12-06 13:30:54 +01:00
ArchiBot
12660449ed Automatic translations update 2023-12-06 02:08:19 +00:00
renovate[bot]
7237e0affc Update wiki digest to 05c3655 2023-12-05 13:17:54 +00:00
ArchiBot
85bb68825b Automatic translations update 2023-12-05 02:08:13 +00:00
Archi
48b8a28c7a Bump 2023-12-05 01:55:23 +01:00
Archi
b16a459ab8 Misc 2023-12-05 01:53:14 +01:00
Archi
da2fd37aa1 Make STD work also in on-demand mode 2023-12-05 01:43:55 +01:00
Archi
8d1d508fe5 Use ASF's global database for STD package access tokens 2023-12-05 00:05:16 +01:00
Archi
92858de9e2 Misc 2023-12-05 00:04:38 +01:00
Archi
a7b1e01161 Revert "Disable server-side functionality in custom ASF builds"
This reverts commit 42ceb6d413.
2023-12-04 23:06:11 +01:00
renovate[bot]
e14d00b760 Update actions/setup-dotnet action to v4 (#3089)
Co-authored-by: renovate[bot] <29139614+renovate[bot]@users.noreply.github.com>
2023-12-04 21:04:53 +01:00
ArchiBot
d737201ab5 Automatic translations update 2023-12-04 02:08:17 +00:00
Archi
5fcd5d51f9 Bump 2023-12-04 00:18:34 +01:00
Archi
fa74d98879 Kill API key leftovers 2023-12-03 21:51:32 +01:00
Archi
27f965d4af Kill API keys entirely
Economy bans we can handle ourselves server-side
2023-12-03 21:49:05 +01:00
Archi
ddd34d4a45 Bump 2023-12-03 17:01:55 +01:00
Archi
a3aa93fce8 Fix diff announcement with no items added/changed 2023-12-03 16:11:38 +01:00
Archi
0095d458e7 Handle new no requirements for API key 2023-12-03 14:08:24 +01:00
Archi
def3e26c92 Closes #3084 2023-12-03 13:48:51 +01:00
ArchiBot
10eb226722 Automatic translations update 2023-12-03 02:08:31 +00:00
renovate[bot]
3738ebed21 Update wiki digest to a9c7d7d 2023-12-02 20:06:57 +00:00
Archi
eff60bf307 Implement background announcements for ASF STM
This will be used exclusively by users with extraordinary large inventories, or if ASF backend will just be slower than usual.
2023-12-02 19:36:34 +01:00
Archi
b940af6e83 Misc 2023-12-02 18:49:32 +01:00
Archi
42ceb6d413 Disable server-side functionality in custom ASF builds 2023-12-02 18:37:40 +01:00
Archi
eef66cebf3 Add session data for SDA compatibility 2023-12-02 17:00:50 +01:00
Archi
fac8cb2c9a Misc 2023-12-02 15:16:26 +01:00
Archi
9ce195b4ec Use more correct way for resolving #3087 2023-12-02 15:14:19 +01:00
Archi
c4bcb679f9 Closes #3087 2023-12-02 15:08:59 +01:00
Archi
0d4871ca02 Fix delayed password input crash 2023-12-02 13:15:53 +01:00
renovate[bot]
8397a69130 Update ASF-ui digest to 62a5d46 2023-12-02 03:45:07 +00:00
ArchiBot
8515d72048 Automatic translations update 2023-12-02 02:06:10 +00:00
renovate[bot]
32af0abb6c Update ASF-ui digest to 7da00f0 2023-12-01 22:11:20 +00:00
renovate[bot]
e05f79b951 Update JetBrains/qodana-action action to v2023.2.9 2023-12-01 16:18:49 +00:00
renovate[bot]
9699686da5 Update ASF-ui digest to fe06a7c 2023-11-30 18:28:36 +00:00
ArchiBot
2052020d3d Automatic translations update 2023-11-30 02:08:00 +00:00
Archi
a894b7096a Bump 2023-11-29 20:36:24 +01:00
Archi
52b9d2d662 Revert market_fee_app
There are occurances where this is definitely wrong to use
2023-11-29 20:35:39 +01:00
Archi
f3cc0b938a Bump 2023-11-29 20:08:11 +01:00
Archi
80c362d5ed Fix regression in trades received now
Also improve that code while I'm at it
2023-11-29 19:52:43 +01:00
Archi
c7546194f8 Add handling of points shop items, and skip them for announcements 2023-11-29 19:17:02 +01:00
renovate[bot]
53993bfd34 Update ASF-ui digest to 3bea7c7 2023-11-29 13:36:45 +00:00
Archi
181bc28462 Bump 2023-11-29 14:36:25 +01:00
Archi
aea9dee4ea Further decrease server load
We can keep inventory checksum before deduplication in the cache. If it's determined to be the same, then our inventory state didn't change, so it also doesn't make much sense to ask server for set parts and announcement.
2023-11-29 14:26:57 +01:00
Archi
a3270e4081 Misc optimization 2023-11-29 13:21:12 +01:00
ArchiBot
ccf191f1ba Automatic translations update 2023-11-29 02:08:48 +00:00
Archi
a76b6fc32f Bump 2023-11-29 00:10:46 +01:00
Łukasz Domeradzki
36ae066c65 Closes #3073 (#3077)
* Initial implementation of announce with diff

* Add missing logic pieces

* Change in logic

* Fix checksums

* Add deduplication logic

* Update SetPart.cs

* Use standalone endpoint for diff

* Use different hashcode impl

* Update AssetForListing.cs

* Misc

* Push all the changes for this to finally work

* Use original index rather than self-calculated

ASFB makes some calculations based on index, it's better for us to have holes rather than hiding skipped items.

* Handle edge case of no assets after deduplication

* Remove dead code

* Address trim warnings

* Misc optimization
2023-11-29 00:08:16 +01:00
ArchiBot
8cf2d1bc94 Automatic translations update 2023-11-28 02:08:22 +00:00
Archi
d4e8182ffc Update Startup.cs 2023-11-27 15:51:21 +01:00
Archi
96239a97f3 Address trim warnings 2023-11-27 15:39:30 +01:00
Archi
70d3ca47d7 Update TypeController.cs 2023-11-27 14:15:33 +01:00
Archi
a59087b574 Resolve some warnings 2023-11-27 13:01:52 +01:00
Archi
306fbef3c2 Update code-quality.yml 2023-11-27 11:12:35 +01:00
Archi
2b7fc937ad Update code-quality.yml 2023-11-27 10:50:36 +01:00
ArchiBot
3c338e05df Automatic translations update 2023-11-27 02:07:55 +00:00
ArchiBot
dcf38c1357 Automatic translations update 2023-11-26 02:08:13 +00:00
renovate[bot]
500499ec19 Update ASF-ui digest to 853672c 2023-11-25 04:14:31 +00:00
ArchiBot
d84c15b26c Automatic translations update 2023-11-25 02:06:13 +00:00
renovate[bot]
9597f21cd7 Update wiki digest to e782280 2023-11-24 13:06:48 +00:00
Archi
fedf477241 Merge branch 'main' of https://github.com/JustArchiNET/ArchiSteamFarm 2023-11-24 10:34:28 +01:00
Archi
2291321173 Handle ASF_PATH first
ASF_CRYPTKEY_FILE might reference relative path, we should evaluate ASF_PATH first due to that.
2023-11-24 10:34:20 +01:00
renovate[bot]
2529ee301e Update ASF-ui digest to 085af69 2023-11-24 03:53:37 +00:00
ArchiBot
ba1313f44f Automatic translations update 2023-11-24 02:06:46 +00:00
renovate[bot]
d640671640 Update github/codeql-action action to v2.22.8 2023-11-23 11:13:08 +00:00
renovate[bot]
f0a54875ed Update ASF-ui digest to eb74516 2023-11-23 03:54:46 +00:00
ArchiBot
acca0a7a52 Automatic translations update 2023-11-23 02:07:40 +00:00
renovate[bot]
fa26f31d95 Update dessant/lock-threads action to v5.0.1 2023-11-22 15:51:44 +00:00
renovate[bot]
2851cffbc5 Update wiki digest to 2b65e86 2023-11-22 14:16:36 +00:00
renovate[bot]
33649f95a8 Update ASF-ui digest to 5a3687d 2023-11-22 11:14:35 +00:00
Archi
d3142d077c Misc 2023-11-22 12:09:35 +01:00
ArchiBot
dda62f6db6 Automatic translations update 2023-11-22 02:08:55 +00:00
renovate[bot]
578cb95b43 Update wiki digest to 904d4b6 2023-11-21 18:56:56 +00:00
ArchiBot
81118633e0 Automatic translations update 2023-11-21 02:09:39 +00:00
ArchiBot
5ab84286dc Automatic translations update 2023-11-20 02:08:10 +00:00
renovate[bot]
b5e33c041a Update ASF-ui digest to 2360415 2023-11-19 18:34:01 +00:00
Archi
f4f73bcadc Apply CI permissions 2023-11-19 19:33:42 +01:00
ArchiBot
4f459e21f2 Automatic translations update 2023-11-19 02:08:56 +00:00
Archi
69352db431 Bump 2023-11-19 02:49:40 +01:00
Archi
120f7e36d6 Further enhancements for #3075 and #3051 2023-11-19 02:41:22 +01:00
Archi
2e9791faa3 Closes #3075 2023-11-19 02:25:47 +01:00
Archi
fe8e125b86 Bump 2023-11-18 22:09:06 +01:00
Archi
16f4dff0c2 CI: Remove --no-restore where not needed
--no-restore seems to cause trimming to not run when it wasn't originally specified when doing build. Originally we were building ASFs in parallel for each variant, so it made sense, now with better CI-powered parallelism, --no-restore makes only sense when publishing plugins, as indeed in those places we're doing stuff in parallel which restore doesn't like.

This should resolve trimming not triggering for OS-specific builds.
2023-11-18 21:24:58 +01:00
renovate[bot]
915693d7fa Update ASF-ui digest to 8b1afc3 2023-11-18 03:48:20 +00:00
ArchiBot
52adac7cab Automatic translations update 2023-11-18 02:07:01 +00:00
renovate[bot]
a066b952d7 Update docker/build-push-action action to v5.1.0 2023-11-17 13:35:49 +00:00
ArchiBot
cb0e2218a6 Automatic translations update 2023-11-17 02:07:52 +00:00
renovate[bot]
f9949967dc Update github/codeql-action action to v2.22.7 2023-11-16 23:04:21 +00:00
renovate[bot]
0bf1b7af91 Update ASF-ui digest to a6af7da 2023-11-16 20:49:32 +00:00
Sebastian Göls
193f0e3c08 Use generic ProducesResponseTypeAttribute instead of typeof(...) (#3074) 2023-11-16 21:49:15 +01:00
renovate[bot]
5cbe11241c Update crowdin/github-action action to v1.15.2 2023-11-16 16:26:01 +00:00
ArchiBot
03fc9cb4be Automatic translations update 2023-11-16 02:08:16 +00:00
renovate[bot]
2ed7cdf98e Update ASF-ui digest to 0b53178 2023-11-15 11:11:26 +00:00
renovate[bot]
305d6a2d17 Update crowdin/github-action action to v1.15.1 2023-11-15 07:02:34 +00:00
renovate[bot]
6f784621ed Update github/codeql-action action to v2.22.6 2023-11-15 03:45:42 +00:00
ArchiBot
83d6d43845 Automatic translations update 2023-11-15 02:07:36 +00:00
Archi
90e9f47899 Add default implementation for IBotsComparer 2023-11-15 00:02:26 +01:00
Archi
185d7adccf Misc 2023-11-14 23:51:28 +01:00
Archi
977f571db6 Closes #3072 2023-11-14 23:50:36 +01:00
Archi
1c22a45cb6 Add win-arm64 as recognized supported platform for issue template 2023-11-14 23:45:54 +01:00
Archi
608229f962 Kill netf leftovers 2023-11-14 22:17:12 +01:00
Archi
3f04144e41 Use cancellation in more places 2023-11-14 21:20:51 +01:00
Archi
ac9d4a7783 Actually make ArchiCacheable catch cancellation
We intend to give the caller best result, operation canceled has no value for him, he can check if cancellation token he provided himself got canceled or not
2023-11-14 21:15:18 +01:00
Archi
adbf0748f8 Closes #3066 2023-11-14 21:10:35 +01:00
Archi
263c77da12 We don't target multiple frameworks anymore 2023-11-14 21:04:40 +01:00
Archi
103c543eea Closes #3067 2023-11-14 20:58:02 +01:00
Archi
0ae03c7cd5 Syntax improvements 2023-11-14 20:21:02 +01:00
Archi
f2ff2f4929 Closes #3060 2023-11-14 20:01:29 +01:00
Łukasz Domeradzki
b34f18497d .NET 8 (#3005)
* Initial .NET 8

* Make it compile in release mode ignoring warnings for now

* First round of improvements

* Second round of improvements

* Third round of improvements

* Use new throws

* Fix .NET Framework, YAY, thanks madness!

Madness devs are awesome

* Misc

* Misc

* AF_NETLINK might be required for some http calls

No clue why

* Fix service files

Doesn't do what it should

* Update CardsFarmer.cs

* New improvements

* Address feedback

* Misc

* Misc

* Misc refactor

* Misc
2023-11-14 19:12:33 +01:00
renovate[bot]
1e04acb904 Update dotnet monorepo to v8 (#3071)
Co-authored-by: renovate[bot] <29139614+renovate[bot]@users.noreply.github.com>
2023-11-14 17:25:06 +01:00
Archi
2b06153fa2 Add additional test case 2023-11-14 16:25:40 +01:00
Archi
e1c364cf7a Fix wrong Bosnian language mapping 2023-11-14 15:38:10 +01:00
renovate[bot]
e281a04450 Update dessant/lock-threads action to v5 (#3070)
* Update dessant/lock-threads action to v5

* Update lock-threads.yml

---------

Co-authored-by: renovate[bot] <29139614+renovate[bot]@users.noreply.github.com>
Co-authored-by: Archi <JustArchi@JustArchi.net>
2023-11-14 10:05:53 +01:00
ArchiBot
b40d55c2e4 Automatic translations update 2023-11-13 02:07:15 +00:00
Archi
3e96f37979 BUMPO 2023-11-12 03:16:07 +01:00
ArchiBot
72703dc61d Automatic translations update 2023-11-12 02:07:51 +00:00
renovate[bot]
4ba2f16907 Update wiki digest to 4b67f91 2023-11-12 00:09:43 +00:00
Archi
d6a7c9a843 Misc 2023-11-11 21:31:37 +01:00
Archi
9a304a3992 Misc code cleanup 2023-11-11 21:30:44 +01:00
tre3p
be4a625dc2 Add ability to send group messages for plugin developers (#3069)
* Add GetClanChatInfo as public API function

* make JoinChatRoomGroup public API. add LeaveChatRoomGroup as public API

* Rename GetClanChatRoomInfo method. Change return type of GetClanChatRoomInfo method
2023-11-11 21:29:57 +01:00
Archi
e44b7d3248 Fix wrong access for version command
FamilySharing is alright, as per the wiki
2023-11-11 14:53:44 +01:00
Archi
fc13f2c488 Handle further linux terminal edge case
We handled a situation where linux terminal is closing STDIN durng interactive console. This handles even further edge case where linux terminal is closing STDIN during user masked input.
2023-11-11 14:37:08 +01:00
renovate[bot]
494b1dfd1b Update ASF-ui digest to c582499 2023-11-10 18:25:41 +00:00
Archi
eb41dace9f Run code quality also in push though 2023-11-10 19:25:24 +01:00
Archi
2b2607cfcd Disable qodana for remote PRs
We don't have a token for them
2023-11-10 19:03:21 +01:00
Archi
bde696124b Misc optimization 2023-11-10 19:02:03 +01:00
renovate[bot]
1f4f50591a Update dependency Microsoft.NET.Test.Sdk to v17.8.0 2023-11-09 23:03:58 +00:00
renovate[bot]
5377598226 Update ASF-ui digest to 3384658 2023-11-09 16:38:19 +00:00
renovate[bot]
050d8dca12 Update ASF-ui digest to 8fb3c49 2023-11-08 19:27:50 +00:00
renovate[bot]
54e31504d5 Update dependency JetBrains.Annotations to v2023.3.0 2023-11-08 00:43:16 +00:00
ArchiBot
d3d8a6ffcb Automatic translations update 2023-11-07 02:06:41 +00:00
renovate[bot]
4518547543 Update dependency SteamKit2 to v2.5.0 2023-11-06 16:04:24 +00:00
ArchiBot
1061676462 Automatic translations update 2023-11-06 02:07:17 +00:00
Archi
1d7794590e Bump 2023-11-05 23:38:29 +01:00
Archi
5d32eb6325 Fix netf as usual 2023-11-05 23:27:45 +01:00
Archi
3a9e9de596 Closes #2980 2023-11-05 23:22:15 +01:00
renovate[bot]
b46e936ac6 Update ASF-ui digest to 8884585 2023-11-05 01:49:14 +00:00
renovate[bot]
fc46c65bdf Update ASF-ui digest to 8651392 2023-11-03 03:46:46 +00:00
ArchiBot
57de1f3c10 Automatic translations update 2023-11-03 02:06:09 +00:00
renovate[bot]
a59c3d8fd2 Update crowdin/github-action action to v1.14.1 2023-11-02 09:48:27 +00:00
ArchiBot
6c774f5980 Automatic translations update 2023-11-02 02:05:47 +00:00
Archi
b126c5fd75 Bump 2023-11-02 01:19:32 +01:00
Archi
c21e4fbdb8 Merge branch 'main' of https://github.com/JustArchiNET/ArchiSteamFarm 2023-11-02 00:43:13 +01:00
Archi
ad4c81ac02 Closes #3058 2023-11-02 00:43:11 +01:00
Leet
17796c3466 Use gender neutral language (#3057) 2023-10-31 18:21:34 +01:00
Archi
09804a5032 Misc 2023-10-31 13:33:40 +01:00
ArchiBot
e4a650c8e0 Automatic translations update 2023-10-31 02:06:01 +00:00
Archi
5490539480 netf brain damage as usual 2023-10-30 22:46:43 +01:00
Archi
2a231982ed Misc 2023-10-30 22:44:07 +01:00
Archi
5219fc8958 Add additional bulletproofing 2023-10-30 22:41:45 +01:00
Archi
2f5fdf3185 Closes #3054 2023-10-30 22:33:06 +01:00
Archi
5a5a6e2074 Closes #2978 2023-10-30 22:17:16 +01:00
renovate[bot]
a1cf8291b4 Update dependency SteamKit2 to v2.5.0-Beta.2 (#3056)
* Update dependency SteamKit2 to v2.5.0-Beta.2

* Fix breaking changes

---------

Co-authored-by: renovate[bot] <29139614+renovate[bot]@users.noreply.github.com>
Co-authored-by: Archi <JustArchi@JustArchi.net>
2023-10-30 22:11:33 +01:00
ArchiBot
1a16589c0a Automatic translations update 2023-10-30 02:06:28 +00:00
renovate[bot]
7372601064 Update wiki digest to ec80079 2023-10-29 13:29:20 +00:00
renovate[bot]
651d0bdb4b Update ASF-ui digest to 4068ece 2023-10-29 04:11:28 +00:00
ArchiBot
25e43d61e6 Automatic translations update 2023-10-29 02:06:37 +00:00
renovate[bot]
dfc3c0eef3 Update wiki digest to 7281ab4 2023-10-28 23:04:27 +00:00
Archi
c20b0c2c5b Bump 2023-10-29 01:04:07 +02:00
Archi
4a57e3a9c1 Merge branch 'main' of https://github.com/JustArchiNET/ArchiSteamFarm 2023-10-29 01:03:45 +02:00
Archi
1cde3afcbf Bump 2023-10-29 01:03:38 +02:00
ArchiBot
b6274958bd Automatic translations update 2023-10-28 02:04:04 +00:00
renovate[bot]
2023103ed6 Update ASF-ui digest to f2eefb1 2023-10-27 16:04:00 +00:00
renovate[bot]
d5cb0baf1f Update github/codeql-action action to v2.22.5 2023-10-27 10:39:05 +00:00
renovate[bot]
3b7a766ce4 Update ASF-ui digest to 7f6181c 2023-10-27 03:55:21 +00:00
ArchiBot
ac8fa21c90 Automatic translations update 2023-10-27 02:05:21 +00:00
renovate[bot]
4abf0388d6 Update ASF-ui digest to f726f34 2023-10-26 06:46:18 +00:00
ArchiBot
82c294bc85 Automatic translations update 2023-10-26 02:05:10 +00:00
renovate[bot]
f7ebc4acd5 Update ASF-ui digest to f39b7a7 2023-10-25 21:36:28 +00:00
renovate[bot]
910ec7ad29 Update crowdin/github-action action to v1.14.0 2023-10-25 14:17:47 +00:00
ArchiBot
6aaac31da0 Automatic translations update 2023-10-25 02:05:43 +00:00
renovate[bot]
0708199a59 Update ASF-ui digest to f54788e 2023-10-24 15:29:59 +00:00
renovate[bot]
907f6e4b33 Update actions/setup-node action to v4 (#3052)
Co-authored-by: renovate[bot] <29139614+renovate[bot]@users.noreply.github.com>
2023-10-24 10:19:51 +02:00
renovate[bot]
78e30343f7 Update actions/setup-node action to v3.8.2 2023-10-23 18:09:05 +00:00
renovate[bot]
058e9fca77 Update ASF-ui digest to f55e29f 2023-10-23 15:24:00 +00:00
ArchiBot
e97c660b08 Automatic translations update 2023-10-23 02:05:53 +00:00
ArchiBot
b4dcc8621a Automatic translations update 2023-10-22 02:07:04 +00:00
renovate[bot]
a50bc1e13b Update dependency JustArchiNET.Madness to v3.17.0 2023-10-21 21:22:52 +00:00
Archi
502af043df Closes #3051 2023-10-21 22:42:11 +02:00
renovate[bot]
f3ef7d0397 Update wiki digest to 922617f 2023-10-21 16:23:52 +00:00
renovate[bot]
8d3edb7d60 Update ASF-ui digest to e56f7c0 2023-10-21 03:36:20 +00:00
ArchiBot
8bae812ae5 Automatic translations update 2023-10-21 02:04:24 +00:00
renovate[bot]
b4db6584e8 Update github/codeql-action action to v2.22.4 2023-10-20 16:31:22 +00:00
Archi
77f6fabbc7 Bump 2023-10-20 16:35:39 +02:00
Archi
7f4a11bb6a netf brain damage 2023-10-20 16:30:11 +02:00
Archi
93402cc6a0 Protect RefreshWebSession with a semaphore 2023-10-20 16:23:00 +02:00
Archi
1f2607149b Bump 2023-10-20 16:08:55 +02:00
Archi
02312dbee5 Add hotfix for empty access token with EResult.OK 2023-10-20 16:08:33 +02:00
renovate[bot]
aa1c344b03 Update ASF-ui digest to fceb2fb 2023-10-20 03:34:37 +00:00
ArchiBot
0df46a08da Automatic translations update 2023-10-20 02:05:48 +00:00
renovate[bot]
ce2693d407 Update wiki digest to b539db1 2023-10-19 13:04:53 +00:00
Archi
e1c3268cf4 Bump 2023-10-19 15:04:27 +02:00
Archi
6a0d428fa3 Fix reading encrypted secrets 2023-10-19 15:04:07 +02:00
Archi
776c5fe31c Bump 2023-10-19 14:36:26 +02:00
Archi
22177f1fe7 Fix RefreshToken handling for existing setups 2023-10-19 14:36:05 +02:00
Archi
ab1edae9c7 Bump 2023-10-19 13:43:58 +02:00
Archi
53d80345d3 Bump 2023-10-19 13:43:42 +02:00
Łukasz Domeradzki
d571cd9580 Closes #3043 (#3044)
* Implement support for access tokens

A bit more work and testing is needed

* Make ValidUntil computed, fix netf, among others

* netf fixes as always

* Allow AWH to forcefully refresh session

* Unify access token lifetime
2023-10-19 13:38:39 +02:00
ArchiBot
4106c5f41a Automatic translations update 2023-10-19 02:05:44 +00:00
Łukasz Domeradzki
71fa7560f7 Fix qodana for PRs (#3040)
* Fix qodana for PRs

* Update code-quality.yml
2023-10-18 23:51:35 +02:00
Łukasz Domeradzki
32196a53cd Closes #3039 (#3041) 2023-10-18 23:27:26 +02:00
Łukasz Domeradzki
5d467aca9a Add default bot implementation (#3038)
* Add default bot implementation

* Thought so

* Brain damage for netf
2023-10-18 22:57:58 +02:00
renovate[bot]
52eacaf577 Update ASF-ui digest to 1447dbe 2023-10-18 19:35:28 +00:00
Archi
d44c57a48f Misc 2023-10-18 10:56:07 +02:00
Archi
629a750df6 Bump 2023-10-18 10:47:42 +02:00
Archi
21b1a319ca Fix netf with new code 2023-10-18 10:35:44 +02:00
Archi
bb1f02e788 Closes #3029 2023-10-18 10:27:50 +02:00
renovate[bot]
5d8826b71b Update ASF-ui digest to 1d748b6 2023-10-18 03:48:39 +00:00
ArchiBot
829e5ac4fb Automatic translations update 2023-10-18 02:06:16 +00:00
renovate[bot]
feec46da32 Update wiki digest to bd2c085 2023-10-17 22:58:10 +00:00
renovate[bot]
4288f35e99 Update actions/checkout action to v4.1.1 2023-10-17 17:26:45 +00:00
ArchiBot
69004d20ce Automatic translations update 2023-10-17 02:06:30 +00:00
renovate[bot]
91ce53d283 Update wiki digest to 3408c8a 2023-10-16 23:00:59 +00:00
renovate[bot]
400ea64cfd Update dependency NLog.Web.AspNetCore to v5.3.5 2023-10-15 20:01:50 +00:00
ArchiBot
1b047dfbff Automatic translations update 2023-10-15 02:06:55 +00:00
renovate[bot]
f9cd805304 Update ASF-ui digest to 6fab369 2023-10-14 04:22:54 +00:00
renovate[bot]
74e2ad2f40 Update github/codeql-action action to v2.22.3 2023-10-13 16:10:15 +00:00
ArchiBot
0242ed9f10 Automatic translations update 2023-10-13 02:06:53 +00:00
renovate[bot]
b31c8266eb Update github/codeql-action action to v2.22.2 2023-10-12 10:41:00 +00:00
renovate[bot]
ddd55fd4d9 Update ASF-ui digest to b7537c4 2023-10-12 07:43:41 +00:00
ArchiBot
a324a69371 Automatic translations update 2023-10-12 02:05:09 +00:00
renovate[bot]
de67195185 Update wiki digest to 944296e 2023-10-11 19:10:30 +00:00
Archi
290f16b3fe Bump 2023-10-11 19:24:27 +02:00
Archi
324d208416 Kill old refresh token when getting Expired/Expired 2023-10-11 19:22:40 +02:00
renovate[bot]
5db85aa6f1 Update ASF-ui digest to be9b550 2023-10-11 03:03:04 +00:00
ArchiBot
4d46c4c4b1 Automatic translations update 2023-10-11 02:05:26 +00:00
renovate[bot]
f93a10bcd0 Update ASF-ui digest to 184ffad 2023-10-10 13:07:08 +00:00
renovate[bot]
56c6246a20 Update ad-m/github-push-action action to v0.8.0 2023-10-10 06:05:28 +00:00
renovate[bot]
2f4c82b563 Update ASF-ui digest to 0134a94 2023-10-10 03:45:05 +00:00
ArchiBot
8bd3c8b20d Automatic translations update 2023-10-10 02:05:49 +00:00
renovate[bot]
05c93aa82b Update JetBrains/qodana-action action to v2023.2.8 2023-10-09 16:48:38 +00:00
renovate[bot]
e8babfb329 Update github/codeql-action action to v2.22.1 2023-10-09 11:28:12 +00:00
renovate[bot]
fd2d1baa1f Update ASF-ui digest to a3f5b60 2023-10-09 03:24:00 +00:00
ArchiBot
4a5b8bbf3c Automatic translations update 2023-10-09 02:05:39 +00:00
renovate[bot]
5c8ebf7ec1 Update wiki digest to b40fb89 2023-10-08 12:02:33 +00:00
renovate[bot]
d972c93072 Update ASF-ui digest to 137b040 2023-10-07 04:46:42 +00:00
ArchiBot
aa75f4204e Automatic translations update 2023-10-07 02:05:01 +00:00
renovate[bot]
5ad1815ba0 Update github/codeql-action action to v2.22.0 2023-10-06 12:32:23 +00:00
renovate[bot]
0518a35fb4 Update ASF-ui digest to cf7f1a0 2023-10-06 07:20:40 +00:00
ArchiBot
4dbd9720f2 Automatic translations update 2023-10-06 02:05:38 +00:00
renovate[bot]
4d06104306 Update ASF-ui digest to 50cc9c7 2023-10-05 18:01:57 +00:00
ArchiBot
5c6229da1b Automatic translations update 2023-10-05 02:06:46 +00:00
ArchiBot
8b661874da Automatic translations update 2023-10-04 02:06:12 +00:00
Archi
24b4c9a2f1 Bump 2023-10-03 21:19:23 +02:00
Archi
9dd1dd227f Closes #3020 2023-10-03 21:18:59 +02:00
ArchiBot
d3b1213fc5 Automatic translations update 2023-10-03 02:05:07 +00:00
Archi
603663a43c Bump 2023-10-03 02:00:57 +02:00
Archi
57cb519c44 Misc 2023-10-02 20:37:25 +02:00
Łukasz Domeradzki
3eb6cbf491 Closes #3017 (#3018)
* Closes #3017

* Allow risky discovery for non-first badge page failures

* Skip excessive risky check once game is fully farmed

* Misc
2023-10-02 20:31:59 +02:00
Archi
0396687f50 Bump 2023-10-02 16:16:46 +02:00
Archi
714cc5ae9d Closes #3019 2023-10-02 16:16:19 +02:00
renovate[bot]
4f478d829d Update github/codeql-action action to v2.21.9 2023-09-27 15:32:46 +00:00
Archi
d81144d549 Bump 2023-09-27 13:50:59 +02:00
Archi
f2563c582c Closes #3014
AF_UNIX is apparently needed on arch
AF_NETLINK will be mandatory since .NET 8, but based on my research even .NET 7 uses it in some conditions, so it makes sense to patch it right away as our previous settings were too restrictive, even if it did in fact work
2023-09-27 13:48:00 +02:00
renovate[bot]
927715188d Update ASF-ui digest to e510667 2023-09-27 03:32:16 +00:00
renovate[bot]
03beeb97dd Update ASF-ui digest to 6bb8251 2023-09-25 17:15:56 +00:00
Archi
a3dcb252c7 Bump 2023-09-25 12:11:31 +02:00
ArchiBot
52d4b6702c Automatic translations update 2023-09-25 02:05:43 +00:00
ArchiBot
4e5cd2e380 Automatic translations update 2023-09-24 02:05:33 +00:00
Archi
af6eb07607 Add support for bot.. and ..bot syntax 2023-09-24 02:45:06 +02:00
renovate[bot]
b5ecd31666 Update ASF-ui digest to 7a96c9c 2023-09-23 05:03:47 +00:00
ArchiBot
a2e5968a49 Automatic translations update 2023-09-23 02:03:42 +00:00
renovate[bot]
23da14e77e Update actions/checkout action to v4.1.0 2023-09-22 19:24:26 +00:00
Archi
b2a5daad2c Bump 2023-09-22 14:27:19 +02:00
renovate[bot]
6c9142132c Update ASF-ui digest to 79963aa 2023-09-22 03:31:51 +00:00
ArchiBot
cd9a939fb4 Automatic translations update 2023-09-22 02:05:14 +00:00
renovate[bot]
4f8b1a542a Update ASF-ui digest to 2676e37 2023-09-21 06:47:20 +00:00
ArchiBot
230332ca79 Automatic translations update 2023-09-21 02:05:17 +00:00
renovate[bot]
b082024d0b Update wiki digest to 4cc5e13 2023-09-20 11:53:36 +00:00
Łukasz Domeradzki
af4a64b99e Closes #3007 (#3008) 2023-09-20 13:53:15 +02:00
Rudokhvist
9163b57c3e Switch to different cat api in example plugin (#3006)
* switch to different cat api

* damn forgot json constructor

* check for empty array in responce

* revert meowresponse.cs

* use firstordefault()
2023-09-20 12:40:41 +02:00
renovate[bot]
69aaca3bad Update ASF-ui digest to 5875d1f 2023-09-20 03:45:24 +00:00
ArchiBot
8272a2b929 Automatic translations update 2023-09-20 02:05:25 +00:00
renovate[bot]
4d0ba1dbcc Update ASF-ui digest to 81b18fe 2023-09-19 22:01:00 +00:00
renovate[bot]
bf46c29ff6 Update github/codeql-action action to v2.21.8 2023-09-19 11:05:21 +00:00
ArchiBot
5fb3f88a52 Automatic translations update 2023-09-19 02:05:49 +00:00
renovate[bot]
74a193d3fe Update ASF-ui digest to 8cd89bc 2023-09-18 17:37:06 +00:00
renovate[bot]
283bb789bb Update crowdin/github-action action to v1.13.1 2023-09-18 07:48:42 +00:00
ArchiBot
515f96ea8e Automatic translations update 2023-09-18 02:05:11 +00:00
renovate[bot]
b9308810d6 Update ASF-ui digest to f77258e 2023-09-17 21:27:00 +00:00
ArchiBot
68be2d2442 Automatic translations update 2023-09-17 02:05:42 +00:00
renovate[bot]
d110259388 Update ASF-ui digest to 73cc7ef 2023-09-16 22:34:09 +00:00
ArchiBot
b03cf66882 Automatic translations update 2023-09-16 02:03:57 +00:00
ArchiBot
480abe95d1 Automatic translations update 2023-09-15 02:05:37 +00:00
renovate[bot]
9408a16a5c Update ASF-ui digest to 7b71bc2 2023-09-14 22:53:42 +00:00
renovate[bot]
a8c632f98d Update github/codeql-action action to v2.21.7 2023-09-14 17:36:10 +00:00
renovate[bot]
0016fc43a9 Update ASF-ui digest to c7922a4 2023-09-14 04:51:45 +00:00
ArchiBot
05006f0ba1 Automatic translations update 2023-09-14 02:04:43 +00:00
renovate[bot]
be0682e0f5 Update dependency JustArchiNET.Madness to v3.16.0 2023-09-13 20:25:32 +00:00
renovate[bot]
4b6c657ffc Update github/codeql-action action to v2.21.6 2023-09-13 17:26:15 +00:00
ArchiBot
a8bef43a30 Automatic translations update 2023-09-13 02:05:33 +00:00
renovate[bot]
6767c879c6 Update ASF-ui digest to ce59413 2023-09-12 15:26:45 +00:00
renovate[bot]
67fdaa8314 Update docker/setup-buildx-action action to v3 (#3004)
Co-authored-by: renovate[bot] <29139614+renovate[bot]@users.noreply.github.com>
2023-09-12 13:52:14 +02:00
renovate[bot]
2aed6d6143 Update docker/login-action action to v3 (#3003)
Co-authored-by: renovate[bot] <29139614+renovate[bot]@users.noreply.github.com>
2023-09-12 13:51:56 +02:00
renovate[bot]
94a18ed8dd Update docker/build-push-action action to v5 (#3002)
Co-authored-by: renovate[bot] <29139614+renovate[bot]@users.noreply.github.com>
2023-09-12 13:51:29 +02:00
renovate[bot]
3c9bb23957 Update crowdin/github-action action to v1.13.0 2023-09-12 07:00:30 +00:00
ArchiBot
ca418b5570 Automatic translations update 2023-09-12 02:04:17 +00:00
renovate[bot]
954e811584 Update ASF-ui digest to 70d4a77 2023-09-10 18:47:35 +00:00
renovate[bot]
6beda3f404 Update crazy-max/ghaction-import-gpg action to v6 (#3001)
Co-authored-by: renovate[bot] <29139614+renovate[bot]@users.noreply.github.com>
2023-09-10 20:47:19 +02:00
ArchiBot
0cc6f4c40a Automatic translations update 2023-09-10 02:05:42 +00:00
renovate[bot]
2fcc22768c Update ASF-ui digest to a949754 2023-09-09 02:14:09 +00:00
ArchiBot
29f70918c2 Automatic translations update 2023-09-09 02:03:21 +00:00
renovate[bot]
3f5d21758c Update docker/build-push-action action to v4.2.1 2023-09-08 16:32:25 +00:00
renovate[bot]
705e17c9bb Update docker/build-push-action action to v4.2.0 2023-09-08 11:21:02 +00:00
ArchiBot
2afc59f01a Automatic translations update 2023-09-08 02:05:04 +00:00
renovate[bot]
741df3c70f Update ASF-ui digest to ea8cb61 2023-09-07 04:09:56 +00:00
ArchiBot
6c4d6c1e75 Automatic translations update 2023-09-07 02:04:47 +00:00
renovate[bot]
52aa398ec7 Update dependency NLog.Web.AspNetCore to v5.3.4 2023-09-06 22:49:15 +00:00
renovate[bot]
72c14c3180 Update actions/upload-artifact action to v3.1.3 2023-09-06 20:40:38 +00:00
ArchiBot
78d2554e80 Automatic translations update 2023-09-05 02:04:09 +00:00
renovate[bot]
a46ec87252 Update ASF-ui digest to 81fcdcd 2023-09-04 17:20:07 +00:00
Archi
4a5c1c15ce Misc 2023-09-04 19:19:48 +02:00
renovate[bot]
7fc609653a Update actions/checkout action to v4 (#2996)
Co-authored-by: renovate[bot] <29139614+renovate[bot]@users.noreply.github.com>
2023-09-04 19:16:07 +02:00
renovate[bot]
48077466ab Update JetBrains/qodana-action action to v2023.2.6 2023-09-04 12:52:26 +00:00
ArchiBot
4a76f84e3a Automatic translations update 2023-09-04 02:05:10 +00:00
renovate[bot]
3ab68cb574 Update ASF-ui digest to d5893d2 2023-09-03 20:33:29 +00:00
renovate[bot]
daf616c0b3 Update crazy-max/ghaction-import-gpg action to v5.4.0 2023-09-03 14:36:40 +00:00
ArchiBot
2ea8c89037 Automatic translations update 2023-09-03 02:05:37 +00:00
Archi
bf91dc77e8 Bump 2023-09-02 23:36:42 +02:00
Archi
7778618b75 Bump 2023-09-02 23:36:20 +02:00
Archi
6cc78e805e Closes #2993 2023-09-02 23:35:00 +02:00
ArchiBot
f5b4383cdf Automatic translations update 2023-09-02 02:02:58 +00:00
ArchiBot
ab5e950972 Automatic translations update 2023-09-01 02:06:45 +00:00
renovate[bot]
a3829f84b4 Update ASF-ui digest to 3ef126f 2023-08-31 02:02:29 +00:00
Archi
4e5fdabe0b Misc 2023-08-30 14:17:59 +02:00
renovate[bot]
1e786bdea3 Update dependency Markdig.Signed to v0.33.0 2023-08-30 06:14:25 +00:00
ArchiBot
27297f6f26 Automatic translations update 2023-08-30 02:04:44 +00:00
renovate[bot]
cfebe7bd50 Update dependency Microsoft.NET.Test.Sdk to v17.7.2 2023-08-29 09:45:50 +00:00
ArchiBot
8a2ee4e22b Automatic translations update 2023-08-29 02:34:32 +00:00
renovate[bot]
c66260954c Update github/codeql-action action to v2.21.5 2023-08-28 19:26:41 +00:00
renovate[bot]
adaa1416bb Update docker/setup-buildx-action action to v2.10.0 2023-08-28 08:04:20 +00:00
renovate[bot]
f3bc0162ef Update ASF-ui digest to 5d9525f 2023-08-27 03:26:06 +00:00
renovate[bot]
7a87131651 Update ASF-ui digest to 07b1fe2 2023-08-26 00:57:47 +00:00
renovate[bot]
c945aca1b7 Update ncipollo/release-action action to v1.13.0 2023-08-24 20:17:48 +00:00
renovate[bot]
874b66d3af Update actions/checkout action to v3.6.0 2023-08-24 15:29:46 +00:00
renovate[bot]
142347ad20 Update ASF-ui digest to f31aaee 2023-08-23 17:29:17 +00:00
ArchiBot
32dca1ce33 Automatic translations update 2023-08-21 02:03:31 +00:00
renovate[bot]
36e15eccf1 Update ASF-ui digest to 7b543ae 2023-08-19 07:31:10 +00:00
renovate[bot]
b00b297def Update ASF-ui digest to 6efaee8 2023-08-17 23:01:22 +00:00
renovate[bot]
0fbf31db89 Update actions/setup-node action to v3.8.1 2023-08-17 14:30:36 +00:00
renovate[bot]
5d7a1e33b6 Update dependency Microsoft.NET.Test.Sdk to v17.7.1 2023-08-16 15:35:29 +00:00
ArchiBot
3bcf09d42e Automatic translations update 2023-08-16 02:03:55 +00:00
ArchiBot
7d19111b42 Automatic translations update 2023-08-15 02:03:44 +00:00
renovate[bot]
3667b62bee Update ASF-ui digest to 135bbb3 2023-08-14 20:30:17 +00:00
renovate[bot]
d9ff9d7a97 Update github/codeql-action action to v2.21.4 2023-08-14 17:04:43 +00:00
renovate[bot]
7ae60bdb3c Update actions/setup-node action to v3.8.0 2023-08-14 13:32:22 +00:00
ArchiBot
ecbbca0215 Automatic translations update 2023-08-14 02:04:33 +00:00
renovate[bot]
534f84b181 Update wiki digest to e1c5a2a 2023-08-13 21:18:17 +00:00
ArchiBot
894587b965 Automatic translations update 2023-08-13 02:03:57 +00:00
renovate[bot]
8f335f4182 Update ASF-ui digest to 0964964 2023-08-11 19:19:30 +00:00
ArchiBot
750c56bf08 Automatic translations update 2023-08-11 02:03:06 +00:00
Archi
c84366f9ba Misc syntax improvements 2023-08-10 21:36:17 +02:00
renovate[bot]
837e4bde8f Update ASF-ui digest to bb92516 2023-08-10 05:09:49 +00:00
renovate[bot]
525a6f2d19 Update ASF-ui digest to dd93453 2023-08-09 21:07:13 +00:00
Archi
8719a2b98b Bump 2023-08-09 23:06:53 +02:00
Vita Chumakova
a768ec43a5 Fix addlicense (#2983) 2023-08-09 23:06:11 +02:00
renovate[bot]
385ea566aa Update ASF-ui digest to 0b812a7 2023-08-09 12:06:50 +00:00
renovate[bot]
df878185c2 Update github/codeql-action action to v2.21.3 2023-08-08 14:29:55 +00:00
ArchiBot
f834ffe612 Automatic translations update 2023-08-08 02:09:46 +00:00
renovate[bot]
4e032fa129 Update ASF-ui digest to 05ff07a 2023-08-07 23:23:13 +00:00
Archi
6b116b5163 Misc 2023-08-07 18:12:50 +02:00
Archi
7ee92cb5b9 Bump 2023-08-07 17:23:53 +02:00
Archi
7181359eca Archi pls 2023-08-07 17:23:25 +02:00
Archi
386dd64cbb Bump 2023-08-07 16:42:45 +02:00
Archi
44cbafa25b Misc 2023-08-07 16:39:44 +02:00
Archi
864617801f Add GetConfirmations() to ASF API 2023-08-07 16:34:32 +02:00
ArchiBot
cbc5b57c11 Automatic translations update 2023-08-07 02:11:15 +00:00
renovate[bot]
7d70c0fe25 Update dependency NLog.Web.AspNetCore to v5.3.3 2023-08-06 18:27:19 +00:00
ArchiBot
b72ff50979 Automatic translations update 2023-08-06 02:06:21 +00:00
ArchiBot
5440fdd78f Automatic translations update 2023-08-05 02:08:15 +00:00
renovate[bot]
df60c6d4d2 Update dependency Microsoft.NET.Test.Sdk to v17.7.0 2023-08-04 16:41:12 +00:00
renovate[bot]
927a55fe2c Update dependency Markdig.Signed to v0.32.0 2023-08-04 07:59:50 +00:00
ArchiBot
00c7bfef25 Automatic translations update 2023-08-04 02:10:03 +00:00
Archi
036a754d12 Correct balance output
Balance delayed is actually additional to current, not current + pending.
2023-08-03 16:16:58 +02:00
Archi
b863d58ff7 Bump 2023-08-03 15:19:09 +02:00
renovate[bot]
03dd28b82f Update ASF-ui digest to e01b29e 2023-08-03 03:40:11 +00:00
ArchiBot
c3bc080777 Automatic translations update 2023-08-03 02:09:24 +00:00
Archi
c7610a918d Use ProcSubset=pid in systemd 2023-08-02 11:59:48 +02:00
ArchiBot
abae12b1e1 Automatic translations update 2023-08-02 02:08:30 +00:00
renovate[bot]
98349dbad2 Update ASF-ui digest to a774592 2023-08-01 16:43:07 +00:00
renovate[bot]
8ba22e5bc6 Update wiki digest to b71437c 2023-08-01 10:06:21 +00:00
ArchiBot
ab42de57fc Automatic translations update 2023-08-01 02:17:16 +00:00
renovate[bot]
790a8e8a7e Update ASF-ui digest to bc56ab4 2023-07-31 10:15:35 +00:00
Archi
be9144c7f1 Bump 2023-07-31 12:15:17 +02:00
Archi
cc4532af83 Add support for WalletBalanceDelayed, refactor SharedLibraryLockStatusCallback 2023-07-31 12:00:41 +02:00
ArchiBot
b2d836ecc0 Automatic translations update 2023-07-30 02:09:55 +00:00
renovate[bot]
28cac01019 Update ASF-ui digest to 79948b8 2023-07-29 15:49:17 +00:00
ArchiBot
10bf1d7311 Automatic translations update 2023-07-29 02:08:09 +00:00
renovate[bot]
3e26b6e7a2 Update ASF-ui digest to 5186a55 2023-07-28 21:24:08 +00:00
renovate[bot]
ce904603e4 Update github/codeql-action action to v2.21.2 2023-07-28 16:37:23 +00:00
renovate[bot]
81614e7a70 Update ASF-ui digest to c2d2bbf 2023-07-28 13:49:35 +00:00
Archi
0b48518e2a Bump 2023-07-28 11:47:44 +02:00
Archi
35364e46ca Closes #2972 2023-07-28 11:46:23 +02:00
ArchiBot
f2dae15562 Automatic translations update 2023-07-28 02:11:06 +00:00
ArchiBot
e71552645e Automatic translations update 2023-07-27 02:07:57 +00:00
renovate[bot]
acce99bf2e Update github/codeql-action action to v2.21.1 2023-07-26 19:23:14 +00:00
ArchiBot
dd14257116 Automatic translations update 2023-07-26 02:17:10 +00:00
Archi
68c17b0af9 Bump 2023-07-25 11:27:50 +02:00
Archi
556e1282a3 Misc fix 2023-07-25 11:26:22 +02:00
renovate[bot]
fd1b44cadc Update ASF-ui digest to 578e8ea 2023-07-25 04:00:12 +00:00
ArchiBot
9c18564830 Automatic translations update 2023-07-25 02:20:37 +00:00
Łukasz Domeradzki
97e8aece92 Update CONTRIBUTING.md 2023-07-25 00:17:47 +02:00
renovate[bot]
030ab53062 Update crowdin/github-action action to v1.12.0 2023-07-24 10:32:40 +00:00
renovate[bot]
2c0aa2a36c Update ASF-ui digest to b89ca92 2023-07-24 04:13:45 +00:00
ArchiBot
7a91e82a57 Automatic translations update 2023-07-24 02:15:15 +00:00
Łukasz Domeradzki
88d2924bc2 Update cc.sh 2023-07-23 12:25:14 +02:00
renovate[bot]
bae91cda04 Update ASF-ui digest to a00a24a 2023-07-23 03:35:12 +00:00
ArchiBot
173a0f18b9 Automatic translations update 2023-07-23 02:17:32 +00:00
Łukasz Domeradzki
0e8e360c7e Update cc.sh 2023-07-22 21:25:23 +02:00
renovate[bot]
afce39ca9c Update ASF-ui digest to d61d8aa 2023-07-22 09:15:32 +00:00
renovate[bot]
605897b7c5 Update ASF-ui digest to b04b006 2023-07-20 04:52:31 +00:00
ArchiBot
fc31027f9c Automatic translations update 2023-07-20 02:13:50 +00:00
renovate[bot]
48f1492aed Update github/codeql-action action to v2.21.0 2023-07-19 13:59:28 +00:00
renovate[bot]
7c9c92cced Update JetBrains/qodana-action action to v2023.2.1 2023-07-19 02:16:07 +00:00
renovate[bot]
abd9256026 Update ASF-ui digest to f02bd30 2023-07-18 07:11:00 +00:00
renovate[bot]
2a439e186a Update ASF-ui digest to 8ec6253 2023-07-17 04:18:33 +00:00
ArchiBot
60fd7d79d8 Automatic translations update 2023-07-16 02:31:22 +00:00
renovate[bot]
e1595719d8 Update ASF-ui digest to 3973226 2023-07-14 21:40:19 +00:00
renovate[bot]
5549481746 Update github/codeql-action action to v2.20.4 2023-07-14 17:41:07 +00:00
renovate[bot]
2a89cd781d Update mstest monorepo to v3.1.1 2023-07-14 10:55:29 +00:00
Archi
52ae995296 Bump 2023-07-13 22:59:45 +02:00
Archi
bceef4f74e Fix Abry potato server 2023-07-13 22:47:42 +02:00
Archi
49a64b75cf Closes #2952 2023-07-13 22:33:52 +02:00
renovate[bot]
0130fa9ee6 Update ASF-ui digest to fa3d8fc 2023-07-12 23:02:31 +00:00
renovate[bot]
29145d823b Update docker/setup-buildx-action action to v2.9.1 2023-07-12 14:24:14 +00:00
renovate[bot]
a4f16a0aa3 Update ASF-ui digest to f93d011 2023-07-10 07:55:13 +00:00
ArchiBot
7c4c82e980 Automatic translations update 2023-07-10 02:24:34 +00:00
ArchiBot
4f87744fd5 Automatic translations update 2023-07-09 02:29:01 +00:00
ArchiBot
a13f6cd23d Automatic translations update 2023-07-08 02:23:19 +00:00
renovate[bot]
a4f70c8ff4 Update ASF-ui digest to 369c14f 2023-07-07 18:18:34 +00:00
renovate[bot]
e72e894863 Update docker/setup-buildx-action action to v2.9.0 2023-07-07 11:47:37 +00:00
renovate[bot]
b4f747f990 Update ASF-ui digest to 81a232b 2023-07-07 07:14:54 +00:00
ArchiBot
a3122b9bd9 Automatic translations update 2023-07-07 02:23:44 +00:00
renovate[bot]
e935ec8bc4 Update ASF-ui digest to 9000bc1 2023-07-06 20:06:43 +00:00
renovate[bot]
421005c341 Update github/codeql-action action to v2.20.3 2023-07-06 14:08:41 +00:00
renovate[bot]
38c19510b5 Update actions/setup-node action to v3.7.0 2023-07-05 15:38:34 +00:00
renovate[bot]
88eaa3a745 Update dependency JetBrains.Annotations to v2023 (#2944)
Co-authored-by: renovate[bot] <29139614+renovate[bot]@users.noreply.github.com>
2023-07-05 09:26:55 +02:00
ArchiBot
8d71433059 Automatic translations update 2023-07-05 02:23:34 +00:00
renovate[bot]
8cce153f0b Update dependency NLog.Web.AspNetCore to v5.3.2 2023-07-04 22:08:01 +00:00
renovate[bot]
9e32d4a00c Update ASF-ui digest to 1ff5f2a 2023-07-04 13:47:33 +00:00
ArchiBot
29fea78ee9 Automatic translations update 2023-07-04 02:23:50 +00:00
renovate[bot]
4a8260beef Update github/codeql-action action to v2.20.2 2023-07-03 12:31:21 +00:00
ArchiBot
4c73a6bc8b Automatic translations update 2023-07-03 02:23:45 +00:00
renovate[bot]
4361be279f Update ASF-ui digest to 9dd90cf 2023-07-02 04:16:48 +00:00
ArchiBot
970307b0e6 Automatic translations update 2023-07-02 02:27:22 +00:00
renovate[bot]
c908ebe192 Update dependency NLog.Web.AspNetCore to v5.3.1 2023-07-01 21:52:05 +00:00
renovate[bot]
b95c5cc584 Update ASF-ui digest to f0d7c48 2023-07-01 07:18:15 +00:00
ArchiBot
1034e7e625 Automatic translations update 2023-07-01 02:26:28 +00:00
Archi
3144bf2a98 Closes #2938 2023-06-30 10:44:29 +02:00
Archi
2ef341fc73 Misc 2023-06-30 10:30:01 +02:00
ArchiBot
b7b8c4bc1c Automatic translations update 2023-06-30 02:22:17 +00:00
renovate[bot]
7dd7e06e38 Update wiki digest to a1000c7 2023-06-29 22:36:03 +00:00
Archi
088fa2e9f9 Bump 2023-06-29 22:41:06 +02:00
Archi
3f91b18a4d Refactor confirmations
Make it so the design actually follows what Steam gives us now. There is no need for standalone Confirmation object anymore, rather re-use what Steam gives us. Optimize parsing type, expose it as public API. Small breaking change in HandleConfirmations() action.
2023-06-29 22:34:26 +02:00
Archi
d7722fae84 Misc code cleanup 2023-06-29 21:56:05 +02:00
ArchiBot
267f44ded0 Automatic translations update 2023-06-29 02:23:10 +00:00
renovate[bot]
cbb0ac7f4f Update ASF-ui digest to 94befd8 2023-06-28 21:25:44 +00:00
renovate[bot]
f8abcf9726 Update docker/setup-buildx-action action to v2.8.0 2023-06-28 16:34:53 +00:00
Chr_
7882f709d9 add checkout.steampowered.com to known service (#2934) 2023-06-28 13:22:35 +02:00
Ryzhehvost
003bf0e2b3 Allow plugins to override blacklisted trades (#2933) 2023-06-28 11:29:40 +02:00
renovate[bot]
1fbf8b7daf Update ASF-ui digest to 38cf6f6 2023-06-28 03:45:40 +00:00
ArchiBot
c30f7f9f0c Automatic translations update 2023-06-28 02:23:42 +00:00
renovate[bot]
4af9364109 Update dependency Microsoft.NET.Test.Sdk to v17.6.3 2023-06-27 13:46:08 +00:00
ArchiBot
7d0d8b5b43 Automatic translations update 2023-06-26 02:26:13 +00:00
Archi
5abe69162d Revert "Revert "Remove obsolete ICustomMachineInfoProvider interface""
This reverts commit 19ffe6e761.
2023-06-25 12:54:40 +02:00
Archi
549bd2f0be Revert "Back to 5.4.7.3 for a second"
This reverts commit 40a23e3c99.
2023-06-25 12:54:36 +02:00
Archi
40a23e3c99 Back to 5.4.7.3 for a second 2023-06-25 12:54:17 +02:00
Archi
19ffe6e761 Revert "Remove obsolete ICustomMachineInfoProvider interface"
This reverts commit 9d837c15b3.
2023-06-25 12:53:42 +02:00
Vincent Jansen
9e1ba20783 Fix for addlicense (#2927)
Fixing #2925 based on suggestions on that issue
2023-06-25 12:52:33 +02:00
renovate[bot]
cf70b5ff6c Update ASF-ui digest to 34e52e3 2023-06-25 04:19:47 +00:00
ArchiBot
9bbe4e73c6 Automatic translations update 2023-06-25 02:31:26 +00:00
renovate[bot]
1001d3ce49 Update ASF-ui digest to f86fb28 2023-06-24 22:38:32 +00:00
ArchiBot
aeffa85b87 Automatic translations update 2023-06-24 02:23:20 +00:00
Archi
9d837c15b3 Remove obsolete ICustomMachineInfoProvider interface 2023-06-23 12:22:57 +02:00
Archi
ae7793193d Bump 2023-06-23 12:20:57 +02:00
ArchiBot
5c8976313f Automatic translations update 2023-06-23 02:23:50 +00:00
Jack Nolddor
5e53073e8f Blacklist Summer Sale 2023 appid (#2923) 2023-06-22 16:38:10 +02:00
renovate[bot]
b06aac0024 Update ASF-ui digest to c56f3a3 2023-06-22 02:32:07 +00:00
ArchiBot
54a0857429 Automatic translations update 2023-06-22 02:19:28 +00:00
renovate[bot]
eac12de92e Update github/codeql-action action to v2.20.1 2023-06-21 12:44:12 +00:00
renovate[bot]
ad1ce5be9c Update JetBrains/qodana-action action to v2023.1.5 2023-06-21 11:13:39 +00:00
Archi
b99d7bc78f Bump 2023-06-21 13:13:21 +02:00
Vita Chumakova
7132340ff7 Fix 2FA endpoints (#2921)
* Fix 2FA endpoints

* use fields in data classes

* optimize usings
2023-06-21 13:11:38 +02:00
renovate[bot]
327f988512 Update ASF-ui digest to 0dc9b31 2023-06-21 04:50:24 +00:00
renovate[bot]
8b0449889d Update peter-evans/dockerhub-description action to v3.4.2 2023-06-20 09:20:57 +00:00
ArchiBot
512fa86f83 Automatic translations update 2023-06-20 02:16:44 +00:00
ArchiBot
e7933257bc Automatic translations update 2023-06-19 02:19:27 +00:00
renovate[bot]
e57c041c33 Update ASF-ui digest to 42351b3 2023-06-18 18:07:55 +00:00
renovate[bot]
93c9c4a7d8 Update ASF-ui digest to 92587e8 2023-06-18 04:12:29 +00:00
ArchiBot
76cc33cabf Automatic translations update 2023-06-18 02:23:20 +00:00
renovate[bot]
707579a262 Update wiki digest to c906bac 2023-06-17 21:49:29 +00:00
renovate[bot]
fea70fd0cc Update ASF-ui digest to 83851d9 2023-06-17 05:04:50 +00:00
ArchiBot
9d8821908a Automatic translations update 2023-06-17 02:16:48 +00:00
renovate[bot]
af6602c217 Update ASF-ui digest to 6933718 2023-06-16 17:21:22 +00:00
renovate[bot]
2b84d411e7 Update crowdin/github-action action to v1.11.0 2023-06-16 11:07:09 +00:00
renovate[bot]
e0b26e002d Update ASF-ui digest to bca4a3e 2023-06-15 15:29:18 +00:00
renovate[bot]
ab85699104 Update ASF-ui digest to 30025b9 2023-06-15 05:13:50 +00:00
ArchiBot
d9c8acb67b Automatic translations update 2023-06-15 02:18:22 +00:00
renovate[bot]
46355fac5e Update ASF-ui digest to 4ce6c25 2023-06-14 21:25:42 +00:00
renovate[bot]
a9f6319272 Update ASF-ui digest to 58396d8 2023-06-14 14:33:19 +00:00
renovate[bot]
cfceb26ad5 Update github/codeql-action action to v2.20.0 2023-06-14 04:49:20 +00:00
ArchiBot
599dcfe104 Automatic translations update 2023-06-14 02:19:06 +00:00
renovate[bot]
9921a779cb Update docker/setup-buildx-action action to v2.7.0 2023-06-13 23:16:14 +00:00
renovate[bot]
934ffc71c9 Update wiki digest to 9e96334 2023-06-13 18:55:52 +00:00
renovate[bot]
0e2db4466b Update JetBrains/qodana-action action to v2023.1.4 2023-06-13 17:44:34 +00:00
renovate[bot]
e50b197c67 Update docker/build-push-action action to v4.1.1 2023-06-13 12:03:33 +00:00
renovate[bot]
b0c0beb042 Update crowdin/github-action action to v1.10.0 2023-06-13 07:36:27 +00:00
ArchiBot
cc08c4112a Automatic translations update 2023-06-13 02:18:57 +00:00
renovate[bot]
f26dedd7c9 Update dessant/lock-threads action to v4.0.1 2023-06-12 18:22:16 +00:00
ArchiBot
063a317783 Automatic translations update 2023-06-12 02:22:41 +00:00
renovate[bot]
17d3963c0f Update ASF-ui digest to 47a7a26 2023-06-10 18:23:15 +00:00
Archi
b0239fb291 Merge branch 'main' of https://github.com/JustArchiNET/ArchiSteamFarm 2023-06-10 20:22:46 +02:00
Archi
46fffb9d4a Add handling of EPurchaseResultDetail.NoWallet 2023-06-10 20:22:38 +02:00
ArchiBot
c55bc1d4c2 Automatic translations update 2023-06-10 02:20:19 +00:00
renovate[bot]
0c3411e2f6 Update actions/checkout action to v3.5.3 2023-06-09 16:48:51 +00:00
renovate[bot]
bccc2b49b3 Update docker/build-push-action action to v4.1.0 2023-06-09 13:11:51 +00:00
renovate[bot]
0ca413529d Update ASF-ui digest to 2087d17 2023-06-09 00:31:12 +00:00
renovate[bot]
54179d79b6 Update ASF-ui digest to c4cf465 2023-06-08 07:59:05 +00:00
renovate[bot]
aec802c192 Update ASF-ui digest to 3577b45 2023-06-08 02:59:52 +00:00
renovate[bot]
0814d68ad2 Update docker/setup-buildx-action action to v2.6.0 2023-06-07 19:37:13 +00:00
Archi
773d8e29d0 Bump 2023-06-07 21:36:50 +02:00
Archi
89bdac0692 Retry accepted/rejected trade offers
Very often, despite accepting the trade offer AND confirmation, the trade stays in active state for who knows what reason. ASF has built-in mechanism to not evaluate trade offers that it already did, which we do need and is good e.g. for ignored trade offers. Make it so accepted/rejected are retried as well, since they should not pop up again once we're done with them.
2023-06-07 21:28:04 +02:00
renovate[bot]
3316b15808 Update docker/login-action action to v2.2.0 2023-06-07 14:58:39 +00:00
renovate[bot]
b3016db56c Update dependency Microsoft.NET.Test.Sdk to v17.6.2 2023-06-06 15:14:35 +00:00
renovate[bot]
6d08fa9311 Update dependency AngleSharp.XPath to v2.0.3 2023-06-06 11:54:10 +00:00
renovate[bot]
7a9ec4852c Update ASF-ui digest to 355c868 2023-06-05 22:37:45 +00:00
renovate[bot]
65239d2c50 Update ASF-ui digest to 3929273 (#2909)
Co-authored-by: renovate[bot] <29139614+renovate[bot]@users.noreply.github.com>
2023-06-05 09:18:02 +02:00
Archi
57ac7e2816 Bullet-proof against invalid Steam items 2023-06-04 16:39:16 +02:00
renovate[bot]
3143fc8f09 Update ASF-ui digest to 899f763 2023-06-04 07:46:30 +00:00
ArchiBot
ece24772df Automatic translations update 2023-06-04 02:30:59 +00:00
renovate[bot]
903c1cccaa Update ASF-ui digest to 0e1dac8 2023-06-03 18:10:11 +00:00
Archi
09ff465f4a Misc 2023-06-03 17:56:27 +02:00
Archi
665309a890 Bump 2023-06-03 17:52:58 +02:00
Archi
afca1e9509 Bump 2023-06-03 17:52:22 +02:00
Archi
cd8c9cf80e Closes #2908 2023-06-03 17:50:50 +02:00
renovate[bot]
425b869218 Update mstest monorepo to v3.0.4 2023-06-03 04:27:12 +00:00
renovate[bot]
c19831bcca Update github/codeql-action action to v2.3.6 2023-06-03 00:48:28 +00:00
renovate[bot]
cde0ae263e Update dependency Microsoft.NET.Test.Sdk to v17.6.1 2023-06-02 21:27:47 +00:00
Archi
12f1b5e3f4 Misc 2023-06-02 21:50:36 +02:00
renovate[bot]
96370ead2d Update dependency AngleSharp.XPath to v2.0.2 2023-06-02 16:03:19 +00:00
renovate[bot]
c967513dad Update ASF-ui digest to 65d1088 2023-06-02 14:14:17 +00:00
renovate[bot]
d98054559d Update dependency NLog.Web.AspNetCore to v5.3.0 (#2907)
* Update dependency NLog.Web.AspNetCore to v5.3.0

* Address breaking changes

---------

Co-authored-by: renovate[bot] <29139614+renovate[bot]@users.noreply.github.com>
Co-authored-by: Archi <JustArchi@JustArchi.net>
2023-06-02 16:13:54 +02:00
ArchiBot
9c54c81e05 Automatic translations update 2023-06-02 02:22:05 +00:00
ArchiBot
bf8275d34a Automatic translations update 2023-06-01 02:33:30 +00:00
renovate[bot]
dbc7afb8be Update wiki digest to 4a31925 2023-05-31 14:18:57 +00:00
Archi
def3bdf24a Bump limit slightly 2023-05-31 15:39:42 +02:00
Archi
b39b64e11f Add server-side limit of items also to client side 2023-05-31 15:32:56 +02:00
renovate[bot]
1812259a70 Update crowdin/github-action action to v1.9.0 2023-05-30 19:04:04 +00:00
renovate[bot]
abc0619a89 Update ASF-ui digest to 64b2a4f 2023-05-30 15:19:14 +00:00
ArchiBot
681def143e Automatic translations update 2023-05-30 02:17:36 +00:00
renovate[bot]
0c24a43d8f Update ASF-ui digest to 91f399b 2023-05-29 16:26:14 +00:00
renovate[bot]
3936d5ff20 Update actions/setup-dotnet action to v3.2.0 2023-05-29 12:46:07 +00:00
Archi
e025ae0a95 Bump 2023-05-28 16:27:18 +02:00
renovate[bot]
0c85c1413d Update ASF-ui digest to 3078d92 2023-05-28 10:51:00 +00:00
Jack Nolddor
db65ed7545 Minimize chances of TooManyOffersSent during MatchActively (#2904) 2023-05-28 12:50:37 +02:00
renovate[bot]
8f3252c79f Update ASF-ui digest to c8ef4ab 2023-05-27 01:27:38 +00:00
renovate[bot]
51790c7867 Update ASF-ui digest to 4c224d2 2023-05-26 16:28:21 +00:00
renovate[bot]
5755c36d8c Update ASF-ui digest to 2cf6a6c 2023-05-26 04:30:25 +00:00
renovate[bot]
c427042bdf Update github/codeql-action action to v2.3.5 2023-05-25 20:13:42 +00:00
renovate[bot]
377871c1db Update actions/setup-dotnet action to v3.1.0 2023-05-25 13:44:05 +00:00
renovate[bot]
1f1543ca38 Update mstest monorepo to v3.0.3 2023-05-25 11:03:23 +00:00
renovate[bot]
57f5bd14ba Update dependency JustArchiNET.Madness to v3.15.0 2023-05-25 06:06:08 +00:00
renovate[bot]
4ab826e56a Update github/codeql-action action to v2.3.4 2023-05-25 03:03:59 +00:00
renovate[bot]
50e72bc381 Update ASF-ui digest to 789a73a 2023-05-24 22:39:47 +00:00
Archi
35c22ec4a3 Bump 2023-05-23 15:14:45 +02:00
Archi
b69feff595 More bullet-proofing 2023-05-23 14:43:05 +02:00
Archi
3006290170 Stop matching actively on disconnection 2023-05-23 14:28:30 +02:00
Archi
53fc07638d Slightly improve OnDisconnected() flow
We've added possible delay initializing log on result, but this method is very time-sensitive and there is a possibility of race conditions if we don't reset other stuff, such as AWH, in timely manner ASAP.

It makes sense to move waiting for log on result in a place that isn't so time-sensitive anymore.

This can help with some nasty networking issues where AWH state would get e.g. disabled after already being initialized due to reconnection
2023-05-23 14:21:29 +02:00
renovate[bot]
e782f14cbf Update ASF-ui digest to 0b38e29 2023-05-22 23:21:07 +00:00
renovate[bot]
d1fcf04d23 Update ASF-ui digest to 884de46 2023-05-20 03:29:33 +00:00
ArchiBot
fd3c0c7b0e Automatic translations update 2023-05-20 02:11:15 +00:00
renovate[bot]
96a6871b93 Update ASF-ui digest to e89f9e3 2023-05-19 10:29:15 +00:00
Archi
0026e57e64 Misc doc 2023-05-18 12:24:48 +02:00
Archi
6645577506 Bump 2023-05-18 12:03:34 +02:00
Archi
a557b62e0b Fix for accounts without SG timestamp
Initially I added check against zero as bullet-proofing for unexpected events, but some accounts actually report 0.

Assume 0 is older than needed, if we don't have information available, we shouldn't jump to conclusions.
2023-05-18 12:01:48 +02:00
Archi
d81694c7f0 Closes #2903 2023-05-18 11:06:44 +02:00
renovate[bot]
824fb510a3 Update ASF-ui digest to 15b751d 2023-05-18 05:25:34 +00:00
renovate[bot]
b8055dae07 Update dependency JustArchiNET.Madness to v3.14.0 2023-05-17 16:50:10 +00:00
renovate[bot]
e89260fd8e Update dependency Microsoft.NET.Test.Sdk to v17.6.0 2023-05-17 03:20:39 +00:00
renovate[bot]
fb701b4405 Update ASF-ui digest to fc00f3b 2023-05-16 22:31:34 +00:00
Archi
79b5eb0d7d Bump 2023-05-16 21:32:31 +02:00
Archi
8c83b8c51f Closes #2900 Closes #2901 2023-05-16 21:27:36 +02:00
renovate[bot]
93cbe81dbc Update crowdin/github-action action to v1.8.1 2023-05-16 15:57:59 +00:00
renovate[bot]
c387a5a809 Update dependency JustArchiNET.Madness to v3.13.0 2023-05-16 13:59:17 +00:00
renovate[bot]
1b96dd020d Update ASF-ui digest to 4181444 2023-05-16 03:33:23 +00:00
ArchiBot
93368164f9 Automatic translations update 2023-05-16 02:14:29 +00:00
renovate[bot]
62bbeee168 Update ASF-ui digest to 91ecd85 (#2896)
Co-authored-by: renovate[bot] <29139614+renovate[bot]@users.noreply.github.com>
2023-05-11 10:43:58 +02:00
Łukasz Domeradzki
bd522deea8 Update code-quality.yml 2023-05-11 09:46:51 +02:00
Łukasz Domeradzki
d10e8e4f27 Update qodana.yaml 2023-05-11 09:41:13 +02:00
renovate[bot]
13c1f7027d Update ASF-ui digest to 2e96565 2023-05-09 12:38:11 +00:00
Łukasz Domeradzki
459ebe301d Update CONTRIBUTING.md 2023-05-09 12:03:13 +02:00
renovate[bot]
aa2df5f2c6 Update ASF-ui digest to cda23e6 2023-05-07 22:00:49 +00:00
renovate[bot]
3355d1086e Update ASF-ui digest to 2a8ae52 2023-05-07 10:33:30 +00:00
renovate[bot]
0d5b31634f Update crazy-max/ghaction-import-gpg action to v5.3.0 2023-05-06 19:01:07 +00:00
renovate[bot]
3f223d4da7 Update ASF-ui digest to c35e56c 2023-05-06 06:08:10 +00:00
Archi
cca70f33e5 Closes #2891
We used user initiated before as a neat way to let plugins know that the disconnection was initiated by us. Since we use it in other situations now, namely as a result of failed login, we can't do it like this anymore. Instead, trust last log on result, and set it to OK where the disconnection was clean and expected.
2023-05-05 19:53:45 +02:00
Archi
2448ae5531 Bump 2023-05-05 19:46:30 +02:00
renovate[bot]
3a82ce45b2 Update github/codeql-action action to v2.3.3 2023-05-04 21:19:25 +00:00
renovate[bot]
e89673b98a Update ASF-ui digest to 40a831d 2023-05-04 02:47:26 +00:00
ArchiBot
3d411a868a Automatic translations update 2023-05-04 02:10:48 +00:00
renovate[bot]
b9dee6d30a Update ASF-ui digest to 785e90d 2023-05-03 02:28:36 +00:00
ArchiBot
7e3d80e06a Automatic translations update 2023-05-03 02:11:13 +00:00
renovate[bot]
6bb60aecc4 Update ASF-ui digest to 993b1c8 2023-05-01 02:50:20 +00:00
ArchiBot
11a1c12f0c Automatic translations update 2023-05-01 02:13:18 +00:00
ArchiBot
75f1a299f2 Automatic translations update 2023-04-30 02:13:21 +00:00
renovate[bot]
c5453c2e9f Update wiki digest to 008d20f 2023-04-29 16:32:20 +00:00
renovate[bot]
101ecce5dd Update ASF-ui digest to 466b710 2023-04-29 02:51:33 +00:00
renovate[bot]
c2cf3167da Update ASF-ui digest to f1e1155 2023-04-28 08:50:19 +00:00
ArchiBot
8223f6c5a0 Automatic translations update 2023-04-28 02:13:27 +00:00
renovate[bot]
50256747dc Update github/codeql-action action to v2.3.2 2023-04-27 19:53:36 +00:00
renovate[bot]
f69abbef35 Update ASF-ui digest to f09fe0d 2023-04-27 04:29:21 +00:00
ArchiBot
7f5b5f7800 Automatic translations update 2023-04-27 02:12:22 +00:00
renovate[bot]
208a9331e6 Update ASF-ui digest to f335fed 2023-04-26 11:21:12 +00:00
renovate[bot]
b553ca0c00 Update ASF-ui digest to 12e4fbf 2023-04-25 20:03:13 +00:00
renovate[bot]
54798627c6 Update crowdin/github-action action to v1.8.0 2023-04-25 08:45:54 +00:00
Archi
786e7f7df7 Merge branch 'main' of https://github.com/JustArchiNET/ArchiSteamFarm 2023-04-24 17:03:55 +02:00
Archi
6bdd656a70 Update CONTRIBUTING.md 2023-04-24 17:03:51 +02:00
renovate[bot]
76feb1d65d Update JetBrains/qodana-action action to v2023 (#2888)
Co-authored-by: renovate[bot] <29139614+renovate[bot]@users.noreply.github.com>
2023-04-24 13:21:15 +02:00
Archi
ab120bd21e Bump 2023-04-23 12:15:26 +02:00
Ryzhehvost
7721106fc7 check if bot online before checking for outstanding trades (#2887) 2023-04-23 12:14:07 +02:00
renovate[bot]
a44e9ab34b Update github/codeql-action action to v2.3.0 2023-04-22 08:24:26 +00:00
renovate[bot]
75b0613271 Update ASF-ui digest to 114c390 2023-04-22 04:41:55 +00:00
ArchiBot
2590c16b4c Automatic translations update 2023-04-22 02:12:52 +00:00
Archi
f642f76ee1 Bump 2023-04-21 17:02:40 +02:00
Archi
1d96ff8b1f Misc 2023-04-21 11:41:32 +02:00
Archi
1d5bf32ec6 Remove default implementation from interface
Not supported on netf
2023-04-21 11:32:20 +02:00
ArchiBot
cb1648b8c3 Automatic translations update 2023-04-21 02:12:06 +00:00
Archi
1fb74346bd Make IWebInterface work on netf 2023-04-20 22:56:49 +02:00
Archi
b9fd3d0433 Misc 2023-04-20 22:25:38 +02:00
Archi
55b8c8f0d4 Post-PR improvements 2023-04-20 22:24:38 +02:00
fazelukario
97da56d016 Implemented native web GUI support for plugins inside the ASF IPC. Closes #2876 (#2877)
* Implemented native web GUI support for plugins inside the ASF IPC

ref #2876

* calm down netframework

* less `#if`'s

* code optimization

* misc

* Code improvements

* Support nested paths

* Revert "Support nested paths"

This reverts commit 5d7d9ac6ae.

* Support for nested paths (no errors now I guess)

* better path naming

* fixed typos

* Use `HashSet<string>` instead of `List<string>`

* Code improvements

* Code improvements

* Code improvements

* Code improvements

* Code improvements

* Added support for overriding ASF-ui files

* Removed a modified file from pull request

* Added `IWebInterface`

* less `#if`'s

* Code improvements

* Code improvements

* Added license

* Code improvements

* Added default implementation of `IWebInterface`

* Code improvements:
*Use of `OfType<>` instead `Where` and casting.

* Code improvements:
*Null checking

* Removed useless code

* shut up `netf`

* Removed useless null check

* Code improvements:
*Misc: kvp deconstaction

* Added support for absolute path
2023-04-20 22:02:49 +02:00
Archi
69cb5999ea Make 2fafinalized accept code and add 2fafinalizedforce instead 2023-04-20 21:55:19 +02:00
Archi
19ffc1d5d1 Misc
Not needed
2023-04-20 21:32:52 +02:00
Archi
869904e938 Add 2fafinalized command 2023-04-20 21:31:30 +02:00
renovate[bot]
68265993f7 Update ASF-ui digest to d71555d 2023-04-20 08:16:08 +00:00
renovate[bot]
b0a2997bd2 Update ASF-ui digest to 1fcd731 2023-04-18 02:28:26 +00:00
ArchiBot
1e91408044 Automatic translations update 2023-04-18 02:10:44 +00:00
renovate[bot]
136405d9ff Update ASF-ui digest to d243d24 2023-04-17 23:06:31 +00:00
renovate[bot]
deab1a07f6 Update ASF-ui digest to bd10a4a 2023-04-16 03:30:28 +00:00
ArchiBot
7b431033cd Automatic translations update 2023-04-16 02:16:28 +00:00
renovate[bot]
929cedaa2c Update ASF-ui digest to 7015556 2023-04-15 13:04:27 +00:00
Archi
b1bc56d1f2 Add support for AccountLoginDeniedThrottle
Same as RateLimitExceeded
2023-04-15 13:02:10 +02:00
ArchiBot
82a70e282f Automatic translations update 2023-04-15 02:12:33 +00:00
renovate[bot]
269a7cc7a3 Update github/codeql-action action to v2.2.12 2023-04-14 20:57:30 +00:00
renovate[bot]
82dd41d41b Update wiki digest to 15e3ef2 2023-04-14 17:45:15 +00:00
renovate[bot]
9ac2912c38 Update ASF-ui digest to b0bb104 2023-04-14 13:18:58 +00:00
Archi
ff01aff822 Bump 2023-04-14 12:09:13 +02:00
Archi
fc8eb6d1d9 Postpone TradeCheckTimer on new trade received 2023-04-14 11:47:05 +02:00
Archi
45b3183ed6 Misc cleanup 2023-04-14 11:41:51 +02:00
Ryzhehvost
042c2b4e3e Periodically check for outstanding trades. Closes #2871 (#2878)
* add trade check period

* change default value for timer
2023-04-14 11:01:41 +02:00
Archi
15c8c8b714 Add handling of AccessDenied during login procedure 2023-04-14 10:43:33 +02:00
ArchiBot
352d1c6e98 Automatic translations update 2023-04-14 02:10:05 +00:00
renovate[bot]
24d75b72e6 Update actions/checkout action to v3.5.2 2023-04-13 17:46:30 +00:00
renovate[bot]
e8028ae43b Update ASF-ui digest to d1e6d77 2023-04-13 07:06:42 +00:00
renovate[bot]
a65d937ff4 Update actions/checkout action to v3.5.1 (#2880)
Co-authored-by: renovate[bot] <29139614+renovate[bot]@users.noreply.github.com>
2023-04-13 09:06:22 +02:00
renovate[bot]
24120f5e70 Update ASF-ui digest to b8dbb95 2023-04-12 08:08:40 +00:00
Archi
a536a411dd Misc 2023-04-10 15:04:08 +02:00
Archi
54c5be7ef0 Bump 2023-04-10 14:56:46 +02:00
Archi
067d478a76 Closes #2873 2023-04-10 14:55:35 +02:00
renovate[bot]
485942d45b Update peter-evans/dockerhub-description action to v3.4.1 2023-04-10 03:32:06 +00:00
ArchiBot
b0eb199aa1 Automatic translations update 2023-04-10 02:09:33 +00:00
Pavel Djundik
19fbdd1bdd Update server url (#2870) 2023-04-09 21:17:39 +02:00
renovate[bot]
9dac86327d Update ASF-ui digest to fce3428 (#2874)
Co-authored-by: renovate[bot] <29139614+renovate[bot]@users.noreply.github.com>
2023-04-09 21:17:15 +02:00
renovate[bot]
faf50d0798 Update peter-evans/dockerhub-description action to v3.4.0 2023-04-07 04:34:39 +00:00
ArchiBot
5892454ff4 Automatic translations update 2023-04-07 02:08:56 +00:00
renovate[bot]
1b060549fa Update github/codeql-action action to v2.2.11 2023-04-06 21:18:16 +00:00
renovate[bot]
62bc8cf8d0 Update ASF-ui digest to e599f07 2023-04-06 08:50:54 +00:00
renovate[bot]
54d013a81d Update github/codeql-action action to v2.2.10 2023-04-05 18:30:33 +00:00
ArchiBot
52639d66a6 Automatic translations update 2023-04-05 02:05:15 +00:00
ArchiBot
420b522927 Automatic translations update 2023-04-04 02:13:35 +00:00
Archi
3435d83ea4 Bump 2023-04-03 12:43:39 +02:00
Archi
fc1bdb9b16 Closes #2867 2023-04-03 12:40:36 +02:00
ArchiBot
e443d3f4ab Automatic translations update 2023-04-03 02:09:51 +00:00
Archi
cd40472501 Misc 2023-04-02 23:54:51 +02:00
Archi
4159b379b0 Misc
Thanks @Ryzhehvost
2023-04-02 23:33:07 +02:00
Archi
b1d82da385 Bump 2023-04-02 22:44:42 +02:00
Archi
258ea5df3b Shut up netf 2023-04-02 22:29:46 +02:00
Archi
142d1bdd28 Improve resilency against DuplicateRequest 2023-04-02 22:24:31 +02:00
Archi
b8ba995db0 Handle DuplicateRequest when logging in 2023-04-02 21:38:44 +02:00
Archi
731b5909d1 Closes #2854 2023-04-02 21:26:56 +02:00
renovate[bot]
cd40e5e799 Update ASF-ui digest to bc84d62 2023-04-01 08:56:50 +00:00
renovate[bot]
a9b31a5b41 Update ASF-ui digest to 1107a29 2023-03-31 11:00:29 +00:00
renovate[bot]
9072241d70 Update ASF-ui digest to 5088f79 2023-03-30 03:49:04 +00:00
renovate[bot]
5f7e004956 Update ASF-ui digest to 1768016 2023-03-29 13:23:42 +00:00
renovate[bot]
5ee13455ac Update dependency NLog.Web.AspNetCore to v5.2.3 2023-03-28 21:29:15 +00:00
renovate[bot]
f60c8a220b Update ASF-ui digest to 64a6583 2023-03-28 01:18:16 +00:00
renovate[bot]
cb58c0dc3f Update github/codeql-action action to v2.2.9 2023-03-27 13:55:56 +00:00
renovate[bot]
db77028c6e Update ASF-ui digest to a98f263 2023-03-26 04:39:34 +00:00
ArchiBot
bf907d2d5c Automatic translations update 2023-03-25 02:12:43 +00:00
Archi
fd718b005a Bump 2023-03-24 16:08:37 +01:00
Archi
089cc5beee Closes #2624 2023-03-24 13:56:38 +01:00
Archi
68b22ba64d Add missing support for MobileAuthenticator translations 2023-03-24 13:53:40 +01:00
Archi
dbbfc7344b Closes #2850 2023-03-24 13:51:17 +01:00
renovate[bot]
f1dbf0da6a Update ASF-ui digest to f61f018 2023-03-24 08:35:01 +00:00
renovate[bot]
a99f632bce Update actions/checkout action to v3.5.0 2023-03-24 07:10:29 +00:00
renovate[bot]
e622caf820 Update ASF-ui digest to e51578c 2023-03-24 02:33:03 +00:00
renovate[bot]
3cf43cb837 Update ASF-ui digest to 4844c90 2023-03-23 14:48:38 +00:00
renovate[bot]
a1c241b2cf Update github/codeql-action action to v2.2.8 2023-03-23 06:46:12 +00:00
renovate[bot]
ad0e8fa8b2 Update ASF-ui digest to 8d93ead 2023-03-23 03:51:28 +00:00
ArchiBot
0b5a0875f6 Automatic translations update 2023-03-23 02:13:16 +00:00
ArchiBot
70e996829b Automatic translations update 2023-03-22 02:13:59 +00:00
Łukasz Domeradzki
93f3221378 Misc 2023-03-21 13:03:06 +01:00
ArchiBot
512df5c5e5 Automatic translations update 2023-03-21 02:11:46 +00:00
Archi
d5e5f82e7f Add StartupVideo asset type 2023-03-20 19:53:24 +01:00
ArchiBot
5fa1346f18 Automatic translations update 2023-03-20 02:19:43 +00:00
renovate[bot]
dd62a9ea8e Update ASF-ui digest to 1a81458 2023-03-18 23:09:27 +00:00
renovate[bot]
4796857385 Update ASF-ui digest to 13525c4 2023-03-18 03:09:26 +00:00
Archi
e8679750e1 Bump 2023-03-18 00:33:54 +01:00
Łukasz Domeradzki
dd663f43b9 Closes #2840 (#2843)
* Initial login flow changes

* I hate windows

* Make it compile

* Hehe, you bet

* Another approach

* Misc

* Misc

* Final touches

* Misc

* Okay xpaw

* xPaw update

* Keep set input for reconnection

* Unify login errors

* Add missing registry entry

* Final touches before I lose my sanity
2023-03-17 23:59:46 +01:00
renovate[bot]
25e7e21604 Update ASF-ui digest to 1e372af 2023-03-16 05:43:43 +00:00
renovate[bot]
c4d0c23a0e Update actions/checkout action to v3.4.0 2023-03-15 23:01:55 +00:00
renovate[bot]
2bda115d37 Update github/codeql-action action to v2.2.7 2023-03-15 18:28:53 +00:00
Archi
4d2fdc08c8 Bump 2023-03-15 17:57:06 +01:00
Archi
d2894a8bdc Followup fix 2023-03-15 17:56:24 +01:00
Archi
f685ce598d Bump 2023-03-15 16:07:24 +01:00
Archi
63c206e6c7 Disable revocation check
Likely root cause for https://steamcommunity.com/groups/archiasf/discussions/1/3821906444724042697/
2023-03-15 16:06:53 +01:00
renovate[bot]
b98e23e840 Update ASF-ui digest to e7dad93 2023-03-15 07:05:36 +00:00
renovate[bot]
87cff8f813 Update crowdin/github-action action to v1.7.1 2023-03-14 13:23:03 +00:00
ArchiBot
c337a9b8e1 Automatic translations update 2023-03-14 02:11:37 +00:00
renovate[bot]
c4e75c5b7b Update ASF-ui digest to e6fd69f 2023-03-11 09:06:35 +00:00
ArchiBot
9e59dd69ca Automatic translations update 2023-03-11 02:16:39 +00:00
renovate[bot]
b90707c6d1 Update github/codeql-action action to v2.2.6 2023-03-10 19:05:30 +00:00
renovate[bot]
641dfa4a1d Update docker/setup-buildx-action action to v2.5.0 2023-03-10 11:20:48 +00:00
renovate[bot]
891d6c87c8 Update ASF-ui digest to 3440b7a 2023-03-09 01:25:28 +00:00
renovate[bot]
ccd6720fc1 Update dependency Newtonsoft.Json to v13.0.3 2023-03-08 11:45:46 +00:00
renovate[bot]
7c9bed6441 Update peter-evans/dockerhub-description action to v3.3.0 2023-03-06 07:30:17 +00:00
ArchiBot
4e92de584c Automatic translations update 2023-03-06 02:22:52 +00:00
renovate[bot]
71a70fd274 Update peter-evans/dockerhub-description action to v3.2.0 2023-03-05 04:34:06 +00:00
ArchiBot
554b1fe443 Automatic translations update 2023-03-03 02:53:30 +00:00
ArchiBot
93ee2c38fb Automatic translations update 2023-03-01 02:24:54 +00:00
ArchiBot
8cde60e7d2 Automatic translations update 2023-02-28 02:22:02 +00:00
renovate[bot]
eeef41e67f Update wiki digest to f1dd80f 2023-02-27 18:03:41 +00:00
renovate[bot]
aeba4f2028 Update dependency Markdig.Signed to v0.31.0 2023-02-27 10:07:17 +00:00
renovate[bot]
5794233013 Update ASF-ui digest to 9a59cc9 2023-02-27 10:06:48 +00:00
ArchiBot
95df482938 Automatic translations update 2023-02-27 02:22:18 +00:00
renovate[bot]
a0766ffe41 Update wiki digest to 76c1aa4 2023-02-26 18:15:13 +00:00
Archi
bae511d2cf Bump + misc 2023-02-26 14:11:43 +01:00
Archi
10007e0752 Closes #2824 2023-02-26 13:43:25 +01:00
Łukasz Domeradzki
c89366b0a6 Closes #2827 (#2829) 2023-02-26 10:59:48 +01:00
ArchiBot
402867a025 Automatic translations update 2023-02-26 02:24:02 +00:00
ArchiBot
8223d09524 Automatic translations update 2023-02-25 02:21:51 +00:00
renovate[bot]
2a74778c32 Update github/codeql-action action to v2.2.5 2023-02-24 20:29:28 +00:00
ArchiBot
cb8dad153c Automatic translations update 2023-02-24 02:21:04 +00:00
Archi
f9efaed524 Misc 2023-02-23 17:20:08 +01:00
renovate[bot]
d38b4568eb Update ASF-ui digest to b30b3f5 2023-02-23 04:42:13 +00:00
ArchiBot
afd1c89ca8 Automatic translations update 2023-02-23 02:21:14 +00:00
ArchiBot
259700f899 Automatic translations update 2023-02-22 02:21:44 +00:00
renovate[bot]
fd86ee9823 Update dependency Microsoft.NET.Test.Sdk to v17.5.0 2023-02-21 10:35:08 +00:00
renovate[bot]
207c52e97f Update ASF-ui digest to 8a85633 2023-02-21 02:45:03 +00:00
ArchiBot
1b025481d5 Automatic translations update 2023-02-21 02:22:15 +00:00
ArchiBot
a871d283b0 Automatic translations update 2023-02-20 02:22:26 +00:00
ArchiBot
94f9d580f3 Automatic translations update 2023-02-19 02:22:10 +00:00
renovate[bot]
26193f62a9 Update dependency NLog.Web.AspNetCore to v5.2.2 2023-02-18 08:24:19 +00:00
renovate[bot]
372175b0c0 Update ASF-ui digest to 900dab6 2023-02-18 06:00:56 +00:00
ArchiBot
8322e39f37 Automatic translations update 2023-02-18 02:20:32 +00:00
renovate[bot]
0d4ba1b81d Update ASF-ui digest to 2c9d017 2023-02-17 08:23:08 +00:00
ArchiBot
a63a321072 Automatic translations update 2023-02-17 02:22:54 +00:00
renovate[bot]
a8ce7f2fdd Update ASF-ui digest to 77bbc49 2023-02-16 05:40:51 +00:00
ArchiBot
dfa967535b Automatic translations update 2023-02-16 02:21:45 +00:00
renovate[bot]
f92b77ac2e Update crowdin/github-action action to v1.7.0 2023-02-15 19:37:16 +00:00
renovate[bot]
ddf73e2089 Update JetBrains/qodana-action action to v2022.3.4 2023-02-15 16:10:38 +00:00
ArchiBot
722c79f1ac Automatic translations update 2023-02-15 02:22:15 +00:00
renovate[bot]
67194f6281 Update dependency System.Security.Cryptography.ProtectedData to v7.0.1 2023-02-14 15:24:48 +00:00
renovate[bot]
28289cb673 Update ASF-ui digest to 303ff51 2023-02-14 12:07:46 +00:00
ArchiBot
29d33c7796 Automatic translations update 2023-02-14 02:22:06 +00:00
renovate[bot]
aebb6a26a7 Update ASF-ui digest to 9b128b6 2023-02-13 20:22:52 +00:00
ArchiBot
f357092808 Automatic translations update 2023-02-13 02:22:09 +00:00
renovate[bot]
8cef49f258 Update wiki digest to 56e86e3 2023-02-12 21:01:03 +00:00
Archi
71b39570b3 Misc 2023-02-12 18:49:53 +01:00
Archi
64c5cec113 Misc 2023-02-12 18:48:03 +01:00
ArchiBot
5bdfab5fb2 Automatic translations update 2023-02-12 02:21:50 +00:00
Archi
e1fc57c19c Bump 2023-02-11 16:06:53 +01:00
Archi
f5812fc28a Good job archo 2023-02-11 16:06:23 +01:00
Archi
d7e8710333 Do not announce/match with limited accounts, lockdowns and trade bans, improve ArchiCacheable
We can totally make use of success previously more often
2023-02-11 15:58:15 +01:00
renovate[bot]
a0f521d4f4 Update ASF-ui digest to 4fb4d2d 2023-02-11 06:22:34 +00:00
ArchiBot
f82e79a41b Automatic translations update 2023-02-11 02:20:17 +00:00
renovate[bot]
5b3469cb1b Update github/codeql-action action to v2.2.4 2023-02-10 19:48:51 +00:00
renovate[bot]
dc2b7bc425 Update github/codeql-action action to v2.2.3 2023-02-10 06:47:59 +00:00
ArchiBot
0da63aba2b Automatic translations update 2023-02-10 02:48:29 +00:00
Archi
eee6457a7d Rename 2fasms to 2fafinalize 2023-02-10 00:39:28 +01:00
Łukasz Domeradzki
a12c11d334 Add ArchiSteamFarm.OfficialPlugins.MobileAuthenticator (#2822)
* Initial commit for 2FA plugin

* Shut up netf

* Actually import this authenticator right into ASF, and add safeguards

* Further fixes

* Render device_id in the resulting maFile
2023-02-10 00:37:26 +01:00
Archi
19349cc3c2 Bump 2023-02-09 20:06:46 +01:00
Archi
4b0a0157aa Bump 2023-02-09 17:22:51 +01:00
Archi
e211588915 CD: Publish improvements
Cuts on publishing time and actual work generated
2023-02-09 17:22:31 +01:00
Łukasz Domeradzki
a89cb28255 Add support for win-arm64 (#2821) 2023-02-09 14:08:39 +01:00
renovate[bot]
0b2f694fb0 Update ASF-ui digest to 36d0d00 2023-02-09 03:27:40 +00:00
ArchiBot
7e11e62f92 Automatic translations update 2023-02-09 02:42:36 +00:00
Archi
3236477702 Update qodana link 2023-02-09 03:32:40 +01:00
Archi
8008a04354 Code cleanups and improvements
- Make use of new UnixFileMode, always one native method we need to maintain less
- Add madness support for it, because new feature of course
- Add optional netstandard target and required compatibility for it, so I can test netf-oriented changes easier
2023-02-09 02:25:11 +01:00
Archi
b2c34694ae Misc code improvements 2023-02-08 21:18:20 +01:00
Archi
738a2c3508 Disable failTreshold until false positives are gone
e.g. https://youtrack.jetbrains.com/issue/QD-5167
2023-02-08 21:10:38 +01:00
Archi
06e10fa32a Add initial support for Qodana 2023-02-08 20:57:36 +01:00
Łukasz Domeradzki
d3490b4e92 Add --minimized command-line argument (#2817)
* Add experimental support for --minimized on Windows

* Simplify the code
2023-02-08 16:11:50 +01:00
renovate[bot]
573080e6c0 Update wiki digest to 02f4ac6 2023-02-08 07:03:48 +00:00
renovate[bot]
239cac2f62 Update ASF-ui digest to 07db676 2023-02-07 23:22:53 +00:00
ArchiBot
6db8a7b2b1 Automatic translations update 2023-02-07 02:34:06 +00:00
renovate[bot]
ea6fdafdbf Update docker/setup-buildx-action action to v2.4.1 2023-02-06 14:46:57 +00:00
ArchiBot
e864bd1d78 Automatic translations update 2023-02-06 02:18:32 +00:00
ArchiBot
b41a4ca572 Automatic translations update 2023-02-05 02:22:06 +00:00
Archi
dcdc3d4870 Misc 2023-02-04 20:23:32 +01:00
Archi
dc97558ad5 Misc 2023-02-04 16:02:28 +01:00
renovate[bot]
1cdb597acc Update ASF-ui digest to 56fb974 2023-02-04 05:18:50 +00:00
ArchiBot
1e328f8de8 Automatic translations update 2023-02-04 02:17:59 +00:00
renovate[bot]
bfc50f5861 Update wiki digest to f56cd3d 2023-02-03 13:59:53 +00:00
ArchiBot
04e338ace8 Automatic translations update 2023-02-03 02:22:04 +00:00
Archi
9f272ae490 Misc 2023-02-03 03:00:42 +01:00
Archi
e266b8ad31 Actually, this makes more sense 2023-02-03 02:32:17 +01:00
Archi
a8b28efe43 ASFB HttpClientHandler improvements
We should increase our security by checking against revoked SSL certificates, just in case.

When using proxy, pre-authenticating makes sense since if user provided the credentials, we can be pretty sure they're required and save a roundtrip.
2023-02-03 02:29:55 +01:00
renovate[bot]
6e8672cf84 Update ASF-ui digest to 54d5dc8 2023-02-02 06:11:01 +00:00
ArchiBot
8d7f68381b Automatic translations update 2023-02-02 02:21:18 +00:00
renovate[bot]
d7d67c11f9 Update wiki digest to 829f7e8 2023-02-01 15:58:17 +00:00
renovate[bot]
1f711f03d1 Update ASF-ui digest to 30f0bf0 2023-02-01 07:56:17 +00:00
ArchiBot
67e989b2a5 Automatic translations update 2023-02-01 02:24:04 +00:00
Archi
fd3ebe2819 Bump 2023-01-31 22:21:00 +01:00
Archi
17d9c9bc22 Prefer maximum compression on compressed requests
We have many clients and a single server, pushing additional work at the clients will typically degrade the effective speed with which the data can be transmitted, but will allow our server to handle more requests concurrently due to less bandwidth used, and will positively affect the bandwidth used for both server and the client.
2023-01-31 22:19:41 +01:00
renovate[bot]
d4efe537d9 Update docker/build-push-action action to v4 (#2813)
Co-authored-by: renovate[bot] <29139614+renovate[bot]@users.noreply.github.com>
2023-01-31 15:07:31 +01:00
ArchiBot
95005565db Automatic translations update 2023-01-31 02:21:58 +00:00
renovate[bot]
c538eab00e Update docker/build-push-action action to v3.3.1 2023-01-30 21:56:28 +00:00
renovate[bot]
63ccf65ba0 Update docker/setup-buildx-action action to v2.4.0 2023-01-30 13:02:37 +00:00
ArchiBot
dcbd69f7e6 Automatic translations update 2023-01-30 02:18:12 +00:00
Archi
2b0c29d005 Oh right, this too 2023-01-29 23:02:48 +01:00
Archi
4b5a75eebc Satisfy netf, I'm too lazy to add madness support for it now 2023-01-29 23:00:35 +01:00
Archi
be8a441e2e Add ArchiSteamFarm.CustomPlugins.SignInWithSteam 2023-01-29 22:51:25 +01:00
renovate[bot]
aff62da00e Update ASF-ui digest to 22692a1 2023-01-29 05:44:06 +00:00
ArchiBot
f40600bccf Automatic translations update 2023-01-29 02:21:16 +00:00
renovate[bot]
6fc5de4105 Update docker/setup-buildx-action action to v2.3.0 2023-01-28 04:57:51 +00:00
ArchiBot
c7f35670bf Automatic translations update 2023-01-28 02:20:33 +00:00
renovate[bot]
36c9ace28e Update wiki digest to ec5b9ab 2023-01-27 21:30:43 +00:00
renovate[bot]
bab539ece3 Update ASF-ui digest to a3e6e1f 2023-01-27 05:04:18 +00:00
ArchiBot
1542efcda4 Automatic translations update 2023-01-27 02:20:39 +00:00
renovate[bot]
8129f1d707 Update ASF-ui digest to 5784179 2023-01-26 17:46:38 +00:00
renovate[bot]
142e574c5a Update crowdin/github-action action to v1.6.0 2023-01-26 09:47:49 +00:00
ArchiBot
b2871523c1 Automatic translations update 2023-01-26 02:19:40 +00:00
Sebastian Göls
0c125db118 Happy new year! (#2809) 2023-01-25 15:43:12 +01:00
renovate[bot]
dbcfef99be Update ASF-ui digest to 11f5159 2023-01-25 14:29:52 +00:00
ArchiBot
c49008400f Automatic translations update 2023-01-25 02:19:22 +00:00
Archi
ebd8cbf270 Remove no longer needed debugging leftover
Since interactive console is much more convenient to debug with, this no longer serves any purpose
2023-01-24 23:25:39 +01:00
Archi
b323a17fba Bump 2023-01-24 23:21:25 +01:00
Archi
4798b29bff Misc 2023-01-24 23:00:27 +01:00
Łukasz Domeradzki
df4f8d1e62 Improve fairness logic (#2807)
* Improve fairness logic

* Add unit test against abuse

* Further simplify the code

That first pass is not needed anymore, first loop covers it
2023-01-24 22:55:15 +01:00
Archi
00f7d2bfb9 Closes #2787 2023-01-24 22:49:41 +01:00
renovate[bot]
5ab1971018 Update ASF-ui digest to 94ce7b1 2023-01-24 05:32:33 +00:00
ArchiBot
841b80c297 Automatic translations update 2023-01-24 02:18:42 +00:00
Archi
10f2471332 CD: Upload sha512 sums first
So I can !asfapprove faster, lol
2023-01-24 02:27:37 +01:00
Archi
fccb455676 Bump 2023-01-24 01:40:27 +01:00
Archi
c9bc71462e Misc 2023-01-24 01:39:46 +01:00
Archi
e0f9fe3555 Skip empty nickname in self persona state callback 2023-01-24 01:29:55 +01:00
Archi
8bb48d829e STD: Add support for KnownDepotIDs 2023-01-23 12:08:30 +01:00
Archi
4c166102c5 Misc 2023-01-23 11:30:01 +01:00
Archi
a91a4aada6 Fetch main depot key only if we managed to fetch some other ones 2023-01-23 11:25:20 +01:00
renovate[bot]
e05139ea7f Update ASF-ui digest to a3cc476 2023-01-23 04:25:35 +00:00
ArchiBot
6119d33ab8 Automatic translations update 2023-01-23 02:18:51 +00:00
renovate[bot]
5905412d82 Update ASF-ui digest to b2dd529 2023-01-22 04:07:36 +00:00
ArchiBot
7596a89baa Automatic translations update 2023-01-22 02:20:35 +00:00
Archi
7e7fd3bab4 Bump 2023-01-21 23:28:23 +01:00
Archi
8ab6137ab1 Ensure we don't skip announcement if our trade token has changed
We don't care about nickname or avatar hash, even total amount of items is not that important, but trade token is crucial for matching
2023-01-21 23:23:08 +01:00
Archi
a01ea00873 STD: Add 500ms delay between depot key requests 2023-01-21 21:16:01 +01:00
Archi
4cb8244353 Move to announce endpoint v3
By using ordered list for json body, we can further minimize amount of data sent by getting rid of the index.

We still need previous asset ID, as we send only a subset of real data and server is unable to calculate it from the data sent.
2023-01-21 20:32:42 +01:00
renovate[bot]
41fef74e36 Update ASF-ui digest to 80e6bd5 2023-01-21 03:42:51 +00:00
ArchiBot
58376c0a10 Automatic translations update 2023-01-21 02:18:43 +00:00
Archi
628386859b Misc 2023-01-20 14:22:57 +01:00
Archi
1b0fe9cf45 Add desktop entry for generic and generic-netf too 2023-01-20 14:21:03 +01:00
Archi
946e88fb51 Remove unnecessary quotation 2023-01-20 13:56:33 +01:00
Archi
eed29fc330 Add desktop entry for linux 2023-01-20 13:48:31 +01:00
ArchiBot
da4ba2cda7 Automatic translations update 2023-01-20 02:22:00 +00:00
Archi
b9c75e73f0 Do a recovery of single depot tasks 2023-01-19 15:17:47 +01:00
Archi
cca21900a6 Allow STD requests to fail, and continue with other ones 2023-01-19 15:06:06 +01:00
renovate[bot]
a357953d0a Update ASF-ui digest to f813474 2023-01-19 04:37:00 +00:00
ArchiBot
bb58ec75f3 Automatic translations update 2023-01-19 02:36:34 +00:00
Archi
8aad8b6bcf Misc 2023-01-18 23:11:17 +01:00
Archi
1597786668 Bump 2023-01-18 23:01:39 +01:00
Archi
239d523513 Skip announcements during matching 2023-01-18 22:52:25 +01:00
Archi
3165bf62b4 Bump 2023-01-18 14:19:00 +01:00
Archi
bcfeb66ba4 Allow maximum of 10 pending to confirm trade offers at once 2023-01-18 14:16:35 +01:00
renovate[bot]
2e9c1042e1 Update ASF-ui digest to ecf6e1b 2023-01-18 07:22:03 +00:00
ArchiBot
1a26844cd8 Automatic translations update 2023-01-18 02:20:59 +00:00
Archi
7fb32effc1 Bump 2023-01-17 19:44:15 +01:00
Archi
28a3e27a5e Account for failures in a row when sending trade offers
We expect those to be occassional, but getting 5 in a row from 5 different users, that's extremely suspicious
2023-01-17 19:42:29 +01:00
Archi
27639b32d5 Accept all confirmations from ItemsMatcher at once
Previously we accepted those after each trade, because the overhead of loading other inventory was too big to leave those pending. Since we have all possible matches at once now, it makes sense to firstly schedule all trade offers, and then just confirm them all at once, especially since confirmations endpoint is horrific and very often problematic, on top of having 10-seconds rate-limiting.
2023-01-17 19:19:27 +01:00
Archi
5049f82dad Don't stop matching on occassional two factor failure 2023-01-17 19:00:31 +01:00
renovate[bot]
d0a0877a92 Update crowdin/github-action action to v1.5.3 2023-01-17 10:50:00 +00:00
renovate[bot]
70880a9f44 Update ASF-ui digest to 91a1d47 2023-01-17 02:41:35 +00:00
ArchiBot
ece3fb9c55 Automatic translations update 2023-01-17 02:19:39 +00:00
renovate[bot]
27b2061082 Update wiki digest to 2ab9176 2023-01-16 18:24:00 +00:00
ArchiBot
1d5ed1c080 Automatic translations update 2023-01-16 02:20:27 +00:00
Archi
f3593de457 Misc 2023-01-15 22:31:51 +01:00
Archi
8d34e4b798 Bump 2023-01-15 21:51:06 +01:00
Archi
d68b900055 Move http client compression to utilities
We don't really need standalone class, contrary to my first expectation
2023-01-15 21:46:58 +01:00
Archi
164b009a32 Enable response compression also for https in kestrel 2023-01-15 21:37:41 +01:00
Łukasz Domeradzki
ca9cccf5da Add support for request compression (#2805)
* Add support for brotli request compression

* Refactor and add support for netf

* Use fastest compression
2023-01-15 21:26:03 +01:00
renovate[bot]
508130c0bc Update ASF-ui digest to 09afe10 2023-01-15 11:44:34 +00:00
renovate[bot]
c2781fe9d2 Update wiki digest to 3507b52 2023-01-15 05:21:40 +00:00
renovate[bot]
bc8a08b9cc Update ASF-ui digest to 854f95f 2023-01-15 03:09:08 +00:00
ArchiBot
96277fb7a3 Automatic translations update 2023-01-15 02:20:45 +00:00
Archi
fc93f86060 Improve preferences of matching
We should try to match smallest bots first, but since assets are deduplicated exclusively for us, we should use total inventory count instead
2023-01-15 01:04:15 +01:00
Archi
7466db57cf Bump 2023-01-15 00:25:15 +01:00
Archi
e5ff2e9f02 Include TotalInventoryCount for the backend 2023-01-15 00:16:53 +01:00
Archi
88cec38df4 Decrease overhead for calculating tradable sets for announcement
We don't care about classIDs there, only amounts
2023-01-14 23:57:45 +01:00
Archi
d506cf8ed2 Bump 2023-01-14 23:48:57 +01:00
Archi
8e7d05ce5c Skip untradable items for MatchEverything bots 2023-01-14 23:41:25 +01:00
Archi
f9ca0bdb8b Bump 2023-01-14 23:22:42 +01:00
Archi
eada4356f7 Remove MinItemsCount requirement 2023-01-14 23:08:13 +01:00
Archi
ca06d03475 Relax listing requirement
We no longer require 100 tradable items, but rather, 100 total items. We can also further optimize the payload by removing assets where we have no tradable items at all.
2023-01-14 22:24:21 +01:00
Archi
62fd4aee12 Bump 2023-01-14 15:10:38 +01:00
Archi
e6e82e19bd Cut excessive data from announcement
Now that we don't need to transmit whole inventory to the backend anymore, we can cut it to matchable types only
2023-01-14 15:08:28 +01:00
renovate[bot]
289e539c38 Update docker/build-push-action action to v3.3.0 2023-01-14 09:28:45 +00:00
ArchiBot
91f4e47ff6 Automatic translations update 2023-01-14 02:16:04 +00:00
Archi
18cd12040f Bump 2023-01-13 17:17:06 +01:00
Archi
55f7235a32 Misc 2023-01-13 17:16:15 +01:00
Archi
45d434e64e Misc 2023-01-13 10:43:45 +01:00
Łukasz Domeradzki
0261076021 Ignore QUIC exceptions (#2800)
* Ignore QUIC exceptions

See https://github.com/dotnet/runtime/issues/80111

* Update madness

* No i jaki jest twój problem ja się pytam
2023-01-13 10:40:37 +01:00
renovate[bot]
39650c6a4d Update ASF-ui digest to 80b91db 2023-01-13 05:07:57 +00:00
ArchiBot
a29c73e38f Automatic translations update 2023-01-13 02:40:35 +00:00
renovate[bot]
adfaf1e2f4 Update dependency JustArchiNET.Madness to v3.10.0 2023-01-12 17:52:10 +00:00
renovate[bot]
656e98944c Update ASF-ui digest to bdd72e1 2023-01-12 13:33:00 +00:00
Archi
84be0f8077 Misc
We can save some excessive memory I guess
2023-01-12 11:47:45 +01:00
Archi
8cc705feff Skip pointless announcements if possible 2023-01-12 11:42:04 +01:00
renovate[bot]
e248948002 Update swashbuckle-aspnetcore monorepo to v6.5.0 2023-01-12 02:36:40 +00:00
ArchiBot
a3ba0b680d Automatic translations update 2023-01-12 02:35:26 +00:00
Archi
ac5cd5c08b Bump 2023-01-11 20:22:37 +01:00
Archi
ca67285f34 No users to match against is expected 2023-01-11 20:15:19 +01:00
Archi
097ac05ceb Remove assetID from inventories request
Backend doesn't need to know that
2023-01-11 19:16:38 +01:00
Archi
4895a95794 Decrease size of the request
We reached a point where it actually matters whether we say "realAppID" or just "r", since we're doing this sometimes even 600k times, multiplied by 9 properties that we have
2023-01-11 18:40:46 +01:00
Archi
3cadcd16b4 Help ArchiNet calculating previous asset IDs if possible 2023-01-11 18:34:31 +01:00
renovate[bot]
830fc982f7 Update wiki digest to 79da627 2023-01-11 10:47:14 +00:00
ArchiBot
340ef6482b Automatic translations update 2023-01-11 02:36:39 +00:00
renovate[bot]
ae63fe86ec Update ASF-ui digest to d4efcd3 2023-01-10 03:21:02 +00:00
ArchiBot
e4ece7da95 Automatic translations update 2023-01-10 02:40:05 +00:00
renovate[bot]
d9bbf117bc Update wiki digest to 8d8cf78 2023-01-09 20:10:31 +00:00
ArchiBot
bcdfaf36c9 Automatic translations update 2023-01-09 02:18:51 +00:00
ArchiBot
76ff45a7a3 Automatic translations update 2023-01-08 02:21:17 +00:00
renovate[bot]
447125761d Update wiki digest to 1eafa5f 2023-01-07 15:41:40 +00:00
renovate[bot]
94fbcc6a21 Update actions/upload-artifact action to v3.1.2 2023-01-07 03:15:50 +00:00
ArchiBot
743c1c76f6 Automatic translations update 2023-01-07 02:18:15 +00:00
renovate[bot]
7a2972569a Update ASF-ui digest to 2444752 2023-01-06 21:19:06 +00:00
Archi
2b15b9f84e Optimize filtering of no-dupes
Slightly decreases CPU spent, since we calculate sets to remove only once rather than on each entry
2023-01-06 20:58:35 +01:00
renovate[bot]
4b300f27a8 Update actions/download-artifact action to v3.0.2 2023-01-06 08:08:14 +00:00
renovate[bot]
4c315685e7 Update wiki digest to d2d08f2 2023-01-06 05:40:06 +00:00
renovate[bot]
936994704c Update ASF-ui digest to 1172a8d 2023-01-06 02:44:14 +00:00
ArchiBot
873a109f84 Automatic translations update 2023-01-06 02:21:02 +00:00
renovate[bot]
76d7528fe9 Update actions/setup-node action to v3.6.0 2023-01-05 19:47:53 +00:00
renovate[bot]
725ecf7ce8 Update actions/checkout action to v3.3.0 2023-01-05 16:47:18 +00:00
Archi
7289c92273 Bump 2023-01-05 14:30:27 +01:00
Archi
dea715ff1e Decrease announcement time, set listener for finished trade offers 2023-01-05 14:30:08 +01:00
renovate[bot]
8a497fe4d3 Update ASF-ui digest to ba45ee9 2023-01-05 04:38:54 +00:00
ArchiBot
c8e7fae49e Automatic translations update 2023-01-05 02:20:07 +00:00
renovate[bot]
55f8548304 Update wiki digest to 23985bb 2023-01-04 22:34:10 +00:00
renovate[bot]
a1582555ed Update ASF-ui digest to 1bc1482 2023-01-04 09:33:12 +00:00
ArchiBot
70116cb88a Automatic translations update 2023-01-04 02:19:13 +00:00
ArchiBot
e7845422dc Automatic translations update 2023-01-03 02:16:42 +00:00
renovate[bot]
5408c751d3 Update wiki digest to f6b972e 2023-01-02 21:11:52 +00:00
ArchiBot
e83fb7d394 Automatic translations update 2023-01-02 02:17:27 +00:00
Archi
c4b1428be1 Closes #2790 2022-12-31 23:12:52 +01:00
renovate[bot]
526f5f5d10 Update ASF-ui digest to 25d46d7 2022-12-31 11:32:19 +00:00
renovate[bot]
99ee0575b0 Update ASF-ui digest to 5940bd4 2022-12-31 02:44:12 +00:00
ArchiBot
36a140faf2 Automatic translations update 2022-12-31 02:15:37 +00:00
Archi
a5da2c8daf Bump 2022-12-30 17:22:49 +01:00
Archi
9144684df9 I knew I forgot about something 2022-12-30 17:22:21 +01:00
renovate[bot]
bcebccdb5d Update dependency NLog.Web.AspNetCore to v5.2.1 2022-12-30 04:03:40 +00:00
ArchiBot
908dbb90cb Automatic translations update 2022-12-30 02:17:48 +00:00
renovate[bot]
a655569432 Update wiki digest to 49365e6 2022-12-29 23:10:05 +00:00
Archi
91730d6b8c Flush on failed shutdown sequence 2022-12-29 23:53:35 +01:00
Archi
6d0fa9bd2f Wait up to 10 seconds for mutex 2022-12-29 23:41:51 +01:00
Archi
53b8ab6a93 Enough with those bumps, seriously
Boom boom boom boom
2022-12-29 23:25:21 +01:00
Archi
0c340c9123 Misc
We don't need so long time, 5 seconds for starting a process with basic console output is enough
2022-12-29 23:03:40 +01:00
Archi
d0fc189fa4 Make cleanup of old version after update more robuts 2022-12-29 22:57:20 +01:00
Archi
f41d6d53a6 Report warning on listing/matching
If user intentionally enabled STM or MatchActively, we should display him warning if that's not possible due to not meeting the requirements.
2022-12-29 22:25:35 +01:00
Archi
b9ff2e18f4 Misc 2022-12-29 18:02:52 +01:00
Archi
1cb1bd3d67 Honor trading-blacklisted steamIDs over access
This allows to blacklist even masters/owners, in result denying all trade offers from them while still honoring everything else, like commands.

Don't ask me why anybody would need it, ask @Ryzhehvost 😎
2022-12-29 17:55:46 +01:00
renovate[bot]
08bfb16c04 Update ASF-ui digest to a4617d1 2022-12-29 13:12:26 +00:00
renovate[bot]
2f88259c9c Update ASF-ui digest to 78ec7d9 2022-12-29 05:10:35 +00:00
ArchiBot
0e06019213 Automatic translations update 2022-12-29 02:18:12 +00:00
renovate[bot]
3cb5779214 Update wiki digest to 0b18190 2022-12-28 05:22:47 +00:00
renovate[bot]
6951686d39 Update ASF-ui digest to b41e75f 2022-12-28 03:10:16 +00:00
ArchiBot
efc96577dc Automatic translations update 2022-12-28 02:17:05 +00:00
Archi
bcb0aabed9 Bump 2022-12-28 00:45:45 +01:00
Archi
75c62b6de0 Call base constructor while creating BotDatabase
This is a severe edge case. We forgot to call base constructor during creating BotDatabase, which is funny because it wasn't the case for ASF database. This caused event listeners to not be recorded, and therefore changes not being saved. Normally this bug entirely slipped through because on first login, login key is normally saved into the database, and that part always generated the file, with or without the listeners. However, if somebody has UseLoginKeys: false, and doesn't set up ASF 2FA for the bot, and bot database doesn't exist, it won't get created on changes to other bot database properties, that is: farming blacklist, farming priority queue, match actively blacklist and trading blacklist.

Wow, this one is old, I don't know if we didn't have this bug since first version of ASF or something.
2022-12-28 00:26:14 +01:00
renovate[bot]
74ef78b217 Update mstest monorepo to v3.0.2 2022-12-27 17:23:29 +00:00
renovate[bot]
fa03eca6ac Update wiki digest to bde5242 2022-12-27 14:11:44 +00:00
renovate[bot]
dbcdf2f9f5 Update wiki digest to f67dae8 2022-12-27 05:12:51 +00:00
ArchiBot
6f0132e1ad Automatic translations update 2022-12-27 02:15:44 +00:00
Archi
d98fde47a4 Use WebProxy against the server if defined
There are valid use cases for it, e.g. if the ISP decided to block ASF STM server (but whyy)
2022-12-27 03:13:07 +01:00
Archi
905e0e6052 And one more
I assume that O(1) from ContainsKey() will be faster than ordering list of items which at the very least is O(n), likely more
2022-12-26 16:51:52 +01:00
Archi
cc829e46f5 Misc optimization 2022-12-26 16:48:51 +01:00
Archi
f79aff4a74 Bump 2022-12-26 16:42:36 +01:00
Archi
2a83967d2b Closes #2784
I didn't even test this, yolo
2022-12-26 16:25:26 +01:00
ArchiBot
48591cf85a Automatic translations update 2022-12-26 02:17:35 +00:00
ArchiBot
3de7866d80 Automatic translations update 2022-12-25 02:18:33 +00:00
renovate[bot]
c0afdd9b60 Update ASF-ui digest to ec6c5b0 2022-12-24 02:29:06 +00:00
ArchiBot
6b1d2eead0 Automatic translations update 2022-12-24 02:12:48 +00:00
renovate[bot]
29225815bf Update ASF-ui digest to 08ddd7b 2022-12-23 21:46:34 +00:00
Archi
de940c89ab Bump 2022-12-23 22:44:36 +01:00
Archi
b28fcf46a0 Misc 2022-12-23 22:43:55 +01:00
Archi
8fd5f2e883 Fix Archi fuckup
Who would have thought?
2022-12-23 22:42:41 +01:00
Archi
5445d77dbb Shut up netf 2022-12-23 22:19:31 +01:00
Archi
8d5653b41e Add target channel to update command and public API 2022-12-23 22:12:18 +01:00
Archi
4f5dfce269 Fix ExtendedTimeout
If user sets connection timeout to a very low value, such as 10, then even another 10 multiplier might not be enough, we use extended timeout only in very specific cases such as ASF update or ASF STM listing, and we must disregard user preference when dealing with those.
2022-12-23 19:33:38 +01:00
Archi
06d29aebf1 Bump 2022-12-23 18:56:51 +01:00
Archi
4eae3ebf4d Use custom WebBrowser for items matcher
Now this is dictated by at least several reasons:
- Firstly, we must have a WebBrowser per bot, and not per ASF instance, as we preserve ASF STM cookies that are on per-bot basis, which are required e.g. for Announce
- At the same time we shouldn't use Bot's one, because there are settings like WebProxy that shouldn't be used in regards to our own server
- We also require higher timeout than default one, especially for Announce, but also Inventories
- Best we can do is optimize that to not create a WebBrowser for bots that are neither configured for public listing, nor match actively. Since those settings need to be explicitly turned on, we shouldn't be duplicating WebBrowser per each bot instance, but rather only few selected bots configured to participate.
2022-12-23 18:21:43 +01:00
Archi
1daa6728f6 Handle edge case of session invalidation during heartbeats 2022-12-23 16:34:42 +01:00
Archi
71a52eb3b2 Remove unnecessary information from inventories request 2022-12-23 15:31:14 +01:00
Archi
af4a605a8c Optimize inventories request 2022-12-23 15:08:36 +01:00
renovate[bot]
4373e70427 Update ASF-ui digest to 0fd03b3 2022-12-23 04:20:46 +00:00
ArchiBot
647eaaf379 Automatic translations update 2022-12-23 02:17:11 +00:00
renovate[bot]
fdcddb67bf Update ASF-ui digest to 066945a 2022-12-22 16:41:58 +00:00
ArchiBot
5a1fcf79ca Automatic translations update 2022-12-22 02:17:26 +00:00
Vita Chumakova
8897c1d405 Support thousands separator for parsing playtime (#2773) 2022-12-21 17:42:38 +01:00
Archi
a638ed699c Bump 2022-12-21 16:49:39 +01:00
Vita Chumakova
981b347bd4 Fix parsing of possible completed AppIDs (#2772) 2022-12-21 16:46:25 +01:00
Archi
59d1fe409f Add experimental workaround against lack of confirmations 2022-12-21 16:25:16 +01:00
ArchiBot
2b24fbc493 Automatic translations update 2022-12-21 02:16:13 +00:00
renovate[bot]
3b409e3e61 Update mstest monorepo to v3.0.1 2022-12-20 15:47:11 +00:00
renovate[bot]
a1c74cbb22 Update ASF-ui digest to 6948544 2022-12-20 03:54:50 +00:00
ArchiBot
a640658882 Automatic translations update 2022-12-20 02:17:52 +00:00
Archi
c864c11557 Merge branch 'main' of https://github.com/JustArchiNET/ArchiSteamFarm 2022-12-20 01:46:44 +01:00
Archi
a6fee29094 Simplify dockerfiles 2022-12-19 22:50:25 +01:00
renovate[bot]
6f89eaa7bf Update ASF-ui digest to 5eb98e3 2022-12-19 03:52:47 +00:00
ArchiBot
92bd0ad46a Automatic translations update 2022-12-19 02:14:34 +00:00
Archi
b29c33fa0f Misc 2022-12-18 20:05:42 +01:00
Archi
fa9f2dce67 Fix crash on invalid CustomGamePlayedWhileFarming 2022-12-18 19:59:44 +01:00
Archi
b081b8eaba Initialize RemoteCommunication always
This caused people with remote communication of 0 unable to use match actively, which is not required. Remote communication is already coded to handle only what user configures it to do so.
2022-12-18 15:15:39 +01:00
Archi
19cacbecdd Remove Patreon from support 2022-12-18 15:14:58 +01:00
renovate[bot]
2ac8b1fa3e Update ASF-ui digest to 1bb4f84 2022-12-18 03:21:09 +00:00
ArchiBot
470c46af71 Automatic translations update 2022-12-18 02:16:40 +00:00
renovate[bot]
f6cfd9bc7d Update wiki digest to 94b6255 2022-12-17 21:31:05 +00:00
Archi
af8d41892c Misc 2022-12-17 21:18:44 +01:00
Archi
9821e61864 Misc 2022-12-17 20:36:58 +01:00
Archi
b98e1ef7bc Bump 2022-12-17 20:25:54 +01:00
Archi
104d5b7750 Add !match command for ItemsMatcher plugin 2022-12-17 18:27:41 +01:00
Archi
defc1bf80f Add support for full OpenID procedure against ArchiNet 2022-12-17 17:23:20 +01:00
renovate[bot]
abc9a9ef04 Update ASF-ui digest to 58184f4 2022-12-17 13:43:27 +00:00
Archi
6ef8cfca40 Bump 2022-12-17 13:25:10 +01:00
Chr_
94feef586f Update README.md (#2768)
doc upgrade badge's url fix to [Change to GitHub workflow badge routes #8671](https://github.com/badges/shields/issues/8671)
2022-12-17 13:11:07 +01:00
Archi
6ff1d0a2d9 Fix possible crash during matching 2022-12-17 13:09:01 +01:00
renovate[bot]
a6ce3cbfb8 Update ASF-ui digest to 89ba86a 2022-12-17 08:33:55 +00:00
ArchiBot
10241d048f Automatic translations update 2022-12-17 02:15:03 +00:00
Archi
fc63c28b05 Use local cache for BadBots in case server is unavailable
Bad actors might attempt to DDoS the server in order to refuse the service, fallback to local cache if that happens.
2022-12-17 03:11:07 +01:00
Archi
7614002501 Bump 2022-12-17 02:44:15 +01:00
Archi
be5ec43772 Add support for automatically rejecting trade offers from bad bots
With special dedication to the guy who attempted to DDoS ASF STM listing today, hope your business will truly expand from now on! <3
2022-12-17 02:39:37 +01:00
renovate[bot]
e6ac3f7daf Update wiki digest to 1cc02e6 2022-12-16 21:58:49 +00:00
Archi
a41ef5dd65 Bump 2022-12-16 20:36:01 +01:00
Archi
14efac34aa Misc 2022-12-16 20:11:00 +01:00
Archi
643b8a60fc Announce to the listing sooner if inventory has changed
We should announce to the listing at least each 60 minutes, but we should do it faster if we know that our inventory has changed. With this logic we can report in up to 1 minute since the change, which should provide very up-to-date state, but at the same time we still limit amount of announcements to not more than one per 5 minutes.
2022-12-16 19:57:32 +01:00
renovate[bot]
047a3ca1d9 Update dependency Microsoft.NET.Test.Sdk to v17.4.1 2022-12-16 12:46:11 +00:00
renovate[bot]
e3d15dd71b Update wiki digest to 0081d54 2022-12-16 07:25:10 +00:00
renovate[bot]
43057302da Update ASF-ui digest to b4186d3 2022-12-16 05:02:28 +00:00
Archi
8b6c6dea15 Include translations for ItemsMatcher 2022-12-16 05:18:16 +01:00
ArchiBot
1c99f2476d Automatic translations update 2022-12-16 02:15:28 +00:00
Archi
7894b0132f Update RemoteCommunication on bot modules reload
Archi, you designed that interface yourself exactly for this purpose, silly!

This way bot reload in config will trigger remote communication changes.
2022-12-15 22:02:19 +01:00
Archi
5c53f65bc1 Update Directory.Build.props 2022-12-15 20:50:38 +01:00
Archi
55c0b08d93 If there's something wrong, with netf code, who you gonna call?
If you're all alone
Pick up the phone
And call...

ARCHINET MADNESS
2022-12-15 20:16:23 +01:00
Archi
fc20b6cfc4 Final Rider inspections 2022-12-15 19:23:46 +01:00
Archi
c9cae6e258 I wonder if netf understands nint 2022-12-15 19:17:48 +01:00
Archi
4e382732d9 Misc refactor 2022-12-15 19:16:28 +01:00
Łukasz Domeradzki
98ef37e722 Extract PublicListing and MatchActively to a plugin, resurrect MatchActively (#2759)
* Start work on extracting remote communication

* ok

* Dockerfile fixes

* More fixes

* Prepare /Api/Announce and /Api/HeartBeat

* Decrease publish race conditions

* OK

* Misc

* Misc

* Misc

* Move Steam group part back to ASF core

* Finally implement match actively v2 core

* Update RemoteCommunication.cs

* Use single round exclusively, report inventories more often

* Use randomization when asking others for assetIDs

* Add support for license and crowdin

* Kill dead code

* Fix return type of inventories

* Fix responses for good

* Unify old backend with new

* Report whole inventory, always

Helps with optimization on the backend side in terms of inventory fetching

* Update RemoteCommunication.cs

* Determine index of each asset and tell server about it

* Update AnnouncementRequest.cs

* Fix ASF screwing up with the order

* Fix warnings

* Misc rename

* Final logging touches
2022-12-15 18:46:37 +01:00
Archi
fd517294d1 Closes #2763 2022-12-15 17:44:38 +01:00
3ncy
3be6bf8aca Add steam awards badge id to blacklist (#2764) 2022-12-15 14:18:18 +01:00
ArchiBot
0f4a0d24f0 Automatic translations update 2022-12-15 02:22:15 +00:00
renovate[bot]
1c15b5940d Update ASF-ui digest to 81151ec 2022-12-14 21:28:31 +00:00
ArchiBot
7b4e9209d5 Automatic translations update 2022-12-14 02:22:14 +00:00
renovate[bot]
627174eb6b Update dotnet monorepo to v3.1.32 2022-12-13 15:07:10 +00:00
renovate[bot]
1bdf0b3f29 Update ASF-ui digest to fe12613 2022-12-13 03:55:24 +00:00
ArchiBot
13a55a1df8 Automatic translations update 2022-12-13 02:23:04 +00:00
renovate[bot]
1da32509d7 Update actions/checkout action to v3.2.0 2022-12-12 20:07:35 +00:00
renovate[bot]
e0b1bbc6e0 Update ASF-ui digest to 2eb30ba 2022-12-12 16:34:14 +00:00
renovate[bot]
2b6996e77b Update crowdin/github-action action to v1.5.2 2022-12-12 14:00:08 +00:00
renovate[bot]
cf8773c610 Update wiki digest to 868b8d8 2022-12-12 10:23:54 +00:00
ArchiBot
150eb2d624 Automatic translations update 2022-12-12 02:22:33 +00:00
renovate[bot]
a53a194e6b Update wiki digest to 34e1201 2022-12-11 15:52:49 +00:00
renovate[bot]
0cfdbf6b1a Update wiki digest to 9f99c23 2022-12-11 05:49:34 +00:00
ArchiBot
59130bd244 Automatic translations update 2022-12-11 02:22:36 +00:00
ArchiBot
4b86438686 Automatic translations update 2022-12-10 02:20:35 +00:00
renovate[bot]
9f6b9c211b Update wiki digest to d7fc5d3 2022-12-09 21:42:34 +00:00
renovate[bot]
f468e641ba Update ASF-ui digest to 9d04f4f 2022-12-09 06:02:44 +00:00
ArchiBot
05aadd45c9 Automatic translations update 2022-12-09 02:39:02 +00:00
ArchiBot
51b9708f8d Automatic translations update 2022-12-08 02:39:15 +00:00
renovate[bot]
c7040cc9bd Update mstest monorepo to v3 (#2758)
Co-authored-by: renovate[bot] <29139614+renovate[bot]@users.noreply.github.com>
2022-12-07 01:47:06 +01:00
ArchiBot
cde0e2b654 Automatic translations update 2022-12-05 02:20:11 +00:00
renovate[bot]
7a628873a9 Update ASF-ui digest to 3d6ac84 2022-12-04 12:19:22 +00:00
renovate[bot]
ec539ea483 Update dessant/lock-threads action to v4 (#2756)
Co-authored-by: renovate[bot] <29139614+renovate[bot]@users.noreply.github.com>
2022-12-04 13:18:49 +01:00
renovate[bot]
512a479c95 Update ASF-ui digest to 57a0ea4 2022-12-04 04:59:08 +00:00
ArchiBot
a65a8aeb47 Automatic translations update 2022-12-04 02:20:58 +00:00
renovate[bot]
4101d44b9c Update wiki digest to 5d923be 2022-12-03 20:17:20 +00:00
renovate[bot]
5309547882 Update ASF-ui digest to 3383f7a 2022-12-03 03:09:12 +00:00
ArchiBot
761c278b76 Automatic translations update 2022-12-03 02:17:02 +00:00
JustArchi
e994dca817 Remove inventory count that no longer does anything anyway 2022-12-03 00:09:33 +01:00
ArchiBot
9ea2d56f4b Automatic translations update 2022-12-02 02:21:40 +00:00
renovate[bot]
fe2eee859f Update ASF-ui digest to 475bc27 2022-12-01 05:38:33 +00:00
ArchiBot
e5126cf7d4 Automatic translations update 2022-12-01 02:32:21 +00:00
renovate[bot]
d67e5ebc0a Update wiki digest to d3fc532 2022-11-30 15:04:02 +00:00
JustArchi
f38d6a8ab0 Bump 2022-11-29 13:57:48 +01:00
ArchiBot
113e0c9b3c Automatic translations update 2022-11-29 02:23:28 +00:00
JustArchi
32a2c1b232 Misc improvements to OnRenamed() 2022-11-28 22:57:02 +01:00
renovate[bot]
c84e265133 Update ASF-ui digest to c348d68 2022-11-28 17:44:05 +00:00
ArchiBot
462e7785c7 Automatic translations update 2022-11-28 02:23:33 +00:00
renovate[bot]
0bc0060b3a Update dependency NLog.Web.AspNetCore to v5.2.0 2022-11-27 17:29:58 +00:00
JustArchi
d87c5a23cf Update SECURITY.md 2022-11-27 15:34:28 +01:00
JustArchi
bbd2892875 Bump 2022-11-27 15:30:07 +01:00
JustArchi
e6171456c3 Retry inventory requests on error 29 2022-11-27 15:12:25 +01:00
JustArchi
4816cd006d Fix possible InvalidOperationException on OldName
I don't know how it's possible, MSDN docs don't mention it, but since it's nullable, this should help.
2022-11-27 14:25:03 +01:00
ArchiBot
239c536815 Automatic translations update 2022-11-27 02:26:37 +00:00
renovate[bot]
6e138421f6 Update wiki digest to ca3def1 2022-11-26 23:52:12 +00:00
ArchiBot
8e13a066b8 Automatic translations update 2022-11-26 02:22:44 +00:00
ArchiBot
7df7d3400b Automatic translations update 2022-11-25 02:24:04 +00:00
JustArchi
f2d492ebd4 Misc reorder 2022-11-25 00:51:28 +01:00
renovate[bot]
7228ad2bfc Update ASF-ui digest to 2ac1daf 2022-11-24 08:06:56 +00:00
renovate[bot]
0d0ebf80bc Update dependency Newtonsoft.Json to v13.0.2 2022-11-24 03:23:04 +00:00
ArchiBot
afe9842f76 Automatic translations update 2022-11-24 02:23:42 +00:00
Archi
caa54a7f2b Run RemoteCommunication also in Debug builds
Originally it was to not spam the server with irrelevant data, but sometimes I'm also debugging that part and it's counter-intuitive. If somebody doesn't want that during debugging, he has bot config option for that.
2022-11-23 12:08:27 +01:00
Archi
13480a44ff Add AcceptLanguage header by default
Won't hurt and may help with content that isn't explicitly defined (like ?l=)
2022-11-23 12:07:23 +01:00
ArchiBot
d794ffd58c Automatic translations update 2022-11-23 02:25:01 +00:00
renovate[bot]
9350e646d5 Update ASF-ui digest to 3b7fb96 2022-11-22 03:38:04 +00:00
ArchiBot
f8a1a84df1 Automatic translations update 2022-11-22 02:31:37 +00:00
ArchiBot
d3c5236fea Automatic translations update 2022-11-20 02:34:38 +00:00
renovate[bot]
f0190ad541 Update ASF-ui digest to d4f1bd8 2022-11-19 04:59:49 +00:00
ArchiBot
0a58483901 Automatic translations update 2022-11-19 02:28:50 +00:00
ArchiBot
6a82eac54c Automatic translations update 2022-11-18 02:34:35 +00:00
renovate[bot]
6f976dd7e9 Update wiki digest to f617dd0 2022-11-17 17:29:01 +00:00
JustArchi
3dfecef79b Bump 2022-11-17 14:32:03 +01:00
JustArchi
a5303ced19 Fix publish 2022-11-17 14:31:33 +01:00
JustArchi
5580546022 Bump 2022-11-17 13:43:22 +01:00
Sebastian Göls
55771915b9 Fix typo (#2744) 2022-11-17 13:40:28 +01:00
JustArchi
93b67b8f95 Update publish.yml 2022-11-17 10:59:31 +01:00
renovate[bot]
9d795e7337 Update crowdin/github-action action to v1.5.1 2022-11-17 08:19:59 +00:00
renovate[bot]
513c21c58e Update ASF-ui digest to 1ea2865 2022-11-17 06:02:11 +00:00
ArchiBot
90e5ea38ed Automatic translations update 2022-11-17 02:30:43 +00:00
JustArchi
f0473c4119 Update publish.yml 2022-11-16 22:40:27 +01:00
JustArchi
345f94d7e7 Update publish.yml 2022-11-16 16:41:49 +01:00
JustArchi
70ec5cb6d4 Make OS-specific packages work again
At least to the point of being able to self-update, that is
2022-11-16 16:07:29 +01:00
JustArchi
3b7e4479a1 Closes #2739 2022-11-16 13:56:41 +01:00
JustArchi
8d2b07e671 Thanks osx 2022-11-16 13:48:59 +01:00
JustArchi
22b7494586 Fine I'll just use bash 2022-11-16 13:41:26 +01:00
JustArchi
29a3168d49 CD: Fix non-working limit of jobs 2022-11-16 13:07:21 +01:00
JustArchi
14421b606e Fix build 2022-11-16 12:35:14 +01:00
JustArchi
3cf4ef3466 Address SYSLIB1045 2022-11-16 12:33:17 +01:00
JustArchi
cee7cd03b2 Use culture invariant refex for owns command 2022-11-16 12:30:21 +01:00
ArchiBot
f395604193 Automatic translations update 2022-11-16 02:33:39 +00:00
renovate[bot]
58b1f0f6c4 Update ASF-ui digest to 516b64d 2022-11-15 22:55:25 +00:00
ArchiBot
82282230e7 Automatic translations update 2022-11-15 02:32:31 +00:00
JustArchi
9ffa74ae7a Merge branch 'main' of https://github.com/JustArchiNET/ArchiSteamFarm 2022-11-15 00:27:59 +01:00
JustArchi
ea32ec55fc Closes #2690 2022-11-15 00:27:52 +01:00
JustArchi
42abea414b Misc 2022-11-15 00:12:41 +01:00
renovate[bot]
f2c8f2d349 Update dotnet monorepo to v7 (#2732)
Co-authored-by: renovate[bot] <29139614+renovate[bot]@users.noreply.github.com>
2022-11-15 00:12:30 +01:00
JustArchi
9ba8e021d2 Add compat for generic-netf 2022-11-14 23:57:11 +01:00
JustArchi
f3255665ad Update NativeMethods.cs 2022-11-14 23:46:07 +01:00
JustArchi
0a5a447b6d Address SYSLIB1054 2022-11-14 23:42:44 +01:00
Łukasz Domeradzki
8bf2504acf .NET 7 (#2733)
* Initial changes to target .NET 7

* Update Directory.Build.props

* Update publish.yml

* Limit max publish jobs further
2022-11-14 23:38:56 +01:00
renovate[bot]
27e63c3849 Update ASF-ui digest to 9c3053e 2022-11-14 13:26:36 +00:00
renovate[bot]
d2ca725016 Update ASF-ui digest to 3e58280 2022-11-14 03:01:14 +00:00
ArchiBot
cd32c90c68 Automatic translations update 2022-11-14 02:35:33 +00:00
renovate[bot]
3bf0c76c7f Update ASF-ui digest to 836539f 2022-11-13 19:25:50 +00:00
renovate[bot]
9ced15cd5a Update ASF-ui digest to d7042dc 2022-11-13 04:02:05 +00:00
ArchiBot
19de1644bd Automatic translations update 2022-11-13 02:35:45 +00:00
ArchiBot
24195022b6 Automatic translations update 2022-11-12 02:34:31 +00:00
ArchiBot
3edebc9f0e Automatic translations update 2022-11-11 02:37:54 +00:00
renovate[bot]
5dc5cc6524 Update ASF-ui digest to 1fb979c 2022-11-10 04:43:04 +00:00
ArchiBot
45e8f55971 Automatic translations update 2022-11-10 02:37:26 +00:00
renovate[bot]
d37707b523 Update ASF-ui digest to 4ea6b68 2022-11-09 20:03:21 +00:00
renovate[bot]
f55f58a8ef Update ASF-ui digest to bbe8d74 2022-11-09 07:21:11 +00:00
ArchiBot
d524fc939f Automatic translations update 2022-11-09 02:40:09 +00:00
renovate[bot]
100e2d58ad Update dotnet monorepo to v3.1.31 2022-11-08 17:05:13 +00:00
renovate[bot]
9a10aeb4f1 Update ASF-ui digest to bc1e024 2022-11-08 05:05:44 +00:00
ArchiBot
bd8fda2d9b Automatic translations update 2022-11-08 02:36:36 +00:00
renovate[bot]
dca76c5bbe Update dependency JetBrains.Annotations to v2022.3.1 2022-11-07 22:17:25 +00:00
renovate[bot]
792d1807a7 Update dependency Microsoft.NET.Test.Sdk to v17.4.0 2022-11-07 15:07:37 +00:00
renovate[bot]
cfcbfabe6c Update peter-evans/dockerhub-description action to v3.1.2 2022-11-07 08:51:17 +00:00
ArchiBot
72a6955ee1 Automatic translations update 2022-11-07 02:36:54 +00:00
renovate[bot]
163aab742c Update ASF-ui digest to 78aabee 2022-11-06 12:53:50 +00:00
ArchiBot
4eb3f07426 Automatic translations update 2022-11-06 02:37:55 +00:00
renovate[bot]
d0ba18a031 Update ASF-ui digest to 8c726f1 2022-11-05 00:19:46 +00:00
renovate[bot]
4805c82238 Update ASF-ui digest to 783b859 2022-11-04 06:31:30 +00:00
ArchiBot
3410f84279 Automatic translations update 2022-11-04 02:40:22 +00:00
renovate[bot]
e4f3cc0bd5 Update ASF-ui digest to d0b96cb 2022-11-03 21:41:49 +00:00
ArchiBot
38d3e1e0cb Automatic translations update 2022-11-03 02:38:03 +00:00
renovate[bot]
6a84848a22 Update ASF-ui digest to 39a6430 2022-11-02 16:28:30 +00:00
renovate[bot]
0feb9196e6 Update crowdin/github-action action to v1.5.0 2022-11-02 08:57:50 +00:00
ArchiBot
510193cfc6 Automatic translations update 2022-11-02 02:46:27 +00:00
ArchiBot
c6f830fa27 Automatic translations update 2022-11-01 02:49:10 +00:00
renovate[bot]
fa7f39d2a7 Update ASF-ui digest to 1049327 2022-10-31 14:28:45 +00:00
ArchiBot
cae8180e6c Automatic translations update 2022-10-31 02:47:23 +00:00
ArchiBot
f3eb46ea75 Automatic translations update 2022-10-30 02:47:54 +00:00
ArchiBot
631e4a1730 Automatic translations update 2022-10-29 02:39:01 +00:00
renovate[bot]
083fefe3d6 Update wiki digest to cb17bbd 2022-10-28 17:25:08 +00:00
JustArchi
ef2d63d918 Bump 2022-10-28 19:18:26 +02:00
JustArchi
bce0649822 Closes #2728 2022-10-28 19:08:14 +02:00
Arkadiusz Sygulski
17563149b6 Update count parameter when loading inventory (#2730)
This change lessers the impacts of recent changes to the endpoint. It is still limited, but at least you can do more than 3 requests 😃
2022-10-28 19:00:05 +02:00
renovate[bot]
0af94d491f Update ASF-ui digest to 5f9969b 2022-10-28 03:49:52 +00:00
ArchiBot
3d674ab781 Automatic translations update 2022-10-28 02:46:25 +00:00
renovate[bot]
c7b39ddad9 Update actions/setup-dotnet action to v3.0.3 2022-10-27 14:46:42 +00:00
JustArchi
8b870b290f Bump 2022-10-27 11:38:44 +02:00
JustArchi
91c28c60de Madness to the rescue!
I need a hero
I'm holding out for a hero 'til the end of the night
He's gotta be strong, and he's gotta be fast
And he's gotta be fresh from the fight
2022-10-27 11:25:48 +02:00
JustArchi
ea7b944114 Include http errors in GetInventoryAsync()
And stop actively matching on first 429
2022-10-27 10:46:00 +02:00
renovate[bot]
2420f39718 Update ASF-ui digest to 3fd9239 2022-10-27 05:48:42 +00:00
ArchiBot
bb1f55d809 Automatic translations update 2022-10-27 02:40:59 +00:00
renovate[bot]
49858fa18e Update ASF-ui digest to 931fede 2022-10-26 16:56:22 +00:00
renovate[bot]
4be3a59704 Update dependency NLog.Web.AspNetCore to v5.1.5 2022-10-26 03:46:34 +00:00
ArchiBot
0d8cb84b06 Automatic translations update 2022-10-26 02:43:03 +00:00
ArchiBot
0b36b92d62 Automatic translations update 2022-10-23 02:49:31 +00:00
renovate[bot]
98938db3d2 Update ASF-ui digest to 466d60e 2022-10-22 21:05:06 +00:00
renovate[bot]
cf3e319489 Update actions/upload-artifact action to v3.1.1 2022-10-22 04:36:59 +00:00
renovate[bot]
a7619f7ff5 Update ASF-ui digest to b3d124c 2022-10-21 23:09:51 +00:00
renovate[bot]
5bb32c4e94 Update crowdin/github-action action to v1.4.16 2022-10-21 08:39:26 +00:00
renovate[bot]
1421152e27 Update actions/download-artifact action to v3.0.1 2022-10-21 02:55:32 +00:00
ArchiBot
354b58970e Automatic translations update 2022-10-21 02:38:05 +00:00
renovate[bot]
9d30f68a85 Update ASF-ui digest to cf4a35f 2022-10-20 14:43:43 +00:00
ArchiBot
bf5188530d Automatic translations update 2022-10-20 02:50:03 +00:00
renovate[bot]
98b121a7bd Update ASF-ui digest to f2f6a53 2022-10-19 04:39:03 +00:00
ArchiBot
557f0304a2 Automatic translations update 2022-10-19 02:49:40 +00:00
renovate[bot]
b0632a6c8d Update crazy-max/ghaction-import-gpg action to v5.2.0 2022-10-18 22:39:20 +00:00
renovate[bot]
ce37888609 Update peter-evans/dockerhub-description action to v3.1.1 2022-10-18 12:48:17 +00:00
renovate[bot]
7aa862731f Update docker/setup-buildx-action action to v2.2.1 2022-10-18 09:37:22 +00:00
ArchiBot
1abfd37d71 Automatic translations update 2022-10-18 02:50:37 +00:00
renovate[bot]
77e12476e0 Update ASF-ui digest to 30ff9f6 2022-10-17 19:51:56 +00:00
renovate[bot]
4b170a5c12 Update docker/setup-buildx-action action to v2.2.0 2022-10-17 16:45:38 +00:00
renovate[bot]
07f659d22c Update crowdin/github-action action to v1.4.15 2022-10-17 13:55:10 +00:00
ArchiBot
c72d7009dc Automatic translations update 2022-10-17 02:50:32 +00:00
ArchiBot
9f33fa5e72 Automatic translations update 2022-10-16 02:51:19 +00:00
renovate[bot]
9a55ab7518 Update ASF-ui digest to 31907d9 2022-10-14 10:17:24 +00:00
renovate[bot]
5985d07719 Update ASF-ui digest to 2e6b6af 2022-10-13 21:24:08 +00:00
renovate[bot]
fac5204ad2 Update actions/setup-dotnet action to v3.0.2 2022-10-13 18:16:11 +00:00
renovate[bot]
1a298143b7 Update actions/setup-node action to v3.5.1 2022-10-13 14:37:29 +00:00
renovate[bot]
00d3f9ced3 Update docker/setup-buildx-action action to v2.1.0 2022-10-12 17:03:13 +00:00
renovate[bot]
d810c64120 Update docker/login-action action to v2.1.0 2022-10-12 13:16:01 +00:00
JustArchi
47d89415b4 Bump 2022-10-12 13:53:20 +02:00
JustArchi
96296028c1 Closes #2719 2022-10-12 13:49:19 +02:00
renovate[bot]
6644ec18de Update docker/build-push-action action to v3.2.0 2022-10-12 08:06:39 +00:00
renovate[bot]
2b7fed251c Update ASF-ui digest to 05cb196 2022-10-12 05:55:06 +00:00
ArchiBot
9cffd3a133 Automatic translations update 2022-10-12 02:50:13 +00:00
renovate[bot]
7581d58aa5 Update dotnet monorepo to v3.1.30 2022-10-11 21:29:10 +00:00
renovate[bot]
24b8b2f9b8 Update ASF-ui digest to 3b6f343 2022-10-11 17:58:26 +00:00
JustArchi
f3bb15670b Handle extreme edge case of ASF_USER=root 2022-10-11 17:16:12 +02:00
JustArchi
5dbe523f59 Bump 2022-10-11 17:03:37 +02:00
JustArchi
319f1218de Closes #2717
chown operation done by ASF is not mandatory for following with the rest of the script. It can fail e.g. for read-only filesystems, which is completely fine, worst case user will have to deal with the mess he has created himself.
2022-10-11 16:30:38 +02:00
renovate[bot]
ee9d145e6b Update ASF-ui digest to b6109e3 2022-10-11 04:33:03 +00:00
ArchiBot
0a70e069e0 Automatic translations update 2022-10-11 02:48:08 +00:00
renovate[bot]
8fdd8e91a6 Update ASF-ui digest to 78152a3 2022-10-10 22:39:46 +00:00
JustArchi
533bf45f35 Thanks netf 2022-10-10 22:57:34 +02:00
JustArchi
6227f84931 Misc cleanup 2022-10-10 22:50:36 +02:00
JustArchi
e6579e4355 Enhance STD plugin errors
- 403: Stop submission for now
- 409: Purge cache and continue
2022-10-10 22:38:35 +02:00
Sebastian Göls
321e02c0ff Add endpoints to manage IPC bans (#2715)
* Add endpoints to manage IPC bans

* Remove debug code

* Misc.

* Simplify unban logic

* Add explanatory comment to new string resource
2022-10-10 19:28:07 +02:00
renovate[bot]
406a5f1fd1 Update ASF-ui digest to 026fc41 2022-10-10 04:41:56 +00:00
ArchiBot
40822dff89 Automatic translations update 2022-10-10 02:49:43 +00:00
Sebastian Göls
f72345aaa2 Ignore in-tree www directory (#2716) 2022-10-09 23:12:49 +02:00
JustArchi
32cdb45e9f Misc 2022-10-09 18:51:34 +02:00
ArchiBot
72cabc51d8 Automatic translations update 2022-10-09 02:49:29 +00:00
renovate[bot]
e62f850a3a Update ASF-ui digest to 1507d9e 2022-10-08 04:11:24 +00:00
ArchiBot
8b62c6c4d2 Automatic translations update 2022-10-08 02:39:06 +00:00
renovate[bot]
f7534cf7ec Update wiki digest to e62d741 2022-10-07 19:18:37 +00:00
JustArchi
8797a7ed78 Bump 2022-10-07 19:39:48 +02:00
JustArchi
a1d729992c Bump 2022-10-07 19:34:18 +02:00
Sebastian Göls
5a182b7522 Add --input-cryptkey argument (#2714)
* Add --input-cryptkey argument

* Improve readability of argument parsing

* Make the compiler shut up

* Remove German translation again

* Revert switch expression

* Fix unused cryptkey

It seems to be late
2022-10-07 19:32:58 +02:00
renovate[bot]
d73c04a2db Update ASF-ui digest to e895aae 2022-10-07 05:43:41 +00:00
renovate[bot]
b57cc367d7 Update ASF-ui digest to e4ba302 2022-10-07 00:57:24 +00:00
ArchiBot
5fe4053f8f Automatic translations update 2022-10-06 02:41:35 +00:00
renovate[bot]
89ff5b7f4d Update ASF-ui digest to 1c49261 2022-10-04 21:47:15 +00:00
renovate[bot]
ed7ae8054a Update actions/checkout action to v3.1.0 2022-10-04 18:03:07 +00:00
renovate[bot]
8bc2fa4334 Update actions/setup-dotnet action to v3.0.1 2022-10-04 14:57:42 +00:00
renovate[bot]
5bf8a364d4 Update ASF-ui digest to 1d2775f 2022-10-04 10:25:58 +00:00
renovate[bot]
0597bda6b9 Update ASF-ui digest to 1a9007e 2022-10-04 03:49:15 +00:00
renovate[bot]
4d084a3573 Update ASF-ui digest to 7544554 2022-10-03 12:53:27 +00:00
renovate[bot]
9322626986 Update ASF-ui digest to d699d7e 2022-10-03 05:57:14 +00:00
ArchiBot
5317f1239b Automatic translations update 2022-10-03 02:37:53 +00:00
renovate[bot]
012ed1b9b9 Update ASF-ui digest to 2960837 2022-10-02 19:51:02 +00:00
renovate[bot]
4ba3e0c536 Update ASF-ui digest to 509fc21 2022-10-02 11:34:19 +00:00
renovate[bot]
c66b52ee1d Update ASF-ui digest to 08da3f3 2022-10-02 09:04:59 +00:00
renovate[bot]
195fb030bb Update ASF-ui digest to 9599510 2022-10-01 17:18:23 +00:00
Łukasz Domeradzki
a5dd87932f Remove CodeStyle for VS (#2708) 2022-10-01 01:28:07 +02:00
JustArchi
31295babac Further enhance ASF systemd hardening
Tested on my rpi
2022-10-01 00:45:48 +02:00
JustArchi
6ee2696c53 Revert "Add explanation to ASF service hardening (#2707)"
This reverts commit f09c7cbb19.
2022-10-01 00:22:39 +02:00
Ms Floofie
f09c7cbb19 Add explanation to ASF service hardening (#2707)
Co-authored-by: Floofie <sysmin@floofie.org>
2022-09-30 20:44:42 +02:00
renovate[bot]
6557d13ceb Update ASF-ui digest to a170960 2022-09-30 05:44:41 +00:00
ArchiBot
34b8f2733c Automatic translations update 2022-09-30 02:50:59 +00:00
renovate[bot]
5398e0a282 Update actions/setup-dotnet action to v3 (#2706)
Co-authored-by: renovate[bot] <29139614+renovate[bot]@users.noreply.github.com>
2022-09-29 22:23:47 +02:00
JustArchi
e7887c8bdf Bump 2022-09-28 10:15:58 +02:00
JustArchi
ee4d5561dd Remove obsolete mapping 2022-09-28 10:15:20 +02:00
renovate[bot]
2838128bd7 Update ASF-ui digest to 855ca01 2022-09-28 04:32:13 +00:00
ArchiBot
40701eef72 Automatic translations update 2022-09-28 02:49:08 +00:00
renovate[bot]
f31bc799ca Update actions/setup-node action to v3.5.0 2022-09-27 13:51:10 +00:00
renovate[bot]
f383f8333e Update dependency Markdig.Signed to v0.30.4 2022-09-27 07:18:37 +00:00
ArchiBot
f9bd7683a6 Automatic translations update 2022-09-27 02:48:11 +00:00
renovate[bot]
d6ef39b5e4 Update actions/setup-dotnet action to v2.1.1 2022-09-26 15:41:18 +00:00
renovate[bot]
58f437ca83 Update dependency Microsoft.NET.Test.Sdk to v17.3.2 2022-09-26 11:32:59 +00:00
ArchiBot
c3c9a41ae1 Automatic translations update 2022-09-26 02:50:22 +00:00
ArchiBot
a810519f76 Automatic translations update 2022-09-25 02:49:42 +00:00
renovate[bot]
1a46ff430a Update ASF-ui digest to 756fc88 2022-09-24 05:23:57 +00:00
ArchiBot
a15c0dbe17 Automatic translations update 2022-09-24 02:50:31 +00:00
ArchiBot
9c34383ec4 Automatic translations update 2022-09-23 02:52:06 +00:00
renovate[bot]
8bed61050d Update ASF-ui digest to 92c7866 2022-09-22 20:09:07 +00:00
renovate[bot]
dfed0ddd51 Update crowdin/github-action action to v1.4.14 2022-09-22 13:38:27 +00:00
renovate[bot]
b67629b05f Update ASF-ui digest to 4c86899 2022-09-22 05:53:36 +00:00
ArchiBot
50c6209c41 Automatic translations update 2022-09-22 02:48:20 +00:00
ArchiBot
d787d73e68 Automatic translations update 2022-09-21 02:51:22 +00:00
renovate[bot]
6bde5527e1 Update wiki digest to f3c68f7 2022-09-20 09:56:06 +00:00
ArchiBot
62dd27bfd8 Automatic translations update 2022-09-20 02:49:47 +00:00
renovate[bot]
5bacb0b194 Update ASF-ui digest to 950546a 2022-09-19 23:02:35 +00:00
renovate[bot]
ba0e7e258e Update ASF-ui digest to 27a1473 2022-09-19 05:22:47 +00:00
ArchiBot
13ab06d455 Automatic translations update 2022-09-19 02:50:50 +00:00
ArchiBot
8bbfb1bf3b Automatic translations update 2022-09-18 02:51:10 +00:00
renovate[bot]
665a832cbd Update ASF-ui digest to 95ecc7c 2022-09-17 03:53:35 +00:00
ArchiBot
3c5527a8d2 Automatic translations update 2022-09-17 02:49:22 +00:00
renovate[bot]
6ca91d7045 Update ASF-ui digest to 0c5d7c0 2022-09-16 14:52:45 +00:00
ArchiBot
d775874e48 Automatic translations update 2022-09-16 02:50:36 +00:00
renovate[bot]
fed3e67b3b Update ASF-ui digest to d11aa29 2022-09-15 05:27:24 +00:00
ArchiBot
4ddb072e9e Automatic translations update 2022-09-15 02:50:51 +00:00
renovate[bot]
bf4b03f562 Update ASF-ui digest to a406c43 2022-09-14 21:00:50 +00:00
renovate[bot]
36ca148bad Update crowdin/github-action action to v1.4.13 2022-09-14 10:31:51 +00:00
renovate[bot]
c50dbe6f68 Update ASF-ui digest to dba9f34 2022-09-14 04:16:45 +00:00
ArchiBot
3bfc831966 Automatic translations update 2022-09-14 02:49:37 +00:00
renovate[bot]
12de692f2a Update dotnet monorepo to v3.1.29 2022-09-13 15:55:26 +00:00
renovate[bot]
52437a62d3 Update wiki digest to 144a207 2022-09-13 12:17:29 +00:00
ArchiBot
5b11623fad Automatic translations update 2022-09-13 02:50:46 +00:00
renovate[bot]
125c8fd58e Update ASF-ui digest to 6714a96 2022-09-12 17:11:46 +00:00
ArchiBot
1b476cd900 Automatic translations update 2022-09-12 02:51:46 +00:00
ArchiBot
22107c1f11 Automatic translations update 2022-09-11 02:49:50 +00:00
ArchiBot
5b527e44e7 Automatic translations update 2022-09-10 02:49:41 +00:00
ArchiBot
c7283ea815 Automatic translations update 2022-09-09 02:51:20 +00:00
JustArchi
722ed3e5a5 Bump 2022-09-08 20:54:07 +02:00
JustArchi
712b53cb72 Add log errors for crypt file edge cases 2022-09-08 20:08:39 +02:00
Łukasz Domeradzki
57956e0ed9 Add support for wallet codes balance (#2699) 2022-09-08 19:59:28 +02:00
JustArchi
dc0502a671 Add support for ASF_CRYPTKEY_FILE 2022-09-08 19:53:36 +02:00
renovate[bot]
3df60fc16d Update ASF-ui digest to adf51a4 2022-09-08 02:38:08 +00:00
JustArchi
813d2e3395 Bump 2022-09-08 00:08:15 +02:00
JustArchi
6ab4e2cdee Bump 2022-09-07 23:32:54 +02:00
JustArchi
cc55e386c9 Upgrade generic-netf to .NET Framework 4.8.1 2022-09-07 23:25:45 +02:00
JustArchi
582f508f33 Remove requirement of wallet currency for redeem wallet keys 2022-09-07 22:55:47 +02:00
JustArchi
63c188cd03 Misc reorder 2022-09-07 19:23:19 +02:00
JustArchi
9fd4ef2b63 Add helpful comment 2022-09-07 19:18:55 +02:00
ArchiBot
9b3f776c92 Automatic translations update 2022-09-07 02:50:25 +00:00
renovate[bot]
448c3c8e51 Update ASF-ui digest to c543ce2 2022-09-06 15:36:21 +00:00
renovate[bot]
af241e29fb Update ASF-ui digest to a189fe6 2022-09-06 04:10:36 +00:00
ArchiBot
734f2064fc Automatic translations update 2022-09-06 02:49:59 +00:00
ArchiBot
f0989465d9 Automatic translations update 2022-09-05 02:49:08 +00:00
ArchiBot
f0c8368c7b Automatic translations update 2022-09-04 02:49:05 +00:00
ArchiBot
672a7da514 Automatic translations update 2022-09-03 02:47:53 +00:00
JustArchi
2755967658 Remove IL2007 from acceptable warnings
Should no longer be needed after NLog update
2022-09-02 20:24:50 +02:00
renovate[bot]
53f7abdaae Update dependency NLog.Web.AspNetCore to v5.1.4 2022-09-02 08:51:22 +00:00
renovate[bot]
d4efa7841a Update dependency NLog.Web.AspNetCore to v5.1.2 (#2696)
* Update dependency NLog.Web.AspNetCore to v5.1.2

* Can we ignore this error?

Co-authored-by: renovate[bot] <29139614+renovate[bot]@users.noreply.github.com>
Co-authored-by: JustArchi <JustArchi@JustArchi.net>
2022-09-02 10:50:59 +02:00
ArchiBot
520063d5b1 Automatic translations update 2022-09-02 02:48:52 +00:00
renovate[bot]
bb859a45b8 Update ASF-ui digest to f894102 2022-09-01 04:19:01 +00:00
ArchiBot
b8ec1890b1 Automatic translations update 2022-09-01 02:47:15 +00:00
renovate[bot]
a103f1406f Update ASF-ui digest to 921b2e6 2022-08-31 11:51:20 +00:00
renovate[bot]
a6c54f4503 Update ASF-ui digest to 74b3793 2022-08-31 01:10:50 +00:00
renovate[bot]
0ec44418f7 Update dependency Microsoft.NET.Test.Sdk to v17.3.1 2022-08-30 13:43:49 +00:00
renovate[bot]
9915dbdd2c Update ASF-ui digest to 573384e 2022-08-30 03:28:04 +00:00
renovate[bot]
f5b9fc3e87 Update ASF-ui digest to 0aff5e8 2022-08-29 06:52:21 +00:00
ArchiBot
a143319405 Automatic translations update 2022-08-29 02:48:25 +00:00
ArchiBot
42d5d3ed12 Automatic translations update 2022-08-28 02:48:20 +00:00
renovate[bot]
f5e9f70280 Update ASF-ui digest to 4621e84 2022-08-27 04:46:42 +00:00
ArchiBot
39832a3114 Automatic translations update 2022-08-27 02:46:50 +00:00
renovate[bot]
82ad062f08 Update ASF-ui digest to 5211a76 2022-08-26 21:49:55 +00:00
ArchiBot
3602f49a1e Automatic translations update 2022-08-26 02:50:47 +00:00
renovate[bot]
58a5c9aa42 Update ASF-ui digest to 852b581 2022-08-25 19:54:50 +00:00
JustArchi
0b83f8ece0 Bump 2022-08-25 21:00:14 +02:00
JustArchi
1e03077dc7 Implement local response of Fail/AlreadyPurchases for addlicense 2022-08-25 20:38:37 +02:00
JustArchi
019893ee43 Rewrite WebBrowser errors logic, again
Maybe THIS TIME after 7 years it'll finally do what I need from it.

TL;DR, if anybody is insane enough to return client/server errors, and expects HtmlDocument or other Object to actually be null, it must be explicitly specified now with allow, to work like 200-OK, where we return only stuff that actually parses
2022-08-25 20:23:37 +02:00
JustArchi
f5d165493d Actually ask community for help in regards to unknown messages 2022-08-25 18:24:05 +02:00
JustArchi
3204d6ec16 Bump 2022-08-25 18:16:41 +02:00
JustArchi
6f0eacf615 Detect RateLimited from store addlicense response 2022-08-25 18:09:55 +02:00
ArchiBot
3584bdf494 Automatic translations update 2022-08-25 02:48:12 +00:00
renovate[bot]
1157af92b1 Update wiki digest to d18bc13 2022-08-24 15:39:51 +00:00
renovate[bot]
79f7b63b55 Update ASF-ui digest to 3c034bc 2022-08-24 06:04:15 +00:00
ArchiBot
ed84d98ded Automatic translations update 2022-08-24 02:45:55 +00:00
renovate[bot]
9ce770691e Update ASF-ui digest to df75529 2022-08-23 18:40:57 +00:00
renovate[bot]
3f9eba35dc Update ASF-ui digest to d44e0e7 2022-08-23 06:52:39 +00:00
ArchiBot
75ab255a98 Automatic translations update 2022-08-23 02:51:03 +00:00
renovate[bot]
bc6a96edc6 Update ASF-ui digest to 1bb95ec 2022-08-22 16:19:53 +00:00
renovate[bot]
28d46acc4f Update ASF-ui digest to f137616 2022-08-21 04:58:22 +00:00
ArchiBot
9912c851dc Automatic translations update 2022-08-21 02:43:38 +00:00
renovate[bot]
e27c272dd6 Update wiki digest to 69b21ad 2022-08-20 11:55:38 +00:00
renovate[bot]
1b3ce37480 Update ASF-ui digest to 1934ba1 2022-08-20 09:31:08 +00:00
ArchiBot
c4e843fc6d Automatic translations update 2022-08-20 02:42:02 +00:00
renovate[bot]
bfbe96ef23 Update ASF-ui digest to 50ec43e 2022-08-19 16:02:21 +00:00
renovate[bot]
ab61915c02 Update ASF-ui digest to f9b648a 2022-08-19 11:55:18 +00:00
renovate[bot]
937fe8d07e Update peter-evans/dockerhub-description action to v3.1.0 2022-08-18 09:48:48 +00:00
renovate[bot]
cbbf743eb2 Update ASF-ui digest to 0d787e8 2022-08-18 04:25:52 +00:00
ArchiBot
f8f3da1a40 Automatic translations update 2022-08-18 02:47:49 +00:00
renovate[bot]
b7d215be89 Update dependency NLog.Web.AspNetCore to v5.1.1 2022-08-17 19:22:45 +00:00
renovate[bot]
0d96f7907e Update wiki digest to a4a6285 2022-08-17 11:55:06 +00:00
renovate[bot]
a8c4c3910a Update ASF-ui digest to f242a6e 2022-08-15 14:54:39 +00:00
renovate[bot]
5a893bddeb Update crowdin/github-action action to v1.4.12 2022-08-15 09:45:56 +00:00
renovate[bot]
da4e867007 Update ASF-ui digest to bd81c3e 2022-08-14 09:03:19 +00:00
renovate[bot]
558fa75dd7 Update ASF-ui digest to 52a1b5d 2022-08-12 19:13:31 +00:00
JustArchi
bdf5bc25d4 Bump 2022-08-12 12:17:57 +02:00
renovate[bot]
8d783f11ae Update dependency Markdig.Signed to v0.30.3 2022-08-12 06:02:17 +00:00
JustArchi
adf83e5284 Try to avoid emitting Madness in netf plugins 2022-08-11 22:53:30 +02:00
JustArchi
bdb8f90a4e Whatever 2022-08-11 22:45:18 +02:00
JustArchi
d67366cd12 Implement cache validity for PackagesData
For unknown to me reason, this breaks for many people with Steam reporting invalid data and ASF caching it until new change number, which may never arrive. Add our own 7-days validity on top, to ensure that user never needs to delete ASF.db manually.
2022-08-11 22:38:19 +02:00
renovate[bot]
065d44738b Update ASF-ui digest to a10fa5d 2022-08-11 05:25:30 +00:00
renovate[bot]
2af5e0ca02 Update dependency Microsoft.NET.Test.Sdk to v17.3.0 2022-08-10 23:37:32 +00:00
renovate[bot]
074127edbb Update ASF-ui digest to a258010 2022-08-10 20:38:22 +00:00
JustArchi
0ceef1b7e2 Fix excessive madness declarations
Already covered by directory build props
2022-08-10 16:56:22 +02:00
renovate[bot]
fd84b16fa0 Update dotnet monorepo to v3.1.28 2022-08-09 16:04:56 +00:00
JustArchi
e9c02a4140 Misc 2022-08-08 12:40:19 +02:00
JustArchi
270a71e83c Misc 2022-08-07 00:35:54 +02:00
JustArchi
7c1dde5c72 Bump 2022-08-06 19:10:48 +02:00
JustArchi
f3229fa45f Implement AngleSharp.XPath breaking changes
Bump of B warranted, more in the release notes
2022-08-06 18:51:32 +02:00
ArchiBot
5c6ca3fee2 Automatic translations update 2022-08-06 02:36:13 +00:00
JustArchi
179affd49c Update Bug-report.yml 2022-08-06 01:14:23 +02:00
JustArchi
79a4638eea Bump 2022-08-05 21:37:01 +02:00
JustArchi
feede84577 Update renovate.json5 2022-08-05 21:36:35 +02:00
JustArchi
f3f71cfb27 Merge branch 'main' of https://github.com/JustArchiNET/ArchiSteamFarm 2022-08-05 21:32:21 +02:00
JustArchi
a785ae3536 Revert "Resolve AngleSharp.XPath issue"
This reverts commit 661786adf2.
2022-08-05 21:32:18 +02:00
renovate[bot]
8663bd1eb4 Update ASF-ui digest to f486cd1 2022-08-05 16:14:24 +00:00
renovate[bot]
b869df538a Update docker/build-push-action action to v3.1.1 2022-08-05 13:50:55 +00:00
renovate[bot]
e8e7d0f1cb Update crowdin/github-action action to v1.4.11 2022-08-04 23:30:41 +00:00
renovate[bot]
bea85a3014 Update ASF-ui digest to a93aaf2 2022-08-04 05:20:18 +00:00
renovate[bot]
07972e3714 Update ASF-ui digest to a03be42 2022-08-03 11:06:31 +00:00
renovate[bot]
13141f35a7 Update ASF-ui digest to 223a661 2022-08-02 13:55:45 +00:00
ArchiBot
47ace2e526 Automatic translations update 2022-07-28 02:39:35 +00:00
renovate[bot]
f44556a863 Update wiki digest to 5f4f2f9 2022-07-27 11:23:49 +00:00
ArchiBot
fa34c853b7 Automatic translations update 2022-07-27 02:46:04 +00:00
renovate[bot]
6b6c60de92 Update ASF-ui digest to 841999d 2022-07-26 04:47:20 +00:00
ArchiBot
4d5152a6ae Automatic translations update 2022-07-26 02:47:11 +00:00
renovate[bot]
d74ae770fe Update ASF-ui digest to e42cb55 2022-07-25 22:16:26 +00:00
renovate[bot]
b8d7f24d50 Update ASF-ui digest to 50009bc 2022-07-25 19:39:20 +00:00
ArchiBot
5063bda7ae Automatic translations update 2022-07-25 02:43:15 +00:00
renovate[bot]
946308366a Update crazy-max/ghaction-import-gpg action to v5.1.0 2022-07-24 19:46:56 +00:00
renovate[bot]
7e84d26d5c Update ASF-ui digest to e0613bf 2022-07-24 19:46:34 +00:00
renovate[bot]
7cae68f14a Update ASF-ui digest to 516ab2e 2022-07-24 03:54:30 +00:00
ArchiBot
f0a2c26a1a Automatic translations update 2022-07-24 02:43:39 +00:00
renovate[bot]
d146525d9c Update ASF-ui digest to cb81c98 2022-07-23 23:49:09 +00:00
Łukasz Domeradzki
0b2cdb63b2 Update SUPPORT.md 2022-07-23 21:16:39 +02:00
renovate[bot]
c7a1713066 Update ASF-ui digest to 91f8e02 2022-07-23 09:31:31 +00:00
ArchiBot
cf23819b48 Automatic translations update 2022-07-23 02:39:11 +00:00
renovate[bot]
78d5234047 Update ASF-ui digest to a21832a 2022-07-22 14:32:26 +00:00
ArchiBot
a0d7ef5856 Automatic translations update 2022-07-22 02:42:34 +00:00
JustArchi
1dc2b1e06e Misc 2022-07-21 16:50:15 +02:00
JustArchi
70fe873eaf Bump 2022-07-21 12:06:38 +02:00
JustArchi
56754053c3 Correct overlay for dockerfiles 2022-07-21 10:41:35 +02:00
JustArchi
cb883cf235 Bump 2022-07-20 22:22:37 +02:00
JustArchi
661786adf2 Resolve AngleSharp.XPath issue 2022-07-20 22:17:08 +02:00
ArchiBot
6c63b6db68 Automatic translations update 2022-07-20 02:41:09 +00:00
renovate[bot]
dfdb0a22a0 Update swashbuckle-aspnetcore monorepo to v6.4.0 2022-07-19 21:28:18 +00:00
Sebastian Göls
41ecfb1d02 Move copying of overlay files to ArchiSteamFarm.csproj (#2650)
* Move copying of overlay files to ArchiSteamFarm.csproj

* Fix build on Windows

* Try to make it more reliable

* Update ArchiSteamFarm.csproj

* Update ArchiSteamFarm.csproj

* Revert "Update ArchiSteamFarm.csproj"

This reverts commit ba41b2e3c1.

* Rename

Co-authored-by: JustArchi <JustArchi@JustArchi.net>
2022-07-19 22:20:18 +02:00
renovate[bot]
25b29cd56e Update docker/build-push-action action to v3.1.0 2022-07-19 15:59:00 +00:00
renovate[bot]
ab5fb6dd1b Update ASF-ui digest to 60a692f 2022-07-19 04:27:13 +00:00
renovate[bot]
75e4557da3 Update dependency NLog.Web.AspNetCore to v5.1.0 2022-07-18 20:41:52 +00:00
renovate[bot]
95c3658197 Update ASF-ui digest to 7ec7898 2022-07-18 14:56:43 +00:00
ArchiBot
26e7f7deb5 Automatic translations update 2022-07-18 02:43:39 +00:00
renovate[bot]
f003dcda0b Update wiki digest to 5974dbb 2022-07-17 13:04:41 +00:00
renovate[bot]
296318060f Update ASF-ui digest to 06d59c3 2022-07-17 01:05:02 +00:00
renovate[bot]
f80b114892 Update ASF-ui digest to 463b788 2022-07-16 19:05:04 +00:00
JustArchi
604652c03d Make PluginsCore public 2022-07-16 18:00:42 +02:00
renovate[bot]
2420d34b22 Update ASF-ui digest to 4e98e21 2022-07-15 19:46:13 +00:00
JustArchi
21a5793c45 Take into account that git is special snowflake 2022-07-15 21:45:18 +02:00
JustArchi
888b45c919 Include commit hash for docker builds of ASF-ui
Originally spotted at https://github.com/JustArchiNET/ASF-ui/issues/1589
2022-07-15 21:33:28 +02:00
renovate[bot]
35bf243f1a Update ASF-ui digest to c694963 2022-07-15 06:56:42 +00:00
ArchiBot
f4c1dededc Automatic translations update 2022-07-15 02:47:02 +00:00
renovate[bot]
d5f355a2bc Update actions/setup-node action to v3.4.1 2022-07-14 14:49:14 +00:00
ArchiBot
eb9b5dd025 Automatic translations update 2022-07-14 02:43:58 +00:00
renovate[bot]
2cec35f911 Update swashbuckle-aspnetcore monorepo to v6.3.2 2022-07-13 22:50:35 +00:00
renovate[bot]
7d4438b089 Update ASF-ui digest to 60d2fe0 2022-07-13 12:15:56 +00:00
ArchiBot
2782329549 Automatic translations update 2022-07-13 02:41:49 +00:00
renovate[bot]
14ac124e0c Update dotnet monorepo to v3.1.27 2022-07-12 14:35:31 +00:00
renovate[bot]
ec07d23cc4 Update ASF-ui digest to e7e7192 2022-07-12 05:32:17 +00:00
ArchiBot
3299ba8c10 Automatic translations update 2022-07-12 02:46:54 +00:00
renovate[bot]
4eb09f950d Update ASF-ui digest to c9ca06e 2022-07-11 21:20:43 +00:00
JustArchi
144a1d1574 Do not trigger ProfileUri workaround if request was for profile 2022-07-11 23:15:29 +02:00
renovate[bot]
05f3aada38 Update actions/setup-node action to v3.4.0 2022-07-11 16:08:49 +00:00
JustArchi
9240500e2c Bump 2022-07-11 18:07:03 +02:00
renovate[bot]
98768970a7 Update ASF-ui digest to b76040f 2022-07-11 05:27:44 +00:00
ArchiBot
7e41e530e7 Automatic translations update 2022-07-11 02:39:31 +00:00
renovate[bot]
97198fd435 Update ASF-ui digest to 8d93cf5 2022-07-10 11:01:21 +00:00
renovate[bot]
e8b83b8ad4 Update ASF-ui digest to 5b632ba 2022-07-10 03:47:31 +00:00
ArchiBot
929a1dfd82 Automatic translations update 2022-07-10 02:43:57 +00:00
renovate[bot]
ea7bad2868 Update ASF-ui digest to 23585b6 2022-07-09 22:06:59 +00:00
renovate[bot]
71f54a79f3 Update ASF-ui digest to 5409364 2022-07-09 13:28:26 +00:00
JustArchi
0cd7b10c9a Rewrite AWH requests public API
Breaking change that needs recompilation but doesn't need code edits, actually make maxTries work as they should and are expected to, with session refresh being controlled by a new boolean instead
2022-07-09 00:51:52 +02:00
renovate[bot]
42fb71f856 Update ASF-ui digest to 8b7e253 2022-07-08 18:49:30 +00:00
JustArchi
7b3ae25d58 Misc 2022-07-08 19:20:29 +02:00
JustArchi
2961975f05 Misc 2022-07-08 19:17:43 +02:00
JustArchi
06843ebf9f Misc 2022-07-08 19:16:58 +02:00
JustArchi
6ca395795c Move network group logic into plugins core
This will allow plugin creators to make use of network groups
2022-07-08 19:16:29 +02:00
JustArchi
0e5490cc3a Allow plugin creators to initialize their own limiters 2022-07-08 19:11:27 +02:00
renovate[bot]
39cc6e6ea6 Update crowdin/github-action action to v1.4.10 2022-07-08 15:08:45 +00:00
renovate[bot]
70544d1d76 Update ASF-ui digest to aed6536 2022-07-08 12:16:11 +00:00
ArchiBot
b1e9a53adc Automatic translations update 2022-07-08 02:42:04 +00:00
renovate[bot]
72e59e7271 Update ASF-ui digest to 64548c6 2022-07-07 23:37:04 +00:00
renovate[bot]
1ae3517374 Update ASF-ui digest to 5dd4507 2022-07-07 05:28:04 +00:00
ArchiBot
975b3b89f3 Automatic translations update 2022-07-07 02:45:33 +00:00
renovate[bot]
a982520844 Update ASF-ui digest to dafec4e 2022-07-06 14:07:46 +00:00
renovate[bot]
0ed4c7536a Update ASF-ui digest to 360b16c 2022-07-05 11:12:49 +00:00
renovate[bot]
6e360b7e1a Update ASF-ui digest to 782c965 2022-07-04 17:27:25 +00:00
renovate[bot]
17c79904e4 Update ASF-ui digest to 745af45 2022-07-04 04:05:38 +00:00
ArchiBot
0fcbc8c402 Automatic translations update 2022-07-04 02:45:38 +00:00
renovate[bot]
9e0d44bee2 Update ASF-ui digest to 1310fcd 2022-07-03 23:35:20 +00:00
renovate[bot]
a093f24a9d Update ASF-ui digest to 0709f06 2022-07-03 14:19:14 +00:00
renovate[bot]
e6a51bae55 Update ASF-ui digest to 15c0ccf 2022-07-03 05:10:36 +00:00
ArchiBot
a992d0c3cd Automatic translations update 2022-07-03 02:40:51 +00:00
JustArchi
a0e5ae8f46 Bump 2022-07-03 01:22:24 +02:00
JustArchi
c4a46fbdde Misc 2022-07-03 01:22:02 +02:00
Łukasz Domeradzki
d899dbc18c Add NLog/File endpoint (#2639)
* Add log endpoint

* Update LogController.cs

* Address netf breaking

* Fixes & feedback

* THIS IS MADNESS

* Revert "THIS IS MADNESS"

This reverts commit 8359960314.

* Solve netf madness differently
2022-07-03 01:20:43 +02:00
renovate[bot]
04e14293ef Update wiki digest to 55fc787 2022-07-02 18:37:09 +00:00
renovate[bot]
18a1b0a883 Update ASF-ui digest to bcd2d66 2022-07-02 10:09:30 +00:00
ArchiBot
5ca028ef47 Automatic translations update 2022-07-02 02:40:27 +00:00
renovate[bot]
43ec8f9566 Update wiki digest to d78047f 2022-07-01 23:27:03 +00:00
JustArchi
32f5b3a1c5 Bump 2022-07-02 00:37:42 +02:00
JustArchi
196afbf276 Merge branch 'fix' 2022-07-02 00:32:45 +02:00
JustArchi
1f0e4c9058 Bump 2022-07-02 00:32:31 +02:00
JustArchi
0ded9698b2 Fix custom game name not being displayed at all
In original change I totally forgot custom game ACTUALLY must be the first on the list, otherwise it never works properly.

So use exactly the same logic, but with custom name being first (if possible to fit)
2022-07-02 00:16:26 +02:00
renovate[bot]
9825f007c0 Update ASF-ui digest to 319696a 2022-07-01 15:40:47 +00:00
JustArchi
bc38ba478d Fix Archi brain damage 2022-07-01 13:29:47 +02:00
JustArchi
2f22757fea Be more optimistic about session checks
We can't check for session with every request, allow at least 10 seconds of optimistic assumption as otherwise we're spamming the servers too much
2022-07-01 13:15:45 +02:00
JustArchi
3ff0468926 Avoid excessive 2FA delays when waitIfNeeded without specifying IDs 2022-07-01 13:13:39 +02:00
ArchiBot
a6a973468c Automatic translations update 2022-07-01 02:47:18 +00:00
renovate[bot]
4aa1604dfb Update ASF-ui digest to 8c7498a 2022-06-30 05:49:32 +00:00
ArchiBot
44c7fcd131 Automatic translations update 2022-06-30 02:41:51 +00:00
ArchiBot
ce610ab24d Automatic translations update 2022-06-29 02:42:10 +00:00
renovate[bot]
c76f17c5c7 Update ASF-ui digest to 955afdf 2022-06-28 06:05:35 +00:00
renovate[bot]
30b4e006dc Update ASF-ui digest to e519f42 2022-06-28 00:48:08 +00:00
renovate[bot]
39621ed46e Update ASF-ui digest to 70fe63b 2022-06-27 17:45:00 +00:00
JustArchi
e532b57369 Thanks netf 2022-06-27 14:32:50 +02:00
JustArchi
b117c5164d Misc 2022-06-27 14:17:38 +02:00
JustArchi
be5a6bc27a Misc 2022-06-27 12:28:06 +02:00
ArchiBot
0ecb04e62c Automatic translations update 2022-06-27 02:40:39 +00:00
renovate[bot]
0af9f99923 Update ASF-ui digest to 0992da0 2022-06-26 05:13:28 +00:00
ArchiBot
cd0078e83e Automatic translations update 2022-06-26 02:42:45 +00:00
renovate[bot]
10cedad0ee Update ASF-ui digest to a116352 2022-06-25 05:12:08 +00:00
ArchiBot
693f4edbe5 Automatic translations update 2022-06-25 02:41:53 +00:00
renovate[bot]
ed44ad030e Update ASF-ui digest to 3b53132 2022-06-24 22:04:31 +00:00
JustArchi
d338477e5c Very important CatAPI fixes 2022-06-24 23:19:31 +02:00
renovate[bot]
053cb5fc03 Update wiki digest to be4f1cc 2022-06-24 15:50:12 +00:00
renovate[bot]
a01ac6641e Update ASF-ui digest to e5cf327 2022-06-24 12:59:57 +00:00
renovate[bot]
3deb560e5e Update ASF-ui digest to b11aacc 2022-06-23 21:45:29 +00:00
JustArchi
1861add350 Bump 2022-06-23 10:45:51 +02:00
JustArchi
83fac5b115 Misc 2022-06-22 20:52:41 +02:00
ArchiBot
23e49dafbc Automatic translations update 2022-06-22 02:40:09 +00:00
JustArchi
b71462b151 Merge branch 'il-warnings' 2022-06-21 11:10:26 +02:00
ArchiBot
88d3b19196 Automatic translations update 2022-06-21 02:37:14 +00:00
JustArchi
237f23e965 Attempt to silence excessive IL warnings 2022-06-20 21:37:03 +02:00
JustArchi
776755d3ab Change GamesPlayedWhileIdle to ImmutableList
Similar to FarmingOrders, the order of elements might be relevant in regards to games displayed e.g. in recently played.
2022-06-20 21:08:24 +02:00
JustArchi
e1e464b4e7 Misc 2022-06-20 20:33:33 +02:00
JustArchi
d590a30f20 Do not retry on empty HTTP content
This is totally valid for handling errors, and 200 OK responses should always carry one (even if empty)
2022-06-19 21:42:22 +02:00
JustArchi
1d520d9071 Update Madness, solving recent CI failure 2022-06-19 19:19:50 +02:00
JustArchi
772607b680 Use recommended async dispose pattern
Funny enough, non-breaking API changes since all of those classes are sealed.
2022-06-19 18:24:52 +02:00
ArchiBot
82750352e2 Automatic translations update 2022-06-19 02:43:14 +00:00
JustArchi
3e5a6a7b32 Bump 2022-06-18 14:15:57 +02:00
JustArchi
5f803cf725 Use Uri.UnescapeDataString() instead of WebUtility.HtmlDecode() 2022-06-18 14:15:14 +02:00
ArchiBot
ffdc0e89e8 Automatic translations update 2022-06-18 02:36:44 +00:00
Renovate Bot
b608083bfc Update ASF-ui digest to 9927878 2022-06-17 00:06:28 +00:00
Sebastian Göls
ebdb17d71b Add latest sale id to blacklist (#2621) 2022-06-16 16:49:54 +02:00
ArchiBot
8877468bd4 Automatic translations update 2022-06-16 02:37:58 +00:00
JustArchi
c753ed24cd CAN WE STOP ALREADY 2022-06-15 19:16:25 +02:00
JustArchi
dcebde55a2 Make xpoo happy 2022-06-15 19:09:03 +02:00
JustArchi
bd0f1779d6 Do not emit new game added event without a clear need
This callback is emitted by Steam with new licenses available, but also in many other situations, such as when somebody else logs in into the account (e.g. Steam deck, another PC), when somebody deletes licenses, and even on PICS changes from time to time, not to mention other cases I forgot/don't know about.

It seems silly to restart cards farmer every time, I believe we can assume that user won't delete license for a game we're farming, and even if he does, we'll catch that in 30 minutes or so anyway, while not restarting the farming every time Steam feels like sending us licenses.
2022-06-15 18:50:32 +02:00
JustArchi
164d9330f0 Do not emit shutdown event when changing the config 2022-06-15 18:44:07 +02:00
JustArchi
7c1c0d61b4 Misc 2022-06-15 16:23:00 +02:00
JustArchi
2aab79ec52 Bump 2022-06-15 16:13:33 +02:00
JustArchi
917df358e8 Fix logging module corruption on IPC startup failure
Failure of IPC startup currently corrupts ASF logging mechanism, and since ASF expects that logging mechanism to be operative afterwards, it crashes in internal code the moment it requires user input.

Fix that, and add additional safety safeguards in case we have a legit lack of logging configuration.

https://steamcommunity.com/groups/archiasf/discussions/1/3422187248450123255/
2022-06-15 16:08:03 +02:00
ArchiBot
5b62e19a80 Automatic translations update 2022-06-15 02:42:06 +00:00
Renovate Bot
cb99c916dd Update dotnet monorepo to v3.1.26 2022-06-15 02:29:47 +00:00
Renovate Bot
2596c74d2e Update wiki digest to 6209fe6 2022-06-14 21:00:30 +00:00
Renovate Bot
8147dacae7 Update ASF-ui digest to 218535a 2022-06-13 18:20:10 +00:00
ArchiBot
3ad324ebea Automatic translations update 2022-06-13 02:38:24 +00:00
ArchiBot
6e34c14aef Automatic translations update 2022-06-12 02:38:48 +00:00
Renovate Bot
96c9ab34d6 Update wiki digest to d4b1e4a 2022-06-11 19:26:00 +00:00
Renovate Bot
fa6649305e Update ASF-ui digest to 34b05c2 2022-06-11 17:06:36 +00:00
JustArchi
c0a3b67ebf Bump 2022-06-11 18:54:49 +02:00
JustArchi
2a845ab46f Of course I had to forgot about something 2022-06-11 18:52:17 +02:00
JustArchi
5ca6e41691 Bump 2022-06-11 18:17:59 +02:00
JustArchi
6eb9b9b26d Misc 2022-06-11 18:15:46 +02:00
JustArchi
95a6cef6db Take into account trade hold durations from both sides
Previous implementations had several problems when dealing with trade holds:
- User could've configured max trade hold duration to 0, and still accept trades with hold when he's the cause of it, this is unwanted
- There is virtually no way to ensure that the other party is willing to accept our trade hold even if we allow it, so expose that detail.

This precisely answers quite rather but not impossible situation of having a trade hold with ASF 2FA, e.g. due to moving authenticator, but we're also now ready for "perpetual" trade hold with ASF 2FA, in case it ever happened.

This way, we:
- Expose to other users our max trade hold duration preference
- Users validate both their own and listed user's trade hold, and if it exceeds either their own or user's limit, bot is not considered for matching
- It also resolves problem of accepting trade offers from other people when we're on trade hold ourselves
2022-06-11 18:07:06 +02:00
JustArchi
688e1cea83 Misc style updates 2022-06-11 16:14:51 +02:00
Renovate Bot
40a479b1df Update ASF-ui digest to 574bfd6 2022-06-09 17:29:38 +00:00
ArchiBot
b535886959 Automatic translations update 2022-06-09 02:36:47 +00:00
Renovate Bot
45d0a8a9c1 Update ASF-ui digest to d22e99c 2022-06-08 05:23:14 +00:00
JustArchi
3ee2ded814 Closes #2599 2022-06-07 20:46:41 +02:00
Renovate Bot
a2b5f80f40 Update ASF-ui digest to 99609fd 2022-06-07 04:34:37 +00:00
ArchiBot
0fffbdaa52 Automatic translations update 2022-06-07 02:32:27 +00:00
JustArchi
2ec764f8ec Rewrite WebBrowser errors handling 2022-06-06 23:28:35 +02:00
JustArchi
c67aecacbc Misc 2022-06-06 23:27:22 +02:00
JustArchi
ae5b9cdc0d Merge branch 'main' of https://github.com/JustArchiNET/ArchiSteamFarm 2022-06-06 21:54:08 +02:00
JustArchi
0eab63bab5 Do not check against profile uri in AWH when caller wants redirections
It's no longer our responsibility
2022-06-06 21:54:04 +02:00
Renovate Bot
1aea4c0550 Update actions/setup-node action to v3.3.0 2022-06-06 16:12:35 +00:00
JustArchi
16c4bed95f Bump 2022-06-06 13:30:00 +02:00
JustArchi
8948817d55 Misc 2FA enhancements 2022-06-06 13:29:21 +02:00
JustArchi
6ff943aeaa Move timezoneOffset cookie back into session
It might still make sense in order to:
a) Postpone timezoneoffset calculation until we actually get logged in, which gives machine more time for re-initialization
b) Refresh it in case our timezone changes, or DST gets enabled/disabled
2022-06-06 13:23:28 +02:00
Renovate Bot
0576bbd3aa Update ASF-ui digest to 8ba8738 2022-06-06 02:41:44 +00:00
ArchiBot
6e70956ee9 Automatic translations update 2022-06-06 02:36:02 +00:00
Renovate Bot
77409699f0 Update wiki digest to 6647581 2022-06-05 18:08:58 +00:00
Sebastian Göls
dae3e93031 Make use of "or" keyword in switch statements (#2598) 2022-06-05 15:59:34 +02:00
JustArchi
3041850b92 Bump 2022-06-05 12:46:24 +02:00
JustArchi
7c00d8d03d Misc 2FA enhancements 2022-06-05 12:39:04 +02:00
JustArchi
aedad9d5b3 Closes #2596 2022-06-05 12:15:42 +02:00
JustArchi
ff7f661197 Misc 2022-06-04 22:46:37 +02:00
JustArchi
e57cc21b89 Update .gitignore 2022-06-04 22:06:01 +02:00
JustArchi
06bfe01087 Misc 2022-06-04 21:41:07 +02:00
JustArchi
bcceb0c39c Downgrade AngleSharp.XPath due to https://github.com/AngleSharp/AngleSharp.XPath/issues/36 2022-06-04 21:41:02 +02:00
Renovate Bot
996ee66554 Update ASF-ui digest to 6dcd14d 2022-06-04 09:57:02 +00:00
renovate[bot]
dad19956aa Update dependency AngleSharp.XPath to v2 (#2595)
* Update dependency AngleSharp.XPath to v2

* Update GitHub.cs

* netf fixes

Co-authored-by: Renovate Bot <bot@renovateapp.com>
Co-authored-by: JustArchi <JustArchi@JustArchi.net>
2022-06-04 11:56:36 +02:00
Renovate Bot
beeda2777d Update ASF-ui digest to 293db61 2022-06-03 06:16:50 +00:00
ArchiBot
53e06a7392 Automatic translations update 2022-06-03 02:32:08 +00:00
Renovate Bot
9a1d4913a0 Update ASF-ui digest to a53bdb7 2022-06-02 18:43:12 +00:00
ArchiBot
c65b40b45b Automatic translations update 2022-06-02 02:39:09 +00:00
Renovate Bot
23647f2e39 Update wiki digest to d48f2bf 2022-06-01 22:07:32 +00:00
JustArchi
feb7a72bd1 Bump 2022-06-01 21:14:13 +02:00
Łukasz Domeradzki
7fe5989f5d Rewrite Steam time to ulongs (#2594)
My latest "research" resulted in learning that under the hood, Steam unix time seconds is bullet-proof not only for year 2038 but for uint range as well. While I do not expect to be alive by 2106, let alone ASF still being operative, it makes sense to base our time on the correct backend implementation regardless.

Small breaking change for people using `GetUnixTime()`.
2022-06-01 21:13:50 +02:00
Łukasz Domeradzki
715ed034df Unify WebBrowser API in regards to nullable bodies (#2593)
* Unify logic for nullable bodies

* Update ArchiWebHandler.cs

* Misc
2022-06-01 21:13:40 +02:00
JustArchi
d82df0074f Bump 2022-06-01 16:47:24 +02:00
JustArchi
03c2ba049e Fix NLog
Without this, default ASP.NET console logger is still active, even if we don't want it
2022-06-01 16:45:53 +02:00
Renovate Bot
03bce5dd71 Update ASF-ui digest to 5c7d999 2022-05-31 22:28:53 +00:00
ArchiBot
023e38d5e0 Automatic translations update 2022-05-29 02:39:26 +00:00
JustArchi
6178b12bb1 Fix invalid STD retry on 429 without json body
It's getting more and more complicated... We have places where we accept errors but still want relevant JSON body (most of the Steam error-places), and now we also have a place where we expected error to not carry one. Moreover, we still want to account for invalid JSON body on 2xx and retry on them.

So let's make the code even more complicated than it already is by adding yet another endpoint that does exactly the same what the other endpoint does BUT allows us us to optionally accept null/invalid body on success/errors/both, lol. I hate myself.

Maybe we can obsolete the first endpoint eventually and stick with just the second?
2022-05-28 20:41:52 +02:00
ArchiBot
df95b82b10 Automatic translations update 2022-05-28 02:29:19 +00:00
Renovate Bot
93ac0b4e4a Update ASF-ui digest to c42a9b8 2022-05-27 04:03:04 +00:00
ArchiBot
38fc3ba6a3 Automatic translations update 2022-05-27 02:39:00 +00:00
Renovate Bot
2e87b78b45 Update wiki digest to c5694c9 2022-05-26 17:44:51 +00:00
Renovate Bot
dae256f069 Update ASF-ui digest to fa42805 2022-05-26 15:10:16 +00:00
renovate[bot]
8452c46c47 Update crazy-max/ghaction-import-gpg action to v5 (#2592)
Co-authored-by: Renovate Bot <bot@renovateapp.com>
2022-05-26 17:09:43 +02:00
Sebastian Göls
68e30b43c2 Use ArgumentNullException.ThrowIfNull when possible (#2591)
* Misc.

* Fix mistake
2022-05-26 13:29:12 +02:00
JustArchi
c9b1e46013 Avoid crash when executing STD command with disabled STD plugin 2022-05-26 11:47:11 +02:00
JustArchi
fd9770d78e Bump 2022-05-26 11:05:59 +02:00
Renovate Bot
a4374389b8 Update dependency ConfigureAwaitChecker.Analyzer to v5.0.0.1 2022-05-26 03:12:12 +00:00
ArchiBot
082cab42df Automatic translations update 2022-05-26 02:38:09 +00:00
Renovate Bot
3ff80b37f3 Update ASF-ui digest to 1bf5b24 2022-05-25 20:21:25 +00:00
JustArchi
07c354f9e7 Commit the most misc optimization in history
I found it accidentally, lol
2022-05-25 20:04:54 +02:00
Sebastian Göls
b83f8fc669 Update Program.cs (#2589) 2022-05-25 17:18:06 +02:00
Renovate Bot
d6a2f53ab0 Update wiki digest to f26dbc5 2022-05-25 11:51:00 +00:00
JustArchi
0261623ea9 Expose FinalUri in BasicResponse for plugins usage 2022-05-24 12:25:43 +02:00
JustArchi
b5ca484c2b Add ReturnRedirections for plugins usage
This will allow caller to handle redirections manually
2022-05-24 12:13:54 +02:00
Renovate Bot
a7c30e4878 Update ASF-ui digest to a790c6c 2022-05-22 03:51:41 +00:00
Renovate Bot
f26a4ae864 Update ASF-ui digest to 24ff55f 2022-05-21 05:09:18 +00:00
Renovate Bot
c2018b53a5 Update actions/upload-artifact action to v3.1.0 2022-05-20 20:28:10 +00:00
JustArchi
55421bb29f Throw on lack of previousMethodName
I don't believe we should support those calls for anything that doesn't supply it. Actually add another layer of safeguards.
2022-05-20 21:36:22 +02:00
Renovate Bot
52eabe4daf Update ASF-ui digest to 46fe13d 2022-05-20 05:16:48 +00:00
ArchiBot
86fc8a765c Automatic translations update 2022-05-20 02:34:05 +00:00
JustArchi
9162752b99 Misc 2022-05-19 21:38:40 +02:00
JustArchi
4436e8dc43 Add STD command trigger for STD plugin 2022-05-19 21:34:57 +02:00
JustArchi
1f0b996cf5 Improve login procedure
- Allow user to recover from SteamGuard/2FA failures when inputting manually
- Unify login failures in a single mechanism
- Add fallback for Steam informing us about lack of 2FA code when actually having mobile authenticator and supplying it (ultra rare screwup)
2022-05-19 15:33:53 +02:00
ArchiBot
4dc7acb914 Automatic translations update 2022-05-19 02:39:10 +00:00
Renovate Bot
d570a17532 Update wiki digest to 6958aab 2022-05-18 14:59:10 +00:00
Renovate Bot
e5184adede Update ASF-ui digest to 790ff09 2022-05-18 14:58:40 +00:00
JustArchi
13a5fa7c02 Misc 2022-05-18 11:45:31 +02:00
JustArchi
c698fe7b07 Bump 2022-05-18 11:31:49 +02:00
JustArchi
a08c85e40b Increase interactive console responsiveness, misc
Previously we were sleeping always, also after execution of the command and after wrong keys being pressed, which resulted in excessive delay if user mashed his keyboard like a madman before hitting c to enter the console, entirely unnecessarily.
2022-05-18 11:30:46 +02:00
JustArchi
055af32219 Address missed NLog breaking change 2022-05-18 11:20:35 +02:00
ArchiBot
080b500ebf Automatic translations update 2022-05-18 02:33:30 +00:00
JustArchi
4a329b0b15 Bump 2022-05-17 23:03:42 +02:00
JustArchi
e2494960ae Bump 2022-05-17 23:02:14 +02:00
JustArchi
2e987ccee6 Address NLog changes 2022-05-17 20:12:57 +02:00
renovate[bot]
99284e22c9 Update dependency NLog.Web.AspNetCore to v5 (#2579)
Co-authored-by: Renovate Bot <bot@renovateapp.com>
2022-05-17 20:09:34 +02:00
renovate[bot]
37eac5844e Update ASF-ui digest to 664643e (#2578)
Co-authored-by: Renovate Bot <bot@renovateapp.com>
2022-05-17 11:41:52 +02:00
Renovate Bot
35f295a860 Update ASF-ui digest to 8d0abfb 2022-05-16 19:07:27 +00:00
Renovate Bot
29d047271e Update actions/setup-node action to v3.2.0 2022-05-16 14:03:52 +00:00
Renovate Bot
948a86bfc9 Update ASF-ui digest to 2fe4a70 2022-05-16 04:50:08 +00:00
ArchiBot
f853c61821 Automatic translations update 2022-05-16 02:25:24 +00:00
JustArchi
5b1cb16c98 Stop wasting CPU cycles! 2022-05-13 19:33:08 +02:00
JustArchi
bdac1b2782 Bump 2022-05-13 18:22:24 +02:00
JustArchi
7532b89fd0 Closes #2572
At least the code is now shorter, lol
2022-05-13 18:15:15 +02:00
JustArchi
7cd351d1cd Misc
This applies only to Debug builds, as Release ones don't use checked arithmetic anyway
2022-05-13 18:12:31 +02:00
Renovate Bot
9c8d63318e Update ASF-ui digest to bb59242 2022-05-13 05:08:45 +00:00
ArchiBot
f0c0e07489 Automatic translations update 2022-05-13 02:42:57 +00:00
ArchiBot
d2e79ff3a4 Automatic translations update 2022-05-12 02:33:43 +00:00
Renovate Bot
ab7b998e3b Update dependency Microsoft.NET.Test.Sdk to v17.2.0 2022-05-11 21:19:10 +00:00
Łukasz Domeradzki
9c88d14c8e Resolve NU1507 (#2575)
* Attempt to resolve NU1507

* Let's try this then

* Revert "Let's try this then"

This reverts commit 86ef6f9abf.

* How about this

* And this?

* So why not this?

* And this?

* Revert "And this?"

This reverts commit e43fc83dcc.

* Revert "So why not this?"

This reverts commit e630dd8365.
2022-05-11 20:11:58 +02:00
ArchiBot
9a3c3bdbaf Automatic translations update 2022-05-11 02:35:21 +00:00
Renovate Bot
7b3598af20 Update dotnet monorepo to v3.1.25 2022-05-10 19:23:40 +00:00
Renovate Bot
35d2156855 Update ASF-ui digest to b22bef8 2022-05-10 16:40:51 +00:00
JustArchi
d589da7a39 Bump 2022-05-10 11:14:11 +02:00
JustArchi
c10de94bd0 Closes #2571 2022-05-10 11:11:45 +02:00
Renovate Bot
d164296d7e Update actions/setup-dotnet action to v2.1.0 2022-05-09 10:21:58 +00:00
Renovate Bot
b378a76072 Update ASF-ui digest to 0ed48ea 2022-05-08 22:02:09 +00:00
Archi
263a2db476 CI: Remove excessive continue on errors 2022-05-08 23:01:45 +02:00
Renovate Bot
61549fc983 Update ASF-ui digest to 1f02912 2022-05-07 03:46:37 +00:00
ArchiBot
19aad04143 Automatic translations update 2022-05-07 02:24:04 +00:00
Renovate Bot
5a5f3c6786 Update ASF-ui digest to a9ddf4a 2022-05-06 22:30:53 +00:00
Renovate Bot
bd68df2fd6 Update crowdin/github-action action to v1.4.9 2022-05-06 16:18:34 +00:00
renovate[bot]
2a97644468 Update docker/build-push-action action to v3 (#2565)
Co-authored-by: Renovate Bot <bot@renovateapp.com>
2022-05-06 10:20:55 +02:00
renovate[bot]
5304ca3e07 Update docker/login-action action to v2 (#2566)
Co-authored-by: Renovate Bot <bot@renovateapp.com>
2022-05-06 10:20:50 +02:00
renovate[bot]
f0471ac0eb Update docker/setup-buildx-action action to v2 (#2567)
Co-authored-by: Renovate Bot <bot@renovateapp.com>
2022-05-06 10:20:42 +02:00
ArchiBot
b0e7f1963c Automatic translations update 2022-05-06 02:27:24 +00:00
Renovate Bot
78990e8aff Update wiki digest to b43bf17 2022-05-05 13:03:59 +00:00
Renovate Bot
b871970d85 Update ASF-ui digest to 722f6b2 2022-05-05 00:18:06 +00:00
ArchiBot
d563a20288 Automatic translations update 2022-05-04 02:36:40 +00:00
Renovate Bot
b2fefa4476 Update wiki digest to 37d8dcc 2022-05-03 11:51:02 +00:00
ArchiBot
840cf25ea4 Automatic translations update 2022-04-30 02:36:10 +00:00
Renovate Bot
79587f68d7 Update ASF-ui digest to a351077 2022-04-30 00:09:30 +00:00
Archi
45adf9c1a1 Bump 2022-04-29 20:25:59 +02:00
Archi
1dcf98c849 Fix SteamPassword input
Asking for password with encryption enabled always resulted in an error, as the password wasn't properly set to the plaintext and we were back to square one.

The previous logic was overly complex, I don't know why, this should achieve the same and be much easier to understand while at it.
2022-04-29 17:55:33 +02:00
ArchiBot
a826b7f9b7 Automatic translations update 2022-04-29 02:37:09 +00:00
Renovate Bot
85c8397cf7 Update docker/setup-buildx-action action to v1.7.0 2022-04-28 11:01:51 +00:00
ArchiBot
dbf1c1ba51 Automatic translations update 2022-04-28 02:50:54 +00:00
Renovate Bot
359439e306 Update ASF-ui digest to 892742c 2022-04-27 13:48:33 +00:00
ArchiBot
763766e092 Automatic translations update 2022-04-27 02:42:35 +00:00
Renovate Bot
a4a347e957 Update mstest monorepo to v2.2.10 2022-04-26 22:17:23 +00:00
Renovate Bot
844ca93647 Update wiki digest to 0c633a3 2022-04-26 18:49:18 +00:00
Renovate Bot
16fe445ea9 Update ASF-ui digest to 83c8a83 2022-04-26 18:48:48 +00:00
Renovate Bot
34bf8fb84f Update crazy-max/ghaction-import-gpg action to v4.4.0 2022-04-25 14:36:52 +00:00
Renovate Bot
4873cd337a Update ASF-ui digest to 5554b10 2022-04-25 03:07:32 +00:00
ArchiBot
8c0249a62d Automatic translations update 2022-04-25 02:33:43 +00:00
ArchiBot
220ecf0c38 Automatic translations update 2022-04-24 02:24:03 +00:00
Renovate Bot
ebd79425f4 Update wiki digest to 370d1b3 2022-04-23 18:48:11 +00:00
Renovate Bot
2eaf934dde Update dependency Markdig.Signed to v0.30.2 2022-04-23 14:22:52 +00:00
Archi
599cd9bff8 Bump 2022-04-23 15:02:37 +02:00
Archi
339e83a818 Use saner custom schema IDs in swagger 2022-04-23 14:58:22 +02:00
Archi
f083bb2d3b Closes #2558 2022-04-23 13:11:10 +02:00
Archi
9f68d17a28 Add initialization for Madness
This is probably not needed, but might come useful in the future.
2022-04-23 13:09:51 +02:00
Renovate Bot
d8413f9633 Update ASF-ui digest to 5a6f341 2022-04-23 04:05:53 +00:00
ArchiBot
27d9d61309 Automatic translations update 2022-04-23 02:24:12 +00:00
Renovate Bot
2fc92ce427 Update dependency JustArchiNET.Madness to v3.5.2 2022-04-22 16:54:52 +00:00
Renovate Bot
86d94a7bbe Update swashbuckle-aspnetcore monorepo to v6.3.1 2022-04-22 14:44:55 +00:00
Renovate Bot
9647db8bf7 Update dependency Markdig.Signed to v0.30.1 2022-04-22 11:13:08 +00:00
Renovate Bot
2ce5018d62 Update ASF-ui digest to f23f502 2022-04-22 05:37:01 +00:00
ArchiBot
61768dbeb9 Automatic translations update 2022-04-22 02:41:44 +00:00
Renovate Bot
37ced5d4e3 Update dependency Markdig.Signed to v0.30.0 2022-04-21 19:21:48 +00:00
Renovate Bot
c1a695de7b Update actions/checkout action to v3.0.2 2022-04-21 16:13:25 +00:00
Renovate Bot
7040bdabf6 Update ASF-ui digest to e1d754d 2022-04-21 12:28:06 +00:00
ArchiBot
14512aec71 Automatic translations update 2022-04-21 02:36:31 +00:00
Renovate Bot
40d67ac185 Update dependency Markdig.Signed to v0.29.0 2022-04-20 18:53:26 +00:00
Renovate Bot
7de67e84f9 Update ASF-ui digest to 992113b 2022-04-20 04:04:09 +00:00
Renovate Bot
6c9df75a1a Update ASF-ui digest to 18c96be 2022-04-19 14:39:57 +00:00
ArchiBot
b98d8405e1 Automatic translations update 2022-04-19 02:37:37 +00:00
Archi
062b241232 Misc 2022-04-18 21:08:30 +02:00
Archi
b5af510eb9 Improve weak passwords reasons 2022-04-18 20:35:47 +02:00
renovate[bot]
2edcb7a0ce Update dependency JetBrains.Annotations to v2022 (#2557)
Co-authored-by: Renovate Bot <bot@renovateapp.com>
2022-04-18 19:56:26 +02:00
ArchiBot
58cf93ff48 Automatic translations update 2022-04-18 02:35:31 +00:00
Renovate Bot
9f0f3339c5 Update wiki digest to d965790 2022-04-17 12:56:19 +00:00
ArchiBot
6b88d49067 Automatic translations update 2022-04-17 02:23:50 +00:00
ArchiBot
b4e102682f Automatic translations update 2022-04-16 02:23:14 +00:00
Renovate Bot
a580c85234 Update wiki digest to 55b7332 2022-04-15 21:17:18 +00:00
Renovate Bot
a3cce515ec Update ASF-ui digest to e0d5a20 2022-04-15 18:48:42 +00:00
Archi
1f21c1f9f6 Bump 2022-04-15 19:41:18 +02:00
Archi
9c7014d5c1 Misc 2022-04-15 19:38:56 +02:00
Archi
0a01dfa22b Misc 2022-04-15 19:37:18 +02:00
qhy040404
a8bb107e23 Update README.md (#2555) 2022-04-15 19:24:07 +02:00
Renovate Bot
151f6cfe4a Update actions/checkout action to v3.0.1 2022-04-14 20:13:59 +00:00
Renovate Bot
d21e398ac0 Update crowdin/github-action action to v1.4.8 2022-04-14 03:10:04 +00:00
ArchiBot
16f7f82dc0 Automatic translations update 2022-04-14 02:28:46 +00:00
Renovate Bot
8a6a02e034 Update ASF-ui digest to ffa260b 2022-04-13 22:08:23 +00:00
Sebastian Göls
b8bfcd5df3 Simplify LogNullError calls (#2554)
* Remove necessity of nameof(...) in calls to ArchiLogger.LogNullError(...)

* Upgrade Madness

* Upgrade Madness

* Split up compound null log statements
2022-04-13 23:16:36 +02:00
Sebastian Göls
2326196e01 Slightly deduplicate utility code (#2553) 2022-04-13 21:44:57 +02:00
ArchiBot
380d785388 Automatic translations update 2022-04-13 02:29:12 +00:00
Renovate Bot
edd82b365c Update wiki digest to ced81fb 2022-04-12 19:39:24 +00:00
Renovate Bot
d49d106d64 Update dotnet monorepo to v3.1.24 2022-04-12 00:05:28 +00:00
Archi
78407fbd9c Remove obsolete statistics mapping
This already skipped one monthly cycle, everybody who remotely cares to use up-to-date ASF is already migrated to proper config, everybody else is not making use of it either way
2022-04-12 00:52:19 +02:00
Archi
1a87149765 Correct doc 2022-04-12 00:48:24 +02:00
Renovate Bot
f260015098 Update ASF-ui digest to 9bc1e73 2022-04-11 19:13:41 +00:00
Renovate Bot
5016abe45e Update actions/setup-node action to v3.1.1 2022-04-11 14:10:40 +00:00
Renovate Bot
2238897f37 Update ASF-ui digest to 02f5fc8 2022-04-11 03:47:19 +00:00
ArchiBot
493f40a97c Automatic translations update 2022-04-11 02:29:56 +00:00
Renovate Bot
5ec7ca050b Update ASF-ui digest to b16b9fa 2022-04-09 01:36:03 +00:00
ArchiBot
f727403295 Automatic translations update 2022-04-08 02:26:07 +00:00
Renovate Bot
027d23d894 Update ASF-ui digest to 8df1cd1 2022-04-07 20:37:03 +00:00
Renovate Bot
f36798b2c3 Update ASF-ui digest to 082828a 2022-04-07 11:00:19 +00:00
ArchiBot
202a92f66f Automatic translations update 2022-04-07 02:23:49 +00:00
Renovate Bot
48b2a4c859 Update wiki digest to 309c165 2022-04-06 22:51:35 +00:00
Renovate Bot
cfbc3d749f Update ASF-ui digest to 49413ea 2022-04-06 21:06:44 +00:00
Archi
a76af71227 Update RELEASE_TEMPLATE.md 2022-04-06 20:49:17 +02:00
Archi
cc5e5dfcc9 Bump 2022-04-06 20:18:01 +02:00
Archi
a185f2f03d Fix steam parental mess 2022-04-06 20:12:01 +02:00
Archi
3772b303c5 Bump 2022-04-06 17:09:02 +02:00
Archi
d6ed6e81a4 Let's try declaring base Chinese instead 2022-04-06 15:43:13 +02:00
Archi
0bbc85527a Allow cmdline arg for forbidding Steam parental generation 2022-04-06 14:16:26 +02:00
Archi
1eabe3a5ed Fix netf brain damage 2022-04-06 14:05:10 +02:00
Archi
f95b6bf089 Refuse to accept SteamParentalCode other than 4 0-9 digits 2022-04-06 13:58:35 +02:00
Renovate Bot
ff7b4582c7 Update ASF-ui digest to 498c8de 2022-04-06 00:07:06 +00:00
Renovate Bot
7e7fb9cd16 Update ASF-ui digest to 8f5ce0b 2022-04-05 19:39:26 +00:00
Archi
65bbaf628e Bump 2022-04-05 20:28:49 +02:00
Archi
db2cbde708 Bump 2022-04-05 20:28:30 +02:00
ArchiBot
b701acf72f Automatic translations update 2022-04-05 02:23:19 +00:00
Łukasz Domeradzki
ceb021dbdf Use windows-latest runner again (#2547)
* Attempt at resolving https://github.com/actions/virtual-environments/issues/5189

* Clean up dockerfiles from no longer required workarounds
2022-04-04 22:06:03 +02:00
ArchiBot
ce1c77780d Automatic translations update 2022-04-04 02:29:49 +00:00
Renovate Bot
5b7858c2a0 Update wiki digest to a05a01e 2022-04-03 19:13:33 +00:00
Archi
635afa7165 Update Madness 2022-04-02 16:41:48 +02:00
Archi
c79c314b20 Fix generic-netf
Again and again!
2022-04-02 16:08:41 +02:00
Archi
ec78ad1ac2 Add overflow-related fixes and improvements 2022-04-02 16:00:07 +02:00
Archi
9273d73640 Check for overflow and underflow in debug builds 2022-04-02 13:58:55 +02:00
Renovate Bot
d598b99a1e Update ASF-ui digest to ba9a208 2022-04-02 05:05:07 +00:00
Renovate Bot
f12b00bb4c Update ASF-ui digest to c7e3eee 2022-04-01 20:10:36 +00:00
Renovate Bot
ff7116d2ac Update actions/setup-node action to v3.1.0 2022-04-01 11:47:41 +00:00
Renovate Bot
ee435fc628 Update ASF-ui digest to d282988 2022-03-31 06:34:58 +00:00
Renovate Bot
c8f02779b6 Update ASF-ui digest to a78474f 2022-03-30 03:27:46 +00:00
ArchiBot
83667ed7c3 Automatic translations update 2022-03-30 02:50:37 +00:00
Archi
387ef3e0dd Update revolut handle 2022-03-30 00:41:27 +02:00
ArchiBot
7e8c6b7fb3 Automatic translations update 2022-03-29 02:24:49 +00:00
Renovate Bot
e97b440225 Update wiki digest to a9d72e4 2022-03-28 22:59:44 +00:00
ArchiBot
b1db99f328 Automatic translations update 2022-03-28 02:25:26 +00:00
Renovate Bot
ace0ca4555 Update dependency Markdig.Signed to v0.28.1 2022-03-27 09:46:26 +00:00
ArchiBot
33767ace78 Automatic translations update 2022-03-27 02:21:44 +00:00
Renovate Bot
5d5a76de40 Update ASF-ui digest to 711c0f2 2022-03-26 03:19:31 +00:00
ArchiBot
582680f69d Automatic translations update 2022-03-26 02:21:11 +00:00
ArchiBot
e65729ee1a Automatic translations update 2022-03-25 02:21:29 +00:00
Archi
83a353dfe0 Bump 2022-03-24 22:28:40 +01:00
ArchiBot
aea7c7640c Automatic translations update 2022-03-24 02:22:40 +00:00
Łukasz Domeradzki
7118185ac5 Remove support for IPC localization (#2545) 2022-03-24 01:47:12 +01:00
Renovate Bot
b681b74ee6 Update ASF-ui digest to 871721c 2022-03-22 20:45:48 +00:00
Archi
cc83222c3e Use shorter syntax for json properties 2022-03-22 16:33:47 +01:00
Archi
6c570738ee Fix handling inventory loading errors
"success" doesn't have to exist as a property in error json
2022-03-22 14:57:48 +01:00
Archi
393ddf6f10 Misc optimization 2022-03-22 12:27:07 +01:00
renovate[bot]
75a7df2751 Update peter-evans/dockerhub-description action to v3 (#2542)
Co-authored-by: Renovate Bot <bot@renovateapp.com>
2022-03-22 11:37:59 +01:00
Archi
0c3dfaa4ae Use generic delay for all unhandled disconnects
There are only handful of cases where we want to reconnect immediately, and login limiter delay usually kills those anyway
2022-03-21 14:50:36 +01:00
Renovate Bot
94e70e5ac2 Update ASF-ui digest to 97dcaf2 2022-03-19 01:15:00 +00:00
Archi
9ce527c938 Bump 2022-03-18 19:51:04 +01:00
Renovate Bot
660b05e4c4 Update ASF-ui digest to 0f8dfef 2022-03-18 11:13:17 +00:00
Archi
b39efb2b03 Re-enable ASF-ui updates 2022-03-18 12:12:38 +01:00
ArchiBot
53e0b62ced Automatic translations update 2022-03-18 02:21:32 +00:00
ArchiBot
d3980962fe Automatic translations update 2022-03-17 02:20:45 +00:00
Renovate Bot
517787efb8 Update wiki digest to 6505a66 2022-03-16 17:55:41 +00:00
lrcf
d06afa26d4 LICENSE-2.0.txt > LICENSE.txt (#2539) 2022-03-16 16:41:08 +01:00
Archi
4562e71e47 Misc 2022-03-16 15:34:37 +01:00
Renovate Bot
894471fa82 Update crazy-max/ghaction-import-gpg action to v4.3.0 2022-03-16 03:40:33 +00:00
ArchiBot
e9f6c15ba1 Automatic translations update 2022-03-16 02:21:54 +00:00
ArchiBot
814b93d1cf Automatic translations update 2022-03-15 02:19:58 +00:00
Renovate Bot
beafbd8f43 Update docker/build-push-action action to v2.10.0 2022-03-14 20:06:32 +00:00
ArchiBot
dbd0e006ed Automatic translations update 2022-03-14 02:18:10 +00:00
ArchiBot
4661803836 Automatic translations update 2022-03-13 02:13:18 +00:00
Renovate Bot
99ecd72660 Update wiki digest to 791cfff 2022-03-12 23:59:22 +00:00
Archi
799ec2965f Bump 2022-03-12 22:34:55 +01:00
Archi
c7e9c0c3b0 Bump 2022-03-12 22:34:35 +01:00
Sebastian Göls
1f3e861612 Correctly detect steam deck keyboard skins (#2535) 2022-03-12 22:16:45 +01:00
Renovate Bot
159b0620a7 Update dependency Markdig.Signed to v0.28.0 2022-03-11 14:37:14 +00:00
ArchiBot
e508602be7 Automatic translations update 2022-03-11 02:20:00 +00:00
Archi
6edf62d849 Set initial state of ShouldResumeFarming to false
ShouldResumeFarming indicates whether call to Resume() should start farming, which is used for example when account is marked as free to farm due to event. That event by default is triggered on ASF startup as well.

At the same time, the prerequisite to start farming is having our cache ready at least for the bot that is about to start farming. This happens in OnBotLicenseList() which notified CardsFarmer about new games added once it finishes, which also triggers the farming.

Previous behaviour resulted in a bit unwanted situation where CardsFarmer didn't bother waiting for cache to be ready, as the event about occupation triggered resume process, and that process due to true value started immediately. Changing default state of that value to false should suffice, as initial resume event won't cause the cards farming process to be started, and event about new games added already sets that flag back to true, so if cache being rebuilt happens before playing lock being released, Resume() should still trigger farming as wanted.

Give yourself a pat on the back if you understood something from that.
2022-03-10 12:36:31 +01:00
ArchiBot
021d414143 Automatic translations update 2022-03-09 02:19:23 +00:00
Renovate Bot
813587508e Update dotnet monorepo to v3.1.23 2022-03-08 16:53:12 +00:00
Renovate Bot
0e3d124663 Update swashbuckle-aspnetcore monorepo to v6.3.0 2022-03-08 02:27:31 +00:00
ArchiBot
91115b7cb7 Automatic translations update 2022-03-08 02:16:20 +00:00
Archi
0f12174564 Bump 2022-03-07 18:43:29 +01:00
Łukasz Domeradzki
d087aacbfb Closes #2532 2022-03-07 18:35:41 +01:00
Archi
1c0d2d88ed Address crowdin-cli 3.7.8 breaking change
And ensure it doesn't fail silently again the next time something like that happens

https://github.com/crowdin/crowdin-cli/issues/439
2022-03-07 13:28:32 +01:00
renovate[bot]
6b170c345d Update actions/upload-artifact action to v3 (#2530)
Co-authored-by: Renovate Bot <bot@renovateapp.com>
2022-03-03 20:39:53 +01:00
Archi
bc8a4a50d2 Bump 2022-03-03 14:51:41 +01:00
Archi
e025df3d9b Downgrade ASF-ui due to https://github.com/JustArchiNET/ASF-ui/issues/1556 2022-03-03 13:42:59 +01:00
renovate[bot]
5a97835531 Update actions/download-artifact action to v3 (#2529)
Co-authored-by: Renovate Bot <bot@renovateapp.com>
2022-03-02 22:33:21 +01:00
Renovate Bot
bce0557873 Update wiki commit hash to 98a9726 2022-03-02 17:07:56 +00:00
renovate[bot]
4c7cd204ce Update ASF-ui commit hash to 59d9442 (#2527)
Co-authored-by: Renovate Bot <bot@renovateapp.com>
2022-03-02 15:26:59 +01:00
Renovate Bot
7ba6b230df Update docker/login-action action to v1.14.1 2022-03-01 22:22:02 +00:00
renovate[bot]
6c4fba5173 Update actions/checkout action to v3 (#2526)
Co-authored-by: Renovate Bot <bot@renovateapp.com>
2022-03-01 20:41:47 +01:00
Renovate Bot
5cd6477b69 Update ASF-ui commit hash to 02d5b8d 2022-03-01 15:37:38 +00:00
Renovate Bot
1f5fbb5f92 Update crazy-max/ghaction-import-gpg action to v4.2.0 2022-03-01 10:35:48 +00:00
Renovate Bot
d0521ff9ca Update docker/login-action action to v1.14.0 2022-02-28 10:38:03 +00:00
Renovate Bot
1be15716fc Update ASF-ui commit hash to bdb5a1c 2022-02-26 03:47:28 +00:00
Archi
e00ee2cc55 Misc 2022-02-26 01:26:13 +01:00
Archi
8893fc8e70 Misc 2022-02-26 01:21:37 +01:00
renovate[bot]
86b41f0542 Update actions/setup-dotnet action to v2 (#2523)
Co-authored-by: Renovate Bot <bot@renovateapp.com>
2022-02-25 11:37:22 +01:00
Renovate Bot
a245c091a4 Update ASF-ui commit hash to 4b46137 2022-02-25 00:43:54 +00:00
Archi
abbe0cca22 Bump 2022-02-25 00:35:12 +01:00
Archi
d1c2b103b6 Closes #2522 2022-02-25 00:29:51 +01:00
Renovate Bot
9f1734efb7 Update ASF-ui commit hash to e35e350 2022-02-24 16:15:05 +00:00
renovate[bot]
729c2e889c Update actions/setup-node action to v3 (#2521)
Co-authored-by: Renovate Bot <bot@renovateapp.com>
2022-02-24 15:23:23 +01:00
Archi
a9edc7ad7a Bump 2022-02-24 14:17:11 +01:00
Renovate Bot
08a6486c00 Update actions/setup-dotnet action to v1.9.1 2022-02-24 09:23:50 +00:00
Renovate Bot
ca3bc1becd Update ASF-ui commit hash to 0113980 2022-02-22 11:53:12 +00:00
Renovate Bot
fe5028a399 Update crowdin/github-action action to v1.4.7 2022-02-18 16:53:00 +00:00
Archi
c1d9d04071 Rider cleanup & improvements 2022-02-18 15:40:33 +01:00
Renovate Bot
e5ae2abbf0 Update ASF-ui commit hash to 938820c 2022-02-18 12:29:14 +00:00
Archi
41fa5de5a8 Misc 2022-02-18 12:55:47 +01:00
Archi
697b78aa21 Don't expose SteamLogin in weak password warning
While not strictly a sensitive property, there is no good reason why we should print it in the log instead of a bot name, which is far less sensitive in nature.
2022-02-18 11:16:31 +01:00
Renovate Bot
1a7be0bac8 Update ASF-ui commit hash to 354a986 2022-02-18 02:25:11 +00:00
ArchiBot
9d88972ae0 Automatic translations update 2022-02-18 02:12:06 +00:00
Renovate Bot
aec4130afe Update ASF-ui commit hash to cb7478d 2022-02-17 18:36:45 +00:00
Renovate Bot
64228cd3d9 Update docker/login-action action to v1.13.0 2022-02-17 15:07:39 +00:00
Archi
3568a0e528 Make GetFirstSteamMasterID() public API 2022-02-17 13:50:45 +01:00
Archi
38c2b51f2b Make GetTradeToken() public API 2022-02-17 10:59:49 +01:00
Archi
450f365817 Expose GetProxyAccess() as public API 2022-02-17 10:54:55 +01:00
Renovate Bot
cf3f6aabdf Update ASF-ui commit hash to 898e3d5 2022-02-17 03:54:33 +00:00
Renovate Bot
842fb6e304 Update dependency Microsoft.NET.Test.Sdk to v17.1.0 2022-02-16 15:28:50 +00:00
Renovate Bot
a1169331aa Update ASF-ui commit hash to 6b45078 2022-02-16 03:39:15 +00:00
ArchiBot
2fb7d62e06 Automatic translations update 2022-02-16 02:13:41 +00:00
Renovate Bot
4e57153e91 Update ASF-ui commit hash to 9261c65 2022-02-15 21:39:10 +00:00
Renovate Bot
d2e78b6970 Update ASF-ui commit hash to d3543c3 2022-02-14 20:49:07 +00:00
Renovate Bot
ccef6554fe Update ASF-ui commit hash to 8d45f06 2022-02-13 18:06:17 +00:00
Renovate Bot
97875a87c2 Update ASF-ui commit hash to c42dc16 2022-02-13 03:58:51 +00:00
ArchiBot
2684f99563 Automatic translations update 2022-02-13 02:10:27 +00:00
Renovate Bot
a50318dc8b Update ASF-ui commit hash to 6b5e890 2022-02-12 22:05:07 +00:00
Renovate Bot
eeccc36fe4 Update ASF-ui commit hash to 7071136 2022-02-12 09:47:20 +00:00
Renovate Bot
1ead134578 Update ASF-ui commit hash to aa8a4af 2022-02-12 03:59:25 +00:00
ArchiBot
f03f8ebe70 Automatic translations update 2022-02-12 02:13:03 +00:00
Łukasz Domeradzki
aa8b360e1d Update README.md 2022-02-11 10:54:32 +01:00
Renovate Bot
8c22f9929c Update ASF-ui commit hash to 41e74a9 2022-02-11 03:03:36 +00:00
ArchiBot
3795b2de3a Automatic translations update 2022-02-11 02:10:40 +00:00
Archi
f4650fe570 Misc 2022-02-11 00:07:48 +01:00
Archi
fec57e0fff Preserve CachedCardCountsForGame across ASF runs 2022-02-11 00:05:43 +01:00
Archi
8e47a5906f Optimize SendCompletedSets() 2022-02-10 23:52:49 +01:00
Renovate Bot
f728ddf737 Update wiki commit hash to 27140b9 2022-02-10 19:43:12 +00:00
Archi
173cec5ef7 Bump 2022-02-10 20:14:51 +01:00
Archi
d16c4822eb Bump 2022-02-10 20:14:35 +01:00
Archi
03e3d74e51 Allow more than one persona flag to be used 2022-02-10 20:10:34 +01:00
Archi
0a3d011e2e More advanced improvements over persona state 2022-02-10 19:55:32 +01:00
Archi
f112a05569 Rider cleanup after merge 2022-02-10 19:44:53 +01:00
Deyvan
1c579d96ee Add VR to UserInterfaceMode (#2511)
* Add VR to UserInterfaceMode

* Add VRMode to BotConfig

* Add logic for VRMode

* Remove VR from EUserInterfaceMode

* Remake VRMode -> PersonaStateFlags

* Rename PersonaStateFlags -> OnlineFlags for more user-friendly

* Parameter checks for SetPersonaStateFlags

* oops

* Update Bot.cs
2022-02-10 19:42:42 +01:00
ArchiBot
19a0be1d26 Automatic translations update 2022-02-10 02:08:21 +00:00
Renovate Bot
a8de495c7c Update ASF-ui commit hash to ff43133 2022-02-09 03:04:43 +00:00
ArchiBot
ab8ceab055 Automatic translations update 2022-02-09 02:12:42 +00:00
Renovate Bot
64b72d1e55 Update ASF-ui commit hash to c7acea4 2022-02-08 22:28:45 +00:00
Łukasz Domeradzki
f807bdb660 Fix permissions when proxifying commands (#2509)
* Fix permissions when proxifying commands

* Version bump
2022-02-08 23:17:03 +01:00
Archi
5b66b70566 Add PlayingWasBlocked logic to GamesPlayedWhileIdle 2022-02-08 17:42:14 +01:00
Renovate Bot
41c06851a5 Update ASF-ui commit hash to 533e608 2022-02-08 03:51:33 +00:00
ArchiBot
4dbb964ba9 Automatic translations update 2022-02-08 02:09:13 +00:00
Renovate Bot
11471c759d Update ASF-ui commit hash to eaddc99 2022-02-07 23:44:16 +00:00
Renovate Bot
2aa4ab7fe8 Update ASF-ui commit hash to 114ff77 2022-02-07 04:53:06 +00:00
ArchiBot
dfc055c066 Automatic translations update 2022-02-07 02:08:26 +00:00
ArchiBot
1a0ac11f46 Automatic translations update 2022-02-06 02:17:05 +00:00
ArchiBot
7266864b3b Automatic translations update 2022-02-05 02:01:05 +00:00
Archi
b52f746138 Remove dead code 2022-02-04 14:47:13 +01:00
Archi
a2585ec8c9 Remove obsolete features 2022-02-04 14:46:09 +01:00
Renovate Bot
37781698e0 Update wiki commit hash to f917797 2022-02-04 10:06:13 +00:00
ArchiBot
2a8fe7611b Automatic translations update 2022-02-04 02:03:32 +00:00
Renovate Bot
8fdf14bb10 Update wiki commit hash to 15d73b5 2022-02-03 20:48:34 +00:00
Archi
31db72b2d6 Bump 2022-02-03 21:05:04 +01:00
Archi
f28ae15cc9 Bump 2022-02-03 19:55:01 +01:00
Archi
6fcc64dad1 Update RemoteCommunication.cs 2022-02-03 19:54:39 +01:00
Archi
e18046084e Remove TradeMatcher remote communication
Instead, make MatchActively work without specifying SteamTradeMatcher
2022-02-03 18:01:39 +01:00
Łukasz Domeradzki
c3c5f33289 Split global statistics into per-bot RemoteConnection (#2505)
* Split global statistics into per-bot RemoteConnection

* Add migration for existing statistics setting
2022-02-03 17:33:04 +01:00
Renovate Bot
e03734ef8f Update ASF-ui commit hash to e25e4c2 2022-02-03 02:08:27 +00:00
ArchiBot
a7c2ca6bc5 Automatic translations update 2022-02-03 02:06:56 +00:00
Renovate Bot
171fca42f2 Update ASF-ui commit hash to bb18713 2022-02-02 15:07:03 +00:00
Renovate Bot
e90ac74b16 Update ASF-ui commit hash to ad228aa 2022-02-02 03:41:32 +00:00
ArchiBot
a5ce8bf3d7 Automatic translations update 2022-02-02 02:08:44 +00:00
renovate[bot]
aad77569a7 Update dependency System.Linq.Async to v6 (#2504)
Co-authored-by: Renovate Bot <bot@renovateapp.com>
2022-02-01 20:11:23 +01:00
Renovate Bot
e74b3e4f78 Update docker/build-push-action action to v2.9.0 2022-02-01 12:23:46 +00:00
Renovate Bot
7db44c5835 Update ASF-ui commit hash to 68fb54f 2022-02-01 11:03:29 +00:00
ArchiBot
25a88f941d Automatic translations update 2022-02-01 02:15:13 +00:00
Renovate Bot
2eab00facc Update ASF-ui commit hash to ef8d48a 2022-01-31 21:41:04 +00:00
Renovate Bot
98e51a4543 Update ASF-ui commit hash to e205055 2022-01-31 14:21:42 +00:00
ArchiBot
2ee49db81d Automatic translations update 2022-01-31 02:07:28 +00:00
Renovate Bot
aab397dd2d Update wiki commit hash to a4368cd 2022-01-30 17:38:23 +00:00
Renovate Bot
7426fafcb0 Update ASF-ui commit hash to 837307f 2022-01-30 03:14:55 +00:00
ArchiBot
270bd7ae26 Automatic translations update 2022-01-30 02:08:13 +00:00
Renovate Bot
4c3713c19f Update wiki commit hash to ea00ec2 2022-01-29 23:48:59 +00:00
Renovate Bot
5791b1e552 Update dependency Humanizer to v2.14.1 2022-01-29 15:55:12 +00:00
Renovate Bot
5c59236a09 Update ASF-ui commit hash to 4f5ca7c 2022-01-29 01:17:20 +00:00
Renovate Bot
a7119bba89 Update ASF-ui commit hash to bb9711b 2022-01-28 15:21:16 +00:00
ArchiBot
3b64e14489 Automatic translations update 2022-01-27 02:08:44 +00:00
Renovate Bot
5f36ca91d7 Update ASF-ui commit hash to 652f1e9 2022-01-26 04:08:45 +00:00
ArchiBot
5a2cd25fa1 Automatic translations update 2022-01-26 02:13:04 +00:00
ArchiBot
20a5d509a7 Automatic translations update 2022-01-25 02:12:19 +00:00
Renovate Bot
0c457e7f3e Update wiki commit hash to 35d6943 2022-01-25 00:10:10 +00:00
Renovate Bot
4e6014d652 Update ASF-ui commit hash to 17f3ffb 2022-01-24 17:59:03 +00:00
Renovate Bot
1436fb6d6a Update ASF-ui commit hash to c8379bd 2022-01-24 13:25:22 +00:00
Renovate Bot
e2578c7960 Update dependency Markdig.Signed to v0.27.0 2022-01-23 16:41:54 +00:00
Archi
8fb1a2e1ea Bump 2022-01-23 14:31:20 +01:00
419 changed files with 26973 additions and 11009 deletions

View File

@@ -22,7 +22,6 @@ ArchiSteamFarm/logs
# /_/ \_\____/|_| |____/ \___/ \___|_|\_\___|_|
# Additional folders that aren't used during image building:
**/.git*
**/[Bb]in/
**/[Oo]bj/
@@ -31,6 +30,10 @@ ArchiSteamFarm.CustomPlugins.*
ASF-ui/dist
wiki
# Add exception for .git used in ASF-ui, it's used for calculating commit hash during build
!.git/modules/ASF-ui
!ASF-ui/.git
# _ _
# | | (_) _ __ _ _ __ __
# | | | || '_ \ | | | |\ \/ /

View File

@@ -36,7 +36,7 @@ csharp_prefer_simple_default_expression = true:warning
csharp_prefer_simple_using_statement = true:warning
csharp_prefer_static_local_function = true:warning
csharp_preferred_modifier_order = public, protected, internal, private, static, extern, new, virtual, abstract, sealed, override, readonly, unsafe, volatile, async:warning
csharp_preferred_modifier_order = public, protected, internal, private, file, static, extern, new, virtual, abstract, sealed, override, readonly, unsafe, required, volatile, async:warning
csharp_preserve_single_line_blocks = true
csharp_preserve_single_line_statements = false
@@ -61,7 +61,6 @@ csharp_space_between_method_call_parameter_list_parentheses = false
csharp_space_between_method_declaration_empty_parameter_list_parentheses = false
csharp_space_between_method_declaration_name_and_open_parenthesis = false
csharp_space_between_method_declaration_parameter_list_parentheses = false
csharp_space_between_parentheses = none
csharp_space_between_square_brackets = false
csharp_style_conditional_delegate_call = true:warning
@@ -79,15 +78,27 @@ csharp_style_expression_bodied_properties = true:warning
csharp_style_implicit_object_creation_when_type_is_apparent = true:warning
csharp_style_inlined_variable_declaration = true:warning
csharp_style_pattern_local_over_anonymous_function = true:warning
csharp_style_namespace_declarations = file_scoped:warning
csharp_style_pattern_matching_over_as_with_null_check = true:warning
csharp_style_pattern_matching_over_is_with_cast_check = true:warning
csharp_style_prefer_extended_property_pattern = true:warning
dotnet_style_prefer_foreach_explicit_cast_in_source = always:warning
csharp_style_prefer_index_operator = true:warning
csharp_style_prefer_local_over_anonymous_function = true:warning
csharp_style_prefer_method_group_conversion = true:warning
csharp_style_prefer_not_pattern = true:warning
csharp_style_prefer_null_check_over_type_check = true:warning
csharp_style_prefer_pattern_matching = true:warning
csharp_style_prefer_primary_constructors = true:warning
csharp_style_prefer_range_operator = true:warning
csharp_style_prefer_readonly_struct = true:warning
csharp_style_prefer_readonly_struct_member = true:warning
csharp_style_prefer_switch_expression = true:warning
csharp_style_prefer_top_level_statements = false:warning
csharp_style_prefer_tuple_swap = true:warning
csharp_style_prefer_utf8_string_literals = true:warning
csharp_style_throw_expression = true:warning
@@ -98,13 +109,12 @@ csharp_style_var_elsewhere = false:warning
csharp_style_var_for_built_in_types = false:warning
csharp_style_var_when_type_is_apparent = false:warning
csharp_using_directive_placement = outside_namespace
csharp_using_directive_placement = outside_namespace:warning
###############################
# .NET Coding Conventions #
###############################
[*.{cs,vb}]
dotnet_analyzer_diagnostic.severity = warning
dotnet_code_quality.ca3003.excluded_symbol_names = BotController
@@ -114,6 +124,7 @@ dotnet_code_quality_unused_parameters = all:warning
dotnet_diagnostic.ca1028.severity = silent
dotnet_diagnostic.ca1031.severity = silent
dotnet_diagnostic.ca1863.severity = silent
# Rule - almost everything
dotnet_naming_rule.almost_everything_must_be_pascal_case.severity = warning
@@ -185,6 +196,7 @@ dotnet_sort_system_directives_first = true
dotnet_style_coalesce_expression = true:warning
dotnet_style_collection_initializer = true:warning
dotnet_style_explicit_tuple_names = true:warning
dotnet_style_namespace_match_folder = true:warning
dotnet_style_null_propagation = true:warning
dotnet_style_object_initializer = true:warning
@@ -218,7 +230,7 @@ dotnet_style_require_accessibility_modifiers = always:warning
# JetBrains, IntelliJ/Rider #
###############################
[*.{csproj,props,xml}]
[*.{csproj,props,resx,xml}]
ij_xml_keep_blank_lines = 1
ij_xml_keep_line_breaks = false
ij_xml_keep_line_breaks_in_text = false

View File

@@ -9,7 +9,7 @@ Before making an issue or pull request, you should carefully read **[ASF wiki](h
Examples of **invalid** issues:
- Asking how to install the program or use one of its functions
- Having technical difficulties running the program in some environment, encountering expected issues caused by the user's neglect
- Reporting problems that are not caused by ASF, such as ASF-ui issues or Steam not allowing you to log in
- Reporting problems that are not caused by ASF, such as ASF-ui issues or Steam not allowing you to send trade offers
- All issues encountered while running ASF in unsupported environment/setup, such as those with modified ASF source, having more bots than our maximum recommended limit or using custom plugins
- Other activities that are not related to ASF development in any way and do not require any development action from us
@@ -35,7 +35,7 @@ It would also be cool if you could reproduce your issue on latest **[pre-release
While everybody is able to create suggestions how to improve ASF, GitHub issues is not the proper place to discuss if your enhancement makes sense - by posting it you already **believe** that it makes sense, and you're **ready to convince us how**. If you have some idea but you're not sure if it's possible, makes sense, or fits ASF purpose - you have our support channels where we'll be happy to discuss given enhancement in calm atmosphere, evaluating possibilities and pros/cons. This is what we suggest to do in the first place, as in GitHub issue you're switching from **having an idea** into **having a valid enhancement with general concept, given purpose and fixed details - you're ready to defend your idea and convince us how it can be useful for ASF**. This is the general reason why many issues are rejected - because you're lacking details that would prove your suggestion being worthy.
ASF has a strict scope - farming Steam cards from Steam games + basic bots management. ASF scope is very subjective and evaluated on practical/moral basis - how much this feature fits ASF, how much actual coding effort is required to make it happen, how useful/wanted this feature is by the community and likewise. In general we don't mind further enhancements to the program, as there is always a room for improvement, but at the same time we consider ASF to be feature-complete and vast majority of things that are suggested today are simply out of the scope of ASF as a program. This is why we've rejected **[a lot](https://github.com/JustArchiNET/ArchiSteamFarm/issues?q=label%3A"✨+Enhancement"+label%3A"👎+Not+going+to+happen")** of general enhancements, for various different reasons, mainly regarding the scope of the program. Some people may find it hard to understand why we're rather sceptical towards suggestions, while the answer for that isn't obvious at first.
ASF has a strict scope - farming Steam cards from Steam games + basic bots management. ASF scope is very subjective and evaluated on practical/moral basis - how much this feature fits ASF, how much actual coding effort is required to make it happen, how useful/wanted this feature is by the community and likewise. In general we don't mind further enhancements to the program, as there is always a room for improvement, but at the same time we consider ASF to be feature-complete in what we call "active maintenance" state, and vast majority of things that are suggested today are simply out of the scope of ASF as a program. This is why we've rejected **[a lot](https://github.com/JustArchiNET/ArchiSteamFarm/issues?q=label%3A"✨+Enhancement"+label%3A"👎+Not+going+to+happen")** of general enhancements, for various different reasons, mainly regarding the scope of the program. Some people may find it hard to understand why we're rather sceptical towards suggestions, while the answer for that isn't obvious at first.
> In the lifetime of an Open Source project, only 10 percent of the time spent adding a feature will be spent coding it. The other 90 percent will be spent in support of that feature.
@@ -67,7 +67,7 @@ ASF is open-source project, developed mainly by **[JustArchi](https://github.com
### License
ASF is using **[Apache License 2.0](https://github.com/JustArchiNET/ArchiSteamFarm/blob/main/LICENSE-2.0.txt)**.
ASF is using **[Apache License 2.0](https://github.com/JustArchiNET/ArchiSteamFarm/blob/main/LICENSE.txt)**.
> Unless You explicitly state otherwise, any Contribution intentionally submitted for inclusion in the Work by You to the Licensor shall be under the terms and conditions of this License, without any additional terms or conditions.
@@ -77,10 +77,9 @@ For more info about the license, please check out **[license](https://github.com
### Code style
Please stick with ASF code style when submitting PRs. In repo you can find several different files dedicated to making it easier for you:
Please try to stick with ASF code style when submitting PRs. In repo you can find at least several different files dedicated to making it easier for you:
- **[EditorConfig](https://github.com/JustArchiNET/ArchiSteamFarm/blob/main/.editorconfig)** file which is supported by all major IDEs and requires no further setup. It's a good starting point, although it doesn't include all the rules that we'd like to see.
- **[VS settings](https://github.com/JustArchiNET/ArchiSteamFarm/blob/main/CodeStyle.vssettings)** file that you can use in Visual Studio for import. This one includes far more options than EditorConfig alone, and it's a very good choice if you're using bare VS.
- **[DotSettings](https://github.com/JustArchiNET/ArchiSteamFarm/blob/main/ArchiSteamFarm.sln.DotSettings)** file that is being used by JetBrains products, namely **[ReSharper](https://www.jetbrains.com/resharper)** and **[Rider](https://www.jetbrains.com/rider)**. This one is the most complete config file that is also being loaded automatically when you're using ReSharper/Rider with our code.
Personally we're using **[JetBrains Rider](https://www.jetbrains.com/rider)**, so no other action is needed after opening `ArchiSteamFarm.sln` solution. If you're using VS alone, it's probably a good idea to import our code style settings, although even editor config should be enough for majority of cases. If you can save us those few extra seconds cleaning up your code after accepting it, it would be great and surely improve overall code history.
Since above files are used automatically, in vast majority of cases, you may just need to run some cleanup operation on files that you've edited, assuming your IDE doesn't do that automatically. If you can save us those few extra seconds cleaning up your code after accepting it, it would be great and surely improve overall code history.

3
.github/FUNDING.yml vendored
View File

@@ -1,5 +1,4 @@
# These are supported funding model platforms
github: JustArchi
patreon: JustArchi
custom: ["https://paypal.me/JustArchi", "https://pay.revolut.com/profile/ukaszyxm", "https://commerce.coinbase.com/checkout/0c23b844-c51b-45f4-9135-8db7c6fcf98e", "https://steamcommunity.com/tradeoffer/new/?partner=46697991&token=0ix2Ruv_"]
custom: ["https://paypal.me/JustArchi", "https://pay.revolut.com/justarchi", "https://commerce.coinbase.com/checkout/0c23b844-c51b-45f4-9135-8db7c6fcf98e", "https://steamcommunity.com/tradeoffer/new/?partner=46697991&token=0ix2Ruv_"]

View File

@@ -12,6 +12,8 @@ body:
required: true
- label: I also read **[Setting-up](https://github.com/JustArchiNET/ArchiSteamFarm/wiki/Setting-up)** and **[FAQ](https://github.com/JustArchiNET/ArchiSteamFarm/wiki/FAQ)**, I don't need **[help](https://github.com/JustArchiNET/ArchiSteamFarm/blob/main/.github/SUPPORT.md)**, this is a bug report
required: true
- label: This is not a **[duplicate](https://github.com/JustArchiNET/ArchiSteamFarm/issues?q=is%3Aissue)** of an existing issue
required: true
- label: I don't own more than **[10 accounts in total](https://github.com/JustArchiNET/ArchiSteamFarm/wiki/FAQ#how-many-bots-can-i-run-with-asf)**
required: true
- label: I'm not using **[custom plugins](https://github.com/JustArchiNET/ArchiSteamFarm/wiki/Plugins)**
@@ -42,12 +44,12 @@ body:
- docker-linux/arm/v7
- docker-linux/arm64
- generic (with latest .NET runtime)
- generic-netf (with latest Mono runtime)
- linux-arm
- linux-arm64
- linux-x64
- osx-arm64
- osx-x64
- win-arm64
- win-x64
validations:
required: true
@@ -85,6 +87,7 @@ body:
description: |
Every command or action that happened after launching ASF, which leads to the bug.
If launching ASF with provided configs (below) is everything that is needed, then this section is not mandatory.
Screenshots of the problem and/or steps leading to it could be very useful in particular.
placeholder: |
1. Put cup below the machine hosting ASF.
2. Send `PUT /Api/Coffee` request selecting latte macchiato.

View File

@@ -12,6 +12,8 @@ body:
required: true
- label: I also read **[Setting-up](https://github.com/JustArchiNET/ArchiSteamFarm/wiki/Setting-up)** and **[FAQ](https://github.com/JustArchiNET/ArchiSteamFarm/wiki/FAQ)**, I don't need **[help](https://github.com/JustArchiNET/ArchiSteamFarm/blob/main/.github/SUPPORT.md)**, this is an enhancement idea
required: true
- label: This is not a **[duplicate](https://github.com/JustArchiNET/ArchiSteamFarm/issues?q=is%3Aissue)** of an existing issue
required: true
- label: My idea doesn't duplicate existing ASF functionality described on the **[wiki](https://github.com/JustArchiNET/ArchiSteamFarm/wiki)**
required: true
- label: I believe that my idea falls into ASF's scope and should be offered as part of ASF built-in functionality

View File

@@ -1,6 +1,6 @@
### Notice
**Pre-releases are experimental versions that often contain unpatched bugs, work-in-progress features or rewritten implementations. If you don't consider yourself advanced user, please download **[latest stable release](https://github.com/JustArchiNET/ArchiSteamFarm/releases/latest)** instead. Pre-release versions are dedicated to users who know how to report bugs, deal with issues and give feedback - no technical support will be given. Check out ASF **[release cycle](https://github.com/JustArchiNET/ArchiSteamFarm/wiki/Release-cycle)** if you'd like to learn more.**
**Pre-releases are experimental versions that often contain unpatched bugs, work-in-progress features and rewritten implementations. If you don't consider yourself advanced user, please download **[latest stable release](https://github.com/JustArchiNET/ArchiSteamFarm/releases/latest)** instead. Pre-release versions are dedicated to users who know how to report bugs, deal with issues and give feedback - no technical support will be given. Check out ASF **[release cycle](https://github.com/JustArchiNET/ArchiSteamFarm/wiki/Release-cycle)** if you'd like to learn more.**
---
@@ -14,4 +14,4 @@ This is automated GitHub deployment, human-readable changelog should be availabl
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 a donation. 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!
[![GitHub sponsor](https://img.shields.io/badge/GitHub-sponsor-ea4aaa.svg?logo=github-sponsors)](https://github.com/sponsors/JustArchi) [![Patreon support](https://img.shields.io/badge/Patreon-support-f96854.svg?logo=patreon)](https://www.patreon.com/JustArchi) [![Crypto donate](https://img.shields.io/badge/Crypto-donate-f7931a.svg?logo=bitcoin)](https://commerce.coinbase.com/checkout/0c23b844-c51b-45f4-9135-8db7c6fcf98e) [![PayPal.me donate](https://img.shields.io/badge/PayPal.me-donate-00457c.svg?logo=paypal)](https://paypal.me/JustArchi) [![PayPal donate](https://img.shields.io/badge/PayPal-donate-00457c.svg?logo=paypal)](https://www.paypal.com/cgi-bin/webscr?cmd=_s-xclick&hosted_button_id=HD2P2P3WGS5Y4) [![Revolut donate](https://img.shields.io/badge/Revolut-donate-0075eb.svg?logo=revolut)](https://pay.revolut.com/profile/ukaszyxm) [![Steam donate](https://img.shields.io/badge/Steam-donate-000000.svg?logo=steam)](https://steamcommunity.com/tradeoffer/new/?partner=46697991&token=0ix2Ruv_)
[![GitHub sponsor](https://img.shields.io/badge/GitHub-sponsor-ea4aaa.svg?logo=github-sponsors)](https://github.com/sponsors/JustArchi) [![Crypto donate](https://img.shields.io/badge/Crypto-donate-f7931a.svg?logo=bitcoin)](https://commerce.coinbase.com/checkout/0c23b844-c51b-45f4-9135-8db7c6fcf98e) [![PayPal.me donate](https://img.shields.io/badge/PayPal.me-donate-00457c.svg?logo=paypal)](https://paypal.me/JustArchi) [![PayPal donate](https://img.shields.io/badge/PayPal-donate-00457c.svg?logo=paypal)](https://www.paypal.com/cgi-bin/webscr?cmd=_s-xclick&hosted_button_id=HD2P2P3WGS5Y4) [![Revolut donate](https://img.shields.io/badge/Revolut-donate-0075eb.svg?logo=revolut)](https://pay.revolut.com/justarchi) [![Steam donate](https://img.shields.io/badge/Steam-donate-000000.svg?logo=steam)](https://steamcommunity.com/tradeoffer/new/?partner=46697991&token=0ix2Ruv_)

2
.github/SECURITY.md vendored
View File

@@ -18,6 +18,6 @@ We announce security advisories for our program on **[GitHub](https://github.com
We're doing our best to protect our community from all harm, therefore we take security vulnerabilities very seriously.
If you believe that you've found one, we'd appreciate if you let us know about it. You can do so by contacting us privately at ASF@JustArchi.net e-mail, where we'll do our best to evaluate your issue ASAP and keep you updated with the development status. If your vulnerability isn't crucial and doesn't result in a direct escalation, therefore can be known publicly while the appropriate fix is being implemented, you can also open a standard **[issue](https://github.com/JustArchiNET/ArchiSteamFarm/issues/new/choose)** instead.
If you believe that you've found one, we'd appreciate if you let us know about it. You can do so by **[opening a security advisory](https://github.com/JustArchiNET/ArchiSteamFarm/security/advisories/new)**, where we'll do our best to evaluate your issue ASAP and keep you updated with the development status. If your vulnerability isn't crucial and doesn't result in a direct escalation, therefore can be known publicly while the appropriate fix is being implemented, you can also open a standard **[issue](https://github.com/JustArchiNET/ArchiSteamFarm/issues/new/choose)** instead.
Depending on the severity of the issue, we might take further actions in order to limit potential damage, for example by speeding up the release of the next stable ASF version. This is evaluated on a case-by-case basis.

2
.github/SUPPORT.md vendored
View File

@@ -4,4 +4,4 @@ Our **[wiki](https://github.com/JustArchiNET/ArchiSteamFarm/wiki)** is the offic
We also have three independent support channels dedicated to our ASF users, in case you couldn't manage to solve the issue yourself. We answer all support and technical matters in our **[GitHub discussions](https://github.com/JustArchiNET/ArchiSteamFarm/discussions/categories/support)**, **[Steam group](https://steamcommunity.com/groups/archiasf/discussions/1)**, and on our **[Discord server](https://discord.gg/hSQgt8j)**. You're free to use the support channel that matches your preferences, although keep in mind that you have a higher chance solving your issue on the GitHub or Steam, where we're doing our best to answer all questions that couldn't be answered by our community itself (as opposed to Discord server where we're not active 24/7 and therefore not always able to answer).
GitHub **issues** (unlike discussions), are being used solely for ASF development, especially in regards to bugs and enhancements. We have a very strict policy regarding that, as GitHub issues is **not** a general support channel, it's dedicated exclusively to ASF development and we're not answering common ASF matters there, as we have appropriate support channels (mentioned above) for that. Common matters include not only general questions or issues that are obviously related to program usage, but also users reporting "bugs" that are clearly considered intended behaviour coming for example (and mainly) from misconfiguration or lack of understanding how the program works. If you're not sure whether your matter relates to ASF development or not, especially if you're not sure if it's a bug or intended behaviour, we recommend to use a support channel instead, where we'll answer you in calm atmosphere and forward your matter to GitHub if deemed appropriate. Invalid GitHub issues will be closed immediately and won't be answered.
GitHub **issues** (unlike discussions), are being used solely for ASF development, especially in regards to bugs and enhancements. We have a very strict policy regarding that, as GitHub issues is **not** a general support channel, it's dedicated exclusively to ASF development and we're not answering common ASF matters there, as we have appropriate support channels (mentioned above) for that. Common matters include not only general questions or issues that are obviously related to program usage, but also users reporting "bugs" that are clearly considered intended behaviour coming for example (and mainly) from misconfiguration or lack of understanding how the program works. If you're not sure whether your matter relates to ASF development or not, especially if you're not sure if it's a bug or intended behaviour, we recommend to use a support channel instead, where we'll answer you in calm atmosphere and forward your matter as GitHub issue if deemed appropriate. Invalid GitHub issues will be closed immediately and won't be answered.

37
.github/crowdin.yml vendored
View File

@@ -1,19 +1,52 @@
"base_path": ".."
"preserve_hierarchy": true
"files": [
{
"source": "/ArchiSteamFarm/Localization/Strings.resx",
"translation": "/ArchiSteamFarm/Localization/Strings.%locale%.resx",
"translation_replace": {
".bs-BA.resx": ".bs-Latn.resx",
".lol-US.resx": ".qps-Ploc.resx",
".sr-CS.resx": ".sr-Latn.resx"
".sr-CS.resx": ".sr-Latn.resx",
".zh-CN.resx": ".zh-Hans.resx",
".zh-HK.resx": ".zh-Hant-HK.resx",
".zh-TW.resx": ".zh-Hant.resx"
}
},
{
"source": "/ArchiSteamFarm.OfficialPlugins.ItemsMatcher/Localization/Strings.resx",
"translation": "/ArchiSteamFarm.OfficialPlugins.ItemsMatcher/Localization/Strings.%locale%.resx",
"translation_replace": {
".bs-BA.resx": ".bs-Latn.resx",
".lol-US.resx": ".qps-Ploc.resx",
".sr-CS.resx": ".sr-Latn.resx",
".zh-CN.resx": ".zh-Hans.resx",
".zh-HK.resx": ".zh-Hant-HK.resx",
".zh-TW.resx": ".zh-Hant.resx"
}
},
{
"source": "/ArchiSteamFarm.OfficialPlugins.MobileAuthenticator/Localization/Strings.resx",
"translation": "/ArchiSteamFarm.OfficialPlugins.MobileAuthenticator/Localization/Strings.%locale%.resx",
"translation_replace": {
".bs-BA.resx": ".bs-Latn.resx",
".lol-US.resx": ".qps-Ploc.resx",
".sr-CS.resx": ".sr-Latn.resx",
".zh-CN.resx": ".zh-Hans.resx",
".zh-HK.resx": ".zh-Hant-HK.resx",
".zh-TW.resx": ".zh-Hant.resx"
}
},
{
"source": "/ArchiSteamFarm.OfficialPlugins.SteamTokenDumper/Localization/Strings.resx",
"translation": "/ArchiSteamFarm.OfficialPlugins.SteamTokenDumper/Localization/Strings.%locale%.resx",
"translation_replace": {
".bs-BA.resx": ".bs-Latn.resx",
".lol-US.resx": ".qps-Ploc.resx",
".sr-CS.resx": ".sr-Latn.resx"
".sr-CS.resx": ".sr-Latn.resx",
".zh-CN.resx": ".zh-Hans.resx",
".zh-HK.resx": ".zh-Hant-HK.resx",
".zh-TW.resx": ".zh-Hant.resx"
}
},
{

View File

@@ -5,7 +5,9 @@ on: [push, pull_request]
env:
DOTNET_CLI_TELEMETRY_OPTOUT: true
DOTNET_NOLOGO: true
DOTNET_SDK_VERSION: 6.0.x
DOTNET_SDK_VERSION: 8.0
permissions: {}
jobs:
main:
@@ -19,12 +21,13 @@ jobs:
steps:
- name: Checkout code
uses: actions/checkout@v2.4.0
uses: actions/checkout@v4.1.1
with:
show-progress: false
submodules: recursive
- name: Setup .NET Core
uses: actions/setup-dotnet@v1.9.0
uses: actions/setup-dotnet@v4.0.0
with:
dotnet-version: ${{ env.DOTNET_SDK_VERSION }}
@@ -38,9 +41,8 @@ jobs:
run: dotnet test ArchiSteamFarm.Tests -c "${{ matrix.configuration }}" -p:ContinuousIntegrationBuild=true -p:UseAppHost=false --nologo
- name: Upload latest strings for translation on Crowdin
continue-on-error: true
if: ${{ github.event_name == 'push' && github.ref == 'refs/heads/main' && matrix.configuration == 'Release' && startsWith(matrix.os, 'ubuntu-') }}
uses: crowdin/github-action@1.4.6
uses: crowdin/github-action@v1.19.0
with:
crowdin_branch_name: main
config: '.github/crowdin.yml'

45
.github/workflows/code-quality.yml vendored Normal file
View File

@@ -0,0 +1,45 @@
name: ASF-code-quality
on: [push, pull_request]
env:
DOTNET_CLI_TELEMETRY_OPTOUT: true
DOTNET_NOLOGO: true
permissions:
checks: write
contents: write
pull-requests: write
security-events: write
jobs:
main:
if: github.event_name == 'push' || github.event.pull_request.head.repo.full_name == github.repository
runs-on: ubuntu-latest
steps:
- name: Checkout code
if: github.event_name != 'pull_request'
uses: actions/checkout@v4.1.1
with:
show-progress: false
- name: Checkout code (for PR)
if: github.event_name == 'pull_request'
uses: actions/checkout@v4.1.1
with:
fetch-depth: 100 # History is required for pull request analysis
ref: ${{ github.event.pull_request.head.sha }} # To check out the actual pull request commit, not the merge commit
show-progress: false
- name: Run Qodana scan
uses: JetBrains/qodana-action@v2023.3.1
with:
args: --property=idea.headless.enable.statistics=false
env:
QODANA_TOKEN: ${{ secrets.QODANA_TOKEN }}
- name: Report Qodana results to GitHub
uses: github/codeql-action/upload-sarif@v3.24.4
with:
sarif_file: ${{ runner.temp }}/qodana/results/qodana.sarif.json

View File

@@ -5,6 +5,8 @@ on: [push, pull_request]
env:
PLATFORMS: linux/amd64,linux/arm,linux/arm64
permissions: {}
jobs:
main:
strategy:
@@ -17,15 +19,16 @@ jobs:
steps:
- name: Checkout code
uses: actions/checkout@v2.4.0
uses: actions/checkout@v4.1.1
with:
show-progress: false
submodules: recursive
- name: Set up Docker Buildx
uses: docker/setup-buildx-action@v1.6.0
uses: docker/setup-buildx-action@v3.0.0
- name: Build ${{ matrix.configuration }} Docker image from ${{ matrix.file }}
uses: docker/build-push-action@v2.8.0
uses: docker/build-push-action@v5.1.0
with:
context: .
file: ${{ matrix.file }}

View File

@@ -9,28 +9,32 @@ env:
PLATFORMS: linux/amd64,linux/arm,linux/arm64
TAG: latest
permissions:
packages: write
jobs:
main:
runs-on: ubuntu-latest
steps:
- name: Checkout code
uses: actions/checkout@v2.4.0
uses: actions/checkout@v4.1.1
with:
show-progress: false
submodules: recursive
- name: Set up Docker Buildx
uses: docker/setup-buildx-action@v1.6.0
uses: docker/setup-buildx-action@v3.0.0
- name: Login to ghcr.io
uses: docker/login-action@v1.12.0
uses: docker/login-action@v3.0.0
with:
registry: ghcr.io
username: ${{ github.actor }}
password: ${{ secrets.GITHUB_TOKEN }}
- name: Login to DockerHub
uses: docker/login-action@v1.12.0
uses: docker/login-action@v3.0.0
with:
username: ${{ secrets.DOCKERHUB_USERNAME }}
password: ${{ secrets.DOCKERHUB_TOKEN }}
@@ -55,7 +59,7 @@ jobs:
echo "DH_REPOSITORY=$(echo ${{ secrets.DOCKERHUB_USERNAME }}/${{ github.event.repository.name }} | tr '[:upper:]' '[:lower:]')" >> "$GITHUB_ENV"
- name: Build and publish Docker image from Dockerfile.Service
uses: docker/build-push-action@v2.8.0
uses: docker/build-push-action@v5.1.0
with:
context: .
file: Dockerfile.Service

View File

@@ -10,28 +10,32 @@ env:
PLATFORMS: linux/amd64,linux/arm,linux/arm64
TAG: main
permissions:
packages: write
jobs:
main:
runs-on: ubuntu-latest
steps:
- name: Checkout code
uses: actions/checkout@v2.4.0
uses: actions/checkout@v4.1.1
with:
show-progress: false
submodules: recursive
- name: Set up Docker Buildx
uses: docker/setup-buildx-action@v1.6.0
uses: docker/setup-buildx-action@v3.0.0
- name: Login to ghcr.io
uses: docker/login-action@v1.12.0
uses: docker/login-action@v3.0.0
with:
registry: ghcr.io
username: ${{ github.actor }}
password: ${{ secrets.GITHUB_TOKEN }}
- name: Login to DockerHub
uses: docker/login-action@v1.12.0
uses: docker/login-action@v3.0.0
with:
username: ${{ secrets.DOCKERHUB_USERNAME }}
password: ${{ secrets.DOCKERHUB_TOKEN }}
@@ -55,7 +59,7 @@ jobs:
echo "DH_REPOSITORY=$(echo ${{ secrets.DOCKERHUB_USERNAME }}/${{ github.event.repository.name }} | tr '[:upper:]' '[:lower:]')" >> "$GITHUB_ENV"
- name: Build and publish Docker image from Dockerfile
uses: docker/build-push-action@v2.8.0
uses: docker/build-push-action@v5.1.0
with:
context: .
platforms: ${{ env.PLATFORMS }}
@@ -70,8 +74,7 @@ jobs:
push: true
- name: Update DockerHub repository description
continue-on-error: true
uses: peter-evans/dockerhub-description@v2.4.3
uses: peter-evans/dockerhub-description@v4.0.0
with:
username: ${{ secrets.DOCKERHUB_USERNAME }}
password: ${{ secrets.DOCKERHUB_PASSWORD }}

View File

@@ -10,28 +10,32 @@ env:
PLATFORMS: linux/amd64,linux/arm,linux/arm64
TAG: released
permissions:
packages: write
jobs:
main:
runs-on: ubuntu-latest
steps:
- name: Checkout code
uses: actions/checkout@v2.4.0
uses: actions/checkout@v4.1.1
with:
show-progress: false
submodules: recursive
- name: Set up Docker Buildx
uses: docker/setup-buildx-action@v1.6.0
uses: docker/setup-buildx-action@v3.0.0
- name: Login to ghcr.io
uses: docker/login-action@v1.12.0
uses: docker/login-action@v3.0.0
with:
registry: ghcr.io
username: ${{ github.actor }}
password: ${{ secrets.GITHUB_TOKEN }}
- name: Login to DockerHub
uses: docker/login-action@v1.12.0
uses: docker/login-action@v3.0.0
with:
username: ${{ secrets.DOCKERHUB_USERNAME }}
password: ${{ secrets.DOCKERHUB_TOKEN }}
@@ -56,7 +60,7 @@ jobs:
echo "DH_REPOSITORY=$(echo ${{ secrets.DOCKERHUB_USERNAME }}/${{ github.event.repository.name }} | tr '[:upper:]' '[:lower:]')" >> "$GITHUB_ENV"
- name: Build and publish Docker image from Dockerfile
uses: docker/build-push-action@v2.8.0
uses: docker/build-push-action@v5.1.0
with:
context: .
platforms: ${{ env.PLATFORMS }}

View File

@@ -3,13 +3,23 @@ name: ASF-lock-threads
on:
schedule:
- cron: '0 1 * * *'
workflow_dispatch:
permissions:
discussions: write
issues: write
pull-requests: write
concurrency:
group: lock-threads
jobs:
lock:
runs-on: ubuntu-latest
steps:
- name: Lock inactive threads
uses: dessant/lock-threads@v3.0.0
uses: dessant/lock-threads@v5.0.1
with:
discussion-inactive-days: 90
issue-inactive-days: 60
pr-inactive-days: 60

View File

@@ -3,42 +3,28 @@ name: ASF-publish
on: [push, pull_request]
env:
ASF_PRIVATE_SNK: ${{ secrets.ASF_PRIVATE_SNK }}
CONFIGURATION: Release
DOTNET_CLI_TELEMETRY_OPTOUT: true
DOTNET_NOLOGO: true
DOTNET_SDK_VERSION: 6.0.x
NET_CORE_VERSION: net6.0
NET_FRAMEWORK_VERSION: net48
DOTNET_SDK_VERSION: 8.0
NODE_JS_VERSION: 'lts/*'
STEAM_TOKEN_DUMPER_NAME: ArchiSteamFarm.OfficialPlugins.SteamTokenDumper
STEAM_TOKEN_DUMPER_TOKEN: ${{ secrets.STEAM_TOKEN_DUMPER_TOKEN }}
PLUGINS: ArchiSteamFarm.OfficialPlugins.ItemsMatcher ArchiSteamFarm.OfficialPlugins.MobileAuthenticator ArchiSteamFarm.OfficialPlugins.SteamTokenDumper
permissions: {}
jobs:
publish:
strategy:
fail-fast: false
matrix:
os: [macos-latest, ubuntu-latest, windows-latest]
runs-on: ${{ matrix.os }}
publish-asf-ui:
runs-on: ubuntu-latest
steps:
- name: Checkout code
uses: actions/checkout@v2.4.0
uses: actions/checkout@v4.1.1
with:
show-progress: false
submodules: recursive
- name: Setup .NET Core
uses: actions/setup-dotnet@v1.9.0
with:
dotnet-version: ${{ env.DOTNET_SDK_VERSION }}
- name: Verify .NET Core
run: dotnet --info
- name: Setup Node.js with npm
uses: actions/setup-node@v2.5.1
uses: actions/setup-node@v4.0.2
with:
check-latest: true
node-version: ${{ env.NODE_JS_VERSION }}
@@ -55,8 +41,62 @@ jobs:
- name: Publish ASF-ui
run: npm run-script deploy --no-progress --prefix ASF-ui
- name: Upload ASF-ui
uses: actions/upload-artifact@v4.3.1
with:
name: ASF-ui
path: ASF-ui/dist
publish-asf:
needs: publish-asf-ui
strategy:
fail-fast: false
matrix:
include:
- os: ubuntu-latest
variant: generic
- os: ubuntu-latest
variant: linux-arm
- os: ubuntu-latest
variant: linux-arm64
- os: ubuntu-latest
variant: linux-x64
- os: macos-latest
variant: osx-arm64
- os: macos-latest
variant: osx-x64
- os: windows-latest
variant: win-arm64
- os: windows-latest
variant: win-x64
runs-on: ${{ matrix.os }}
steps:
- name: Checkout code
uses: actions/checkout@v4.1.1
with:
show-progress: false
- name: Setup .NET Core
uses: actions/setup-dotnet@v4.0.0
with:
dotnet-version: ${{ env.DOTNET_SDK_VERSION }}
- name: Verify .NET Core
run: dotnet --info
- name: Download previously built ASF-ui
uses: actions/download-artifact@v4.1.2
with:
name: ASF-ui
path: ASF-ui/dist
- name: Prepare private key for signing on Unix
if: startsWith(matrix.os, 'macos-') || startsWith(matrix.os, 'ubuntu-')
env:
ASF_PRIVATE_SNK: ${{ secrets.ASF_PRIVATE_SNK }}
shell: sh
run: |
set -eu
@@ -67,6 +107,8 @@ jobs:
- name: Prepare private key for signing on Windows
if: startsWith(matrix.os, 'windows-')
env:
ASF_PRIVATE_SNK: ${{ secrets.ASF_PRIVATE_SNK }}
shell: pwsh
run: |
Set-StrictMode -Version Latest
@@ -83,18 +125,16 @@ jobs:
}
}
- name: Prepare ArchiSteamFarm.OfficialPlugins.SteamTokenDumper on Unix
- name: Prepare for publishing on Unix
if: startsWith(matrix.os, 'macos-') || startsWith(matrix.os, 'ubuntu-')
shell: sh
shell: bash
run: |
set -eu
set -euo pipefail
if [ -n "${STEAM_TOKEN_DUMPER_TOKEN-}" ] && [ -f "${STEAM_TOKEN_DUMPER_NAME}/SharedInfo.cs" ]; then
sed "s/STEAM_TOKEN_DUMPER_TOKEN/${STEAM_TOKEN_DUMPER_TOKEN}/g" "${STEAM_TOKEN_DUMPER_NAME}/SharedInfo.cs" > "${STEAM_TOKEN_DUMPER_NAME}/SharedInfo.cs.new"
mv "${STEAM_TOKEN_DUMPER_NAME}/SharedInfo.cs.new" "${STEAM_TOKEN_DUMPER_NAME}/SharedInfo.cs"
fi
dotnet restore
dotnet build ArchiSteamFarm -c "$CONFIGURATION" -p:ContinuousIntegrationBuild=true -p:TargetLatestRuntimePatch=false -p:UseAppHost=false --nologo
- name: Prepare ArchiSteamFarm.OfficialPlugins.SteamTokenDumper on Windows
- name: Prepare for publishing on Windows
if: startsWith(matrix.os, 'windows-')
shell: pwsh
run: |
@@ -102,125 +142,71 @@ jobs:
$ErrorActionPreference = 'Stop'
$ProgressPreference = 'SilentlyContinue'
if ((Test-Path env:STEAM_TOKEN_DUMPER_TOKEN) -and ($env:STEAM_TOKEN_DUMPER_TOKEN) -and (Test-Path "$env:STEAM_TOKEN_DUMPER_NAME\SharedInfo.cs" -PathType Leaf)) {
(Get-Content "$env:STEAM_TOKEN_DUMPER_NAME\SharedInfo.cs").Replace('STEAM_TOKEN_DUMPER_TOKEN', "$env:STEAM_TOKEN_DUMPER_TOKEN") | Set-Content "$env:STEAM_TOKEN_DUMPER_NAME\SharedInfo.cs"
dotnet restore
if ($LastExitCode -ne 0) {
throw "Last command failed."
}
- name: Publish ArchiSteamFarm.OfficialPlugins.SteamTokenDumper for .NET Core
run: dotnet publish "${{ env.STEAM_TOKEN_DUMPER_NAME }}" -c "${{ env.CONFIGURATION }}" -f "${{ env.NET_CORE_VERSION }}" -o "out/${{ env.STEAM_TOKEN_DUMPER_NAME }}/${{ env.NET_CORE_VERSION }}" -p:ContinuousIntegrationBuild=true -p:TargetLatestRuntimePatch=false -p:UseAppHost=false --nologo
dotnet build ArchiSteamFarm -c "$env:CONFIGURATION" -p:ContinuousIntegrationBuild=true -p:TargetLatestRuntimePatch=false -p:UseAppHost=false --nologo
- name: Publish ArchiSteamFarm.OfficialPlugins.SteamTokenDumper for .NET Framework
if: startsWith(matrix.os, 'windows-')
run: dotnet publish "${{ env.STEAM_TOKEN_DUMPER_NAME }}" -c "${{ env.CONFIGURATION }}" -f "${{ env.NET_FRAMEWORK_VERSION }}" -o "out/${{ env.STEAM_TOKEN_DUMPER_NAME }}/${{ env.NET_FRAMEWORK_VERSION }}" -p:ContinuousIntegrationBuild=true -p:TargetLatestRuntimePatch=false -p:UseAppHost=false --nologo
if ($LastExitCode -ne 0) {
throw "Last command failed."
}
- name: Restore packages in preparation for ArchiSteamFarm publishing
run: dotnet restore ArchiSteamFarm -p:ContinuousIntegrationBuild=true --nologo
- name: Publish ArchiSteamFarm on Unix
- name: Prepare ArchiSteamFarm.OfficialPlugins.SteamTokenDumper on Unix
if: startsWith(matrix.os, 'macos-') || startsWith(matrix.os, 'ubuntu-')
env:
VARIANTS: generic linux-arm linux-arm64 linux-x64 osx-arm64 osx-x64 win-x64 # NOTE: When modifying variants, don't forget to update ASF_VARIANT definitions in SharedInfo.cs!
STEAM_TOKEN_DUMPER_TOKEN: ${{ secrets.STEAM_TOKEN_DUMPER_TOKEN }}
shell: sh
run: |
set -eu
publish() {
if [ "$1" = 'generic' ]; then
variantArgs="-p:TargetLatestRuntimePatch=false -p:UseAppHost=false"
else
variantArgs="-p:PublishSingleFile=true -p:PublishTrimmed=true -r $1 --self-contained"
fi
if [ -n "${STEAM_TOKEN_DUMPER_TOKEN-}" ] && [ -f "ArchiSteamFarm.OfficialPlugins.SteamTokenDumper/SharedInfo.cs" ]; then
sed "s/STEAM_TOKEN_DUMPER_TOKEN/${STEAM_TOKEN_DUMPER_TOKEN}/g" "ArchiSteamFarm.OfficialPlugins.SteamTokenDumper/SharedInfo.cs" > "ArchiSteamFarm.OfficialPlugins.SteamTokenDumper/SharedInfo.cs.new"
mv "ArchiSteamFarm.OfficialPlugins.SteamTokenDumper/SharedInfo.cs.new" "ArchiSteamFarm.OfficialPlugins.SteamTokenDumper/SharedInfo.cs"
fi
dotnet publish ArchiSteamFarm -c "$CONFIGURATION" -f "$NET_CORE_VERSION" -o "out/${1}" "-p:ASFVariant=$1" -p:ContinuousIntegrationBuild=true --no-restore --nologo $variantArgs
# If we're including any overlay for this variant, copy it to output directory
variant_os="$(echo "$1" | cut -d '-' -f 1)"
if [ -d "ArchiSteamFarm/overlay/${variant_os}" ]; then
cp -pR "ArchiSteamFarm/overlay/${variant_os}/"* "out/${1}"
fi
if [ "$1" != "$variant_os" ] && [ -d "ArchiSteamFarm/overlay/${1}" ]; then
cp -pR "ArchiSteamFarm/overlay/${1}/"* "out/${1}"
fi
# If we're including SteamTokenDumper plugin for this framework, copy it to output directory
if [ -d "out/${STEAM_TOKEN_DUMPER_NAME}/${NET_CORE_VERSION}" ]; then
mkdir -p "out/${1}/plugins/${STEAM_TOKEN_DUMPER_NAME}"
cp -pR "out/${STEAM_TOKEN_DUMPER_NAME}/${NET_CORE_VERSION}/"* "out/${1}/plugins/${STEAM_TOKEN_DUMPER_NAME}"
fi
# Include .ico file for all platforms, since only Windows script can bundle it inside the exe
cp "resources/ASF.ico" "out/${1}/ArchiSteamFarm.ico"
# By default use fastest compression
seven_zip_args="-mx=1"
zip_args="-1"
# Include extra logic for builds marked for release
case "$GITHUB_REF" in
"refs/tags/"*)
# Tweak compression args for release publishing
seven_zip_args="-mx=9 -mfb=258 -mpass=15"
zip_args="-9"
# Update link in Changelog.html accordingly
if [ -f "out/${1}/Changelog.html" ]; then
tag="$(echo "$GITHUB_REF" | cut -c 11-)"
sed "s/ArchiSteamFarm\/commits\/main/ArchiSteamFarm\/releases\/tag\/${tag}/g" "out/${1}/Changelog.html" > "out/${1}/Changelog.html.new"
mv "out/${1}/Changelog.html.new" "out/${1}/Changelog.html"
fi
;;
esac
# Create the final zip file
case "$(uname -s)" in
"Darwin")
# We prefer to use zip on OS X as 7z implementation on that OS doesn't handle file permissions (chmod +x)
if command -v zip >/dev/null; then
(
cd "${GITHUB_WORKSPACE}/out/${1}"
zip -q -r $zip_args "../ASF-${1}.zip" .
)
elif command -v 7z >/dev/null; then
7z a -bd -slp -tzip -mm=Deflate $seven_zip_args "out/ASF-${1}.zip" "${GITHUB_WORKSPACE}/out/${1}/*"
else
echo "ERROR: No supported zip tool!"
return 1
fi
;;
*)
if command -v 7z >/dev/null; then
7z a -bd -slp -tzip -mm=Deflate $seven_zip_args "out/ASF-${1}.zip" "${GITHUB_WORKSPACE}/out/${1}/*"
elif command -v zip >/dev/null; then
(
cd "${GITHUB_WORKSPACE}/out/${1}"
zip -q -r $zip_args "../ASF-${1}.zip" .
)
else
echo "ERROR: No supported zip tool!"
return 1
fi
;;
esac
}
jobs=""
for variant in $VARIANTS; do
publish "$variant" &
jobs="$jobs $!"
done
for job in $jobs; do
wait "$job"
done
- name: Publish ArchiSteamFarm on Windows
- name: Prepare ArchiSteamFarm.OfficialPlugins.SteamTokenDumper on Windows
if: startsWith(matrix.os, 'windows-')
env:
VARIANTS: generic generic-netf linux-arm linux-arm64 linux-x64 osx-arm64 osx-x64 win-x64 # NOTE: When modifying variants, don't forget to update ASF_VARIANT definitions in SharedInfo.cs!
STEAM_TOKEN_DUMPER_TOKEN: ${{ secrets.STEAM_TOKEN_DUMPER_TOKEN }}
shell: pwsh
run: |
Set-StrictMode -Version Latest
$ErrorActionPreference = 'Stop'
$ProgressPreference = 'SilentlyContinue'
if ((Test-Path env:STEAM_TOKEN_DUMPER_TOKEN) -and ($env:STEAM_TOKEN_DUMPER_TOKEN) -and (Test-Path "ArchiSteamFarm.OfficialPlugins.SteamTokenDumper\SharedInfo.cs" -PathType Leaf)) {
(Get-Content "ArchiSteamFarm.OfficialPlugins.SteamTokenDumper\SharedInfo.cs").Replace('STEAM_TOKEN_DUMPER_TOKEN', "$env:STEAM_TOKEN_DUMPER_TOKEN") | Set-Content "ArchiSteamFarm.OfficialPlugins.SteamTokenDumper\SharedInfo.cs"
}
- name: Publish official plugins on Unix
if: startsWith(matrix.os, 'macos-') || startsWith(matrix.os, 'ubuntu-')
env:
MAX_JOBS: 4
shell: bash
run: |
set -euo pipefail
publish() {
dotnet publish "$1" -c "$CONFIGURATION" -o "out/${1}" -p:ContinuousIntegrationBuild=true -p:TargetLatestRuntimePatch=false -p:UseAppHost=false --no-restore --nologo
}
for plugin in $PLUGINS; do
while [ "$(jobs -p | wc -l)" -ge "$MAX_JOBS" ]; do
sleep 1
done
publish "$plugin" &
done
wait
- name: Publish official plugins on Windows
if: startsWith(matrix.os, 'windows-')
env:
MAX_JOBS: 4
shell: pwsh
run: |
Set-StrictMode -Version Latest
@@ -228,7 +214,7 @@ jobs:
$ProgressPreference = 'SilentlyContinue'
$PublishBlock = {
param($variant)
param($plugin)
Set-StrictMode -Version Latest
$ErrorActionPreference = 'Stop'
@@ -236,227 +222,258 @@ jobs:
Set-Location "$env:GITHUB_WORKSPACE"
if ($variant -like '*-netf') {
$targetFramework = $env:NET_FRAMEWORK_VERSION
} else {
$targetFramework = $env:NET_CORE_VERSION
}
if ($variant -like 'generic*') {
$variantArgs = '-p:TargetLatestRuntimePatch=false', '-p:UseAppHost=false'
} else {
$variantArgs = '-p:PublishSingleFile=true', '-p:PublishTrimmed=true', '-r', "$variant", '--self-contained'
}
dotnet publish ArchiSteamFarm -c "$env:CONFIGURATION" -f "$targetFramework" -o "out\$variant" "-p:ASFVariant=$variant" -p:ContinuousIntegrationBuild=true --no-restore --nologo $variantArgs
dotnet publish "$plugin" -c "$env:CONFIGURATION" -o "out\$plugin" -p:ContinuousIntegrationBuild=true -p:TargetLatestRuntimePatch=false -p:UseAppHost=false --no-restore --nologo
if ($LastExitCode -ne 0) {
throw "Last command failed."
}
# If we're including any overlay for this variant, copy it to output directory
$variant_os = $variant.Split('-', 2)[0];
if (Test-Path "ArchiSteamFarm\overlay\$variant_os" -PathType Container) {
Copy-Item "ArchiSteamFarm\overlay\$variant_os\*" "out\$variant" -Recurse
}
if (($variant -ne $variant_os) -and (Test-Path "ArchiSteamFarm\overlay\$variant" -PathType Container)) {
Copy-Item "ArchiSteamFarm\overlay\$variant\*" "out\$variant" -Recurse
}
# If we're including SteamTokenDumper plugin for this framework, copy it to output directory
if (Test-Path "out\$env:STEAM_TOKEN_DUMPER_NAME\$targetFramework" -PathType Container) {
if (!(Test-Path "out\$variant\plugins\$env:STEAM_TOKEN_DUMPER_NAME" -PathType Container)) {
New-Item -ItemType Directory -Path "out\$variant\plugins\$env:STEAM_TOKEN_DUMPER_NAME" > $null
}
Copy-Item "out\$env:STEAM_TOKEN_DUMPER_NAME\$targetFramework\*" "out\$variant\plugins\$env:STEAM_TOKEN_DUMPER_NAME" -Recurse
}
# Icon is available only in .NET Framework and .NET Core Windows build, we'll bundle the .ico file for other flavours
if (($targetFramework -eq "$env:NET_CORE_VERSION") -and !(Test-Path "out\$variant\ArchiSteamFarm.exe" -PathType Leaf)) {
Copy-Item 'resources\ASF.ico' "out\$variant\ArchiSteamFarm.ico"
}
# By default use fastest compression
$compressionArgs = '-mx=1'
# Include extra logic for builds marked for release
if ($env:GITHUB_REF -like 'refs/tags/*') {
# Tweak compression args for release publishing
$compressionArgs = '-mx=9', '-mfb=258', '-mpass=15'
# Update link in Changelog.html accordingly
if (Test-Path "out\$variant\Changelog.html" -PathType Leaf) {
$tag = $env:GITHUB_REF.Substring(10)
(Get-Content "out\$variant\Changelog.html").Replace('ArchiSteamFarm/commits/main', "ArchiSteamFarm/releases/tag/$tag") | Set-Content "out\$variant\Changelog.html"
}
}
# Create the final zip file
7z a -bd -slp -tzip -mm=Deflate $compressionArgs "out\ASF-$variant.zip" "$env:GITHUB_WORKSPACE\out\$variant\*"
if ($LastExitCode -ne 0) {
throw "Last command failed."
}
# We can aid non-windows users by adding chmod +x flag to appropriate executables directly in the zip file
# This is ALMOST a hack, but works reliably enough
if (Test-Path "tools\zip_exec\zip_exec.exe" -PathType Leaf) {
$executableFiles = @()
if ($variant -like 'generic*') {
$executableFiles += 'ArchiSteamFarm.sh', 'ArchiSteamFarm-Service.sh'
} elseif (($variant -like 'linux*') -or ($variant -like 'osx*')) {
$executableFiles += 'ArchiSteamFarm', 'ArchiSteamFarm-Service.sh'
}
foreach ($executableFile in $executableFiles) {
tools\zip_exec\zip_exec.exe "out\ASF-$variant.zip" "$executableFile"
if ($LastExitCode -ne 0) {
throw "Last command failed."
}
}
}
}
foreach ($variant in $env:VARIANTS.Split([char[]] $null, [System.StringSplitOptions]::RemoveEmptyEntries)) {
Start-Job -Name "$variant" $PublishBlock -ArgumentList "$variant"
foreach ($plugin in $env:PLUGINS.Split([char[]] $null, [System.StringSplitOptions]::RemoveEmptyEntries)) {
# Limit active jobs in parallel to help with memory usage
$jobs = $(Get-Job -State Running)
while (@($jobs).Count -ge 5) {
while (@($jobs).Count -ge $env:MAX_JOBS) {
Wait-Job -Job $jobs -Any | Out-Null
$jobs = $(Get-Job -State Running)
}
Start-Job -Name "$plugin" $PublishBlock -ArgumentList "$plugin"
}
Get-Job | Receive-Job -Wait
- name: Upload ASF-generic
continue-on-error: true
uses: actions/upload-artifact@v2.3.1
with:
name: ${{ matrix.os }}_ASF-generic
path: out/ASF-generic.zip
- name: Publish ASF-${{ matrix.variant }} on Unix
if: startsWith(matrix.os, 'macos-') || startsWith(matrix.os, 'ubuntu-')
env:
VARIANT: ${{ matrix.variant }}
shell: bash
run: |
set -euo pipefail
- name: Upload ASF-generic-netf
continue-on-error: true
if [ "$VARIANT" = 'generic' ]; then
variantArgs="-p:TargetLatestRuntimePatch=false -p:UseAppHost=false"
else
variantArgs="-p:PublishSingleFile=true -p:PublishTrimmed=true -r $VARIANT --self-contained"
fi
dotnet publish ArchiSteamFarm -c "$CONFIGURATION" -o "out/${VARIANT}" "-p:ASFVariant=${VARIANT}" -p:ContinuousIntegrationBuild=true --nologo $variantArgs
# If we're including official plugins for this framework, copy them to output directory
for plugin in $PLUGINS; do
if [ -d "out/${plugin}" ]; then
mkdir -p "out/${VARIANT}/plugins/${plugin}"
cp -pR "out/${plugin}/"* "out/${VARIANT}/plugins/${plugin}"
fi
done
# Include .ico file for all platforms, since only Windows script can bundle it inside the exe
cp "resources/ASF.ico" "out/${VARIANT}/ArchiSteamFarm.ico"
# By default use fastest compression
seven_zip_args="-mx=1"
zip_args="-1"
# Include extra logic for builds marked for release
case "$GITHUB_REF" in
"refs/tags/"*)
# Tweak compression args for release publishing
seven_zip_args="-mx=9 -mfb=258 -mpass=15"
zip_args="-9"
# Update link in Changelog.html accordingly
if [ -f "out/${VARIANT}/Changelog.html" ]; then
tag="$(echo "$GITHUB_REF" | cut -c 11-)"
sed "s/ArchiSteamFarm\/commits\/main/ArchiSteamFarm\/releases\/tag\/${tag}/g" "out/${VARIANT}/Changelog.html" > "out/${VARIANT}/Changelog.html.new"
mv "out/${VARIANT}/Changelog.html.new" "out/${VARIANT}/Changelog.html"
fi
;;
esac
# Create the final zip file
case "$(uname -s)" in
"Darwin")
# We prefer to use zip on macOS as 7z implementation on that OS doesn't handle file permissions (chmod +x)
if command -v zip >/dev/null; then
(
cd "${GITHUB_WORKSPACE}/out/${VARIANT}"
zip -q -r $zip_args "../ASF-${VARIANT}.zip" .
)
elif command -v 7z >/dev/null; then
7z a -bd -slp -tzip -mm=Deflate $seven_zip_args "out/ASF-${VARIANT}.zip" "${GITHUB_WORKSPACE}/out/${VARIANT}/*"
else
echo "ERROR: No supported zip tool!"
return 1
fi
;;
*)
if command -v 7z >/dev/null; then
7z a -bd -slp -tzip -mm=Deflate $seven_zip_args "out/ASF-${VARIANT}.zip" "${GITHUB_WORKSPACE}/out/${VARIANT}/*"
elif command -v zip >/dev/null; then
(
cd "${GITHUB_WORKSPACE}/out/${VARIANT}"
zip -q -r $zip_args "../ASF-${VARIANT}.zip" .
)
else
echo "ERROR: No supported zip tool!"
return 1
fi
;;
esac
- name: Publish ASF-${{ matrix.variant }} on Windows
if: startsWith(matrix.os, 'windows-')
uses: actions/upload-artifact@v2.3.1
with:
name: ${{ matrix.os }}_ASF-generic-netf
path: out/ASF-generic-netf.zip
env:
VARIANT: ${{ matrix.variant }}
shell: pwsh
run: |
Set-StrictMode -Version Latest
$ErrorActionPreference = 'Stop'
$ProgressPreference = 'SilentlyContinue'
- name: Upload ASF-linux-arm
continue-on-error: true
uses: actions/upload-artifact@v2.3.1
with:
name: ${{ matrix.os }}_ASF-linux-arm
path: out/ASF-linux-arm.zip
if ($env:VARIANT -like 'generic*') {
$variantArgs = '-p:TargetLatestRuntimePatch=false', '-p:UseAppHost=false'
} else {
$variantArgs = '-p:PublishSingleFile=true', '-p:PublishTrimmed=true', '-r', "$env:VARIANT", '--self-contained'
}
- name: Upload ASF-linux-arm64
continue-on-error: true
uses: actions/upload-artifact@v2.3.1
with:
name: ${{ matrix.os }}_ASF-linux-arm64
path: out/ASF-linux-arm64.zip
dotnet publish ArchiSteamFarm -c "$env:CONFIGURATION" -o "out\$env:VARIANT" "-p:ASFVariant=$env:VARIANT" -p:ContinuousIntegrationBuild=true --nologo $variantArgs
- name: Upload ASF-linux-x64
continue-on-error: true
uses: actions/upload-artifact@v2.3.1
with:
name: ${{ matrix.os }}_ASF-linux-x64
path: out/ASF-linux-x64.zip
if ($LastExitCode -ne 0) {
throw "Last command failed."
}
- name: Upload ASF-osx-arm64
continue-on-error: true
uses: actions/upload-artifact@v2.3.1
with:
name: ${{ matrix.os }}_ASF-osx-arm64
path: out/ASF-osx-arm64.zip
# If we're including official plugins for this framework, copy them to output directory
foreach ($plugin in $env:PLUGINS.Split([char[]] $null, [System.StringSplitOptions]::RemoveEmptyEntries)) {
if (Test-Path "out\$plugin" -PathType Container) {
if (!(Test-Path "out\$env:VARIANT\plugins\$plugin" -PathType Container)) {
New-Item -ItemType Directory -Path "out\$env:VARIANT\plugins\$plugin" > $null
}
- name: Upload ASF-osx-x64
continue-on-error: true
uses: actions/upload-artifact@v2.3.1
with:
name: ${{ matrix.os }}_ASF-osx-x64
path: out/ASF-osx-x64.zip
Copy-Item "out\$plugin\*" "out\$env:VARIANT\plugins\$plugin" -Recurse
}
}
- name: Upload ASF-win-x64
continue-on-error: true
uses: actions/upload-artifact@v2.3.1
# Icon is available only in .exe Windows builds, we'll bundle the .ico file for other flavours
if (!(Test-Path "out\$env:VARIANT\ArchiSteamFarm.exe" -PathType Leaf)) {
Copy-Item 'resources\ASF.ico' "out\$env:VARIANT\ArchiSteamFarm.ico"
}
# By default use fastest compression
$compressionArgs = '-mx=1'
# Include extra logic for builds marked for release
if ($env:GITHUB_REF -like 'refs/tags/*') {
# Tweak compression args for release publishing
$compressionArgs = '-mx=9', '-mfb=258', '-mpass=15'
# Update link in Changelog.html accordingly
if (Test-Path "out\$env:VARIANT\Changelog.html" -PathType Leaf) {
$tag = $env:GITHUB_REF.Substring(10)
(Get-Content "out\$env:VARIANT\Changelog.html").Replace('ArchiSteamFarm/commits/main', "ArchiSteamFarm/releases/tag/$tag") | Set-Content "out\$env:VARIANT\Changelog.html"
}
}
# Create the final zip file
7z a -bd -slp -tzip -mm=Deflate $compressionArgs "out\ASF-$env:VARIANT.zip" "$env:GITHUB_WORKSPACE\out\$env:VARIANT\*"
if ($LastExitCode -ne 0) {
throw "Last command failed."
}
# We can aid non-windows users by adding chmod +x flag to appropriate executables directly in the zip file
# This is ALMOST a hack, but works reliably enough
if (Test-Path "tools\zip_exec\zip_exec.exe" -PathType Leaf) {
$executableFiles = @()
if ($env:VARIANT -like 'generic*') {
$executableFiles += 'ArchiSteamFarm.sh', 'ArchiSteamFarm-Service.sh'
} elseif (($env:VARIANT -like 'linux*') -or ($env:VARIANT -like 'osx*')) {
$executableFiles += 'ArchiSteamFarm', 'ArchiSteamFarm-Service.sh'
}
foreach ($executableFile in $executableFiles) {
tools\zip_exec\zip_exec.exe "out\ASF-$env:VARIANT.zip" "$executableFile"
if ($LastExitCode -ne 0) {
throw "Last command failed."
}
}
}
- name: Upload ASF-${{ matrix.variant }}
uses: actions/upload-artifact@v4.3.1
with:
name: ${{ matrix.os }}_ASF-win-x64
path: out/ASF-win-x64.zip
name: ${{ matrix.os }}_ASF-${{ matrix.variant }}
path: out/ASF-${{ matrix.variant }}.zip
release:
if: ${{ github.event_name == 'push' && startsWith(github.ref, 'refs/tags/') }}
needs: publish
needs: publish-asf
runs-on: ubuntu-latest
permissions:
contents: write
steps:
- name: Checkout code
uses: actions/checkout@v2.4.0
# TODO: It'd be perfect if we could match final artifacts to the platform they target, so e.g. linux build comes from the linux machine
# However, that is currently impossible due to https://github.com/dotnet/msbuild/issues/3897
# Therefore, we'll (sadly) pull artifacts from Windows machine only for now
- name: Download ASF-generic artifact from windows-latest
uses: actions/download-artifact@v2.1.0
uses: actions/checkout@v4.1.1
with:
name: windows-latest_ASF-generic
show-progress: false
- name: Download ASF-generic artifact from ubuntu-latest
uses: actions/download-artifact@v4.1.2
with:
name: ubuntu-latest_ASF-generic
path: out
- name: Download ASF-generic-netf artifact from windows-latest
uses: actions/download-artifact@v2.1.0
- name: Download ASF-linux-arm artifact from ubuntu-latest
uses: actions/download-artifact@v4.1.2
with:
name: windows-latest_ASF-generic-netf
name: ubuntu-latest_ASF-linux-arm
path: out
- name: Download ASF-linux-arm artifact from windows-latest
uses: actions/download-artifact@v2.1.0
- name: Download ASF-linux-arm64 artifact from ubuntu-latest
uses: actions/download-artifact@v4.1.2
with:
name: windows-latest_ASF-linux-arm
name: ubuntu-latest_ASF-linux-arm64
path: out
- name: Download ASF-linux-arm64 artifact from windows-latest
uses: actions/download-artifact@v2.1.0
- name: Download ASF-linux-x64 artifact from ubuntu-latest
uses: actions/download-artifact@v4.1.2
with:
name: windows-latest_ASF-linux-arm64
name: ubuntu-latest_ASF-linux-x64
path: out
- name: Download ASF-linux-x64 artifact from windows-latest
uses: actions/download-artifact@v2.1.0
- name: Download ASF-osx-arm64 artifact from macos-latest
uses: actions/download-artifact@v4.1.2
with:
name: windows-latest_ASF-linux-x64
name: macos-latest_ASF-osx-arm64
path: out
- name: Download ASF-osx-arm64 artifact from windows-latest
uses: actions/download-artifact@v2.1.0
- name: Download ASF-osx-x64 artifact from macos-latest
uses: actions/download-artifact@v4.1.2
with:
name: windows-latest_ASF-osx-arm64
name: macos-latest_ASF-osx-x64
path: out
- name: Download ASF-osx-x64 artifact from windows-latest
uses: actions/download-artifact@v2.1.0
- name: Download ASF-win-arm64 artifact from windows-latest
uses: actions/download-artifact@v4.1.2
with:
name: windows-latest_ASF-osx-x64
name: windows-latest_ASF-win-arm64
path: out
- name: Download ASF-win-x64 artifact from windows-latest
uses: actions/download-artifact@v2.1.0
uses: actions/download-artifact@v4.1.2
with:
name: windows-latest_ASF-win-x64
path: out
- name: Import GPG key for signing
uses: crazy-max/ghaction-import-gpg@v4.1.0
uses: crazy-max/ghaction-import-gpg@v6.1.0
with:
gpg_private_key: ${{ secrets.ARCHIBOT_GPG_PRIVATE_KEY }}
@@ -473,126 +490,23 @@ jobs:
)
- name: Upload SHA512SUMS
continue-on-error: true
uses: actions/upload-artifact@v2.3.1
uses: actions/upload-artifact@v4.3.1
with:
name: SHA512SUMS
path: out/SHA512SUMS
- name: Upload SHA512SUMS.sign
continue-on-error: true
uses: actions/upload-artifact@v2.3.1
uses: actions/upload-artifact@v4.3.1
with:
name: SHA512SUMS.sign
path: out/SHA512SUMS.sign
- name: Create ArchiSteamFarm GitHub release
id: github_release
uses: actions/create-release@v1.1.4
env:
GITHUB_TOKEN: ${{ secrets.ARCHIBOT_GITHUB_TOKEN }}
uses: ncipollo/release-action@v1.14.0
with:
tag_name: ${{ github.ref }}
release_name: ArchiSteamFarm V${{ github.ref }}
body_path: .github/RELEASE_TEMPLATE.md
artifacts: "out/*"
bodyFile: .github/RELEASE_TEMPLATE.md
makeLatest: false
name: ArchiSteamFarm V${{ github.ref_name }}
prerelease: true
- name: Upload ASF-generic to GitHub release
uses: actions/upload-release-asset@v1.0.2
env:
GITHUB_TOKEN: ${{ secrets.GITHUB_TOKEN }}
with:
upload_url: ${{ steps.github_release.outputs.upload_url }}
asset_path: out/ASF-generic.zip
asset_name: ASF-generic.zip
asset_content_type: application/zip
- name: Upload ASF-generic-netf to GitHub release
uses: actions/upload-release-asset@v1.0.2
env:
GITHUB_TOKEN: ${{ secrets.GITHUB_TOKEN }}
with:
upload_url: ${{ steps.github_release.outputs.upload_url }}
asset_path: out/ASF-generic-netf.zip
asset_name: ASF-generic-netf.zip
asset_content_type: application/zip
- name: Upload ASF-linux-arm to GitHub release
uses: actions/upload-release-asset@v1.0.2
env:
GITHUB_TOKEN: ${{ secrets.GITHUB_TOKEN }}
with:
upload_url: ${{ steps.github_release.outputs.upload_url }}
asset_path: out/ASF-linux-arm.zip
asset_name: ASF-linux-arm.zip
asset_content_type: application/zip
- name: Upload ASF-linux-arm64 to GitHub release
uses: actions/upload-release-asset@v1.0.2
env:
GITHUB_TOKEN: ${{ secrets.GITHUB_TOKEN }}
with:
upload_url: ${{ steps.github_release.outputs.upload_url }}
asset_path: out/ASF-linux-arm64.zip
asset_name: ASF-linux-arm64.zip
asset_content_type: application/zip
- name: Upload ASF-linux-x64 to GitHub release
uses: actions/upload-release-asset@v1.0.2
env:
GITHUB_TOKEN: ${{ secrets.GITHUB_TOKEN }}
with:
upload_url: ${{ steps.github_release.outputs.upload_url }}
asset_path: out/ASF-linux-x64.zip
asset_name: ASF-linux-x64.zip
asset_content_type: application/zip
- name: Upload ASF-osx-arm64 to GitHub release
uses: actions/upload-release-asset@v1.0.2
env:
GITHUB_TOKEN: ${{ secrets.GITHUB_TOKEN }}
with:
upload_url: ${{ steps.github_release.outputs.upload_url }}
asset_path: out/ASF-osx-arm64.zip
asset_name: ASF-osx-arm64.zip
asset_content_type: application/zip
- name: Upload ASF-osx-x64 to GitHub release
uses: actions/upload-release-asset@v1.0.2
env:
GITHUB_TOKEN: ${{ secrets.GITHUB_TOKEN }}
with:
upload_url: ${{ steps.github_release.outputs.upload_url }}
asset_path: out/ASF-osx-x64.zip
asset_name: ASF-osx-x64.zip
asset_content_type: application/zip
- name: Upload ASF-win-x64 to GitHub release
uses: actions/upload-release-asset@v1.0.2
env:
GITHUB_TOKEN: ${{ secrets.GITHUB_TOKEN }}
with:
upload_url: ${{ steps.github_release.outputs.upload_url }}
asset_path: out/ASF-win-x64.zip
asset_name: ASF-win-x64.zip
asset_content_type: application/zip
- name: Upload SHA512SUMS to GitHub release
uses: actions/upload-release-asset@v1.0.2
env:
GITHUB_TOKEN: ${{ secrets.GITHUB_TOKEN }}
with:
upload_url: ${{ steps.github_release.outputs.upload_url }}
asset_path: out/SHA512SUMS
asset_name: SHA512SUMS
asset_content_type: text/plain
- name: Upload SHA512SUMS.sign to GitHub release
uses: actions/upload-release-asset@v1.0.2
env:
GITHUB_TOKEN: ${{ secrets.GITHUB_TOKEN }}
with:
upload_url: ${{ steps.github_release.outputs.upload_url }}
asset_path: out/SHA512SUMS.sign
asset_name: SHA512SUMS.sign
asset_content_type: text/plain
token: ${{ secrets.ARCHIBOT_GITHUB_TOKEN }}

View File

@@ -4,14 +4,18 @@ on:
schedule:
- cron: '55 1 * * *'
permissions:
contents: write
jobs:
update:
runs-on: ubuntu-latest
steps:
- name: Checkout code
uses: actions/checkout@v2.4.0
uses: actions/checkout@v4.1.1
with:
show-progress: false
submodules: recursive
token: ${{ secrets.ARCHIBOT_GITHUB_TOKEN }}
@@ -26,7 +30,7 @@ jobs:
git reset --hard origin/master
- name: Download latest translations from Crowdin
uses: crowdin/github-action@1.4.6
uses: crowdin/github-action@v1.19.0
with:
upload_sources: false
download_translations: true
@@ -38,7 +42,7 @@ jobs:
token: ${{ secrets.ASF_CROWDIN_API_TOKEN }}
- name: Import GPG key for signing
uses: crazy-max/ghaction-import-gpg@v4.1.0
uses: crazy-max/ghaction-import-gpg@v6.1.0
with:
gpg_private_key: ${{ secrets.ARCHIBOT_GPG_PRIVATE_KEY }}
git_config_global: true
@@ -59,7 +63,7 @@ jobs:
fi
- name: Push changes to wiki
uses: ad-m/github-push-action@v0.6.0
uses: ad-m/github-push-action@v0.8.0
with:
github_token: ${{ secrets.ARCHIBOT_GITHUB_TOKEN }}
branch: master
@@ -71,14 +75,14 @@ jobs:
run: |
set -eu
git add -A "ArchiSteamFarm/Localization" "ArchiSteamFarm.OfficialPlugins.SteamTokenDumper/Localization" "wiki"
git add -A "ArchiSteamFarm/Localization" "ArchiSteamFarm.OfficialPlugins.ItemsMatcher/Localization" "ArchiSteamFarm.OfficialPlugins.MobileAuthenticator/Localization" "ArchiSteamFarm.OfficialPlugins.SteamTokenDumper/Localization" "wiki"
if ! git diff --cached --quiet; then
git commit -m "Automatic translations update"
fi
- name: Push changes to ASF
uses: ad-m/github-push-action@v0.6.0
uses: ad-m/github-push-action@v0.8.0
with:
github_token: ${{ secrets.ARCHIBOT_GITHUB_TOKEN }}
branch: ${{ github.ref }}

38
.gitignore vendored
View File

@@ -7,6 +7,9 @@
# Ignore all files in custom in-tree config directory (if exists)
ArchiSteamFarm/config
# Ignore all files in custom in-tree www directory (if exists)
ArchiSteamFarm/www
# Ignore private SNK key (if exists)
resources/ArchiSteamFarm.snk
@@ -18,13 +21,16 @@ ArchiSteamFarm/logs
# Ignore standard out folders for publishing
**/out
# JetBrains Rider
.idea/
# _ _
# | | (_) _ __ _ _ __ __
# | | | || '_ \ | | | |\ \/ /
# | |___ | || | | || |_| | > <
# |_____||_||_| |_| \__,_|/_/\_\
#
# https://github.com/github/gitignore/blob/master/Global/Linux.gitignore
# https://github.com/github/gitignore/blob/main/Global/Linux.gitignore
# 4f7062e132d7f88e68ab737e64fef872bd3a491f
*~
@@ -47,7 +53,7 @@ ArchiSteamFarm/logs
# | | | | | || (_| || (__ | |_| | ___) |
# |_| |_| |_| \__,_| \___| \___/ |____/
#
# https://github.com/github/gitignore/blob/master/Global/macOS.gitignore
# https://github.com/github/gitignore/blob/main/Global/macOS.gitignore
# 2bb963b16a1957c865335e53537036c2e97399b5
# General
@@ -84,7 +90,7 @@ Temporary Items
# |_| |_| \___/ |_| |_| \___/ |____/ \___| \_/ \___||_| \___/ | .__/
# |_|
#
# https://github.com/github/gitignore/blob/master/Global/MonoDevelop.gitignore
# https://github.com/github/gitignore/blob/main/Global/MonoDevelop.gitignore
# e8b2e1a9cc7c9ca49bb05c20a4c4491b85feba6d
#User Specific
@@ -102,13 +108,13 @@ test-results/
# \ V / | |\__ \| |_| || (_| || | ___) || |_ | |_| || (_| || || (_) |
# \_/ |_||___/ \__,_| \__,_||_||____/ \__| \__,_| \__,_||_| \___/
#
# https://github.com/github/gitignore/blob/master/VisualStudio.gitignore
# 888439ee893d0097862f1d510585bd0e3cfd500f
# https://github.com/github/gitignore/blob/main/VisualStudio.gitignore
# 491040e88a572d300a59484cb78c86c5e944b70a
## Ignore Visual Studio temporary files, build results, and
## files generated by popular Visual Studio add-ons.
##
## Get latest from https://github.com/github/gitignore/blob/master/VisualStudio.gitignore
## Get latest from https://github.com/github/gitignore/blob/main/VisualStudio.gitignore
# User-specific files
*.rsuser
@@ -313,9 +319,6 @@ PublishScripts/
*.nuget.props
*.nuget.targets
# Nuget personal access tokens and Credentials
nuget.config
# Microsoft Azure Build Output
csx/
*.build.csdef
@@ -404,6 +407,17 @@ node_modules/
# Visual Studio 6 auto-generated workspace file (contains which files were open etc.)
*.vbw
# Visual Studio 6 auto-generated project file (contains which files were open etc.)
*.vbp
# Visual Studio 6 workspace and project file (working project files containing files to include in project)
*.dsw
*.dsp
# Visual Studio 6 technical files
*.ncb
*.aps
# Visual Studio LightSwitch build output
**/*.HTMLClient/GeneratedArtifacts
**/*.DesktopClient/GeneratedArtifacts
@@ -460,6 +474,9 @@ ASALocalRun/
# Local History for Visual Studio
.localhistory/
# Visual Studio History (VSHistory) files
.vshistory/
# BeatPulse healthcheck temp database
healthchecksdb
@@ -491,7 +508,6 @@ FodyWeavers.xsd
*.msp
# JetBrains Rider
.idea/
*.sln.iml
# __ __ _ _
@@ -500,7 +516,7 @@ FodyWeavers.xsd
# \ V V / | || | | || (_| || (_) |\ V V / \__ \
# \_/\_/ |_||_| |_| \__,_| \___/ \_/\_/ |___/
#
# https://github.com/github/gitignore/blob/master/Global/Windows.gitignore
# https://github.com/github/gitignore/blob/main/Global/Windows.gitignore
# 5808b77453dec299d4daf8557b05a80be832a5b8
# Windows thumbnail cache files

2
ASF-ui

Submodule ASF-ui updated: 156992e88d...cd1173a0d6

View File

@@ -6,16 +6,10 @@
<ItemGroup>
<PackageReference Include="ConfigureAwaitChecker.Analyzer" PrivateAssets="all" />
<PackageReference Include="JetBrains.Annotations" PrivateAssets="all" />
<PackageReference Include="Newtonsoft.Json" IncludeAssets="compile" />
<PackageReference Include="SteamKit2" IncludeAssets="compile" />
<PackageReference Include="System.Composition.AttributedModel" IncludeAssets="compile" />
</ItemGroup>
<ItemGroup Condition="'$(TargetFramework)' == 'net48'">
<PackageReference Include="JustArchiNET.Madness" IncludeAssets="compile" />
<PackageReference Include="Microsoft.AspNetCore.Mvc.Core" IncludeAssets="compile" />
</ItemGroup>
<ItemGroup>
<ProjectReference Include="..\ArchiSteamFarm\ArchiSteamFarm.csproj" ExcludeAssets="all" Private="false" />
</ItemGroup>

View File

@@ -4,7 +4,7 @@
// / ___ \ | | | (__ | | | || | ___) || |_| __/| (_| || | | | | || _|| (_| || | | | | | | |
// /_/ \_\|_| \___||_| |_||_||____/ \__|\___| \__,_||_| |_| |_||_| \__,_||_| |_| |_| |_|
// |
// Copyright 2015-2022 Łukasz "JustArchi" Domeradzki
// Copyright 2015-2024 Łukasz "JustArchi" Domeradzki
// Contact: JustArchi@JustArchi.net
// |
// Licensed under the Apache License, Version 2.0 (the "License");

View File

@@ -4,7 +4,7 @@
// / ___ \ | | | (__ | | | || | ___) || |_| __/| (_| || | | | | || _|| (_| || | | | | | | |
// /_/ \_\|_| \___||_| |_||_||____/ \__|\___| \__,_||_| |_| |_||_| \__,_||_| |_| |_| |_|
// |
// Copyright 2015-2022 Łukasz "JustArchi" Domeradzki
// Copyright 2015-2024 Łukasz "JustArchi" Domeradzki
// Contact: JustArchi@JustArchi.net
// |
// Licensed under the Apache License, Version 2.0 (the "License");
@@ -20,11 +20,12 @@
// limitations under the License.
using System;
using System.Diagnostics.CodeAnalysis;
using System.Collections.Immutable;
using System.Linq;
using System.Threading;
using System.Threading.Tasks;
using ArchiSteamFarm.Web;
using ArchiSteamFarm.Web.Responses;
using Newtonsoft.Json;
namespace ArchiSteamFarm.CustomPlugins.ExamplePlugin;
@@ -32,34 +33,15 @@ namespace ArchiSteamFarm.CustomPlugins.ExamplePlugin;
// You've always wanted from your ASF to post cats, right? Now is your chance!
// P.S. The code is almost 1:1 copy from the one I use in ArchiBot, you can thank me later
internal static class CatAPI {
private const string URL = "https://aws.random.cat";
private const string URL = "https://api.thecatapi.com";
internal static async Task<string?> GetRandomCatURL(WebBrowser webBrowser) {
internal static async Task<Uri?> GetRandomCatURL(WebBrowser webBrowser, CancellationToken cancellationToken = default) {
ArgumentNullException.ThrowIfNull(webBrowser);
Uri request = new($"{URL}/meow");
Uri request = new($"{URL}/v1/images/search");
ObjectResponse<MeowResponse>? response = await webBrowser.UrlGetToJsonObject<MeowResponse>(request).ConfigureAwait(false);
ObjectResponse<ImmutableList<MeowResponse>>? response = await webBrowser.UrlGetToJsonObject<ImmutableList<MeowResponse>>(request, cancellationToken: cancellationToken).ConfigureAwait(false);
if (response == null) {
return null;
}
if (string.IsNullOrEmpty(response.Content.Link)) {
throw new InvalidOperationException(nameof(response.Content.Link));
}
return Uri.EscapeDataString(response.Content.Link);
return response?.Content?.FirstOrDefault()?.URL;
}
#pragma warning disable CA1812 // False positive, the class is used during json deserialization
[SuppressMessage("ReSharper", "ClassCannotBeInstantiated")]
private sealed class MeowResponse {
[JsonProperty(PropertyName = "file", Required = Required.Always)]
internal readonly string Link = "";
[JsonConstructor]
private MeowResponse() { }
}
#pragma warning restore CA1812 // False positive, the class is used during json deserialization
}

View File

@@ -4,7 +4,7 @@
// / ___ \ | | | (__ | | | || | ___) || |_| __/| (_| || | | | | || _|| (_| || | | | | | | |
// /_/ \_\|_| \___||_| |_||_||____/ \__|\___| \__,_||_| |_| |_||_| \__,_||_| |_| |_| |_|
// |
// Copyright 2015-2022 Łukasz "JustArchi" Domeradzki
// Copyright 2015-2024 Łukasz "JustArchi" Domeradzki
// Contact: JustArchi@JustArchi.net
// |
// Licensed under the Apache License, Version 2.0 (the "License");
@@ -21,6 +21,7 @@
using System;
using System.Net;
using System.Threading;
using System.Threading.Tasks;
using ArchiSteamFarm.Core;
using ArchiSteamFarm.IPC.Controllers.Api;
@@ -38,15 +39,17 @@ public sealed class CatController : ArchiController {
/// Fetches URL of a random cat picture.
/// </summary>
[HttpGet]
[ProducesResponseType(typeof(GenericResponse<string>), (int) HttpStatusCode.OK)]
[ProducesResponseType(typeof(GenericResponse), (int) HttpStatusCode.ServiceUnavailable)]
[ProducesResponseType<GenericResponse<Uri>>((int) HttpStatusCode.OK)]
[ProducesResponseType<GenericResponse>((int) HttpStatusCode.ServiceUnavailable)]
public async Task<ActionResult<GenericResponse>> CatGet() {
if (ASF.WebBrowser == null) {
throw new InvalidOperationException(nameof(ASF.WebBrowser));
}
string? link = await CatAPI.GetRandomCatURL(ASF.WebBrowser).ConfigureAwait(false);
CancellationToken cancellationToken = HttpContext.RequestAborted;
return !string.IsNullOrEmpty(link) ? Ok(new GenericResponse<string>(link)) : StatusCode((int) HttpStatusCode.ServiceUnavailable, new GenericResponse(false));
Uri? url = await CatAPI.GetRandomCatURL(ASF.WebBrowser, cancellationToken).ConfigureAwait(false);
return url != null ? Ok(new GenericResponse<Uri>(url)) : StatusCode((int) HttpStatusCode.ServiceUnavailable, new GenericResponse(false));
}
}

View File

@@ -4,7 +4,7 @@
// / ___ \ | | | (__ | | | || | ___) || |_| __/| (_| || | | | | || _|| (_| || | | | | | | |
// /_/ \_\|_| \___||_| |_||_||____/ \__|\___| \__,_||_| |_| |_||_| \__,_||_| |_| |_| |_|
// |
// Copyright 2015-2022 Łukasz "JustArchi" Domeradzki
// Copyright 2015-2024 Łukasz "JustArchi" Domeradzki
// Contact: JustArchi@JustArchi.net
// |
// Licensed under the Apache License, Version 2.0 (the "License");
@@ -21,15 +21,17 @@
using System;
using System.Collections.Generic;
using System.ComponentModel.DataAnnotations;
using System.Composition;
using System.Diagnostics.CodeAnalysis;
using System.Linq;
using System.Text.Json;
using System.Text.Json.Serialization;
using System.Threading.Tasks;
using ArchiSteamFarm.Core;
using ArchiSteamFarm.Plugins.Interfaces;
using ArchiSteamFarm.Steam;
using ArchiSteamFarm.Steam.Data;
using Newtonsoft.Json;
using Newtonsoft.Json.Linq;
using SteamKit2;
namespace ArchiSteamFarm.CustomPlugins.ExamplePlugin;
@@ -40,34 +42,39 @@ namespace ArchiSteamFarm.CustomPlugins.ExamplePlugin;
// Your plugin class should inherit the plugin interfaces it wants to handle
// If you do not want to handle a particular action (e.g. OnBotMessage that is offered in IBotMessage), it's the best idea to not inherit it at all
// This will keep your code compact, efficient and less dependent. You can always add additional interfaces when you'll need them, this example project will inherit quite a bit of them to show you potential usage
[SuppressMessage("ReSharper", "MemberCanBeFileLocal")]
internal sealed class ExamplePlugin : IASF, IBot, IBotCommand2, IBotConnection, IBotFriendRequest, IBotMessage, IBotModules, IBotTradeOffer {
// This is used for identification purposes, typically you want to use a friendly name of your plugin here, such as the name of your main class
// Please note that this property can have direct dependencies only on structures that were initialized by the constructor, as it's possible to be called before OnLoaded() takes place
[JsonInclude]
[Required]
public string Name => nameof(ExamplePlugin);
// This will be displayed to the user and written in the log file, typically you should point it to the version of your library, but alternatively you can do some more advanced logic if you'd like to
// Please note that this property can have direct dependencies only on structures that were initialized by the constructor, as it's possible to be called before OnLoaded() takes place
[JsonInclude]
[Required]
public Version Version => typeof(ExamplePlugin).Assembly.GetName().Version ?? throw new InvalidOperationException(nameof(Version));
// Plugins can expose custom properties for our GET /Api/Plugins API call, simply annotate them with [JsonProperty] (or keep public)
[JsonProperty]
public bool CustomIsEnabledField { get; private set; } = true;
[JsonInclude]
[Required]
public bool CustomIsEnabledField { get; private init; } = true;
// This method, apart from being called before any bot initialization takes place, allows you to read custom global config properties that are not recognized by ASF
// Thanks to that, you can extend default ASF config with your own stuff, then parse it here in order to customize your plugin during runtime
// Keep in mind that, as noted in the interface, additionalConfigProperties can be null if no custom, unrecognized properties are found by ASF, you should handle that case appropriately
// In addition to that, this method also guarantees that all plugins were already OnLoaded(), which allows cross-plugins-communication to be possible
public Task OnASFInit(IReadOnlyDictionary<string, JToken>? additionalConfigProperties = null) {
public Task OnASFInit(IReadOnlyDictionary<string, JsonElement>? additionalConfigProperties = null) {
if (additionalConfigProperties == null) {
return Task.CompletedTask;
}
foreach ((string configProperty, JToken configValue) in additionalConfigProperties) {
foreach ((string configProperty, JsonElement configValue) in additionalConfigProperties) {
// It's a good idea to prefix your custom properties with the name of your plugin, so there will be no possible conflict of ASF or other plugins using the same name, neither now or in the future
switch (configProperty) {
case $"{nameof(ExamplePlugin)}TestProperty" when configValue.Type == JTokenType.Boolean:
bool exampleBooleanValue = configValue.Value<bool>();
ASF.ArchiLogger.LogGenericInfo($"{nameof(ExamplePlugin)}TestProperty boolean property has been found with a value of: {exampleBooleanValue}");
case $"{nameof(ExamplePlugin)}TestProperty" when configValue.ValueKind == JsonValueKind.True:
ASF.ArchiLogger.LogGenericInfo($"{nameof(ExamplePlugin)}TestProperty boolean property has been found with a value of true");
break;
}
@@ -92,9 +99,9 @@ internal sealed class ExamplePlugin : IASF, IBot, IBotCommand2, IBotConnection,
case "CAT" when access >= EAccess.FamilySharing:
// Notice how we can decide whether to use bot's AWH WebBrowser or ASF's one. For Steam-related requests, AWH's one should always be used, for third-party requests like those it doesn't really matter
// Still, it makes sense to pass AWH's one, so in case you get some errors or alike, you know from which bot instance they come from. It's similar to using Bot's ArchiLogger compared to ASF's one
string? randomCatURL = await CatAPI.GetRandomCatURL(bot.ArchiWebHandler.WebBrowser).ConfigureAwait(false);
Uri? randomCatURL = await CatAPI.GetRandomCatURL(bot.ArchiWebHandler.WebBrowser).ConfigureAwait(false);
return !string.IsNullOrEmpty(randomCatURL) ? randomCatURL : "God damn it, we're out of cats, care to notify my master? Thanks!";
return randomCatURL != null ? randomCatURL.ToString() : "God damn it, we're out of cats, care to notify my master? Thanks!";
default:
return null;
}
@@ -131,9 +138,9 @@ internal sealed class ExamplePlugin : IASF, IBot, IBotCommand2, IBotConnection,
// This method, apart from being called during bot modules initialization, allows you to read custom bot config properties that are not recognized by ASF
// Thanks to that, you can extend default bot config with your own stuff, then parse it here in order to customize your plugin during runtime
// Keep in mind that, as noted in the interface, additionalConfigProperties can be null if no custom, unrecognized properties are found by ASF, you should handle that case appropriately
// Also keep in mind that this function can be called multiple times, e.g. when user edits his bot configs during runtime
// Also keep in mind that this function can be called multiple times, e.g. when user edits their bot configs during runtime
// Take a look at OnASFInit() for example parsing code
public async Task OnBotInitModules(Bot bot, IReadOnlyDictionary<string, JToken>? additionalConfigProperties = null) {
public async Task OnBotInitModules(Bot bot, IReadOnlyDictionary<string, JsonElement>? additionalConfigProperties = null) {
// For example, we'll ensure that every bot starts paused regardless of Paused property, in order to do this, we'll just call Pause here in InitModules()
// Thanks to the fact that this method is called with each bot config reload, we'll ensure that our bot stays paused even if it'd get unpaused otherwise
bot.ArchiLogger.LogGenericInfo("Pausing this bot as asked from the plugin");

View File

@@ -0,0 +1,39 @@
// _ _ _ ____ _ _____
// / \ _ __ ___ | |__ (_)/ ___| | |_ ___ __ _ _ __ ___ | ___|__ _ _ __ _ __ ___
// / _ \ | '__|/ __|| '_ \ | |\___ \ | __|/ _ \ / _` || '_ ` _ \ | |_ / _` || '__|| '_ ` _ \
// / ___ \ | | | (__ | | | || | ___) || |_| __/| (_| || | | | | || _|| (_| || | | | | | | |
// /_/ \_\|_| \___||_| |_||_||____/ \__|\___| \__,_||_| |_| |_||_| \__,_||_| |_| |_| |_|
// |
// Copyright 2015-2024 Łukasz "JustArchi" Domeradzki
// Contact: JustArchi@JustArchi.net
// |
// Licensed under the Apache License, Version 2.0 (the "License");
// you may not use this file except in compliance with the License.
// You may obtain a copy of the License at
// |
// http://www.apache.org/licenses/LICENSE-2.0
// |
// Unless required by applicable law or agreed to in writing, software
// distributed under the License is distributed on an "AS IS" BASIS,
// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
// See the License for the specific language governing permissions and
// limitations under the License.
using System;
using System.Diagnostics.CodeAnalysis;
using System.Text.Json.Serialization;
namespace ArchiSteamFarm.CustomPlugins.ExamplePlugin;
#pragma warning disable CA1812 // False positive, the class is used during json deserialization
[SuppressMessage("ReSharper", "ClassCannotBeInstantiated")]
internal sealed class MeowResponse {
[JsonInclude]
[JsonPropertyName("url")]
[JsonRequired]
internal Uri URL { get; private init; } = null!;
[JsonConstructor]
private MeowResponse() { }
}
#pragma warning restore CA1812 // False positive, the class is used during json deserialization

View File

@@ -4,7 +4,7 @@
// / ___ \ | | | (__ | | | || | ___) || |_| __/| (_| || | | | | || _|| (_| || | | | | | | |
// /_/ \_\|_| \___||_| |_||_||____/ \__|\___| \__,_||_| |_| |_||_| \__,_||_| |_| |_| |_|
// |
// Copyright 2015-2022 Łukasz "JustArchi" Domeradzki
// Copyright 2015-2024 Łukasz "JustArchi" Domeradzki
// Contact: JustArchi@JustArchi.net
// |
// Licensed under the Apache License, Version 2.0 (the "License");

View File

@@ -4,7 +4,7 @@
// / ___ \ | | | (__ | | | || | ___) || |_| __/| (_| || | | | | || _|| (_| || | | | | | | |
// /_/ \_\|_| \___||_| |_||_||____/ \__|\___| \__,_||_| |_| |_||_| \__,_||_| |_| |_| |_|
// |
// Copyright 2015-2022 Łukasz "JustArchi" Domeradzki
// Copyright 2015-2024 Łukasz "JustArchi" Domeradzki
// Contact: JustArchi@JustArchi.net
// |
// Licensed under the Apache License, Version 2.0 (the "License");
@@ -20,26 +20,32 @@
// limitations under the License.
using System;
using System.ComponentModel.DataAnnotations;
using System.Composition;
using System.Diagnostics.CodeAnalysis;
using System.Runtime;
using System.Text.Json.Serialization;
using System.Threading;
using System.Threading.Tasks;
using ArchiSteamFarm.Core;
using ArchiSteamFarm.Plugins.Interfaces;
using JetBrains.Annotations;
namespace ArchiSteamFarm.CustomPlugins.PeriodicGC;
[Export(typeof(IPlugin))]
[SuppressMessage("ReSharper", "UnusedType.Global")]
[UsedImplicitly]
internal sealed class PeriodicGCPlugin : IPlugin {
private const byte GCPeriod = 60; // In seconds
private static readonly object LockObject = new();
private static readonly Timer PeriodicGCTimer = new(PerformGC);
[JsonInclude]
[Required]
public string Name => nameof(PeriodicGCPlugin);
[JsonInclude]
[Required]
public Version Version => typeof(PeriodicGCPlugin).Assembly.GetName().Version ?? throw new InvalidOperationException(nameof(Version));
public Task OnLoaded() {

View File

@@ -0,0 +1,16 @@
<Project Sdk="Microsoft.NET.Sdk">
<PropertyGroup>
<OutputType>Library</OutputType>
</PropertyGroup>
<ItemGroup>
<PackageReference Include="AngleSharp.XPath" IncludeAssets="compile" />
<PackageReference Include="ConfigureAwaitChecker.Analyzer" PrivateAssets="all" />
<PackageReference Include="JetBrains.Annotations" PrivateAssets="all" />
<PackageReference Include="System.Composition.AttributedModel" IncludeAssets="compile" />
</ItemGroup>
<ItemGroup>
<ProjectReference Include="..\ArchiSteamFarm\ArchiSteamFarm.csproj" ExcludeAssets="all" Private="false" />
</ItemGroup>
</Project>

View File

@@ -0,0 +1,24 @@
// _ _ _ ____ _ _____
// / \ _ __ ___ | |__ (_)/ ___| | |_ ___ __ _ _ __ ___ | ___|__ _ _ __ _ __ ___
// / _ \ | '__|/ __|| '_ \ | |\___ \ | __|/ _ \ / _` || '_ ` _ \ | |_ / _` || '__|| '_ ` _ \
// / ___ \ | | | (__ | | | || | ___) || |_| __/| (_| || | | | | || _|| (_| || | | | | | | |
// /_/ \_\|_| \___||_| |_||_||____/ \__|\___| \__,_||_| |_| |_||_| \__,_||_| |_| |_| |_|
// |
// Copyright 2015-2024 Łukasz "JustArchi" Domeradzki
// Contact: JustArchi@JustArchi.net
// |
// Licensed under the Apache License, Version 2.0 (the "License");
// you may not use this file except in compliance with the License.
// You may obtain a copy of the License at
// |
// http://www.apache.org/licenses/LICENSE-2.0
// |
// Unless required by applicable law or agreed to in writing, software
// distributed under the License is distributed on an "AS IS" BASIS,
// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
// See the License for the specific language governing permissions and
// limitations under the License.
using System;
[assembly: CLSCompliant(false)]

View File

@@ -0,0 +1,31 @@
// _ _ _ ____ _ _____
// / \ _ __ ___ | |__ (_)/ ___| | |_ ___ __ _ _ __ ___ | ___|__ _ _ __ _ __ ___
// / _ \ | '__|/ __|| '_ \ | |\___ \ | __|/ _ \ / _` || '_ ` _ \ | |_ / _` || '__|| '_ ` _ \
// / ___ \ | | | (__ | | | || | ___) || |_| __/| (_| || | | | | || _|| (_| || | | | | | | |
// /_/ \_\|_| \___||_| |_||_||____/ \__|\___| \__,_||_| |_| |_||_| \__,_||_| |_| |_| |_|
// |
// Copyright 2015-2024 Łukasz "JustArchi" Domeradzki
// Contact: JustArchi@JustArchi.net
// |
// Licensed under the Apache License, Version 2.0 (the "License");
// you may not use this file except in compliance with the License.
// You may obtain a copy of the License at
// |
// http://www.apache.org/licenses/LICENSE-2.0
// |
// Unless required by applicable law or agreed to in writing, software
// distributed under the License is distributed on an "AS IS" BASIS,
// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
// See the License for the specific language governing permissions and
// limitations under the License.
using System;
using System.Text.Json.Serialization;
namespace ArchiSteamFarm.CustomPlugins.SignInWithSteam.Data;
public sealed class SignInWithSteamRequest {
[JsonInclude]
[JsonRequired]
public Uri RedirectURL { get; private init; } = null!;
}

View File

@@ -0,0 +1,37 @@
// _ _ _ ____ _ _____
// / \ _ __ ___ | |__ (_)/ ___| | |_ ___ __ _ _ __ ___ | ___|__ _ _ __ _ __ ___
// / _ \ | '__|/ __|| '_ \ | |\___ \ | __|/ _ \ / _` || '_ ` _ \ | |_ / _` || '__|| '_ ` _ \
// / ___ \ | | | (__ | | | || | ___) || |_| __/| (_| || | | | | || _|| (_| || | | | | | | |
// /_/ \_\|_| \___||_| |_||_||____/ \__|\___| \__,_||_| |_| |_||_| \__,_||_| |_| |_| |_|
// |
// Copyright 2015-2024 Łukasz "JustArchi" Domeradzki
// Contact: JustArchi@JustArchi.net
// |
// Licensed under the Apache License, Version 2.0 (the "License");
// you may not use this file except in compliance with the License.
// You may obtain a copy of the License at
// |
// http://www.apache.org/licenses/LICENSE-2.0
// |
// Unless required by applicable law or agreed to in writing, software
// distributed under the License is distributed on an "AS IS" BASIS,
// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
// See the License for the specific language governing permissions and
// limitations under the License.
using System;
using System.Text.Json.Serialization;
namespace ArchiSteamFarm.CustomPlugins.SignInWithSteam.Data;
public sealed class SignInWithSteamResponse {
[JsonInclude]
[JsonRequired]
public Uri ReturnURL { get; private init; }
internal SignInWithSteamResponse(Uri returnURL) {
ArgumentNullException.ThrowIfNull(returnURL);
ReturnURL = returnURL;
}
}

View File

@@ -0,0 +1,119 @@
// _ _ _ ____ _ _____
// / \ _ __ ___ | |__ (_)/ ___| | |_ ___ __ _ _ __ ___ | ___|__ _ _ __ _ __ ___
// / _ \ | '__|/ __|| '_ \ | |\___ \ | __|/ _ \ / _` || '_ ` _ \ | |_ / _` || '__|| '_ ` _ \
// / ___ \ | | | (__ | | | || | ___) || |_| __/| (_| || | | | | || _|| (_| || | | | | | | |
// /_/ \_\|_| \___||_| |_||_||____/ \__|\___| \__,_||_| |_| |_||_| \__,_||_| |_| |_| |_|
// |
// Copyright 2015-2024 Łukasz "JustArchi" Domeradzki
// Contact: JustArchi@JustArchi.net
// |
// Licensed under the Apache License, Version 2.0 (the "License");
// you may not use this file except in compliance with the License.
// You may obtain a copy of the License at
// |
// http://www.apache.org/licenses/LICENSE-2.0
// |
// Unless required by applicable law or agreed to in writing, software
// distributed under the License is distributed on an "AS IS" BASIS,
// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
// See the License for the specific language governing permissions and
// limitations under the License.
using System;
using System.Globalization;
using System.Net;
using System.Net.Http;
using System.Threading.Tasks;
using AngleSharp.Dom;
using ArchiSteamFarm.Core;
using ArchiSteamFarm.CustomPlugins.SignInWithSteam.Data;
using ArchiSteamFarm.IPC.Controllers.Api;
using ArchiSteamFarm.IPC.Responses;
using ArchiSteamFarm.Localization;
using ArchiSteamFarm.Steam;
using ArchiSteamFarm.Steam.Integration;
using ArchiSteamFarm.Web;
using ArchiSteamFarm.Web.Responses;
using Microsoft.AspNetCore.Mvc;
namespace ArchiSteamFarm.CustomPlugins.SignInWithSteam;
[Route("/Api/Bot/{botName:required}/SignInWithSteam")]
public sealed class SignInWithSteamController : ArchiController {
[HttpPost]
[ProducesResponseType<GenericResponse<SignInWithSteamResponse>>((int) HttpStatusCode.OK)]
[ProducesResponseType<GenericResponse>((int) HttpStatusCode.BadRequest)]
[ProducesResponseType<GenericResponse>((int) HttpStatusCode.ServiceUnavailable)]
public async Task<ActionResult<GenericResponse>> Post(string botName, [FromBody] SignInWithSteamRequest request) {
ArgumentException.ThrowIfNullOrEmpty(botName);
ArgumentNullException.ThrowIfNull(request);
Bot? bot = Bot.GetBot(botName);
if (bot == null) {
return BadRequest(new GenericResponse(false, string.Format(CultureInfo.CurrentCulture, Strings.BotNotFound, botName)));
}
if (!bot.IsConnectedAndLoggedOn) {
return StatusCode((int) HttpStatusCode.ServiceUnavailable, new GenericResponse(false, Strings.BotNotConnected));
}
// We've got a redirection, initiate OpenID procedure by following it
using HtmlDocumentResponse? challengeResponse = await bot.ArchiWebHandler.UrlGetToHtmlDocumentWithSession(request.RedirectURL).ConfigureAwait(false);
if (challengeResponse?.Content == null) {
return StatusCode((int) HttpStatusCode.ServiceUnavailable, new GenericResponse(false, string.Format(CultureInfo.CurrentCulture, Strings.ErrorRequestFailedTooManyTimes, WebBrowser.MaxTries)));
}
IAttr? paramsNode = challengeResponse.Content.SelectSingleNode<IAttr>("//input[@name='openidparams']/@value");
if (paramsNode == null) {
ASF.ArchiLogger.LogNullError(paramsNode);
return StatusCode((int) HttpStatusCode.InternalServerError, new GenericResponse(false, string.Format(CultureInfo.CurrentCulture, Strings.ErrorObjectIsNull, nameof(paramsNode))));
}
string paramsValue = paramsNode.Value;
if (string.IsNullOrEmpty(paramsValue)) {
ASF.ArchiLogger.LogNullError(paramsValue);
return StatusCode((int) HttpStatusCode.InternalServerError, new GenericResponse(false, string.Format(CultureInfo.CurrentCulture, Strings.ErrorObjectIsNull, nameof(paramsValue))));
}
IAttr? nonceNode = challengeResponse.Content.SelectSingleNode<IAttr>("//input[@name='nonce']/@value");
if (nonceNode == null) {
ASF.ArchiLogger.LogNullError(nonceNode);
return StatusCode((int) HttpStatusCode.InternalServerError, new GenericResponse(false, string.Format(CultureInfo.CurrentCulture, Strings.ErrorObjectIsNull, nameof(nonceNode))));
}
string nonceValue = nonceNode.Value;
if (string.IsNullOrEmpty(nonceValue)) {
ASF.ArchiLogger.LogNullError(nonceValue);
return StatusCode((int) HttpStatusCode.InternalServerError, new GenericResponse(false, string.Format(CultureInfo.CurrentCulture, Strings.ErrorObjectIsNull, nameof(nonceValue))));
}
Uri loginRequest = new(ArchiWebHandler.SteamCommunityURL, "/openid/login");
using StringContent actionContent = new("steam_openid_login");
using StringContent modeContent = new("checkid_setup");
using StringContent paramsContent = new(paramsValue);
using StringContent nonceContent = new(nonceValue);
using MultipartFormDataContent data = new();
data.Add(actionContent, "action");
data.Add(modeContent, "openid.mode");
data.Add(paramsContent, "openidparams");
data.Add(nonceContent, "nonce");
// Accept OpenID request presented and follow redirection back to the data we initially expected
BasicResponse? loginResponse = await bot.ArchiWebHandler.WebBrowser.UrlPost(loginRequest, data: data, requestOptions: WebBrowser.ERequestOptions.ReturnRedirections).ConfigureAwait(false);
return loginResponse != null ? Ok(new GenericResponse<SignInWithSteamResponse>(new SignInWithSteamResponse(loginResponse.FinalUri))) : StatusCode((int) HttpStatusCode.ServiceUnavailable, new GenericResponse(false, string.Format(CultureInfo.CurrentCulture, Strings.ErrorRequestFailedTooManyTimes, WebBrowser.MaxTries)));
}
}

View File

@@ -0,0 +1,49 @@
// _ _ _ ____ _ _____
// / \ _ __ ___ | |__ (_)/ ___| | |_ ___ __ _ _ __ ___ | ___|__ _ _ __ _ __ ___
// / _ \ | '__|/ __|| '_ \ | |\___ \ | __|/ _ \ / _` || '_ ` _ \ | |_ / _` || '__|| '_ ` _ \
// / ___ \ | | | (__ | | | || | ___) || |_| __/| (_| || | | | | || _|| (_| || | | | | | | |
// /_/ \_\|_| \___||_| |_||_||____/ \__|\___| \__,_||_| |_| |_||_| \__,_||_| |_| |_| |_|
// |
// Copyright 2015-2024 Łukasz "JustArchi" Domeradzki
// Contact: JustArchi@JustArchi.net
// |
// Licensed under the Apache License, Version 2.0 (the "License");
// you may not use this file except in compliance with the License.
// You may obtain a copy of the License at
// |
// http://www.apache.org/licenses/LICENSE-2.0
// |
// Unless required by applicable law or agreed to in writing, software
// distributed under the License is distributed on an "AS IS" BASIS,
// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
// See the License for the specific language governing permissions and
// limitations under the License.
using System;
using System.ComponentModel.DataAnnotations;
using System.Composition;
using System.Text.Json.Serialization;
using System.Threading.Tasks;
using ArchiSteamFarm.Core;
using ArchiSteamFarm.Plugins.Interfaces;
using JetBrains.Annotations;
namespace ArchiSteamFarm.CustomPlugins.SignInWithSteam;
[Export(typeof(IPlugin))]
[UsedImplicitly]
internal sealed class SignInWithSteamPlugin : IPlugin {
[JsonInclude]
[Required]
public string Name => nameof(SignInWithSteamPlugin);
[JsonInclude]
[Required]
public Version Version => typeof(SignInWithSteamPlugin).Assembly.GetName().Version ?? throw new InvalidOperationException(nameof(Version));
public Task OnLoaded() {
ASF.ArchiLogger.LogGenericInfo("Loaded!");
return Task.CompletedTask;
}
}

View File

@@ -0,0 +1,33 @@
<Project Sdk="Microsoft.NET.Sdk">
<PropertyGroup>
<OutputType>Library</OutputType>
</PropertyGroup>
<ItemGroup>
<PackageReference Include="ConfigureAwaitChecker.Analyzer" PrivateAssets="all" />
<PackageReference Include="JetBrains.Annotations" PrivateAssets="all" />
<PackageReference Include="SteamKit2" IncludeAssets="compile" />
<PackageReference Include="Swashbuckle.AspNetCore.Annotations" IncludeAssets="compile" />
<PackageReference Include="System.Composition.AttributedModel" IncludeAssets="compile" />
<PackageReference Include="System.Linq.Async" IncludeAssets="compile" />
</ItemGroup>
<ItemGroup>
<ProjectReference Include="..\ArchiSteamFarm\ArchiSteamFarm.csproj" ExcludeAssets="all" Private="false" />
</ItemGroup>
<ItemGroup>
<EmbeddedResource Update="Localization\Strings.resx">
<Generator>ResXFileCodeGenerator</Generator>
<LastGenOutput>Strings.Designer.cs</LastGenOutput>
</EmbeddedResource>
</ItemGroup>
<ItemGroup>
<Compile Update="Localization\Strings.Designer.cs">
<AutoGen>True</AutoGen>
<DependentUpon>Strings.resx</DependentUpon>
<DesignTime>True</DesignTime>
</Compile>
</ItemGroup>
</Project>

View File

@@ -0,0 +1,24 @@
// _ _ _ ____ _ _____
// / \ _ __ ___ | |__ (_)/ ___| | |_ ___ __ _ _ __ ___ | ___|__ _ _ __ _ __ ___
// / _ \ | '__|/ __|| '_ \ | |\___ \ | __|/ _ \ / _` || '_ ` _ \ | |_ / _` || '__|| '_ ` _ \
// / ___ \ | | | (__ | | | || | ___) || |_| __/| (_| || | | | | || _|| (_| || | | | | | | |
// /_/ \_\|_| \___||_| |_||_||____/ \__|\___| \__,_||_| |_| |_||_| \__,_||_| |_| |_| |_|
// |
// Copyright 2015-2024 Łukasz "JustArchi" Domeradzki
// Contact: JustArchi@JustArchi.net
// |
// Licensed under the Apache License, Version 2.0 (the "License");
// you may not use this file except in compliance with the License.
// You may obtain a copy of the License at
// |
// http://www.apache.org/licenses/LICENSE-2.0
// |
// Unless required by applicable law or agreed to in writing, software
// distributed under the License is distributed on an "AS IS" BASIS,
// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
// See the License for the specific language governing permissions and
// limitations under the License.
using System;
[assembly: CLSCompliant(false)]

View File

@@ -0,0 +1,212 @@
// _ _ _ ____ _ _____
// / \ _ __ ___ | |__ (_)/ ___| | |_ ___ __ _ _ __ ___ | ___|__ _ _ __ _ __ ___
// / _ \ | '__|/ __|| '_ \ | |\___ \ | __|/ _ \ / _` || '_ ` _ \ | |_ / _` || '__|| '_ ` _ \
// / ___ \ | | | (__ | | | || | ___) || |_| __/| (_| || | | | | || _|| (_| || | | | | | | |
// /_/ \_\|_| \___||_| |_||_||____/ \__|\___| \__,_||_| |_| |_||_| \__,_||_| |_| |_| |_|
// |
// Copyright 2015-2024 Łukasz "JustArchi" Domeradzki
// Contact: JustArchi@JustArchi.net
// |
// Licensed under the Apache License, Version 2.0 (the "License");
// you may not use this file except in compliance with the License.
// You may obtain a copy of the License at
// |
// http://www.apache.org/licenses/LICENSE-2.0
// |
// Unless required by applicable law or agreed to in writing, software
// distributed under the License is distributed on an "AS IS" BASIS,
// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
// See the License for the specific language governing permissions and
// limitations under the License.
using System;
using System.Collections.Generic;
using System.Collections.Immutable;
using System.Linq;
using System.Net;
using System.Text;
using System.Threading;
using System.Threading.Tasks;
using ArchiSteamFarm.Core;
using ArchiSteamFarm.IPC.Responses;
using ArchiSteamFarm.OfficialPlugins.ItemsMatcher.Data;
using ArchiSteamFarm.Steam;
using ArchiSteamFarm.Steam.Data;
using ArchiSteamFarm.Steam.Storage;
using ArchiSteamFarm.Storage;
using ArchiSteamFarm.Web;
using ArchiSteamFarm.Web.Responses;
using SteamKit2;
namespace ArchiSteamFarm.OfficialPlugins.ItemsMatcher;
internal static class Backend {
internal static async Task<ObjectResponse<GenericResponse<BackgroundTaskResponse>>?> AnnounceDiffForListing(WebBrowser webBrowser, ulong steamID, IReadOnlyCollection<AssetForListing> inventory, string inventoryChecksum, IReadOnlyCollection<Asset.EType> acceptedMatchableTypes, uint totalInventoryCount, bool matchEverything, string tradeToken, IReadOnlyCollection<AssetForListing> inventoryRemoved, string? previousInventoryChecksum, string? nickname = null, string? avatarHash = null) {
ArgumentNullException.ThrowIfNull(webBrowser);
if ((steamID == 0) || !new SteamID(steamID).IsIndividualAccount) {
throw new ArgumentOutOfRangeException(nameof(steamID));
}
ArgumentNullException.ThrowIfNull(inventory);
ArgumentException.ThrowIfNullOrEmpty(inventoryChecksum);
if ((acceptedMatchableTypes == null) || (acceptedMatchableTypes.Count == 0)) {
throw new ArgumentNullException(nameof(acceptedMatchableTypes));
}
ArgumentOutOfRangeException.ThrowIfZero(totalInventoryCount);
ArgumentException.ThrowIfNullOrEmpty(tradeToken);
if (tradeToken.Length != BotConfig.SteamTradeTokenLength) {
throw new ArgumentOutOfRangeException(nameof(tradeToken));
}
ArgumentNullException.ThrowIfNull(inventoryRemoved);
ArgumentException.ThrowIfNullOrEmpty(previousInventoryChecksum);
Uri request = new(ArchiNet.URL, "/Api/Listing/AnnounceDiff/v2");
AnnouncementDiffRequest data = new(ASF.GlobalDatabase?.Identifier ?? Guid.NewGuid(), steamID, inventory, inventoryChecksum, acceptedMatchableTypes, totalInventoryCount, matchEverything, ASF.GlobalConfig?.MaxTradeHoldDuration ?? GlobalConfig.DefaultMaxTradeHoldDuration, tradeToken, inventoryRemoved, previousInventoryChecksum, nickname, avatarHash);
return await webBrowser.UrlPostToJsonObject<GenericResponse<BackgroundTaskResponse>, AnnouncementDiffRequest>(request, data: data, requestOptions: WebBrowser.ERequestOptions.ReturnRedirections | WebBrowser.ERequestOptions.ReturnClientErrors | WebBrowser.ERequestOptions.AllowInvalidBodyOnErrors | WebBrowser.ERequestOptions.CompressRequest).ConfigureAwait(false);
}
internal static async Task<ObjectResponse<GenericResponse<BackgroundTaskResponse>>?> AnnounceForListing(WebBrowser webBrowser, ulong steamID, IReadOnlyCollection<AssetForListing> inventory, string inventoryChecksum, IReadOnlyCollection<Asset.EType> acceptedMatchableTypes, uint totalInventoryCount, bool matchEverything, string tradeToken, string? nickname = null, string? avatarHash = null) {
ArgumentNullException.ThrowIfNull(webBrowser);
if ((steamID == 0) || !new SteamID(steamID).IsIndividualAccount) {
throw new ArgumentOutOfRangeException(nameof(steamID));
}
if ((inventory == null) || (inventory.Count == 0)) {
throw new ArgumentNullException(nameof(inventory));
}
ArgumentException.ThrowIfNullOrEmpty(inventoryChecksum);
if ((acceptedMatchableTypes == null) || (acceptedMatchableTypes.Count == 0)) {
throw new ArgumentNullException(nameof(acceptedMatchableTypes));
}
ArgumentOutOfRangeException.ThrowIfZero(totalInventoryCount);
ArgumentException.ThrowIfNullOrEmpty(tradeToken);
if (tradeToken.Length != BotConfig.SteamTradeTokenLength) {
throw new ArgumentOutOfRangeException(nameof(tradeToken));
}
Uri request = new(ArchiNet.URL, "/Api/Listing/Announce/v5");
AnnouncementRequest data = new(ASF.GlobalDatabase?.Identifier ?? Guid.NewGuid(), steamID, inventory, inventoryChecksum, acceptedMatchableTypes, totalInventoryCount, matchEverything, ASF.GlobalConfig?.MaxTradeHoldDuration ?? GlobalConfig.DefaultMaxTradeHoldDuration, tradeToken, nickname, avatarHash);
return await webBrowser.UrlPostToJsonObject<GenericResponse<BackgroundTaskResponse>, AnnouncementRequest>(request, data: data, requestOptions: WebBrowser.ERequestOptions.ReturnRedirections | WebBrowser.ERequestOptions.ReturnClientErrors | WebBrowser.ERequestOptions.AllowInvalidBodyOnErrors | WebBrowser.ERequestOptions.CompressRequest).ConfigureAwait(false);
}
internal static string GenerateChecksumFor(IList<AssetForListing> assetsForListings) {
if ((assetsForListings == null) || (assetsForListings.Count == 0)) {
throw new ArgumentNullException(nameof(assetsForListings));
}
string text = string.Join('|', assetsForListings.Select(static asset => asset.BackendHashCode));
byte[] bytes = Encoding.UTF8.GetBytes(text);
return Utilities.GenerateChecksumFor(bytes);
}
internal static async Task<HttpStatusCode?> GetLicenseStatus(Guid licenseID, WebBrowser webBrowser) {
ArgumentOutOfRangeException.ThrowIfEqual(licenseID, Guid.Empty);
ArgumentNullException.ThrowIfNull(webBrowser);
Uri request = new(ArchiNet.URL, "/Api/Licenses/Status");
Dictionary<string, string> headers = new(1, StringComparer.Ordinal) {
{ "X-License-Key", licenseID.ToString("N") }
};
ObjectResponse<GenericResponse>? response = await webBrowser.UrlGetToJsonObject<GenericResponse>(request, headers, requestOptions: WebBrowser.ERequestOptions.ReturnClientErrors | WebBrowser.ERequestOptions.AllowInvalidBodyOnErrors).ConfigureAwait(false);
return response?.StatusCode;
}
internal static async Task<(HttpStatusCode StatusCode, ImmutableHashSet<ListedUser> Users)?> GetListedUsersForMatching(Guid licenseID, Bot bot, WebBrowser webBrowser, IReadOnlyCollection<Asset> inventory, IReadOnlyCollection<Asset.EType> acceptedMatchableTypes) {
ArgumentOutOfRangeException.ThrowIfEqual(licenseID, Guid.Empty);
ArgumentNullException.ThrowIfNull(bot);
ArgumentNullException.ThrowIfNull(webBrowser);
if ((inventory == null) || (inventory.Count == 0)) {
throw new ArgumentNullException(nameof(inventory));
}
if ((acceptedMatchableTypes == null) || (acceptedMatchableTypes.Count == 0)) {
throw new ArgumentNullException(nameof(acceptedMatchableTypes));
}
Uri request = new(ArchiNet.URL, "/Api/Listing/Inventories/v2");
Dictionary<string, string> headers = new(1, StringComparer.Ordinal) {
{ "X-License-Key", licenseID.ToString("N") }
};
InventoriesRequest data = new(ASF.GlobalDatabase?.Identifier ?? Guid.NewGuid(), bot.SteamID, inventory, acceptedMatchableTypes);
ObjectResponse<GenericResponse<ImmutableHashSet<ListedUser>>>? response = await webBrowser.UrlPostToJsonObject<GenericResponse<ImmutableHashSet<ListedUser>>, InventoriesRequest>(request, headers, data, requestOptions: WebBrowser.ERequestOptions.ReturnClientErrors | WebBrowser.ERequestOptions.AllowInvalidBodyOnErrors | WebBrowser.ERequestOptions.CompressRequest).ConfigureAwait(false);
if (response == null) {
return null;
}
return (response.StatusCode, response.Content?.Result ?? ImmutableHashSet<ListedUser>.Empty);
}
internal static async Task<ObjectResponse<GenericResponse<ImmutableHashSet<SetPart>>>?> GetSetParts(WebBrowser webBrowser, ulong steamID, IReadOnlyCollection<Asset.EType> matchableTypes, IReadOnlyCollection<uint> realAppIDs, CancellationToken cancellationToken = default) {
ArgumentNullException.ThrowIfNull(webBrowser);
if ((steamID == 0) || !new SteamID(steamID).IsIndividualAccount) {
throw new ArgumentOutOfRangeException(nameof(steamID));
}
if ((matchableTypes == null) || (matchableTypes.Count == 0)) {
throw new ArgumentNullException(nameof(matchableTypes));
}
if ((realAppIDs == null) || (realAppIDs.Count == 0)) {
throw new ArgumentNullException(nameof(realAppIDs));
}
Uri request = new(ArchiNet.URL, "/Api/SetParts/Request");
SetPartsRequest data = new(ASF.GlobalDatabase?.Identifier ?? Guid.NewGuid(), steamID, matchableTypes, realAppIDs);
return await webBrowser.UrlPostToJsonObject<GenericResponse<ImmutableHashSet<SetPart>>, SetPartsRequest>(request, data: data, requestOptions: WebBrowser.ERequestOptions.ReturnRedirections | WebBrowser.ERequestOptions.ReturnClientErrors | WebBrowser.ERequestOptions.AllowInvalidBodyOnErrors | WebBrowser.ERequestOptions.CompressRequest, cancellationToken: cancellationToken).ConfigureAwait(false);
}
internal static async Task<BasicResponse?> HeartBeatForListing(Bot bot, WebBrowser webBrowser) {
ArgumentNullException.ThrowIfNull(bot);
ArgumentNullException.ThrowIfNull(webBrowser);
Uri request = new(ArchiNet.URL, "/Api/Listing/HeartBeat");
HeartBeatRequest data = new(ASF.GlobalDatabase?.Identifier ?? Guid.NewGuid(), bot.SteamID);
return await webBrowser.UrlPost(request, data: data, requestOptions: WebBrowser.ERequestOptions.ReturnRedirections | WebBrowser.ERequestOptions.ReturnClientErrors | WebBrowser.ERequestOptions.CompressRequest).ConfigureAwait(false);
}
internal static async Task<ObjectResponse<GenericResponse<BackgroundTaskResponse>>?> PollResult(WebBrowser webBrowser, ulong steamID, Guid requestID) {
ArgumentNullException.ThrowIfNull(webBrowser);
if ((steamID == 0) || !new SteamID(steamID).IsIndividualAccount) {
throw new ArgumentOutOfRangeException(nameof(steamID));
}
ArgumentOutOfRangeException.ThrowIfEqual(requestID, Guid.Empty);
if (SharedInfo.BuildInfo.IsCustomBuild) {
return null;
}
Uri request = new(ArchiNet.URL, $"/Api/Listing/PollResult/{steamID}/{requestID:N}");
return await webBrowser.UrlGetToJsonObject<GenericResponse<BackgroundTaskResponse>>(request, requestOptions: WebBrowser.ERequestOptions.ReturnRedirections | WebBrowser.ERequestOptions.ReturnClientErrors | WebBrowser.ERequestOptions.AllowInvalidBodyOnErrors).ConfigureAwait(false);
}
}

View File

@@ -0,0 +1,166 @@
// _ _ _ ____ _ _____
// / \ _ __ ___ | |__ (_)/ ___| | |_ ___ __ _ _ __ ___ | ___|__ _ _ __ _ __ ___
// / _ \ | '__|/ __|| '_ \ | |\___ \ | __|/ _ \ / _` || '_ ` _ \ | |_ / _` || '__|| '_ ` _ \
// / ___ \ | | | (__ | | | || | ___) || |_| __/| (_| || | | | | || _|| (_| || | | | | | | |
// /_/ \_\|_| \___||_| |_||_||____/ \__|\___| \__,_||_| |_| |_||_| \__,_||_| |_| |_| |_|
// |
// Copyright 2015-2024 Łukasz "JustArchi" Domeradzki
// Contact: JustArchi@JustArchi.net
// |
// Licensed under the Apache License, Version 2.0 (the "License");
// you may not use this file except in compliance with the License.
// You may obtain a copy of the License at
// |
// http://www.apache.org/licenses/LICENSE-2.0
// |
// Unless required by applicable law or agreed to in writing, software
// distributed under the License is distributed on an "AS IS" BASIS,
// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
// See the License for the specific language governing permissions and
// limitations under the License.
using System;
using System.Globalization;
using System.IO;
using System.Text.Json.Serialization;
using System.Threading.Tasks;
using ArchiSteamFarm.Collections;
using ArchiSteamFarm.Core;
using ArchiSteamFarm.Helpers;
using ArchiSteamFarm.Helpers.Json;
using ArchiSteamFarm.Localization;
using ArchiSteamFarm.OfficialPlugins.ItemsMatcher.Data;
using JetBrains.Annotations;
namespace ArchiSteamFarm.OfficialPlugins.ItemsMatcher;
internal sealed class BotCache : SerializableFile {
[JsonDisallowNull]
[JsonInclude]
internal ConcurrentList<AssetForListing> LastAnnouncedAssetsForListing { get; private init; } = [];
internal string? LastAnnouncedTradeToken {
get => BackingLastAnnouncedTradeToken;
set {
if (BackingLastAnnouncedTradeToken == value) {
return;
}
BackingLastAnnouncedTradeToken = value;
Utilities.InBackground(Save);
}
}
internal string? LastInventoryChecksumBeforeDeduplication {
get => BackingLastInventoryChecksumBeforeDeduplication;
set {
if (BackingLastInventoryChecksumBeforeDeduplication == value) {
return;
}
BackingLastInventoryChecksumBeforeDeduplication = value;
Utilities.InBackground(Save);
}
}
internal DateTime? LastRequestAt {
get => BackingLastRequestAt;
set {
if (BackingLastRequestAt == value) {
return;
}
BackingLastRequestAt = value;
Utilities.InBackground(Save);
}
}
[JsonInclude]
private string? BackingLastAnnouncedTradeToken { get; set; }
[JsonInclude]
private string? BackingLastInventoryChecksumBeforeDeduplication { get; set; }
[JsonInclude]
private DateTime? BackingLastRequestAt { get; set; }
private BotCache(string filePath) : this() {
ArgumentException.ThrowIfNullOrEmpty(filePath);
FilePath = filePath;
}
[JsonConstructor]
private BotCache() => LastAnnouncedAssetsForListing.OnModified += OnObjectModified;
[UsedImplicitly]
public bool ShouldSerializeBackingLastAnnouncedTradeToken() => !string.IsNullOrEmpty(BackingLastAnnouncedTradeToken);
[UsedImplicitly]
public bool ShouldSerializeBackingLastInventoryChecksumBeforeDeduplication() => !string.IsNullOrEmpty(BackingLastInventoryChecksumBeforeDeduplication);
[UsedImplicitly]
public bool ShouldSerializeBackingLastRequestAt() => BackingLastRequestAt.HasValue;
[UsedImplicitly]
public bool ShouldSerializeLastAnnouncedAssetsForListing() => LastAnnouncedAssetsForListing.Count > 0;
protected override void Dispose(bool disposing) {
if (disposing) {
// Events we registered
LastAnnouncedAssetsForListing.OnModified -= OnObjectModified;
}
// Base dispose
base.Dispose(disposing);
}
protected override Task Save() => Save(this);
internal static async Task<BotCache> CreateOrLoad(string filePath) {
ArgumentException.ThrowIfNullOrEmpty(filePath);
if (!File.Exists(filePath)) {
return new BotCache(filePath);
}
BotCache? botCache;
try {
string json = await File.ReadAllTextAsync(filePath).ConfigureAwait(false);
if (string.IsNullOrEmpty(json)) {
ASF.ArchiLogger.LogGenericError(string.Format(CultureInfo.CurrentCulture, Strings.ErrorIsEmpty, nameof(json)));
return new BotCache(filePath);
}
botCache = json.ToJsonObject<BotCache>();
} catch (Exception e) {
ASF.ArchiLogger.LogGenericException(e);
return new BotCache(filePath);
}
if (botCache == null) {
ASF.ArchiLogger.LogNullError(botCache);
return new BotCache(filePath);
}
botCache.FilePath = filePath;
return botCache;
}
private async void OnObjectModified(object? sender, EventArgs e) {
if (string.IsNullOrEmpty(FilePath)) {
return;
}
await Save().ConfigureAwait(false);
}
}

View File

@@ -0,0 +1,127 @@
// _ _ _ ____ _ _____
// / \ _ __ ___ | |__ (_)/ ___| | |_ ___ __ _ _ __ ___ | ___|__ _ _ __ _ __ ___
// / _ \ | '__|/ __|| '_ \ | |\___ \ | __|/ _ \ / _` || '_ ` _ \ | |_ / _` || '__|| '_ ` _ \
// / ___ \ | | | (__ | | | || | ___) || |_| __/| (_| || | | | | || _|| (_| || | | | | | | |
// /_/ \_\|_| \___||_| |_||_||____/ \__|\___| \__,_||_| |_| |_||_| \__,_||_| |_| |_| |_|
// |
// Copyright 2015-2024 Łukasz "JustArchi" Domeradzki
// Contact: JustArchi@JustArchi.net
// |
// Licensed under the Apache License, Version 2.0 (the "License");
// you may not use this file except in compliance with the License.
// You may obtain a copy of the License at
// |
// http://www.apache.org/licenses/LICENSE-2.0
// |
// Unless required by applicable law or agreed to in writing, software
// distributed under the License is distributed on an "AS IS" BASIS,
// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
// See the License for the specific language governing permissions and
// limitations under the License.
using System;
using System.Collections.Generic;
using System.ComponentModel;
using System.Globalization;
using System.Linq;
using System.Threading.Tasks;
using ArchiSteamFarm.Core;
using ArchiSteamFarm.Localization;
using ArchiSteamFarm.Steam;
using ArchiSteamFarm.Steam.Storage;
using SteamKit2;
namespace ArchiSteamFarm.OfficialPlugins.ItemsMatcher;
internal static class Commands {
internal static async Task<string?> OnBotCommand(Bot bot, EAccess access, string[] args, ulong steamID = 0) {
ArgumentNullException.ThrowIfNull(bot);
if (!Enum.IsDefined(access)) {
throw new InvalidEnumArgumentException(nameof(access), (int) access, typeof(EAccess));
}
if ((args == null) || (args.Length == 0)) {
throw new ArgumentNullException(nameof(args));
}
if ((steamID != 0) && !new SteamID(steamID).IsIndividualAccount) {
throw new ArgumentOutOfRangeException(nameof(steamID));
}
switch (args.Length) {
case 1:
switch (args[0].ToUpperInvariant()) {
case "MATCH":
return ResponseMatch(access, bot);
}
break;
default:
switch (args[0].ToUpperInvariant()) {
case "MATCH":
return await ResponseMatch(access, Utilities.GetArgsAsText(args, 1, ","), steamID).ConfigureAwait(false);
}
break;
}
return null;
}
private static string? ResponseMatch(EAccess access, Bot bot) {
if (!Enum.IsDefined(access)) {
throw new InvalidEnumArgumentException(nameof(access), (int) access, typeof(EAccess));
}
ArgumentNullException.ThrowIfNull(bot);
if (access < EAccess.Master) {
return access > EAccess.None ? bot.Commands.FormatBotResponse(Strings.ErrorAccessDenied) : null;
}
if (!bot.IsConnectedAndLoggedOn) {
return bot.Commands.FormatBotResponse(Strings.BotNotConnected);
}
if (bot.BotConfig.TradingPreferences.HasFlag(BotConfig.ETradingPreferences.MatchEverything)) {
return bot.Commands.FormatBotResponse(string.Format(CultureInfo.CurrentCulture, Strings.WarningFailedWithError, nameof(BotConfig.ETradingPreferences.MatchEverything)));
}
if ((ASF.GlobalConfig?.LicenseID == null) || (ASF.GlobalConfig.LicenseID == Guid.Empty)) {
return bot.Commands.FormatBotResponse(string.Format(CultureInfo.CurrentCulture, Strings.WarningFailedWithError, nameof(ASF.GlobalConfig.LicenseID)));
}
if (!ItemsMatcherPlugin.RemoteCommunications.TryGetValue(bot, out RemoteCommunication? remoteCommunication)) {
return bot.Commands.FormatBotResponse(string.Format(CultureInfo.CurrentCulture, Strings.WarningFailedWithError, nameof(remoteCommunication)));
}
remoteCommunication.TriggerMatchActivelyEarlier();
return bot.Commands.FormatBotResponse(Strings.Done);
}
private static async Task<string?> ResponseMatch(EAccess access, string botNames, ulong steamID = 0) {
if (!Enum.IsDefined(access)) {
throw new InvalidEnumArgumentException(nameof(access), (int) access, typeof(EAccess));
}
ArgumentException.ThrowIfNullOrEmpty(botNames);
if ((steamID != 0) && !new SteamID(steamID).IsIndividualAccount) {
throw new ArgumentOutOfRangeException(nameof(steamID));
}
HashSet<Bot>? bots = Bot.GetBots(botNames);
if ((bots == null) || (bots.Count == 0)) {
return access >= EAccess.Owner ? Steam.Interaction.Commands.FormatStaticResponse(string.Format(CultureInfo.CurrentCulture, Strings.BotNotFound, botNames)) : null;
}
IList<string?> results = await Utilities.InParallel(bots.Select(bot => Task.Run(() => ResponseMatch(Steam.Interaction.Commands.GetProxyAccess(bot, access, steamID), bot)))).ConfigureAwait(false);
List<string> responses = [..results.Where(static result => !string.IsNullOrEmpty(result))];
return responses.Count > 0 ? string.Join(Environment.NewLine, responses) : null;
}
}

View File

@@ -0,0 +1,68 @@
// _ _ _ ____ _ _____
// / \ _ __ ___ | |__ (_)/ ___| | |_ ___ __ _ _ __ ___ | ___|__ _ _ __ _ __ ___
// / _ \ | '__|/ __|| '_ \ | |\___ \ | __|/ _ \ / _` || '_ ` _ \ | |_ / _` || '__|| '_ ` _ \
// / ___ \ | | | (__ | | | || | ___) || |_| __/| (_| || | | | | || _|| (_| || | | | | | | |
// /_/ \_\|_| \___||_| |_||_||____/ \__|\___| \__,_||_| |_| |_||_| \__,_||_| |_| |_| |_|
// |
// Copyright 2015-2024 Łukasz "JustArchi" Domeradzki
// Contact: JustArchi@JustArchi.net
// |
// Licensed under the Apache License, Version 2.0 (the "License");
// you may not use this file except in compliance with the License.
// You may obtain a copy of the License at
// |
// http://www.apache.org/licenses/LICENSE-2.0
// |
// Unless required by applicable law or agreed to in writing, software
// distributed under the License is distributed on an "AS IS" BASIS,
// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
// See the License for the specific language governing permissions and
// limitations under the License.
using System;
using System.Collections.Generic;
using System.Collections.Immutable;
using System.Text.Json.Serialization;
using ArchiSteamFarm.Steam.Data;
using ArchiSteamFarm.Steam.Storage;
using SteamKit2;
namespace ArchiSteamFarm.OfficialPlugins.ItemsMatcher.Data;
internal sealed class AnnouncementDiffRequest : AnnouncementRequest {
[JsonInclude]
[JsonRequired]
private ImmutableHashSet<AssetForListing> InventoryRemoved { get; init; }
[JsonInclude]
[JsonRequired]
private string PreviousInventoryChecksum { get; init; }
internal AnnouncementDiffRequest(Guid guid, ulong steamID, IReadOnlyCollection<AssetForListing> inventory, string inventoryChecksum, IReadOnlyCollection<Asset.EType> matchableTypes, uint totalInventoryCount, bool matchEverything, byte maxTradeHoldDuration, string tradeToken, IReadOnlyCollection<AssetForListing> inventoryRemoved, string previousInventoryChecksum, string? nickname = null, string? avatarHash = null) : base(guid, steamID, inventory, inventoryChecksum, matchableTypes, totalInventoryCount, matchEverything, maxTradeHoldDuration, tradeToken, nickname, avatarHash) {
ArgumentOutOfRangeException.ThrowIfEqual(guid, Guid.Empty);
if ((steamID == 0) || !new SteamID(steamID).IsIndividualAccount) {
throw new ArgumentOutOfRangeException(nameof(steamID));
}
ArgumentNullException.ThrowIfNull(inventory);
ArgumentException.ThrowIfNullOrEmpty(inventoryChecksum);
if ((matchableTypes == null) || (matchableTypes.Count == 0)) {
throw new ArgumentNullException(nameof(matchableTypes));
}
ArgumentOutOfRangeException.ThrowIfZero(totalInventoryCount);
ArgumentException.ThrowIfNullOrEmpty(tradeToken);
if (tradeToken.Length != BotConfig.SteamTradeTokenLength) {
throw new ArgumentOutOfRangeException(nameof(tradeToken));
}
ArgumentNullException.ThrowIfNull(inventoryRemoved);
ArgumentException.ThrowIfNullOrEmpty(previousInventoryChecksum);
InventoryRemoved = inventoryRemoved.ToImmutableHashSet();
PreviousInventoryChecksum = previousInventoryChecksum;
}
}

View File

@@ -0,0 +1,116 @@
// _ _ _ ____ _ _____
// / \ _ __ ___ | |__ (_)/ ___| | |_ ___ __ _ _ __ ___ | ___|__ _ _ __ _ __ ___
// / _ \ | '__|/ __|| '_ \ | |\___ \ | __|/ _ \ / _` || '_ ` _ \ | |_ / _` || '__|| '_ ` _ \
// / ___ \ | | | (__ | | | || | ___) || |_| __/| (_| || | | | | || _|| (_| || | | | | | | |
// /_/ \_\|_| \___||_| |_||_||____/ \__|\___| \__,_||_| |_| |_||_| \__,_||_| |_| |_| |_|
// |
// Copyright 2015-2024 Łukasz "JustArchi" Domeradzki
// Contact: JustArchi@JustArchi.net
// |
// Licensed under the Apache License, Version 2.0 (the "License");
// you may not use this file except in compliance with the License.
// You may obtain a copy of the License at
// |
// http://www.apache.org/licenses/LICENSE-2.0
// |
// Unless required by applicable law or agreed to in writing, software
// distributed under the License is distributed on an "AS IS" BASIS,
// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
// See the License for the specific language governing permissions and
// limitations under the License.
using System;
using System.Collections.Generic;
using System.Collections.Immutable;
using System.Text.Json.Serialization;
using ArchiSteamFarm.Steam.Data;
using ArchiSteamFarm.Steam.Storage;
using JetBrains.Annotations;
using SteamKit2;
namespace ArchiSteamFarm.OfficialPlugins.ItemsMatcher.Data;
internal class AnnouncementRequest {
[JsonInclude]
private string? AvatarHash { get; init; }
[JsonInclude]
[JsonRequired]
private Guid Guid { get; init; }
[JsonInclude]
[JsonRequired]
private ImmutableHashSet<AssetForListing> Inventory { get; init; }
[JsonInclude]
[JsonRequired]
private string InventoryChecksum { get; init; }
[JsonInclude]
[JsonRequired]
private ImmutableHashSet<Asset.EType> MatchableTypes { get; init; }
[JsonInclude]
[JsonRequired]
private bool MatchEverything { get; init; }
[JsonInclude]
[JsonRequired]
private byte MaxTradeHoldDuration { get; init; }
[JsonInclude]
private string? Nickname { get; init; }
[JsonInclude]
[JsonRequired]
private ulong SteamID { get; init; }
[JsonInclude]
[JsonRequired]
private uint TotalInventoryCount { get; init; }
[JsonInclude]
[JsonRequired]
private string TradeToken { get; init; }
internal AnnouncementRequest(Guid guid, ulong steamID, IReadOnlyCollection<AssetForListing> inventory, string inventoryChecksum, IReadOnlyCollection<Asset.EType> matchableTypes, uint totalInventoryCount, bool matchEverything, byte maxTradeHoldDuration, string tradeToken, string? nickname = null, string? avatarHash = null) {
ArgumentOutOfRangeException.ThrowIfEqual(guid, Guid.Empty);
if ((steamID == 0) || !new SteamID(steamID).IsIndividualAccount) {
throw new ArgumentOutOfRangeException(nameof(steamID));
}
ArgumentNullException.ThrowIfNull(inventory);
ArgumentException.ThrowIfNullOrEmpty(inventoryChecksum);
if ((matchableTypes == null) || (matchableTypes.Count == 0)) {
throw new ArgumentNullException(nameof(matchableTypes));
}
ArgumentOutOfRangeException.ThrowIfZero(totalInventoryCount);
ArgumentException.ThrowIfNullOrEmpty(tradeToken);
if (tradeToken.Length != BotConfig.SteamTradeTokenLength) {
throw new ArgumentOutOfRangeException(nameof(tradeToken));
}
Guid = guid;
SteamID = steamID;
TradeToken = tradeToken;
Inventory = inventory.ToImmutableHashSet();
InventoryChecksum = inventoryChecksum;
MatchableTypes = matchableTypes.ToImmutableHashSet();
MatchEverything = matchEverything;
MaxTradeHoldDuration = maxTradeHoldDuration;
TotalInventoryCount = totalInventoryCount;
Nickname = nickname;
AvatarHash = avatarHash;
}
[UsedImplicitly]
public bool ShouldSerializeAvatarHash() => !string.IsNullOrEmpty(AvatarHash);
[UsedImplicitly]
public bool ShouldSerializeNickname() => !string.IsNullOrEmpty(Nickname);
}

View File

@@ -0,0 +1,50 @@
// _ _ _ ____ _ _____
// / \ _ __ ___ | |__ (_)/ ___| | |_ ___ __ _ _ __ ___ | ___|__ _ _ __ _ __ ___
// / _ \ | '__|/ __|| '_ \ | |\___ \ | __|/ _ \ / _` || '_ ` _ \ | |_ / _` || '__|| '_ ` _ \
// / ___ \ | | | (__ | | | || | ___) || |_| __/| (_| || | | | | || _|| (_| || | | | | | | |
// /_/ \_\|_| \___||_| |_||_||____/ \__|\___| \__,_||_| |_| |_||_| \__,_||_| |_| |_| |_|
// |
// Copyright 2015-2024 Łukasz "JustArchi" Domeradzki
// Contact: JustArchi@JustArchi.net
// |
// Licensed under the Apache License, Version 2.0 (the "License");
// you may not use this file except in compliance with the License.
// You may obtain a copy of the License at
// |
// http://www.apache.org/licenses/LICENSE-2.0
// |
// Unless required by applicable law or agreed to in writing, software
// distributed under the License is distributed on an "AS IS" BASIS,
// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
// See the License for the specific language governing permissions and
// limitations under the License.
using System;
using System.Text.Json.Serialization;
using ArchiSteamFarm.Steam.Data;
namespace ArchiSteamFarm.OfficialPlugins.ItemsMatcher.Data;
internal sealed class AssetForListing : AssetInInventory {
internal string BackendHashCode => $"{Index}-{PreviousAssetID}-{AssetID}-{ClassID}-{Rarity}-{RealAppID}-{Tradable}-{Type}-{Amount}";
[JsonInclude]
[JsonPropertyName("i")]
[JsonRequired]
internal uint Index { get; private init; }
[JsonInclude]
[JsonPropertyName("l")]
[JsonRequired]
internal ulong PreviousAssetID { get; private init; }
internal AssetForListing(Asset asset, uint index, ulong previousAssetID) : base(asset) {
ArgumentNullException.ThrowIfNull(asset);
Index = index;
PreviousAssetID = previousAssetID;
}
[JsonConstructor]
private AssetForListing() { }
}

View File

@@ -0,0 +1,74 @@
// _ _ _ ____ _ _____
// / \ _ __ ___ | |__ (_)/ ___| | |_ ___ __ _ _ __ ___ | ___|__ _ _ __ _ __ ___
// / _ \ | '__|/ __|| '_ \ | |\___ \ | __|/ _ \ / _` || '_ ` _ \ | |_ / _` || '__|| '_ ` _ \
// / ___ \ | | | (__ | | | || | ___) || |_| __/| (_| || | | | | || _|| (_| || | | | | | | |
// /_/ \_\|_| \___||_| |_||_||____/ \__|\___| \__,_||_| |_| |_||_| \__,_||_| |_| |_| |_|
// |
// Copyright 2015-2024 Łukasz "JustArchi" Domeradzki
// Contact: JustArchi@JustArchi.net
// |
// Licensed under the Apache License, Version 2.0 (the "License");
// you may not use this file except in compliance with the License.
// You may obtain a copy of the License at
// |
// http://www.apache.org/licenses/LICENSE-2.0
// |
// Unless required by applicable law or agreed to in writing, software
// distributed under the License is distributed on an "AS IS" BASIS,
// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
// See the License for the specific language governing permissions and
// limitations under the License.
using System;
using System.Text.Json.Serialization;
using ArchiSteamFarm.Steam.Data;
namespace ArchiSteamFarm.OfficialPlugins.ItemsMatcher.Data;
internal class AssetForMatching {
[JsonInclude]
[JsonPropertyName("a")]
[JsonRequired]
internal uint Amount { get; set; }
[JsonInclude]
[JsonPropertyName("c")]
[JsonRequired]
internal ulong ClassID { get; private init; }
[JsonInclude]
[JsonPropertyName("r")]
[JsonRequired]
internal Asset.ERarity Rarity { get; private init; }
[JsonInclude]
[JsonPropertyName("e")]
[JsonRequired]
internal uint RealAppID { get; private init; }
[JsonInclude]
[JsonPropertyName("t")]
[JsonRequired]
internal bool Tradable { get; private init; }
[JsonInclude]
[JsonPropertyName("p")]
[JsonRequired]
internal Asset.EType Type { get; private init; }
[JsonConstructor]
protected AssetForMatching() { }
internal AssetForMatching(Asset asset) {
ArgumentNullException.ThrowIfNull(asset);
Amount = asset.Amount;
ClassID = asset.ClassID;
Tradable = asset.Tradable;
RealAppID = asset.RealAppID;
Type = asset.Type;
Rarity = asset.Rarity;
}
}

View File

@@ -0,0 +1,44 @@
// _ _ _ ____ _ _____
// / \ _ __ ___ | |__ (_)/ ___| | |_ ___ __ _ _ __ ___ | ___|__ _ _ __ _ __ ___
// / _ \ | '__|/ __|| '_ \ | |\___ \ | __|/ _ \ / _` || '_ ` _ \ | |_ / _` || '__|| '_ ` _ \
// / ___ \ | | | (__ | | | || | ___) || |_| __/| (_| || | | | | || _|| (_| || | | | | | | |
// /_/ \_\|_| \___||_| |_||_||____/ \__|\___| \__,_||_| |_| |_||_| \__,_||_| |_| |_| |_|
// |
// Copyright 2015-2024 Łukasz "JustArchi" Domeradzki
// Contact: JustArchi@JustArchi.net
// |
// Licensed under the Apache License, Version 2.0 (the "License");
// you may not use this file except in compliance with the License.
// You may obtain a copy of the License at
// |
// http://www.apache.org/licenses/LICENSE-2.0
// |
// Unless required by applicable law or agreed to in writing, software
// distributed under the License is distributed on an "AS IS" BASIS,
// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
// See the License for the specific language governing permissions and
// limitations under the License.
using System;
using System.Text.Json.Serialization;
using ArchiSteamFarm.Steam.Data;
namespace ArchiSteamFarm.OfficialPlugins.ItemsMatcher.Data;
internal class AssetInInventory : AssetForMatching {
[JsonInclude]
[JsonPropertyName("d")]
[JsonRequired]
internal ulong AssetID { get; private init; }
[JsonConstructor]
protected AssetInInventory() { }
internal AssetInInventory(Asset asset) : base(asset) {
ArgumentNullException.ThrowIfNull(asset);
AssetID = asset.AssetID;
}
internal Asset ToAsset() => new(Asset.SteamAppID, Asset.SteamCommunityContextID, ClassID, Amount, tradable: Tradable, assetID: AssetID, realAppID: RealAppID, type: Type, rarity: Rarity);
}

View File

@@ -0,0 +1,42 @@
// _ _ _ ____ _ _____
// / \ _ __ ___ | |__ (_)/ ___| | |_ ___ __ _ _ __ ___ | ___|__ _ _ __ _ __ ___
// / _ \ | '__|/ __|| '_ \ | |\___ \ | __|/ _ \ / _` || '_ ` _ \ | |_ / _` || '__|| '_ ` _ \
// / ___ \ | | | (__ | | | || | ___) || |_| __/| (_| || | | | | || _|| (_| || | | | | | | |
// /_/ \_\|_| \___||_| |_||_||____/ \__|\___| \__,_||_| |_| |_||_| \__,_||_| |_| |_| |_|
// |
// Copyright 2015-2024 Łukasz "JustArchi" Domeradzki
// Contact: JustArchi@JustArchi.net
// |
// Licensed under the Apache License, Version 2.0 (the "License");
// you may not use this file except in compliance with the License.
// You may obtain a copy of the License at
// |
// http://www.apache.org/licenses/LICENSE-2.0
// |
// Unless required by applicable law or agreed to in writing, software
// distributed under the License is distributed on an "AS IS" BASIS,
// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
// See the License for the specific language governing permissions and
// limitations under the License.
using System;
using System.Diagnostics.CodeAnalysis;
using System.Text.Json.Serialization;
namespace ArchiSteamFarm.OfficialPlugins.ItemsMatcher.Data;
#pragma warning disable CA1812 // False positive, the class is used during json deserialization
[SuppressMessage("ReSharper", "ClassCannotBeInstantiated")]
internal sealed class BackgroundTaskResponse {
[JsonInclude]
[JsonRequired]
internal bool Finished { get; private init; }
[JsonInclude]
[JsonRequired]
internal Guid RequestID { get; private init; }
[JsonConstructor]
private BackgroundTaskResponse() { }
}
#pragma warning restore CA1812 // False positive, the class is used during json deserialization

View File

@@ -0,0 +1,47 @@
// _ _ _ ____ _ _____
// / \ _ __ ___ | |__ (_)/ ___| | |_ ___ __ _ _ __ ___ | ___|__ _ _ __ _ __ ___
// / _ \ | '__|/ __|| '_ \ | |\___ \ | __|/ _ \ / _` || '_ ` _ \ | |_ / _` || '__|| '_ ` _ \
// / ___ \ | | | (__ | | | || | ___) || |_| __/| (_| || | | | | || _|| (_| || | | | | | | |
// /_/ \_\|_| \___||_| |_||_||____/ \__|\___| \__,_||_| |_| |_||_| \__,_||_| |_| |_| |_|
// |
// Copyright 2015-2024 Łukasz "JustArchi" Domeradzki
// Contact: JustArchi@JustArchi.net
// |
// Licensed under the Apache License, Version 2.0 (the "License");
// you may not use this file except in compliance with the License.
// You may obtain a copy of the License at
// |
// http://www.apache.org/licenses/LICENSE-2.0
// |
// Unless required by applicable law or agreed to in writing, software
// distributed under the License is distributed on an "AS IS" BASIS,
// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
// See the License for the specific language governing permissions and
// limitations under the License.
using System;
using System.Text.Json.Serialization;
using SteamKit2;
namespace ArchiSteamFarm.OfficialPlugins.ItemsMatcher.Data;
internal sealed class HeartBeatRequest {
[JsonInclude]
[JsonRequired]
internal Guid Guid { get; private init; }
[JsonInclude]
[JsonRequired]
internal ulong SteamID { get; private init; }
internal HeartBeatRequest(Guid guid, ulong steamID) {
ArgumentOutOfRangeException.ThrowIfEqual(guid, Guid.Empty);
if ((steamID == 0) || !new SteamID(steamID).IsIndividualAccount) {
throw new ArgumentOutOfRangeException(nameof(steamID));
}
Guid = guid;
SteamID = steamID;
}
}

View File

@@ -0,0 +1,69 @@
// _ _ _ ____ _ _____
// / \ _ __ ___ | |__ (_)/ ___| | |_ ___ __ _ _ __ ___ | ___|__ _ _ __ _ __ ___
// / _ \ | '__|/ __|| '_ \ | |\___ \ | __|/ _ \ / _` || '_ ` _ \ | |_ / _` || '__|| '_ ` _ \
// / ___ \ | | | (__ | | | || | ___) || |_| __/| (_| || | | | | || _|| (_| || | | | | | | |
// /_/ \_\|_| \___||_| |_||_||____/ \__|\___| \__,_||_| |_| |_||_| \__,_||_| |_| |_| |_|
// |
// Copyright 2015-2024 Łukasz "JustArchi" Domeradzki
// Contact: JustArchi@JustArchi.net
// |
// Licensed under the Apache License, Version 2.0 (the "License");
// you may not use this file except in compliance with the License.
// You may obtain a copy of the License at
// |
// http://www.apache.org/licenses/LICENSE-2.0
// |
// Unless required by applicable law or agreed to in writing, software
// distributed under the License is distributed on an "AS IS" BASIS,
// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
// See the License for the specific language governing permissions and
// limitations under the License.
using System;
using System.Collections.Generic;
using System.Collections.Immutable;
using System.Linq;
using System.Text.Json.Serialization;
using ArchiSteamFarm.Steam.Data;
using SteamKit2;
namespace ArchiSteamFarm.OfficialPlugins.ItemsMatcher.Data;
internal sealed class InventoriesRequest {
[JsonInclude]
[JsonRequired]
internal Guid Guid { get; private init; }
[JsonInclude]
[JsonRequired]
internal ImmutableHashSet<AssetForMatching> Inventory { get; private init; }
[JsonInclude]
[JsonRequired]
internal ImmutableHashSet<Asset.EType> MatchableTypes { get; private init; }
[JsonInclude]
[JsonRequired]
internal ulong SteamID { get; private init; }
internal InventoriesRequest(Guid guid, ulong steamID, IReadOnlyCollection<Asset> inventory, IReadOnlyCollection<Asset.EType> matchableTypes) {
ArgumentOutOfRangeException.ThrowIfEqual(guid, Guid.Empty);
if ((steamID == 0) || !new SteamID(steamID).IsIndividualAccount) {
throw new ArgumentOutOfRangeException(nameof(steamID));
}
if ((inventory == null) || (inventory.Count == 0)) {
throw new ArgumentNullException(nameof(inventory));
}
if ((matchableTypes == null) || (matchableTypes.Count == 0)) {
throw new ArgumentNullException(nameof(matchableTypes));
}
Guid = guid;
SteamID = steamID;
Inventory = inventory.Select(static asset => new AssetForMatching(asset)).ToImmutableHashSet();
MatchableTypes = matchableTypes.ToImmutableHashSet();
}
}

View File

@@ -0,0 +1,70 @@
// _ _ _ ____ _ _____
// / \ _ __ ___ | |__ (_)/ ___| | |_ ___ __ _ _ __ ___ | ___|__ _ _ __ _ __ ___
// / _ \ | '__|/ __|| '_ \ | |\___ \ | __|/ _ \ / _` || '_ ` _ \ | |_ / _` || '__|| '_ ` _ \
// / ___ \ | | | (__ | | | || | ___) || |_| __/| (_| || | | | | || _|| (_| || | | | | | | |
// /_/ \_\|_| \___||_| |_||_||____/ \__|\___| \__,_||_| |_| |_||_| \__,_||_| |_| |_| |_|
// |
// Copyright 2015-2024 Łukasz "JustArchi" Domeradzki
// Contact: JustArchi@JustArchi.net
// |
// Licensed under the Apache License, Version 2.0 (the "License");
// you may not use this file except in compliance with the License.
// You may obtain a copy of the License at
// |
// http://www.apache.org/licenses/LICENSE-2.0
// |
// Unless required by applicable law or agreed to in writing, software
// distributed under the License is distributed on an "AS IS" BASIS,
// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
// See the License for the specific language governing permissions and
// limitations under the License.
using System.Collections.Immutable;
using System.Diagnostics.CodeAnalysis;
using System.Text.Json.Serialization;
using ArchiSteamFarm.Steam.Data;
namespace ArchiSteamFarm.OfficialPlugins.ItemsMatcher.Data;
#pragma warning disable CA1812 // False positive, the class is used during json deserialization
[SuppressMessage("ReSharper", "ClassCannotBeInstantiated")]
internal sealed class ListedUser {
[JsonInclude]
[JsonRequired]
internal ImmutableHashSet<AssetInInventory> Assets { get; private init; } = ImmutableHashSet<AssetInInventory>.Empty;
[JsonInclude]
[JsonRequired]
internal ImmutableHashSet<Asset.EType> MatchableTypes { get; private init; } = ImmutableHashSet<Asset.EType>.Empty;
[JsonInclude]
[JsonRequired]
internal bool MatchEverything { get; private init; }
[JsonInclude]
[JsonRequired]
internal byte MaxTradeHoldDuration { get; private init; }
[JsonInclude]
internal string? Nickname { get; private init; }
[JsonInclude]
[JsonRequired]
internal ulong SteamID { get; private init; }
[JsonInclude]
[JsonRequired]
internal uint TotalGamesCount { get; private init; }
[JsonInclude]
[JsonRequired]
internal uint TotalInventoryCount { get; private init; }
[JsonInclude]
[JsonRequired]
internal string TradeToken { get; private init; } = "";
[JsonConstructor]
private ListedUser() { }
}
#pragma warning restore CA1812 // False positive, the class is used during json deserialization

View File

@@ -0,0 +1,54 @@
// _ _ _ ____ _ _____
// / \ _ __ ___ | |__ (_)/ ___| | |_ ___ __ _ _ __ ___ | ___|__ _ _ __ _ __ ___
// / _ \ | '__|/ __|| '_ \ | |\___ \ | __|/ _ \ / _` || '_ ` _ \ | |_ / _` || '__|| '_ ` _ \
// / ___ \ | | | (__ | | | || | ___) || |_| __/| (_| || | | | | || _|| (_| || | | | | | | |
// /_/ \_\|_| \___||_| |_||_||____/ \__|\___| \__,_||_| |_| |_||_| \__,_||_| |_| |_| |_|
// |
// Copyright 2015-2024 Łukasz "JustArchi" Domeradzki
// Contact: JustArchi@JustArchi.net
// |
// Licensed under the Apache License, Version 2.0 (the "License");
// you may not use this file except in compliance with the License.
// You may obtain a copy of the License at
// |
// http://www.apache.org/licenses/LICENSE-2.0
// |
// Unless required by applicable law or agreed to in writing, software
// distributed under the License is distributed on an "AS IS" BASIS,
// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
// See the License for the specific language governing permissions and
// limitations under the License.
using System.Diagnostics.CodeAnalysis;
using System.Text.Json.Serialization;
using ArchiSteamFarm.Steam.Data;
namespace ArchiSteamFarm.OfficialPlugins.ItemsMatcher.Data;
#pragma warning disable CA1812 // False positive, the class is used during json deserialization
[SuppressMessage("ReSharper", "ClassCannotBeInstantiated")]
internal sealed class SetPart {
[JsonInclude]
[JsonPropertyName("c")]
[JsonRequired]
internal ulong ClassID { get; private init; }
[JsonInclude]
[JsonPropertyName("r")]
[JsonRequired]
internal Asset.ERarity Rarity { get; private init; }
[JsonInclude]
[JsonPropertyName("e")]
[JsonRequired]
internal uint RealAppID { get; private init; }
[JsonInclude]
[JsonPropertyName("p")]
[JsonRequired]
internal Asset.EType Type { get; private init; }
[JsonConstructor]
private SetPart() { }
}
#pragma warning restore CA1812 // False positive, the class is used during json deserialization

View File

@@ -0,0 +1,68 @@
// _ _ _ ____ _ _____
// / \ _ __ ___ | |__ (_)/ ___| | |_ ___ __ _ _ __ ___ | ___|__ _ _ __ _ __ ___
// / _ \ | '__|/ __|| '_ \ | |\___ \ | __|/ _ \ / _` || '_ ` _ \ | |_ / _` || '__|| '_ ` _ \
// / ___ \ | | | (__ | | | || | ___) || |_| __/| (_| || | | | | || _|| (_| || | | | | | | |
// /_/ \_\|_| \___||_| |_||_||____/ \__|\___| \__,_||_| |_| |_||_| \__,_||_| |_| |_| |_|
// |
// Copyright 2015-2024 Łukasz "JustArchi" Domeradzki
// Contact: JustArchi@JustArchi.net
// |
// Licensed under the Apache License, Version 2.0 (the "License");
// you may not use this file except in compliance with the License.
// You may obtain a copy of the License at
// |
// http://www.apache.org/licenses/LICENSE-2.0
// |
// Unless required by applicable law or agreed to in writing, software
// distributed under the License is distributed on an "AS IS" BASIS,
// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
// See the License for the specific language governing permissions and
// limitations under the License.
using System;
using System.Collections.Generic;
using System.Collections.Immutable;
using System.Text.Json.Serialization;
using ArchiSteamFarm.Steam.Data;
using SteamKit2;
namespace ArchiSteamFarm.OfficialPlugins.ItemsMatcher.Data;
internal sealed class SetPartsRequest {
[JsonInclude]
[JsonRequired]
internal Guid Guid { get; private init; }
[JsonInclude]
[JsonRequired]
internal ImmutableHashSet<Asset.EType> MatchableTypes { get; private init; }
[JsonInclude]
[JsonRequired]
internal ImmutableHashSet<uint> RealAppIDs { get; private init; }
[JsonInclude]
[JsonRequired]
internal ulong SteamID { get; private init; }
internal SetPartsRequest(Guid guid, ulong steamID, IReadOnlyCollection<Asset.EType> matchableTypes, IReadOnlyCollection<uint> realAppIDs) {
ArgumentOutOfRangeException.ThrowIfEqual(guid, Guid.Empty);
if ((steamID == 0) || !new SteamID(steamID).IsIndividualAccount) {
throw new ArgumentOutOfRangeException(nameof(steamID));
}
if ((matchableTypes == null) || (matchableTypes.Count == 0)) {
throw new ArgumentNullException(nameof(matchableTypes));
}
if ((realAppIDs == null) || (realAppIDs.Count == 0)) {
throw new ArgumentNullException(nameof(realAppIDs));
}
Guid = guid;
SteamID = steamID;
MatchableTypes = matchableTypes.ToImmutableHashSet();
RealAppIDs = realAppIDs.ToImmutableHashSet();
}
}

View File

@@ -0,0 +1,153 @@
// _ _ _ ____ _ _____
// / \ _ __ ___ | |__ (_)/ ___| | |_ ___ __ _ _ __ ___ | ___|__ _ _ __ _ __ ___
// / _ \ | '__|/ __|| '_ \ | |\___ \ | __|/ _ \ / _` || '_ ` _ \ | |_ / _` || '__|| '_ ` _ \
// / ___ \ | | | (__ | | | || | ___) || |_| __/| (_| || | | | | || _|| (_| || | | | | | | |
// /_/ \_\|_| \___||_| |_||_||____/ \__|\___| \__,_||_| |_| |_||_| \__,_||_| |_| |_| |_|
// |
// Copyright 2015-2024 Łukasz "JustArchi" Domeradzki
// Contact: JustArchi@JustArchi.net
// |
// Licensed under the Apache License, Version 2.0 (the "License");
// you may not use this file except in compliance with the License.
// You may obtain a copy of the License at
// |
// http://www.apache.org/licenses/LICENSE-2.0
// |
// Unless required by applicable law or agreed to in writing, software
// distributed under the License is distributed on an "AS IS" BASIS,
// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
// See the License for the specific language governing permissions and
// limitations under the License.
using System;
using System.Collections.Concurrent;
using System.Collections.Generic;
using System.ComponentModel;
using System.ComponentModel.DataAnnotations;
using System.Composition;
using System.Linq;
using System.Text.Json;
using System.Text.Json.Serialization;
using System.Threading.Tasks;
using ArchiSteamFarm.Core;
using ArchiSteamFarm.OfficialPlugins.ItemsMatcher.Localization;
using ArchiSteamFarm.Plugins;
using ArchiSteamFarm.Plugins.Interfaces;
using ArchiSteamFarm.Steam;
using ArchiSteamFarm.Steam.Exchange;
using ArchiSteamFarm.Steam.Integration.Callbacks;
using SteamKit2;
namespace ArchiSteamFarm.OfficialPlugins.ItemsMatcher;
[Export(typeof(IPlugin))]
internal sealed class ItemsMatcherPlugin : OfficialPlugin, IBot, IBotCommand2, IBotIdentity, IBotModules, IBotTradeOfferResults, IBotUserNotifications {
internal static readonly ConcurrentDictionary<Bot, RemoteCommunication> RemoteCommunications = new();
[JsonInclude]
[Required]
public override string Name => nameof(ItemsMatcherPlugin);
[JsonInclude]
[Required]
public override Version Version => typeof(ItemsMatcherPlugin).Assembly.GetName().Version ?? throw new InvalidOperationException(nameof(Version));
public async Task<string?> OnBotCommand(Bot bot, EAccess access, string message, string[] args, ulong steamID = 0) {
ArgumentNullException.ThrowIfNull(bot);
if (!Enum.IsDefined(access)) {
throw new InvalidEnumArgumentException(nameof(access), (int) access, typeof(EAccess));
}
ArgumentException.ThrowIfNullOrEmpty(message);
if ((args == null) || (args.Length == 0)) {
throw new ArgumentNullException(nameof(args));
}
if ((steamID != 0) && !new SteamID(steamID).IsIndividualAccount) {
throw new ArgumentOutOfRangeException(nameof(steamID));
}
return await Commands.OnBotCommand(bot, access, args, steamID).ConfigureAwait(false);
}
public async Task OnBotDestroy(Bot bot) {
ArgumentNullException.ThrowIfNull(bot);
if (RemoteCommunications.TryRemove(bot, out RemoteCommunication? remoteCommunication)) {
await remoteCommunication.DisposeAsync().ConfigureAwait(false);
}
}
public Task OnBotInit(Bot bot) {
ArgumentNullException.ThrowIfNull(bot);
return Task.CompletedTask;
}
public async Task OnBotInitModules(Bot bot, IReadOnlyDictionary<string, JsonElement>? additionalConfigProperties = null) {
ArgumentNullException.ThrowIfNull(bot);
if (RemoteCommunications.TryRemove(bot, out RemoteCommunication? remoteCommunication)) {
await remoteCommunication.DisposeAsync().ConfigureAwait(false);
}
remoteCommunication = new RemoteCommunication(bot);
if (!RemoteCommunications.TryAdd(bot, remoteCommunication)) {
await remoteCommunication.DisposeAsync().ConfigureAwait(false);
}
}
public Task OnBotTradeOfferResults(Bot bot, IReadOnlyCollection<ParseTradeResult> tradeResults) {
ArgumentNullException.ThrowIfNull(bot);
if ((tradeResults == null) || (tradeResults.Count == 0)) {
throw new ArgumentNullException(nameof(tradeResults));
}
// We're interested only in Items notification for Bot that has RemoteCommunication enabled
if (!RemoteCommunications.TryGetValue(bot, out RemoteCommunication? remoteCommunication) || !tradeResults.Any(tradeResult => tradeResult is { Result: ParseTradeResult.EResult.Accepted, Confirmed: true } && ((tradeResult.ItemsToGive?.Any(item => bot.BotConfig.MatchableTypes.Contains(item.Type)) == true) || (tradeResult.ItemsToReceive?.Any(item => bot.BotConfig.MatchableTypes.Contains(item.Type)) == true)))) {
return Task.CompletedTask;
}
remoteCommunication.OnNewItemsNotification();
return Task.CompletedTask;
}
public Task OnBotUserNotifications(Bot bot, IReadOnlyCollection<UserNotificationsCallback.EUserNotification> newNotifications) {
ArgumentNullException.ThrowIfNull(bot);
if ((newNotifications == null) || (newNotifications.Count == 0)) {
throw new ArgumentNullException(nameof(newNotifications));
}
// We're interested only in Items notification for Bot that has RemoteCommunication enabled
if (!newNotifications.Contains(UserNotificationsCallback.EUserNotification.Items) || !RemoteCommunications.TryGetValue(bot, out RemoteCommunication? remoteCommunication)) {
return Task.CompletedTask;
}
remoteCommunication.OnNewItemsNotification();
return Task.CompletedTask;
}
public override Task OnLoaded() {
Utilities.WarnAboutIncompleteTranslation(Strings.ResourceManager);
return Task.CompletedTask;
}
public async Task OnSelfPersonaState(Bot bot, SteamFriends.PersonaStateCallback data, string? nickname, string? avatarHash) {
ArgumentNullException.ThrowIfNull(bot);
if (!RemoteCommunications.TryGetValue(bot, out RemoteCommunication? remoteCommunication)) {
// This bot doesn't have RemoteCommunication enabled
return;
}
await remoteCommunication.OnPersonaState(nickname, avatarHash).ConfigureAwait(false);
}
}

View File

@@ -0,0 +1,3 @@
This directory contains ASF strings for display and localization purposes.
All strings used by ASF can be found in main `Strings.resx` file, and that's also the only `resx` file that should be modified - all other `resx` files are managed automatically and should not be touched. Please visit **[localization](https://github.com/JustArchiNET/ArchiSteamFarm/wiki/Localization)** section on the wiki if you want to improve translation of other files.

View File

@@ -0,0 +1,78 @@
//------------------------------------------------------------------------------
// <auto-generated>
// This code was generated by a tool.
//
// Changes to this file may cause incorrect behavior and will be lost if
// the code is regenerated.
// </auto-generated>
//------------------------------------------------------------------------------
namespace ArchiSteamFarm.OfficialPlugins.ItemsMatcher.Localization {
using System;
[System.CodeDom.Compiler.GeneratedCodeAttribute("System.Resources.Tools.StronglyTypedResourceBuilder", "4.0.0.0")]
[System.Diagnostics.DebuggerNonUserCodeAttribute()]
[System.Runtime.CompilerServices.CompilerGeneratedAttribute()]
internal class Strings {
private static System.Resources.ResourceManager resourceMan;
private static System.Globalization.CultureInfo resourceCulture;
[System.Diagnostics.CodeAnalysis.SuppressMessageAttribute("Microsoft.Performance", "CA1811:AvoidUncalledPrivateCode")]
internal Strings() {
}
[System.ComponentModel.EditorBrowsableAttribute(System.ComponentModel.EditorBrowsableState.Advanced)]
internal static System.Resources.ResourceManager ResourceManager {
get {
if (object.Equals(null, resourceMan)) {
System.Resources.ResourceManager temp = new System.Resources.ResourceManager("ArchiSteamFarm.OfficialPlugins.ItemsMatcher.Localization.Strings", typeof(Strings).Assembly);
resourceMan = temp;
}
return resourceMan;
}
}
[System.ComponentModel.EditorBrowsableAttribute(System.ComponentModel.EditorBrowsableState.Advanced)]
internal static System.Globalization.CultureInfo Culture {
get {
return resourceCulture;
}
set {
resourceCulture = value;
}
}
internal static string ActivelyMatchingItemsRound {
get {
return ResourceManager.GetString("ActivelyMatchingItemsRound", resourceCulture);
}
}
internal static string ListingAnnouncing {
get {
return ResourceManager.GetString("ListingAnnouncing", resourceCulture);
}
}
internal static string MatchingFound {
get {
return ResourceManager.GetString("MatchingFound", resourceCulture);
}
}
internal static string TradeOfferFailed {
get {
return ResourceManager.GetString("TradeOfferFailed", resourceCulture);
}
}
internal static string ActivelyMatchingSomeConfirmationsFailed {
get {
return ResourceManager.GetString("ActivelyMatchingSomeConfirmationsFailed", resourceCulture);
}
}
}
}

View File

@@ -0,0 +1,65 @@
<?xml version="1.0" encoding="utf-8"?>
<root>
<xsd:schema xmlns:xsd="http://www.w3.org/2001/XMLSchema" xmlns:msdata="urn:schemas-microsoft-com:xml-msdata" xmlns="" id="root">
<xsd:import namespace="http://www.w3.org/XML/1998/namespace"/>
<xsd:element name="root" msdata:IsDataSet="true">
<xsd:complexType>
<xsd:choice maxOccurs="unbounded">
<xsd:element name="metadata">
<xsd:complexType>
<xsd:sequence>
<xsd:element name="value" type="xsd:string" minOccurs="0"/>
</xsd:sequence>
<xsd:attribute name="name" use="required" type="xsd:string"/>
<xsd:attribute name="type" type="xsd:string"/>
<xsd:attribute name="mimetype" type="xsd:string"/>
<xsd:attribute ref="xml:space"/>
</xsd:complexType>
</xsd:element>
<xsd:element name="assembly">
<xsd:complexType>
<xsd:attribute name="alias" type="xsd:string"/>
<xsd:attribute name="name" type="xsd:string"/>
</xsd:complexType>
</xsd:element>
<xsd:element name="data">
<xsd:complexType>
<xsd:sequence>
<xsd:element name="value" type="xsd:string" minOccurs="0" msdata:Ordinal="1"/>
<xsd:element name="comment" type="xsd:string" minOccurs="0" msdata:Ordinal="2"/>
</xsd:sequence>
<xsd:attribute name="name" type="xsd:string" use="required" msdata:Ordinal="1"/>
<xsd:attribute name="type" type="xsd:string" msdata:Ordinal="3"/>
<xsd:attribute name="mimetype" type="xsd:string" msdata:Ordinal="4"/>
<xsd:attribute ref="xml:space"/>
</xsd:complexType>
</xsd:element>
<xsd:element name="resheader">
<xsd:complexType>
<xsd:sequence>
<xsd:element name="value" type="xsd:string" minOccurs="0" msdata:Ordinal="1"/>
</xsd:sequence>
<xsd:attribute name="name" type="xsd:string" use="required"/>
</xsd:complexType>
</xsd:element>
</xsd:choice>
</xsd:complexType>
</xsd:element>
</xsd:schema>
<resheader name="resmimetype">
<value>text/microsoft-resx</value>
</resheader>
<resheader name="version">
<value>2.0</value>
</resheader>
<resheader name="reader">
<value>System.Resources.ResXResourceReader, System.Windows.Forms, Version=4.0.0.0, Culture=neutral,
PublicKeyToken=b77a5c561934e089
</value>
</resheader>
<resheader name="writer">
<value>System.Resources.ResXResourceWriter, System.Windows.Forms, Version=4.0.0.0, Culture=neutral,
PublicKeyToken=b77a5c561934e089
</value>
</resheader>
</root>

View File

@@ -0,0 +1,85 @@
<?xml version="1.0" encoding="utf-8"?>
<root>
<xsd:schema xmlns:xsd="http://www.w3.org/2001/XMLSchema" xmlns:msdata="urn:schemas-microsoft-com:xml-msdata" xmlns="" id="root">
<xsd:import namespace="http://www.w3.org/XML/1998/namespace"/>
<xsd:element name="root" msdata:IsDataSet="true">
<xsd:complexType>
<xsd:choice maxOccurs="unbounded">
<xsd:element name="metadata">
<xsd:complexType>
<xsd:sequence>
<xsd:element name="value" type="xsd:string" minOccurs="0"/>
</xsd:sequence>
<xsd:attribute name="name" use="required" type="xsd:string"/>
<xsd:attribute name="type" type="xsd:string"/>
<xsd:attribute name="mimetype" type="xsd:string"/>
<xsd:attribute ref="xml:space"/>
</xsd:complexType>
</xsd:element>
<xsd:element name="assembly">
<xsd:complexType>
<xsd:attribute name="alias" type="xsd:string"/>
<xsd:attribute name="name" type="xsd:string"/>
</xsd:complexType>
</xsd:element>
<xsd:element name="data">
<xsd:complexType>
<xsd:sequence>
<xsd:element name="value" type="xsd:string" minOccurs="0" msdata:Ordinal="1"/>
<xsd:element name="comment" type="xsd:string" minOccurs="0" msdata:Ordinal="2"/>
</xsd:sequence>
<xsd:attribute name="name" type="xsd:string" use="required" msdata:Ordinal="1"/>
<xsd:attribute name="type" type="xsd:string" msdata:Ordinal="3"/>
<xsd:attribute name="mimetype" type="xsd:string" msdata:Ordinal="4"/>
<xsd:attribute ref="xml:space"/>
</xsd:complexType>
</xsd:element>
<xsd:element name="resheader">
<xsd:complexType>
<xsd:sequence>
<xsd:element name="value" type="xsd:string" minOccurs="0" msdata:Ordinal="1"/>
</xsd:sequence>
<xsd:attribute name="name" type="xsd:string" use="required"/>
</xsd:complexType>
</xsd:element>
</xsd:choice>
</xsd:complexType>
</xsd:element>
</xsd:schema>
<resheader name="resmimetype">
<value>text/microsoft-resx</value>
</resheader>
<resheader name="version">
<value>2.0</value>
</resheader>
<resheader name="reader">
<value>System.Resources.ResXResourceReader, System.Windows.Forms, Version=4.0.0.0, Culture=neutral,
PublicKeyToken=b77a5c561934e089
</value>
</resheader>
<resheader name="writer">
<value>System.Resources.ResXResourceWriter, System.Windows.Forms, Version=4.0.0.0, Culture=neutral,
PublicKeyToken=b77a5c561934e089
</value>
</resheader>
<data name="ActivelyMatchingItemsRound" xml:space="preserve">
<value>Съвпадащи общо {0} комплекта този кръг.</value>
<comment>{0} will be replaced by number of sets traded</comment>
</data>
<data name="ListingAnnouncing" xml:space="preserve">
<value>Обявяване на {0} ({1}) с инвентар, съставен от общо {2} артикула в обявата...</value>
<comment>{0} will be replaced by steam ID (number), {1} will be replaced by user's nickname, {2} will be replaced with number of items in the inventory</comment>
</data>
<data name="MatchingFound" xml:space="preserve">
<value>Съпоставихте общо {0} артикула с бот {1} ({2}), изпращайки трейд оферта...</value>
<comment>{0} will be replaced by number of items matched, {1} will be replaced by steam ID (number), {2} will be replaced by user's nickname</comment>
</data>
<data name="TradeOfferFailed" xml:space="preserve">
<value>Неуспешно изпращане на трейд оферта до бот {0} ({1}), продължаваме...</value>
<comment>{0} will be replaced by steam ID (number), {1} will be replaced by user's nickname'</comment>
</data>
<data name="ActivelyMatchingSomeConfirmationsFailed" xml:space="preserve">
<value>Някои потвърждения са неуспешни, приблизително {0} от {1} от размените бяха изпратени успешно.</value>
<comment>{0} will be replaced by amount of the trade offers that succeeded (number), {1} will be replaced by amount of the trade offers that were supposed to be sent in total (number)</comment>
</data>
</root>

View File

@@ -0,0 +1,69 @@
<?xml version="1.0" encoding="utf-8"?>
<root>
<xsd:schema xmlns:xsd="http://www.w3.org/2001/XMLSchema" xmlns:msdata="urn:schemas-microsoft-com:xml-msdata" xmlns="" id="root">
<xsd:import namespace="http://www.w3.org/XML/1998/namespace"/>
<xsd:element name="root" msdata:IsDataSet="true">
<xsd:complexType>
<xsd:choice maxOccurs="unbounded">
<xsd:element name="metadata">
<xsd:complexType>
<xsd:sequence>
<xsd:element name="value" type="xsd:string" minOccurs="0"/>
</xsd:sequence>
<xsd:attribute name="name" use="required" type="xsd:string"/>
<xsd:attribute name="type" type="xsd:string"/>
<xsd:attribute name="mimetype" type="xsd:string"/>
<xsd:attribute ref="xml:space"/>
</xsd:complexType>
</xsd:element>
<xsd:element name="assembly">
<xsd:complexType>
<xsd:attribute name="alias" type="xsd:string"/>
<xsd:attribute name="name" type="xsd:string"/>
</xsd:complexType>
</xsd:element>
<xsd:element name="data">
<xsd:complexType>
<xsd:sequence>
<xsd:element name="value" type="xsd:string" minOccurs="0" msdata:Ordinal="1"/>
<xsd:element name="comment" type="xsd:string" minOccurs="0" msdata:Ordinal="2"/>
</xsd:sequence>
<xsd:attribute name="name" type="xsd:string" use="required" msdata:Ordinal="1"/>
<xsd:attribute name="type" type="xsd:string" msdata:Ordinal="3"/>
<xsd:attribute name="mimetype" type="xsd:string" msdata:Ordinal="4"/>
<xsd:attribute ref="xml:space"/>
</xsd:complexType>
</xsd:element>
<xsd:element name="resheader">
<xsd:complexType>
<xsd:sequence>
<xsd:element name="value" type="xsd:string" minOccurs="0" msdata:Ordinal="1"/>
</xsd:sequence>
<xsd:attribute name="name" type="xsd:string" use="required"/>
</xsd:complexType>
</xsd:element>
</xsd:choice>
</xsd:complexType>
</xsd:element>
</xsd:schema>
<resheader name="resmimetype">
<value>text/microsoft-resx</value>
</resheader>
<resheader name="version">
<value>2.0</value>
</resheader>
<resheader name="reader">
<value>System.Resources.ResXResourceReader, System.Windows.Forms, Version=4.0.0.0, Culture=neutral,
PublicKeyToken=b77a5c561934e089
</value>
</resheader>
<resheader name="writer">
<value>System.Resources.ResXResourceWriter, System.Windows.Forms, Version=4.0.0.0, Culture=neutral,
PublicKeyToken=b77a5c561934e089
</value>
</resheader>
<data name="ActivelyMatchingSomeConfirmationsFailed" xml:space="preserve">
<value>Neke konfirmacije su neuspješne, odprilike {0} od {1} razmjena je poslano uspješno.</value>
<comment>{0} will be replaced by amount of the trade offers that succeeded (number), {1} will be replaced by amount of the trade offers that were supposed to be sent in total (number)</comment>
</data>
</root>

View File

@@ -0,0 +1,85 @@
<?xml version="1.0" encoding="utf-8"?>
<root>
<xsd:schema xmlns:xsd="http://www.w3.org/2001/XMLSchema" xmlns:msdata="urn:schemas-microsoft-com:xml-msdata" xmlns="" id="root">
<xsd:import namespace="http://www.w3.org/XML/1998/namespace"/>
<xsd:element name="root" msdata:IsDataSet="true">
<xsd:complexType>
<xsd:choice maxOccurs="unbounded">
<xsd:element name="metadata">
<xsd:complexType>
<xsd:sequence>
<xsd:element name="value" type="xsd:string" minOccurs="0"/>
</xsd:sequence>
<xsd:attribute name="name" use="required" type="xsd:string"/>
<xsd:attribute name="type" type="xsd:string"/>
<xsd:attribute name="mimetype" type="xsd:string"/>
<xsd:attribute ref="xml:space"/>
</xsd:complexType>
</xsd:element>
<xsd:element name="assembly">
<xsd:complexType>
<xsd:attribute name="alias" type="xsd:string"/>
<xsd:attribute name="name" type="xsd:string"/>
</xsd:complexType>
</xsd:element>
<xsd:element name="data">
<xsd:complexType>
<xsd:sequence>
<xsd:element name="value" type="xsd:string" minOccurs="0" msdata:Ordinal="1"/>
<xsd:element name="comment" type="xsd:string" minOccurs="0" msdata:Ordinal="2"/>
</xsd:sequence>
<xsd:attribute name="name" type="xsd:string" use="required" msdata:Ordinal="1"/>
<xsd:attribute name="type" type="xsd:string" msdata:Ordinal="3"/>
<xsd:attribute name="mimetype" type="xsd:string" msdata:Ordinal="4"/>
<xsd:attribute ref="xml:space"/>
</xsd:complexType>
</xsd:element>
<xsd:element name="resheader">
<xsd:complexType>
<xsd:sequence>
<xsd:element name="value" type="xsd:string" minOccurs="0" msdata:Ordinal="1"/>
</xsd:sequence>
<xsd:attribute name="name" type="xsd:string" use="required"/>
</xsd:complexType>
</xsd:element>
</xsd:choice>
</xsd:complexType>
</xsd:element>
</xsd:schema>
<resheader name="resmimetype">
<value>text/microsoft-resx</value>
</resheader>
<resheader name="version">
<value>2.0</value>
</resheader>
<resheader name="reader">
<value>System.Resources.ResXResourceReader, System.Windows.Forms, Version=4.0.0.0, Culture=neutral,
PublicKeyToken=b77a5c561934e089
</value>
</resheader>
<resheader name="writer">
<value>System.Resources.ResXResourceWriter, System.Windows.Forms, Version=4.0.0.0, Culture=neutral,
PublicKeyToken=b77a5c561934e089
</value>
</resheader>
<data name="ActivelyMatchingItemsRound" xml:space="preserve">
<value>Celkem porovnáno {0} sad karet.</value>
<comment>{0} will be replaced by number of sets traded</comment>
</data>
<data name="ListingAnnouncing" xml:space="preserve">
<value>Oznámení {0} ({1}) s inventářem z celkem {2} položek na seznamu...</value>
<comment>{0} will be replaced by steam ID (number), {1} will be replaced by user's nickname, {2} will be replaced with number of items in the inventory</comment>
</data>
<data name="MatchingFound" xml:space="preserve">
<value>Shodné s celkem {0} položek s botem {1} ({2}), posílání obchodní nabídky...</value>
<comment>{0} will be replaced by number of items matched, {1} will be replaced by steam ID (number), {2} will be replaced by user's nickname</comment>
</data>
<data name="TradeOfferFailed" xml:space="preserve">
<value>Nepodařilo se odeslat obchodní nabídku pro bota {0} ({1}), pokračuji...</value>
<comment>{0} will be replaced by steam ID (number), {1} will be replaced by user's nickname'</comment>
</data>
<data name="ActivelyMatchingSomeConfirmationsFailed" xml:space="preserve">
<value>Některá potvrzení se nezdařila, úspěšně bylo odesláno přibližně {0} z {1} obchodů.</value>
<comment>{0} will be replaced by amount of the trade offers that succeeded (number), {1} will be replaced by amount of the trade offers that were supposed to be sent in total (number)</comment>
</data>
</root>

View File

@@ -0,0 +1,69 @@
<?xml version="1.0" encoding="utf-8"?>
<root>
<xsd:schema xmlns:xsd="http://www.w3.org/2001/XMLSchema" xmlns:msdata="urn:schemas-microsoft-com:xml-msdata" xmlns="" id="root">
<xsd:import namespace="http://www.w3.org/XML/1998/namespace"/>
<xsd:element name="root" msdata:IsDataSet="true">
<xsd:complexType>
<xsd:choice maxOccurs="unbounded">
<xsd:element name="metadata">
<xsd:complexType>
<xsd:sequence>
<xsd:element name="value" type="xsd:string" minOccurs="0"/>
</xsd:sequence>
<xsd:attribute name="name" use="required" type="xsd:string"/>
<xsd:attribute name="type" type="xsd:string"/>
<xsd:attribute name="mimetype" type="xsd:string"/>
<xsd:attribute ref="xml:space"/>
</xsd:complexType>
</xsd:element>
<xsd:element name="assembly">
<xsd:complexType>
<xsd:attribute name="alias" type="xsd:string"/>
<xsd:attribute name="name" type="xsd:string"/>
</xsd:complexType>
</xsd:element>
<xsd:element name="data">
<xsd:complexType>
<xsd:sequence>
<xsd:element name="value" type="xsd:string" minOccurs="0" msdata:Ordinal="1"/>
<xsd:element name="comment" type="xsd:string" minOccurs="0" msdata:Ordinal="2"/>
</xsd:sequence>
<xsd:attribute name="name" type="xsd:string" use="required" msdata:Ordinal="1"/>
<xsd:attribute name="type" type="xsd:string" msdata:Ordinal="3"/>
<xsd:attribute name="mimetype" type="xsd:string" msdata:Ordinal="4"/>
<xsd:attribute ref="xml:space"/>
</xsd:complexType>
</xsd:element>
<xsd:element name="resheader">
<xsd:complexType>
<xsd:sequence>
<xsd:element name="value" type="xsd:string" minOccurs="0" msdata:Ordinal="1"/>
</xsd:sequence>
<xsd:attribute name="name" type="xsd:string" use="required"/>
</xsd:complexType>
</xsd:element>
</xsd:choice>
</xsd:complexType>
</xsd:element>
</xsd:schema>
<resheader name="resmimetype">
<value>text/microsoft-resx</value>
</resheader>
<resheader name="version">
<value>2.0</value>
</resheader>
<resheader name="reader">
<value>System.Resources.ResXResourceReader, System.Windows.Forms, Version=4.0.0.0, Culture=neutral,
PublicKeyToken=b77a5c561934e089
</value>
</resheader>
<resheader name="writer">
<value>System.Resources.ResXResourceWriter, System.Windows.Forms, Version=4.0.0.0, Culture=neutral,
PublicKeyToken=b77a5c561934e089
</value>
</resheader>
<data name="ActivelyMatchingItemsRound" xml:space="preserve">
<value>Matched totalt {0} sæt denne runde.</value>
<comment>{0} will be replaced by number of sets traded</comment>
</data>
</root>

View File

@@ -0,0 +1,85 @@
<?xml version="1.0" encoding="utf-8"?>
<root>
<xsd:schema xmlns:xsd="http://www.w3.org/2001/XMLSchema" xmlns:msdata="urn:schemas-microsoft-com:xml-msdata" xmlns="" id="root">
<xsd:import namespace="http://www.w3.org/XML/1998/namespace"/>
<xsd:element name="root" msdata:IsDataSet="true">
<xsd:complexType>
<xsd:choice maxOccurs="unbounded">
<xsd:element name="metadata">
<xsd:complexType>
<xsd:sequence>
<xsd:element name="value" type="xsd:string" minOccurs="0"/>
</xsd:sequence>
<xsd:attribute name="name" use="required" type="xsd:string"/>
<xsd:attribute name="type" type="xsd:string"/>
<xsd:attribute name="mimetype" type="xsd:string"/>
<xsd:attribute ref="xml:space"/>
</xsd:complexType>
</xsd:element>
<xsd:element name="assembly">
<xsd:complexType>
<xsd:attribute name="alias" type="xsd:string"/>
<xsd:attribute name="name" type="xsd:string"/>
</xsd:complexType>
</xsd:element>
<xsd:element name="data">
<xsd:complexType>
<xsd:sequence>
<xsd:element name="value" type="xsd:string" minOccurs="0" msdata:Ordinal="1"/>
<xsd:element name="comment" type="xsd:string" minOccurs="0" msdata:Ordinal="2"/>
</xsd:sequence>
<xsd:attribute name="name" type="xsd:string" use="required" msdata:Ordinal="1"/>
<xsd:attribute name="type" type="xsd:string" msdata:Ordinal="3"/>
<xsd:attribute name="mimetype" type="xsd:string" msdata:Ordinal="4"/>
<xsd:attribute ref="xml:space"/>
</xsd:complexType>
</xsd:element>
<xsd:element name="resheader">
<xsd:complexType>
<xsd:sequence>
<xsd:element name="value" type="xsd:string" minOccurs="0" msdata:Ordinal="1"/>
</xsd:sequence>
<xsd:attribute name="name" type="xsd:string" use="required"/>
</xsd:complexType>
</xsd:element>
</xsd:choice>
</xsd:complexType>
</xsd:element>
</xsd:schema>
<resheader name="resmimetype">
<value>text/microsoft-resx</value>
</resheader>
<resheader name="version">
<value>2.0</value>
</resheader>
<resheader name="reader">
<value>System.Resources.ResXResourceReader, System.Windows.Forms, Version=4.0.0.0, Culture=neutral,
PublicKeyToken=b77a5c561934e089
</value>
</resheader>
<resheader name="writer">
<value>System.Resources.ResXResourceWriter, System.Windows.Forms, Version=4.0.0.0, Culture=neutral,
PublicKeyToken=b77a5c561934e089
</value>
</resheader>
<data name="ActivelyMatchingItemsRound" xml:space="preserve">
<value>Insgesamt wurden in diesem Durchgang {0} Set(s) abgeglichen.</value>
<comment>{0} will be replaced by number of sets traded</comment>
</data>
<data name="ListingAnnouncing" xml:space="preserve">
<value>Benutzerkonto {0} ({1}) mit aus insgesamt {2} Gegenständen bestehendem Inventar wird angekündigt...</value>
<comment>{0} will be replaced by steam ID (number), {1} will be replaced by user's nickname, {2} will be replaced with number of items in the inventory</comment>
</data>
<data name="MatchingFound" xml:space="preserve">
<value>{0} passende Gegenstände bei Bot {1} ({2}) gefunden, sende Handelsangebot...</value>
<comment>{0} will be replaced by number of items matched, {1} will be replaced by steam ID (number), {2} will be replaced by user's nickname</comment>
</data>
<data name="TradeOfferFailed" xml:space="preserve">
<value>Fehler beim Senden eines Handelsangebots an Bot {0} ({1}); überspringe...</value>
<comment>{0} will be replaced by steam ID (number), {1} will be replaced by user's nickname'</comment>
</data>
<data name="ActivelyMatchingSomeConfirmationsFailed" xml:space="preserve">
<value>Einige Bestätigungen sind fehlgeschlagen. Lediglich {0} von {1} Transaktionen wurden erfolgreich versendet.</value>
<comment>{0} will be replaced by amount of the trade offers that succeeded (number), {1} will be replaced by amount of the trade offers that were supposed to be sent in total (number)</comment>
</data>
</root>

View File

@@ -0,0 +1,69 @@
<?xml version="1.0" encoding="utf-8"?>
<root>
<xsd:schema xmlns:xsd="http://www.w3.org/2001/XMLSchema" xmlns:msdata="urn:schemas-microsoft-com:xml-msdata" xmlns="" id="root">
<xsd:import namespace="http://www.w3.org/XML/1998/namespace"/>
<xsd:element name="root" msdata:IsDataSet="true">
<xsd:complexType>
<xsd:choice maxOccurs="unbounded">
<xsd:element name="metadata">
<xsd:complexType>
<xsd:sequence>
<xsd:element name="value" type="xsd:string" minOccurs="0"/>
</xsd:sequence>
<xsd:attribute name="name" use="required" type="xsd:string"/>
<xsd:attribute name="type" type="xsd:string"/>
<xsd:attribute name="mimetype" type="xsd:string"/>
<xsd:attribute ref="xml:space"/>
</xsd:complexType>
</xsd:element>
<xsd:element name="assembly">
<xsd:complexType>
<xsd:attribute name="alias" type="xsd:string"/>
<xsd:attribute name="name" type="xsd:string"/>
</xsd:complexType>
</xsd:element>
<xsd:element name="data">
<xsd:complexType>
<xsd:sequence>
<xsd:element name="value" type="xsd:string" minOccurs="0" msdata:Ordinal="1"/>
<xsd:element name="comment" type="xsd:string" minOccurs="0" msdata:Ordinal="2"/>
</xsd:sequence>
<xsd:attribute name="name" type="xsd:string" use="required" msdata:Ordinal="1"/>
<xsd:attribute name="type" type="xsd:string" msdata:Ordinal="3"/>
<xsd:attribute name="mimetype" type="xsd:string" msdata:Ordinal="4"/>
<xsd:attribute ref="xml:space"/>
</xsd:complexType>
</xsd:element>
<xsd:element name="resheader">
<xsd:complexType>
<xsd:sequence>
<xsd:element name="value" type="xsd:string" minOccurs="0" msdata:Ordinal="1"/>
</xsd:sequence>
<xsd:attribute name="name" type="xsd:string" use="required"/>
</xsd:complexType>
</xsd:element>
</xsd:choice>
</xsd:complexType>
</xsd:element>
</xsd:schema>
<resheader name="resmimetype">
<value>text/microsoft-resx</value>
</resheader>
<resheader name="version">
<value>2.0</value>
</resheader>
<resheader name="reader">
<value>System.Resources.ResXResourceReader, System.Windows.Forms, Version=4.0.0.0, Culture=neutral,
PublicKeyToken=b77a5c561934e089
</value>
</resheader>
<resheader name="writer">
<value>System.Resources.ResXResourceWriter, System.Windows.Forms, Version=4.0.0.0, Culture=neutral,
PublicKeyToken=b77a5c561934e089
</value>
</resheader>
<data name="ActivelyMatchingItemsRound" xml:space="preserve">
<value>Ο τελικός αριθμός συνόλων που έχουν ταιριάξει είναι {0}, αυτόν τον γύρο.</value>
<comment>{0} will be replaced by number of sets traded</comment>
</data>
</root>

View File

@@ -0,0 +1,85 @@
<?xml version="1.0" encoding="utf-8"?>
<root>
<xsd:schema xmlns:xsd="http://www.w3.org/2001/XMLSchema" xmlns:msdata="urn:schemas-microsoft-com:xml-msdata" xmlns="" id="root">
<xsd:import namespace="http://www.w3.org/XML/1998/namespace"/>
<xsd:element name="root" msdata:IsDataSet="true">
<xsd:complexType>
<xsd:choice maxOccurs="unbounded">
<xsd:element name="metadata">
<xsd:complexType>
<xsd:sequence>
<xsd:element name="value" type="xsd:string" minOccurs="0"/>
</xsd:sequence>
<xsd:attribute name="name" use="required" type="xsd:string"/>
<xsd:attribute name="type" type="xsd:string"/>
<xsd:attribute name="mimetype" type="xsd:string"/>
<xsd:attribute ref="xml:space"/>
</xsd:complexType>
</xsd:element>
<xsd:element name="assembly">
<xsd:complexType>
<xsd:attribute name="alias" type="xsd:string"/>
<xsd:attribute name="name" type="xsd:string"/>
</xsd:complexType>
</xsd:element>
<xsd:element name="data">
<xsd:complexType>
<xsd:sequence>
<xsd:element name="value" type="xsd:string" minOccurs="0" msdata:Ordinal="1"/>
<xsd:element name="comment" type="xsd:string" minOccurs="0" msdata:Ordinal="2"/>
</xsd:sequence>
<xsd:attribute name="name" type="xsd:string" use="required" msdata:Ordinal="1"/>
<xsd:attribute name="type" type="xsd:string" msdata:Ordinal="3"/>
<xsd:attribute name="mimetype" type="xsd:string" msdata:Ordinal="4"/>
<xsd:attribute ref="xml:space"/>
</xsd:complexType>
</xsd:element>
<xsd:element name="resheader">
<xsd:complexType>
<xsd:sequence>
<xsd:element name="value" type="xsd:string" minOccurs="0" msdata:Ordinal="1"/>
</xsd:sequence>
<xsd:attribute name="name" type="xsd:string" use="required"/>
</xsd:complexType>
</xsd:element>
</xsd:choice>
</xsd:complexType>
</xsd:element>
</xsd:schema>
<resheader name="resmimetype">
<value>text/microsoft-resx</value>
</resheader>
<resheader name="version">
<value>2.0</value>
</resheader>
<resheader name="reader">
<value>System.Resources.ResXResourceReader, System.Windows.Forms, Version=4.0.0.0, Culture=neutral,
PublicKeyToken=b77a5c561934e089
</value>
</resheader>
<resheader name="writer">
<value>System.Resources.ResXResourceWriter, System.Windows.Forms, Version=4.0.0.0, Culture=neutral,
PublicKeyToken=b77a5c561934e089
</value>
</resheader>
<data name="ActivelyMatchingItemsRound" xml:space="preserve">
<value>Se emparejaron {0} sets durante esta ronda.</value>
<comment>{0} will be replaced by number of sets traded</comment>
</data>
<data name="ListingAnnouncing" xml:space="preserve">
<value>Anunciando en el listado a {0} ({1}) con un inventario compuesto por {2} artículos en total.</value>
<comment>{0} will be replaced by steam ID (number), {1} will be replaced by user's nickname, {2} will be replaced with number of items in the inventory</comment>
</data>
<data name="MatchingFound" xml:space="preserve">
<value>Se emparejó un total de {0} artículos con el bot {1} ({2}), enviando oferta de intercambio...</value>
<comment>{0} will be replaced by number of items matched, {1} will be replaced by steam ID (number), {2} will be replaced by user's nickname</comment>
</data>
<data name="TradeOfferFailed" xml:space="preserve">
<value>Error al enviar la oferta de intercambio al bot {0} ({1}), continuando...</value>
<comment>{0} will be replaced by steam ID (number), {1} will be replaced by user's nickname'</comment>
</data>
<data name="ActivelyMatchingSomeConfirmationsFailed" xml:space="preserve">
<value>Algunas confirmaciones han fallado, aproximadamente {0} de {1} intercambios fueron enviados exitosamente.</value>
<comment>{0} will be replaced by amount of the trade offers that succeeded (number), {1} will be replaced by amount of the trade offers that were supposed to be sent in total (number)</comment>
</data>
</root>

View File

@@ -0,0 +1,81 @@
<?xml version="1.0" encoding="utf-8"?>
<root>
<xsd:schema xmlns:xsd="http://www.w3.org/2001/XMLSchema" xmlns:msdata="urn:schemas-microsoft-com:xml-msdata" xmlns="" id="root">
<xsd:import namespace="http://www.w3.org/XML/1998/namespace"/>
<xsd:element name="root" msdata:IsDataSet="true">
<xsd:complexType>
<xsd:choice maxOccurs="unbounded">
<xsd:element name="metadata">
<xsd:complexType>
<xsd:sequence>
<xsd:element name="value" type="xsd:string" minOccurs="0"/>
</xsd:sequence>
<xsd:attribute name="name" use="required" type="xsd:string"/>
<xsd:attribute name="type" type="xsd:string"/>
<xsd:attribute name="mimetype" type="xsd:string"/>
<xsd:attribute ref="xml:space"/>
</xsd:complexType>
</xsd:element>
<xsd:element name="assembly">
<xsd:complexType>
<xsd:attribute name="alias" type="xsd:string"/>
<xsd:attribute name="name" type="xsd:string"/>
</xsd:complexType>
</xsd:element>
<xsd:element name="data">
<xsd:complexType>
<xsd:sequence>
<xsd:element name="value" type="xsd:string" minOccurs="0" msdata:Ordinal="1"/>
<xsd:element name="comment" type="xsd:string" minOccurs="0" msdata:Ordinal="2"/>
</xsd:sequence>
<xsd:attribute name="name" type="xsd:string" use="required" msdata:Ordinal="1"/>
<xsd:attribute name="type" type="xsd:string" msdata:Ordinal="3"/>
<xsd:attribute name="mimetype" type="xsd:string" msdata:Ordinal="4"/>
<xsd:attribute ref="xml:space"/>
</xsd:complexType>
</xsd:element>
<xsd:element name="resheader">
<xsd:complexType>
<xsd:sequence>
<xsd:element name="value" type="xsd:string" minOccurs="0" msdata:Ordinal="1"/>
</xsd:sequence>
<xsd:attribute name="name" type="xsd:string" use="required"/>
</xsd:complexType>
</xsd:element>
</xsd:choice>
</xsd:complexType>
</xsd:element>
</xsd:schema>
<resheader name="resmimetype">
<value>text/microsoft-resx</value>
</resheader>
<resheader name="version">
<value>2.0</value>
</resheader>
<resheader name="reader">
<value>System.Resources.ResXResourceReader, System.Windows.Forms, Version=4.0.0.0, Culture=neutral,
PublicKeyToken=b77a5c561934e089
</value>
</resheader>
<resheader name="writer">
<value>System.Resources.ResXResourceWriter, System.Windows.Forms, Version=4.0.0.0, Culture=neutral,
PublicKeyToken=b77a5c561934e089
</value>
</resheader>
<data name="ActivelyMatchingItemsRound" xml:space="preserve">
<value>در این دور جمعاً {0} ست مطابقت داده شد.</value>
<comment>{0} will be replaced by number of sets traded</comment>
</data>
<data name="MatchingFound" xml:space="preserve">
<value>در مجموع {0} مورد با ربات {1} ({2}) مطابقت داده شد، درحال ارسال ترید...</value>
<comment>{0} will be replaced by number of items matched, {1} will be replaced by steam ID (number), {2} will be replaced by user's nickname</comment>
</data>
<data name="TradeOfferFailed" xml:space="preserve">
<value>ارسال ترید به ربات {0} ({1}) شکست خورد، درحال ادامه دادن...</value>
<comment>{0} will be replaced by steam ID (number), {1} will be replaced by user's nickname'</comment>
</data>
<data name="ActivelyMatchingSomeConfirmationsFailed" xml:space="preserve">
<value>بعضی از تاییدیه ها شکست خورد، تقریبا {0} تا از {1} ترید با موفقیت ارسال شدند.</value>
<comment>{0} will be replaced by amount of the trade offers that succeeded (number), {1} will be replaced by amount of the trade offers that were supposed to be sent in total (number)</comment>
</data>
</root>

View File

@@ -0,0 +1,85 @@
<?xml version="1.0" encoding="utf-8"?>
<root>
<xsd:schema xmlns:xsd="http://www.w3.org/2001/XMLSchema" xmlns:msdata="urn:schemas-microsoft-com:xml-msdata" xmlns="" id="root">
<xsd:import namespace="http://www.w3.org/XML/1998/namespace"/>
<xsd:element name="root" msdata:IsDataSet="true">
<xsd:complexType>
<xsd:choice maxOccurs="unbounded">
<xsd:element name="metadata">
<xsd:complexType>
<xsd:sequence>
<xsd:element name="value" type="xsd:string" minOccurs="0"/>
</xsd:sequence>
<xsd:attribute name="name" use="required" type="xsd:string"/>
<xsd:attribute name="type" type="xsd:string"/>
<xsd:attribute name="mimetype" type="xsd:string"/>
<xsd:attribute ref="xml:space"/>
</xsd:complexType>
</xsd:element>
<xsd:element name="assembly">
<xsd:complexType>
<xsd:attribute name="alias" type="xsd:string"/>
<xsd:attribute name="name" type="xsd:string"/>
</xsd:complexType>
</xsd:element>
<xsd:element name="data">
<xsd:complexType>
<xsd:sequence>
<xsd:element name="value" type="xsd:string" minOccurs="0" msdata:Ordinal="1"/>
<xsd:element name="comment" type="xsd:string" minOccurs="0" msdata:Ordinal="2"/>
</xsd:sequence>
<xsd:attribute name="name" type="xsd:string" use="required" msdata:Ordinal="1"/>
<xsd:attribute name="type" type="xsd:string" msdata:Ordinal="3"/>
<xsd:attribute name="mimetype" type="xsd:string" msdata:Ordinal="4"/>
<xsd:attribute ref="xml:space"/>
</xsd:complexType>
</xsd:element>
<xsd:element name="resheader">
<xsd:complexType>
<xsd:sequence>
<xsd:element name="value" type="xsd:string" minOccurs="0" msdata:Ordinal="1"/>
</xsd:sequence>
<xsd:attribute name="name" type="xsd:string" use="required"/>
</xsd:complexType>
</xsd:element>
</xsd:choice>
</xsd:complexType>
</xsd:element>
</xsd:schema>
<resheader name="resmimetype">
<value>text/microsoft-resx</value>
</resheader>
<resheader name="version">
<value>2.0</value>
</resheader>
<resheader name="reader">
<value>System.Resources.ResXResourceReader, System.Windows.Forms, Version=4.0.0.0, Culture=neutral,
PublicKeyToken=b77a5c561934e089
</value>
</resheader>
<resheader name="writer">
<value>System.Resources.ResXResourceWriter, System.Windows.Forms, Version=4.0.0.0, Culture=neutral,
PublicKeyToken=b77a5c561934e089
</value>
</resheader>
<data name="ActivelyMatchingItemsRound" xml:space="preserve">
<value>Vertailtiin yhteensä {0} settiä tällä kierroksella.</value>
<comment>{0} will be replaced by number of sets traded</comment>
</data>
<data name="ListingAnnouncing" xml:space="preserve">
<value>Ilmoitetaan {0} ({1}), jonka inventoryssa on yhteensä {2} kohdetta listattuna...</value>
<comment>{0} will be replaced by steam ID (number), {1} will be replaced by user's nickname, {2} will be replaced with number of items in the inventory</comment>
</data>
<data name="MatchingFound" xml:space="preserve">
<value>Vertailtiin yhteensä {0} kohdetta botin {1} ({2}) kanssa, lähetetään vaihtotarjousta...</value>
<comment>{0} will be replaced by number of items matched, {1} will be replaced by steam ID (number), {2} will be replaced by user's nickname</comment>
</data>
<data name="TradeOfferFailed" xml:space="preserve">
<value>Vaihtotarjouksen lähettäminen botille {0} ({1}) epäonnistui, jatketaan...</value>
<comment>{0} will be replaced by steam ID (number), {1} will be replaced by user's nickname'</comment>
</data>
<data name="ActivelyMatchingSomeConfirmationsFailed" xml:space="preserve">
<value>Jotkut vahvistukset epäonnistuivat, noin {0}/{1} kaupasta lähetettiin onnistuneesti.</value>
<comment>{0} will be replaced by amount of the trade offers that succeeded (number), {1} will be replaced by amount of the trade offers that were supposed to be sent in total (number)</comment>
</data>
</root>

View File

@@ -0,0 +1,73 @@
<?xml version="1.0" encoding="utf-8"?>
<root>
<xsd:schema xmlns:xsd="http://www.w3.org/2001/XMLSchema" xmlns:msdata="urn:schemas-microsoft-com:xml-msdata" xmlns="" id="root">
<xsd:import namespace="http://www.w3.org/XML/1998/namespace"/>
<xsd:element name="root" msdata:IsDataSet="true">
<xsd:complexType>
<xsd:choice maxOccurs="unbounded">
<xsd:element name="metadata">
<xsd:complexType>
<xsd:sequence>
<xsd:element name="value" type="xsd:string" minOccurs="0"/>
</xsd:sequence>
<xsd:attribute name="name" use="required" type="xsd:string"/>
<xsd:attribute name="type" type="xsd:string"/>
<xsd:attribute name="mimetype" type="xsd:string"/>
<xsd:attribute ref="xml:space"/>
</xsd:complexType>
</xsd:element>
<xsd:element name="assembly">
<xsd:complexType>
<xsd:attribute name="alias" type="xsd:string"/>
<xsd:attribute name="name" type="xsd:string"/>
</xsd:complexType>
</xsd:element>
<xsd:element name="data">
<xsd:complexType>
<xsd:sequence>
<xsd:element name="value" type="xsd:string" minOccurs="0" msdata:Ordinal="1"/>
<xsd:element name="comment" type="xsd:string" minOccurs="0" msdata:Ordinal="2"/>
</xsd:sequence>
<xsd:attribute name="name" type="xsd:string" use="required" msdata:Ordinal="1"/>
<xsd:attribute name="type" type="xsd:string" msdata:Ordinal="3"/>
<xsd:attribute name="mimetype" type="xsd:string" msdata:Ordinal="4"/>
<xsd:attribute ref="xml:space"/>
</xsd:complexType>
</xsd:element>
<xsd:element name="resheader">
<xsd:complexType>
<xsd:sequence>
<xsd:element name="value" type="xsd:string" minOccurs="0" msdata:Ordinal="1"/>
</xsd:sequence>
<xsd:attribute name="name" type="xsd:string" use="required"/>
</xsd:complexType>
</xsd:element>
</xsd:choice>
</xsd:complexType>
</xsd:element>
</xsd:schema>
<resheader name="resmimetype">
<value>text/microsoft-resx</value>
</resheader>
<resheader name="version">
<value>2.0</value>
</resheader>
<resheader name="reader">
<value>System.Resources.ResXResourceReader, System.Windows.Forms, Version=4.0.0.0, Culture=neutral,
PublicKeyToken=b77a5c561934e089
</value>
</resheader>
<resheader name="writer">
<value>System.Resources.ResXResourceWriter, System.Windows.Forms, Version=4.0.0.0, Culture=neutral,
PublicKeyToken=b77a5c561934e089
</value>
</resheader>
<data name="ActivelyMatchingItemsRound" xml:space="preserve">
<value>{0} sets ont été matché pendant ce round.</value>
<comment>{0} will be replaced by number of sets traded</comment>
</data>
<data name="ActivelyMatchingSomeConfirmationsFailed" xml:space="preserve">
<value>Certaines confirmations ont échoué, environ {0} sur les transactions {1} ont été envoyées avec succès.</value>
<comment>{0} will be replaced by amount of the trade offers that succeeded (number), {1} will be replaced by amount of the trade offers that were supposed to be sent in total (number)</comment>
</data>
</root>

View File

@@ -0,0 +1,85 @@
<?xml version="1.0" encoding="utf-8"?>
<root>
<xsd:schema xmlns:xsd="http://www.w3.org/2001/XMLSchema" xmlns:msdata="urn:schemas-microsoft-com:xml-msdata" xmlns="" id="root">
<xsd:import namespace="http://www.w3.org/XML/1998/namespace"/>
<xsd:element name="root" msdata:IsDataSet="true">
<xsd:complexType>
<xsd:choice maxOccurs="unbounded">
<xsd:element name="metadata">
<xsd:complexType>
<xsd:sequence>
<xsd:element name="value" type="xsd:string" minOccurs="0"/>
</xsd:sequence>
<xsd:attribute name="name" use="required" type="xsd:string"/>
<xsd:attribute name="type" type="xsd:string"/>
<xsd:attribute name="mimetype" type="xsd:string"/>
<xsd:attribute ref="xml:space"/>
</xsd:complexType>
</xsd:element>
<xsd:element name="assembly">
<xsd:complexType>
<xsd:attribute name="alias" type="xsd:string"/>
<xsd:attribute name="name" type="xsd:string"/>
</xsd:complexType>
</xsd:element>
<xsd:element name="data">
<xsd:complexType>
<xsd:sequence>
<xsd:element name="value" type="xsd:string" minOccurs="0" msdata:Ordinal="1"/>
<xsd:element name="comment" type="xsd:string" minOccurs="0" msdata:Ordinal="2"/>
</xsd:sequence>
<xsd:attribute name="name" type="xsd:string" use="required" msdata:Ordinal="1"/>
<xsd:attribute name="type" type="xsd:string" msdata:Ordinal="3"/>
<xsd:attribute name="mimetype" type="xsd:string" msdata:Ordinal="4"/>
<xsd:attribute ref="xml:space"/>
</xsd:complexType>
</xsd:element>
<xsd:element name="resheader">
<xsd:complexType>
<xsd:sequence>
<xsd:element name="value" type="xsd:string" minOccurs="0" msdata:Ordinal="1"/>
</xsd:sequence>
<xsd:attribute name="name" type="xsd:string" use="required"/>
</xsd:complexType>
</xsd:element>
</xsd:choice>
</xsd:complexType>
</xsd:element>
</xsd:schema>
<resheader name="resmimetype">
<value>text/microsoft-resx</value>
</resheader>
<resheader name="version">
<value>2.0</value>
</resheader>
<resheader name="reader">
<value>System.Resources.ResXResourceReader, System.Windows.Forms, Version=4.0.0.0, Culture=neutral,
PublicKeyToken=b77a5c561934e089
</value>
</resheader>
<resheader name="writer">
<value>System.Resources.ResXResourceWriter, System.Windows.Forms, Version=4.0.0.0, Culture=neutral,
PublicKeyToken=b77a5c561934e089
</value>
</resheader>
<data name="ActivelyMatchingItemsRound" xml:space="preserve">
<value>הותאמו בסך הכל {0} ערכות בסיבוב זה.</value>
<comment>{0} will be replaced by number of sets traded</comment>
</data>
<data name="ListingAnnouncing" xml:space="preserve">
<value>מכריז על {0} ({1}) עם מלאי מורכב מ-{2} פריטים בסך הכל ברישום...</value>
<comment>{0} will be replaced by steam ID (number), {1} will be replaced by user's nickname, {2} will be replaced with number of items in the inventory</comment>
</data>
<data name="MatchingFound" xml:space="preserve">
<value>התאים סך של {0} פריטים לבוט {1} ({2}), שולח הצעת סחר...</value>
<comment>{0} will be replaced by number of items matched, {1} will be replaced by steam ID (number), {2} will be replaced by user's nickname</comment>
</data>
<data name="TradeOfferFailed" xml:space="preserve">
<value>נכשל שליחת הצעת סחר לבוט {0} ({1}), ממשיך הלאה...</value>
<comment>{0} will be replaced by steam ID (number), {1} will be replaced by user's nickname'</comment>
</data>
<data name="ActivelyMatchingSomeConfirmationsFailed" xml:space="preserve">
<value>חלק מהאישורים נכשלו, בערך {0} מתוך {1} עסקאות נשלחו בהצלחה.</value>
<comment>{0} will be replaced by amount of the trade offers that succeeded (number), {1} will be replaced by amount of the trade offers that were supposed to be sent in total (number)</comment>
</data>
</root>

View File

@@ -0,0 +1,69 @@
<?xml version="1.0" encoding="utf-8"?>
<root>
<xsd:schema xmlns:xsd="http://www.w3.org/2001/XMLSchema" xmlns:msdata="urn:schemas-microsoft-com:xml-msdata" xmlns="" id="root">
<xsd:import namespace="http://www.w3.org/XML/1998/namespace"/>
<xsd:element name="root" msdata:IsDataSet="true">
<xsd:complexType>
<xsd:choice maxOccurs="unbounded">
<xsd:element name="metadata">
<xsd:complexType>
<xsd:sequence>
<xsd:element name="value" type="xsd:string" minOccurs="0"/>
</xsd:sequence>
<xsd:attribute name="name" use="required" type="xsd:string"/>
<xsd:attribute name="type" type="xsd:string"/>
<xsd:attribute name="mimetype" type="xsd:string"/>
<xsd:attribute ref="xml:space"/>
</xsd:complexType>
</xsd:element>
<xsd:element name="assembly">
<xsd:complexType>
<xsd:attribute name="alias" type="xsd:string"/>
<xsd:attribute name="name" type="xsd:string"/>
</xsd:complexType>
</xsd:element>
<xsd:element name="data">
<xsd:complexType>
<xsd:sequence>
<xsd:element name="value" type="xsd:string" minOccurs="0" msdata:Ordinal="1"/>
<xsd:element name="comment" type="xsd:string" minOccurs="0" msdata:Ordinal="2"/>
</xsd:sequence>
<xsd:attribute name="name" type="xsd:string" use="required" msdata:Ordinal="1"/>
<xsd:attribute name="type" type="xsd:string" msdata:Ordinal="3"/>
<xsd:attribute name="mimetype" type="xsd:string" msdata:Ordinal="4"/>
<xsd:attribute ref="xml:space"/>
</xsd:complexType>
</xsd:element>
<xsd:element name="resheader">
<xsd:complexType>
<xsd:sequence>
<xsd:element name="value" type="xsd:string" minOccurs="0" msdata:Ordinal="1"/>
</xsd:sequence>
<xsd:attribute name="name" type="xsd:string" use="required"/>
</xsd:complexType>
</xsd:element>
</xsd:choice>
</xsd:complexType>
</xsd:element>
</xsd:schema>
<resheader name="resmimetype">
<value>text/microsoft-resx</value>
</resheader>
<resheader name="version">
<value>2.0</value>
</resheader>
<resheader name="reader">
<value>System.Resources.ResXResourceReader, System.Windows.Forms, Version=4.0.0.0, Culture=neutral,
PublicKeyToken=b77a5c561934e089
</value>
</resheader>
<resheader name="writer">
<value>System.Resources.ResXResourceWriter, System.Windows.Forms, Version=4.0.0.0, Culture=neutral,
PublicKeyToken=b77a5c561934e089
</value>
</resheader>
<data name="ActivelyMatchingItemsRound" xml:space="preserve">
<value>Összesen {0} szett cserélve.</value>
<comment>{0} will be replaced by number of sets traded</comment>
</data>
</root>

View File

@@ -0,0 +1,65 @@
<?xml version="1.0" encoding="utf-8"?>
<root>
<xsd:schema xmlns:xsd="http://www.w3.org/2001/XMLSchema" xmlns:msdata="urn:schemas-microsoft-com:xml-msdata" xmlns="" id="root">
<xsd:import namespace="http://www.w3.org/XML/1998/namespace"/>
<xsd:element name="root" msdata:IsDataSet="true">
<xsd:complexType>
<xsd:choice maxOccurs="unbounded">
<xsd:element name="metadata">
<xsd:complexType>
<xsd:sequence>
<xsd:element name="value" type="xsd:string" minOccurs="0"/>
</xsd:sequence>
<xsd:attribute name="name" use="required" type="xsd:string"/>
<xsd:attribute name="type" type="xsd:string"/>
<xsd:attribute name="mimetype" type="xsd:string"/>
<xsd:attribute ref="xml:space"/>
</xsd:complexType>
</xsd:element>
<xsd:element name="assembly">
<xsd:complexType>
<xsd:attribute name="alias" type="xsd:string"/>
<xsd:attribute name="name" type="xsd:string"/>
</xsd:complexType>
</xsd:element>
<xsd:element name="data">
<xsd:complexType>
<xsd:sequence>
<xsd:element name="value" type="xsd:string" minOccurs="0" msdata:Ordinal="1"/>
<xsd:element name="comment" type="xsd:string" minOccurs="0" msdata:Ordinal="2"/>
</xsd:sequence>
<xsd:attribute name="name" type="xsd:string" use="required" msdata:Ordinal="1"/>
<xsd:attribute name="type" type="xsd:string" msdata:Ordinal="3"/>
<xsd:attribute name="mimetype" type="xsd:string" msdata:Ordinal="4"/>
<xsd:attribute ref="xml:space"/>
</xsd:complexType>
</xsd:element>
<xsd:element name="resheader">
<xsd:complexType>
<xsd:sequence>
<xsd:element name="value" type="xsd:string" minOccurs="0" msdata:Ordinal="1"/>
</xsd:sequence>
<xsd:attribute name="name" type="xsd:string" use="required"/>
</xsd:complexType>
</xsd:element>
</xsd:choice>
</xsd:complexType>
</xsd:element>
</xsd:schema>
<resheader name="resmimetype">
<value>text/microsoft-resx</value>
</resheader>
<resheader name="version">
<value>2.0</value>
</resheader>
<resheader name="reader">
<value>System.Resources.ResXResourceReader, System.Windows.Forms, Version=4.0.0.0, Culture=neutral,
PublicKeyToken=b77a5c561934e089
</value>
</resheader>
<resheader name="writer">
<value>System.Resources.ResXResourceWriter, System.Windows.Forms, Version=4.0.0.0, Culture=neutral,
PublicKeyToken=b77a5c561934e089
</value>
</resheader>
</root>

View File

@@ -0,0 +1,81 @@
<?xml version="1.0" encoding="utf-8"?>
<root>
<xsd:schema xmlns:xsd="http://www.w3.org/2001/XMLSchema" xmlns:msdata="urn:schemas-microsoft-com:xml-msdata" xmlns="" id="root">
<xsd:import namespace="http://www.w3.org/XML/1998/namespace"/>
<xsd:element name="root" msdata:IsDataSet="true">
<xsd:complexType>
<xsd:choice maxOccurs="unbounded">
<xsd:element name="metadata">
<xsd:complexType>
<xsd:sequence>
<xsd:element name="value" type="xsd:string" minOccurs="0"/>
</xsd:sequence>
<xsd:attribute name="name" use="required" type="xsd:string"/>
<xsd:attribute name="type" type="xsd:string"/>
<xsd:attribute name="mimetype" type="xsd:string"/>
<xsd:attribute ref="xml:space"/>
</xsd:complexType>
</xsd:element>
<xsd:element name="assembly">
<xsd:complexType>
<xsd:attribute name="alias" type="xsd:string"/>
<xsd:attribute name="name" type="xsd:string"/>
</xsd:complexType>
</xsd:element>
<xsd:element name="data">
<xsd:complexType>
<xsd:sequence>
<xsd:element name="value" type="xsd:string" minOccurs="0" msdata:Ordinal="1"/>
<xsd:element name="comment" type="xsd:string" minOccurs="0" msdata:Ordinal="2"/>
</xsd:sequence>
<xsd:attribute name="name" type="xsd:string" use="required" msdata:Ordinal="1"/>
<xsd:attribute name="type" type="xsd:string" msdata:Ordinal="3"/>
<xsd:attribute name="mimetype" type="xsd:string" msdata:Ordinal="4"/>
<xsd:attribute ref="xml:space"/>
</xsd:complexType>
</xsd:element>
<xsd:element name="resheader">
<xsd:complexType>
<xsd:sequence>
<xsd:element name="value" type="xsd:string" minOccurs="0" msdata:Ordinal="1"/>
</xsd:sequence>
<xsd:attribute name="name" type="xsd:string" use="required"/>
</xsd:complexType>
</xsd:element>
</xsd:choice>
</xsd:complexType>
</xsd:element>
</xsd:schema>
<resheader name="resmimetype">
<value>text/microsoft-resx</value>
</resheader>
<resheader name="version">
<value>2.0</value>
</resheader>
<resheader name="reader">
<value>System.Resources.ResXResourceReader, System.Windows.Forms, Version=4.0.0.0, Culture=neutral,
PublicKeyToken=b77a5c561934e089
</value>
</resheader>
<resheader name="writer">
<value>System.Resources.ResXResourceWriter, System.Windows.Forms, Version=4.0.0.0, Culture=neutral,
PublicKeyToken=b77a5c561934e089
</value>
</resheader>
<data name="ActivelyMatchingItemsRound" xml:space="preserve">
<value>Abbinati un totale di {0} set questo round.</value>
<comment>{0} will be replaced by number of sets traded</comment>
</data>
<data name="MatchingFound" xml:space="preserve">
<value>Abbinato un totale di {0} elementi tramite bot {1} ({2}), inviando un'offerta commerciale...</value>
<comment>{0} will be replaced by number of items matched, {1} will be replaced by steam ID (number), {2} will be replaced by user's nickname</comment>
</data>
<data name="TradeOfferFailed" xml:space="preserve">
<value>Impossibile inviare un'offerta di scambio al bot {0} ({1}), proseguendo...</value>
<comment>{0} will be replaced by steam ID (number), {1} will be replaced by user's nickname'</comment>
</data>
<data name="ActivelyMatchingSomeConfirmationsFailed" xml:space="preserve">
<value>Alcune conferme sono fallite, circa {0} su {1} sono state inviate con successo.</value>
<comment>{0} will be replaced by amount of the trade offers that succeeded (number), {1} will be replaced by amount of the trade offers that were supposed to be sent in total (number)</comment>
</data>
</root>

View File

@@ -0,0 +1,69 @@
<?xml version="1.0" encoding="utf-8"?>
<root>
<xsd:schema xmlns:xsd="http://www.w3.org/2001/XMLSchema" xmlns:msdata="urn:schemas-microsoft-com:xml-msdata" xmlns="" id="root">
<xsd:import namespace="http://www.w3.org/XML/1998/namespace"/>
<xsd:element name="root" msdata:IsDataSet="true">
<xsd:complexType>
<xsd:choice maxOccurs="unbounded">
<xsd:element name="metadata">
<xsd:complexType>
<xsd:sequence>
<xsd:element name="value" type="xsd:string" minOccurs="0"/>
</xsd:sequence>
<xsd:attribute name="name" use="required" type="xsd:string"/>
<xsd:attribute name="type" type="xsd:string"/>
<xsd:attribute name="mimetype" type="xsd:string"/>
<xsd:attribute ref="xml:space"/>
</xsd:complexType>
</xsd:element>
<xsd:element name="assembly">
<xsd:complexType>
<xsd:attribute name="alias" type="xsd:string"/>
<xsd:attribute name="name" type="xsd:string"/>
</xsd:complexType>
</xsd:element>
<xsd:element name="data">
<xsd:complexType>
<xsd:sequence>
<xsd:element name="value" type="xsd:string" minOccurs="0" msdata:Ordinal="1"/>
<xsd:element name="comment" type="xsd:string" minOccurs="0" msdata:Ordinal="2"/>
</xsd:sequence>
<xsd:attribute name="name" type="xsd:string" use="required" msdata:Ordinal="1"/>
<xsd:attribute name="type" type="xsd:string" msdata:Ordinal="3"/>
<xsd:attribute name="mimetype" type="xsd:string" msdata:Ordinal="4"/>
<xsd:attribute ref="xml:space"/>
</xsd:complexType>
</xsd:element>
<xsd:element name="resheader">
<xsd:complexType>
<xsd:sequence>
<xsd:element name="value" type="xsd:string" minOccurs="0" msdata:Ordinal="1"/>
</xsd:sequence>
<xsd:attribute name="name" type="xsd:string" use="required"/>
</xsd:complexType>
</xsd:element>
</xsd:choice>
</xsd:complexType>
</xsd:element>
</xsd:schema>
<resheader name="resmimetype">
<value>text/microsoft-resx</value>
</resheader>
<resheader name="version">
<value>2.0</value>
</resheader>
<resheader name="reader">
<value>System.Resources.ResXResourceReader, System.Windows.Forms, Version=4.0.0.0, Culture=neutral,
PublicKeyToken=b77a5c561934e089
</value>
</resheader>
<resheader name="writer">
<value>System.Resources.ResXResourceWriter, System.Windows.Forms, Version=4.0.0.0, Culture=neutral,
PublicKeyToken=b77a5c561934e089
</value>
</resheader>
<data name="ActivelyMatchingItemsRound" xml:space="preserve">
<value>すべてのうち、{0} セットにマッチしたためこのラウンドを終了します。</value>
<comment>{0} will be replaced by number of sets traded</comment>
</data>
</root>

View File

@@ -0,0 +1,65 @@
<?xml version="1.0" encoding="utf-8"?>
<root>
<xsd:schema xmlns:xsd="http://www.w3.org/2001/XMLSchema" xmlns:msdata="urn:schemas-microsoft-com:xml-msdata" xmlns="" id="root">
<xsd:import namespace="http://www.w3.org/XML/1998/namespace"/>
<xsd:element name="root" msdata:IsDataSet="true">
<xsd:complexType>
<xsd:choice maxOccurs="unbounded">
<xsd:element name="metadata">
<xsd:complexType>
<xsd:sequence>
<xsd:element name="value" type="xsd:string" minOccurs="0"/>
</xsd:sequence>
<xsd:attribute name="name" use="required" type="xsd:string"/>
<xsd:attribute name="type" type="xsd:string"/>
<xsd:attribute name="mimetype" type="xsd:string"/>
<xsd:attribute ref="xml:space"/>
</xsd:complexType>
</xsd:element>
<xsd:element name="assembly">
<xsd:complexType>
<xsd:attribute name="alias" type="xsd:string"/>
<xsd:attribute name="name" type="xsd:string"/>
</xsd:complexType>
</xsd:element>
<xsd:element name="data">
<xsd:complexType>
<xsd:sequence>
<xsd:element name="value" type="xsd:string" minOccurs="0" msdata:Ordinal="1"/>
<xsd:element name="comment" type="xsd:string" minOccurs="0" msdata:Ordinal="2"/>
</xsd:sequence>
<xsd:attribute name="name" type="xsd:string" use="required" msdata:Ordinal="1"/>
<xsd:attribute name="type" type="xsd:string" msdata:Ordinal="3"/>
<xsd:attribute name="mimetype" type="xsd:string" msdata:Ordinal="4"/>
<xsd:attribute ref="xml:space"/>
</xsd:complexType>
</xsd:element>
<xsd:element name="resheader">
<xsd:complexType>
<xsd:sequence>
<xsd:element name="value" type="xsd:string" minOccurs="0" msdata:Ordinal="1"/>
</xsd:sequence>
<xsd:attribute name="name" type="xsd:string" use="required"/>
</xsd:complexType>
</xsd:element>
</xsd:choice>
</xsd:complexType>
</xsd:element>
</xsd:schema>
<resheader name="resmimetype">
<value>text/microsoft-resx</value>
</resheader>
<resheader name="version">
<value>2.0</value>
</resheader>
<resheader name="reader">
<value>System.Resources.ResXResourceReader, System.Windows.Forms, Version=4.0.0.0, Culture=neutral,
PublicKeyToken=b77a5c561934e089
</value>
</resheader>
<resheader name="writer">
<value>System.Resources.ResXResourceWriter, System.Windows.Forms, Version=4.0.0.0, Culture=neutral,
PublicKeyToken=b77a5c561934e089
</value>
</resheader>
</root>

View File

@@ -0,0 +1,69 @@
<?xml version="1.0" encoding="utf-8"?>
<root>
<xsd:schema xmlns:xsd="http://www.w3.org/2001/XMLSchema" xmlns:msdata="urn:schemas-microsoft-com:xml-msdata" xmlns="" id="root">
<xsd:import namespace="http://www.w3.org/XML/1998/namespace"/>
<xsd:element name="root" msdata:IsDataSet="true">
<xsd:complexType>
<xsd:choice maxOccurs="unbounded">
<xsd:element name="metadata">
<xsd:complexType>
<xsd:sequence>
<xsd:element name="value" type="xsd:string" minOccurs="0"/>
</xsd:sequence>
<xsd:attribute name="name" use="required" type="xsd:string"/>
<xsd:attribute name="type" type="xsd:string"/>
<xsd:attribute name="mimetype" type="xsd:string"/>
<xsd:attribute ref="xml:space"/>
</xsd:complexType>
</xsd:element>
<xsd:element name="assembly">
<xsd:complexType>
<xsd:attribute name="alias" type="xsd:string"/>
<xsd:attribute name="name" type="xsd:string"/>
</xsd:complexType>
</xsd:element>
<xsd:element name="data">
<xsd:complexType>
<xsd:sequence>
<xsd:element name="value" type="xsd:string" minOccurs="0" msdata:Ordinal="1"/>
<xsd:element name="comment" type="xsd:string" minOccurs="0" msdata:Ordinal="2"/>
</xsd:sequence>
<xsd:attribute name="name" type="xsd:string" use="required" msdata:Ordinal="1"/>
<xsd:attribute name="type" type="xsd:string" msdata:Ordinal="3"/>
<xsd:attribute name="mimetype" type="xsd:string" msdata:Ordinal="4"/>
<xsd:attribute ref="xml:space"/>
</xsd:complexType>
</xsd:element>
<xsd:element name="resheader">
<xsd:complexType>
<xsd:sequence>
<xsd:element name="value" type="xsd:string" minOccurs="0" msdata:Ordinal="1"/>
</xsd:sequence>
<xsd:attribute name="name" type="xsd:string" use="required"/>
</xsd:complexType>
</xsd:element>
</xsd:choice>
</xsd:complexType>
</xsd:element>
</xsd:schema>
<resheader name="resmimetype">
<value>text/microsoft-resx</value>
</resheader>
<resheader name="version">
<value>2.0</value>
</resheader>
<resheader name="reader">
<value>System.Resources.ResXResourceReader, System.Windows.Forms, Version=4.0.0.0, Culture=neutral,
PublicKeyToken=b77a5c561934e089
</value>
</resheader>
<resheader name="writer">
<value>System.Resources.ResXResourceWriter, System.Windows.Forms, Version=4.0.0.0, Culture=neutral,
PublicKeyToken=b77a5c561934e089
</value>
</resheader>
<data name="ActivelyMatchingItemsRound" xml:space="preserve">
<value>이번에 {0} 세트를 매치하였습니다.</value>
<comment>{0} will be replaced by number of sets traded</comment>
</data>
</root>

View File

@@ -0,0 +1,69 @@
<?xml version="1.0" encoding="utf-8"?>
<root>
<xsd:schema xmlns:xsd="http://www.w3.org/2001/XMLSchema" xmlns:msdata="urn:schemas-microsoft-com:xml-msdata" xmlns="" id="root">
<xsd:import namespace="http://www.w3.org/XML/1998/namespace"/>
<xsd:element name="root" msdata:IsDataSet="true">
<xsd:complexType>
<xsd:choice maxOccurs="unbounded">
<xsd:element name="metadata">
<xsd:complexType>
<xsd:sequence>
<xsd:element name="value" type="xsd:string" minOccurs="0"/>
</xsd:sequence>
<xsd:attribute name="name" use="required" type="xsd:string"/>
<xsd:attribute name="type" type="xsd:string"/>
<xsd:attribute name="mimetype" type="xsd:string"/>
<xsd:attribute ref="xml:space"/>
</xsd:complexType>
</xsd:element>
<xsd:element name="assembly">
<xsd:complexType>
<xsd:attribute name="alias" type="xsd:string"/>
<xsd:attribute name="name" type="xsd:string"/>
</xsd:complexType>
</xsd:element>
<xsd:element name="data">
<xsd:complexType>
<xsd:sequence>
<xsd:element name="value" type="xsd:string" minOccurs="0" msdata:Ordinal="1"/>
<xsd:element name="comment" type="xsd:string" minOccurs="0" msdata:Ordinal="2"/>
</xsd:sequence>
<xsd:attribute name="name" type="xsd:string" use="required" msdata:Ordinal="1"/>
<xsd:attribute name="type" type="xsd:string" msdata:Ordinal="3"/>
<xsd:attribute name="mimetype" type="xsd:string" msdata:Ordinal="4"/>
<xsd:attribute ref="xml:space"/>
</xsd:complexType>
</xsd:element>
<xsd:element name="resheader">
<xsd:complexType>
<xsd:sequence>
<xsd:element name="value" type="xsd:string" minOccurs="0" msdata:Ordinal="1"/>
</xsd:sequence>
<xsd:attribute name="name" type="xsd:string" use="required"/>
</xsd:complexType>
</xsd:element>
</xsd:choice>
</xsd:complexType>
</xsd:element>
</xsd:schema>
<resheader name="resmimetype">
<value>text/microsoft-resx</value>
</resheader>
<resheader name="version">
<value>2.0</value>
</resheader>
<resheader name="reader">
<value>System.Resources.ResXResourceReader, System.Windows.Forms, Version=4.0.0.0, Culture=neutral,
PublicKeyToken=b77a5c561934e089
</value>
</resheader>
<resheader name="writer">
<value>System.Resources.ResXResourceWriter, System.Windows.Forms, Version=4.0.0.0, Culture=neutral,
PublicKeyToken=b77a5c561934e089
</value>
</resheader>
<data name="ActivelyMatchingItemsRound" xml:space="preserve">
<value>Per šį raundą iš viso suderinta {0} rinkinių.</value>
<comment>{0} will be replaced by number of sets traded</comment>
</data>
</root>

View File

@@ -0,0 +1,85 @@
<?xml version="1.0" encoding="utf-8"?>
<root>
<xsd:schema xmlns:xsd="http://www.w3.org/2001/XMLSchema" xmlns:msdata="urn:schemas-microsoft-com:xml-msdata" xmlns="" id="root">
<xsd:import namespace="http://www.w3.org/XML/1998/namespace"/>
<xsd:element name="root" msdata:IsDataSet="true">
<xsd:complexType>
<xsd:choice maxOccurs="unbounded">
<xsd:element name="metadata">
<xsd:complexType>
<xsd:sequence>
<xsd:element name="value" type="xsd:string" minOccurs="0"/>
</xsd:sequence>
<xsd:attribute name="name" use="required" type="xsd:string"/>
<xsd:attribute name="type" type="xsd:string"/>
<xsd:attribute name="mimetype" type="xsd:string"/>
<xsd:attribute ref="xml:space"/>
</xsd:complexType>
</xsd:element>
<xsd:element name="assembly">
<xsd:complexType>
<xsd:attribute name="alias" type="xsd:string"/>
<xsd:attribute name="name" type="xsd:string"/>
</xsd:complexType>
</xsd:element>
<xsd:element name="data">
<xsd:complexType>
<xsd:sequence>
<xsd:element name="value" type="xsd:string" minOccurs="0" msdata:Ordinal="1"/>
<xsd:element name="comment" type="xsd:string" minOccurs="0" msdata:Ordinal="2"/>
</xsd:sequence>
<xsd:attribute name="name" type="xsd:string" use="required" msdata:Ordinal="1"/>
<xsd:attribute name="type" type="xsd:string" msdata:Ordinal="3"/>
<xsd:attribute name="mimetype" type="xsd:string" msdata:Ordinal="4"/>
<xsd:attribute ref="xml:space"/>
</xsd:complexType>
</xsd:element>
<xsd:element name="resheader">
<xsd:complexType>
<xsd:sequence>
<xsd:element name="value" type="xsd:string" minOccurs="0" msdata:Ordinal="1"/>
</xsd:sequence>
<xsd:attribute name="name" type="xsd:string" use="required"/>
</xsd:complexType>
</xsd:element>
</xsd:choice>
</xsd:complexType>
</xsd:element>
</xsd:schema>
<resheader name="resmimetype">
<value>text/microsoft-resx</value>
</resheader>
<resheader name="version">
<value>2.0</value>
</resheader>
<resheader name="reader">
<value>System.Resources.ResXResourceReader, System.Windows.Forms, Version=4.0.0.0, Culture=neutral,
PublicKeyToken=b77a5c561934e089
</value>
</resheader>
<resheader name="writer">
<value>System.Resources.ResXResourceWriter, System.Windows.Forms, Version=4.0.0.0, Culture=neutral,
PublicKeyToken=b77a5c561934e089
</value>
</resheader>
<data name="ActivelyMatchingItemsRound" xml:space="preserve">
<value>Kopā salīdzināti {0} seti šajā raundā.</value>
<comment>{0} will be replaced by number of sets traded</comment>
</data>
<data name="ListingAnnouncing" xml:space="preserve">
<value>Paziņojam {0} ({1}) inventāru, kas kopumā sastāv no {2} lietām, sarakstā...</value>
<comment>{0} will be replaced by steam ID (number), {1} will be replaced by user's nickname, {2} will be replaced with number of items in the inventory</comment>
</data>
<data name="MatchingFound" xml:space="preserve">
<value>Sakrita kopumā {0} lietas ar botu {1} ({2}), sūta darījuma pieprasījumu...</value>
<comment>{0} will be replaced by number of items matched, {1} will be replaced by steam ID (number), {2} will be replaced by user's nickname</comment>
</data>
<data name="TradeOfferFailed" xml:space="preserve">
<value>Neizdevās nosūtīt darījuma piedāvājumu botam {0} ({1}), turpinam tālāk...</value>
<comment>{0} will be replaced by steam ID (number), {1} will be replaced by user's nickname'</comment>
</data>
<data name="ActivelyMatchingSomeConfirmationsFailed" xml:space="preserve">
<value>Daži apstiprinājumi nav izdevušies, aptuveni {0} no {1} darījumiem tika veiksmīgi nosūtīti.</value>
<comment>{0} will be replaced by amount of the trade offers that succeeded (number), {1} will be replaced by amount of the trade offers that were supposed to be sent in total (number)</comment>
</data>
</root>

View File

@@ -0,0 +1,85 @@
<?xml version="1.0" encoding="utf-8"?>
<root>
<xsd:schema xmlns:xsd="http://www.w3.org/2001/XMLSchema" xmlns:msdata="urn:schemas-microsoft-com:xml-msdata" xmlns="" id="root">
<xsd:import namespace="http://www.w3.org/XML/1998/namespace"/>
<xsd:element name="root" msdata:IsDataSet="true">
<xsd:complexType>
<xsd:choice maxOccurs="unbounded">
<xsd:element name="metadata">
<xsd:complexType>
<xsd:sequence>
<xsd:element name="value" type="xsd:string" minOccurs="0"/>
</xsd:sequence>
<xsd:attribute name="name" use="required" type="xsd:string"/>
<xsd:attribute name="type" type="xsd:string"/>
<xsd:attribute name="mimetype" type="xsd:string"/>
<xsd:attribute ref="xml:space"/>
</xsd:complexType>
</xsd:element>
<xsd:element name="assembly">
<xsd:complexType>
<xsd:attribute name="alias" type="xsd:string"/>
<xsd:attribute name="name" type="xsd:string"/>
</xsd:complexType>
</xsd:element>
<xsd:element name="data">
<xsd:complexType>
<xsd:sequence>
<xsd:element name="value" type="xsd:string" minOccurs="0" msdata:Ordinal="1"/>
<xsd:element name="comment" type="xsd:string" minOccurs="0" msdata:Ordinal="2"/>
</xsd:sequence>
<xsd:attribute name="name" type="xsd:string" use="required" msdata:Ordinal="1"/>
<xsd:attribute name="type" type="xsd:string" msdata:Ordinal="3"/>
<xsd:attribute name="mimetype" type="xsd:string" msdata:Ordinal="4"/>
<xsd:attribute ref="xml:space"/>
</xsd:complexType>
</xsd:element>
<xsd:element name="resheader">
<xsd:complexType>
<xsd:sequence>
<xsd:element name="value" type="xsd:string" minOccurs="0" msdata:Ordinal="1"/>
</xsd:sequence>
<xsd:attribute name="name" type="xsd:string" use="required"/>
</xsd:complexType>
</xsd:element>
</xsd:choice>
</xsd:complexType>
</xsd:element>
</xsd:schema>
<resheader name="resmimetype">
<value>text/microsoft-resx</value>
</resheader>
<resheader name="version">
<value>2.0</value>
</resheader>
<resheader name="reader">
<value>System.Resources.ResXResourceReader, System.Windows.Forms, Version=4.0.0.0, Culture=neutral,
PublicKeyToken=b77a5c561934e089
</value>
</resheader>
<resheader name="writer">
<value>System.Resources.ResXResourceWriter, System.Windows.Forms, Version=4.0.0.0, Culture=neutral,
PublicKeyToken=b77a5c561934e089
</value>
</resheader>
<data name="ActivelyMatchingItemsRound" xml:space="preserve">
<value>Deze ronde zijn in totaal {0} sets gematcht.</value>
<comment>{0} will be replaced by number of sets traded</comment>
</data>
<data name="ListingAnnouncing" xml:space="preserve">
<value>Mededeling van {0} ({1}) met een inventaris gemaakt van in totaal {2} items op de lijst...</value>
<comment>{0} will be replaced by steam ID (number), {1} will be replaced by user's nickname, {2} will be replaced with number of items in the inventory</comment>
</data>
<data name="MatchingFound" xml:space="preserve">
<value>In totaal {0} items gekoppeld aan bot {1} ({2}), handelsaanbieding verzonden...</value>
<comment>{0} will be replaced by number of items matched, {1} will be replaced by steam ID (number), {2} will be replaced by user's nickname</comment>
</data>
<data name="TradeOfferFailed" xml:space="preserve">
<value>Fout bij het verzenden van een transactie aanbod aan bot {0} ({1}), verder gaan...</value>
<comment>{0} will be replaced by steam ID (number), {1} will be replaced by user's nickname'</comment>
</data>
<data name="ActivelyMatchingSomeConfirmationsFailed" xml:space="preserve">
<value>Sommige bevestigingen zijn mislukt, ongeveer {0} van de {1} transacties zijn succesvol verzonden.</value>
<comment>{0} will be replaced by amount of the trade offers that succeeded (number), {1} will be replaced by amount of the trade offers that were supposed to be sent in total (number)</comment>
</data>
</root>

View File

@@ -0,0 +1,85 @@
<?xml version="1.0" encoding="utf-8"?>
<root>
<xsd:schema xmlns:xsd="http://www.w3.org/2001/XMLSchema" xmlns:msdata="urn:schemas-microsoft-com:xml-msdata" xmlns="" id="root">
<xsd:import namespace="http://www.w3.org/XML/1998/namespace"/>
<xsd:element name="root" msdata:IsDataSet="true">
<xsd:complexType>
<xsd:choice maxOccurs="unbounded">
<xsd:element name="metadata">
<xsd:complexType>
<xsd:sequence>
<xsd:element name="value" type="xsd:string" minOccurs="0"/>
</xsd:sequence>
<xsd:attribute name="name" use="required" type="xsd:string"/>
<xsd:attribute name="type" type="xsd:string"/>
<xsd:attribute name="mimetype" type="xsd:string"/>
<xsd:attribute ref="xml:space"/>
</xsd:complexType>
</xsd:element>
<xsd:element name="assembly">
<xsd:complexType>
<xsd:attribute name="alias" type="xsd:string"/>
<xsd:attribute name="name" type="xsd:string"/>
</xsd:complexType>
</xsd:element>
<xsd:element name="data">
<xsd:complexType>
<xsd:sequence>
<xsd:element name="value" type="xsd:string" minOccurs="0" msdata:Ordinal="1"/>
<xsd:element name="comment" type="xsd:string" minOccurs="0" msdata:Ordinal="2"/>
</xsd:sequence>
<xsd:attribute name="name" type="xsd:string" use="required" msdata:Ordinal="1"/>
<xsd:attribute name="type" type="xsd:string" msdata:Ordinal="3"/>
<xsd:attribute name="mimetype" type="xsd:string" msdata:Ordinal="4"/>
<xsd:attribute ref="xml:space"/>
</xsd:complexType>
</xsd:element>
<xsd:element name="resheader">
<xsd:complexType>
<xsd:sequence>
<xsd:element name="value" type="xsd:string" minOccurs="0" msdata:Ordinal="1"/>
</xsd:sequence>
<xsd:attribute name="name" type="xsd:string" use="required"/>
</xsd:complexType>
</xsd:element>
</xsd:choice>
</xsd:complexType>
</xsd:element>
</xsd:schema>
<resheader name="resmimetype">
<value>text/microsoft-resx</value>
</resheader>
<resheader name="version">
<value>2.0</value>
</resheader>
<resheader name="reader">
<value>System.Resources.ResXResourceReader, System.Windows.Forms, Version=4.0.0.0, Culture=neutral,
PublicKeyToken=b77a5c561934e089
</value>
</resheader>
<resheader name="writer">
<value>System.Resources.ResXResourceWriter, System.Windows.Forms, Version=4.0.0.0, Culture=neutral,
PublicKeyToken=b77a5c561934e089
</value>
</resheader>
<data name="ActivelyMatchingItemsRound" xml:space="preserve">
<value>Matchet totalt {0} sett denne runden.</value>
<comment>{0} will be replaced by number of sets traded</comment>
</data>
<data name="ListingAnnouncing" xml:space="preserve">
<value>Kunngjør {0} ({1}) med inventar laget av totalt {2} gjenstander på oppføringen...</value>
<comment>{0} will be replaced by steam ID (number), {1} will be replaced by user's nickname, {2} will be replaced with number of items in the inventory</comment>
</data>
<data name="MatchingFound" xml:space="preserve">
<value>Matchet totalt {0} gjenstander med bot {1} ({2}), sender byttehandel...</value>
<comment>{0} will be replaced by number of items matched, {1} will be replaced by steam ID (number), {2} will be replaced by user's nickname</comment>
</data>
<data name="TradeOfferFailed" xml:space="preserve">
<value>Kunne ikke sende en byttehandel til bot {0}({1}), fortsetter...</value>
<comment>{0} will be replaced by steam ID (number), {1} will be replaced by user's nickname'</comment>
</data>
<data name="ActivelyMatchingSomeConfirmationsFailed" xml:space="preserve">
<value>Noen bekreftelser har mislyktes, ca {0} av {1} byttehandler ble sendt.</value>
<comment>{0} will be replaced by amount of the trade offers that succeeded (number), {1} will be replaced by amount of the trade offers that were supposed to be sent in total (number)</comment>
</data>
</root>

View File

@@ -0,0 +1,85 @@
<?xml version="1.0" encoding="utf-8"?>
<root>
<xsd:schema xmlns:xsd="http://www.w3.org/2001/XMLSchema" xmlns:msdata="urn:schemas-microsoft-com:xml-msdata" xmlns="" id="root">
<xsd:import namespace="http://www.w3.org/XML/1998/namespace"/>
<xsd:element name="root" msdata:IsDataSet="true">
<xsd:complexType>
<xsd:choice maxOccurs="unbounded">
<xsd:element name="metadata">
<xsd:complexType>
<xsd:sequence>
<xsd:element name="value" type="xsd:string" minOccurs="0"/>
</xsd:sequence>
<xsd:attribute name="name" use="required" type="xsd:string"/>
<xsd:attribute name="type" type="xsd:string"/>
<xsd:attribute name="mimetype" type="xsd:string"/>
<xsd:attribute ref="xml:space"/>
</xsd:complexType>
</xsd:element>
<xsd:element name="assembly">
<xsd:complexType>
<xsd:attribute name="alias" type="xsd:string"/>
<xsd:attribute name="name" type="xsd:string"/>
</xsd:complexType>
</xsd:element>
<xsd:element name="data">
<xsd:complexType>
<xsd:sequence>
<xsd:element name="value" type="xsd:string" minOccurs="0" msdata:Ordinal="1"/>
<xsd:element name="comment" type="xsd:string" minOccurs="0" msdata:Ordinal="2"/>
</xsd:sequence>
<xsd:attribute name="name" type="xsd:string" use="required" msdata:Ordinal="1"/>
<xsd:attribute name="type" type="xsd:string" msdata:Ordinal="3"/>
<xsd:attribute name="mimetype" type="xsd:string" msdata:Ordinal="4"/>
<xsd:attribute ref="xml:space"/>
</xsd:complexType>
</xsd:element>
<xsd:element name="resheader">
<xsd:complexType>
<xsd:sequence>
<xsd:element name="value" type="xsd:string" minOccurs="0" msdata:Ordinal="1"/>
</xsd:sequence>
<xsd:attribute name="name" type="xsd:string" use="required"/>
</xsd:complexType>
</xsd:element>
</xsd:choice>
</xsd:complexType>
</xsd:element>
</xsd:schema>
<resheader name="resmimetype">
<value>text/microsoft-resx</value>
</resheader>
<resheader name="version">
<value>2.0</value>
</resheader>
<resheader name="reader">
<value>System.Resources.ResXResourceReader, System.Windows.Forms, Version=4.0.0.0, Culture=neutral,
PublicKeyToken=b77a5c561934e089
</value>
</resheader>
<resheader name="writer">
<value>System.Resources.ResXResourceWriter, System.Windows.Forms, Version=4.0.0.0, Culture=neutral,
PublicKeyToken=b77a5c561934e089
</value>
</resheader>
<data name="ActivelyMatchingItemsRound" xml:space="preserve">
<value>Dopasowano w sumie {0} setów w tej rundzie.</value>
<comment>{0} will be replaced by number of sets traded</comment>
</data>
<data name="ListingAnnouncing" xml:space="preserve">
<value>Ogłaszanie {0} ({1}) z ekwipunkiem składającymi się łącznie z {2} przedmiotów na liście...</value>
<comment>{0} will be replaced by steam ID (number), {1} will be replaced by user's nickname, {2} will be replaced with number of items in the inventory</comment>
</data>
<data name="MatchingFound" xml:space="preserve">
<value>Dopasowano łącznie {0} przedmiotów do bota {1} ({2}), wysyłanie oferty wymiany...</value>
<comment>{0} will be replaced by number of items matched, {1} will be replaced by steam ID (number), {2} will be replaced by user's nickname</comment>
</data>
<data name="TradeOfferFailed" xml:space="preserve">
<value>Nie udało się wysłać oferty wymiany do bota {0} ({1}), przechodzenie dalej...</value>
<comment>{0} will be replaced by steam ID (number), {1} will be replaced by user's nickname'</comment>
</data>
<data name="ActivelyMatchingSomeConfirmationsFailed" xml:space="preserve">
<value>Niektóre potwierdzenia nie powiodły się, około {0} z {1} transakcji zostało wysłanych pomyślnie.</value>
<comment>{0} will be replaced by amount of the trade offers that succeeded (number), {1} will be replaced by amount of the trade offers that were supposed to be sent in total (number)</comment>
</data>
</root>

View File

@@ -0,0 +1,85 @@
<?xml version="1.0" encoding="utf-8"?>
<root>
<xsd:schema xmlns:xsd="http://www.w3.org/2001/XMLSchema" xmlns:msdata="urn:schemas-microsoft-com:xml-msdata" xmlns="" id="root">
<xsd:import namespace="http://www.w3.org/XML/1998/namespace"/>
<xsd:element name="root" msdata:IsDataSet="true">
<xsd:complexType>
<xsd:choice maxOccurs="unbounded">
<xsd:element name="metadata">
<xsd:complexType>
<xsd:sequence>
<xsd:element name="value" type="xsd:string" minOccurs="0"/>
</xsd:sequence>
<xsd:attribute name="name" use="required" type="xsd:string"/>
<xsd:attribute name="type" type="xsd:string"/>
<xsd:attribute name="mimetype" type="xsd:string"/>
<xsd:attribute ref="xml:space"/>
</xsd:complexType>
</xsd:element>
<xsd:element name="assembly">
<xsd:complexType>
<xsd:attribute name="alias" type="xsd:string"/>
<xsd:attribute name="name" type="xsd:string"/>
</xsd:complexType>
</xsd:element>
<xsd:element name="data">
<xsd:complexType>
<xsd:sequence>
<xsd:element name="value" type="xsd:string" minOccurs="0" msdata:Ordinal="1"/>
<xsd:element name="comment" type="xsd:string" minOccurs="0" msdata:Ordinal="2"/>
</xsd:sequence>
<xsd:attribute name="name" type="xsd:string" use="required" msdata:Ordinal="1"/>
<xsd:attribute name="type" type="xsd:string" msdata:Ordinal="3"/>
<xsd:attribute name="mimetype" type="xsd:string" msdata:Ordinal="4"/>
<xsd:attribute ref="xml:space"/>
</xsd:complexType>
</xsd:element>
<xsd:element name="resheader">
<xsd:complexType>
<xsd:sequence>
<xsd:element name="value" type="xsd:string" minOccurs="0" msdata:Ordinal="1"/>
</xsd:sequence>
<xsd:attribute name="name" type="xsd:string" use="required"/>
</xsd:complexType>
</xsd:element>
</xsd:choice>
</xsd:complexType>
</xsd:element>
</xsd:schema>
<resheader name="resmimetype">
<value>text/microsoft-resx</value>
</resheader>
<resheader name="version">
<value>2.0</value>
</resheader>
<resheader name="reader">
<value>System.Resources.ResXResourceReader, System.Windows.Forms, Version=4.0.0.0, Culture=neutral,
PublicKeyToken=b77a5c561934e089
</value>
</resheader>
<resheader name="writer">
<value>System.Resources.ResXResourceWriter, System.Windows.Forms, Version=4.0.0.0, Culture=neutral,
PublicKeyToken=b77a5c561934e089
</value>
</resheader>
<data name="ActivelyMatchingItemsRound" xml:space="preserve">
<value>{0} conjunto(s) foi(foram) associado(s) nessa rodada.</value>
<comment>{0} will be replaced by number of sets traded</comment>
</data>
<data name="ListingAnnouncing" xml:space="preserve">
<value>Anunciando {0} ({1}) com um inventário composto pelo total de {2} itens listados...</value>
<comment>{0} will be replaced by steam ID (number), {1} will be replaced by user's nickname, {2} will be replaced with number of items in the inventory</comment>
</data>
<data name="MatchingFound" xml:space="preserve">
<value>{0} item(ns) correspondidos(s) com o bot {1} ({2}), enviando oferta de troca...</value>
<comment>{0} will be replaced by number of items matched, {1} will be replaced by steam ID (number), {2} will be replaced by user's nickname</comment>
</data>
<data name="TradeOfferFailed" xml:space="preserve">
<value>Falha ao enviar uma oferta de troca para o bot {0} ({1}), prosseguindo...</value>
<comment>{0} will be replaced by steam ID (number), {1} will be replaced by user's nickname'</comment>
</data>
<data name="ActivelyMatchingSomeConfirmationsFailed" xml:space="preserve">
<value>Algumas confirmações falharam, cerca de {0} de {1} operações foram enviadas com sucesso.</value>
<comment>{0} will be replaced by amount of the trade offers that succeeded (number), {1} will be replaced by amount of the trade offers that were supposed to be sent in total (number)</comment>
</data>
</root>

View File

@@ -0,0 +1,85 @@
<?xml version="1.0" encoding="utf-8"?>
<root>
<xsd:schema xmlns:xsd="http://www.w3.org/2001/XMLSchema" xmlns:msdata="urn:schemas-microsoft-com:xml-msdata" xmlns="" id="root">
<xsd:import namespace="http://www.w3.org/XML/1998/namespace"/>
<xsd:element name="root" msdata:IsDataSet="true">
<xsd:complexType>
<xsd:choice maxOccurs="unbounded">
<xsd:element name="metadata">
<xsd:complexType>
<xsd:sequence>
<xsd:element name="value" type="xsd:string" minOccurs="0"/>
</xsd:sequence>
<xsd:attribute name="name" use="required" type="xsd:string"/>
<xsd:attribute name="type" type="xsd:string"/>
<xsd:attribute name="mimetype" type="xsd:string"/>
<xsd:attribute ref="xml:space"/>
</xsd:complexType>
</xsd:element>
<xsd:element name="assembly">
<xsd:complexType>
<xsd:attribute name="alias" type="xsd:string"/>
<xsd:attribute name="name" type="xsd:string"/>
</xsd:complexType>
</xsd:element>
<xsd:element name="data">
<xsd:complexType>
<xsd:sequence>
<xsd:element name="value" type="xsd:string" minOccurs="0" msdata:Ordinal="1"/>
<xsd:element name="comment" type="xsd:string" minOccurs="0" msdata:Ordinal="2"/>
</xsd:sequence>
<xsd:attribute name="name" type="xsd:string" use="required" msdata:Ordinal="1"/>
<xsd:attribute name="type" type="xsd:string" msdata:Ordinal="3"/>
<xsd:attribute name="mimetype" type="xsd:string" msdata:Ordinal="4"/>
<xsd:attribute ref="xml:space"/>
</xsd:complexType>
</xsd:element>
<xsd:element name="resheader">
<xsd:complexType>
<xsd:sequence>
<xsd:element name="value" type="xsd:string" minOccurs="0" msdata:Ordinal="1"/>
</xsd:sequence>
<xsd:attribute name="name" type="xsd:string" use="required"/>
</xsd:complexType>
</xsd:element>
</xsd:choice>
</xsd:complexType>
</xsd:element>
</xsd:schema>
<resheader name="resmimetype">
<value>text/microsoft-resx</value>
</resheader>
<resheader name="version">
<value>2.0</value>
</resheader>
<resheader name="reader">
<value>System.Resources.ResXResourceReader, System.Windows.Forms, Version=4.0.0.0, Culture=neutral,
PublicKeyToken=b77a5c561934e089
</value>
</resheader>
<resheader name="writer">
<value>System.Resources.ResXResourceWriter, System.Windows.Forms, Version=4.0.0.0, Culture=neutral,
PublicKeyToken=b77a5c561934e089
</value>
</resheader>
<data name="ActivelyMatchingItemsRound" xml:space="preserve">
<value>Corresponde a um total de {0} conjuntos nesta rodada.</value>
<comment>{0} will be replaced by number of sets traded</comment>
</data>
<data name="ListingAnnouncing" xml:space="preserve">
<value>Anunciando {0} ({1}) com um inventário composto por {2} itens no total na listagem...</value>
<comment>{0} will be replaced by steam ID (number), {1} will be replaced by user's nickname, {2} will be replaced with number of items in the inventory</comment>
</data>
<data name="MatchingFound" xml:space="preserve">
<value>Foi confirmando um total de {0} itens com o bot {1} ({2}), a enviar oferta de troca...</value>
<comment>{0} will be replaced by number of items matched, {1} will be replaced by steam ID (number), {2} will be replaced by user's nickname</comment>
</data>
<data name="TradeOfferFailed" xml:space="preserve">
<value>Falha ao enviar uma oferta de troca para o bot {0} ({1}), a avançar...</value>
<comment>{0} will be replaced by steam ID (number), {1} will be replaced by user's nickname'</comment>
</data>
<data name="ActivelyMatchingSomeConfirmationsFailed" xml:space="preserve">
<value>Algumas confirmações falharam, aproximadamente {0} de {1} trocas foram enviadas com sucesso.</value>
<comment>{0} will be replaced by amount of the trade offers that succeeded (number), {1} will be replaced by amount of the trade offers that were supposed to be sent in total (number)</comment>
</data>
</root>

View File

@@ -0,0 +1,85 @@
<?xml version="1.0" encoding="utf-8"?>
<root>
<xsd:schema xmlns:xsd="http://www.w3.org/2001/XMLSchema" xmlns:msdata="urn:schemas-microsoft-com:xml-msdata" xmlns="" id="root">
<xsd:import namespace="http://www.w3.org/XML/1998/namespace"/>
<xsd:element name="root" msdata:IsDataSet="true">
<xsd:complexType>
<xsd:choice maxOccurs="unbounded">
<xsd:element name="metadata">
<xsd:complexType>
<xsd:sequence>
<xsd:element name="value" type="xsd:string" minOccurs="0"/>
</xsd:sequence>
<xsd:attribute name="name" use="required" type="xsd:string"/>
<xsd:attribute name="type" type="xsd:string"/>
<xsd:attribute name="mimetype" type="xsd:string"/>
<xsd:attribute ref="xml:space"/>
</xsd:complexType>
</xsd:element>
<xsd:element name="assembly">
<xsd:complexType>
<xsd:attribute name="alias" type="xsd:string"/>
<xsd:attribute name="name" type="xsd:string"/>
</xsd:complexType>
</xsd:element>
<xsd:element name="data">
<xsd:complexType>
<xsd:sequence>
<xsd:element name="value" type="xsd:string" minOccurs="0" msdata:Ordinal="1"/>
<xsd:element name="comment" type="xsd:string" minOccurs="0" msdata:Ordinal="2"/>
</xsd:sequence>
<xsd:attribute name="name" type="xsd:string" use="required" msdata:Ordinal="1"/>
<xsd:attribute name="type" type="xsd:string" msdata:Ordinal="3"/>
<xsd:attribute name="mimetype" type="xsd:string" msdata:Ordinal="4"/>
<xsd:attribute ref="xml:space"/>
</xsd:complexType>
</xsd:element>
<xsd:element name="resheader">
<xsd:complexType>
<xsd:sequence>
<xsd:element name="value" type="xsd:string" minOccurs="0" msdata:Ordinal="1"/>
</xsd:sequence>
<xsd:attribute name="name" type="xsd:string" use="required"/>
</xsd:complexType>
</xsd:element>
</xsd:choice>
</xsd:complexType>
</xsd:element>
</xsd:schema>
<resheader name="resmimetype">
<value>text/microsoft-resx</value>
</resheader>
<resheader name="version">
<value>2.0</value>
</resheader>
<resheader name="reader">
<value>System.Resources.ResXResourceReader, System.Windows.Forms, Version=4.0.0.0, Culture=neutral,
PublicKeyToken=b77a5c561934e089
</value>
</resheader>
<resheader name="writer">
<value>System.Resources.ResXResourceWriter, System.Windows.Forms, Version=4.0.0.0, Culture=neutral,
PublicKeyToken=b77a5c561934e089
</value>
</resheader>
<data name="ActivelyMatchingItemsRound" xml:space="preserve">
<value>MATCHD TOTAL OV {0} SETS DIS ROUND.</value>
<comment>{0} will be replaced by number of sets traded</comment>
</data>
<data name="ListingAnnouncing" xml:space="preserve">
<value>ANNOUNCIN {0} ({1}) WIF INVENTORY MADE OUT OV {2} ITEMS IN TOTAL ON TEH LISTIN...</value>
<comment>{0} will be replaced by steam ID (number), {1} will be replaced by user's nickname, {2} will be replaced with number of items in the inventory</comment>
</data>
<data name="MatchingFound" xml:space="preserve">
<value>MATCHD TOTAL OV {0} ITEMS WIF BOT {1} ({2}), SENDIN TRADE OFFR...</value>
<comment>{0} will be replaced by number of items matched, {1} will be replaced by steam ID (number), {2} will be replaced by user's nickname</comment>
</data>
<data name="TradeOfferFailed" xml:space="preserve">
<value>FAILD 2 SEND TRADE OFFR 2 BOT {0} ({1}), MOVIN ON...</value>
<comment>{0} will be replaced by steam ID (number), {1} will be replaced by user's nickname'</comment>
</data>
<data name="ActivelyMatchingSomeConfirmationsFailed" xml:space="preserve">
<value>SUM CONFIRMASHUNS HAS FAILD, APPROXIMATELY {0} OUT OV {1} TRADEZ WUZ SENT SUCCESFULLY.</value>
<comment>{0} will be replaced by amount of the trade offers that succeeded (number), {1} will be replaced by amount of the trade offers that were supposed to be sent in total (number)</comment>
</data>
</root>

View File

@@ -0,0 +1,85 @@
<?xml version="1.0" encoding="utf-8"?>
<root>
<xsd:schema xmlns:xsd="http://www.w3.org/2001/XMLSchema" xmlns:msdata="urn:schemas-microsoft-com:xml-msdata" id="root" xmlns="">
<xsd:import namespace="http://www.w3.org/XML/1998/namespace" />
<xsd:element name="root" msdata:IsDataSet="true">
<xsd:complexType>
<xsd:choice maxOccurs="unbounded">
<xsd:element name="metadata">
<xsd:complexType>
<xsd:sequence>
<xsd:element name="value" type="xsd:string" minOccurs="0" />
</xsd:sequence>
<xsd:attribute name="name" use="required" type="xsd:string" />
<xsd:attribute name="type" type="xsd:string" />
<xsd:attribute name="mimetype" type="xsd:string" />
<xsd:attribute ref="xml:space" />
</xsd:complexType>
</xsd:element>
<xsd:element name="assembly">
<xsd:complexType>
<xsd:attribute name="alias" type="xsd:string" />
<xsd:attribute name="name" type="xsd:string" />
</xsd:complexType>
</xsd:element>
<xsd:element name="data">
<xsd:complexType>
<xsd:sequence>
<xsd:element name="value" type="xsd:string" minOccurs="0" msdata:Ordinal="1" />
<xsd:element name="comment" type="xsd:string" minOccurs="0" msdata:Ordinal="2" />
</xsd:sequence>
<xsd:attribute name="name" type="xsd:string" use="required" msdata:Ordinal="1" />
<xsd:attribute name="type" type="xsd:string" msdata:Ordinal="3" />
<xsd:attribute name="mimetype" type="xsd:string" msdata:Ordinal="4" />
<xsd:attribute ref="xml:space" />
</xsd:complexType>
</xsd:element>
<xsd:element name="resheader">
<xsd:complexType>
<xsd:sequence>
<xsd:element name="value" type="xsd:string" minOccurs="0" msdata:Ordinal="1" />
</xsd:sequence>
<xsd:attribute name="name" type="xsd:string" use="required" />
</xsd:complexType>
</xsd:element>
</xsd:choice>
</xsd:complexType>
</xsd:element>
</xsd:schema>
<resheader name="resmimetype">
<value>text/microsoft-resx</value>
</resheader>
<resheader name="version">
<value>2.0</value>
</resheader>
<resheader name="reader">
<value>System.Resources.ResXResourceReader, System.Windows.Forms, Version=4.0.0.0, Culture=neutral,
PublicKeyToken=b77a5c561934e089
</value>
</resheader>
<resheader name="writer">
<value>System.Resources.ResXResourceWriter, System.Windows.Forms, Version=4.0.0.0, Culture=neutral,
PublicKeyToken=b77a5c561934e089
</value>
</resheader>
<data name="ActivelyMatchingItemsRound" xml:space="preserve">
<value>Matched a total of {0} sets this round.</value>
<comment>{0} will be replaced by number of sets traded</comment>
</data>
<data name="ListingAnnouncing" xml:space="preserve">
<value>Announcing {0} ({1}) with inventory made out of {2} items in total on the listing...</value>
<comment>{0} will be replaced by steam ID (number), {1} will be replaced by user's nickname, {2} will be replaced with number of items in the inventory</comment>
</data>
<data name="MatchingFound" xml:space="preserve">
<value>Matched a total of {0} items with bot {1} ({2}), sending trade offer...</value>
<comment>{0} will be replaced by number of items matched, {1} will be replaced by steam ID (number), {2} will be replaced by user's nickname</comment>
</data>
<data name="TradeOfferFailed" xml:space="preserve">
<value>Failed to send a trade offer to bot {0} ({1}), moving on...</value>
<comment>{0} will be replaced by steam ID (number), {1} will be replaced by user's nickname'</comment>
</data>
<data name="ActivelyMatchingSomeConfirmationsFailed" xml:space="preserve">
<value>Some confirmations have failed, approximately {0} out of {1} trades were sent successfully.</value>
<comment>{0} will be replaced by amount of the trade offers that succeeded (number), {1} will be replaced by amount of the trade offers that were supposed to be sent in total (number)</comment>
</data>
</root>

View File

@@ -0,0 +1,69 @@
<?xml version="1.0" encoding="utf-8"?>
<root>
<xsd:schema xmlns:xsd="http://www.w3.org/2001/XMLSchema" xmlns:msdata="urn:schemas-microsoft-com:xml-msdata" xmlns="" id="root">
<xsd:import namespace="http://www.w3.org/XML/1998/namespace"/>
<xsd:element name="root" msdata:IsDataSet="true">
<xsd:complexType>
<xsd:choice maxOccurs="unbounded">
<xsd:element name="metadata">
<xsd:complexType>
<xsd:sequence>
<xsd:element name="value" type="xsd:string" minOccurs="0"/>
</xsd:sequence>
<xsd:attribute name="name" use="required" type="xsd:string"/>
<xsd:attribute name="type" type="xsd:string"/>
<xsd:attribute name="mimetype" type="xsd:string"/>
<xsd:attribute ref="xml:space"/>
</xsd:complexType>
</xsd:element>
<xsd:element name="assembly">
<xsd:complexType>
<xsd:attribute name="alias" type="xsd:string"/>
<xsd:attribute name="name" type="xsd:string"/>
</xsd:complexType>
</xsd:element>
<xsd:element name="data">
<xsd:complexType>
<xsd:sequence>
<xsd:element name="value" type="xsd:string" minOccurs="0" msdata:Ordinal="1"/>
<xsd:element name="comment" type="xsd:string" minOccurs="0" msdata:Ordinal="2"/>
</xsd:sequence>
<xsd:attribute name="name" type="xsd:string" use="required" msdata:Ordinal="1"/>
<xsd:attribute name="type" type="xsd:string" msdata:Ordinal="3"/>
<xsd:attribute name="mimetype" type="xsd:string" msdata:Ordinal="4"/>
<xsd:attribute ref="xml:space"/>
</xsd:complexType>
</xsd:element>
<xsd:element name="resheader">
<xsd:complexType>
<xsd:sequence>
<xsd:element name="value" type="xsd:string" minOccurs="0" msdata:Ordinal="1"/>
</xsd:sequence>
<xsd:attribute name="name" type="xsd:string" use="required"/>
</xsd:complexType>
</xsd:element>
</xsd:choice>
</xsd:complexType>
</xsd:element>
</xsd:schema>
<resheader name="resmimetype">
<value>text/microsoft-resx</value>
</resheader>
<resheader name="version">
<value>2.0</value>
</resheader>
<resheader name="reader">
<value>System.Resources.ResXResourceReader, System.Windows.Forms, Version=4.0.0.0, Culture=neutral,
PublicKeyToken=b77a5c561934e089
</value>
</resheader>
<resheader name="writer">
<value>System.Resources.ResXResourceWriter, System.Windows.Forms, Version=4.0.0.0, Culture=neutral,
PublicKeyToken=b77a5c561934e089
</value>
</resheader>
<data name="ActivelyMatchingItemsRound" xml:space="preserve">
<value>Potivim un total de {0} in această rundă.</value>
<comment>{0} will be replaced by number of sets traded</comment>
</data>
</root>

View File

@@ -0,0 +1,85 @@
<?xml version="1.0" encoding="utf-8"?>
<root>
<xsd:schema xmlns:xsd="http://www.w3.org/2001/XMLSchema" xmlns:msdata="urn:schemas-microsoft-com:xml-msdata" xmlns="" id="root">
<xsd:import namespace="http://www.w3.org/XML/1998/namespace"/>
<xsd:element name="root" msdata:IsDataSet="true">
<xsd:complexType>
<xsd:choice maxOccurs="unbounded">
<xsd:element name="metadata">
<xsd:complexType>
<xsd:sequence>
<xsd:element name="value" type="xsd:string" minOccurs="0"/>
</xsd:sequence>
<xsd:attribute name="name" use="required" type="xsd:string"/>
<xsd:attribute name="type" type="xsd:string"/>
<xsd:attribute name="mimetype" type="xsd:string"/>
<xsd:attribute ref="xml:space"/>
</xsd:complexType>
</xsd:element>
<xsd:element name="assembly">
<xsd:complexType>
<xsd:attribute name="alias" type="xsd:string"/>
<xsd:attribute name="name" type="xsd:string"/>
</xsd:complexType>
</xsd:element>
<xsd:element name="data">
<xsd:complexType>
<xsd:sequence>
<xsd:element name="value" type="xsd:string" minOccurs="0" msdata:Ordinal="1"/>
<xsd:element name="comment" type="xsd:string" minOccurs="0" msdata:Ordinal="2"/>
</xsd:sequence>
<xsd:attribute name="name" type="xsd:string" use="required" msdata:Ordinal="1"/>
<xsd:attribute name="type" type="xsd:string" msdata:Ordinal="3"/>
<xsd:attribute name="mimetype" type="xsd:string" msdata:Ordinal="4"/>
<xsd:attribute ref="xml:space"/>
</xsd:complexType>
</xsd:element>
<xsd:element name="resheader">
<xsd:complexType>
<xsd:sequence>
<xsd:element name="value" type="xsd:string" minOccurs="0" msdata:Ordinal="1"/>
</xsd:sequence>
<xsd:attribute name="name" type="xsd:string" use="required"/>
</xsd:complexType>
</xsd:element>
</xsd:choice>
</xsd:complexType>
</xsd:element>
</xsd:schema>
<resheader name="resmimetype">
<value>text/microsoft-resx</value>
</resheader>
<resheader name="version">
<value>2.0</value>
</resheader>
<resheader name="reader">
<value>System.Resources.ResXResourceReader, System.Windows.Forms, Version=4.0.0.0, Culture=neutral,
PublicKeyToken=b77a5c561934e089
</value>
</resheader>
<resheader name="writer">
<value>System.Resources.ResXResourceWriter, System.Windows.Forms, Version=4.0.0.0, Culture=neutral,
PublicKeyToken=b77a5c561934e089
</value>
</resheader>
<data name="ActivelyMatchingItemsRound" xml:space="preserve">
<value>Сопоставленно наборов в этом раунде: {0}.</value>
<comment>{0} will be replaced by number of sets traded</comment>
</data>
<data name="ListingAnnouncing" xml:space="preserve">
<value>Объявление {0} ({1}) с инвентарем из {2} предметов в списке...</value>
<comment>{0} will be replaced by steam ID (number), {1} will be replaced by user's nickname, {2} will be replaced with number of items in the inventory</comment>
</data>
<data name="MatchingFound" xml:space="preserve">
<value>Совпадение {0} предметов с ботом {1} ({2}), отправка торгового предложения...</value>
<comment>{0} will be replaced by number of items matched, {1} will be replaced by steam ID (number), {2} will be replaced by user's nickname</comment>
</data>
<data name="TradeOfferFailed" xml:space="preserve">
<value>Не удалось отправить предложение о сделке боту {0} ({1}), переходим в...</value>
<comment>{0} will be replaced by steam ID (number), {1} will be replaced by user's nickname'</comment>
</data>
<data name="ActivelyMatchingSomeConfirmationsFailed" xml:space="preserve">
<value>Некоторые подтверждения не удались - примерно {0} трейдов из {1} были успешно отправлены.</value>
<comment>{0} will be replaced by amount of the trade offers that succeeded (number), {1} will be replaced by amount of the trade offers that were supposed to be sent in total (number)</comment>
</data>
</root>

View File

@@ -0,0 +1,85 @@
<?xml version="1.0" encoding="utf-8"?>
<root>
<xsd:schema xmlns:xsd="http://www.w3.org/2001/XMLSchema" xmlns:msdata="urn:schemas-microsoft-com:xml-msdata" xmlns="" id="root">
<xsd:import namespace="http://www.w3.org/XML/1998/namespace"/>
<xsd:element name="root" msdata:IsDataSet="true">
<xsd:complexType>
<xsd:choice maxOccurs="unbounded">
<xsd:element name="metadata">
<xsd:complexType>
<xsd:sequence>
<xsd:element name="value" type="xsd:string" minOccurs="0"/>
</xsd:sequence>
<xsd:attribute name="name" use="required" type="xsd:string"/>
<xsd:attribute name="type" type="xsd:string"/>
<xsd:attribute name="mimetype" type="xsd:string"/>
<xsd:attribute ref="xml:space"/>
</xsd:complexType>
</xsd:element>
<xsd:element name="assembly">
<xsd:complexType>
<xsd:attribute name="alias" type="xsd:string"/>
<xsd:attribute name="name" type="xsd:string"/>
</xsd:complexType>
</xsd:element>
<xsd:element name="data">
<xsd:complexType>
<xsd:sequence>
<xsd:element name="value" type="xsd:string" minOccurs="0" msdata:Ordinal="1"/>
<xsd:element name="comment" type="xsd:string" minOccurs="0" msdata:Ordinal="2"/>
</xsd:sequence>
<xsd:attribute name="name" type="xsd:string" use="required" msdata:Ordinal="1"/>
<xsd:attribute name="type" type="xsd:string" msdata:Ordinal="3"/>
<xsd:attribute name="mimetype" type="xsd:string" msdata:Ordinal="4"/>
<xsd:attribute ref="xml:space"/>
</xsd:complexType>
</xsd:element>
<xsd:element name="resheader">
<xsd:complexType>
<xsd:sequence>
<xsd:element name="value" type="xsd:string" minOccurs="0" msdata:Ordinal="1"/>
</xsd:sequence>
<xsd:attribute name="name" type="xsd:string" use="required"/>
</xsd:complexType>
</xsd:element>
</xsd:choice>
</xsd:complexType>
</xsd:element>
</xsd:schema>
<resheader name="resmimetype">
<value>text/microsoft-resx</value>
</resheader>
<resheader name="version">
<value>2.0</value>
</resheader>
<resheader name="reader">
<value>System.Resources.ResXResourceReader, System.Windows.Forms, Version=4.0.0.0, Culture=neutral,
PublicKeyToken=b77a5c561934e089
</value>
</resheader>
<resheader name="writer">
<value>System.Resources.ResXResourceWriter, System.Windows.Forms, Version=4.0.0.0, Culture=neutral,
PublicKeyToken=b77a5c561934e089
</value>
</resheader>
<data name="ActivelyMatchingItemsRound" xml:space="preserve">
<value>Celkovo porovnaných {0} sad karet.</value>
<comment>{0} will be replaced by number of sets traded</comment>
</data>
<data name="ListingAnnouncing" xml:space="preserve">
<value>Oznámenie {0} ({1}) s inventárom v ktorom je {2} položiek na zozname...</value>
<comment>{0} will be replaced by steam ID (number), {1} will be replaced by user's nickname, {2} will be replaced with number of items in the inventory</comment>
</data>
<data name="MatchingFound" xml:space="preserve">
<value>Zhodné s celkom {0} položiek s botom {1} ({2}), posielanie obchodnej ponuky...</value>
<comment>{0} will be replaced by number of items matched, {1} will be replaced by steam ID (number), {2} will be replaced by user's nickname</comment>
</data>
<data name="TradeOfferFailed" xml:space="preserve">
<value>Nepodarilo se odoslať obchodnú ponuku pre bota {0} ({1}), pokračujem...</value>
<comment>{0} will be replaced by steam ID (number), {1} will be replaced by user's nickname'</comment>
</data>
<data name="ActivelyMatchingSomeConfirmationsFailed" xml:space="preserve">
<value>Niektoré potvrdenia sa nepodarili, úspešne bolo poslaných približne {0} z {1} obchodov.</value>
<comment>{0} will be replaced by amount of the trade offers that succeeded (number), {1} will be replaced by amount of the trade offers that were supposed to be sent in total (number)</comment>
</data>
</root>

View File

@@ -0,0 +1,69 @@
<?xml version="1.0" encoding="utf-8"?>
<root>
<xsd:schema xmlns:xsd="http://www.w3.org/2001/XMLSchema" xmlns:msdata="urn:schemas-microsoft-com:xml-msdata" xmlns="" id="root">
<xsd:import namespace="http://www.w3.org/XML/1998/namespace"/>
<xsd:element name="root" msdata:IsDataSet="true">
<xsd:complexType>
<xsd:choice maxOccurs="unbounded">
<xsd:element name="metadata">
<xsd:complexType>
<xsd:sequence>
<xsd:element name="value" type="xsd:string" minOccurs="0"/>
</xsd:sequence>
<xsd:attribute name="name" use="required" type="xsd:string"/>
<xsd:attribute name="type" type="xsd:string"/>
<xsd:attribute name="mimetype" type="xsd:string"/>
<xsd:attribute ref="xml:space"/>
</xsd:complexType>
</xsd:element>
<xsd:element name="assembly">
<xsd:complexType>
<xsd:attribute name="alias" type="xsd:string"/>
<xsd:attribute name="name" type="xsd:string"/>
</xsd:complexType>
</xsd:element>
<xsd:element name="data">
<xsd:complexType>
<xsd:sequence>
<xsd:element name="value" type="xsd:string" minOccurs="0" msdata:Ordinal="1"/>
<xsd:element name="comment" type="xsd:string" minOccurs="0" msdata:Ordinal="2"/>
</xsd:sequence>
<xsd:attribute name="name" type="xsd:string" use="required" msdata:Ordinal="1"/>
<xsd:attribute name="type" type="xsd:string" msdata:Ordinal="3"/>
<xsd:attribute name="mimetype" type="xsd:string" msdata:Ordinal="4"/>
<xsd:attribute ref="xml:space"/>
</xsd:complexType>
</xsd:element>
<xsd:element name="resheader">
<xsd:complexType>
<xsd:sequence>
<xsd:element name="value" type="xsd:string" minOccurs="0" msdata:Ordinal="1"/>
</xsd:sequence>
<xsd:attribute name="name" type="xsd:string" use="required"/>
</xsd:complexType>
</xsd:element>
</xsd:choice>
</xsd:complexType>
</xsd:element>
</xsd:schema>
<resheader name="resmimetype">
<value>text/microsoft-resx</value>
</resheader>
<resheader name="version">
<value>2.0</value>
</resheader>
<resheader name="reader">
<value>System.Resources.ResXResourceReader, System.Windows.Forms, Version=4.0.0.0, Culture=neutral,
PublicKeyToken=b77a5c561934e089
</value>
</resheader>
<resheader name="writer">
<value>System.Resources.ResXResourceWriter, System.Windows.Forms, Version=4.0.0.0, Culture=neutral,
PublicKeyToken=b77a5c561934e089
</value>
</resheader>
<data name="ActivelyMatchingItemsRound" xml:space="preserve">
<value>Složeno je ukupno {0} par/ova u ovoj rundi.</value>
<comment>{0} will be replaced by number of sets traded</comment>
</data>
</root>

View File

@@ -0,0 +1,65 @@
<?xml version="1.0" encoding="utf-8"?>
<root>
<xsd:schema xmlns:xsd="http://www.w3.org/2001/XMLSchema" xmlns:msdata="urn:schemas-microsoft-com:xml-msdata" xmlns="" id="root">
<xsd:import namespace="http://www.w3.org/XML/1998/namespace"/>
<xsd:element name="root" msdata:IsDataSet="true">
<xsd:complexType>
<xsd:choice maxOccurs="unbounded">
<xsd:element name="metadata">
<xsd:complexType>
<xsd:sequence>
<xsd:element name="value" type="xsd:string" minOccurs="0"/>
</xsd:sequence>
<xsd:attribute name="name" use="required" type="xsd:string"/>
<xsd:attribute name="type" type="xsd:string"/>
<xsd:attribute name="mimetype" type="xsd:string"/>
<xsd:attribute ref="xml:space"/>
</xsd:complexType>
</xsd:element>
<xsd:element name="assembly">
<xsd:complexType>
<xsd:attribute name="alias" type="xsd:string"/>
<xsd:attribute name="name" type="xsd:string"/>
</xsd:complexType>
</xsd:element>
<xsd:element name="data">
<xsd:complexType>
<xsd:sequence>
<xsd:element name="value" type="xsd:string" minOccurs="0" msdata:Ordinal="1"/>
<xsd:element name="comment" type="xsd:string" minOccurs="0" msdata:Ordinal="2"/>
</xsd:sequence>
<xsd:attribute name="name" type="xsd:string" use="required" msdata:Ordinal="1"/>
<xsd:attribute name="type" type="xsd:string" msdata:Ordinal="3"/>
<xsd:attribute name="mimetype" type="xsd:string" msdata:Ordinal="4"/>
<xsd:attribute ref="xml:space"/>
</xsd:complexType>
</xsd:element>
<xsd:element name="resheader">
<xsd:complexType>
<xsd:sequence>
<xsd:element name="value" type="xsd:string" minOccurs="0" msdata:Ordinal="1"/>
</xsd:sequence>
<xsd:attribute name="name" type="xsd:string" use="required"/>
</xsd:complexType>
</xsd:element>
</xsd:choice>
</xsd:complexType>
</xsd:element>
</xsd:schema>
<resheader name="resmimetype">
<value>text/microsoft-resx</value>
</resheader>
<resheader name="version">
<value>2.0</value>
</resheader>
<resheader name="reader">
<value>System.Resources.ResXResourceReader, System.Windows.Forms, Version=4.0.0.0, Culture=neutral,
PublicKeyToken=b77a5c561934e089
</value>
</resheader>
<resheader name="writer">
<value>System.Resources.ResXResourceWriter, System.Windows.Forms, Version=4.0.0.0, Culture=neutral,
PublicKeyToken=b77a5c561934e089
</value>
</resheader>
</root>

View File

@@ -0,0 +1,65 @@
<?xml version="1.0" encoding="utf-8"?>
<root>
<xsd:schema xmlns:xsd="http://www.w3.org/2001/XMLSchema" xmlns:msdata="urn:schemas-microsoft-com:xml-msdata" xmlns="" id="root">
<xsd:import namespace="http://www.w3.org/XML/1998/namespace"/>
<xsd:element name="root" msdata:IsDataSet="true">
<xsd:complexType>
<xsd:choice maxOccurs="unbounded">
<xsd:element name="metadata">
<xsd:complexType>
<xsd:sequence>
<xsd:element name="value" type="xsd:string" minOccurs="0"/>
</xsd:sequence>
<xsd:attribute name="name" use="required" type="xsd:string"/>
<xsd:attribute name="type" type="xsd:string"/>
<xsd:attribute name="mimetype" type="xsd:string"/>
<xsd:attribute ref="xml:space"/>
</xsd:complexType>
</xsd:element>
<xsd:element name="assembly">
<xsd:complexType>
<xsd:attribute name="alias" type="xsd:string"/>
<xsd:attribute name="name" type="xsd:string"/>
</xsd:complexType>
</xsd:element>
<xsd:element name="data">
<xsd:complexType>
<xsd:sequence>
<xsd:element name="value" type="xsd:string" minOccurs="0" msdata:Ordinal="1"/>
<xsd:element name="comment" type="xsd:string" minOccurs="0" msdata:Ordinal="2"/>
</xsd:sequence>
<xsd:attribute name="name" type="xsd:string" use="required" msdata:Ordinal="1"/>
<xsd:attribute name="type" type="xsd:string" msdata:Ordinal="3"/>
<xsd:attribute name="mimetype" type="xsd:string" msdata:Ordinal="4"/>
<xsd:attribute ref="xml:space"/>
</xsd:complexType>
</xsd:element>
<xsd:element name="resheader">
<xsd:complexType>
<xsd:sequence>
<xsd:element name="value" type="xsd:string" minOccurs="0" msdata:Ordinal="1"/>
</xsd:sequence>
<xsd:attribute name="name" type="xsd:string" use="required"/>
</xsd:complexType>
</xsd:element>
</xsd:choice>
</xsd:complexType>
</xsd:element>
</xsd:schema>
<resheader name="resmimetype">
<value>text/microsoft-resx</value>
</resheader>
<resheader name="version">
<value>2.0</value>
</resheader>
<resheader name="reader">
<value>System.Resources.ResXResourceReader, System.Windows.Forms, Version=4.0.0.0, Culture=neutral,
PublicKeyToken=b77a5c561934e089
</value>
</resheader>
<resheader name="writer">
<value>System.Resources.ResXResourceWriter, System.Windows.Forms, Version=4.0.0.0, Culture=neutral,
PublicKeyToken=b77a5c561934e089
</value>
</resheader>
</root>

View File

@@ -0,0 +1,85 @@
<?xml version="1.0" encoding="utf-8"?>
<root>
<xsd:schema xmlns:xsd="http://www.w3.org/2001/XMLSchema" xmlns:msdata="urn:schemas-microsoft-com:xml-msdata" xmlns="" id="root">
<xsd:import namespace="http://www.w3.org/XML/1998/namespace"/>
<xsd:element name="root" msdata:IsDataSet="true">
<xsd:complexType>
<xsd:choice maxOccurs="unbounded">
<xsd:element name="metadata">
<xsd:complexType>
<xsd:sequence>
<xsd:element name="value" type="xsd:string" minOccurs="0"/>
</xsd:sequence>
<xsd:attribute name="name" use="required" type="xsd:string"/>
<xsd:attribute name="type" type="xsd:string"/>
<xsd:attribute name="mimetype" type="xsd:string"/>
<xsd:attribute ref="xml:space"/>
</xsd:complexType>
</xsd:element>
<xsd:element name="assembly">
<xsd:complexType>
<xsd:attribute name="alias" type="xsd:string"/>
<xsd:attribute name="name" type="xsd:string"/>
</xsd:complexType>
</xsd:element>
<xsd:element name="data">
<xsd:complexType>
<xsd:sequence>
<xsd:element name="value" type="xsd:string" minOccurs="0" msdata:Ordinal="1"/>
<xsd:element name="comment" type="xsd:string" minOccurs="0" msdata:Ordinal="2"/>
</xsd:sequence>
<xsd:attribute name="name" type="xsd:string" use="required" msdata:Ordinal="1"/>
<xsd:attribute name="type" type="xsd:string" msdata:Ordinal="3"/>
<xsd:attribute name="mimetype" type="xsd:string" msdata:Ordinal="4"/>
<xsd:attribute ref="xml:space"/>
</xsd:complexType>
</xsd:element>
<xsd:element name="resheader">
<xsd:complexType>
<xsd:sequence>
<xsd:element name="value" type="xsd:string" minOccurs="0" msdata:Ordinal="1"/>
</xsd:sequence>
<xsd:attribute name="name" type="xsd:string" use="required"/>
</xsd:complexType>
</xsd:element>
</xsd:choice>
</xsd:complexType>
</xsd:element>
</xsd:schema>
<resheader name="resmimetype">
<value>text/microsoft-resx</value>
</resheader>
<resheader name="version">
<value>2.0</value>
</resheader>
<resheader name="reader">
<value>System.Resources.ResXResourceReader, System.Windows.Forms, Version=4.0.0.0, Culture=neutral,
PublicKeyToken=b77a5c561934e089
</value>
</resheader>
<resheader name="writer">
<value>System.Resources.ResXResourceWriter, System.Windows.Forms, Version=4.0.0.0, Culture=neutral,
PublicKeyToken=b77a5c561934e089
</value>
</resheader>
<data name="ActivelyMatchingItemsRound" xml:space="preserve">
<value>Bu turda {0} eşleşme oldu.</value>
<comment>{0} will be replaced by number of sets traded</comment>
</data>
<data name="ListingAnnouncing" xml:space="preserve">
<value>Listelemede toplam {2} öğeden oluşan envanterle {0} ({1}) duyuruldu...</value>
<comment>{0} will be replaced by steam ID (number), {1} will be replaced by user's nickname, {2} will be replaced with number of items in the inventory</comment>
</data>
<data name="MatchingFound" xml:space="preserve">
<value>Bot {1} ({2}) ile toplam {0} öğe eşleştirildi, takas teklifi gönderiliyor...</value>
<comment>{0} will be replaced by number of items matched, {1} will be replaced by steam ID (number), {2} will be replaced by user's nickname</comment>
</data>
<data name="TradeOfferFailed" xml:space="preserve">
<value>{0} ({1}) botuna takas teklifi gönderilemedi, devam ediliyor...</value>
<comment>{0} will be replaced by steam ID (number), {1} will be replaced by user's nickname'</comment>
</data>
<data name="ActivelyMatchingSomeConfirmationsFailed" xml:space="preserve">
<value>Bazı onaylar başarısız oldu, {1} takastan yaklaşık {0} tanesi başarıyla gönderildi.</value>
<comment>{0} will be replaced by amount of the trade offers that succeeded (number), {1} will be replaced by amount of the trade offers that were supposed to be sent in total (number)</comment>
</data>
</root>

View File

@@ -0,0 +1,85 @@
<?xml version="1.0" encoding="utf-8"?>
<root>
<xsd:schema xmlns:xsd="http://www.w3.org/2001/XMLSchema" xmlns:msdata="urn:schemas-microsoft-com:xml-msdata" xmlns="" id="root">
<xsd:import namespace="http://www.w3.org/XML/1998/namespace"/>
<xsd:element name="root" msdata:IsDataSet="true">
<xsd:complexType>
<xsd:choice maxOccurs="unbounded">
<xsd:element name="metadata">
<xsd:complexType>
<xsd:sequence>
<xsd:element name="value" type="xsd:string" minOccurs="0"/>
</xsd:sequence>
<xsd:attribute name="name" use="required" type="xsd:string"/>
<xsd:attribute name="type" type="xsd:string"/>
<xsd:attribute name="mimetype" type="xsd:string"/>
<xsd:attribute ref="xml:space"/>
</xsd:complexType>
</xsd:element>
<xsd:element name="assembly">
<xsd:complexType>
<xsd:attribute name="alias" type="xsd:string"/>
<xsd:attribute name="name" type="xsd:string"/>
</xsd:complexType>
</xsd:element>
<xsd:element name="data">
<xsd:complexType>
<xsd:sequence>
<xsd:element name="value" type="xsd:string" minOccurs="0" msdata:Ordinal="1"/>
<xsd:element name="comment" type="xsd:string" minOccurs="0" msdata:Ordinal="2"/>
</xsd:sequence>
<xsd:attribute name="name" type="xsd:string" use="required" msdata:Ordinal="1"/>
<xsd:attribute name="type" type="xsd:string" msdata:Ordinal="3"/>
<xsd:attribute name="mimetype" type="xsd:string" msdata:Ordinal="4"/>
<xsd:attribute ref="xml:space"/>
</xsd:complexType>
</xsd:element>
<xsd:element name="resheader">
<xsd:complexType>
<xsd:sequence>
<xsd:element name="value" type="xsd:string" minOccurs="0" msdata:Ordinal="1"/>
</xsd:sequence>
<xsd:attribute name="name" type="xsd:string" use="required"/>
</xsd:complexType>
</xsd:element>
</xsd:choice>
</xsd:complexType>
</xsd:element>
</xsd:schema>
<resheader name="resmimetype">
<value>text/microsoft-resx</value>
</resheader>
<resheader name="version">
<value>2.0</value>
</resheader>
<resheader name="reader">
<value>System.Resources.ResXResourceReader, System.Windows.Forms, Version=4.0.0.0, Culture=neutral,
PublicKeyToken=b77a5c561934e089
</value>
</resheader>
<resheader name="writer">
<value>System.Resources.ResXResourceWriter, System.Windows.Forms, Version=4.0.0.0, Culture=neutral,
PublicKeyToken=b77a5c561934e089
</value>
</resheader>
<data name="ActivelyMatchingItemsRound" xml:space="preserve">
<value>Загальна кількість наборів у цьому раунді: {0}.</value>
<comment>{0} will be replaced by number of sets traded</comment>
</data>
<data name="ListingAnnouncing" xml:space="preserve">
<value>Оголошення від {0} ({1}) із загальною кількістю товарів у списку: {2}...</value>
<comment>{0} will be replaced by steam ID (number), {1} will be replaced by user's nickname, {2} will be replaced with number of items in the inventory</comment>
</data>
<data name="MatchingFound" xml:space="preserve">
<value>Всього зібрано {0} предметів за допомогою бота {1} ({2}), надсилаю пропозицію обміну...</value>
<comment>{0} will be replaced by number of items matched, {1} will be replaced by steam ID (number), {2} will be replaced by user's nickname</comment>
</data>
<data name="TradeOfferFailed" xml:space="preserve">
<value>Не вдалося відправити пропозицію обміну боту {0} ({1}), йдемо далі...</value>
<comment>{0} will be replaced by steam ID (number), {1} will be replaced by user's nickname'</comment>
</data>
<data name="ActivelyMatchingSomeConfirmationsFailed" xml:space="preserve">
<value>Деякі підтвердження завершилися невдачею, приблизно {0} з {1} угод були відправлені успішно.</value>
<comment>{0} will be replaced by amount of the trade offers that succeeded (number), {1} will be replaced by amount of the trade offers that were supposed to be sent in total (number)</comment>
</data>
</root>

View File

@@ -0,0 +1,85 @@
<?xml version="1.0" encoding="utf-8"?>
<root>
<xsd:schema xmlns:xsd="http://www.w3.org/2001/XMLSchema" xmlns:msdata="urn:schemas-microsoft-com:xml-msdata" xmlns="" id="root">
<xsd:import namespace="http://www.w3.org/XML/1998/namespace"/>
<xsd:element name="root" msdata:IsDataSet="true">
<xsd:complexType>
<xsd:choice maxOccurs="unbounded">
<xsd:element name="metadata">
<xsd:complexType>
<xsd:sequence>
<xsd:element name="value" type="xsd:string" minOccurs="0"/>
</xsd:sequence>
<xsd:attribute name="name" use="required" type="xsd:string"/>
<xsd:attribute name="type" type="xsd:string"/>
<xsd:attribute name="mimetype" type="xsd:string"/>
<xsd:attribute ref="xml:space"/>
</xsd:complexType>
</xsd:element>
<xsd:element name="assembly">
<xsd:complexType>
<xsd:attribute name="alias" type="xsd:string"/>
<xsd:attribute name="name" type="xsd:string"/>
</xsd:complexType>
</xsd:element>
<xsd:element name="data">
<xsd:complexType>
<xsd:sequence>
<xsd:element name="value" type="xsd:string" minOccurs="0" msdata:Ordinal="1"/>
<xsd:element name="comment" type="xsd:string" minOccurs="0" msdata:Ordinal="2"/>
</xsd:sequence>
<xsd:attribute name="name" type="xsd:string" use="required" msdata:Ordinal="1"/>
<xsd:attribute name="type" type="xsd:string" msdata:Ordinal="3"/>
<xsd:attribute name="mimetype" type="xsd:string" msdata:Ordinal="4"/>
<xsd:attribute ref="xml:space"/>
</xsd:complexType>
</xsd:element>
<xsd:element name="resheader">
<xsd:complexType>
<xsd:sequence>
<xsd:element name="value" type="xsd:string" minOccurs="0" msdata:Ordinal="1"/>
</xsd:sequence>
<xsd:attribute name="name" type="xsd:string" use="required"/>
</xsd:complexType>
</xsd:element>
</xsd:choice>
</xsd:complexType>
</xsd:element>
</xsd:schema>
<resheader name="resmimetype">
<value>text/microsoft-resx</value>
</resheader>
<resheader name="version">
<value>2.0</value>
</resheader>
<resheader name="reader">
<value>System.Resources.ResXResourceReader, System.Windows.Forms, Version=4.0.0.0, Culture=neutral,
PublicKeyToken=b77a5c561934e089
</value>
</resheader>
<resheader name="writer">
<value>System.Resources.ResXResourceWriter, System.Windows.Forms, Version=4.0.0.0, Culture=neutral,
PublicKeyToken=b77a5c561934e089
</value>
</resheader>
<data name="ActivelyMatchingItemsRound" xml:space="preserve">
<value>Đã soát tổng cộng {0} bộ trong vòng này.</value>
<comment>{0} will be replaced by number of sets traded</comment>
</data>
<data name="ListingAnnouncing" xml:space="preserve">
<value>Đang thông báo {0} ({1}) với kho đồ bao gồm {2} vật phẩm lên danh sách...</value>
<comment>{0} will be replaced by steam ID (number), {1} will be replaced by user's nickname, {2} will be replaced with number of items in the inventory</comment>
</data>
<data name="MatchingFound" xml:space="preserve">
<value>Đã soát tổng cộng {0} vật phẩm với bot {1} ({2}), đang gửi đề nghị trao đổi...</value>
<comment>{0} will be replaced by number of items matched, {1} will be replaced by steam ID (number), {2} will be replaced by user's nickname</comment>
</data>
<data name="TradeOfferFailed" xml:space="preserve">
<value>Thất bại khi gửi đề nghị trao đổi tới bot {0} ({1}), đang tiếp tục...</value>
<comment>{0} will be replaced by steam ID (number), {1} will be replaced by user's nickname'</comment>
</data>
<data name="ActivelyMatchingSomeConfirmationsFailed" xml:space="preserve">
<value>Một số xác nhận thất bại, khoảng {0} trong số {1} giao dịch đã được gửi thành công.</value>
<comment>{0} will be replaced by amount of the trade offers that succeeded (number), {1} will be replaced by amount of the trade offers that were supposed to be sent in total (number)</comment>
</data>
</root>

View File

@@ -0,0 +1,85 @@
<?xml version="1.0" encoding="utf-8"?>
<root>
<xsd:schema xmlns:xsd="http://www.w3.org/2001/XMLSchema" xmlns:msdata="urn:schemas-microsoft-com:xml-msdata" xmlns="" id="root">
<xsd:import namespace="http://www.w3.org/XML/1998/namespace"/>
<xsd:element name="root" msdata:IsDataSet="true">
<xsd:complexType>
<xsd:choice maxOccurs="unbounded">
<xsd:element name="metadata">
<xsd:complexType>
<xsd:sequence>
<xsd:element name="value" type="xsd:string" minOccurs="0"/>
</xsd:sequence>
<xsd:attribute name="name" use="required" type="xsd:string"/>
<xsd:attribute name="type" type="xsd:string"/>
<xsd:attribute name="mimetype" type="xsd:string"/>
<xsd:attribute ref="xml:space"/>
</xsd:complexType>
</xsd:element>
<xsd:element name="assembly">
<xsd:complexType>
<xsd:attribute name="alias" type="xsd:string"/>
<xsd:attribute name="name" type="xsd:string"/>
</xsd:complexType>
</xsd:element>
<xsd:element name="data">
<xsd:complexType>
<xsd:sequence>
<xsd:element name="value" type="xsd:string" minOccurs="0" msdata:Ordinal="1"/>
<xsd:element name="comment" type="xsd:string" minOccurs="0" msdata:Ordinal="2"/>
</xsd:sequence>
<xsd:attribute name="name" type="xsd:string" use="required" msdata:Ordinal="1"/>
<xsd:attribute name="type" type="xsd:string" msdata:Ordinal="3"/>
<xsd:attribute name="mimetype" type="xsd:string" msdata:Ordinal="4"/>
<xsd:attribute ref="xml:space"/>
</xsd:complexType>
</xsd:element>
<xsd:element name="resheader">
<xsd:complexType>
<xsd:sequence>
<xsd:element name="value" type="xsd:string" minOccurs="0" msdata:Ordinal="1"/>
</xsd:sequence>
<xsd:attribute name="name" type="xsd:string" use="required"/>
</xsd:complexType>
</xsd:element>
</xsd:choice>
</xsd:complexType>
</xsd:element>
</xsd:schema>
<resheader name="resmimetype">
<value>text/microsoft-resx</value>
</resheader>
<resheader name="version">
<value>2.0</value>
</resheader>
<resheader name="reader">
<value>System.Resources.ResXResourceReader, System.Windows.Forms, Version=4.0.0.0, Culture=neutral,
PublicKeyToken=b77a5c561934e089
</value>
</resheader>
<resheader name="writer">
<value>System.Resources.ResXResourceWriter, System.Windows.Forms, Version=4.0.0.0, Culture=neutral,
PublicKeyToken=b77a5c561934e089
</value>
</resheader>
<data name="ActivelyMatchingItemsRound" xml:space="preserve">
<value>本轮共匹配 {0} 套物品。</value>
<comment>{0} will be replaced by number of sets traded</comment>
</data>
<data name="ListingAnnouncing" xml:space="preserve">
<value>正在列表中发布 {0}{1})库存中共 {2} 件物品…</value>
<comment>{0} will be replaced by steam ID (number), {1} will be replaced by user's nickname, {2} will be replaced with number of items in the inventory</comment>
</data>
<data name="MatchingFound" xml:space="preserve">
<value>与机器人 {1}{2})匹配了共 {0} 件物品,正在发送交易报价…</value>
<comment>{0} will be replaced by number of items matched, {1} will be replaced by steam ID (number), {2} will be replaced by user's nickname</comment>
</data>
<data name="TradeOfferFailed" xml:space="preserve">
<value>向机器人 {0}{1})发送交易报价失败,正在继续…</value>
<comment>{0} will be replaced by steam ID (number), {1} will be replaced by user's nickname'</comment>
</data>
<data name="ActivelyMatchingSomeConfirmationsFailed" xml:space="preserve">
<value>部分确认失败,{1} 个交易中约有 {0} 个发送成功。</value>
<comment>{0} will be replaced by amount of the trade offers that succeeded (number), {1} will be replaced by amount of the trade offers that were supposed to be sent in total (number)</comment>
</data>
</root>

View File

@@ -0,0 +1,69 @@
<?xml version="1.0" encoding="utf-8"?>
<root>
<xsd:schema xmlns:xsd="http://www.w3.org/2001/XMLSchema" xmlns:msdata="urn:schemas-microsoft-com:xml-msdata" xmlns="" id="root">
<xsd:import namespace="http://www.w3.org/XML/1998/namespace"/>
<xsd:element name="root" msdata:IsDataSet="true">
<xsd:complexType>
<xsd:choice maxOccurs="unbounded">
<xsd:element name="metadata">
<xsd:complexType>
<xsd:sequence>
<xsd:element name="value" type="xsd:string" minOccurs="0"/>
</xsd:sequence>
<xsd:attribute name="name" use="required" type="xsd:string"/>
<xsd:attribute name="type" type="xsd:string"/>
<xsd:attribute name="mimetype" type="xsd:string"/>
<xsd:attribute ref="xml:space"/>
</xsd:complexType>
</xsd:element>
<xsd:element name="assembly">
<xsd:complexType>
<xsd:attribute name="alias" type="xsd:string"/>
<xsd:attribute name="name" type="xsd:string"/>
</xsd:complexType>
</xsd:element>
<xsd:element name="data">
<xsd:complexType>
<xsd:sequence>
<xsd:element name="value" type="xsd:string" minOccurs="0" msdata:Ordinal="1"/>
<xsd:element name="comment" type="xsd:string" minOccurs="0" msdata:Ordinal="2"/>
</xsd:sequence>
<xsd:attribute name="name" type="xsd:string" use="required" msdata:Ordinal="1"/>
<xsd:attribute name="type" type="xsd:string" msdata:Ordinal="3"/>
<xsd:attribute name="mimetype" type="xsd:string" msdata:Ordinal="4"/>
<xsd:attribute ref="xml:space"/>
</xsd:complexType>
</xsd:element>
<xsd:element name="resheader">
<xsd:complexType>
<xsd:sequence>
<xsd:element name="value" type="xsd:string" minOccurs="0" msdata:Ordinal="1"/>
</xsd:sequence>
<xsd:attribute name="name" type="xsd:string" use="required"/>
</xsd:complexType>
</xsd:element>
</xsd:choice>
</xsd:complexType>
</xsd:element>
</xsd:schema>
<resheader name="resmimetype">
<value>text/microsoft-resx</value>
</resheader>
<resheader name="version">
<value>2.0</value>
</resheader>
<resheader name="reader">
<value>System.Resources.ResXResourceReader, System.Windows.Forms, Version=4.0.0.0, Culture=neutral,
PublicKeyToken=b77a5c561934e089
</value>
</resheader>
<resheader name="writer">
<value>System.Resources.ResXResourceWriter, System.Windows.Forms, Version=4.0.0.0, Culture=neutral,
PublicKeyToken=b77a5c561934e089
</value>
</resheader>
<data name="ActivelyMatchingItemsRound" xml:space="preserve">
<value>此輪共匹配 {0} 套物品。</value>
<comment>{0} will be replaced by number of sets traded</comment>
</data>
</root>

View File

@@ -0,0 +1,85 @@
<?xml version="1.0" encoding="utf-8"?>
<root>
<xsd:schema xmlns:xsd="http://www.w3.org/2001/XMLSchema" xmlns:msdata="urn:schemas-microsoft-com:xml-msdata" xmlns="" id="root">
<xsd:import namespace="http://www.w3.org/XML/1998/namespace"/>
<xsd:element name="root" msdata:IsDataSet="true">
<xsd:complexType>
<xsd:choice maxOccurs="unbounded">
<xsd:element name="metadata">
<xsd:complexType>
<xsd:sequence>
<xsd:element name="value" type="xsd:string" minOccurs="0"/>
</xsd:sequence>
<xsd:attribute name="name" use="required" type="xsd:string"/>
<xsd:attribute name="type" type="xsd:string"/>
<xsd:attribute name="mimetype" type="xsd:string"/>
<xsd:attribute ref="xml:space"/>
</xsd:complexType>
</xsd:element>
<xsd:element name="assembly">
<xsd:complexType>
<xsd:attribute name="alias" type="xsd:string"/>
<xsd:attribute name="name" type="xsd:string"/>
</xsd:complexType>
</xsd:element>
<xsd:element name="data">
<xsd:complexType>
<xsd:sequence>
<xsd:element name="value" type="xsd:string" minOccurs="0" msdata:Ordinal="1"/>
<xsd:element name="comment" type="xsd:string" minOccurs="0" msdata:Ordinal="2"/>
</xsd:sequence>
<xsd:attribute name="name" type="xsd:string" use="required" msdata:Ordinal="1"/>
<xsd:attribute name="type" type="xsd:string" msdata:Ordinal="3"/>
<xsd:attribute name="mimetype" type="xsd:string" msdata:Ordinal="4"/>
<xsd:attribute ref="xml:space"/>
</xsd:complexType>
</xsd:element>
<xsd:element name="resheader">
<xsd:complexType>
<xsd:sequence>
<xsd:element name="value" type="xsd:string" minOccurs="0" msdata:Ordinal="1"/>
</xsd:sequence>
<xsd:attribute name="name" type="xsd:string" use="required"/>
</xsd:complexType>
</xsd:element>
</xsd:choice>
</xsd:complexType>
</xsd:element>
</xsd:schema>
<resheader name="resmimetype">
<value>text/microsoft-resx</value>
</resheader>
<resheader name="version">
<value>2.0</value>
</resheader>
<resheader name="reader">
<value>System.Resources.ResXResourceReader, System.Windows.Forms, Version=4.0.0.0, Culture=neutral,
PublicKeyToken=b77a5c561934e089
</value>
</resheader>
<resheader name="writer">
<value>System.Resources.ResXResourceWriter, System.Windows.Forms, Version=4.0.0.0, Culture=neutral,
PublicKeyToken=b77a5c561934e089
</value>
</resheader>
<data name="ActivelyMatchingItemsRound" xml:space="preserve">
<value>此輪共比對 {0} 套物品。</value>
<comment>{0} will be replaced by number of sets traded</comment>
</data>
<data name="ListingAnnouncing" xml:space="preserve">
<value>正在清單中發布 {0}{1})物品庫中的共 {2} 個物品…</value>
<comment>{0} will be replaced by steam ID (number), {1} will be replaced by user's nickname, {2} will be replaced with number of items in the inventory</comment>
</data>
<data name="MatchingFound" xml:space="preserve">
<value>與 Bot {1}{2})比對到共 {0} 個物品,正在發送交易提案…</value>
<comment>{0} will be replaced by number of items matched, {1} will be replaced by steam ID (number), {2} will be replaced by user's nickname</comment>
</data>
<data name="TradeOfferFailed" xml:space="preserve">
<value>無法向 Bot {0}{1})發送交易提案,正在繼續…</value>
<comment>{0} will be replaced by steam ID (number), {1} will be replaced by user's nickname'</comment>
</data>
<data name="ActivelyMatchingSomeConfirmationsFailed" xml:space="preserve">
<value>部分交易失敗,{1} 個交易中約 {0} 個發送成功。</value>
<comment>{0} will be replaced by amount of the trade offers that succeeded (number), {1} will be replaced by amount of the trade offers that were supposed to be sent in total (number)</comment>
</data>
</root>

File diff suppressed because it is too large Load Diff

View File

@@ -0,0 +1,31 @@
<Project Sdk="Microsoft.NET.Sdk">
<PropertyGroup>
<OutputType>Library</OutputType>
</PropertyGroup>
<ItemGroup>
<PackageReference Include="ConfigureAwaitChecker.Analyzer" PrivateAssets="all" />
<PackageReference Include="JetBrains.Annotations" PrivateAssets="all" />
<PackageReference Include="SteamKit2" IncludeAssets="compile" />
<PackageReference Include="System.Composition.AttributedModel" IncludeAssets="compile" />
</ItemGroup>
<ItemGroup>
<ProjectReference Include="..\ArchiSteamFarm\ArchiSteamFarm.csproj" ExcludeAssets="all" Private="false" />
</ItemGroup>
<ItemGroup>
<EmbeddedResource Update="Localization\Strings.resx">
<Generator>ResXFileCodeGenerator</Generator>
<LastGenOutput>Strings.Designer.cs</LastGenOutput>
</EmbeddedResource>
</ItemGroup>
<ItemGroup>
<Compile Update="Localization\Strings.Designer.cs">
<AutoGen>True</AutoGen>
<DependentUpon>Strings.resx</DependentUpon>
<DesignTime>True</DesignTime>
</Compile>
</ItemGroup>
</Project>

View File

@@ -0,0 +1,24 @@
// _ _ _ ____ _ _____
// / \ _ __ ___ | |__ (_)/ ___| | |_ ___ __ _ _ __ ___ | ___|__ _ _ __ _ __ ___
// / _ \ | '__|/ __|| '_ \ | |\___ \ | __|/ _ \ / _` || '_ ` _ \ | |_ / _` || '__|| '_ ` _ \
// / ___ \ | | | (__ | | | || | ___) || |_| __/| (_| || | | | | || _|| (_| || | | | | | | |
// /_/ \_\|_| \___||_| |_||_||____/ \__|\___| \__,_||_| |_| |_||_| \__,_||_| |_| |_| |_|
// |
// Copyright 2015-2024 Łukasz "JustArchi" Domeradzki
// Contact: JustArchi@JustArchi.net
// |
// Licensed under the Apache License, Version 2.0 (the "License");
// you may not use this file except in compliance with the License.
// You may obtain a copy of the License at
// |
// http://www.apache.org/licenses/LICENSE-2.0
// |
// Unless required by applicable law or agreed to in writing, software
// distributed under the License is distributed on an "AS IS" BASIS,
// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
// See the License for the specific language governing permissions and
// limitations under the License.
using System;
[assembly: CLSCompliant(false)]

View File

@@ -0,0 +1,399 @@
// _ _ _ ____ _ _____
// / \ _ __ ___ | |__ (_)/ ___| | |_ ___ __ _ _ __ ___ | ___|__ _ _ __ _ __ ___
// / _ \ | '__|/ __|| '_ \ | |\___ \ | __|/ _ \ / _` || '_ ` _ \ | |_ / _` || '__|| '_ ` _ \
// / ___ \ | | | (__ | | | || | ___) || |_| __/| (_| || | | | | || _|| (_| || | | | | | | |
// /_/ \_\|_| \___||_| |_||_||____/ \__|\___| \__,_||_| |_| |_||_| \__,_||_| |_| |_| |_|
// |
// Copyright 2015-2024 Łukasz "JustArchi" Domeradzki
// Contact: JustArchi@JustArchi.net
// |
// Licensed under the Apache License, Version 2.0 (the "License");
// you may not use this file except in compliance with the License.
// You may obtain a copy of the License at
// |
// http://www.apache.org/licenses/LICENSE-2.0
// |
// Unless required by applicable law or agreed to in writing, software
// distributed under the License is distributed on an "AS IS" BASIS,
// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
// See the License for the specific language governing permissions and
// limitations under the License.
using System;
using System.Collections.Generic;
using System.ComponentModel;
using System.Globalization;
using System.IO;
using System.Linq;
using System.Threading.Tasks;
using ArchiSteamFarm.Core;
using ArchiSteamFarm.Helpers.Json;
using ArchiSteamFarm.Localization;
using ArchiSteamFarm.Steam;
using SteamKit2;
using SteamKit2.Internal;
namespace ArchiSteamFarm.OfficialPlugins.MobileAuthenticator;
internal static class Commands {
private const byte MaxFinalizationAttempts = 900 / Steam.Security.MobileAuthenticator.CodeInterval;
internal static async Task<string?> OnBotCommand(Bot bot, EAccess access, string message, string[] args, ulong steamID = 0) {
ArgumentNullException.ThrowIfNull(bot);
if (!Enum.IsDefined(access)) {
throw new InvalidEnumArgumentException(nameof(access), (int) access, typeof(EAccess));
}
ArgumentException.ThrowIfNullOrEmpty(message);
if ((args == null) || (args.Length == 0)) {
throw new ArgumentNullException(nameof(args));
}
if ((steamID != 0) && !new SteamID(steamID).IsIndividualAccount) {
throw new ArgumentOutOfRangeException(nameof(steamID));
}
switch (args.Length) {
case 1:
switch (args[0].ToUpperInvariant()) {
case "2FAFINALIZEDFORCE":
return await ResponseTwoFactorFinalized(access, bot).ConfigureAwait(false);
case "2FAINIT":
return await ResponseTwoFactorInit(access, bot).ConfigureAwait(false);
}
break;
default:
switch (args[0].ToUpperInvariant()) {
case "2FAFINALIZE" when args.Length > 2:
return await ResponseTwoFactorFinalize(access, args[1], Utilities.GetArgsAsText(message, 2), steamID).ConfigureAwait(false);
case "2FAFINALIZE":
return await ResponseTwoFactorFinalize(access, bot, args[1]).ConfigureAwait(false);
case "2FAFINALIZED" when args.Length > 2:
return await ResponseTwoFactorFinalized(access, args[1], Utilities.GetArgsAsText(message, 2), steamID).ConfigureAwait(false);
case "2FAFINALIZED":
return await ResponseTwoFactorFinalized(access, bot, args[1]).ConfigureAwait(false);
case "2FAFINALIZEDFORCE":
return await ResponseTwoFactorFinalized(access, Utilities.GetArgsAsText(args, 1, ","), steamID: steamID).ConfigureAwait(false);
case "2FAINIT":
return await ResponseTwoFactorInit(access, Utilities.GetArgsAsText(args, 1, ","), steamID).ConfigureAwait(false);
}
break;
}
return null;
}
private static async Task<string?> ResponseTwoFactorFinalize(EAccess access, Bot bot, string activationCode) {
if (!Enum.IsDefined(access)) {
throw new InvalidEnumArgumentException(nameof(access), (int) access, typeof(EAccess));
}
ArgumentNullException.ThrowIfNull(bot);
ArgumentException.ThrowIfNullOrEmpty(activationCode);
if (access < EAccess.Master) {
return access > EAccess.None ? bot.Commands.FormatBotResponse(Strings.ErrorAccessDenied) : null;
}
if (bot.HasMobileAuthenticator) {
return bot.Commands.FormatBotResponse(string.Format(CultureInfo.CurrentCulture, Strings.WarningFailedWithError, nameof(bot.HasMobileAuthenticator)));
}
if (!bot.IsConnectedAndLoggedOn) {
return bot.Commands.FormatBotResponse(Strings.BotNotConnected);
}
string maFilePath = bot.GetFilePath(Bot.EFileType.MobileAuthenticator);
string maFilePendingPath = $"{maFilePath}.PENDING";
if (!File.Exists(maFilePendingPath)) {
return bot.Commands.FormatBotResponse(Strings.NothingFound);
}
string json;
try {
json = await File.ReadAllTextAsync(maFilePendingPath).ConfigureAwait(false);
} catch (Exception e) {
bot.ArchiLogger.LogGenericException(e);
return bot.Commands.FormatBotResponse(string.Format(CultureInfo.CurrentCulture, Strings.WarningFailedWithError, e.Message));
}
if (string.IsNullOrEmpty(json)) {
return bot.Commands.FormatBotResponse(string.Format(CultureInfo.CurrentCulture, Strings.ErrorIsEmpty, nameof(json)));
}
Steam.Security.MobileAuthenticator? mobileAuthenticator = json.ToJsonObject<Steam.Security.MobileAuthenticator>();
if (mobileAuthenticator == null) {
return bot.Commands.FormatBotResponse(string.Format(CultureInfo.CurrentCulture, Strings.ErrorIsEmpty, nameof(json)));
}
mobileAuthenticator.Init(bot);
MobileAuthenticatorHandler? mobileAuthenticatorHandler = bot.GetHandler<MobileAuthenticatorHandler>();
if (mobileAuthenticatorHandler == null) {
throw new InvalidOperationException(nameof(mobileAuthenticatorHandler));
}
ulong steamTime = await mobileAuthenticator.GetSteamTime().ConfigureAwait(false);
bool successFinalizing = false;
for (byte i = 0; i < MaxFinalizationAttempts; i++) {
if (i > 0) {
steamTime += Steam.Security.MobileAuthenticator.CodeInterval;
}
string? code = mobileAuthenticator.GenerateTokenForTime(steamTime);
if (string.IsNullOrEmpty(code)) {
return bot.Commands.FormatBotResponse(string.Format(CultureInfo.CurrentCulture, Strings.WarningFailedWithError, nameof(mobileAuthenticator.GenerateTokenForTime)));
}
CTwoFactor_FinalizeAddAuthenticator_Response? response = await mobileAuthenticatorHandler.FinalizeAuthenticator(bot.SteamID, activationCode, code, steamTime).ConfigureAwait(false);
if (response == null) {
return bot.Commands.FormatBotResponse(string.Format(CultureInfo.CurrentCulture, Strings.WarningFailedWithError, nameof(mobileAuthenticatorHandler.FinalizeAuthenticator)));
}
if (response.want_more) {
// OK, whatever
continue;
}
if (!response.success) {
EResult result = (EResult) response.status;
return bot.Commands.FormatBotResponse(string.Format(CultureInfo.CurrentCulture, Strings.WarningFailedWithError, result));
}
successFinalizing = true;
break;
}
if (!successFinalizing) {
return bot.Commands.FormatBotResponse(string.Format(CultureInfo.CurrentCulture, Strings.ErrorRequestFailedTooManyTimes, MaxFinalizationAttempts));
}
if (!bot.TryImportAuthenticator(mobileAuthenticator)) {
return bot.Commands.FormatBotResponse(string.Format(CultureInfo.CurrentCulture, Strings.WarningFailedWithError, nameof(bot.TryImportAuthenticator)));
}
string maFileFinishedPath = $"{maFilePath}.NEW";
try {
File.Move(maFilePendingPath, maFileFinishedPath, true);
} catch (Exception e) {
bot.ArchiLogger.LogGenericException(e);
return bot.Commands.FormatBotResponse(string.Format(CultureInfo.CurrentCulture, Strings.WarningFailedWithError, e.Message));
}
return bot.Commands.FormatBotResponse(Strings.Done);
}
private static async Task<string?> ResponseTwoFactorFinalize(EAccess access, string botNames, string activationCode, ulong steamID = 0) {
if (!Enum.IsDefined(access)) {
throw new InvalidEnumArgumentException(nameof(access), (int) access, typeof(EAccess));
}
ArgumentException.ThrowIfNullOrEmpty(botNames);
ArgumentException.ThrowIfNullOrEmpty(activationCode);
if ((steamID != 0) && !new SteamID(steamID).IsIndividualAccount) {
throw new ArgumentOutOfRangeException(nameof(steamID));
}
HashSet<Bot>? bots = Bot.GetBots(botNames);
if ((bots == null) || (bots.Count == 0)) {
return access >= EAccess.Owner ? Steam.Interaction.Commands.FormatStaticResponse(string.Format(CultureInfo.CurrentCulture, Strings.BotNotFound, botNames)) : null;
}
IList<string?> results = await Utilities.InParallel(bots.Select(bot => ResponseTwoFactorFinalize(Steam.Interaction.Commands.GetProxyAccess(bot, access, steamID), bot, activationCode))).ConfigureAwait(false);
List<string> responses = [..results.Where(static result => !string.IsNullOrEmpty(result))];
return responses.Count > 0 ? string.Join(Environment.NewLine, responses) : null;
}
private static async Task<string?> ResponseTwoFactorFinalized(EAccess access, Bot bot, string? activationCode = null) {
if (!Enum.IsDefined(access)) {
throw new InvalidEnumArgumentException(nameof(access), (int) access, typeof(EAccess));
}
ArgumentNullException.ThrowIfNull(bot);
if (access < EAccess.Master) {
return access > EAccess.None ? bot.Commands.FormatBotResponse(Strings.ErrorAccessDenied) : null;
}
if (bot.HasMobileAuthenticator) {
return bot.Commands.FormatBotResponse(string.Format(CultureInfo.CurrentCulture, Strings.WarningFailedWithError, nameof(bot.HasMobileAuthenticator)));
}
string maFilePath = bot.GetFilePath(Bot.EFileType.MobileAuthenticator);
string maFilePendingPath = $"{maFilePath}.PENDING";
if (!File.Exists(maFilePendingPath)) {
return bot.Commands.FormatBotResponse(Strings.NothingFound);
}
string json;
try {
json = await File.ReadAllTextAsync(maFilePendingPath).ConfigureAwait(false);
} catch (Exception e) {
bot.ArchiLogger.LogGenericException(e);
return bot.Commands.FormatBotResponse(string.Format(CultureInfo.CurrentCulture, Strings.WarningFailedWithError, e.Message));
}
if (string.IsNullOrEmpty(json)) {
return bot.Commands.FormatBotResponse(string.Format(CultureInfo.CurrentCulture, Strings.ErrorIsEmpty, nameof(json)));
}
Steam.Security.MobileAuthenticator? mobileAuthenticator = json.ToJsonObject<Steam.Security.MobileAuthenticator>();
if (mobileAuthenticator == null) {
return bot.Commands.FormatBotResponse(string.Format(CultureInfo.CurrentCulture, Strings.ErrorIsEmpty, nameof(json)));
}
mobileAuthenticator.Init(bot);
if (!string.IsNullOrEmpty(activationCode)) {
string? generatedCode = await mobileAuthenticator.GenerateToken().ConfigureAwait(false);
if (generatedCode != activationCode) {
return bot.Commands.FormatBotResponse(string.Format(CultureInfo.CurrentCulture, Strings.WarningFailedWithError, $"{generatedCode} != {activationCode}"));
}
}
if (!bot.TryImportAuthenticator(mobileAuthenticator)) {
return bot.Commands.FormatBotResponse(string.Format(CultureInfo.CurrentCulture, Strings.WarningFailedWithError, nameof(bot.TryImportAuthenticator)));
}
string maFileFinishedPath = $"{maFilePath}.NEW";
try {
File.Move(maFilePendingPath, maFileFinishedPath, true);
} catch (Exception e) {
bot.ArchiLogger.LogGenericException(e);
return bot.Commands.FormatBotResponse(string.Format(CultureInfo.CurrentCulture, Strings.WarningFailedWithError, e.Message));
}
return bot.Commands.FormatBotResponse(Strings.Done);
}
private static async Task<string?> ResponseTwoFactorFinalized(EAccess access, string botNames, string? activationCode = null, ulong steamID = 0) {
if (!Enum.IsDefined(access)) {
throw new InvalidEnumArgumentException(nameof(access), (int) access, typeof(EAccess));
}
ArgumentException.ThrowIfNullOrEmpty(botNames);
if ((steamID != 0) && !new SteamID(steamID).IsIndividualAccount) {
throw new ArgumentOutOfRangeException(nameof(steamID));
}
HashSet<Bot>? bots = Bot.GetBots(botNames);
if ((bots == null) || (bots.Count == 0)) {
return access >= EAccess.Owner ? Steam.Interaction.Commands.FormatStaticResponse(string.Format(CultureInfo.CurrentCulture, Strings.BotNotFound, botNames)) : null;
}
IList<string?> results = await Utilities.InParallel(bots.Select(bot => ResponseTwoFactorFinalized(Steam.Interaction.Commands.GetProxyAccess(bot, access, steamID), bot, activationCode))).ConfigureAwait(false);
List<string> responses = [..results.Where(static result => !string.IsNullOrEmpty(result))];
return responses.Count > 0 ? string.Join(Environment.NewLine, responses) : null;
}
private static async Task<string?> ResponseTwoFactorInit(EAccess access, Bot bot) {
if (!Enum.IsDefined(access)) {
throw new InvalidEnumArgumentException(nameof(access), (int) access, typeof(EAccess));
}
ArgumentNullException.ThrowIfNull(bot);
if (access < EAccess.Master) {
return access > EAccess.None ? bot.Commands.FormatBotResponse(Strings.ErrorAccessDenied) : null;
}
if (bot.HasMobileAuthenticator) {
return bot.Commands.FormatBotResponse(string.Format(CultureInfo.CurrentCulture, Strings.WarningFailedWithError, nameof(bot.HasMobileAuthenticator)));
}
if (!bot.IsConnectedAndLoggedOn) {
return bot.Commands.FormatBotResponse(Strings.BotNotConnected);
}
MobileAuthenticatorHandler? mobileAuthenticatorHandler = bot.GetHandler<MobileAuthenticatorHandler>();
if (mobileAuthenticatorHandler == null) {
throw new InvalidOperationException(nameof(mobileAuthenticatorHandler));
}
string deviceID = $"android:{Guid.NewGuid()}";
CTwoFactor_AddAuthenticator_Response? response = await mobileAuthenticatorHandler.AddAuthenticator(bot.SteamID, deviceID).ConfigureAwait(false);
if (response == null) {
return bot.Commands.FormatBotResponse(Strings.WarningFailed);
}
EResult result = (EResult) response.status;
if (result != EResult.OK) {
return bot.Commands.FormatBotResponse(string.Format(CultureInfo.CurrentCulture, Strings.WarningFailedWithError, result));
}
MaFileData maFileData = new(response, bot.SteamID, deviceID);
string maFilePendingPath = $"{bot.GetFilePath(Bot.EFileType.MobileAuthenticator)}.PENDING";
string json = maFileData.ToJsonText(true);
try {
await File.WriteAllTextAsync(maFilePendingPath, json).ConfigureAwait(false);
} catch (Exception e) {
bot.ArchiLogger.LogGenericException(e);
return bot.Commands.FormatBotResponse(string.Format(CultureInfo.CurrentCulture, Strings.WarningFailedWithError, e.Message));
}
return bot.Commands.FormatBotResponse(Strings.Done);
}
private static async Task<string?> ResponseTwoFactorInit(EAccess access, string botNames, ulong steamID = 0) {
if (!Enum.IsDefined(access)) {
throw new InvalidEnumArgumentException(nameof(access), (int) access, typeof(EAccess));
}
ArgumentException.ThrowIfNullOrEmpty(botNames);
if ((steamID != 0) && !new SteamID(steamID).IsIndividualAccount) {
throw new ArgumentOutOfRangeException(nameof(steamID));
}
HashSet<Bot>? bots = Bot.GetBots(botNames);
if ((bots == null) || (bots.Count == 0)) {
return access >= EAccess.Owner ? Steam.Interaction.Commands.FormatStaticResponse(string.Format(CultureInfo.CurrentCulture, Strings.BotNotFound, botNames)) : null;
}
IList<string?> results = await Utilities.InParallel(bots.Select(bot => ResponseTwoFactorInit(Steam.Interaction.Commands.GetProxyAccess(bot, access, steamID), bot))).ConfigureAwait(false);
List<string> responses = [..results.Where(static result => !string.IsNullOrEmpty(result))];
return responses.Count > 0 ? string.Join(Environment.NewLine, responses) : null;
}
}

View File

@@ -0,0 +1,3 @@
This directory contains ASF strings for display and localization purposes.
All strings used by ASF can be found in main `Strings.resx` file, and that's also the only `resx` file that should be modified - all other `resx` files are managed automatically and should not be touched. Please visit **[localization](https://github.com/JustArchiNET/ArchiSteamFarm/wiki/Localization)** section on the wiki if you want to improve translation of other files.

View File

@@ -0,0 +1,48 @@
//------------------------------------------------------------------------------
// <auto-generated>
// This code was generated by a tool.
//
// Changes to this file may cause incorrect behavior and will be lost if
// the code is regenerated.
// </auto-generated>
//------------------------------------------------------------------------------
namespace ArchiSteamFarm.OfficialPlugins.MobileAuthenticator.Localization {
using System;
[System.CodeDom.Compiler.GeneratedCodeAttribute("System.Resources.Tools.StronglyTypedResourceBuilder", "4.0.0.0")]
[System.Diagnostics.DebuggerNonUserCodeAttribute()]
[System.Runtime.CompilerServices.CompilerGeneratedAttribute()]
internal class Strings {
private static System.Resources.ResourceManager resourceMan;
private static System.Globalization.CultureInfo resourceCulture;
[System.Diagnostics.CodeAnalysis.SuppressMessageAttribute("Microsoft.Performance", "CA1811:AvoidUncalledPrivateCode")]
internal Strings() {
}
[System.ComponentModel.EditorBrowsableAttribute(System.ComponentModel.EditorBrowsableState.Advanced)]
internal static System.Resources.ResourceManager ResourceManager {
get {
if (object.Equals(null, resourceMan)) {
System.Resources.ResourceManager temp = new System.Resources.ResourceManager("ArchiSteamFarm.OfficialPlugins.MobileAuthenticator.Localization.Strings", typeof(Strings).Assembly);
resourceMan = temp;
}
return resourceMan;
}
}
[System.ComponentModel.EditorBrowsableAttribute(System.ComponentModel.EditorBrowsableState.Advanced)]
internal static System.Globalization.CultureInfo Culture {
get {
return resourceCulture;
}
set {
resourceCulture = value;
}
}
}
}

View File

@@ -0,0 +1,65 @@
<?xml version="1.0" encoding="utf-8"?>
<root>
<xsd:schema xmlns:xsd="http://www.w3.org/2001/XMLSchema" xmlns:msdata="urn:schemas-microsoft-com:xml-msdata" xmlns="" id="root">
<xsd:import namespace="http://www.w3.org/XML/1998/namespace"/>
<xsd:element name="root" msdata:IsDataSet="true">
<xsd:complexType>
<xsd:choice maxOccurs="unbounded">
<xsd:element name="metadata">
<xsd:complexType>
<xsd:sequence>
<xsd:element name="value" type="xsd:string" minOccurs="0"/>
</xsd:sequence>
<xsd:attribute name="name" use="required" type="xsd:string"/>
<xsd:attribute name="type" type="xsd:string"/>
<xsd:attribute name="mimetype" type="xsd:string"/>
<xsd:attribute ref="xml:space"/>
</xsd:complexType>
</xsd:element>
<xsd:element name="assembly">
<xsd:complexType>
<xsd:attribute name="alias" type="xsd:string"/>
<xsd:attribute name="name" type="xsd:string"/>
</xsd:complexType>
</xsd:element>
<xsd:element name="data">
<xsd:complexType>
<xsd:sequence>
<xsd:element name="value" type="xsd:string" minOccurs="0" msdata:Ordinal="1"/>
<xsd:element name="comment" type="xsd:string" minOccurs="0" msdata:Ordinal="2"/>
</xsd:sequence>
<xsd:attribute name="name" type="xsd:string" use="required" msdata:Ordinal="1"/>
<xsd:attribute name="type" type="xsd:string" msdata:Ordinal="3"/>
<xsd:attribute name="mimetype" type="xsd:string" msdata:Ordinal="4"/>
<xsd:attribute ref="xml:space"/>
</xsd:complexType>
</xsd:element>
<xsd:element name="resheader">
<xsd:complexType>
<xsd:sequence>
<xsd:element name="value" type="xsd:string" minOccurs="0" msdata:Ordinal="1"/>
</xsd:sequence>
<xsd:attribute name="name" type="xsd:string" use="required"/>
</xsd:complexType>
</xsd:element>
</xsd:choice>
</xsd:complexType>
</xsd:element>
</xsd:schema>
<resheader name="resmimetype">
<value>text/microsoft-resx</value>
</resheader>
<resheader name="version">
<value>2.0</value>
</resheader>
<resheader name="reader">
<value>System.Resources.ResXResourceReader, System.Windows.Forms, Version=4.0.0.0, Culture=neutral,
PublicKeyToken=b77a5c561934e089
</value>
</resheader>
<resheader name="writer">
<value>System.Resources.ResXResourceWriter, System.Windows.Forms, Version=4.0.0.0, Culture=neutral,
PublicKeyToken=b77a5c561934e089
</value>
</resheader>
</root>

Some files were not shown because too many files have changed in this diff Show More