Compare commits

..

20 Commits

Author SHA1 Message Date
JustArchi
8ad552b0da Slightly improve ASF's algorithm for picking users to match 2020-06-21 00:44:24 +02:00
JustArchi
c16c25da77 Translations update 2020-06-21 00:19:15 +02:00
JustArchi
aa1fc829b7 Misc 2020-06-21 00:15:06 +02:00
JustArchi
e5eea110f1 Skip fair bots with huge inventories when active matching 2020-06-21 00:06:17 +02:00
JustArchi
2e5828779f Update Bug_report.md 2020-06-20 17:55:40 +02:00
JustArchi
cc2e73ae5a Misc 2020-06-20 17:12:18 +02:00
dependabot-preview[bot]
b89840f103 Bump Swashbuckle.AspNetCore from 5.4.1 to 5.5.0
Bumps [Swashbuckle.AspNetCore](https://github.com/domaindrivendev/Swashbuckle.AspNetCore) from 5.4.1 to 5.5.0.
- [Release notes](https://github.com/domaindrivendev/Swashbuckle.AspNetCore/releases)
- [Commits](https://github.com/domaindrivendev/Swashbuckle.AspNetCore/compare/v5.4.1...v5.5.0)

Signed-off-by: dependabot-preview[bot] <support@dependabot.com>
2020-06-19 10:25:06 +00:00
dependabot-preview[bot]
12b32472ba Bump Swashbuckle.AspNetCore.Newtonsoft from 5.4.1 to 5.5.0
Bumps [Swashbuckle.AspNetCore.Newtonsoft](https://github.com/domaindrivendev/Swashbuckle.AspNetCore) from 5.4.1 to 5.5.0.
- [Release notes](https://github.com/domaindrivendev/Swashbuckle.AspNetCore/releases)
- [Commits](https://github.com/domaindrivendev/Swashbuckle.AspNetCore/compare/v5.4.1...v5.5.0)

Signed-off-by: dependabot-preview[bot] <support@dependabot.com>
2020-06-19 10:03:24 +00:00
dependabot-preview[bot]
86ac2ade1e Bump Swashbuckle.AspNetCore.Annotations from 5.4.1 to 5.5.0
Bumps [Swashbuckle.AspNetCore.Annotations](https://github.com/domaindrivendev/Swashbuckle.AspNetCore) from 5.4.1 to 5.5.0.
- [Release notes](https://github.com/domaindrivendev/Swashbuckle.AspNetCore/releases)
- [Commits](https://github.com/domaindrivendev/Swashbuckle.AspNetCore/compare/v5.4.1...v5.5.0)

Signed-off-by: dependabot-preview[bot] <support@dependabot.com>
2020-06-19 09:38:34 +00:00
JustArchi
a180c46b5d Update config.yml 2020-06-19 10:12:41 +02:00
JustArchi
34555f8bb5 Bump 2020-06-18 23:42:14 +02:00
JustArchi
4db8826e4d Translations update 2020-06-18 23:40:54 +02:00
Vitaliy
69358541bf Add Summer Sale 2020 to blacklist (#1853) 2020-06-18 19:38:09 +02:00
dependabot-preview[bot]
896c92b678 Bump ASF-ui from 9f21342 to ab1d058
Bumps [ASF-ui](https://github.com/JustArchiNET/ASF-ui) from `9f21342` to `ab1d058`.
- [Release notes](https://github.com/JustArchiNET/ASF-ui/releases)
- [Commits](9f21342fa2...ab1d0580cd)

Signed-off-by: dependabot-preview[bot] <support@dependabot.com>
2020-06-18 01:21:51 +00:00
JustArchi
6ef52c5184 Bump 2020-06-16 10:11:23 +02:00
JustArchi
5b098b79a5 Translations update 2020-06-16 10:09:13 +02:00
JustArchi
2cab6c82e4 Closes #1849 2020-06-16 10:04:51 +02:00
dependabot-preview[bot]
91d3012581 Bump wiki from 3e4e676 to 01c86ed
Bumps [wiki](https://github.com/JustArchiNET/ArchiSteamFarm.wiki) from `3e4e676` to `01c86ed`.
- [Release notes](https://github.com/JustArchiNET/ArchiSteamFarm.wiki/releases)
- [Commits](3e4e6768f9...01c86ed121)

Signed-off-by: dependabot-preview[bot] <support@dependabot.com>
2020-06-16 01:29:23 +00:00
dependabot-preview[bot]
354b60db53 Bump ASF-ui from 74be05f to 9f21342
Bumps [ASF-ui](https://github.com/JustArchiNET/ASF-ui) from `74be05f` to `9f21342`.
- [Release notes](https://github.com/JustArchiNET/ASF-ui/releases)
- [Commits](74be05f734...9f21342fa2)

Signed-off-by: dependabot-preview[bot] <support@dependabot.com>
2020-06-16 01:22:44 +00:00
JustArchi
fd89c42e48 Bump 2020-06-15 23:42:27 +02:00
12 changed files with 51 additions and 40 deletions

View File

@@ -40,7 +40,7 @@ Feel free to remove our notice and fill the template below with your details.
### Full log.txt recorded during reproducing the problem
```
```text
Paste here, in-between triple backtick tags
Ensure that your log is complete and was NOT recorded in Debug mode, as debug log may contain sensitive information that should not be shared publicly, as per our wiki statement. Standard ASF log does not include sensitive information.

View File

@@ -6,7 +6,7 @@ contact_links:
- name: Localization improvement
url: https://github.com/JustArchiNET/ArchiSteamFarm/wiki/Localization
about: Please use our crowdin platform.
- name: Questions and technical issues
- name: Support question or technical issue
url: https://github.com/JustArchiNET/ArchiSteamFarm/blob/master/SUPPORT.md
about: Please review our support guidelines.
- name: Negative feedback, complaints and demands

2
ASF-ui

Submodule ASF-ui updated: 74be05f734...452d296a0f

View File

@@ -262,6 +262,10 @@ namespace ArchiSteamFarm.OfficialPlugins.SteamTokenDumper {
break;
}
if (!bot.IsConnectedAndLoggedOn) {
return;
}
bot.ArchiLogger.LogGenericInfo($"Retrieving {appIDsThisRound.Count} app access tokens...");
SteamApps.PICSTokensCallback response;
@@ -274,6 +278,12 @@ namespace ArchiSteamFarm.OfficialPlugins.SteamTokenDumper {
return;
}
if (response == null) {
bot.ArchiLogger.LogGenericWarning(string.Format(Strings.WarningFailedWithError, nameof(response)));
return;
}
bot.ArchiLogger.LogGenericInfo($"Finished retrieving {appIDsThisRound.Count} app access tokens.");
appIDsThisRound.Clear();
@@ -297,6 +307,10 @@ namespace ArchiSteamFarm.OfficialPlugins.SteamTokenDumper {
break;
}
if (!bot.IsConnectedAndLoggedOn) {
return;
}
bot.ArchiLogger.LogGenericInfo($"Retrieving {appIDsThisRound.Count} app infos...");
AsyncJobMultiple<SteamApps.PICSProductInfoCallback>.ResultSet response;

View File

@@ -27,9 +27,9 @@
<PackageReference Include="NLog" Version="4.7.2" />
<PackageReference Include="NLog.Web.AspNetCore" Version="4.9.2" />
<PackageReference Include="SteamKit2" Version="2.3.0-beta.2" />
<PackageReference Include="Swashbuckle.AspNetCore" Version="5.4.1" />
<PackageReference Include="Swashbuckle.AspNetCore.Annotations" Version="5.4.1" />
<PackageReference Include="Swashbuckle.AspNetCore.Newtonsoft" Version="5.4.1" />
<PackageReference Include="Swashbuckle.AspNetCore" Version="5.5.0" />
<PackageReference Include="Swashbuckle.AspNetCore.Annotations" Version="5.5.0" />
<PackageReference Include="Swashbuckle.AspNetCore.Newtonsoft" Version="5.5.0" />
<PackageReference Include="System.Composition" Version="1.4.1" />
<PackageReference Include="System.Linq.Async" Version="4.1.1" />
</ItemGroup>

View File

@@ -50,12 +50,13 @@ namespace ArchiSteamFarm {
[PublicAPI]
public const string SteamStoreURL = "https://" + SteamStoreHost;
internal const ushort MaxItemsInSingleInventoryRequest = 5000;
private const string IEconService = "IEconService";
private const string IPlayerService = "IPlayerService";
private const string ISteamApps = "ISteamApps";
private const string ISteamUserAuth = "ISteamUserAuth";
private const string ITwoFactorService = "ITwoFactorService";
private const ushort MaxItemsInSingleInventoryRequest = 5000;
private const byte MinSessionValidityInSeconds = GlobalConfig.DefaultConnectionTimeout / 6;
private const string SteamCommunityHost = "steamcommunity.com";
private const string SteamHelpHost = "help.steampowered.com";

View File

@@ -46,7 +46,7 @@ namespace ArchiSteamFarm {
private const byte HoursToIgnore = 24; // How many hours we ignore unreleased appIDs and don't bother checking them again
[PublicAPI]
public static readonly ImmutableHashSet<uint> SalesBlacklist = ImmutableHashSet.Create<uint>(267420, 303700, 335590, 368020, 425280, 480730, 566020, 639900, 762800, 876740, 991980, 1195670);
public static readonly ImmutableHashSet<uint> SalesBlacklist = ImmutableHashSet.Create<uint>(267420, 303700, 335590, 368020, 425280, 480730, 566020, 639900, 762800, 876740, 991980, 1195670, 1343890);
private static readonly ConcurrentDictionary<uint, DateTime> GloballyIgnoredAppIDs = new ConcurrentDictionary<uint, DateTime>(); // Reserved for unreleased games

View File

@@ -166,9 +166,15 @@ namespace ArchiSteamFarm.Helpers {
OS.UnixSetFileAccess(directoryPath, OS.EUnixPermission.Combined777);
} else {
DirectoryInfo directoryInfo = new DirectoryInfo(directoryPath);
DirectorySecurity directorySecurity = new DirectorySecurity(FilePath, AccessControlSections.All);
directoryInfo.SetAccessControl(directorySecurity);
try {
DirectorySecurity directorySecurity = new DirectorySecurity(directoryPath, AccessControlSections.All);
directoryInfo.SetAccessControl(directorySecurity);
} catch (PrivilegeNotHeldException e) {
// Non-critical, user might have no rights to manage the resource
ASF.ArchiLogger.LogGenericDebuggingException(e);
}
}
}
@@ -179,9 +185,15 @@ namespace ArchiSteamFarm.Helpers {
OS.UnixSetFileAccess(FilePath, OS.EUnixPermission.Combined777);
} else {
FileInfo fileInfo = new FileInfo(FilePath);
FileSecurity fileSecurity = new FileSecurity(FilePath, AccessControlSections.All);
fileInfo.SetAccessControl(fileSecurity);
try {
FileSecurity fileSecurity = new FileSecurity(FilePath, AccessControlSections.All);
fileInfo.SetAccessControl(fileSecurity);
} catch (PrivilegeNotHeldException e) {
// Non-critical, user might have no rights to manage the resource
ASF.ArchiLogger.LogGenericDebuggingException(e);
}
}
} catch (IOException) {
// Ignored, if the file was already created in the meantime by another instance, this is fine

View File

@@ -34,8 +34,8 @@ using Newtonsoft.Json;
namespace ArchiSteamFarm {
internal sealed class Statistics : IAsyncDisposable {
private const ushort MaxItemsForFairBots = ArchiWebHandler.MaxItemsInSingleInventoryRequest * WebBrowser.MaxTries; // Determines which fair bots we'll deprioritize when matching due to excessive number of inventory requests they need to make, which are likely to fail in the process or cause excessive delays
private const byte MaxMatchedBotsHard = 40; // Determines how many bots we can attempt to match in total, where match attempt is equal to analyzing bot's inventory
private const byte MaxMatchedBotsSoft = MaxMatchedBotsHard / 2; // Determines how many consecutive empty matches we need to get before we decide to skip bots from the same category
private const byte MaxMatchingRounds = 10; // Determines maximum amount of matching rounds we're going to consider before leaving the rest of work for the next batch
private const byte MinAnnouncementCheckTTL = 6; // Minimum amount of hours we must wait before checking eligibility for Announcement, should be lower than MinPersonaStateTTL
private const byte MinHeartBeatTTL = 10; // Minimum amount of minutes we must wait before sending next HeartBeat
@@ -394,17 +394,11 @@ namespace ArchiSteamFarm {
return false;
}
bool skipAnyBots = false;
byte emptyMatches = 0;
byte totalMatches = 0;
HashSet<(uint RealAppID, Steam.Asset.EType Type, Steam.Asset.ERarity Rarity)> skippedSetsThisRound = new HashSet<(uint RealAppID, Steam.Asset.EType Type, Steam.Asset.ERarity Rarity)>();
foreach (ListedUser listedUser in listedUsers.Where(listedUser => (listedUser.SteamID != Bot.SteamID) && acceptedMatchableTypes.Any(listedUser.MatchableTypes.Contains) && (!triedSteamIDs.TryGetValue(listedUser.SteamID, out (byte Tries, ISet<ulong> GivenAssetIDs, ISet<ulong> ReceivedAssetIDs) attempt) || (attempt.Tries < byte.MaxValue)) && !Bot.IsBlacklistedFromTrades(listedUser.SteamID)).OrderBy(listedUser => triedSteamIDs.TryGetValue(listedUser.SteamID, out (byte Tries, ISet<ulong> GivenAssetIDs, ISet<ulong> ReceivedAssetIDs) attempt) ? attempt.Tries : 0).ThenByDescending(listedUser => listedUser.MatchEverything).ThenByDescending(listedUser => listedUser.Score)) {
if (listedUser.MatchEverything && skipAnyBots) {
continue;
}
foreach (ListedUser listedUser in listedUsers.Where(listedUser => (listedUser.SteamID != Bot.SteamID) && acceptedMatchableTypes.Any(listedUser.MatchableTypes.Contains) && (!triedSteamIDs.TryGetValue(listedUser.SteamID, out (byte Tries, ISet<ulong> GivenAssetIDs, ISet<ulong> ReceivedAssetIDs) attempt) || (attempt.Tries < byte.MaxValue)) && !Bot.IsBlacklistedFromTrades(listedUser.SteamID)).OrderBy(listedUser => triedSteamIDs.TryGetValue(listedUser.SteamID, out (byte Tries, ISet<ulong> GivenAssetIDs, ISet<ulong> ReceivedAssetIDs) attempt) ? attempt.Tries : 0).ThenByDescending(listedUser => listedUser.MatchEverything).ThenByDescending(listedUser => listedUser.MatchEverything || (listedUser.ItemsCount < MaxItemsForFairBots)).ThenByDescending(listedUser => listedUser.Score)) {
HashSet<(uint RealAppID, Steam.Asset.EType Type, Steam.Asset.ERarity Rarity)> wantedSets = ourTradableState.Keys.Where(set => !skippedSetsThisRound.Contains(set) && listedUser.MatchableTypes.Contains(set.Type)).ToHashSet();
if (wantedSets.Count == 0) {
@@ -626,8 +620,6 @@ namespace ArchiSteamFarm {
triedSteamIDs[listedUser.SteamID] = (++previousAttempt.Tries, previousAttempt.GivenAssetIDs, previousAttempt.ReceivedAssetIDs);
emptyMatches = 0;
Bot.ArchiLogger.LogGenericTrace(Bot.SteamID + " <- " + string.Join(", ", itemsToReceive.Select(item => item.RealAppID + "/" + item.Type + "-" + item.ClassID + " #" + item.Amount)) + " | " + string.Join(", ", itemsToGive.Select(item => item.RealAppID + "/" + item.Type + "-" + item.ClassID + " #" + item.Amount)) + " -> " + listedUser.SteamID);
(bool success, HashSet<ulong> mobileTradeOfferIDs) = await Bot.ArchiWebHandler.SendTradeOffer(listedUser.SteamID, itemsToGive, itemsToReceive, listedUser.TradeToken, true).ConfigureAwait(false);
@@ -661,15 +653,6 @@ namespace ArchiSteamFarm {
triedSteamIDs[listedUser.SteamID] = (byte.MaxValue, null, null);
}
if (++emptyMatches >= MaxMatchedBotsSoft) {
if (skipAnyBots) {
break;
}
skipAnyBots = true;
emptyMatches = 0;
}
continue;
}
@@ -691,11 +674,17 @@ namespace ArchiSteamFarm {
Bot.ArchiLogger.LogGenericInfo(string.Format(Strings.ActivelyMatchingItemsRound, skippedSetsThisRound.Count));
return skippedSetsThisRound.Count > 0;
// Keep matching when we either traded something this round (so it makes sense for a refresh) or if we didn't try all available bots yet (so it makes sense to keep going)
return (skippedSetsThisRound.Count > 0) || triedSteamIDs.Values.All(data => data.Tries < 2);
}
[SuppressMessage("ReSharper", "ClassCannotBeInstantiated")]
private sealed class ListedUser {
#pragma warning disable 649
[JsonProperty(PropertyName = "items_count", Required = Required.Always)]
internal readonly ushort ItemsCount;
#pragma warning restore 649
internal readonly HashSet<Steam.Asset.EType> MatchableTypes = new HashSet<Steam.Asset.EType>();
#pragma warning disable 649
@@ -715,11 +704,6 @@ namespace ArchiSteamFarm {
private readonly ushort GamesCount;
#pragma warning restore 649
#pragma warning disable 649
[JsonProperty(PropertyName = "items_count", Required = Required.Always)]
private readonly ushort ItemsCount;
#pragma warning restore 649
internal bool MatchEverything { get; private set; }
#pragma warning disable IDE0051

View File

@@ -1,6 +1,6 @@
<Project>
<PropertyGroup>
<Version>4.2.2.6</Version>
<Version>4.2.2.9</Version>
</PropertyGroup>
<PropertyGroup>

2
wiki

Submodule wiki updated: 3e4e6768f9...93cf188ae6