mirror of
https://github.com/JustArchiNET/ArchiSteamFarm.git
synced 2025-12-31 21:50:46 +00:00
Compare commits
54 Commits
| Author | SHA1 | Date | |
|---|---|---|---|
|
|
999dab7f7a | ||
|
|
55b238f28f | ||
|
|
2258204056 | ||
|
|
47800f0c29 | ||
|
|
0f7e6cc553 | ||
|
|
298e8e017d | ||
|
|
1122959c59 | ||
|
|
900d921377 | ||
|
|
42a25acd24 | ||
|
|
392e862bad | ||
|
|
7ba429de6e | ||
|
|
e823546788 | ||
|
|
3453f1c027 | ||
|
|
94d9778e21 | ||
|
|
9a649d57bf | ||
|
|
25524c19d2 | ||
|
|
2d53a52ba9 | ||
|
|
005704bd81 | ||
|
|
8386cc4562 | ||
|
|
ee52f3d888 | ||
|
|
4bf062fa94 | ||
|
|
192d51632d | ||
|
|
8932a904b7 | ||
|
|
500e42f308 | ||
|
|
c8f322e9c7 | ||
|
|
08ad3450c9 | ||
|
|
083b628b3f | ||
|
|
14d373cbbf | ||
|
|
acda39ca7f | ||
|
|
000a722275 | ||
|
|
fce94c3fa4 | ||
|
|
85fedfda88 | ||
|
|
eafd9d623b | ||
|
|
5f5205ba3c | ||
|
|
9bc2f5b980 | ||
|
|
406372cdf8 | ||
|
|
a68a55bb43 | ||
|
|
cdc2290c19 | ||
|
|
8855d4ffbf | ||
|
|
f4a603a606 | ||
|
|
41c7d2e559 | ||
|
|
83fef07f98 | ||
|
|
30cb16f404 | ||
|
|
20c9c6c478 | ||
|
|
221aad25eb | ||
|
|
3f365423e0 | ||
|
|
45b42cdf28 | ||
|
|
53156f0329 | ||
|
|
275c0da002 | ||
|
|
384e48e3cd | ||
|
|
ca4bf71384 | ||
|
|
a652418f02 | ||
|
|
747af6df7e | ||
|
|
a5d941e5a7 |
80
.github/ISSUE_TEMPLATE.md
vendored
80
.github/ISSUE_TEMPLATE.md
vendored
@@ -1,80 +0,0 @@
|
||||
I fully read and understood contributing guidelines of ASF available above, especially the point that GITHUB IS NOT TECHNICAL SUPPORT - IT'S THE PLACE ONLY FOR ASF BUGS AND SUGGESTIONS.
|
||||
|
||||
I admit that THIS IS NOT A QUESTION OR TECHNICAL ISSUE - I fully understand that ASF GitHub is ONLY for ASF development purpose. I strongly believe that the bug I'm reporting here affects majority of ASF users, and the enhancement I'm suggesting could benefit ASF in long-run.
|
||||
|
||||
If my issue is not meeting contributing guidelines specified above, especially if it's a question or technical issue that is not related to ASF development in any way, please close it immediately - I won't complain.
|
||||
|
||||
-----
|
||||
|
||||
Now that you read and understood our notice, remove it entirely so it won't clutter the issue, pick appropriate bug/suggestion template below and fill it with your details.
|
||||
|
||||
-----
|
||||
|
||||
## Bug
|
||||
|
||||
### Description
|
||||
|
||||
<!-- Short explanation what you were going to do. -->
|
||||
|
||||
### Expected behavior
|
||||
|
||||
<!-- What did you expect to happen? -->
|
||||
|
||||
### Actual behavior
|
||||
|
||||
<!-- What happened instead? -->
|
||||
|
||||
### Steps to reproduce
|
||||
|
||||
<!-- Every command or action done after launching ASF that leads to the bug. -->
|
||||
|
||||
### Full log.txt recorded during reproducing the problem
|
||||
|
||||
```
|
||||
Paste here
|
||||
```
|
||||
|
||||
### Global ASF.json config
|
||||
|
||||
```json
|
||||
Paste here
|
||||
```
|
||||
|
||||
### BotName.json config of all affected bot instances (if more than one)
|
||||
|
||||
```json
|
||||
Paste here
|
||||
Ensure that config has hidden/redacted SteamLogin and SteamPassword properties.
|
||||
```
|
||||
|
||||
### Additional info
|
||||
|
||||
<!-- Everything else you consider worthy that we didn't ask for. -->
|
||||
|
||||
-----
|
||||
|
||||
## Suggestion
|
||||
|
||||
### Purpose
|
||||
|
||||
<!-- Detailed suggestion explanation - what should be implemented and what it should do, as well as expected usage and benefits. -->
|
||||
|
||||
### How can ASF users benefit from this suggestion?
|
||||
|
||||
<!-- You're not suggesting things only for yourself, so explain to us how it's going to be useful for everyone. -->
|
||||
|
||||
### Why currently available solutions are not sufficient?
|
||||
|
||||
<!-- If something you're suggesting is already possible, then explain to us why current solution is not sufficient. -->
|
||||
|
||||
### Does your suggestion fall into ASF scope?
|
||||
|
||||
<!-- Is ASF really the proper tool to include your enhancement in the first place? Is it connected with idling Steam cards? -->
|
||||
|
||||
### Is your suggestion abiding to Steam ToS?
|
||||
|
||||
<!-- If not, it will not be accepted. Botting Steam Market is just a single example of a thing that won't happen. -->
|
||||
|
||||
### Additional info
|
||||
|
||||
<!-- Everything else you consider worthy that we didn't ask for. -->
|
||||
63
.github/ISSUE_TEMPLATE/Bug_report.md
vendored
Normal file
63
.github/ISSUE_TEMPLATE/Bug_report.md
vendored
Normal file
@@ -0,0 +1,63 @@
|
||||
---
|
||||
name: Bug report
|
||||
about: Unexpected program behaviour that needs code correction
|
||||
|
||||
---
|
||||
|
||||
<!--
|
||||
I fully read and understood contributing guidelines of ASF available under https://github.com/JustArchi/ArchiSteamFarm/blob/master/.github/CONTRIBUTING.md, especially the point that GITHUB IS NOT A TECHNICAL SUPPORT - IT'S THE PLACE ONLY FOR ASF BUGS AND SUGGESTIONS.
|
||||
|
||||
I admit that THIS IS NOT A QUESTION OR TECHNICAL ISSUE - I fully understand that ASF GitHub is ONLY for ASF development purpose. I strongly believe that the bug I'm reporting here affects majority of ASF users and that it's not a result of technical difficulty I'm experiencing that is explained in the FAQ or other place of the wiki.
|
||||
|
||||
If my issue is not meeting contributing guidelines specified above, especially if it's a question or technical issue that is not related to ASF development in any way, please close it immediately - I won't complain.
|
||||
-->
|
||||
|
||||
<!--
|
||||
Now that you read and understood our notice, remove everything up to this point so it won't clutter the issue and fill the template below with your details.
|
||||
-->
|
||||
|
||||
## Bug report
|
||||
|
||||
### Description
|
||||
|
||||
<!-- Short explanation what you were going to do. -->
|
||||
|
||||
### Expected behavior
|
||||
|
||||
<!-- What did you expect to happen? -->
|
||||
|
||||
### Actual behavior
|
||||
|
||||
<!-- What happened instead? -->
|
||||
|
||||
### Steps to reproduce
|
||||
|
||||
<!-- Every command or action done after launching ASF that leads to the bug. -->
|
||||
|
||||
### Full log.txt recorded during reproducing the problem
|
||||
|
||||
```
|
||||
Paste here, in-between triple backtick tags
|
||||
|
||||
Ensure that your log was NOT recorded in Debug mode, as it might contain sensitive information that should not be shared, as stated on the wiki
|
||||
```
|
||||
|
||||
### Global ASF.json config
|
||||
|
||||
```json
|
||||
Paste here, in-between triple backtick tags
|
||||
|
||||
Ensure that config has hidden/redacted potentially-sensitive properties, such as: IPCPassword, WebProxyPassword, IPCPrefixes (optionally), SteamOwnerID (optionally), WebProxy (optionally), WebProxyUsername (optionally)
|
||||
```
|
||||
|
||||
### BotName.json config of all affected bot instances (if more than one)
|
||||
|
||||
```json
|
||||
Paste here, in-between triple backtick tags
|
||||
|
||||
Ensure that config has hidden/redacted potentially-sensitive properties, such as: SteamLogin, SteamParentalPIN, SteamPassword, SteamMasterClanID (optionally), SteamTradeToken (optionally), SteamUserPermissions (only steamIDs, optionally)
|
||||
```
|
||||
|
||||
### Additional info
|
||||
|
||||
<!-- Everything else you consider worthy that we didn't ask for. -->
|
||||
43
.github/ISSUE_TEMPLATE/Feature_request.md
vendored
Normal file
43
.github/ISSUE_TEMPLATE/Feature_request.md
vendored
Normal file
@@ -0,0 +1,43 @@
|
||||
---
|
||||
name: Feature request
|
||||
about: General idea for improving the project
|
||||
|
||||
---
|
||||
|
||||
<!--
|
||||
I fully read and understood contributing guidelines of ASF available under https://github.com/JustArchi/ArchiSteamFarm/blob/master/.github/CONTRIBUTING.md, especially the point that GITHUB IS NOT A TECHNICAL SUPPORT - IT'S THE PLACE ONLY FOR ASF BUGS AND SUGGESTIONS.
|
||||
|
||||
I admit that THIS IS NOT A QUESTION OR TECHNICAL ISSUE - I fully understand that ASF GitHub is ONLY for ASF development purpose. I strongly believe that the enhancement I'm suggesting here will benefit ASF and its users in the long-run, and that it's definitely not related to any technical difficulty I'm experiencing that is explained in the FAQ or other place of the wiki.
|
||||
|
||||
If my issue is not meeting contributing guidelines specified above, especially if it's a question or technical issue that is not related to ASF development in any way, please close it immediately - I won't complain.
|
||||
-->
|
||||
|
||||
<!--
|
||||
Now that you read and understood our notice, remove everything up to this point so it won't clutter the issue and fill the template below with your details.
|
||||
-->
|
||||
|
||||
## Feature request
|
||||
|
||||
### Purpose
|
||||
|
||||
<!-- Purpose of the feature request - if it solves some problem, precise what in particular. If it benefits the program in some other way, precise in particular why. Present the underlying reason why this feature request makes sense. -->
|
||||
|
||||
### Solution
|
||||
|
||||
<!-- What would you like to see as a solution to the purpose specified by you above? -->
|
||||
|
||||
### Why currently available solutions are not sufficient?
|
||||
|
||||
<!-- If something you're suggesting is already possible, then explain to us why currently available solutions are not sufficient. If it's not possible yet, then explain to us why it should be. -->
|
||||
|
||||
### Does your suggestion fall into ASF scope?
|
||||
|
||||
<!-- Is ASF really the proper tool to include your enhancement in the first place? Is it connected with idling Steam cards? -->
|
||||
|
||||
### Is your suggestion abiding to Steam ToS?
|
||||
|
||||
<!-- If not, it will not be considered. Botting Steam Market is just a single example of a thing that won't happen - https://store.steampowered.com/subscriber_agreement. -->
|
||||
|
||||
### Additional info
|
||||
|
||||
<!-- Everything else you consider worthy that we didn't ask for. -->
|
||||
2
.gitignore
vendored
2
.gitignore
vendored
@@ -19,7 +19,7 @@ out
|
||||
ArchiSteamFarm/out
|
||||
|
||||
# Ignore crowdin CLI secret
|
||||
tools/crowdin-cli/crowdin_identity.yaml
|
||||
tools/crowdin-cli/crowdin_identity.yml
|
||||
|
||||
#################
|
||||
## Visual Studio
|
||||
|
||||
3
.gitmodules
vendored
Normal file
3
.gitmodules
vendored
Normal file
@@ -0,0 +1,3 @@
|
||||
[submodule "wiki"]
|
||||
path = wiki
|
||||
url = https://github.com/JustArchi/ArchiSteamFarm.wiki.git
|
||||
17
.travis.yml
17
.travis.yml
@@ -15,12 +15,10 @@ branches:
|
||||
# Use latest images for building
|
||||
group: travis_latest
|
||||
|
||||
# This is .NET Core project, we're not building with Mono
|
||||
# ASF is based on .NET Core platform
|
||||
dotnet: 2.1.105
|
||||
mono: none
|
||||
|
||||
# ASF requires .NET Core 2.0+
|
||||
dotnet: 2.1.104
|
||||
|
||||
env:
|
||||
global:
|
||||
- CONFIGURATION: Release
|
||||
@@ -37,20 +35,19 @@ before_script:
|
||||
fi
|
||||
|
||||
dotnet --info
|
||||
dotnet restore
|
||||
|
||||
script:
|
||||
- |
|
||||
set -e
|
||||
|
||||
dotnet build -c "$CONFIGURATION" -o 'out/source' --no-restore /nologo
|
||||
dotnet test ArchiSteamFarm.Tests -c "$CONFIGURATION" -o 'out/source' --no-build --no-restore
|
||||
dotnet build ArchiSteamFarm -c "$CONFIGURATION" -o 'out/source' /nologo
|
||||
dotnet test ArchiSteamFarm.Tests -c "$CONFIGURATION" -o 'out/source'
|
||||
|
||||
publish() {
|
||||
if [ "$1" = 'generic' ]; then
|
||||
dotnet publish ArchiSteamFarm -c "$CONFIGURATION" -o "out/${1}" --no-restore /nologo "/p:ASFVariant=$1"
|
||||
dotnet publish ArchiSteamFarm -c "$CONFIGURATION" -o "out/${1}" /nologo "/p:ASFVariant=$1"
|
||||
else
|
||||
dotnet publish ArchiSteamFarm -c "$CONFIGURATION" -o "out/${1}" -r "$1" --no-restore /nologo "/p:ASFVariant=$1" "/p:CrossGenDuringPublish=false"
|
||||
dotnet publish ArchiSteamFarm -c "$CONFIGURATION" -o "out/${1}" -r "$1" /nologo "/p:ASFVariant=$1" "/p:CrossGenDuringPublish=false"
|
||||
fi
|
||||
|
||||
# If we include any helper scripts for this variant, copy them to output directory
|
||||
@@ -75,4 +72,4 @@ matrix:
|
||||
sudo: false
|
||||
- os: osx
|
||||
# Ref: https://docs.travis-ci.com/user/reference/osx/
|
||||
osx_image: xcode9.3beta
|
||||
osx_image: xcode9.3
|
||||
|
||||
@@ -27,9 +27,9 @@
|
||||
|
||||
<ItemGroup>
|
||||
<PackageReference Include="ConfigureAwaitChecker.Analyzer" Version="1.0.1" />
|
||||
<PackageReference Include="Microsoft.NET.Test.Sdk" Version="15.7.0" />
|
||||
<PackageReference Include="MSTest.TestAdapter" Version="1.3.0-beta2" />
|
||||
<PackageReference Include="MSTest.TestFramework" Version="1.3.0-beta2" />
|
||||
<PackageReference Include="Microsoft.NET.Test.Sdk" Version="15.8.0-preview-20180510-03" />
|
||||
<PackageReference Include="MSTest.TestAdapter" Version="1.3.0" />
|
||||
<PackageReference Include="MSTest.TestFramework" Version="1.3.0" />
|
||||
</ItemGroup>
|
||||
|
||||
<ItemGroup>
|
||||
|
||||
@@ -41,7 +41,7 @@ namespace ArchiSteamFarm {
|
||||
private static FileSystemWatcher FileSystemWatcher;
|
||||
|
||||
internal static async Task<Version> CheckAndUpdateProgram(bool updateOverride = false) {
|
||||
if (SharedInfo.IsCustomBuild || (Program.GlobalConfig.UpdateChannel == GlobalConfig.EUpdateChannel.None)) {
|
||||
if (!SharedInfo.BuildInfo.CanUpdate || (Program.GlobalConfig.UpdateChannel == GlobalConfig.EUpdateChannel.None)) {
|
||||
return null;
|
||||
}
|
||||
|
||||
@@ -139,7 +139,7 @@ namespace ArchiSteamFarm {
|
||||
return null;
|
||||
}
|
||||
|
||||
const string targetFile = SharedInfo.ASF + "-" + SharedInfo.Variant + ".zip";
|
||||
string targetFile = SharedInfo.ASF + "-" + SharedInfo.BuildInfo.Variant + ".zip";
|
||||
GitHub.ReleaseResponse.Asset binaryAsset = releaseResponse.Assets.FirstOrDefault(asset => asset.Name.Equals(targetFile, StringComparison.OrdinalIgnoreCase));
|
||||
|
||||
if (binaryAsset == null) {
|
||||
@@ -168,7 +168,7 @@ namespace ArchiSteamFarm {
|
||||
return null;
|
||||
}
|
||||
|
||||
if (IsUnixVariant(SharedInfo.Variant)) {
|
||||
if (OS.IsUnix) {
|
||||
string executable = Path.Combine(targetDirectory, SharedInfo.AssemblyName);
|
||||
if (File.Exists(executable)) {
|
||||
OS.UnixSetFileAccessExecutable(executable);
|
||||
@@ -212,22 +212,6 @@ namespace ArchiSteamFarm {
|
||||
FileSystemWatcher.EnableRaisingEvents = true;
|
||||
}
|
||||
|
||||
private static bool IsUnixVariant(string variant) {
|
||||
if (string.IsNullOrEmpty(variant)) {
|
||||
ArchiLogger.LogNullError(nameof(variant));
|
||||
return false;
|
||||
}
|
||||
|
||||
switch (variant) {
|
||||
case "linux-arm":
|
||||
case "linux-x64":
|
||||
case "osx-x64":
|
||||
return true;
|
||||
default:
|
||||
return false;
|
||||
}
|
||||
}
|
||||
|
||||
private static bool IsValidBotName(string botName) {
|
||||
if (string.IsNullOrEmpty(botName)) {
|
||||
ArchiLogger.LogNullError(nameof(botName));
|
||||
|
||||
@@ -2,15 +2,15 @@
|
||||
|
||||
<PropertyGroup>
|
||||
<ApplicationIcon>ASF.ico</ApplicationIcon>
|
||||
<AssemblyVersion>3.1.2.4</AssemblyVersion>
|
||||
<AssemblyVersion>3.1.2.7</AssemblyVersion>
|
||||
<Authors>JustArchi</Authors>
|
||||
<Company>JustArchi</Company>
|
||||
<ConcurrentGarbageCollection>true</ConcurrentGarbageCollection>
|
||||
<Copyright>Copyright © ArchiSteamFarm 2015-2018</Copyright>
|
||||
<Description>ASF is an application that allows you to farm steam cards using multiple steam accounts simultaneously.</Description>
|
||||
<ErrorReport>none</ErrorReport>
|
||||
<FileVersion>3.1.2.4</FileVersion>
|
||||
<LangVersion>latest</LangVersion>
|
||||
<FileVersion>3.1.2.7</FileVersion>
|
||||
<LangVersion>7.2</LangVersion>
|
||||
<NoWarn />
|
||||
<OutputType>Exe</OutputType>
|
||||
<PackageIconUrl>https://github.com/JustArchi/ArchiSteamFarm/raw/master/resources/ASF.ico</PackageIconUrl>
|
||||
@@ -36,13 +36,13 @@
|
||||
|
||||
<ItemGroup>
|
||||
<PackageReference Include="ConfigureAwaitChecker.Analyzer" Version="1.0.1" />
|
||||
<PackageReference Include="HtmlAgilityPack" Version="1.8.1" />
|
||||
<PackageReference Include="HtmlAgilityPack" Version="1.8.2" />
|
||||
<PackageReference Include="Humanizer" Version="2.2.0" />
|
||||
<PackageReference Include="ILLink.Tasks" Version="0.1.5-preview-1461378" />
|
||||
<PackageReference Include="Newtonsoft.Json" Version="11.0.2" />
|
||||
<PackageReference Include="NLog" Version="4.5.3" />
|
||||
<PackageReference Include="NLog" Version="4.5.4" />
|
||||
<PackageReference Include="protobuf-net" Version="2.3.7" />
|
||||
<PackageReference Include="System.Security.Cryptography.ProtectedData" Version="4.5.0-preview2-26406-04" />
|
||||
<PackageReference Include="System.Security.Cryptography.ProtectedData" Version="4.5.0-rc1" />
|
||||
</ItemGroup>
|
||||
|
||||
<ItemGroup>
|
||||
|
||||
@@ -42,14 +42,10 @@ namespace ArchiSteamFarm {
|
||||
private const string IPlayerService = "IPlayerService";
|
||||
private const string ISteamUserAuth = "ISteamUserAuth";
|
||||
private const string ITwoFactorService = "ITwoFactorService";
|
||||
|
||||
// We must use HTTPS for SteamCommunity, as http would make certain POST requests failing (trades)
|
||||
private const string SteamCommunityHost = "steamcommunity.com";
|
||||
private const string SteamCommunityURL = "https://" + SteamCommunityHost;
|
||||
|
||||
// We could (and should) use HTTPS for SteamStore, but that would make certain POST requests failing
|
||||
private const string SteamStoreHost = "store.steampowered.com";
|
||||
private const string SteamStoreURL = "http://" + SteamStoreHost;
|
||||
private const string SteamStoreURL = "https://" + SteamStoreHost;
|
||||
|
||||
private static readonly SemaphoreSlim InventorySemaphore = new SemaphoreSlim(1, 1);
|
||||
|
||||
@@ -76,7 +72,7 @@ namespace ArchiSteamFarm {
|
||||
|
||||
internal ArchiWebHandler(Bot bot) {
|
||||
Bot = bot ?? throw new ArgumentNullException(nameof(bot));
|
||||
WebBrowser = new WebBrowser(bot.ArchiLogger);
|
||||
WebBrowser = new WebBrowser(bot.ArchiLogger, Program.GlobalConfig.WebProxy);
|
||||
}
|
||||
|
||||
public void Dispose() {
|
||||
|
||||
@@ -23,6 +23,7 @@ using System;
|
||||
using System.Collections.Generic;
|
||||
using System.Diagnostics.CodeAnalysis;
|
||||
using System.IO;
|
||||
using System.Net;
|
||||
using System.Threading;
|
||||
using System.Threading.Tasks;
|
||||
using ArchiSteamFarm.Localization;
|
||||
@@ -120,6 +121,81 @@ namespace ArchiSteamFarm {
|
||||
[JsonProperty(Required = Required.DisallowNull)]
|
||||
internal ProtocolTypes SteamProtocols { get; private set; } = DefaultSteamProtocols;
|
||||
|
||||
internal WebProxy WebProxy { get; private set; }
|
||||
|
||||
[JsonProperty]
|
||||
internal string WebProxyPassword {
|
||||
get => WebProxyCredentials?.Password;
|
||||
set {
|
||||
if (string.IsNullOrEmpty(value)) {
|
||||
if (WebProxyCredentials == null) {
|
||||
return;
|
||||
}
|
||||
|
||||
WebProxyCredentials.Password = null;
|
||||
|
||||
if (!string.IsNullOrEmpty(WebProxyCredentials.UserName)) {
|
||||
return;
|
||||
}
|
||||
|
||||
WebProxyCredentials = null;
|
||||
if (WebProxy != null) {
|
||||
WebProxy.Credentials = null;
|
||||
}
|
||||
|
||||
return;
|
||||
}
|
||||
|
||||
if (WebProxyCredentials == null) {
|
||||
WebProxyCredentials = new NetworkCredential();
|
||||
}
|
||||
|
||||
WebProxyCredentials.Password = value;
|
||||
|
||||
if ((WebProxy != null) && (WebProxy.Credentials != WebProxyCredentials)) {
|
||||
WebProxy.Credentials = WebProxyCredentials;
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
[JsonProperty]
|
||||
internal string WebProxyUsername {
|
||||
get => WebProxyCredentials?.UserName;
|
||||
set {
|
||||
if (string.IsNullOrEmpty(value)) {
|
||||
if (WebProxyCredentials == null) {
|
||||
return;
|
||||
}
|
||||
|
||||
WebProxyCredentials.UserName = null;
|
||||
|
||||
if (!string.IsNullOrEmpty(WebProxyCredentials.Password)) {
|
||||
return;
|
||||
}
|
||||
|
||||
WebProxyCredentials = null;
|
||||
if (WebProxy != null) {
|
||||
WebProxy.Credentials = null;
|
||||
}
|
||||
|
||||
return;
|
||||
}
|
||||
|
||||
if (WebProxyCredentials == null) {
|
||||
WebProxyCredentials = new NetworkCredential();
|
||||
}
|
||||
|
||||
WebProxyCredentials.UserName = value;
|
||||
|
||||
if ((WebProxy != null) && (WebProxy.Credentials != WebProxyCredentials)) {
|
||||
WebProxy.Credentials = WebProxyCredentials;
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
private bool ShouldSerializeSensitiveDetails = true;
|
||||
private NetworkCredential WebProxyCredentials;
|
||||
|
||||
[JsonProperty(PropertyName = SharedInfo.UlongCompatibilityStringPrefix + nameof(SteamOwnerID), Required = Required.DisallowNull)]
|
||||
private string SSteamOwnerID {
|
||||
get => SteamOwnerID.ToString();
|
||||
@@ -133,6 +209,41 @@ namespace ArchiSteamFarm {
|
||||
}
|
||||
}
|
||||
|
||||
[JsonProperty(PropertyName = nameof(WebProxy))]
|
||||
private string WebProxyText {
|
||||
get => WebProxy?.Address.OriginalString;
|
||||
set {
|
||||
if (string.IsNullOrEmpty(value)) {
|
||||
if (WebProxy != null) {
|
||||
WebProxy = null;
|
||||
}
|
||||
|
||||
return;
|
||||
}
|
||||
|
||||
Uri uri;
|
||||
|
||||
try {
|
||||
uri = new Uri(value);
|
||||
} catch (UriFormatException e) {
|
||||
ASF.ArchiLogger.LogGenericException(e);
|
||||
return;
|
||||
}
|
||||
|
||||
if (WebProxy == null) {
|
||||
WebProxy = new WebProxy { BypassProxyOnLocal = true };
|
||||
}
|
||||
|
||||
WebProxy.Address = uri;
|
||||
|
||||
if ((WebProxyCredentials != null) && (WebProxy.Credentials != WebProxyCredentials)) {
|
||||
WebProxy.Credentials = WebProxyCredentials;
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
public bool ShouldSerializeWebProxyPassword() => ShouldSerializeSensitiveDetails;
|
||||
|
||||
internal static GlobalConfig Load(string filePath) {
|
||||
if (string.IsNullOrEmpty(filePath)) {
|
||||
ASF.ArchiLogger.LogNullError(nameof(filePath));
|
||||
@@ -157,6 +268,8 @@ namespace ArchiSteamFarm {
|
||||
return null;
|
||||
}
|
||||
|
||||
globalConfig.ShouldSerializeSensitiveDetails = false;
|
||||
|
||||
// User might not know what he's doing
|
||||
// Ensure that he can't screw core ASF variables
|
||||
if (globalConfig.ConnectionTimeout == 0) {
|
||||
|
||||
@@ -273,6 +273,12 @@ namespace ArchiSteamFarm {
|
||||
return true;
|
||||
}
|
||||
|
||||
if (jsonRequest.KeepSensitiveDetails) {
|
||||
if (string.IsNullOrEmpty(jsonRequest.GlobalConfig.WebProxyPassword) && !string.IsNullOrEmpty(Program.GlobalConfig.WebProxyPassword)) {
|
||||
jsonRequest.GlobalConfig.WebProxyPassword = Program.GlobalConfig.WebProxyPassword;
|
||||
}
|
||||
}
|
||||
|
||||
string filePath = Path.Combine(SharedInfo.ConfigDirectory, SharedInfo.GlobalConfigFileName);
|
||||
|
||||
if (!await GlobalConfig.Write(filePath, jsonRequest.GlobalConfig).ConfigureAwait(false)) {
|
||||
@@ -412,15 +418,15 @@ namespace ArchiSteamFarm {
|
||||
string botName = WebUtility.UrlDecode(arguments[argumentsIndex]);
|
||||
|
||||
if (jsonRequest.KeepSensitiveDetails && Bot.Bots.TryGetValue(botName, out Bot bot)) {
|
||||
if (string.IsNullOrEmpty(jsonRequest.BotConfig.SteamLogin)) {
|
||||
if (string.IsNullOrEmpty(jsonRequest.BotConfig.SteamLogin) && !string.IsNullOrEmpty(bot.BotConfig.SteamLogin)) {
|
||||
jsonRequest.BotConfig.SteamLogin = bot.BotConfig.SteamLogin;
|
||||
}
|
||||
|
||||
if (string.IsNullOrEmpty(jsonRequest.BotConfig.SteamParentalPIN)) {
|
||||
if (string.IsNullOrEmpty(jsonRequest.BotConfig.SteamParentalPIN) && !string.IsNullOrEmpty(bot.BotConfig.SteamParentalPIN)) {
|
||||
jsonRequest.BotConfig.SteamParentalPIN = bot.BotConfig.SteamParentalPIN;
|
||||
}
|
||||
|
||||
if (string.IsNullOrEmpty(jsonRequest.BotConfig.SteamPassword)) {
|
||||
if (string.IsNullOrEmpty(jsonRequest.BotConfig.SteamPassword) && !string.IsNullOrEmpty(bot.BotConfig.SteamPassword)) {
|
||||
jsonRequest.BotConfig.SteamPassword = bot.BotConfig.SteamPassword;
|
||||
}
|
||||
}
|
||||
@@ -1172,6 +1178,9 @@ namespace ArchiSteamFarm {
|
||||
internal readonly GlobalConfig GlobalConfig;
|
||||
#pragma warning restore 649
|
||||
|
||||
[JsonProperty(Required = Required.DisallowNull)]
|
||||
internal readonly bool KeepSensitiveDetails = true;
|
||||
|
||||
// Deserialized from JSON
|
||||
private ASFRequest() { }
|
||||
}
|
||||
|
||||
@@ -332,11 +332,14 @@ namespace ArchiSteamFarm.Json {
|
||||
private ConfirmationDetails() { }
|
||||
|
||||
// REF: Internal documentation
|
||||
[SuppressMessage("ReSharper", "UnusedMember.Global")]
|
||||
internal enum EType : byte {
|
||||
Unknown,
|
||||
Generic,
|
||||
Trade,
|
||||
Market
|
||||
Market,
|
||||
// We're missing information about definition of number 4 type
|
||||
ChangePhoneNumber = 5
|
||||
}
|
||||
}
|
||||
|
||||
|
||||
@@ -505,7 +505,10 @@ StackTrace:
|
||||
<value>Bereits im Besitz: {0} | {1}</value>
|
||||
<comment>{0} will be replaced by game's ID (number), {1} will be replaced by game's name</comment>
|
||||
</data>
|
||||
|
||||
<data name="BotRateLimitExceeded" xml:space="preserve">
|
||||
<value>Anfragenlimit überschritten, wir versuchen es nach {0} Wartezeit erneut...</value>
|
||||
<comment>{0} will be replaced by translated TimeSpan string (such as "25 minutes")</comment>
|
||||
</data>
|
||||
<data name="BotReconnecting" xml:space="preserve">
|
||||
<value>Verbinde erneut...</value>
|
||||
</data>
|
||||
|
||||
@@ -505,7 +505,10 @@ Trazo de pila:
|
||||
<value>Ya posees: {0} | {1}</value>
|
||||
<comment>{0} will be replaced by game's ID (number), {1} will be replaced by game's name</comment>
|
||||
</data>
|
||||
|
||||
<data name="BotRateLimitExceeded" xml:space="preserve">
|
||||
<value>Cuota excedida; se reintentará en {0} luego del tiempo de espera...</value>
|
||||
<comment>{0} will be replaced by translated TimeSpan string (such as "25 minutes")</comment>
|
||||
</data>
|
||||
<data name="BotReconnecting" xml:space="preserve">
|
||||
<value>Reconectando...</value>
|
||||
</data>
|
||||
@@ -653,6 +656,12 @@ Trazo de pila:
|
||||
<data name="BotRefreshingPackagesData" xml:space="preserve">
|
||||
<value>Actualizando datos de los paquetes...</value>
|
||||
</data>
|
||||
|
||||
|
||||
<data name="WarningDeprecated" xml:space="preserve">
|
||||
<value>Uso de {0} está desaprobado y se quitará en versiones futuras del programa. Utilice en su lugar {1}.</value>
|
||||
<comment>{0} will be replaced by the name of deprecated property (such as argument, config property or likewise), {1} will be replaced by the name of valid replacement (such as another argument or config property)</comment>
|
||||
</data>
|
||||
<data name="BotAcceptedDonationTrade" xml:space="preserve">
|
||||
<value>Aceptar Intercambios de donación: {0}</value>
|
||||
<comment>{0} will be replaced by trade's ID (number)</comment>
|
||||
</data>
|
||||
</root>
|
||||
|
||||
@@ -506,7 +506,10 @@ StackTrace :
|
||||
<value>Possède déjà : {0} | {1}</value>
|
||||
<comment>{0} will be replaced by game's ID (number), {1} will be replaced by game's name</comment>
|
||||
</data>
|
||||
|
||||
<data name="BotRateLimitExceeded" xml:space="preserve">
|
||||
<value>Tentatives trop nombreuses ; nouvelle tentative dans {0}...</value>
|
||||
<comment>{0} will be replaced by translated TimeSpan string (such as "25 minutes")</comment>
|
||||
</data>
|
||||
<data name="BotReconnecting" xml:space="preserve">
|
||||
<value>Reconnexion...</value>
|
||||
</data>
|
||||
@@ -658,5 +661,8 @@ StackTrace :
|
||||
<value>L'Utilisation de {0} est désapprouvée et sera supprimée dans les prochaines versions du programme. Utilisez plutôt {1}.</value>
|
||||
<comment>{0} will be replaced by the name of deprecated property (such as argument, config property or likewise), {1} will be replaced by the name of valid replacement (such as another argument or config property)</comment>
|
||||
</data>
|
||||
|
||||
<data name="BotAcceptedDonationTrade" xml:space="preserve">
|
||||
<value>Don accepté: {0}</value>
|
||||
<comment>{0} will be replaced by trade's ID (number)</comment>
|
||||
</data>
|
||||
</root>
|
||||
|
||||
@@ -506,7 +506,10 @@ StackTrace:
|
||||
<value>Deținute deja: {0} | {1}</value>
|
||||
<comment>{0} will be replaced by game's ID (number), {1} will be replaced by game's name</comment>
|
||||
</data>
|
||||
|
||||
<data name="BotRateLimitExceeded" xml:space="preserve">
|
||||
<value>Limita ratei depășită, vom reîncerca după {0} de așteptare...</value>
|
||||
<comment>{0} will be replaced by translated TimeSpan string (such as "25 minutes")</comment>
|
||||
</data>
|
||||
<data name="BotReconnecting" xml:space="preserve">
|
||||
<value>Reconectare...</value>
|
||||
</data>
|
||||
@@ -654,6 +657,12 @@ StackTrace:
|
||||
<data name="BotRefreshingPackagesData" xml:space="preserve">
|
||||
<value>Se reîmprospătează datele pachetelor...</value>
|
||||
</data>
|
||||
|
||||
|
||||
<data name="WarningDeprecated" xml:space="preserve">
|
||||
<value>Folosirea lui {0} este învechită și va fi eliminată în versiunile viitoare ale programului. Te rugăm să folosești în schimb {1}.</value>
|
||||
<comment>{0} will be replaced by the name of deprecated property (such as argument, config property or likewise), {1} will be replaced by the name of valid replacement (such as another argument or config property)</comment>
|
||||
</data>
|
||||
<data name="BotAcceptedDonationTrade" xml:space="preserve">
|
||||
<value>Acceptat schimbul de donație: {0}</value>
|
||||
<comment>{0} will be replaced by trade's ID (number)</comment>
|
||||
</data>
|
||||
</root>
|
||||
|
||||
@@ -506,7 +506,10 @@ StackTrace:
|
||||
<value>Đã sở hữu: {0} | {1}</value>
|
||||
<comment>{0} will be replaced by game's ID (number), {1} will be replaced by game's name</comment>
|
||||
</data>
|
||||
|
||||
<data name="BotRateLimitExceeded" xml:space="preserve">
|
||||
<value>Vượt quá số lượng giới hạn, chúng tôi sẽ thử lại sau {0} đếm ngược...</value>
|
||||
<comment>{0} will be replaced by translated TimeSpan string (such as "25 minutes")</comment>
|
||||
</data>
|
||||
<data name="BotReconnecting" xml:space="preserve">
|
||||
<value>Đang kết nối lại...</value>
|
||||
</data>
|
||||
|
||||
@@ -27,6 +27,8 @@ using ArchiSteamFarm.Localization;
|
||||
|
||||
namespace ArchiSteamFarm {
|
||||
internal static class OS {
|
||||
internal static bool IsUnix => RuntimeInformation.IsOSPlatform(OSPlatform.Linux) || RuntimeInformation.IsOSPlatform(OSPlatform.OSX);
|
||||
|
||||
internal static void Init(bool systemRequired) {
|
||||
if (RuntimeInformation.IsOSPlatform(OSPlatform.Windows)) {
|
||||
DisableQuickEditMode();
|
||||
|
||||
@@ -189,7 +189,7 @@ namespace ArchiSteamFarm {
|
||||
}
|
||||
|
||||
private static async Task InitASF(IReadOnlyCollection<string> args) {
|
||||
ASF.ArchiLogger.LogGenericInfo("ASF V" + SharedInfo.Version + " (" + SharedInfo.ModuleVersion + ")");
|
||||
ASF.ArchiLogger.LogGenericInfo(SharedInfo.PublicIdentifier + " V" + SharedInfo.Version + " (" + SharedInfo.ModuleVersion + ")");
|
||||
|
||||
await InitGlobalConfigAndLanguage().ConfigureAwait(false);
|
||||
|
||||
@@ -346,7 +346,7 @@ namespace ArchiSteamFarm {
|
||||
}
|
||||
|
||||
WebBrowser.Init();
|
||||
WebBrowser = new WebBrowser(ASF.ArchiLogger, true);
|
||||
WebBrowser = new WebBrowser(ASF.ArchiLogger, GlobalConfig.WebProxy, true);
|
||||
|
||||
if (GlobalConfig.IPC && (GlobalConfig.IPCPrefixes.Count > 0)) {
|
||||
IPC.Start(GlobalConfig.IPCPrefixes);
|
||||
|
||||
@@ -20,24 +20,11 @@
|
||||
// limitations under the License.
|
||||
|
||||
using System;
|
||||
using System.Diagnostics.CodeAnalysis;
|
||||
using System.Reflection;
|
||||
|
||||
namespace ArchiSteamFarm {
|
||||
internal static class SharedInfo {
|
||||
#if ASF_VARIANT_GENERIC
|
||||
internal const string Variant = "generic";
|
||||
#elif ASF_VARIANT_LINUX_ARM
|
||||
internal const string Variant = "linux-arm";
|
||||
#elif ASF_VARIANT_LINUX_X64
|
||||
internal const string Variant = "linux-x64";
|
||||
#elif ASF_VARIANT_OSX_X64
|
||||
internal const string Variant = "osx-x64";
|
||||
#elif ASF_VARIANT_WIN_X64
|
||||
internal const string Variant = "win-x64";
|
||||
#else
|
||||
internal const string Variant = SourceVariant;
|
||||
#endif
|
||||
|
||||
internal const ulong ArchiSteamID = 76561198006963719;
|
||||
internal const string ASF = nameof(ASF);
|
||||
internal const ulong ASFGroupSteamID = 103582791440160998;
|
||||
@@ -61,11 +48,38 @@ namespace ArchiSteamFarm {
|
||||
internal const string UpdateDirectory = "_old";
|
||||
internal const string WebsiteDirectory = "www";
|
||||
|
||||
private const string SourceVariant = "source";
|
||||
|
||||
internal static bool IsCustomBuild => Variant == SourceVariant;
|
||||
internal static Guid ModuleVersion => Assembly.GetEntryAssembly().ManifestModule.ModuleVersionId;
|
||||
internal static string PublicIdentifier => AssemblyName + (IsCustomBuild ? "-custom" : "");
|
||||
internal static string PublicIdentifier => AssemblyName + (BuildInfo.IsCustomBuild ? "-custom" : "");
|
||||
internal static Version Version => Assembly.GetEntryAssembly().GetName().Version;
|
||||
|
||||
[SuppressMessage("ReSharper", "ConvertToConstant.Global")]
|
||||
internal static class BuildInfo {
|
||||
#if ASF_VARIANT_DOCKER
|
||||
internal static readonly bool CanUpdate = false;
|
||||
internal static readonly string Variant = "docker";
|
||||
#elif ASF_VARIANT_GENERIC
|
||||
internal static readonly bool CanUpdate = true;
|
||||
internal static readonly string Variant = "generic";
|
||||
#elif ASF_VARIANT_LINUX_ARM
|
||||
internal static readonly bool CanUpdate = true;
|
||||
internal static readonly string Variant = "linux-arm";
|
||||
#elif ASF_VARIANT_LINUX_X64
|
||||
internal static readonly bool CanUpdate = true;
|
||||
internal static readonly string Variant = "linux-x64";
|
||||
#elif ASF_VARIANT_OSX_X64
|
||||
internal static readonly bool CanUpdate = true;
|
||||
internal static readonly string Variant = "osx-x64";
|
||||
#elif ASF_VARIANT_WIN_X64
|
||||
internal static readonly bool CanUpdate = true;
|
||||
internal static readonly string Variant = "win-x64";
|
||||
#else
|
||||
internal static readonly bool CanUpdate = false;
|
||||
internal static readonly string Variant = SourceVariant;
|
||||
#endif
|
||||
|
||||
private const string SourceVariant = "source";
|
||||
|
||||
internal static bool IsCustomBuild => Variant == SourceVariant;
|
||||
}
|
||||
}
|
||||
}
|
||||
@@ -45,7 +45,7 @@ namespace ArchiSteamFarm {
|
||||
private readonly ArchiLogger ArchiLogger;
|
||||
private readonly HttpClient HttpClient;
|
||||
|
||||
internal WebBrowser(ArchiLogger archiLogger, bool extendedTimeout = false) {
|
||||
internal WebBrowser(ArchiLogger archiLogger, IWebProxy webProxy = null, bool extendedTimeout = false) {
|
||||
ArchiLogger = archiLogger ?? throw new ArgumentNullException(nameof(archiLogger));
|
||||
|
||||
HttpClientHandler httpClientHandler = new HttpClientHandler {
|
||||
@@ -53,7 +53,8 @@ namespace ArchiSteamFarm {
|
||||
AutomaticDecompression = DecompressionMethods.Deflate | DecompressionMethods.GZip,
|
||||
CookieContainer = CookieContainer,
|
||||
MaxConnectionsPerServer = MaxConnections,
|
||||
UseProxy = false
|
||||
Proxy = webProxy,
|
||||
UseProxy = webProxy != null
|
||||
};
|
||||
|
||||
HttpClient = new HttpClient(httpClientHandler) { Timeout = TimeSpan.FromSeconds(extendedTimeout ? ExtendedTimeoutMultiplier * Program.GlobalConfig.ConnectionTimeout : Program.GlobalConfig.ConnectionTimeout) };
|
||||
|
||||
@@ -26,5 +26,8 @@
|
||||
"SteamProtocols": 3,
|
||||
"UpdateChannel": 1,
|
||||
"UpdatePeriod": 24,
|
||||
"WebLimiterDelay": 200
|
||||
"WebLimiterDelay": 200,
|
||||
"WebProxy": null,
|
||||
"WebProxyPassword": null,
|
||||
"WebProxyUsername": null
|
||||
}
|
||||
@@ -3,29 +3,29 @@
|
||||
"bots-hide": "Masquer les bots",
|
||||
"bots-hide-offline": "Bots hors-ligne",
|
||||
"bots-hide-online": "Bots en ligne",
|
||||
"bots-key": "",
|
||||
"bots-key": "Voir la touche",
|
||||
"bots-simple": "Information de base concernant le farming",
|
||||
"bots-title": "ASF | Bots",
|
||||
"command-auto-clear": "Effacer automatiquement",
|
||||
"commands-title": "",
|
||||
"commands-title": "ASF | Commandes",
|
||||
"editor-change": "Changer de bot",
|
||||
"editor-current": "En train d'éditer :",
|
||||
"editor-save": "Sauvegarder",
|
||||
"editor-title": "",
|
||||
"editor-title": "ASF | Éditeur de configuration",
|
||||
"generator-change": "Changer de mode",
|
||||
"generator-current": "Mode actuel :",
|
||||
"generator-download": "Téléchargement",
|
||||
"generator-title": "",
|
||||
"global-bots": "",
|
||||
"global-boxed": "",
|
||||
"global-boxed-description": "",
|
||||
"global-change": "",
|
||||
"global-changelog": "",
|
||||
"generator-title": "ASF | Générateur de config",
|
||||
"global-bots": "Bots",
|
||||
"global-boxed": "Mise en page en boîtes",
|
||||
"global-boxed-description": "Activer\/désactiver la mise en page en boîtes",
|
||||
"global-change": "Modifier",
|
||||
"global-changelog": "Liste des changements",
|
||||
"global-commands": "Commandes",
|
||||
"global-config": "Configuration",
|
||||
"global-control-panel": "",
|
||||
"global-editor": "",
|
||||
"global-generator": "",
|
||||
"global-control-panel": "Panneau de Configuration",
|
||||
"global-editor": "Editeur",
|
||||
"global-generator": "Générateur",
|
||||
"global-home": "Accueil",
|
||||
"global-information": "Information",
|
||||
"global-language": "Langue",
|
||||
|
||||
@@ -1,43 +1,43 @@
|
||||
{
|
||||
"bots-delete": "",
|
||||
"bots-hide": "",
|
||||
"bots-hide-offline": "",
|
||||
"bots-hide-online": "",
|
||||
"bots-key": "",
|
||||
"bots-simple": "",
|
||||
"bots-title": "",
|
||||
"command-auto-clear": "",
|
||||
"commands-title": "",
|
||||
"editor-change": "",
|
||||
"editor-current": "",
|
||||
"editor-save": "",
|
||||
"editor-title": "",
|
||||
"generator-change": "",
|
||||
"generator-current": "",
|
||||
"bots-delete": "Afișează butonul de ștergere",
|
||||
"bots-hide": "Ascunde boții",
|
||||
"bots-hide-offline": "Boți offline",
|
||||
"bots-hide-online": "Boți offline",
|
||||
"bots-key": "Afișează tasta",
|
||||
"bots-simple": "Informații simple privind farmarea",
|
||||
"bots-title": "ASF | Boți",
|
||||
"command-auto-clear": "Șterge automat",
|
||||
"commands-title": "ASF | Comenzi",
|
||||
"editor-change": "Schimbă botul",
|
||||
"editor-current": "Se editează în prezent:",
|
||||
"editor-save": "Salvează",
|
||||
"editor-title": "ASF | Editor de configurații",
|
||||
"generator-change": "Modifică modul",
|
||||
"generator-current": "Modul actual:",
|
||||
"generator-download": "Descarcă",
|
||||
"generator-title": "",
|
||||
"global-bots": "",
|
||||
"global-boxed": "",
|
||||
"global-boxed-description": "",
|
||||
"global-change": "",
|
||||
"global-changelog": "",
|
||||
"global-commands": "",
|
||||
"global-config": "",
|
||||
"global-control-panel": "",
|
||||
"global-editor": "",
|
||||
"global-generator": "",
|
||||
"generator-title": "ASF | Generator de configurații",
|
||||
"global-bots": "Boți",
|
||||
"global-boxed": "Aspect tip cutie",
|
||||
"global-boxed-description": "Comută aspectul tip cutie",
|
||||
"global-change": "Schimbă",
|
||||
"global-changelog": "Jurnalul modificărilor",
|
||||
"global-commands": "Comenzi",
|
||||
"global-config": "Configurație",
|
||||
"global-control-panel": "Panoul de control",
|
||||
"global-editor": "Editor",
|
||||
"global-generator": "Generator",
|
||||
"global-home": "Pagina principală",
|
||||
"global-information": "",
|
||||
"global-language": "",
|
||||
"global-layout": "",
|
||||
"global-log": "",
|
||||
"global-navigation": "",
|
||||
"global-nightmode": "",
|
||||
"global-nightmode-description": "",
|
||||
"global-ram-usage": "",
|
||||
"global-skins": "",
|
||||
"global-uptime": "",
|
||||
"global-version": "",
|
||||
"global-wiki": "",
|
||||
"log-title": ""
|
||||
"global-information": "Informații",
|
||||
"global-language": "Limbă",
|
||||
"global-layout": "Aspect",
|
||||
"global-log": "Log",
|
||||
"global-navigation": "Comută navigarea",
|
||||
"global-nightmode": "Mod nocturn",
|
||||
"global-nightmode-description": "Comută modul nocturn",
|
||||
"global-ram-usage": "Utilizare RAM",
|
||||
"global-skins": "Skinuri",
|
||||
"global-uptime": "Timp de funcționare",
|
||||
"global-version": "Versiune",
|
||||
"global-wiki": "Wiki",
|
||||
"log-title": "ASF | Log"
|
||||
}
|
||||
@@ -1,6 +1,6 @@
|
||||
{
|
||||
"bots-delete": "",
|
||||
"bots-hide": "",
|
||||
"bots-delete": "Hiện nút xoá",
|
||||
"bots-hide": "Ẩn bot",
|
||||
"bots-hide-offline": "",
|
||||
"bots-hide-online": "",
|
||||
"bots-key": "",
|
||||
@@ -20,11 +20,11 @@
|
||||
"global-boxed": "",
|
||||
"global-boxed-description": "",
|
||||
"global-change": "",
|
||||
"global-changelog": "",
|
||||
"global-changelog": "Các thay đổi",
|
||||
"global-commands": "",
|
||||
"global-config": "",
|
||||
"global-control-panel": "",
|
||||
"global-editor": "",
|
||||
"global-config": "Cấu hình",
|
||||
"global-control-panel": "Bảng điều khiển trung tâm",
|
||||
"global-editor": "Trình biên tập",
|
||||
"global-generator": "",
|
||||
"global-home": "Trang chủ",
|
||||
"global-information": "",
|
||||
|
||||
@@ -2,7 +2,7 @@ FROM microsoft/dotnet:2.0-sdk AS build-env
|
||||
WORKDIR /app
|
||||
COPY . ./
|
||||
RUN dotnet --info && \
|
||||
dotnet publish ArchiSteamFarm -c Release -o out /nologo && \
|
||||
dotnet publish ArchiSteamFarm -c Release -o out /nologo /p:ASFVariant=docker && \
|
||||
cp "ArchiSteamFarm/scripts/generic/ArchiSteamFarm.sh" "ArchiSteamFarm/out/ArchiSteamFarm.sh"
|
||||
|
||||
FROM microsoft/dotnet:2.0-runtime-stretch-arm32v7
|
||||
|
||||
@@ -2,7 +2,7 @@ FROM microsoft/dotnet:2.0-sdk AS build-env
|
||||
WORKDIR /app
|
||||
COPY . ./
|
||||
RUN dotnet --info && \
|
||||
dotnet publish ArchiSteamFarm -c Release -o out /nologo && \
|
||||
dotnet publish ArchiSteamFarm -c Release -o out /nologo /p:ASFVariant=docker && \
|
||||
cp "ArchiSteamFarm/scripts/generic/ArchiSteamFarm.sh" "ArchiSteamFarm/out/ArchiSteamFarm.sh"
|
||||
|
||||
FROM microsoft/dotnet:2.0-runtime
|
||||
|
||||
12
README.md
12
README.md
@@ -13,13 +13,13 @@
|
||||
[](https://discord.gg/hSQgt8j)
|
||||
[](https://github.com/JustArchi/ArchiSteamFarm/wiki)
|
||||
|
||||
[](https://github.com/JustArchi/ArchiSteamFarm/releases/latest)
|
||||
[](https://github.com/JustArchi/ArchiSteamFarm/releases/latest)
|
||||
[](https://github.com/JustArchi/ArchiSteamFarm/releases/latest)
|
||||
[](https://github.com/JustArchi/ArchiSteamFarm/releases/latest)
|
||||
[](https://github.com/JustArchi/ArchiSteamFarm/releases/latest)
|
||||
[](https://github.com/JustArchi/ArchiSteamFarm/releases/latest)
|
||||
|
||||
[](https://github.com/JustArchi/ArchiSteamFarm/releases)
|
||||
[](https://github.com/JustArchi/ArchiSteamFarm/releases)
|
||||
[](https://github.com/JustArchi/ArchiSteamFarm/releases)
|
||||
[](https://github.com/JustArchi/ArchiSteamFarm/releases)
|
||||
[](https://github.com/JustArchi/ArchiSteamFarm/releases)
|
||||
[](https://github.com/JustArchi/ArchiSteamFarm/releases)
|
||||
|
||||
[](https://www.patreon.com/JustArchi)
|
||||
[](https://www.paypal.me/JustArchi/5usd)
|
||||
|
||||
@@ -1,7 +1,7 @@
|
||||
import Validators from './validators';
|
||||
|
||||
export default {
|
||||
'V3.1.2.3+': {
|
||||
'V3.1.2.5+': {
|
||||
asf: [
|
||||
{
|
||||
legend: 'schema.basic',
|
||||
@@ -117,6 +117,24 @@ export default {
|
||||
],
|
||||
defaultValue: 0,
|
||||
advanced: true
|
||||
},
|
||||
{
|
||||
label: 'WebProxy',
|
||||
field: 'WebProxy',
|
||||
placeholder: '',
|
||||
type: 'InputText'
|
||||
},
|
||||
{
|
||||
label: 'WebProxyPassword',
|
||||
field: 'WebProxyPassword',
|
||||
placeholder: '',
|
||||
type: 'InputPassword'
|
||||
},
|
||||
{
|
||||
label: 'WebProxyUsername',
|
||||
field: 'WebProxyUsername',
|
||||
placeholder: '',
|
||||
type: 'InputText'
|
||||
}
|
||||
]
|
||||
},
|
||||
@@ -287,7 +305,8 @@ export default {
|
||||
values: [
|
||||
{ value: 0, name: 'None' },
|
||||
{ value: 1, name: 'RejectInvalidFriendInvites' },
|
||||
{ value: 2, name: 'RejectInvalidTrades' }
|
||||
{ value: 2, name: 'RejectInvalidTrades' },
|
||||
{ value: 4, name: 'RejectInvalidGroupInvites' }
|
||||
],
|
||||
defaultValue: 0,
|
||||
advanced: true
|
||||
|
||||
10
appveyor.yml
10
appveyor.yml
@@ -29,8 +29,6 @@ before_build:
|
||||
|
||||
|
||||
dotnet --info
|
||||
|
||||
dotnet restore
|
||||
build_script:
|
||||
- pwsh: >-
|
||||
Set-StrictMode -Version Latest
|
||||
@@ -40,7 +38,7 @@ build_script:
|
||||
$ProgressPreference = 'SilentlyContinue'
|
||||
|
||||
|
||||
dotnet build -c "$env:CONFIGURATION" -o 'out\source' --no-restore /nologo
|
||||
dotnet build ArchiSteamFarm -c "$env:CONFIGURATION" -o 'out\source' /nologo
|
||||
test_script:
|
||||
- pwsh: >-
|
||||
Set-StrictMode -Version Latest
|
||||
@@ -50,7 +48,7 @@ test_script:
|
||||
$ProgressPreference = 'SilentlyContinue'
|
||||
|
||||
|
||||
dotnet test ArchiSteamFarm.Tests -c "$env:CONFIGURATION" -o 'out\source' --no-build --no-restore
|
||||
dotnet test ArchiSteamFarm.Tests -c "$env:CONFIGURATION" -o 'out\source'
|
||||
after_test:
|
||||
- pwsh: >-
|
||||
Set-StrictMode -Version Latest
|
||||
@@ -70,9 +68,9 @@ after_test:
|
||||
Set-Location -Path "$env:APPVEYOR_BUILD_FOLDER"
|
||||
|
||||
if ($Variant -eq 'generic') {
|
||||
dotnet publish ArchiSteamFarm -c "$env:CONFIGURATION" -o "out\$Variant" --no-restore /nologo "/p:ASFVariant=$Variant"
|
||||
dotnet publish ArchiSteamFarm -c "$env:CONFIGURATION" -o "out\$Variant" /nologo "/p:ASFVariant=$Variant"
|
||||
} else {
|
||||
dotnet publish ArchiSteamFarm -c "$env:CONFIGURATION" -o "out\$Variant" -r "$Variant" --no-restore /nologo "/p:ASFVariant=$Variant" "/p:CrossGenDuringPublish=false"
|
||||
dotnet publish ArchiSteamFarm -c "$env:CONFIGURATION" -o "out\$Variant" -r "$Variant" /nologo "/p:ASFVariant=$Variant" "/p:CrossGenDuringPublish=false"
|
||||
}
|
||||
|
||||
# If we include any helper scripts for this variant, copy them to output directory
|
||||
|
||||
@@ -1,8 +0,0 @@
|
||||
"preserve_hierarchy": true
|
||||
files:
|
||||
- source: /ArchiSteamFarm/Localization/Strings.resx
|
||||
translation: /ArchiSteamFarm/Localization/Strings.%locale%.resx
|
||||
- source: /ArchiSteamFarm/www/locale/strings.json
|
||||
translation: /ArchiSteamFarm/www/locale/strings.%locale%.json
|
||||
- source: /WebConfigGenerator/src/locale/strings.json
|
||||
translation: /WebConfigGenerator/src/locale/%locale%.json
|
||||
24
crowdin.yml
Normal file
24
crowdin.yml
Normal file
@@ -0,0 +1,24 @@
|
||||
"preserve_hierarchy": true
|
||||
"files": [
|
||||
{
|
||||
"source": "/ArchiSteamFarm/Localization/Strings.resx",
|
||||
"translation": "/ArchiSteamFarm/Localization/Strings.%locale%.resx"
|
||||
},
|
||||
{
|
||||
"source": "/ArchiSteamFarm/www/locale/strings.json",
|
||||
"translation": "/ArchiSteamFarm/www/locale/strings.%locale%.json"
|
||||
},
|
||||
{
|
||||
"source": "/WebConfigGenerator/src/locale/strings.json",
|
||||
"translation": "/WebConfigGenerator/src/locale/%locale%.json"
|
||||
},
|
||||
{
|
||||
"source": "/wiki/*.md",
|
||||
"translation": "/wiki/locale/%locale%/%file_name%-%locale%.%file_extension%",
|
||||
"ignore": [ "/**/_*.md" ]
|
||||
},
|
||||
{
|
||||
"source": "/wiki/_Sidebar.md",
|
||||
"translation": "/wiki/locale/%locale%/_Sidebar.md"
|
||||
}
|
||||
]
|
||||
File diff suppressed because one or more lines are too long
@@ -15,7 +15,7 @@ This tool is being used by ASF developers for synchronization of strings/transla
|
||||
|
||||
## Before you begin
|
||||
|
||||
- Make sure that your `crowdin_identity.yaml` file exists - this is the file with login credentials that is not being committed to GitHub. If it doesn't exist yet (e.g. because you've just cloned the repo), create it from `crowdin_identity_example.yaml` and fill `api_key` that can be found **[here](http://l10n.asf.justarchi.net/project/archisteamfarm/settings#api)**.
|
||||
- Make sure that your `crowdin_identity.yml` file exists - this is the file with login credentials that is not being committed to GitHub. If it doesn't exist yet (e.g. because you've just cloned the repo), create it from `crowdin_identity_example.yml` and fill `api_key` that can be found **[here](http://l10n.asf.justarchi.net/project/archisteamfarm/settings#api)**.
|
||||
|
||||
- Ensure that `crowdin` command is recognized by your OS.
|
||||
|
||||
@@ -32,8 +32,8 @@ This tool is being used by ASF developers for synchronization of strings/transla
|
||||
|
||||
## Usage
|
||||
|
||||
- `archi_upload.bat` for pushing strings to Crowdin (when any `*Strings.resx` file gets modified).
|
||||
- `archi_upload.ps1` for pushing strings to Crowdin.
|
||||
|
||||
- `archi_download.bat` for downloading translations from Crowdin (typically last commit before release).
|
||||
- `archi_download.ps1` for downloading translations from Crowdin (typically last commit before release).
|
||||
|
||||
- `archi_sync.bat` for upload + download (tree sync, e.g. when modifying/removing original strings).
|
||||
- `archi_sync.ps1` for upload + download (tree sync).
|
||||
|
||||
@@ -1,8 +0,0 @@
|
||||
@echo off
|
||||
pushd %~dp0
|
||||
cd ..\\..
|
||||
call crowdin -b master --identity tools\\crowdin-cli\\crowdin_identity.yaml download
|
||||
git reset
|
||||
git add -A "ArchiSteamFarm\Localization\*.resx" "ArchiSteamFarm\www\locale\*.json" "WebConfigGenerator\src\locale\*.json"
|
||||
git commit -m "Translations update"
|
||||
pause
|
||||
21
tools/crowdin-cli/archi_download.ps1
Normal file
21
tools/crowdin-cli/archi_download.ps1
Normal file
@@ -0,0 +1,21 @@
|
||||
Set-StrictMode -Version Latest
|
||||
$ErrorActionPreference = 'Stop'
|
||||
$ProgressPreference = 'SilentlyContinue'
|
||||
|
||||
Set-Location $PSScriptRoot
|
||||
Set-Location ..\\..
|
||||
|
||||
crowdin -b master --identity tools\\crowdin-cli\\crowdin_identity.yml download
|
||||
git reset
|
||||
|
||||
Push-Location -Path wiki
|
||||
git pull
|
||||
git add -A "locale\*.md"
|
||||
git commit -m "Translations update"
|
||||
Pop-Location
|
||||
|
||||
git add -A "ArchiSteamFarm\Localization\*.resx" "ArchiSteamFarm\www\locale\*.json" "WebConfigGenerator\src\locale\*.json" "wiki"
|
||||
git commit -m "Translations update"
|
||||
|
||||
git push --recurse-submodules=on-demand
|
||||
pause
|
||||
@@ -1,9 +0,0 @@
|
||||
@echo off
|
||||
pushd %~dp0
|
||||
cd ..\\..
|
||||
call crowdin -b master --identity tools\\crowdin-cli\\crowdin_identity.yaml upload sources
|
||||
call crowdin -b master --identity tools\\crowdin-cli\\crowdin_identity.yaml download
|
||||
git reset
|
||||
git add -A "ArchiSteamFarm\Localization\*.resx" "ArchiSteamFarm\www\locale\*.json" "WebConfigGenerator\src\locale\*.json"
|
||||
git commit -m "Translations update"
|
||||
pause
|
||||
29
tools/crowdin-cli/archi_sync.ps1
Normal file
29
tools/crowdin-cli/archi_sync.ps1
Normal file
@@ -0,0 +1,29 @@
|
||||
Set-StrictMode -Version Latest
|
||||
$ErrorActionPreference = 'Stop'
|
||||
$ProgressPreference = 'SilentlyContinue'
|
||||
|
||||
Set-Location $PSScriptRoot
|
||||
Set-Location ..\\..
|
||||
|
||||
Push-Location -Path wiki
|
||||
git reset --hard
|
||||
git clean -fd
|
||||
git pull
|
||||
Pop-Location
|
||||
|
||||
crowdin -b master --identity tools\\crowdin-cli\\crowdin_identity.yml upload sources
|
||||
|
||||
crowdin -b master --identity tools\\crowdin-cli\\crowdin_identity.yml download
|
||||
git reset
|
||||
|
||||
Push-Location -Path wiki
|
||||
git pull
|
||||
git add -A "locale\*.md"
|
||||
git commit -m "Translations update"
|
||||
Pop-Location
|
||||
|
||||
git add -A "ArchiSteamFarm\Localization\*.resx" "ArchiSteamFarm\www\locale\*.json" "WebConfigGenerator\src\locale\*.json" "wiki"
|
||||
git commit -m "Translations update"
|
||||
|
||||
git push --recurse-submodules=on-demand
|
||||
pause
|
||||
@@ -1,5 +0,0 @@
|
||||
@echo off
|
||||
pushd %~dp0
|
||||
cd ..\\..
|
||||
call crowdin -b master --identity tools\\crowdin-cli\\crowdin_identity.yaml upload sources
|
||||
pause
|
||||
15
tools/crowdin-cli/archi_upload.ps1
Normal file
15
tools/crowdin-cli/archi_upload.ps1
Normal file
@@ -0,0 +1,15 @@
|
||||
Set-StrictMode -Version Latest
|
||||
$ErrorActionPreference = 'Stop'
|
||||
$ProgressPreference = 'SilentlyContinue'
|
||||
|
||||
Set-Location $PSScriptRoot
|
||||
Set-Location ..\\..
|
||||
|
||||
Push-Location -Path wiki
|
||||
git reset --hard
|
||||
git clean -fd
|
||||
git pull
|
||||
Pop-Location
|
||||
|
||||
crowdin -b master --identity tools\\crowdin-cli\\crowdin_identity.yml upload sources
|
||||
pause
|
||||
1
wiki
Submodule
1
wiki
Submodule
Submodule wiki added at 2cc4940548
Reference in New Issue
Block a user