mirror of
https://github.com/JustArchiNET/ArchiSteamFarm.git
synced 2025-12-30 21:20:46 +00:00
Compare commits
67 Commits
| Author | SHA1 | Date | |
|---|---|---|---|
|
|
6693432da5 | ||
|
|
e263093f25 | ||
|
|
6a29994904 | ||
|
|
250074356b | ||
|
|
52e89112ce | ||
|
|
379d3f04a9 | ||
|
|
d75028a1e9 | ||
|
|
10a7fe157b | ||
|
|
5563531170 | ||
|
|
c89cdbdad9 | ||
|
|
ec3b6ac0fd | ||
|
|
47718f87ef | ||
|
|
29dca262f1 | ||
|
|
13413f668f | ||
|
|
d465d885b5 | ||
|
|
d7abd9dfdd | ||
|
|
255537fe36 | ||
|
|
412b852c85 | ||
|
|
3fba7fed5f | ||
|
|
0da486a842 | ||
|
|
6808815c65 | ||
|
|
e661c717fc | ||
|
|
878b24d616 | ||
|
|
5477edc02c | ||
|
|
a08bd0dbaa | ||
|
|
504d8913da | ||
|
|
8ff255d3d9 | ||
|
|
90d8d87182 | ||
|
|
b79b702c4d | ||
|
|
da33797b18 | ||
|
|
80b1a0e4cd | ||
|
|
11927b92f2 | ||
|
|
2def98d432 | ||
|
|
9c28666dc9 | ||
|
|
8600a709c2 | ||
|
|
1bdff341a6 | ||
|
|
d89930f13e | ||
|
|
9bb12e2dbd | ||
|
|
3872aad931 | ||
|
|
dd9617483d | ||
|
|
5dc083768d | ||
|
|
178960fdc0 | ||
|
|
d967f3eba3 | ||
|
|
9510514fe5 | ||
|
|
b3683d39e3 | ||
|
|
23f9f58f6c | ||
|
|
f0dfbc5ee4 | ||
|
|
8ac4efe392 | ||
|
|
d4691ced51 | ||
|
|
d679bf9307 | ||
|
|
564d0bf9a4 | ||
|
|
2f848fe585 | ||
|
|
bf34d2e91e | ||
|
|
83e4c7f63a | ||
|
|
1e2e52943d | ||
|
|
4a9ecc52c1 | ||
|
|
10fc914ac1 | ||
|
|
7e9c49cc79 | ||
|
|
ab58886d29 | ||
|
|
a5740a43db | ||
|
|
223f2b98cb | ||
|
|
69b150c8a0 | ||
|
|
f4ea1d44ac | ||
|
|
d02504b914 | ||
|
|
c363af8c3a | ||
|
|
c06a22ec93 | ||
|
|
ed19d7e3bf |
2
.github/workflows/docker-ci.yml
vendored
2
.github/workflows/docker-ci.yml
vendored
@@ -25,7 +25,7 @@ jobs:
|
||||
submodules: recursive
|
||||
|
||||
- name: Set up Docker Buildx
|
||||
uses: docker/setup-buildx-action@e468171a9de216ec08956ac3ada2f0791b6bd435 # v3.11.1
|
||||
uses: docker/setup-buildx-action@8d2750c68a42422c14e847fe6c8ac0403b4cbd6f # v3.12.0
|
||||
|
||||
- name: Build ${{ matrix.configuration }} Docker image from ${{ matrix.file }}
|
||||
uses: docker/build-push-action@263435318d21b8e681c14492fe198d362a7d2c83 # v6.18.0
|
||||
|
||||
2
.github/workflows/docker-publish-latest.yml
vendored
2
.github/workflows/docker-publish-latest.yml
vendored
@@ -24,7 +24,7 @@ jobs:
|
||||
submodules: recursive
|
||||
|
||||
- name: Set up Docker Buildx
|
||||
uses: docker/setup-buildx-action@e468171a9de216ec08956ac3ada2f0791b6bd435 # v3.11.1
|
||||
uses: docker/setup-buildx-action@8d2750c68a42422c14e847fe6c8ac0403b4cbd6f # v3.12.0
|
||||
|
||||
- name: Login to ghcr.io
|
||||
uses: docker/login-action@5e57cd118135c172c3672efd75eb46360885c0ef # v3.6.0
|
||||
|
||||
2
.github/workflows/docker-publish-main.yml
vendored
2
.github/workflows/docker-publish-main.yml
vendored
@@ -25,7 +25,7 @@ jobs:
|
||||
submodules: recursive
|
||||
|
||||
- name: Set up Docker Buildx
|
||||
uses: docker/setup-buildx-action@e468171a9de216ec08956ac3ada2f0791b6bd435 # v3.11.1
|
||||
uses: docker/setup-buildx-action@8d2750c68a42422c14e847fe6c8ac0403b4cbd6f # v3.12.0
|
||||
|
||||
- name: Login to ghcr.io
|
||||
uses: docker/login-action@5e57cd118135c172c3672efd75eb46360885c0ef # v3.6.0
|
||||
|
||||
@@ -25,7 +25,7 @@ jobs:
|
||||
submodules: recursive
|
||||
|
||||
- name: Set up Docker Buildx
|
||||
uses: docker/setup-buildx-action@e468171a9de216ec08956ac3ada2f0791b6bd435 # v3.11.1
|
||||
uses: docker/setup-buildx-action@8d2750c68a42422c14e847fe6c8ac0403b4cbd6f # v3.12.0
|
||||
|
||||
- name: Login to ghcr.io
|
||||
uses: docker/login-action@5e57cd118135c172c3672efd75eb46360885c0ef # v3.6.0
|
||||
|
||||
2
.github/workflows/lock-threads.yml
vendored
2
.github/workflows/lock-threads.yml
vendored
@@ -18,7 +18,7 @@ jobs:
|
||||
runs-on: ubuntu-latest
|
||||
steps:
|
||||
- name: Lock inactive threads
|
||||
uses: dessant/lock-threads@1bf7ec25051fe7c00bdd17e6a7cf3d7bfb7dc771 # v5.0.1
|
||||
uses: dessant/lock-threads@7266a7ce5c1df01b1c6db85bf8cd86c737dadbe7 # v6.0.0
|
||||
with:
|
||||
discussion-inactive-days: 90
|
||||
issue-inactive-days: 60
|
||||
|
||||
38
.github/workflows/publish.yml
vendored
38
.github/workflows/publish.yml
vendored
@@ -43,7 +43,7 @@ jobs:
|
||||
run: npm run-script deploy --no-progress --prefix ASF-ui
|
||||
|
||||
- name: Upload ASF-ui
|
||||
uses: actions/upload-artifact@330a01c490aca151604b8cf639adc76d48f6c5d4 # v5.0.0
|
||||
uses: actions/upload-artifact@b7c566a772e6b6bfb58ed0dc250532a479d7789f # v6.0.0
|
||||
with:
|
||||
compression-level: 1
|
||||
if-no-files-found: error
|
||||
@@ -95,7 +95,7 @@ jobs:
|
||||
run: dotnet --info
|
||||
|
||||
- name: Download previously built ASF-ui
|
||||
uses: actions/download-artifact@018cc2cf5baa6db3ef3c5f8a56943fffe632ef53 # v6.0.0
|
||||
uses: actions/download-artifact@37930b1c2abaa49bbe596cd826c3c89aef350131 # v7.0.0
|
||||
with:
|
||||
name: ASF-ui
|
||||
path: ASF-ui/dist
|
||||
@@ -362,12 +362,12 @@ jobs:
|
||||
|
||||
- name: Generate artifact attestation for ASF-${{ matrix.variant }}.zip
|
||||
if: ${{ github.event_name == 'push' }}
|
||||
uses: actions/attest-build-provenance@977bb373ede98d70efdf65b84cb5f73e068dcc2a # v3.0.0
|
||||
uses: actions/attest-build-provenance@00014ed6ed5efc5b1ab7f7f34a39eb55d41aa4f8 # v3.1.0
|
||||
with:
|
||||
subject-path: out/ASF-${{ matrix.variant }}.zip
|
||||
|
||||
- name: Upload ASF-${{ matrix.variant }}
|
||||
uses: actions/upload-artifact@330a01c490aca151604b8cf639adc76d48f6c5d4 # v5.0.0
|
||||
uses: actions/upload-artifact@b7c566a772e6b6bfb58ed0dc250532a479d7789f # v6.0.0
|
||||
with:
|
||||
compression-level: 1
|
||||
if-no-files-found: error
|
||||
@@ -410,13 +410,13 @@ jobs:
|
||||
|
||||
- name: Generate artifact attestation for ArchiSteamFarm.OfficialPlugins.Monitoring
|
||||
if: ${{ github.event_name == 'push' && matrix.os == 'ubuntu-latest' && matrix.variant == 'generic' }}
|
||||
uses: actions/attest-build-provenance@977bb373ede98d70efdf65b84cb5f73e068dcc2a # v3.0.0
|
||||
uses: actions/attest-build-provenance@00014ed6ed5efc5b1ab7f7f34a39eb55d41aa4f8 # v3.1.0
|
||||
with:
|
||||
subject-path: out/ArchiSteamFarm.OfficialPlugins.Monitoring.zip
|
||||
|
||||
- name: Upload ArchiSteamFarm.OfficialPlugins.Monitoring
|
||||
if: ${{ matrix.os == 'ubuntu-latest' && matrix.variant == 'generic' }}
|
||||
uses: actions/upload-artifact@330a01c490aca151604b8cf639adc76d48f6c5d4 # v5.0.0
|
||||
uses: actions/upload-artifact@b7c566a772e6b6bfb58ed0dc250532a479d7789f # v6.0.0
|
||||
with:
|
||||
compression-level: 1
|
||||
if-no-files-found: error
|
||||
@@ -441,55 +441,55 @@ jobs:
|
||||
show-progress: false
|
||||
|
||||
- name: Download ASF-generic artifact from ubuntu-latest
|
||||
uses: actions/download-artifact@018cc2cf5baa6db3ef3c5f8a56943fffe632ef53 # v6.0.0
|
||||
uses: actions/download-artifact@37930b1c2abaa49bbe596cd826c3c89aef350131 # v7.0.0
|
||||
with:
|
||||
name: ubuntu-latest_ASF-generic
|
||||
path: out
|
||||
|
||||
- name: Download ASF-linux-arm artifact from ubuntu-latest
|
||||
uses: actions/download-artifact@018cc2cf5baa6db3ef3c5f8a56943fffe632ef53 # v6.0.0
|
||||
uses: actions/download-artifact@37930b1c2abaa49bbe596cd826c3c89aef350131 # v7.0.0
|
||||
with:
|
||||
name: ubuntu-latest_ASF-linux-arm
|
||||
path: out
|
||||
|
||||
- name: Download ASF-linux-arm64 artifact from ubuntu-latest
|
||||
uses: actions/download-artifact@018cc2cf5baa6db3ef3c5f8a56943fffe632ef53 # v6.0.0
|
||||
uses: actions/download-artifact@37930b1c2abaa49bbe596cd826c3c89aef350131 # v7.0.0
|
||||
with:
|
||||
name: ubuntu-latest_ASF-linux-arm64
|
||||
path: out
|
||||
|
||||
- name: Download ASF-linux-x64 artifact from ubuntu-latest
|
||||
uses: actions/download-artifact@018cc2cf5baa6db3ef3c5f8a56943fffe632ef53 # v6.0.0
|
||||
uses: actions/download-artifact@37930b1c2abaa49bbe596cd826c3c89aef350131 # v7.0.0
|
||||
with:
|
||||
name: ubuntu-latest_ASF-linux-x64
|
||||
path: out
|
||||
|
||||
- name: Download ASF-osx-arm64 artifact from macos-latest
|
||||
uses: actions/download-artifact@018cc2cf5baa6db3ef3c5f8a56943fffe632ef53 # v6.0.0
|
||||
uses: actions/download-artifact@37930b1c2abaa49bbe596cd826c3c89aef350131 # v7.0.0
|
||||
with:
|
||||
name: macos-latest_ASF-osx-arm64
|
||||
path: out
|
||||
|
||||
- name: Download ASF-osx-x64 artifact from macos-latest
|
||||
uses: actions/download-artifact@018cc2cf5baa6db3ef3c5f8a56943fffe632ef53 # v6.0.0
|
||||
uses: actions/download-artifact@37930b1c2abaa49bbe596cd826c3c89aef350131 # v7.0.0
|
||||
with:
|
||||
name: macos-latest_ASF-osx-x64
|
||||
path: out
|
||||
|
||||
- name: Download ASF-win-arm64 artifact from windows-latest
|
||||
uses: actions/download-artifact@018cc2cf5baa6db3ef3c5f8a56943fffe632ef53 # v6.0.0
|
||||
uses: actions/download-artifact@37930b1c2abaa49bbe596cd826c3c89aef350131 # v7.0.0
|
||||
with:
|
||||
name: windows-latest_ASF-win-arm64
|
||||
path: out
|
||||
|
||||
- name: Download ASF-win-x64 artifact from windows-latest
|
||||
uses: actions/download-artifact@018cc2cf5baa6db3ef3c5f8a56943fffe632ef53 # v6.0.0
|
||||
uses: actions/download-artifact@37930b1c2abaa49bbe596cd826c3c89aef350131 # v7.0.0
|
||||
with:
|
||||
name: windows-latest_ASF-win-x64
|
||||
path: out
|
||||
|
||||
- name: Download ArchiSteamFarm.OfficialPlugins.Monitoring artifact
|
||||
uses: actions/download-artifact@018cc2cf5baa6db3ef3c5f8a56943fffe632ef53 # v6.0.0
|
||||
uses: actions/download-artifact@37930b1c2abaa49bbe596cd826c3c89aef350131 # v7.0.0
|
||||
with:
|
||||
name: ArchiSteamFarm.OfficialPlugins.Monitoring
|
||||
path: out
|
||||
@@ -509,12 +509,12 @@ jobs:
|
||||
gpg -a -b -o SHA512SUMS.sign SHA512SUMS
|
||||
|
||||
- name: Generate artifact attestation for SHA512SUMS
|
||||
uses: actions/attest-build-provenance@977bb373ede98d70efdf65b84cb5f73e068dcc2a # v3.0.0
|
||||
uses: actions/attest-build-provenance@00014ed6ed5efc5b1ab7f7f34a39eb55d41aa4f8 # v3.1.0
|
||||
with:
|
||||
subject-path: out/SHA512SUMS
|
||||
|
||||
- name: Upload SHA512SUMS
|
||||
uses: actions/upload-artifact@330a01c490aca151604b8cf639adc76d48f6c5d4 # v5.0.0
|
||||
uses: actions/upload-artifact@b7c566a772e6b6bfb58ed0dc250532a479d7789f # v6.0.0
|
||||
with:
|
||||
compression-level: 1
|
||||
if-no-files-found: error
|
||||
@@ -522,12 +522,12 @@ jobs:
|
||||
path: out/SHA512SUMS
|
||||
|
||||
- name: Generate artifact attestation for SHA512SUMS.sign
|
||||
uses: actions/attest-build-provenance@977bb373ede98d70efdf65b84cb5f73e068dcc2a # v3.0.0
|
||||
uses: actions/attest-build-provenance@00014ed6ed5efc5b1ab7f7f34a39eb55d41aa4f8 # v3.1.0
|
||||
with:
|
||||
subject-path: out/SHA512SUMS.sign
|
||||
|
||||
- name: Upload SHA512SUMS.sign
|
||||
uses: actions/upload-artifact@330a01c490aca151604b8cf639adc76d48f6c5d4 # v5.0.0
|
||||
uses: actions/upload-artifact@b7c566a772e6b6bfb58ed0dc250532a479d7789f # v6.0.0
|
||||
with:
|
||||
compression-level: 1
|
||||
if-no-files-found: error
|
||||
|
||||
2
ASF-ui
2
ASF-ui
Submodule ASF-ui updated: 00bfe2e99c...8891c8b6d1
@@ -60,33 +60,4 @@
|
||||
<value>System.Resources.ResXResourceWriter, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089
|
||||
</value>
|
||||
</resheader>
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
</root>
|
||||
|
||||
@@ -122,7 +122,6 @@
|
||||
<value>Kunne ikke sende inn data fordi det ikke er gyldig SteamID satt som vi kan klassifisere som bidragsyter. Vurder å sette opp {0} egenskapen.</value>
|
||||
<comment>{0} will be replaced by the name of the config property (e.g. "SteamOwnerID") that the user is expected to set</comment>
|
||||
</data>
|
||||
|
||||
<data name="SubmissionFailedTooManyRequests" xml:space="preserve">
|
||||
<value>Innsendingen mislyktes på grunn av for mange forespørsler sendt, vi prøver igjen om lag {0} nå.</value>
|
||||
<comment>{0} will be replaced by translated TimeSpan string (such as "53 minutes")</comment>
|
||||
|
||||
@@ -24,6 +24,7 @@
|
||||
<PackageReference Include="SteamKit2" />
|
||||
<PackageReference Include="System.Composition" />
|
||||
<PackageReference Include="System.Security.Cryptography.ProtectedData" />
|
||||
<PackageReference Include="Tmds.DBus.Protocol" />
|
||||
</ItemGroup>
|
||||
|
||||
<ItemGroup>
|
||||
|
||||
@@ -37,6 +37,8 @@ using System.Threading.Tasks;
|
||||
using ArchiSteamFarm.Localization;
|
||||
using ArchiSteamFarm.Storage;
|
||||
using ArchiSteamFarm.Web;
|
||||
using Microsoft.Win32.SafeHandles;
|
||||
using Tmds.DBus.Protocol;
|
||||
|
||||
namespace ArchiSteamFarm.Core;
|
||||
|
||||
@@ -69,13 +71,20 @@ internal static class OS {
|
||||
}
|
||||
}
|
||||
|
||||
private static SafeHandle? InhibitLock;
|
||||
private static Mutex? SingleInstance;
|
||||
|
||||
internal static void CoreInit(bool minimized, bool systemRequired) {
|
||||
internal static async Task CoreInit(bool minimized, bool systemRequired) {
|
||||
if (minimized) {
|
||||
MinimizeConsoleWindow();
|
||||
}
|
||||
|
||||
if (OperatingSystem.IsLinux()) {
|
||||
if (systemRequired) {
|
||||
await LinuxKeepSystemActive().ConfigureAwait(false);
|
||||
}
|
||||
}
|
||||
|
||||
if (OperatingSystem.IsWindows()) {
|
||||
if (systemRequired) {
|
||||
WindowsKeepSystemActive();
|
||||
@@ -181,6 +190,12 @@ internal static class OS {
|
||||
// Instead, we'll dispose the mutex which should automatically release it by the CLR
|
||||
SingleInstance.Dispose();
|
||||
SingleInstance = null;
|
||||
|
||||
// Release the inhibit lock as well, if needed
|
||||
if (InhibitLock != null) {
|
||||
InhibitLock.Dispose();
|
||||
InhibitLock = null;
|
||||
}
|
||||
}
|
||||
|
||||
internal static bool VerifyEnvironment() {
|
||||
@@ -261,6 +276,79 @@ internal static class OS {
|
||||
NativeMethods.FlashWindowEx(ref flashInfo);
|
||||
}
|
||||
|
||||
[SupportedOSPlatform("Linux")]
|
||||
private static async Task LinuxKeepSystemActive() {
|
||||
if (!OperatingSystem.IsLinux()) {
|
||||
throw new PlatformNotSupportedException();
|
||||
}
|
||||
|
||||
// Docs: https://systemd.io/INHIBITOR_LOCKS
|
||||
string? systemAddress = Address.System;
|
||||
|
||||
if (string.IsNullOrEmpty(systemAddress)) {
|
||||
ASF.ArchiLogger.LogGenericError(Strings.FormatWarningFailedWithError(nameof(systemAddress)));
|
||||
|
||||
return;
|
||||
}
|
||||
|
||||
using Connection connection = new(systemAddress);
|
||||
|
||||
try {
|
||||
await connection.ConnectAsync().ConfigureAwait(false);
|
||||
} catch (ConnectException e) {
|
||||
// Possible if no DBus is available at all
|
||||
ASF.ArchiLogger.LogGenericDebuggingException(e);
|
||||
ASF.ArchiLogger.LogGenericWarning(Strings.WarningNoSystemRequiredLinuxDependencies);
|
||||
|
||||
return;
|
||||
}
|
||||
|
||||
MessageWriter writer = connection.GetMessageWriter();
|
||||
|
||||
writer.WriteMethodCallHeader(
|
||||
"org.freedesktop.login1",
|
||||
"/org/freedesktop/login1",
|
||||
"org.freedesktop.login1.Manager",
|
||||
"Inhibit",
|
||||
"ssss"
|
||||
);
|
||||
|
||||
// Colon-separated list of lock types
|
||||
writer.WriteString("idle");
|
||||
|
||||
// Human-readable, descriptive string of who is taking the lock
|
||||
writer.WriteString(SharedInfo.PublicIdentifier);
|
||||
|
||||
// Human-readable, descriptive string of why the lock is taken
|
||||
writer.WriteString("--system-required");
|
||||
|
||||
// Mode
|
||||
writer.WriteString("block");
|
||||
|
||||
MessageBuffer message = writer.CreateMessage();
|
||||
|
||||
try {
|
||||
// Inhibit() returns a single value, a file descriptor that encapsulates the lock
|
||||
InhibitLock = await connection.CallMethodAsync(
|
||||
message, static (response, _) => {
|
||||
Reader reader = response.GetBodyReader();
|
||||
|
||||
return reader.ReadHandle<SafeFileHandle>();
|
||||
}
|
||||
).ConfigureAwait(false);
|
||||
} catch (DBusException e) {
|
||||
// Possible if login manager does not support inhibit, although that should be super rare
|
||||
ASF.ArchiLogger.LogGenericDebuggingException(e);
|
||||
ASF.ArchiLogger.LogGenericWarning(Strings.WarningNoSystemRequiredLinuxDependencies);
|
||||
|
||||
return;
|
||||
}
|
||||
|
||||
if (InhibitLock == null) {
|
||||
ASF.ArchiLogger.LogGenericError(Strings.FormatWarningFailedWithError(nameof(InhibitLock)));
|
||||
}
|
||||
}
|
||||
|
||||
private static void MinimizeConsoleWindow() {
|
||||
(_, int top) = Console.GetCursorPosition();
|
||||
|
||||
|
||||
@@ -116,8 +116,8 @@ public static class JsonUtilities {
|
||||
}
|
||||
|
||||
[UnconditionalSuppressMessage("AssemblyLoadTrimming", "IL2026:RequiresUnreferencedCode", Justification = "We don't care about trimmed assemblies, as we need it to work only with the known (used) ones")]
|
||||
private static JsonSerializerOptions CreateDefaultJsonSerializerOptions(bool writeIndented = false) =>
|
||||
new(JsonSerializerDefaults.Strict) {
|
||||
private static JsonSerializerOptions CreateDefaultJsonSerializerOptions(bool writeIndented = false) {
|
||||
JsonSerializerOptions result = new(JsonSerializerDefaults.Strict) {
|
||||
AllowTrailingCommas = true,
|
||||
Encoder = JavaScriptEncoder.UnsafeRelaxedJsonEscaping,
|
||||
IndentCharacter = '\t',
|
||||
@@ -129,6 +129,11 @@ public static class JsonUtilities {
|
||||
WriteIndented = writeIndented
|
||||
};
|
||||
|
||||
result.MakeReadOnly();
|
||||
|
||||
return result;
|
||||
}
|
||||
|
||||
[UnconditionalSuppressMessage("AssemblyLoadTrimming", "IL2070", Justification = "We don't care about trimmed methods, it's not like we can make it work differently anyway")]
|
||||
[UnconditionalSuppressMessage("AssemblyLoadTrimming", "IL2075", Justification = "We don't care about trimmed properties, it's not like we can make it work differently anyway")]
|
||||
private static MethodInfo? GetShouldSerializeMethod([SuppressMessage("ReSharper", "SuggestBaseTypeForParameter")] Type parent, JsonPropertyInfo property) {
|
||||
|
||||
@@ -280,6 +280,7 @@ internal static class ArchiKestrel {
|
||||
"/swagger", static options => {
|
||||
options.DefaultFonts = false;
|
||||
options.OpenApiRoutePattern = $"/swagger/{SharedInfo.ASF}/swagger.json";
|
||||
options.Telemetry = false;
|
||||
options.Theme = ScalarTheme.Kepler;
|
||||
options.Title = $"{SharedInfo.AssemblyName} API";
|
||||
}
|
||||
|
||||
@@ -23,7 +23,6 @@
|
||||
|
||||
using System;
|
||||
using System.Collections.Concurrent;
|
||||
using System.Collections.Generic;
|
||||
using System.ComponentModel;
|
||||
using System.Linq;
|
||||
using System.Net;
|
||||
@@ -56,9 +55,10 @@ public sealed class NLogController : ArchiController {
|
||||
ApplicationLifetime = applicationLifetime;
|
||||
}
|
||||
|
||||
[EndpointSummary("Fetches ASF log file, this works on assumption that the log file is in fact generated, as user could disable it through custom configuration")]
|
||||
[EndpointDescription("This works on assumption that the log file is in fact generated, as user could disable it through custom configuration")]
|
||||
[EndpointSummary("Fetches ASF log file")]
|
||||
[HttpGet("File")]
|
||||
[ProducesResponseType<GenericResponse<GenericResponse<LogResponse>>>((int) HttpStatusCode.OK)]
|
||||
[ProducesResponseType<GenericResponse<LogResponse>>((int) HttpStatusCode.OK)]
|
||||
[ProducesResponseType<GenericResponse>((int) HttpStatusCode.BadRequest)]
|
||||
[ProducesResponseType<GenericResponse>((int) HttpStatusCode.ServiceUnavailable)]
|
||||
public async Task<ActionResult<GenericResponse>> FileGet([Description("Maximum amount of lines from the log file returned. The respone naturally might have less amount than specified, if you've read whole file already")] int count = 100, [Description("Ending index, used for pagination. Omit it for the first request, then initialize to TotalLines returned, and on every following request subtract count that you've used in the previous request from it until you hit 0 or less, which means you've read whole file already")] int lastAt = 0) {
|
||||
@@ -87,8 +87,8 @@ public sealed class NLogController : ArchiController {
|
||||
|
||||
[EndpointDescription("This API endpoint requires a websocket connection")]
|
||||
[EndpointSummary("Fetches ASF log in realtime")]
|
||||
[HttpGet]
|
||||
[ProducesResponseType<IEnumerable<GenericResponse<string>>>((int) HttpStatusCode.OK)]
|
||||
[ProducesResponseType((int) HttpStatusCode.SwitchingProtocols)]
|
||||
[ProducesResponseType((int) HttpStatusCode.OK)]
|
||||
[ProducesResponseType<GenericResponse>((int) HttpStatusCode.BadRequest)]
|
||||
public async Task<ActionResult> Get() {
|
||||
if (HttpContext == null) {
|
||||
@@ -162,7 +162,7 @@ public sealed class NLogController : ArchiController {
|
||||
|
||||
string json = new GenericResponse<string>(newHistoryEntryArgs.Message).ToJsonText();
|
||||
|
||||
await Task.WhenAll(ActiveLogWebSockets.Where(static kv => kv.Key.State == WebSocketState.Open).Select(kv => PostLoggedJsonUpdate(kv.Key, json, kv.Value.Semaphore, kv.Value.CancellationToken))).ConfigureAwait(false);
|
||||
await Task.WhenAll(ActiveLogWebSockets.Where(static kv => (kv.Key.State == WebSocketState.Open) && !kv.Value.CancellationToken.IsCancellationRequested).Select(kv => PostLoggedJsonUpdate(kv.Key, json, kv.Value.Semaphore, kv.Value.CancellationToken))).ConfigureAwait(false);
|
||||
}
|
||||
|
||||
private static async Task PostLoggedJsonUpdate(WebSocket webSocket, string json, SemaphoreSlim sendSemaphore, CancellationToken cancellationToken) {
|
||||
|
||||
@@ -23,11 +23,17 @@
|
||||
|
||||
using System;
|
||||
using System.Collections.Generic;
|
||||
using System.Globalization;
|
||||
using System.Linq;
|
||||
using System.Net;
|
||||
using System.Net.Http;
|
||||
using System.Threading;
|
||||
using System.Threading.Tasks;
|
||||
using ArchiSteamFarm.IPC.Integration;
|
||||
using ArchiSteamFarm.Storage;
|
||||
using JetBrains.Annotations;
|
||||
using Microsoft.AspNetCore.Http;
|
||||
using Microsoft.AspNetCore.Mvc.ApiExplorer;
|
||||
using Microsoft.AspNetCore.OpenApi;
|
||||
using Microsoft.OpenApi;
|
||||
|
||||
@@ -63,6 +69,66 @@ internal sealed class DocumentTransformer : IOpenApiDocumentTransformer {
|
||||
}
|
||||
);
|
||||
|
||||
// Add limited info support for our NLog endpoint
|
||||
ApiDescription? nlogEndpont = context.DescriptionGroups.SelectMany(static group => group.Items).FirstOrDefault(static endpoint => (endpoint.HttpMethod == null) && (endpoint.RelativePath == "Api/NLog"));
|
||||
|
||||
if (nlogEndpont != null) {
|
||||
OpenApiOperation operation = new() {
|
||||
Description = nlogEndpont.ActionDescriptor.EndpointMetadata.OfType<EndpointDescriptionAttribute>().FirstOrDefault()?.Description,
|
||||
|
||||
Responses = new OpenApiResponses {
|
||||
{
|
||||
StatusCodes.Status101SwitchingProtocols.ToString(CultureInfo.InvariantCulture),
|
||||
|
||||
new OpenApiResponse {
|
||||
Description = nameof(HttpStatusCode.SwitchingProtocols)
|
||||
}
|
||||
},
|
||||
|
||||
{
|
||||
StatusCodes.Status200OK.ToString(CultureInfo.InvariantCulture),
|
||||
|
||||
new OpenApiResponse {
|
||||
Description = nameof(HttpStatusCode.OK)
|
||||
}
|
||||
},
|
||||
|
||||
{
|
||||
StatusCodes.Status400BadRequest.ToString(CultureInfo.InvariantCulture),
|
||||
|
||||
new OpenApiResponse {
|
||||
Description = nameof(HttpStatusCode.BadRequest)
|
||||
}
|
||||
}
|
||||
},
|
||||
|
||||
Security = new List<OpenApiSecurityRequirement>(1) {
|
||||
new() {
|
||||
{
|
||||
new OpenApiSecuritySchemeReference(nameof(GlobalConfig.IPCPassword), document),
|
||||
[]
|
||||
}
|
||||
}
|
||||
},
|
||||
|
||||
Summary = nlogEndpont.ActionDescriptor.EndpointMetadata.OfType<EndpointSummaryAttribute>().FirstOrDefault()?.Summary,
|
||||
|
||||
Tags = new HashSet<OpenApiTagReference>(1) { new("NLog", document) }
|
||||
};
|
||||
|
||||
document.Paths.Add(
|
||||
$"/{nlogEndpont.RelativePath}", new OpenApiPathItem {
|
||||
Operations = new Dictionary<HttpMethod, OpenApiOperation>(2) {
|
||||
// HTTP/2 use CONNECT for that endpoint
|
||||
{ HttpMethod.Connect, operation },
|
||||
|
||||
// But HTTP/1.1 use GET with upgrade, so this is also valid
|
||||
{ HttpMethod.Get, operation }
|
||||
}
|
||||
}
|
||||
);
|
||||
}
|
||||
|
||||
return Task.CompletedTask;
|
||||
}
|
||||
}
|
||||
|
||||
@@ -87,7 +87,6 @@ StackTrace:
|
||||
{2}</value>
|
||||
<comment>{0} will be replaced by function name, {1} will be replaced by exception message, {2} will be replaced by entire stack trace. Please note that this string should include newlines for formatting.</comment>
|
||||
</data>
|
||||
|
||||
<data name="ErrorFailingRequest" xml:space="preserve">
|
||||
<value>Памылка запыту да: {0}</value>
|
||||
<comment>{0} will be replaced by URL of the request</comment>
|
||||
@@ -186,7 +185,6 @@ StackTrace:
|
||||
<value>Ваша версія: {0} | Апошняя версія: {1}</value>
|
||||
<comment>{0} will be replaced by current version, {1} will be replaced by remote version</comment>
|
||||
</data>
|
||||
|
||||
<data name="UserInputSteam2FA" xml:space="preserve">
|
||||
<value>Калі ласка, увядзіце код 2FA з з мабільнага дадатку Steam: </value>
|
||||
<comment>Please note that this translation should end with space</comment>
|
||||
@@ -438,15 +436,6 @@ StackTrace:
|
||||
<data name="BotStatusLimited" xml:space="preserve">
|
||||
<value>Бот абмежаваны і не можа атрымліваць карткі праз фарменне.</value>
|
||||
</data>
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
<data name="BotAccountFree" xml:space="preserve">
|
||||
<value>Акаўнт больш не заняты: працэс фармавання адноўлены!</value>
|
||||
</data>
|
||||
@@ -456,7 +445,6 @@ StackTrace:
|
||||
<data name="BotConnecting" xml:space="preserve">
|
||||
<value>Падключэнне...</value>
|
||||
</data>
|
||||
|
||||
<data name="BotStopping" xml:space="preserve">
|
||||
<value>Спыненне...</value>
|
||||
</data>
|
||||
@@ -464,46 +452,16 @@ StackTrace:
|
||||
<value>Канфігурацыя вашага бота няправільная. Калі ласка, праверце змест {0} і паспрабуйце яшчэ раз!</value>
|
||||
<comment>{0} will be replaced by file's path</comment>
|
||||
</data>
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
<data name="IdlingGameNotPossible" xml:space="preserve">
|
||||
<value>Фармаванне {0} ({1}) часова адключана, бо ASF зараз не можа зараз гуляць у гэтую гульню.</value>
|
||||
<comment>{0} will be replaced by game's ID (number), {1} will be replaced by game's name</comment>
|
||||
</data>
|
||||
|
||||
|
||||
<data name="BotAccountLocked" xml:space="preserve">
|
||||
<value>Гэты акаўнт заблакіраваны, працэс фармавання больш недаступны!</value>
|
||||
</data>
|
||||
<data name="BotStatusLocked" xml:space="preserve">
|
||||
<value>Бот абмежаваны і не можа атрымліваць карты падчас фармавання.</value>
|
||||
</data>
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
<data name="PluginsWarning" xml:space="preserve">
|
||||
<value>Вы загрузілі адзін або некалькі карыстальніцкіх убудоў у ASF. Паколькі мы не можам прапанаваць падтрымку мадыфікаваных канфігурацый, калі ласка, звярніцеся да адпаведных распрацоўнікаў, убудовы якіх вы вырашылі выкарыстоўваць у выпадку ўзнікнення якіх-небудзь праблем.</value>
|
||||
</data>
|
||||
@@ -519,59 +477,15 @@ StackTrace:
|
||||
<data name="InteractiveConsoleEnabled" xml:space="preserve">
|
||||
<value>Інтэрактыўная кансоль цяпер актыўная, націсніце 'c', каб увайсці ў рэжым каманд.</value>
|
||||
</data>
|
||||
|
||||
|
||||
|
||||
<data name="BotExtraIdlingCooldown" xml:space="preserve">
|
||||
<value>Чакаем да {0}, каб быць упэўненымі, што мы можам пачаць фармаванне...</value>
|
||||
<comment>{0} will be replaced by translated TimeSpan string (such as "1 minute")</comment>
|
||||
</data>
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
<data name="Result" xml:space="preserve">
|
||||
<value>Рэзультат: {0}</value>
|
||||
<comment>{0} will be replaced by generic result of various functions that use this string</comment>
|
||||
</data>
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
<data name="PatchingFiles" xml:space="preserve">
|
||||
<value>Выпраўленне файлаў ASF...</value>
|
||||
</data>
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
</root>
|
||||
|
||||
@@ -84,7 +84,6 @@
|
||||
<value>Изключение: {0}() {1} StackTrace:{2}</value>
|
||||
<comment>{0} will be replaced by function name, {1} will be replaced by exception message, {2} will be replaced by entire stack trace. Please note that this string should include newlines for formatting.</comment>
|
||||
</data>
|
||||
|
||||
<data name="ErrorFailingRequest" xml:space="preserve">
|
||||
<value>Провалена заявка: {0}</value>
|
||||
<comment>{0} will be replaced by URL of the request</comment>
|
||||
@@ -578,7 +577,6 @@
|
||||
<value>Ботът има ниво {0}.</value>
|
||||
<comment>{0} will be replaced by bot's level</comment>
|
||||
</data>
|
||||
|
||||
<data name="ActivelyMatchingItems" xml:space="preserve">
|
||||
<value>Сравняват се Steam предмети, #{0} път...</value>
|
||||
<comment>{0} will be replaced by round number</comment>
|
||||
@@ -678,7 +676,6 @@
|
||||
<value>Вашият криптиращ ключ е много къс. Препоръчваме да ползвате някой, който е поне {0} байта (символа) голям.</value>
|
||||
<comment>{0} will be replaced by the number of bytes (characters) recommended</comment>
|
||||
</data>
|
||||
|
||||
<data name="WarningDefaultCryptKeyUsedForEncryption" xml:space="preserve">
|
||||
<value>Ползвате {0} настройка от {1} стойност, но не сте осигурили персонализиран крипто-ключ. Това напълно нарушава защитата, тъй като ASF е принуден да ползва собствен (познат) ключ. Трябва да осигурите персонализиран крипто-ключ, за да ползвате предлаганата защита от тези настройки.</value>
|
||||
<comment>{0} will be replaced by the name of a particular setting (e.g. "AES"), {1} will be replaced by the name of the property (e.g. "SteamPassword")</comment>
|
||||
@@ -698,7 +695,6 @@
|
||||
<data name="ChecksumMissing" xml:space="preserve">
|
||||
<value>Отдалечения сървър не знае нищо за версията до която се опитвате да ъпгрейднете. Подобна ситуация е възможна ако версията е публикувана скоро - отказване да се продължи с ъпдейта като допълнителна мярка за сигурност.</value>
|
||||
</data>
|
||||
|
||||
<data name="ChecksumWrong" xml:space="preserve">
|
||||
<value>Отдалечения сървър отговори с различен checksum, това може да показва корумпирано сваляне или MITM атака - отказване да се продължи с ъпдейта!</value>
|
||||
</data>
|
||||
@@ -717,22 +713,4 @@
|
||||
<value>Опитахте да използвате платена функция {0}, но нямате зададен валиден LicenseID в глобалната конфигурация на ASF. Моля, прегледайте конфигурацията си, тъй като функционалността няма да работи без допълнителни подробности.</value>
|
||||
<comment>{0} will be replaced by feature name (e.g. MatchActively)</comment>
|
||||
</data>
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
</root>
|
||||
|
||||
@@ -77,16 +77,10 @@
|
||||
<value>Podešavanje {0} je netačno: {1}</value>
|
||||
<comment>{0} will be replaced by name of the configuration property, {1} will be replaced by invalid value</comment>
|
||||
</data>
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
<data name="ErrorIsInvalid" xml:space="preserve">
|
||||
<value>{0} je netačan!</value>
|
||||
<comment>{0} will be replaced by object's name</comment>
|
||||
</data>
|
||||
|
||||
<data name="ErrorObjectIsNull" xml:space="preserve">
|
||||
<value>{0} je null!</value>
|
||||
<comment>{0} will be replaced by object's name</comment>
|
||||
@@ -95,13 +89,9 @@
|
||||
<value>Parsiranje {0} nije uspelo!</value>
|
||||
<comment>{0} will be replaced by object's name</comment>
|
||||
</data>
|
||||
|
||||
<data name="ErrorUpdateCheckFailed" xml:space="preserve">
|
||||
<value>Neuspešno traženje nove verzije!</value>
|
||||
</data>
|
||||
|
||||
|
||||
|
||||
<data name="Exiting" xml:space="preserve">
|
||||
<value>Izlaženje...</value>
|
||||
</data>
|
||||
@@ -147,15 +137,9 @@
|
||||
<data name="UpdateCheckingNewVersion" xml:space="preserve">
|
||||
<value>Traženje nove verzije...</value>
|
||||
</data>
|
||||
|
||||
<data name="UpdateFinished" xml:space="preserve">
|
||||
<value>Proces ažuriranja je završen!</value>
|
||||
</data>
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
<data name="UserInputSteamLogin" xml:space="preserve">
|
||||
<value>Molimo Vas unestie vaše Steam korističko ime: </value>
|
||||
<comment>Please note that this translation should end with space</comment>
|
||||
@@ -168,7 +152,6 @@
|
||||
<value>Molimo Vas uneste vašu Steam lozinku: </value>
|
||||
<comment>Please note that this translation should end with space</comment>
|
||||
</data>
|
||||
|
||||
<data name="IPCReady" xml:space="preserve">
|
||||
<value>IPC server je spreman!</value>
|
||||
</data>
|
||||
@@ -182,48 +165,28 @@
|
||||
<value>Nije moguće pronaći bilo kakvog bot-a nazvanog {0}!</value>
|
||||
<comment>{0} will be replaced by bot's name query (string)</comment>
|
||||
</data>
|
||||
|
||||
|
||||
|
||||
<data name="CheckingFirstBadgePage" xml:space="preserve">
|
||||
<value>Proveravanje prve strane bedževa...</value>
|
||||
</data>
|
||||
<data name="CheckingOtherBadgePages" xml:space="preserve">
|
||||
<value>Proveravanje ostalih strana bedževa...</value>
|
||||
</data>
|
||||
|
||||
<data name="Done" xml:space="preserve">
|
||||
<value>Gotovo!</value>
|
||||
</data>
|
||||
|
||||
<data name="IdlingFinished" xml:space="preserve">
|
||||
<value>Farmanje završeno!</value>
|
||||
</data>
|
||||
|
||||
|
||||
|
||||
<data name="IdlingStopped" xml:space="preserve">
|
||||
<value>Farmanje zaustavljeno!</value>
|
||||
</data>
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
<data name="UnknownCommand" xml:space="preserve">
|
||||
<value>Nepoznata komanda!</value>
|
||||
</data>
|
||||
|
||||
|
||||
<data name="BotAcceptingGift" xml:space="preserve">
|
||||
<value>Prihvatanje poklona: {0}...</value>
|
||||
<comment>{0} will be replaced by giftID (number)</comment>
|
||||
</data>
|
||||
|
||||
<data name="BotAddLicense" xml:space="preserve">
|
||||
<value>ID: {0} | Status: {1}</value>
|
||||
<comment>{0} will be replaced by game's ID (number), {1} will be replaced by status string</comment>
|
||||
@@ -235,8 +198,6 @@
|
||||
<data name="BotAlreadyRunning" xml:space="preserve">
|
||||
<value>Ovaj bot je već pokrenut!</value>
|
||||
</data>
|
||||
|
||||
|
||||
<data name="BotAuthenticatorToken" xml:space="preserve">
|
||||
<value>2FA Token: {0}</value>
|
||||
<comment>{0} will be replaced by generated 2FA token (string)</comment>
|
||||
@@ -262,8 +223,6 @@
|
||||
<data name="BotDisconnecting" xml:space="preserve">
|
||||
<value>Prekidanje veze...</value>
|
||||
</data>
|
||||
|
||||
|
||||
<data name="BotLoggedOff" xml:space="preserve">
|
||||
<value>Odjavljen sa Steam-a: {0}</value>
|
||||
<comment>{0} will be replaced by logging off reason (string)</comment>
|
||||
@@ -275,28 +234,22 @@
|
||||
<data name="BotLoggingIn" xml:space="preserve">
|
||||
<value>Prijavljivanje...</value>
|
||||
</data>
|
||||
|
||||
<data name="BotLootingFailed" xml:space="preserve">
|
||||
<value>Ponuda za razmjenu nije uspjela!</value>
|
||||
</data>
|
||||
|
||||
<data name="BotLootingSuccess" xml:space="preserve">
|
||||
<value>Ponuda za razmenu je uspešno poslata!</value>
|
||||
</data>
|
||||
<data name="BotSendingTradeToYourself" xml:space="preserve">
|
||||
<value>Ne možete poslati zahtjev za razmjenu sebi!</value>
|
||||
</data>
|
||||
|
||||
<data name="BotNotConnected" xml:space="preserve">
|
||||
<value>Ova instanca bot-a nije povezana!</value>
|
||||
</data>
|
||||
|
||||
|
||||
<data name="BotPointsBalance" xml:space="preserve">
|
||||
<value>Stanje bodova: {0}</value>
|
||||
<comment>{0} will be replaced by the points balance value (integer)</comment>
|
||||
</data>
|
||||
|
||||
<data name="BotReconnecting" xml:space="preserve">
|
||||
<value>Ponovno povezivanje...</value>
|
||||
</data>
|
||||
@@ -308,16 +261,12 @@
|
||||
<value>Ključ: {0} | Status: {1} | Stavke: {2}</value>
|
||||
<comment>{0} will be replaced by cd-key (string), {1} will be replaced by status string, {2} will be replaced by list of key-value pairs, separated by a comma</comment>
|
||||
</data>
|
||||
|
||||
|
||||
|
||||
<data name="BotStatusConnecting" xml:space="preserve">
|
||||
<value>Bot je povezan sa Steam-om.</value>
|
||||
</data>
|
||||
<data name="BotStatusNotRunning" xml:space="preserve">
|
||||
<value>Bot ne radi.</value>
|
||||
</data>
|
||||
|
||||
<data name="BotStatusPlayingNotAvailable" xml:space="preserve">
|
||||
<value>Bot se trenutno koristi.</value>
|
||||
</data>
|
||||
@@ -329,63 +278,30 @@
|
||||
<value>{0} je prazan!</value>
|
||||
<comment>{0} will be replaced by object's name</comment>
|
||||
</data>
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
<data name="BotConnecting" xml:space="preserve">
|
||||
<value>Povezivanje...</value>
|
||||
</data>
|
||||
|
||||
<data name="BotStopping" xml:space="preserve">
|
||||
<value>Zaustavljanje...</value>
|
||||
</data>
|
||||
|
||||
|
||||
<data name="Initializing" xml:space="preserve">
|
||||
<value>Učitavanje {0}...</value>
|
||||
<comment>{0} will be replaced by service name that is being initialized</comment>
|
||||
</data>
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
<data name="BotVersion" xml:space="preserve">
|
||||
<value>{0} V{1}</value>
|
||||
<comment>{0} will be replaced by program's name (e.g. "ASF"), {1} will be replaced by program's version (e.g. "1.0.0.0"). This string typically has nothing to translate and you should leave it as it is, unless you need to change the format, e.g. in RTL languages.</comment>
|
||||
</data>
|
||||
|
||||
|
||||
|
||||
|
||||
<data name="ErrorAccessDenied" xml:space="preserve">
|
||||
<value>Pristup odbijеn!</value>
|
||||
</data>
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
<data name="BotLevel" xml:space="preserve">
|
||||
<value>Bot je nivo {0}.</value>
|
||||
<comment>{0} will be replaced by bot's level</comment>
|
||||
</data>
|
||||
|
||||
|
||||
|
||||
<data name="ErrorAborted" xml:space="preserve">
|
||||
<value>Obustavljeno!</value>
|
||||
</data>
|
||||
|
||||
|
||||
<data name="PluginLoading" xml:space="preserve">
|
||||
<value>Učitavanje {0} V{1}...</value>
|
||||
<comment>{0} will be replaced by the name of the custom ASF plugin, {1} will be replaced by its version</comment>
|
||||
@@ -393,7 +309,6 @@
|
||||
<data name="NothingFound" xml:space="preserve">
|
||||
<value>Ništa nije pronađeno!</value>
|
||||
</data>
|
||||
|
||||
<data name="PleaseWait" xml:space="preserve">
|
||||
<value>Molimo vas sačekajte...</value>
|
||||
</data>
|
||||
@@ -403,55 +318,8 @@
|
||||
<data name="Executing" xml:space="preserve">
|
||||
<value>Izvršavanje...</value>
|
||||
</data>
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
<data name="Result" xml:space="preserve">
|
||||
<value>Rezultat: {0}</value>
|
||||
<comment>{0} will be replaced by generic result of various functions that use this string</comment>
|
||||
</data>
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
</root>
|
||||
|
||||
@@ -73,12 +73,6 @@
|
||||
{0}</value>
|
||||
<comment>{0} will be replaced by content string. Please note that this string should include newline for formatting.</comment>
|
||||
</data>
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
<data name="ErrorIsInvalid" xml:space="preserve">
|
||||
<value>{0} és invàlid!</value>
|
||||
<comment>{0} will be replaced by object's name</comment>
|
||||
@@ -86,8 +80,6 @@
|
||||
<data name="ErrorNoBotsDefined" xml:space="preserve">
|
||||
<value>No s'ha definit cap agent. Potser t'ha passat per alt configurar l'ASF? Segueix la guia "posada en marxa" al wiki si tens dificultats.</value>
|
||||
</data>
|
||||
|
||||
|
||||
<data name="ErrorRequestFailedTooManyTimes" xml:space="preserve">
|
||||
<value>La petició ha fallat després de {0} intents!</value>
|
||||
<comment>{0} will be replaced by maximum number of tries</comment>
|
||||
@@ -95,9 +87,6 @@
|
||||
<data name="ErrorUpdateCheckFailed" xml:space="preserve">
|
||||
<value>No s'ha pogut comprovar l'última versió!</value>
|
||||
</data>
|
||||
|
||||
|
||||
|
||||
<data name="Exiting" xml:space="preserve">
|
||||
<value>Sortint...</value>
|
||||
</data>
|
||||
@@ -157,9 +146,6 @@
|
||||
<value>Versió local: {0} | Versió remota: {1}</value>
|
||||
<comment>{0} will be replaced by current version, {1} will be replaced by remote version</comment>
|
||||
</data>
|
||||
|
||||
|
||||
|
||||
<data name="UserInputSteamLogin" xml:space="preserve">
|
||||
<value>Si us plau, introduïu el vostre nom d'usuari de Steam: </value>
|
||||
<comment>Please note that this translation should end with space</comment>
|
||||
@@ -172,7 +158,6 @@
|
||||
<value>Si us plau, introduïu la vostra contrasenya de Steam: </value>
|
||||
<comment>Please note that this translation should end with space</comment>
|
||||
</data>
|
||||
|
||||
<data name="IPCReady" xml:space="preserve">
|
||||
<value>Servidor IPC preparat!</value>
|
||||
</data>
|
||||
@@ -186,9 +171,18 @@
|
||||
<value>No s'ha trobat cap bot anomenat {0}!</value>
|
||||
<comment>{0} will be replaced by bot's name query (string)</comment>
|
||||
</data>
|
||||
|
||||
|
||||
|
||||
<data name="BotStatusOverview" xml:space="preserve">
|
||||
<value>Hi ha {0}/{1} agents en funcionament, amb un total de {2} jocs ({3} targetes) pendents de cultivar.</value>
|
||||
<comment>{0} will be replaced by number of active bots, {1} will be replaced by total number of bots, {2} will be replaced by total number of games left to farm, {3} will be replaced by total number of cards left to farm</comment>
|
||||
</data>
|
||||
<data name="BotStatusIdling" xml:space="preserve">
|
||||
<value>L'agent està cultivant un joc: {0} ({1}, queden {2} targetes per cultivar) d'un total de {3} jocs ({4} targetes) per cultivar (queden ~{5}).</value>
|
||||
<comment>{0} will be replaced by game's ID (number), {1} will be replaced by game's name, {2} will be replaced by number of cards left to farm, {3} will be replaced by total number of games to farm, {4} will be replaced by total number of cards to farm, {5} will be replaced by translated TimeSpan string (such as "1 day, 5 hours and 30 minutes")</comment>
|
||||
</data>
|
||||
<data name="BotStatusIdlingList" xml:space="preserve">
|
||||
<value>L'agent està cultivant jocs: {0} d'un total de {1} jocs ({2} targetes) per cultivar (queden ~{3}).</value>
|
||||
<comment>{0} will be replaced by list of the games (IDs, numbers), {1} will be replaced by total number of games to farm, {2} will be replaced by total number of cards to farm, {3} will be replaced by translated TimeSpan string (such as "1 day, 5 hours and 30 minutes")</comment>
|
||||
</data>
|
||||
<data name="CheckingFirstBadgePage" xml:space="preserve">
|
||||
<value>Comprovant la primera pàgina d'insígnies...</value>
|
||||
</data>
|
||||
@@ -213,7 +207,10 @@
|
||||
<value>Cultiu finalitzat: {0} ({1}) després de {2} de temps de joc!</value>
|
||||
<comment>{0} will be replaced by game's ID (number), {1} will be replaced by game's name, {2} will be replaced by translated TimeSpan string (such as "1 day, 5 hours and 30 minutes")</comment>
|
||||
</data>
|
||||
|
||||
<data name="IdlingFinishedForGames" xml:space="preserve">
|
||||
<value>El cultiu de jocs ha finalitzat: {0}</value>
|
||||
<comment>{0} will be replaced by list of the games (IDs, numbers), separated by a comma</comment>
|
||||
</data>
|
||||
<data name="IdlingStatusForGame" xml:space="preserve">
|
||||
<value>Estat del cultiu per {0} ({1}): Queden {2} targetes</value>
|
||||
<comment>{0} will be replaced by game's ID (number), {1} will be replaced by game's name, {2} will be replaced by number of cards left to farm</comment>
|
||||
@@ -221,7 +218,6 @@
|
||||
<data name="IdlingStopped" xml:space="preserve">
|
||||
<value>Cultiu aturat!</value>
|
||||
</data>
|
||||
|
||||
<data name="NothingToIdle" xml:space="preserve">
|
||||
<value>No hi ha res per cultivar en aquest compte!</value>
|
||||
</data>
|
||||
@@ -233,7 +229,6 @@
|
||||
<value>Cultivant en aquest moment: {0}</value>
|
||||
<comment>{0} will be replaced by list of the games (IDs, numbers), separated by a comma</comment>
|
||||
</data>
|
||||
|
||||
<data name="StillIdling" xml:space="preserve">
|
||||
<value>Encara cultivant: {0} ({1})</value>
|
||||
<comment>{0} will be replaced by game's ID (number), {1} will be replaced by game's name</comment>
|
||||
@@ -253,10 +248,6 @@
|
||||
<data name="UnknownCommand" xml:space="preserve">
|
||||
<value>Ordre desconeguda!</value>
|
||||
</data>
|
||||
|
||||
|
||||
|
||||
|
||||
<data name="BotAddLicense" xml:space="preserve">
|
||||
<value>ID: {0} | Estat: {1}</value>
|
||||
<comment>{0} will be replaced by game's ID (number), {1} will be replaced by status string</comment>
|
||||
@@ -271,8 +262,6 @@
|
||||
<data name="BotAuthenticatorConverting" xml:space="preserve">
|
||||
<value>Convertint arxiu .maFile a format ASF...</value>
|
||||
</data>
|
||||
|
||||
|
||||
<data name="BotAutomaticIdlingNowPaused" xml:space="preserve">
|
||||
<value>El cultiu automàtic està en pausa!</value>
|
||||
</data>
|
||||
@@ -294,103 +283,53 @@
|
||||
<data name="BotDisconnecting" xml:space="preserve">
|
||||
<value>Desconnectant...</value>
|
||||
</data>
|
||||
|
||||
|
||||
|
||||
|
||||
<data name="BotLoggedOn" xml:space="preserve">
|
||||
<value>S'ha iniciat sessió satisfactòriament com a {0}.</value>
|
||||
<comment>{0} will be replaced by steam ID (number)</comment>
|
||||
</data>
|
||||
<data name="BotLoggingIn" xml:space="preserve">
|
||||
<value>Iniciant sessió...</value>
|
||||
</data>
|
||||
|
||||
<data name="BotLootingFailed" xml:space="preserve">
|
||||
<value>L'oferta d'intercanvi ha fallat!</value>
|
||||
</data>
|
||||
|
||||
<data name="BotLootingSuccess" xml:space="preserve">
|
||||
<value>Oferta d'intercanvi enviada amb èxit!</value>
|
||||
</data>
|
||||
<data name="BotSendingTradeToYourself" xml:space="preserve">
|
||||
<value>No podeu enviar una oferta d'intercanvi a vosaltres mateixos!</value>
|
||||
</data>
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
<data name="BotReconnecting" xml:space="preserve">
|
||||
<value>Tornant a connectar...</value>
|
||||
</data>
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
<data name="BotStatusNotRunning" xml:space="preserve">
|
||||
<value>El bot no està en funcionament.</value>
|
||||
</data>
|
||||
|
||||
|
||||
|
||||
<data name="ErrorIsEmpty" xml:space="preserve">
|
||||
<value>{0} no conté res!</value>
|
||||
<comment>{0} will be replaced by object's name</comment>
|
||||
</data>
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
<data name="BotConnecting" xml:space="preserve">
|
||||
<value>S'està connectant...</value>
|
||||
</data>
|
||||
|
||||
<data name="BotStopping" xml:space="preserve">
|
||||
<value>Aturant...</value>
|
||||
</data>
|
||||
|
||||
|
||||
<data name="Initializing" xml:space="preserve">
|
||||
<value>Inicialitzant {0}...</value>
|
||||
<comment>{0} will be replaced by service name that is being initialized</comment>
|
||||
</data>
|
||||
|
||||
|
||||
|
||||
<data name="TranslationIncomplete" xml:space="preserve">
|
||||
<value>L'ASF intentarà utilitzar el teu idioma preferit, {0}, però aquesta traducció està completa en un {1}. Potser t'agradaria ajudar a completar o millorar la traducció de l'ASF a la teva llengua?</value>
|
||||
<comment>{0} will be replaced by culture code, such as "en-US", {1} will be replaced by completeness percentage, such as "78.5%"</comment>
|
||||
</data>
|
||||
|
||||
|
||||
<data name="BotVersion" xml:space="preserve">
|
||||
<value>{0} V{1}</value>
|
||||
<comment>{0} will be replaced by program's name (e.g. "ASF"), {1} will be replaced by program's version (e.g. "1.0.0.0"). This string typically has nothing to translate and you should leave it as it is, unless you need to change the format, e.g. in RTL languages.</comment>
|
||||
</data>
|
||||
|
||||
|
||||
|
||||
|
||||
<data name="ErrorAccessDenied" xml:space="preserve">
|
||||
<value>Accés denegat!</value>
|
||||
</data>
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
<data name="PluginLoaded" xml:space="preserve">
|
||||
<value>{0} s'ha carregat correctament!</value>
|
||||
<comment>{0} will be replaced by the name of the custom ASF plugin</comment>
|
||||
@@ -399,8 +338,6 @@
|
||||
<value>Inicialitzant {0} V{1}...</value>
|
||||
<comment>{0} will be replaced by the name of the custom ASF plugin, {1} will be replaced by its version</comment>
|
||||
</data>
|
||||
|
||||
|
||||
<data name="PleaseWait" xml:space="preserve">
|
||||
<value>Si us plau, espera...</value>
|
||||
</data>
|
||||
@@ -413,58 +350,14 @@
|
||||
<data name="InteractiveConsoleEnabled" xml:space="preserve">
|
||||
<value>La consola interactiva ja està activa, prem "c" per entrar al mode d'introducció d'ordres.</value>
|
||||
</data>
|
||||
|
||||
|
||||
|
||||
|
||||
<data name="UpdateCleanup" xml:space="preserve">
|
||||
<value>Fent neteja dels arxius antics després de l'actualització...</value>
|
||||
</data>
|
||||
|
||||
|
||||
|
||||
|
||||
<data name="Result" xml:space="preserve">
|
||||
<value>Resultat: {0}</value>
|
||||
<comment>{0} will be replaced by generic result of various functions that use this string</comment>
|
||||
</data>
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
<data name="PatchingFiles" xml:space="preserve">
|
||||
<value>Apedaçant els arxius de l'ASF...</value>
|
||||
</data>
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
</root>
|
||||
|
||||
@@ -800,4 +800,11 @@ StackTrace:
|
||||
<value>Input: {0}</value>
|
||||
<comment>{0} will be replaced by text input from the user.</comment>
|
||||
</data>
|
||||
<data name="WarningNoSystemRequiredLinuxDependencies" xml:space="preserve">
|
||||
<value>Prohlásili jste --system-required i když na vašem OS chybí požadované závislosti, aby tato funkce fungovala. Zvažte instalaci dbus, i když můžete bezpečně ignorovat toto upozornění, pokud nepotřebujete inhibici pro správné fungování.</value>
|
||||
</data>
|
||||
<data name="WarningBotDatabaseComponentDecryptionFailed" xml:space="preserve">
|
||||
<value>Dešifrování databáze {0} se nezdařilo. To může být v pořádku, pokud jste právě změnili {1}svého bota, při příštím spuštění byste již neměli toto varování pozorovat. Jinak byste měli prošetřit a zjistit přesný důvod neúspěchu.</value>
|
||||
<comment>{0} will be replaced by bot database component's name (string), {1} will be replaced by bot config component's name (string).</comment>
|
||||
</data>
|
||||
</root>
|
||||
|
||||
@@ -800,4 +800,11 @@ Processens oppetid: {1}</value>
|
||||
<value>Input: {0}</value>
|
||||
<comment>{0} will be replaced by text input from the user.</comment>
|
||||
</data>
|
||||
<data name="WarningNoSystemRequiredLinuxDependencies" xml:space="preserve">
|
||||
<value>Du har erklæret --system-krævet, selvom dit operativsystem mangler krævede afhængigheder for at denne funktion kan fungere. Overvej at installere dbus, selvom du også trygt kan ignorere denne advarsel, hvis du ikke behøver hæmning for at fungere korrekt.</value>
|
||||
</data>
|
||||
<data name="WarningBotDatabaseComponentDecryptionFailed" xml:space="preserve">
|
||||
<value>Dekryptering af {0} databasekomponent mislykkedes. Dette kan være OK, hvis du lige har ændret din bot's {1}, du bør ikke længere observere denne advarsel på det næste løb dengang. Ellers bør du undersøge og finde ud af den nøjagtige årsag til fiasko.</value>
|
||||
<comment>{0} will be replaced by bot database component's name (string), {1} will be replaced by bot config component's name (string).</comment>
|
||||
</data>
|
||||
</root>
|
||||
|
||||
@@ -801,4 +801,11 @@ Prozesslaufzeit: {1}</value>
|
||||
<value>Eingabe: {0}</value>
|
||||
<comment>{0} will be replaced by text input from the user.</comment>
|
||||
</data>
|
||||
<data name="WarningNoSystemRequiredLinuxDependencies" xml:space="preserve">
|
||||
<value>Sie haben --system-required deklariert, obwohl Ihrem Betriebssystem die erforderlichen Abhängigkeiten fehlen, damit diese Funktion funktioniert. Erwägen Sie die Installation von dbus, obwohl Sie diese Warnung auch sicher ignorieren können, wenn Sie keine Hemmung benötigen, um ordnungsgemäß zu funktionieren.</value>
|
||||
</data>
|
||||
<data name="WarningBotDatabaseComponentDecryptionFailed" xml:space="preserve">
|
||||
<value>Entschlüsselung der {0} Datenbankkomponente ist fehlgeschlagen. Dies kann in Ordnung sein, wenn Sie gerade die {1}Ihres Bots geändert haben, sollten Sie diese Warnung dann nicht mehr beim nächsten Lauf beachten. Andernfalls sollten Sie den genauen Grund für das Scheitern ermitteln.</value>
|
||||
<comment>{0} will be replaced by bot database component's name (string), {1} will be replaced by bot config component's name (string).</comment>
|
||||
</data>
|
||||
</root>
|
||||
|
||||
@@ -769,8 +769,6 @@ StackTrace:
|
||||
<value>Βρέθηκε ενημέρωση του πρόσθετου {0} από την έκδοση {1} σε {2}...</value>
|
||||
<comment>{0} will be replaced by plugin name (string), {1} will be replaced by current plugin's version, {2} will be replaced by remote plugin's version.</comment>
|
||||
</data>
|
||||
|
||||
|
||||
<data name="PluginUpdateInProgress" xml:space="preserve">
|
||||
<value>Ενημέρωση του πρόσθετου {0}...</value>
|
||||
<comment>{0} will be replaced by plugin name (string).</comment>
|
||||
@@ -794,4 +792,11 @@ StackTrace:
|
||||
<value>Input: {0}</value>
|
||||
<comment>{0} will be replaced by text input from the user.</comment>
|
||||
</data>
|
||||
<data name="WarningNoSystemRequiredLinuxDependencies" xml:space="preserve">
|
||||
<value>Έχετε δηλώσει το -- system-required αν και λείπουν οι απαιτούμενες εξαρτήσεις του λειτουργικού σας συστήματος για να λειτουργήσει αυτή η λειτουργία. Σκεφτείτε την εγκατάσταση dbus, αν και μπορείτε επίσης να αγνοήσετε με ασφάλεια αυτή την προειδοποίηση αν δεν χρειάζεστε αναστολή για να λειτουργήσει σωστά.</value>
|
||||
</data>
|
||||
<data name="WarningBotDatabaseComponentDecryptionFailed" xml:space="preserve">
|
||||
<value>Η αποκρυπτογράφηση της εφαρμογής βάσης δεδομένων {0} απέτυχε. Αυτό μπορεί να είναι εντάξει αν έχετε μόλις αλλάξει {1}του bot σας, δεν θα πρέπει πλέον να παρατηρήσετε αυτή την προειδοποίηση στην επόμενη εκτέλεση τότε. Διαφορετικά, θα πρέπει να διερευνήσετε και να μάθετε τον ακριβή λόγο για την αποτυχία.</value>
|
||||
<comment>{0} will be replaced by bot database component's name (string), {1} will be replaced by bot config component's name (string).</comment>
|
||||
</data>
|
||||
</root>
|
||||
|
||||
@@ -799,4 +799,11 @@ Tiempo de actividad del proceso: {1}</value>
|
||||
<value>Entrada: {0}</value>
|
||||
<comment>{0} will be replaced by text input from the user.</comment>
|
||||
</data>
|
||||
<data name="WarningNoSystemRequiredLinuxDependencies" xml:space="preserve">
|
||||
<value>Declaraste --system-required, aunque tu sistema operativo no tiene las dependencias para que esa característica funcione. Considera instalar dbus, aunque también puedes ignorar esta advertencia si no requieres inhibición para trabajar correctamente.</value>
|
||||
</data>
|
||||
<data name="WarningBotDatabaseComponentDecryptionFailed" xml:space="preserve">
|
||||
<value>El descifrado del componente de base de datos {0} ha fallado. Esto puede estar bien si acabas de cambiar la {1}de tu bot, ya no deberías observar esta advertencia en la próxima ejecución entonces. De lo contrario, debería investigar y averiguar la razón exacta del fracaso.</value>
|
||||
<comment>{0} will be replaced by bot database component's name (string), {1} will be replaced by bot config component's name (string).</comment>
|
||||
</data>
|
||||
</root>
|
||||
|
||||
@@ -510,24 +510,6 @@ StackTrace:
|
||||
<data name="Welcome" xml:space="preserve">
|
||||
<value>بنظر می رسد اولین استفاده ی شما از این برنامه باشد، خوش آمدید! 3:</value>
|
||||
</data>
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
<data name="BotWalletBalance" xml:space="preserve">
|
||||
<value>موجودی والت: {0} {1}</value>
|
||||
<comment>{0} will be replaced by wallet balance value, {1} will be replaced by currency name</comment>
|
||||
@@ -539,19 +521,12 @@ StackTrace:
|
||||
<value>بات لول {0} است.</value>
|
||||
<comment>{0} will be replaced by bot's level</comment>
|
||||
</data>
|
||||
|
||||
|
||||
|
||||
<data name="ErrorAborted" xml:space="preserve">
|
||||
<value>کنسل شد!</value>
|
||||
</data>
|
||||
|
||||
|
||||
|
||||
<data name="NothingFound" xml:space="preserve">
|
||||
<value>چیزی پیدا نشد!</value>
|
||||
</data>
|
||||
|
||||
<data name="PleaseWait" xml:space="preserve">
|
||||
<value>لطفا صبر کنید...</value>
|
||||
</data>
|
||||
@@ -561,65 +536,22 @@ StackTrace:
|
||||
<data name="Executing" xml:space="preserve">
|
||||
<value>در حال اجرا...</value>
|
||||
</data>
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
<data name="UpdateCleanup" xml:space="preserve">
|
||||
<value>درحال پاک سازی فایل های قدیمی بعد از به روزرسانی...</value>
|
||||
</data>
|
||||
|
||||
|
||||
|
||||
|
||||
<data name="Result" xml:space="preserve">
|
||||
<value>نتایج: {0}</value>
|
||||
<comment>{0} will be replaced by generic result of various functions that use this string</comment>
|
||||
</data>
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
<data name="PatchingFiles" xml:space="preserve">
|
||||
<value>در حال پچ کردن فایل های ASF...</value>
|
||||
</data>
|
||||
|
||||
<data name="ErrorIPNotBanned" xml:space="preserve">
|
||||
<value>آدرس آیپی {0} بن نشده است!</value>
|
||||
<comment>{0} will be replaced by an IP address which was requested to be unbanned from using IPC</comment>
|
||||
</data>
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
<data name="WarningSkipping" xml:space="preserve">
|
||||
<value>در حال رد کردن: {0}...</value>
|
||||
<comment>{0} will be replaced by text value (string) of entry being skipped.</comment>
|
||||
</data>
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
</root>
|
||||
|
||||
@@ -800,4 +800,11 @@ Prosessin käyttöaika: {1}</value>
|
||||
<value>Syöte: {0}</value>
|
||||
<comment>{0} will be replaced by text input from the user.</comment>
|
||||
</data>
|
||||
<data name="WarningNoSystemRequiredLinuxDependencies" xml:space="preserve">
|
||||
<value>Olet julistanut --system-pakolliseksi, vaikka käyttöjärjestelmästäsi puuttuu vaaditut riippuvuudet, jotta toiminto toimisi. Harkitse dbusin asentamista, vaikka voit myös turvallisesti ohittaa tämän varoituksen, jos et vaadi estoa toimimaan kunnolla.</value>
|
||||
</data>
|
||||
<data name="WarningBotDatabaseComponentDecryptionFailed" xml:space="preserve">
|
||||
<value>{0} tietokantakomponentin salauksen purku epäonnistui. Tämä voi olla OK, jos olet juuri muuttanut bottisi {1}, sinun ei pitäisi enää tarkkailla tätä varoitusta seuraavasta ajosta sitten. Muuten sinun pitäisi tutkia ja selvittää tarkka syy epäonnistumisen.</value>
|
||||
<comment>{0} will be replaced by bot database component's name (string), {1} will be replaced by bot config component's name (string).</comment>
|
||||
</data>
|
||||
</root>
|
||||
|
||||
@@ -800,4 +800,11 @@ Durée de fonctionnement : {1}</value>
|
||||
<value>Saisie : {0}</value>
|
||||
<comment>{0} will be replaced by text input from the user.</comment>
|
||||
</data>
|
||||
<data name="WarningNoSystemRequiredLinuxDependencies" xml:space="preserve">
|
||||
<value>Vous avez déclaré que --system-needed était nécessaire pour que cette fonctionnalité fonctionne, mais il manque à votre système d'exploitation des dépendances nécessaires. Pensez à installer dbus, bien que vous puissiez également ignorer cet avertissement en toute sécurité si vous n'avez pas besoin d'une inhibition pour fonctionner correctement.</value>
|
||||
</data>
|
||||
<data name="WarningBotDatabaseComponentDecryptionFailed" xml:space="preserve">
|
||||
<value>Le déchiffrement du composant de base de données {0} a échoué. Cela peut être OK si vous venez de changer le {1}de votre bot, vous ne devriez plus observer cet avertissement lors de la prochaine exécution alors. Sinon, vous devriez enquêter et trouver la raison exacte de l'échec.</value>
|
||||
<comment>{0} will be replaced by bot database component's name (string), {1} will be replaced by bot config component's name (string).</comment>
|
||||
</data>
|
||||
</root>
|
||||
|
||||
@@ -87,7 +87,6 @@ StackTrace:
|
||||
{2}</value>
|
||||
<comment>{0} will be replaced by function name, {1} will be replaced by exception message, {2} will be replaced by entire stack trace. Please note that this string should include newlines for formatting.</comment>
|
||||
</data>
|
||||
|
||||
<data name="ErrorFailingRequest" xml:space="preserve">
|
||||
<value>בקשה נכשלה: {0}</value>
|
||||
<comment>{0} will be replaced by URL of the request</comment>
|
||||
@@ -581,7 +580,6 @@ StackTrace:
|
||||
<value>לבוט יש רמה {0}.</value>
|
||||
<comment>{0} will be replaced by bot's level</comment>
|
||||
</data>
|
||||
|
||||
<data name="ActivelyMatchingItems" xml:space="preserve">
|
||||
<value>מתאים פריטי Steam, שלב #{0}...</value>
|
||||
<comment>{0} will be replaced by round number</comment>
|
||||
@@ -681,7 +679,6 @@ StackTrace:
|
||||
<value>מפתח ההצפנה שלך קצר מדי. אנו ממליצים להשתמש באחד שאורכו לפחות {0} בייטים (תווים).</value>
|
||||
<comment>{0} will be replaced by the number of bytes (characters) recommended</comment>
|
||||
</data>
|
||||
|
||||
<data name="WarningDefaultCryptKeyUsedForEncryption" xml:space="preserve">
|
||||
<value>אתה משתמש בהגדרה {0} של המאפיין {1}, אך לא סיפקת --cryptkey מותאם אישית. זה מביס לחלוטין את ההגנה, מכיוון ש-ASF נאלץ להשתמש במפתח (ידוע) משלו. עליך לספק --cryptkey מותאם אישית כדי לעשות שימוש בהטבת האבטחה שמציעה הגדרה זו.</value>
|
||||
<comment>{0} will be replaced by the name of a particular setting (e.g. "AES"), {1} will be replaced by the name of the property (e.g. "SteamPassword")</comment>
|
||||
@@ -701,7 +698,6 @@ StackTrace:
|
||||
<data name="ChecksumMissing" xml:space="preserve">
|
||||
<value>השרת המרוחק לא יודע כלום על המהדורה שאליה אנחנו מעדכנים. מצב זה אפשרי אם המהדורה פורסמה לאחרונה - מסרב להמשיך בהליך העדכון באופן מיידי כאמצעי אבטחה נוסף.</value>
|
||||
</data>
|
||||
|
||||
<data name="ChecksumWrong" xml:space="preserve">
|
||||
<value>שרת מרוחק השיב עם סכום ביקורת אחר, זה עשוי להצביע על הורדה פגומה או התקפת MITM, מסרב להמשיך בהליך העדכון!</value>
|
||||
</data>
|
||||
@@ -720,22 +716,4 @@ StackTrace:
|
||||
<value>ניסית להשתמש בתכונה בתשלום {0} אך אין לך מזהה רישיון חוקי שהוגדר בתצורה הגלובלית של ASF. אנא בדוק את התצורה שלך, מכיוון שהפונקציונליות לא תעבוד ללא פרטים נוספים.</value>
|
||||
<comment>{0} will be replaced by feature name (e.g. MatchActively)</comment>
|
||||
</data>
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
</root>
|
||||
|
||||
@@ -181,180 +181,4 @@ Automatsko ažuriranje na tu verziju nije moguće.</value>
|
||||
<value/>
|
||||
<comment>{0} will be replaced by version string, {1} will be replaced by update size (in megabytes)</comment>
|
||||
</data>
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
</root>
|
||||
|
||||
@@ -582,7 +582,6 @@ Ennyi ideje fut: {1}</value>
|
||||
<value>A bot szintje: {0}.</value>
|
||||
<comment>{0} will be replaced by bot's level</comment>
|
||||
</data>
|
||||
|
||||
<data name="ActivelyMatchingItems" xml:space="preserve">
|
||||
<value>Steam tárgyak egyeztetése #{0}...</value>
|
||||
<comment>{0} will be replaced by round number</comment>
|
||||
@@ -705,7 +704,6 @@ Ennyi ideje fut: {1}</value>
|
||||
<data name="ChecksumMissing" xml:space="preserve">
|
||||
<value>A távoli szerver semmit sem tud a verzióról, amelyre frissítünk. Ez a helyzet akkor lehetséges, ha a verzió a közelmúltban jelent meg – további biztonsági intézkedésként nem hajlandó azonnal folytatni a frissítési eljárást.</value>
|
||||
</data>
|
||||
|
||||
<data name="ChecksumWrong" xml:space="preserve">
|
||||
<value>A távoli szerver más ellenőrzőösszeggel válaszolt, ez hibás letöltésre vagy MITM-támadásra utalhat, és nem hajlandó folytatni a frissítési eljárást!</value>
|
||||
</data>
|
||||
@@ -735,19 +733,4 @@ Ennyi ideje fut: {1}</value>
|
||||
<data name="ErrorTooManyCrashes" xml:space="preserve">
|
||||
<value>Az ASF-ed túl sokszor crashelt a közelmúltban, és emiatt a folyamat inicializálás ki lett kapcsolva. Vagy nyomozd ki, vagy javítsd meg a felszerelésedet, aztán töröld az ASF.crash fájlod a beállítás könyvtáradból, vagy lásd el --ignorál a nem támogatott felszerelést ha tudod mit csinálsz.</value>
|
||||
</data>
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
</root>
|
||||
|
||||
@@ -580,7 +580,6 @@
|
||||
<value>Bot mempunyai level {0}.</value>
|
||||
<comment>{0} will be replaced by bot's level</comment>
|
||||
</data>
|
||||
|
||||
<data name="ActivelyMatchingItems" xml:space="preserve">
|
||||
<value>Mencocokkan item dari Steam, fase #{0}...</value>
|
||||
<comment>{0} will be replaced by round number</comment>
|
||||
@@ -789,5 +788,4 @@
|
||||
<data name="CustomPluginUpdatesEnabled" xml:space="preserve">
|
||||
<value>Plugin kustom telah didaftarkan untuk pembaruan otomatis. Tim ASF ingin mengingatkan Anda bahwa, demi keamanan Anda, Anda hanya boleh mengaktifkan pembaruan otomatis dari pihak yang tepercaya. Jika Anda tidak bermaksud melakukan ini, Anda dapat menonaktifkan pembaruan plugin di konfigurasi global ASF.</value>
|
||||
</data>
|
||||
|
||||
</root>
|
||||
|
||||
@@ -798,4 +798,11 @@ Tempo di attività: {1}</value>
|
||||
<value>Inserisci: {0}</value>
|
||||
<comment>{0} will be replaced by text input from the user.</comment>
|
||||
</data>
|
||||
<data name="WarningNoSystemRequiredLinuxDependencies" xml:space="preserve">
|
||||
<value>Hai dichiarato --system-requireed, anche se il tuo sistema operativo manca di dipendenze richieste per far funzionare quella funzione. Considerare l'installazione di dbus, anche se si può tranquillamente ignorare questo avviso se non si richiede inibizione per funzionare correttamente.</value>
|
||||
</data>
|
||||
<data name="WarningBotDatabaseComponentDecryptionFailed" xml:space="preserve">
|
||||
<value>Decifratura del componente del database {0} non riuscita. Questo può essere OK se hai appena cambiato {1}del tuo bot, non dovresti più osservare questo avviso alla prossima esecuzione allora. Altrimenti, si dovrebbe indagare e scoprire la ragione esatta del fallimento.</value>
|
||||
<comment>{0} will be replaced by bot database component's name (string), {1} will be replaced by bot config component's name (string).</comment>
|
||||
</data>
|
||||
</root>
|
||||
|
||||
@@ -797,4 +797,7 @@ Process uptime: {1}</value>
|
||||
<value>入力: {0}</value>
|
||||
<comment>{0} will be replaced by text input from the user.</comment>
|
||||
</data>
|
||||
<data name="WarningNoSystemRequiredLinuxDependencies" xml:space="preserve">
|
||||
<value>--system-requiredと宣言しましたが、その機能を動作させるために必要な依存関係が不足しています。 正常に動作するように阻害を必要としない場合は、この警告を無視することもできますが、dbusをインストールすることを検討してください。</value>
|
||||
</data>
|
||||
</root>
|
||||
|
||||
@@ -68,229 +68,30 @@
|
||||
<value>ASF ავტომატურად შემოწმედბა ახალ ვერსიისთვის ყველა {0}-ში.</value>
|
||||
<comment>{0} will be replaced by translated TimeSpan string (such as "24 hours")</comment>
|
||||
</data>
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
<data name="Exiting" xml:space="preserve">
|
||||
<value>გამოსვლა...</value>
|
||||
</data>
|
||||
<data name="WarningFailed" xml:space="preserve">
|
||||
<value>ვერ მოხერხდა!</value>
|
||||
</data>
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
<data name="Restarting" xml:space="preserve">
|
||||
<value>რესტარტდება...</value>
|
||||
</data>
|
||||
|
||||
<data name="Success" xml:space="preserve">
|
||||
<value>წარმატება!</value>
|
||||
</data>
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
<data name="PleaseWait" xml:space="preserve">
|
||||
<value>გთხოვთ დაელოდოთ...</value>
|
||||
</data>
|
||||
<data name="EnterCommand" xml:space="preserve">
|
||||
<value>შეიყვანეთ ბრძანება: </value>
|
||||
</data>
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
<data name="Result" xml:space="preserve">
|
||||
<value>შედეგი: {0}</value>
|
||||
<comment>{0} will be replaced by generic result of various functions that use this string</comment>
|
||||
</data>
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
<data name="WarningSkipping" xml:space="preserve">
|
||||
<value>გამოტოვება: {0}...</value>
|
||||
<comment>{0} will be replaced by text value (string) of entry being skipped.</comment>
|
||||
</data>
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
</root>
|
||||
|
||||
@@ -584,7 +584,6 @@ StackTrace:
|
||||
<value>봇은 레벨 {0} 입니다.</value>
|
||||
<comment>{0} will be replaced by bot's level</comment>
|
||||
</data>
|
||||
|
||||
<data name="ActivelyMatchingItems" xml:space="preserve">
|
||||
<value>#{0} 번째 Steam 아이템 매칭 중입니다.</value>
|
||||
<comment>{0} will be replaced by round number</comment>
|
||||
@@ -684,7 +683,6 @@ StackTrace:
|
||||
<value>암호키가 너무 짧습니다. 최소한 {0} 바이트(글자수) 길이 이상의 암호키를 사용하는 것을 추천합니다.</value>
|
||||
<comment>{0} will be replaced by the number of bytes (characters) recommended</comment>
|
||||
</data>
|
||||
|
||||
<data name="WarningDefaultCryptKeyUsedForEncryption" xml:space="preserve">
|
||||
<value>{1} 속성의 {0} 설정을 사용하고 있습니다만, 별도의 -cryptkey를 사용하고 있지 않습니다. ASF는 자체 (이미 알려진) 키를 사용해야하므로 보호 기능이 제대로 동작하지 않습니다. 설정이 제공하는 보안의 효과를 누리기 위하여 별도의 -cryptkey를 사용해야 합니다.</value>
|
||||
<comment>{0} will be replaced by the name of a particular setting (e.g. "AES"), {1} will be replaced by the name of the property (e.g. "SteamPassword")</comment>
|
||||
@@ -704,7 +702,6 @@ StackTrace:
|
||||
<data name="ChecksumMissing" xml:space="preserve">
|
||||
<value>원격 서버는 최신 배포본의 업데이트에 대하여 알지 못합니다. 이 상황은 최근에 새로운 배포본이 배포되었을 때 발생할 수 있으며 추가 보안 조치로 업데이트를 즉시 진행하지 않습니다.</value>
|
||||
</data>
|
||||
|
||||
<data name="ChecksumWrong" xml:space="preserve">
|
||||
<value>원격서버와 체크섬이 다릅니다. 다운로드 받은 실행화일이 깨졌거나, 중간자 공격(MITM) 을 받았을 수도 있습니다. 업데이트를 진행하지 않습니다.</value>
|
||||
</data>
|
||||
@@ -738,20 +735,7 @@ StackTrace:
|
||||
<value>{0} ({1}) 게임이 비공개로 설정되어 있기 때문에 농사를 지을 수 없습니다. ASF로 이 게임 농사를 지으려면 공개로 변경해주세요.</value>
|
||||
<comment>{0} will be replaced by game's ID (number), {1} will be replaced by game's name</comment>
|
||||
</data>
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
<data name="CustomPluginUpdatesEnabled" xml:space="preserve">
|
||||
<value>커스텀 플러그인들이 자동 업데이트에 등록되었습니다. ASF 팀은 안전을 위해 신뢰할 수 있는 출처들에서만 자동 업데이트를 활성화할 것을 명시 드립니다. 만약 원치 않으신다면, ASF 글로벌 설정에서 플러그인 업데이트를 비활성화할 수 있습니다.</value>
|
||||
</data>
|
||||
|
||||
</root>
|
||||
|
||||
@@ -87,7 +87,6 @@ StackTrace:
|
||||
{2}</value>
|
||||
<comment>{0} will be replaced by function name, {1} will be replaced by exception message, {2} will be replaced by entire stack trace. Please note that this string should include newlines for formatting.</comment>
|
||||
</data>
|
||||
|
||||
<data name="ErrorFailingRequest" xml:space="preserve">
|
||||
<value>Užklausa nutrūksta: {0}</value>
|
||||
<comment>{0} will be replaced by URL of the request</comment>
|
||||
@@ -581,7 +580,6 @@ Proceso veikimo laikas: {1}</value>
|
||||
<value>Botas neturi {0} lygio.</value>
|
||||
<comment>{0} will be replaced by bot's level</comment>
|
||||
</data>
|
||||
|
||||
<data name="ActivelyMatchingItems" xml:space="preserve">
|
||||
<value>Derinami Steam item'ai, #{0} raundas...</value>
|
||||
<comment>{0} will be replaced by round number</comment>
|
||||
@@ -681,7 +679,6 @@ Proceso veikimo laikas: {1}</value>
|
||||
<value>Jūsų šifravimo raktas yra per trumpas. Rekomenduojame naudoti raktą, kuris yra bent {0} baitų (simbolių) ilgio.</value>
|
||||
<comment>{0} will be replaced by the number of bytes (characters) recommended</comment>
|
||||
</data>
|
||||
|
||||
<data name="WarningDefaultCryptKeyUsedForEncryption" xml:space="preserve">
|
||||
<value>Jūs naudojate {0} nustatymą is {1} ypatybės, tačiau nenurodėte tinkintos --cryptkey savybės. Tai prieštarauja apsaugai, kadangi ASF bus priversta naudoti savo (žinomą) raktą. Reiktų nurodyti tinkintą --cryptkey savybę, kad šio gautumėte šio nustatymo naudą.</value>
|
||||
<comment>{0} will be replaced by the name of a particular setting (e.g. "AES"), {1} will be replaced by the name of the property (e.g. "SteamPassword")</comment>
|
||||
@@ -701,7 +698,6 @@ Proceso veikimo laikas: {1}</value>
|
||||
<data name="ChecksumMissing" xml:space="preserve">
|
||||
<value>Nuotolinis serveris nežino apie išleidimą, į kurį bandote atsinaujinti. Ši situacija galima, jeigu išleidimas buvo neseniai paskelbtas - neleidžiama atnaujinti iš karto dėl papildomos apsaugos.</value>
|
||||
</data>
|
||||
|
||||
<data name="ChecksumWrong" xml:space="preserve">
|
||||
<value>Nuotolinis serveris atsakė su nesutampančia kontroline suma. Tai gali būti dėl sugadinto atsisiuntimo arba MITM atakos. Atsisakoma tęsti atnaujinimo procesą!</value>
|
||||
</data>
|
||||
@@ -720,22 +716,4 @@ Proceso veikimo laikas: {1}</value>
|
||||
<value>Jūs bandote naudoti mokamą funkciją {0}, tačiau jūs neturite tinkamo LicenseID nustatyto globalioje konfigūracijoje. Prašome patikrinti savo konfigūraciją, kadangi funkcija neveiks be papildomų detalių.</value>
|
||||
<comment>{0} will be replaced by feature name (e.g. MatchActively)</comment>
|
||||
</data>
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
</root>
|
||||
|
||||
@@ -799,4 +799,11 @@ Proces uptime: {1}</value>
|
||||
<value>Input: {0}</value>
|
||||
<comment>{0} will be replaced by text input from the user.</comment>
|
||||
</data>
|
||||
<data name="WarningNoSystemRequiredLinuxDependencies" xml:space="preserve">
|
||||
<value>Je hebt verklaard --system-verplicht te zijn, hoewel je OS vereiste afhankelijkheden mist om die functie te laten werken. Overweeg het installeren van dbus, maar je kunt deze waarschuwing ook negeren als je geen remmen nodig hebt om goed te werken.</value>
|
||||
</data>
|
||||
<data name="WarningBotDatabaseComponentDecryptionFailed" xml:space="preserve">
|
||||
<value>Ontsleutelen van de {0} database-component is mislukt. Dit kan OK zijn als je net de {1}van de bot hebt veranderd, moet je deze waarschuwing bij de volgende keer niet meer observeren. Anders moet u onderzoeken wat precies de reden van een mislukking is.</value>
|
||||
<comment>{0} will be replaced by bot database component's name (string), {1} will be replaced by bot config component's name (string).</comment>
|
||||
</data>
|
||||
</root>
|
||||
|
||||
@@ -230,7 +230,6 @@ StackTrace:
|
||||
<value>Kunne ikke finne noen bot som heter {0}!</value>
|
||||
<comment>{0} will be replaced by bot's name query (string)</comment>
|
||||
</data>
|
||||
|
||||
<data name="BotStatusIdling" xml:space="preserve">
|
||||
<value>Bot dyrkingsspill: {0} ({1}, {2} kort dråper igjen) fra totalt {3} spill ({4} kort) igjen til gården (~{5} igjen).</value>
|
||||
<comment>{0} will be replaced by game's ID (number), {1} will be replaced by game's name, {2} will be replaced by number of cards left to farm, {3} will be replaced by total number of games to farm, {4} will be replaced by total number of cards to farm, {5} will be replaced by translated TimeSpan string (such as "1 day, 5 hours and 30 minutes")</comment>
|
||||
@@ -284,7 +283,6 @@ StackTrace:
|
||||
<value>Nærliggende nå: {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="PlayingNotAvailable" xml:space="preserve">
|
||||
<value>Å spille er utilgjengelig for øyeblikket, vi vil prøve igjen senere!</value>
|
||||
</data>
|
||||
@@ -421,8 +419,6 @@ StackTrace:
|
||||
<data name="BotReconnecting" xml:space="preserve">
|
||||
<value>Kobler til på nytt...</value>
|
||||
</data>
|
||||
|
||||
|
||||
<data name="BotRemovedExpiredLoginKey" xml:space="preserve">
|
||||
<value>Fjernet utgått innloggingsnøkkel!</value>
|
||||
</data>
|
||||
@@ -568,12 +564,10 @@ prosess oppgang: {1}</value>
|
||||
<data name="BotHasNoWallet" xml:space="preserve">
|
||||
<value>Bot har ingen lommebok.</value>
|
||||
</data>
|
||||
|
||||
<data name="BotInventory" xml:space="preserve">
|
||||
<value>{0}/{1} ({2}/{3}): {4} ressurser</value>
|
||||
<comment>{0} will be replaced by appID (number), {1} will be replaced by contextID (number), {2} will be replaced by app's name (string), {3} will be replaced by name of the context (string), {4} will be replaced by number of assets in the specified inventory (number).</comment>
|
||||
</data>
|
||||
|
||||
<data name="DoneActivelyMatchingItems" xml:space="preserve">
|
||||
<value>Samsvarer med Steam-elementer, fra omkring #{0}.</value>
|
||||
<comment>{0} will be replaced by round number</comment>
|
||||
@@ -585,7 +579,6 @@ prosess oppgang: {1}</value>
|
||||
<value>Du har flere personlige bot kontoer enn vår øvre anbefalte grense ({0}). Vær oppmerksom på at dette oppsettet ikke støttes og kan forårsake forskjellige Steam-relaterte problemer, inkludert kontosuspensjoner. Sjekk ut FAQ for mer detaljer.</value>
|
||||
<comment>{0} will be replaced by our maximum recommended bots count (number)</comment>
|
||||
</data>
|
||||
|
||||
<data name="PluginLoading" xml:space="preserve">
|
||||
<value>Laster {0} V{1}...</value>
|
||||
<comment>{0} will be replaced by the name of the custom ASF plugin, {1} will be replaced by its version</comment>
|
||||
@@ -779,4 +772,11 @@ prosess oppgang: {1}</value>
|
||||
<value>Input: {0}</value>
|
||||
<comment>{0} will be replaced by text input from the user.</comment>
|
||||
</data>
|
||||
<data name="WarningNoSystemRequiredLinuxDependencies" xml:space="preserve">
|
||||
<value>Du har erklært --system-nødvendig, selv om OS mangler nødvendige avhengigheter for at den funksjonen skal fungere. Vurder å installere dbus, selv om du også trygt kan overse denne advarselen hvis du ikke trenger hemming av denne funksjonen.</value>
|
||||
</data>
|
||||
<data name="WarningBotDatabaseComponentDecryptionFailed" xml:space="preserve">
|
||||
<value>Dekryptering av {0} -databasekomponenten mislyktes. Dette kan være OK hvis du akkurat har endret din bot {1}, bør du ikke lenger observere dette varselet på neste kjøring da. Ellers bør du undersøke og finne den nøyaktige årsaken til svikten.</value>
|
||||
<comment>{0} will be replaced by bot database component's name (string), {1} will be replaced by bot config component's name (string).</comment>
|
||||
</data>
|
||||
</root>
|
||||
|
||||
@@ -800,4 +800,11 @@ Czas procesu: {1}</value>
|
||||
<value>Wejście: {0}</value>
|
||||
<comment>{0} will be replaced by text input from the user.</comment>
|
||||
</data>
|
||||
<data name="WarningNoSystemRequiredLinuxDependencies" xml:space="preserve">
|
||||
<value>Zgłosiłeś --system-wymagane, chociaż w systemie operacyjnym brakuje wymaganych zależności, aby ta funkcja działała. Rozważ zainstalowanie dbus, chociaż możesz również bezpiecznie zignorować to ostrzeżenie, jeśli nie wymagasz zahamowania prawidłowego działania.</value>
|
||||
</data>
|
||||
<data name="WarningBotDatabaseComponentDecryptionFailed" xml:space="preserve">
|
||||
<value>Odszyfrowanie komponentu bazy danych {0} nie powiodło się. To może być w porządku, jeśli właśnie zmieniłeś swojego bota {1}, nie powinieneś już obserwować tego ostrzeżenia przy następnym uruchomieniu. W przeciwnym razie należy zbadać i dowiedzieć się dokładnej przyczyny niepowodzenia.</value>
|
||||
<comment>{0} will be replaced by bot database component's name (string), {1} will be replaced by bot config component's name (string).</comment>
|
||||
</data>
|
||||
</root>
|
||||
|
||||
@@ -800,4 +800,11 @@ Tempo de execução: {1}</value>
|
||||
<value>Entrada: {0}</value>
|
||||
<comment>{0} will be replaced by text input from the user.</comment>
|
||||
</data>
|
||||
<data name="WarningNoSystemRequiredLinuxDependencies" xml:space="preserve">
|
||||
<value>Você declarou --system-required embora esteja faltando as dependências necessárias para que esse recurso funcione. Considere instalar o dbus, embora você também possa ignorar com segurança este aviso se não exigir inibição para funcionar corretamente.</value>
|
||||
</data>
|
||||
<data name="WarningBotDatabaseComponentDecryptionFailed" xml:space="preserve">
|
||||
<value>A desencriptação do componente do banco de dados {0} falhou. Isso pode estar bem se você mudou o {1}do seu bot, você não deve mais observar este aviso na próxima vez. Caso contrário, deverá investigar e descobrir a razão exacta do fracasso.</value>
|
||||
<comment>{0} will be replaced by bot database component's name (string), {1} will be replaced by bot config component's name (string).</comment>
|
||||
</data>
|
||||
</root>
|
||||
|
||||
@@ -800,4 +800,11 @@ Tempo de execução: {1}</value>
|
||||
<value>Input: {0}</value>
|
||||
<comment>{0} will be replaced by text input from the user.</comment>
|
||||
</data>
|
||||
<data name="WarningNoSystemRequiredLinuxDependencies" xml:space="preserve">
|
||||
<value>Você declarou --system-required embora esteja faltando as dependências necessárias para que esse recurso funcione. Considere instalar o dbus, embora você também possa ignorar com segurança este aviso se não exigir inibição para funcionar corretamente.</value>
|
||||
</data>
|
||||
<data name="WarningBotDatabaseComponentDecryptionFailed" xml:space="preserve">
|
||||
<value>A desencriptação do componente do banco de dados {0} falhou. Isso pode estar bem se você mudou o {1}do seu bot, você não deve mais observar este aviso na próxima vez. Caso contrário, deverá investigar e descobrir a razão exacta do fracasso.</value>
|
||||
<comment>{0} will be replaced by bot database component's name (string), {1} will be replaced by bot config component's name (string).</comment>
|
||||
</data>
|
||||
</root>
|
||||
|
||||
@@ -800,4 +800,11 @@ Process uptime: {1}</value>
|
||||
<value>Input: {0}</value>
|
||||
<comment>{0} will be replaced by text input from the user.</comment>
|
||||
</data>
|
||||
<data name="WarningNoSystemRequiredLinuxDependencies" xml:space="preserve">
|
||||
<value>You've declared --system-required, although your OS is missing required dependencies for that feature to work. Consider installing dbus, although you can also safely ignore this warning if you do not require inhibition to work properly.</value>
|
||||
</data>
|
||||
<data name="WarningBotDatabaseComponentDecryptionFailed" xml:space="preserve">
|
||||
<value>Decryption of {0} database component has failed. This can be OK if you've just changed your bot's {1}, you should no longer observe this warning on the next run then. Otherwise, you should investigate and find out the exact reason for failure.</value>
|
||||
<comment>{0} will be replaced by bot database component's name (string), {1} will be replaced by bot config component's name (string).</comment>
|
||||
</data>
|
||||
</root>
|
||||
|
||||
@@ -800,4 +800,11 @@ Proces: {1}</value>
|
||||
<value>Intrare: {0}</value>
|
||||
<comment>{0} will be replaced by text input from the user.</comment>
|
||||
</data>
|
||||
<data name="WarningNoSystemRequiredLinuxDependencies" xml:space="preserve">
|
||||
<value>Ați declarat --necesar sistemului, deși sistemul dvs. de operare lipsește dependențele necesare pentru ca această caracteristică să funcționeze. Luați în considerare instalarea autobuzului, deși puteți ignora în siguranță această avertizare dacă nu aveți nevoie de inhibiție pentru a funcționa corect.</value>
|
||||
</data>
|
||||
<data name="WarningBotDatabaseComponentDecryptionFailed" xml:space="preserve">
|
||||
<value>Decriptarea componentei bazei de date {0} a eșuat. Acest lucru poate fi OK dacă tocmai l-ai schimbat pe bot-ul {1}, atunci nu ar trebui să mai observi acest avertisment la următoarea rulare. Altfel, ar trebui să investighezi şi să afli exact motivul eşecului.</value>
|
||||
<comment>{0} will be replaced by bot database component's name (string), {1} will be replaced by bot config component's name (string).</comment>
|
||||
</data>
|
||||
</root>
|
||||
|
||||
@@ -804,4 +804,7 @@
|
||||
Файл: Strings.resx</value>
|
||||
<comment>{0} will be replaced by text input from the user.</comment>
|
||||
</data>
|
||||
<data name="WarningNoSystemRequiredLinuxDependencies" xml:space="preserve">
|
||||
<value>Вы объявили --system-required, хотя ваша ОС не имеет необходимых зависимостей для работы этой функции. Рассмотрим установку dbus, хотя вы также можете безопасно проигнорировать это предупреждение, если вам не требуется запрещение для нормальной работы.</value>
|
||||
</data>
|
||||
</root>
|
||||
|
||||
@@ -584,7 +584,6 @@ Doba prevádzky procesu: {1}</value>
|
||||
<value>Bot má level {0}.</value>
|
||||
<comment>{0} will be replaced by bot's level</comment>
|
||||
</data>
|
||||
|
||||
<data name="ActivelyMatchingItems" xml:space="preserve">
|
||||
<value>Porovnávanie položiek na Steame, kolo #{0}...</value>
|
||||
<comment>{0} will be replaced by round number</comment>
|
||||
@@ -685,7 +684,6 @@ Interaktívna konzola je teraz aktívna, napíšte "c" pre vstup do príkazovéh
|
||||
<value>Váš šifrovací kľuč je príliš krátky. Doporučujeme použiť ten, ktorý je aspoň {0} bajtu (znakov) dlhý.</value>
|
||||
<comment>{0} will be replaced by the number of bytes (characters) recommended</comment>
|
||||
</data>
|
||||
|
||||
<data name="WarningDefaultCryptKeyUsedForEncryption" xml:space="preserve">
|
||||
<value>Používate {0} nastavenie vlastnosti {1}, ale neposkytujete vlastný --cryptkey. To celkovo ruší ochranu, pretože ASF je nútený použiť svoj vlastný (známy) kľuč. Pre využitie bezpečnostného prínosu ponúkaného týmto nastavením, by ste mali poskytnúť vlastní --cryptkey.</value>
|
||||
<comment>{0} will be replaced by the name of a particular setting (e.g. "AES"), {1} will be replaced by the name of the property (e.g. "SteamPassword")</comment>
|
||||
@@ -705,7 +703,6 @@ Interaktívna konzola je teraz aktívna, napíšte "c" pre vstup do príkazovéh
|
||||
<data name="ChecksumMissing" xml:space="preserve">
|
||||
<value>Vzdialený server nepozná verziu na ktorú se snažíte aktualizovať. Táto situácia nastáva, pokiaľ verzia bola vydaná nedávno - aktualizácia nebude z bezpečnostných dôvodov pokračovať.</value>
|
||||
</data>
|
||||
|
||||
<data name="ChecksumWrong" xml:space="preserve">
|
||||
<value>Vzdialený server odpovedal s iným kontrolným súčtom, čo môže naznačovať chybu pri sťahovaní alebo útok MITM, proces aktualizácie preto nebude pokračovať!</value>
|
||||
</data>
|
||||
@@ -728,10 +725,6 @@ Interaktívna konzola je teraz aktívna, napíšte "c" pre vstup do príkazovéh
|
||||
<value>ASF nemôže spustiť aplikáciu {0}, pretože má regionálne obmedzenie pre krajinu {1}, ktoré trvá do {2}.</value>
|
||||
<comment>{0} will be replaced by app ID (number), {1} will be replaced by short country code (string, such as "PL"), {2} will be replaced by human-readable date (string).</comment>
|
||||
</data>
|
||||
|
||||
|
||||
|
||||
|
||||
<data name="PluginUpdatesChecking" xml:space="preserve">
|
||||
<value>Kontrolujem aktualizácie pluginov...</value>
|
||||
</data>
|
||||
@@ -743,13 +736,10 @@ Interaktívna konzola je teraz aktívna, napíšte "c" pre vstup do príkazovéh
|
||||
<value>Žiadne dostupné aktualizácie pre {0} plugin: {1} ≥ {2}.</value>
|
||||
<comment>{0} will be replaced by plugin name (string), {1} will be replaced by current plugin's version, {2} will be replaced by remote plugin's version.</comment>
|
||||
</data>
|
||||
|
||||
<data name="PluginUpdateFound" xml:space="preserve">
|
||||
<value>Našla sa aktualizácia pre {0} plugin z verzie {1} na {2}...</value>
|
||||
<comment>{0} will be replaced by plugin name (string), {1} will be replaced by current plugin's version, {2} will be replaced by remote plugin's version.</comment>
|
||||
</data>
|
||||
|
||||
|
||||
<data name="PluginUpdateInProgress" xml:space="preserve">
|
||||
<value>Aktualizujem {0} plugin...</value>
|
||||
<comment>{0} will be replaced by plugin name (string).</comment>
|
||||
@@ -762,7 +752,4 @@ Interaktívna konzola je teraz aktívna, napíšte "c" pre vstup do príkazovéh
|
||||
<value>{0}/{1} plugin bol zaregistrovaný a automatické aktualizácie boli aktivované.</value>
|
||||
<comment>{0} will be replaced by plugin name (string), {1} will be replaced by plugin assembly name (string).</comment>
|
||||
</data>
|
||||
|
||||
|
||||
|
||||
</root>
|
||||
|
||||
@@ -87,7 +87,6 @@ StackTrace:
|
||||
{2}</value>
|
||||
<comment>{0} will be replaced by function name, {1} will be replaced by exception message, {2} will be replaced by entire stack trace. Please note that this string should include newlines for formatting.</comment>
|
||||
</data>
|
||||
|
||||
<data name="ErrorFailingRequest" xml:space="preserve">
|
||||
<value>Zahtev se ne izvršava: {0}</value>
|
||||
<comment>{0} will be replaced by URL of the request</comment>
|
||||
@@ -231,8 +230,6 @@ StackTrace:
|
||||
<value>Trenutno radi {0}/{1} botova, a preostalo je ukupno {2} igrica ({3} karata) koje treba farmati.</value>
|
||||
<comment>{0} will be replaced by number of active bots, {1} will be replaced by total number of bots, {2} will be replaced by total number of games left to farm, {3} will be replaced by total number of cards left to farm</comment>
|
||||
</data>
|
||||
|
||||
|
||||
<data name="CheckingFirstBadgePage" xml:space="preserve">
|
||||
<value>Proveravanje prve stranje bedževa...</value>
|
||||
</data>
|
||||
@@ -246,11 +243,9 @@ StackTrace:
|
||||
<data name="Done" xml:space="preserve">
|
||||
<value>Gotovo!</value>
|
||||
</data>
|
||||
|
||||
<data name="IdlingFinished" xml:space="preserve">
|
||||
<value>Idlovanje je završeno!</value>
|
||||
</data>
|
||||
|
||||
<data name="IdlingFinishedForGames" xml:space="preserve">
|
||||
<value>Završeno idlovanje igrica: {0}</value>
|
||||
<comment>{0} will be replaced by list of the games (IDs, numbers), separated by a comma</comment>
|
||||
@@ -401,7 +396,6 @@ StackTrace:
|
||||
<value>U vlasništvu: {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>Stopa ograničenja je prevazićena, pokušaćemo ponovo nakon {0} čekanja...</value>
|
||||
<comment>{0} will be replaced by translated TimeSpan string (such as "25 minutes")</comment>
|
||||
@@ -566,7 +560,6 @@ Vrijeme rada procesa: {1}</value>
|
||||
<value>Bot ima nivo {0}.</value>
|
||||
<comment>{0} will be replaced by bot's level</comment>
|
||||
</data>
|
||||
|
||||
<data name="ActivelyMatchingItems" xml:space="preserve">
|
||||
<value>Podudaranje Steam itema, runda #{0}...</value>
|
||||
<comment>{0} will be replaced by round number</comment>
|
||||
@@ -619,7 +612,6 @@ Vrijeme rada procesa: {1}</value>
|
||||
<value>Uspješno obavljeno/a {0} potvrda/e!</value>
|
||||
<comment>{0} will be replaced by number of confirmations</comment>
|
||||
</data>
|
||||
|
||||
<data name="UpdateCleanup" xml:space="preserve">
|
||||
<value>Čišćenje starih fajlova nakon ažuriranja...</value>
|
||||
</data>
|
||||
@@ -651,38 +643,4 @@ Vrijeme rada procesa: {1}</value>
|
||||
<data name="ErrorConfigDirectoryNotFound" xml:space="preserve">
|
||||
<value>Nije pronađen config direktorijum, odustajanje!</value>
|
||||
</data>
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
</root>
|
||||
|
||||
@@ -801,4 +801,11 @@ Processens drifttid: {1}</value>
|
||||
<value>Input: {0}</value>
|
||||
<comment>{0} will be replaced by text input from the user.</comment>
|
||||
</data>
|
||||
<data name="WarningNoSystemRequiredLinuxDependencies" xml:space="preserve">
|
||||
<value>Du har deklarerat --system-krävs, även om ditt operativsystem saknar nödvändiga beroenden för att den funktionen ska fungera. Överväg att installera dbus, men du kan också säkert ignorera denna varning om du inte behöver hämning för att fungera korrekt.</value>
|
||||
</data>
|
||||
<data name="WarningBotDatabaseComponentDecryptionFailed" xml:space="preserve">
|
||||
<value>Dekryptering av {0} databaskomponent har misslyckats. Detta kan vara OK om du bara har ändrat din bots {1}, du bör inte längre observera denna varning på nästa körning då. Annars bör du undersöka och ta reda på den exakta orsaken till misslyckande.</value>
|
||||
<comment>{0} will be replaced by bot database component's name (string), {1} will be replaced by bot config component's name (string).</comment>
|
||||
</data>
|
||||
</root>
|
||||
|
||||
@@ -87,7 +87,6 @@ StackTrace:
|
||||
{2}</value>
|
||||
<comment>{0} will be replaced by function name, {1} will be replaced by exception message, {2} will be replaced by entire stack trace. Please note that this string should include newlines for formatting.</comment>
|
||||
</data>
|
||||
|
||||
<data name="ErrorFailingRequest" xml:space="preserve">
|
||||
<value>คำขอล้มเหลว: {0}</value>
|
||||
<comment>{0} will be replaced by URL of the request</comment>
|
||||
@@ -125,7 +124,6 @@ StackTrace:
|
||||
<data name="ErrorUpdateNoAssets" xml:space="preserve">
|
||||
<value>ไม่สามารถดำเนินการอัพเดตได้เนื่อจากเวอร์ชั่นดังกล่าวไม่มีแอทเซทซใดๆอยู่!</value>
|
||||
</data>
|
||||
|
||||
<data name="Exiting" xml:space="preserve">
|
||||
<value>กำลังออก…</value>
|
||||
</data>
|
||||
@@ -185,7 +183,6 @@ StackTrace:
|
||||
<value>เวอร์ชันบนเครื่อง: {0} | เวอร์ชันบนเซิร์ฟเวอร์: {1}</value>
|
||||
<comment>{0} will be replaced by current version, {1} will be replaced by remote version</comment>
|
||||
</data>
|
||||
|
||||
<data name="UserInputSteam2FA" xml:space="preserve">
|
||||
<value>โปรดป้อนรหัส 2FA ของคุณจากแอปยืนยันตัวตน Steam ของคุณ: </value>
|
||||
<comment>Please note that this translation should end with space</comment>
|
||||
@@ -206,7 +203,6 @@ StackTrace:
|
||||
<value>โปรดป้อนรหัสผ่าน Steam ขอบคุณ: </value>
|
||||
<comment>Please note that this translation should end with space</comment>
|
||||
</data>
|
||||
|
||||
<data name="IPCReady" xml:space="preserve">
|
||||
<value>เซิร์ฟเวอร์ IPC พร้อมแล้ว!</value>
|
||||
</data>
|
||||
@@ -220,8 +216,6 @@ StackTrace:
|
||||
<value>ไม่พบบอตชื่อ {0}!</value>
|
||||
<comment>{0} will be replaced by bot's name query (string)</comment>
|
||||
</data>
|
||||
|
||||
|
||||
<data name="BotStatusIdlingList" xml:space="preserve">
|
||||
<value>บอตกำลังฟาร์มเกม: เหลือให้ฟาร์ม {0} จากทั้งหมด {1} เกม (การ์ด {2} ใบ) (อีก ~{3})</value>
|
||||
<comment>{0} will be replaced by list of the games (IDs, numbers), {1} will be replaced by total number of games to farm, {2} will be replaced by total number of cards to farm, {3} will be replaced by translated TimeSpan string (such as "1 day, 5 hours and 30 minutes")</comment>
|
||||
@@ -261,7 +255,6 @@ StackTrace:
|
||||
<data name="IdlingStopped" xml:space="preserve">
|
||||
<value>การฟาร์มหยุดแล้ว!</value>
|
||||
</data>
|
||||
|
||||
<data name="NothingToIdle" xml:space="preserve">
|
||||
<value>บัญชีนี้ไม่มีอะไรให้เราฟาร์มเลย!</value>
|
||||
</data>
|
||||
@@ -273,7 +266,6 @@ StackTrace:
|
||||
<value>กำลังฟาร์ม: {0}</value>
|
||||
<comment>{0} will be replaced by list of the games (IDs, numbers), separated by a comma</comment>
|
||||
</data>
|
||||
|
||||
<data name="StillIdling" xml:space="preserve">
|
||||
<value>ยังคงฟาร์ม: {0} ({1})</value>
|
||||
<comment>{0} will be replaced by game's ID (number), {1} will be replaced by game's name</comment>
|
||||
@@ -293,8 +285,6 @@ StackTrace:
|
||||
<data name="UnknownCommand" xml:space="preserve">
|
||||
<value>ไม่รู้จักคำสั่งนี้!</value>
|
||||
</data>
|
||||
|
||||
|
||||
<data name="BotAcceptingGift" xml:space="preserve">
|
||||
<value>กำลังยอมรับของขวัญ: {0}...</value>
|
||||
<comment>{0} will be replaced by giftID (number)</comment>
|
||||
@@ -316,7 +306,6 @@ StackTrace:
|
||||
<data name="BotAuthenticatorConverting" xml:space="preserve">
|
||||
<value>กำลังแปลง .maFile ให้เป็นฟอร์แมตสำหรับ ASF...</value>
|
||||
</data>
|
||||
|
||||
<data name="BotAuthenticatorToken" xml:space="preserve">
|
||||
<value>โทเคน 2FA: {0}</value>
|
||||
<comment>{0} will be replaced by generated 2FA token (string)</comment>
|
||||
@@ -342,8 +331,6 @@ StackTrace:
|
||||
<data name="BotDisconnecting" xml:space="preserve">
|
||||
<value>กำลังตัดการเชื่อมต่อ...</value>
|
||||
</data>
|
||||
|
||||
|
||||
<data name="BotLoggedOff" xml:space="preserve">
|
||||
<value>ออกจากระบบ Steam แล้ว: {0}</value>
|
||||
<comment>{0} will be replaced by logging off reason (string)</comment>
|
||||
@@ -355,18 +342,15 @@ StackTrace:
|
||||
<data name="BotLoggingIn" xml:space="preserve">
|
||||
<value>กำลังเข้าสู่ระบบ...</value>
|
||||
</data>
|
||||
|
||||
<data name="BotLootingFailed" xml:space="preserve">
|
||||
<value>ข้อเสนอแลกเปลี่ยนล้มเหลว!</value>
|
||||
</data>
|
||||
|
||||
<data name="BotLootingSuccess" xml:space="preserve">
|
||||
<value>ส่งข้อเสนอแลกเปลี่ยนสำเร็จ!</value>
|
||||
</data>
|
||||
<data name="BotSendingTradeToYourself" xml:space="preserve">
|
||||
<value>ไม่สามารถส่งข้อเสนอแลกเปลี่ยนให้ตัวเองได้!</value>
|
||||
</data>
|
||||
|
||||
<data name="BotNotConnected" xml:space="preserve">
|
||||
<value>อินสแตนซ์ของบอตตัวนี้ไม่ได้รับการเชื่อมต่อ!</value>
|
||||
</data>
|
||||
@@ -382,7 +366,6 @@ StackTrace:
|
||||
<value>แต้มคงเหลือ: {0}</value>
|
||||
<comment>{0} will be replaced by the points balance value (integer)</comment>
|
||||
</data>
|
||||
|
||||
<data name="BotReconnecting" xml:space="preserve">
|
||||
<value>กำลังเชื่อมต่อใหม่...</value>
|
||||
</data>
|
||||
@@ -434,34 +417,20 @@ StackTrace:
|
||||
<data name="BotConnectionLost" xml:space="preserve">
|
||||
<value>สูญเสียการเชื่อมต่อกับ Steam Network กำลังเชื่อมต่อใหม่...</value>
|
||||
</data>
|
||||
|
||||
|
||||
<data name="BotConnecting" xml:space="preserve">
|
||||
<value>กำลังเชื่อมต่อ...</value>
|
||||
</data>
|
||||
|
||||
<data name="BotStopping" xml:space="preserve">
|
||||
<value>กำลังหยุด...</value>
|
||||
</data>
|
||||
|
||||
|
||||
<data name="Initializing" xml:space="preserve">
|
||||
<value>กำลังเริ่ม {0}...</value>
|
||||
<comment>{0} will be replaced by service name that is being initialized</comment>
|
||||
</data>
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
<data name="BotVersion" xml:space="preserve">
|
||||
<value>{0} V{1}</value>
|
||||
<comment>{0} will be replaced by program's name (e.g. "ASF"), {1} will be replaced by program's version (e.g. "1.0.0.0"). This string typically has nothing to translate and you should leave it as it is, unless you need to change the format, e.g. in RTL languages.</comment>
|
||||
</data>
|
||||
|
||||
|
||||
|
||||
<data name="BotOwnedAlready" xml:space="preserve">
|
||||
<value>เป็นเจ้าของแล้ว: {0}</value>
|
||||
<comment>{0} will be replaced by game's ID (number), {1} will be replaced by game's name</comment>
|
||||
@@ -469,19 +438,14 @@ StackTrace:
|
||||
<data name="ErrorAccessDenied" xml:space="preserve">
|
||||
<value>ปฏิเสธการเข้าถึง!</value>
|
||||
</data>
|
||||
|
||||
<data name="BotStats" xml:space="preserve">
|
||||
<value>การใช้หน่วยความจําปัจจุบัน: {0} MB.
|
||||
เวลาทํางานของกระบวนการ: {1}</value>
|
||||
<comment>{0} will be replaced by number (in megabytes) of memory being used, {1} will be replaced by translated TimeSpan string (such as "25 minutes"). Please note that this string should include newlines for formatting.</comment>
|
||||
</data>
|
||||
|
||||
<data name="BotRefreshingPackagesData" xml:space="preserve">
|
||||
<value>กำลังรีเฟรชข้อมูลแพ็กเกจ…</value>
|
||||
</data>
|
||||
|
||||
|
||||
|
||||
<data name="TargetBotNotConnected" xml:space="preserve">
|
||||
<value>อินสแตนซ์ของบอตเป้าหมายไม่ได้รับการเชื่อมต่อ!</value>
|
||||
</data>
|
||||
@@ -496,13 +460,9 @@ StackTrace:
|
||||
<value>บอตมีเลเวล {0}</value>
|
||||
<comment>{0} will be replaced by bot's level</comment>
|
||||
</data>
|
||||
|
||||
|
||||
|
||||
<data name="ErrorAborted" xml:space="preserve">
|
||||
<value>ยกเลิกแล้ว!</value>
|
||||
</data>
|
||||
|
||||
<data name="PluginLoaded" xml:space="preserve">
|
||||
<value>{0} ถูกโหลดสำเร็จแล้ว!</value>
|
||||
<comment>{0} will be replaced by the name of the custom ASF plugin</comment>
|
||||
@@ -514,7 +474,6 @@ StackTrace:
|
||||
<data name="NothingFound" xml:space="preserve">
|
||||
<value>ไม่พบอะไรเลย!</value>
|
||||
</data>
|
||||
|
||||
<data name="PleaseWait" xml:space="preserve">
|
||||
<value>กรุณารอ...</value>
|
||||
</data>
|
||||
@@ -524,45 +483,24 @@ StackTrace:
|
||||
<data name="Executing" xml:space="preserve">
|
||||
<value>กำลังดำเนินการ...</value>
|
||||
</data>
|
||||
|
||||
|
||||
|
||||
<data name="BotHandledConfirmations" xml:space="preserve">
|
||||
<value>จัดการการยืนยันเป็นผลสำเร็จ {0} รายการ!</value>
|
||||
<comment>{0} will be replaced by number of confirmations</comment>
|
||||
</data>
|
||||
|
||||
<data name="UpdateCleanup" xml:space="preserve">
|
||||
<value>กำลังลบไฟล์เก่าหลังการอัปเดต...</value>
|
||||
</data>
|
||||
|
||||
|
||||
|
||||
|
||||
<data name="Result" xml:space="preserve">
|
||||
<value>ผลลัพธ์: {0}</value>
|
||||
<comment>{0} will be replaced by generic result of various functions that use this string</comment>
|
||||
</data>
|
||||
|
||||
|
||||
|
||||
<data name="BotIdlingSelectedGames" xml:space="preserve">
|
||||
<value>กำลังเล่นเกมที่เลือกไว้ {0}: {1}</value>
|
||||
<comment>{0} will be replaced by internal name of the config property (e.g. "GamesPlayedWhileIdle"), {1} will be replaced by comma-separated list of appIDs that user has chosen</comment>
|
||||
</data>
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
<data name="FetchingChecksumFromRemoteServer" xml:space="preserve">
|
||||
<value>กำลังดึงข้อมูล checksum จากเซิร์ฟเวอร์ระยะไกล...</value>
|
||||
</data>
|
||||
|
||||
|
||||
|
||||
|
||||
<data name="PatchingFiles" xml:space="preserve">
|
||||
<value>กำลังแพตช์ไฟล์ ASF…</value>
|
||||
</data>
|
||||
@@ -570,24 +508,4 @@ StackTrace:
|
||||
<value>โปรดกรอกคีย์รหัสลับของคุณ: </value>
|
||||
<comment>Please note that this translation should end with space</comment>
|
||||
</data>
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
</root>
|
||||
|
||||
@@ -800,4 +800,7 @@ Yığın Kaydı:
|
||||
<value>Veri Girişi: {0}</value>
|
||||
<comment>{0} will be replaced by text input from the user.</comment>
|
||||
</data>
|
||||
<data name="WarningNoSystemRequiredLinuxDependencies" xml:space="preserve">
|
||||
<value>--system-required seçeneğini belirttiniz, ancak işletim sisteminizde bu özelliğin çalışması için gerekli bağımlılıklar eksik. dbus'u yüklemeyi düşünün, ancak engellemenin düzgün çalışması gerekmiyorsa bu uyarıyı güvenle görmezden gelebilirsiniz.</value>
|
||||
</data>
|
||||
</root>
|
||||
|
||||
@@ -800,4 +800,11 @@
|
||||
<value>Input: {0}</value>
|
||||
<comment>{0} will be replaced by text input from the user.</comment>
|
||||
</data>
|
||||
<data name="WarningNoSystemRequiredLinuxDependencies" xml:space="preserve">
|
||||
<value>Ви оголосили --system-required, хоча у вашої ОС немає необхідних залежностей, щоб ця функція працювала. Розгляньте встановлення dbus, хоча також можна безпечно ігнорувати це попередження, якщо вам не потрібно гальмувати для належної роботи.</value>
|
||||
</data>
|
||||
<data name="WarningBotDatabaseComponentDecryptionFailed" xml:space="preserve">
|
||||
<value>Не вдалося розшифрувати компонент бази даних {0} . Це може бути нормально, якщо ви щойно змінили {1}вашого бота, ви більше не повинні бачити це попередження під час наступного запуску. В іншому випадку, слід дослідити та знайти точну причину невдачі.</value>
|
||||
<comment>{0} will be replaced by bot database component's name (string), {1} will be replaced by bot config component's name (string).</comment>
|
||||
</data>
|
||||
</root>
|
||||
|
||||
@@ -800,4 +800,11 @@
|
||||
<value>输入:{0}</value>
|
||||
<comment>{0} will be replaced by text input from the user.</comment>
|
||||
</data>
|
||||
<data name="WarningNoSystemRequiredLinuxDependencies" xml:space="preserve">
|
||||
<value>您已声明 --system-require,但您的操作系统缺少该功能所需的依赖条件。请考虑安装 dbus,但如果您不需要阻止系统休眠,也可以安全地忽略这个警告。</value>
|
||||
</data>
|
||||
<data name="WarningBotDatabaseComponentDecryptionFailed" xml:space="preserve">
|
||||
<value>解密 {0} 数据库组件失败。如果您刚刚更改了机器人的 {1},则可能是正常现象,并且下次运行时应该不会再看到这个警告。否则,您应该检查并找出失败的具体原因。</value>
|
||||
<comment>{0} will be replaced by bot database component's name (string), {1} will be replaced by bot config component's name (string).</comment>
|
||||
</data>
|
||||
</root>
|
||||
|
||||
@@ -87,7 +87,6 @@
|
||||
{2}</value>
|
||||
<comment>{0} will be replaced by function name, {1} will be replaced by exception message, {2} will be replaced by entire stack trace. Please note that this string should include newlines for formatting.</comment>
|
||||
</data>
|
||||
|
||||
<data name="ErrorFailingRequest" xml:space="preserve">
|
||||
<value>請求失敗:{0}</value>
|
||||
<comment>{0} will be replaced by URL of the request</comment>
|
||||
@@ -186,7 +185,6 @@
|
||||
<value>本地版本:{0} | 遠端版本:{1}</value>
|
||||
<comment>{0} will be replaced by current version, {1} will be replaced by remote version</comment>
|
||||
</data>
|
||||
|
||||
<data name="UserInputSteam2FA" xml:space="preserve">
|
||||
<value>請輸入您的 Steam 身份驗證器應用程式上顯示的雙重驗證代碼: </value>
|
||||
<comment>Please note that this translation should end with space</comment>
|
||||
@@ -578,7 +576,6 @@
|
||||
<value>當前機械人的等級為 {0}。</value>
|
||||
<comment>{0} will be replaced by bot's level</comment>
|
||||
</data>
|
||||
|
||||
<data name="ActivelyMatchingItems" xml:space="preserve">
|
||||
<value>正在匹配 Steam 物品,第 #{0} 輪……</value>
|
||||
<comment>{0} will be replaced by round number</comment>
|
||||
@@ -666,7 +663,6 @@
|
||||
<data name="ErrorConfigDirectoryNotFound" xml:space="preserve">
|
||||
<value>找不到配寘目錄,正在中止!</value>
|
||||
</data>
|
||||
|
||||
<data name="AutomaticFileMigration" xml:space="preserve">
|
||||
<value>{0} config file will be migrated to the latest syntax...</value>
|
||||
<comment>{0} will be replaced with the relative path to the affected config file</comment>
|
||||
@@ -675,7 +671,6 @@
|
||||
<value>您的加密金鑰太短。 我們建議使用長度至少為{0} 個位元組(字元) 的檔案。</value>
|
||||
<comment>{0} will be replaced by the number of bytes (characters) recommended</comment>
|
||||
</data>
|
||||
|
||||
<data name="WarningDefaultCryptKeyUsedForEncryption" xml:space="preserve">
|
||||
<value>您正在使用{1} 内容的{0} 設定,但您沒有提供自定義金鑰。 這完全破壞了保護,因為ASF被迫使用自己的(已知的)金鑰。 您應該提供一個自定義密碼金鑰,以利用此設定提供的安全優勢。</value>
|
||||
<comment>{0} will be replaced by the name of a particular setting (e.g. "AES"), {1} will be replaced by the name of the property (e.g. "SteamPassword")</comment>
|
||||
@@ -695,7 +690,6 @@
|
||||
<data name="ChecksumMissing" xml:space="preserve">
|
||||
<value>遠程服務器對我們要更新的版本一無所知。如果該版本是最近發佈的,則可能出現這種情況-作為額外的安全措施,拒絕立即繼續更新過程。</value>
|
||||
</data>
|
||||
|
||||
<data name="ChecksumWrong" xml:space="preserve">
|
||||
<value>遠程服務器已回復不同的校驗和,這可能表明下載已損壞或MITM攻擊,拒絕繼續更新過程!</value>
|
||||
</data>
|
||||
@@ -710,23 +704,4 @@
|
||||
<value>未禁止IP地址{0}!</value>
|
||||
<comment>{0} will be replaced by an IP address which was requested to be unbanned from using IPC</comment>
|
||||
</data>
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
</root>
|
||||
|
||||
@@ -800,4 +800,11 @@
|
||||
<value>輸入:{0}</value>
|
||||
<comment>{0} will be replaced by text input from the user.</comment>
|
||||
</data>
|
||||
<data name="WarningNoSystemRequiredLinuxDependencies" xml:space="preserve">
|
||||
<value>您宣告了 --system-required,但您的作業系統缺少該功能所需的相依套件。請考慮安裝 dbus。如果您不需要此功能,則可以直接忽略這個警告。</value>
|
||||
</data>
|
||||
<data name="WarningBotDatabaseComponentDecryptionFailed" xml:space="preserve">
|
||||
<value>無法解密資料庫 {0}。若您剛剛更改了 Bot 的 {1},可能是正常現象,在下次執行時就不會再看到這則警告。否則您應檢查並找出失敗的確切原因。</value>
|
||||
<comment>{0} will be replaced by bot database component's name (string), {1} will be replaced by bot config component's name (string).</comment>
|
||||
</data>
|
||||
</root>
|
||||
|
||||
@@ -512,9 +512,7 @@ internal static class Logging {
|
||||
return;
|
||||
}
|
||||
|
||||
foreach (LoggingRule loggingRule in LogManager.Configuration.LoggingRules.Where(static loggingRule => loggingRule.Targets.Any(static target => target is ColoredConsoleTarget or ConsoleTarget))) {
|
||||
ConsoleLoggingRules.Add(loggingRule);
|
||||
}
|
||||
ConsoleLoggingRules.UnionWith(LogManager.Configuration.LoggingRules.Where(static loggingRule => loggingRule.Targets.Any(static target => target is ColoredConsoleTarget or ConsoleTarget)));
|
||||
}
|
||||
|
||||
private static void InitializeTarget(LoggingConfiguration config, Target target) {
|
||||
|
||||
@@ -278,7 +278,7 @@ internal static class Program {
|
||||
return false;
|
||||
}
|
||||
|
||||
OS.CoreInit(Minimized, SystemRequired);
|
||||
await OS.CoreInit(Minimized, SystemRequired).ConfigureAwait(false);
|
||||
|
||||
Console.Title = SharedInfo.ProgramIdentifier;
|
||||
ASF.ArchiLogger.LogGenericInfo(SharedInfo.ProgramIdentifier);
|
||||
|
||||
@@ -580,10 +580,7 @@ public sealed class Bot : IAsyncDisposable, IDisposable {
|
||||
|
||||
query = botName.StartsWith("..", StringComparison.Ordinal) ? query.TakeWhile(bot => bot != firstBot) : query.SkipWhile(bot => bot != firstBot);
|
||||
|
||||
foreach (Bot bot in query) {
|
||||
result.Add(bot);
|
||||
}
|
||||
|
||||
result.UnionWith(query);
|
||||
result.Add(firstBot);
|
||||
|
||||
continue;
|
||||
@@ -592,10 +589,7 @@ public sealed class Bot : IAsyncDisposable, IDisposable {
|
||||
Bot? lastBot = GetBot(botRange[1]);
|
||||
|
||||
if ((lastBot != null) && (BotsComparer.Compare(firstBot.BotName, lastBot.BotName) <= 0)) {
|
||||
foreach (Bot bot in Bots.AsLinqThreadSafeEnumerable().OrderBy(static bot => bot.Key, BotsComparer).Select(static bot => bot.Value).SkipWhile(bot => bot != firstBot).TakeWhile(bot => bot != lastBot)) {
|
||||
result.Add(bot);
|
||||
}
|
||||
|
||||
result.UnionWith(Bots.AsLinqThreadSafeEnumerable().OrderBy(static bot => bot.Key, BotsComparer).Select(static bot => bot.Value).SkipWhile(bot => bot != firstBot).TakeWhile(bot => bot != lastBot));
|
||||
result.Add(lastBot);
|
||||
|
||||
continue;
|
||||
@@ -1321,8 +1315,6 @@ public sealed class Bot : IAsyncDisposable, IDisposable {
|
||||
return Bots.AsLinqThreadSafeEnumerable().OrderBy(static bot => bot.Key, BotsComparer).Select(static bot => bot.Value).FirstOrDefault();
|
||||
}
|
||||
|
||||
internal Task<HashSet<uint>?> GetMarketableAppIDs() => ArchiWebHandler.GetAppList();
|
||||
|
||||
internal async Task<Dictionary<uint, PackageData>?> GetPackagesData(IReadOnlyCollection<uint> packageIDs) {
|
||||
if ((packageIDs == null) || (packageIDs.Count == 0)) {
|
||||
throw new ArgumentNullException(nameof(packageIDs));
|
||||
@@ -2498,10 +2490,22 @@ public sealed class Bot : IAsyncDisposable, IDisposable {
|
||||
if (BotConfig.PasswordFormat.HasTransformation()) {
|
||||
if (!string.IsNullOrEmpty(accessTokenText)) {
|
||||
accessTokenText = await ArchiCryptoHelper.Decrypt(BotConfig.PasswordFormat, accessTokenText).ConfigureAwait(false);
|
||||
|
||||
if (string.IsNullOrEmpty(accessTokenText)) {
|
||||
BotDatabase.AccessToken = null;
|
||||
|
||||
ArchiLogger.LogGenericWarning(Strings.FormatWarningBotDatabaseComponentDecryptionFailed(nameof(BotDatabase.AccessToken), nameof(BotConfig.PasswordFormat)));
|
||||
}
|
||||
}
|
||||
|
||||
if (!string.IsNullOrEmpty(refreshTokenText)) {
|
||||
refreshTokenText = await ArchiCryptoHelper.Decrypt(BotConfig.PasswordFormat, refreshTokenText).ConfigureAwait(false);
|
||||
|
||||
if (string.IsNullOrEmpty(refreshTokenText)) {
|
||||
BotDatabase.RefreshToken = null;
|
||||
|
||||
ArchiLogger.LogGenericWarning(Strings.FormatWarningBotDatabaseComponentDecryptionFailed(nameof(BotDatabase.RefreshToken), nameof(BotConfig.PasswordFormat)));
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
|
||||
@@ -36,6 +36,7 @@ using System.Threading.Tasks;
|
||||
using AngleSharp.Dom;
|
||||
using ArchiSteamFarm.Collections;
|
||||
using ArchiSteamFarm.Core;
|
||||
using ArchiSteamFarm.Helpers;
|
||||
using ArchiSteamFarm.Localization;
|
||||
using ArchiSteamFarm.Plugins;
|
||||
using ArchiSteamFarm.Steam.Data;
|
||||
@@ -56,10 +57,12 @@ public sealed class CardsFarmer : IAsyncDisposable, IDisposable {
|
||||
private const byte HoursToIgnore = 1; // How many hours we ignore unreleased appIDs and don't bother checking them again
|
||||
|
||||
[PublicAPI]
|
||||
public static readonly FrozenSet<uint> SalesBlacklist = [267420, 303700, 335590, 368020, 425280, 480730, 566020, 639900, 762800, 876740, 991980, 1195670, 1343890, 1465680, 1658760, 1797760, 2021850, 2243720, 2459330, 2640280, 2861690, 2861720, 3558920];
|
||||
public static readonly FrozenSet<uint> SalesBlacklist = [267420, 303700, 335590, 368020, 425280, 480730, 566020, 639900, 762800, 876740, 991980, 1195670, 1343890, 1465680, 1658760, 1797760, 2021850, 2243720, 2459330, 2640280, 2861690, 2861720, 3558920, 3558940];
|
||||
|
||||
private static readonly ConcurrentDictionary<uint, DateTime> GloballyIgnoredAppIDs = new(); // Reserved for unreleased games
|
||||
|
||||
private static readonly ArchiCacheable<FrozenSet<uint>> MarketableAppIDs = new(ResolveMarketableAppIDs, TimeSpan.FromDays(1));
|
||||
|
||||
// Games that were confirmed to show false status on general badges page
|
||||
private static readonly FrozenSet<uint> UntrustedAppIDs = [440, 570, 730];
|
||||
|
||||
@@ -1383,6 +1386,18 @@ public sealed class CardsFarmer : IAsyncDisposable, IDisposable {
|
||||
return true;
|
||||
}
|
||||
|
||||
private static async Task<(bool Success, FrozenSet<uint>? Result)> ResolveMarketableAppIDs(CancellationToken cancellationToken) {
|
||||
Bot? bot = Bot.Bots?.Values.FirstOrDefault(static targetBot => targetBot.IsConnectedAndLoggedOn && !string.IsNullOrEmpty(targetBot.AccessToken));
|
||||
|
||||
if (bot == null) {
|
||||
return (false, null);
|
||||
}
|
||||
|
||||
HashSet<uint>? result = await bot.ArchiWebHandler.GetAppList().ConfigureAwait(false);
|
||||
|
||||
return (result?.Count > 0, result?.ToFrozenSet());
|
||||
}
|
||||
|
||||
private async Task<bool?> ShouldFarm(Game game) {
|
||||
ArgumentNullException.ThrowIfNull(game);
|
||||
|
||||
@@ -1467,10 +1482,10 @@ public sealed class CardsFarmer : IAsyncDisposable, IDisposable {
|
||||
break;
|
||||
case BotConfig.EFarmingOrder.MarketableAscending:
|
||||
case BotConfig.EFarmingOrder.MarketableDescending:
|
||||
HashSet<uint>? marketableAppIDs = await Bot.GetMarketableAppIDs().ConfigureAwait(false);
|
||||
(_, FrozenSet<uint>? marketableAppIDs) = await MarketableAppIDs.GetValue(ECacheFallback.SuccessPreviously).ConfigureAwait(false);
|
||||
|
||||
if (marketableAppIDs?.Count > 0) {
|
||||
HashSet<uint> marketableAppIDsCopy = marketableAppIDs;
|
||||
FrozenSet<uint> marketableAppIDsCopy = marketableAppIDs;
|
||||
|
||||
orderedGamesToFarm = farmingOrder switch {
|
||||
BotConfig.EFarmingOrder.MarketableAscending => orderedGamesToFarm.ThenBy(game => marketableAppIDsCopy.Contains(game.AppID)),
|
||||
|
||||
@@ -170,9 +170,7 @@ public sealed class Trading : IDisposable {
|
||||
}
|
||||
|
||||
// Now we can add items that we're supposed to receive, this one doesn't require advanced amounts logic since we can just add items regardless
|
||||
foreach (Asset itemToReceive in itemsToReceive) {
|
||||
inventoryState.Add(itemToReceive);
|
||||
}
|
||||
inventoryState.UnionWith(itemsToReceive);
|
||||
|
||||
// Now we can get final sets state of our inventory after the exchange
|
||||
Dictionary<(uint RealAppID, EAssetType Type, EAssetRarity Rarity), List<uint>> finalSets = GetInventorySets(inventoryState);
|
||||
|
||||
@@ -58,7 +58,7 @@ public sealed class ArchiWebHandler : IDisposable {
|
||||
private const byte MaxTradeOfferMessageLength = 128;
|
||||
private const byte MinimumSessionValidityInSeconds = 10;
|
||||
private const byte SessionIDLength = 24; // For maximum compatibility, should be divisible by 2 and match the length of "sessionid" property that Steam uses across their websites
|
||||
private const string SteamAppsService = "ISteamApps";
|
||||
private const string SteamStoreService = "IStoreService";
|
||||
|
||||
[PublicAPI]
|
||||
public static Uri SteamCheckoutURL => new("https://checkout.steampowered.com");
|
||||
@@ -1640,62 +1640,88 @@ public sealed class ArchiWebHandler : IDisposable {
|
||||
}
|
||||
|
||||
internal async Task<HashSet<uint>?> GetAppList() {
|
||||
string? accessToken = Bot.AccessToken;
|
||||
|
||||
if (string.IsNullOrEmpty(accessToken)) {
|
||||
return null;
|
||||
}
|
||||
|
||||
const string endpoint = "GetAppList";
|
||||
HttpMethod method = HttpMethod.Get;
|
||||
|
||||
using WebAPI.AsyncInterface steamAppsService = Bot.SteamConfiguration.GetAsyncWebAPIInterface(SteamAppsService);
|
||||
// Extra entry for last_appid that will end up here for sure
|
||||
Dictionary<string, object?> arguments = new(3, StringComparer.Ordinal) {
|
||||
{ "access_token", accessToken },
|
||||
{ "max_results", 50000 }
|
||||
};
|
||||
|
||||
uint previousLastAppID = 0;
|
||||
|
||||
HashSet<uint>? result = null;
|
||||
|
||||
using WebAPI.AsyncInterface steamAppsService = Bot.SteamConfiguration.GetAsyncWebAPIInterface(SteamStoreService);
|
||||
|
||||
steamAppsService.Timeout = WebBrowser.Timeout;
|
||||
|
||||
KeyValue? response = null;
|
||||
while (true) {
|
||||
KeyValue? response = null;
|
||||
|
||||
for (byte i = 0; (i < WebBrowser.MaxTries) && (response == null); i++) {
|
||||
if ((i > 0) && (WebLimiterDelay > 0)) {
|
||||
await Task.Delay(WebLimiterDelay).ConfigureAwait(false);
|
||||
for (byte i = 0; (i < WebBrowser.MaxTries) && (response == null); i++) {
|
||||
if ((i > 0) && (WebLimiterDelay > 0)) {
|
||||
await Task.Delay(WebLimiterDelay).ConfigureAwait(false);
|
||||
}
|
||||
|
||||
if (Debugging.IsUserDebugging) {
|
||||
Bot.ArchiLogger.LogGenericDebug($"{method} {Bot.SteamConfiguration.WebAPIBaseAddress}{SteamStoreService}/{endpoint}");
|
||||
}
|
||||
|
||||
try {
|
||||
response = await WebLimitRequest(
|
||||
Bot.SteamConfiguration.WebAPIBaseAddress,
|
||||
|
||||
// ReSharper disable once AccessToDisposedClosure
|
||||
async () => await steamAppsService.CallAsync(method, endpoint, args: arguments).ConfigureAwait(false)
|
||||
).ConfigureAwait(false);
|
||||
} catch (TaskCanceledException e) {
|
||||
Bot.ArchiLogger.LogGenericDebuggingException(e);
|
||||
} catch (Exception e) {
|
||||
Bot.ArchiLogger.LogGenericWarningException(e);
|
||||
}
|
||||
}
|
||||
|
||||
if (Debugging.IsUserDebugging) {
|
||||
Bot.ArchiLogger.LogGenericDebug($"{method} {Bot.SteamConfiguration.WebAPIBaseAddress}{SteamAppsService}/{endpoint}");
|
||||
}
|
||||
|
||||
try {
|
||||
response = await WebLimitRequest(
|
||||
Bot.SteamConfiguration.WebAPIBaseAddress,
|
||||
|
||||
// ReSharper disable once AccessToDisposedClosure
|
||||
async () => await steamAppsService.CallAsync(method, endpoint, 2).ConfigureAwait(false)
|
||||
).ConfigureAwait(false);
|
||||
} catch (TaskCanceledException e) {
|
||||
Bot.ArchiLogger.LogGenericDebuggingException(e);
|
||||
} catch (Exception e) {
|
||||
Bot.ArchiLogger.LogGenericWarningException(e);
|
||||
}
|
||||
}
|
||||
|
||||
if (response == null) {
|
||||
Bot.ArchiLogger.LogGenericWarning(Strings.FormatErrorRequestFailedTooManyTimes(WebBrowser.MaxTries));
|
||||
|
||||
return null;
|
||||
}
|
||||
|
||||
List<KeyValue> apps = response["apps"].Children;
|
||||
|
||||
if (apps.Count == 0) {
|
||||
Bot.ArchiLogger.LogGenericWarning(Strings.FormatErrorIsEmpty(nameof(apps)));
|
||||
|
||||
return null;
|
||||
}
|
||||
|
||||
HashSet<uint> result = new(apps.Count);
|
||||
|
||||
foreach (uint appID in apps.Select(static app => app["appid"].AsUnsignedInteger())) {
|
||||
if (appID == 0) {
|
||||
Bot.ArchiLogger.LogNullError(appID);
|
||||
if (response == null) {
|
||||
Bot.ArchiLogger.LogGenericWarning(Strings.FormatErrorRequestFailedTooManyTimes(WebBrowser.MaxTries));
|
||||
|
||||
return null;
|
||||
}
|
||||
|
||||
result.Add(appID);
|
||||
List<KeyValue> apps = response["apps"].Children;
|
||||
|
||||
if (apps.Count == 0) {
|
||||
Bot.ArchiLogger.LogGenericWarning(Strings.FormatErrorIsEmpty(nameof(apps)));
|
||||
|
||||
return null;
|
||||
}
|
||||
|
||||
result ??= new HashSet<uint>(apps.Count);
|
||||
|
||||
foreach (uint appID in apps.Select(static app => app["appid"].AsUnsignedInteger())) {
|
||||
if (appID == 0) {
|
||||
Bot.ArchiLogger.LogNullError(appID);
|
||||
|
||||
return null;
|
||||
}
|
||||
|
||||
result.Add(appID);
|
||||
}
|
||||
|
||||
uint lastAppID = response["last_appid"].AsUnsignedInteger();
|
||||
|
||||
if ((lastAppID == 0) || (lastAppID <= previousLastAppID)) {
|
||||
break;
|
||||
}
|
||||
|
||||
arguments["last_appid"] = previousLastAppID = lastAppID;
|
||||
}
|
||||
|
||||
return result;
|
||||
|
||||
@@ -27,6 +27,7 @@ using SteamKit2;
|
||||
|
||||
namespace ArchiSteamFarm.Steam.Security;
|
||||
|
||||
#pragma warning disable CA1032 // This type is internal and we don't require additional constructors
|
||||
internal sealed class BotAuthenticationException : Exception {
|
||||
internal readonly EResult Result;
|
||||
|
||||
@@ -38,3 +39,4 @@ internal sealed class BotAuthenticationException : Exception {
|
||||
Result = result;
|
||||
}
|
||||
}
|
||||
#pragma warning restore CA1032 // This type is internal and we don't require additional constructors
|
||||
|
||||
@@ -1,6 +1,6 @@
|
||||
<Project>
|
||||
<PropertyGroup>
|
||||
<Version>6.3.1.0</Version>
|
||||
<Version>6.3.1.7</Version>
|
||||
</PropertyGroup>
|
||||
|
||||
<PropertyGroup>
|
||||
|
||||
@@ -5,7 +5,7 @@
|
||||
<PackageVersion Include="Humanizer" Version="3.0.1" />
|
||||
<PackageVersion Include="JetBrains.Annotations.Sources" Version="2025.2.4" />
|
||||
<PackageVersion Include="Markdig.Signed" Version="0.44.0" />
|
||||
<PackageVersion Include="Microsoft.AspNetCore.OpenApi" Version="10.0.0" />
|
||||
<PackageVersion Include="Microsoft.AspNetCore.OpenApi" Version="10.0.1" />
|
||||
<PackageVersion Include="Microsoft.CodeAnalysis.ResxSourceGenerator" Version="5.0.0-1.25277.114" />
|
||||
<PackageVersion Include="Microsoft.IdentityModel.JsonWebTokens" Version="8.15.0" />
|
||||
<PackageVersion Include="MSTest" Version="4.0.2" />
|
||||
@@ -16,10 +16,11 @@
|
||||
<PackageVersion Include="OpenTelemetry.Instrumentation.AspNetCore" Version="1.14.0" />
|
||||
<PackageVersion Include="OpenTelemetry.Instrumentation.Http" Version="1.14.0" />
|
||||
<PackageVersion Include="OpenTelemetry.Instrumentation.Runtime" Version="1.14.0" />
|
||||
<PackageVersion Include="Scalar.AspNetCore" Version="2.11.1" />
|
||||
<PackageVersion Include="Scalar.AspNetCore" Version="2.11.10" />
|
||||
<PackageVersion Include="SteamKit2" Version="3.3.1" />
|
||||
<PackageVersion Include="System.Composition" Version="10.0.0" />
|
||||
<PackageVersion Include="System.Composition.AttributedModel" Version="10.0.0" />
|
||||
<PackageVersion Include="System.Security.Cryptography.ProtectedData" Version="10.0.0" />
|
||||
<PackageVersion Include="System.Composition" Version="10.0.1" />
|
||||
<PackageVersion Include="System.Composition.AttributedModel" Version="10.0.1" />
|
||||
<PackageVersion Include="System.Security.Cryptography.ProtectedData" Version="10.0.1" />
|
||||
<PackageVersion Include="Tmds.DBus.Protocol" Version="0.23.0" />
|
||||
</ItemGroup>
|
||||
</Project>
|
||||
|
||||
@@ -114,4 +114,4 @@ EOF
|
||||
WORKDIR /app
|
||||
VOLUME ["/app/config", "/app/logs"]
|
||||
HEALTHCHECK CMD ["pidof", "-q", "dotnet"]
|
||||
ENTRYPOINT ["ArchiSteamFarm", "--no-restart", "--system-required"]
|
||||
ENTRYPOINT ["ArchiSteamFarm", "--no-restart"]
|
||||
|
||||
@@ -114,4 +114,4 @@ EOF
|
||||
WORKDIR /app
|
||||
VOLUME ["/app/config", "/app/logs"]
|
||||
HEALTHCHECK CMD ["pidof", "-q", "ArchiSteamFarm"]
|
||||
ENTRYPOINT ["ArchiSteamFarm", "--no-restart", "--system-required"]
|
||||
ENTRYPOINT ["ArchiSteamFarm", "--no-restart"]
|
||||
|
||||
2
wiki
2
wiki
Submodule wiki updated: b3abf46cc2...e7b3b88864
Reference in New Issue
Block a user