ASF V3.4 with ASF UI (#906)

* Add ASF UI as dependency

* Correct CIs

* Misc

* Misc

* Another attempt of fixing travis

* And another one

* Test monmon improvements

* Test

* Another test

* More travis tests

* And one more

* Another test

* More tests

* More tests

* More tests

* Final code

* Use deploy script for ASF UI

* Misc

* Kill obsolete code and bump version

* Delete old asf-ui

* Add new ASF-ui

* Add UI.html
This commit is contained in:
Łukasz Domeradzki 2018-09-23 01:52:19 +02:00 committed by GitHub
parent b342b31298
commit d0f32c8250
No known key found for this signature in database
GPG key ID: 4AEE18F83AFDEB23
56 changed files with 81 additions and 5954 deletions

3
.gitmodules vendored
View file

@ -1,3 +1,6 @@
[submodule "ASF-ui"]
path = ASF-ui
url = https://github.com/JustArchiNET/ASF-ui
[submodule "ASF-WebConfigGenerator"]
path = ASF-WebConfigGenerator
url = https://github.com/JustArchiNET/ASF-WebConfigGenerator

View file

@ -20,7 +20,6 @@ env:
- DOTNET_SKIP_FIRST_TIME_EXPERIENCE: 1
- NET_CORE_VERSION: netcoreapp2.1
- VARIANTS="generic linux-arm linux-x64 osx-x64 win-x64" # NOTE: When modifying variants, don't forget to update ASF_VARIANT definitions in SharedInfo.cs!
before_script:
- |
set -eu
@ -35,6 +34,19 @@ script:
- |
set -eu
if [ "$TRAVIS_OS_NAME" = "osx" ]; then
set +eu # This is needed to run below npm block on OSX
fi
cd ASF-ui
npm i --no-progress
npm run-script deploy --no-progress
cd ..
if [ "$TRAVIS_OS_NAME" = "osx" ]; then
set -eu # We no longer need +eu on OSX
fi
dotnet build ArchiSteamFarm -c "$CONFIGURATION" -f "$NET_CORE_VERSION" -o 'out/source' /nologo
dotnet test ArchiSteamFarm.Tests -c "$CONFIGURATION" -f "$NET_CORE_VERSION" -o 'out/source' /nologo

1
ASF-ui Submodule

@ -0,0 +1 @@
Subproject commit 3410b5d4c9bf4dfc7f28bacefcaebb051d130e88

View file

@ -2,7 +2,7 @@
<PropertyGroup>
<ApplicationIcon>ASF.ico</ApplicationIcon>
<AssemblyVersion>3.3.1.0</AssemblyVersion>
<AssemblyVersion>3.4.0.0</AssemblyVersion>
<Authors>JustArchi</Authors>
<Company>JustArchi</Company>
<ConcurrentGarbageCollection>true</ConcurrentGarbageCollection>
@ -10,7 +10,7 @@
<DefaultItemExcludes>$(DefaultItemExcludes);debug/**;out/**</DefaultItemExcludes>
<Description>ASF is an application that allows you to farm steam cards using multiple steam accounts simultaneously.</Description>
<ErrorReport>none</ErrorReport>
<FileVersion>3.3.1.0</FileVersion>
<FileVersion>3.4.0.0</FileVersion>
<LangVersion>latest</LangVersion>
<NoWarn />
<OutputType>Exe</OutputType>
@ -102,6 +102,9 @@
<None Update="ConfigGenerator.html">
<CopyToOutputDirectory>PreserveNewest</CopyToOutputDirectory>
</None>
<None Update="UI.html">
<CopyToOutputDirectory>PreserveNewest</CopyToOutputDirectory>
</None>
<None Update="config\ASF.json">
<CopyToOutputDirectory>PreserveNewest</CopyToOutputDirectory>
</None>
@ -111,7 +114,8 @@
<None Update="config\minimal.json">
<CopyToOutputDirectory>PreserveNewest</CopyToOutputDirectory>
</None>
<Content Include="www\**" Exclude="**\README.md">
<Content Include="..\ASF-ui\dist\**\*.*" Exclude="**\README.md">
<Link>www\%(RecursiveDir)%(Filename)%(Extension)</Link>
<CopyToOutputDirectory>PreserveNewest</CopyToOutputDirectory>
</Content>
</ItemGroup>

View file

@ -1,94 +0,0 @@
// _ _ _ ____ _ _____
// / \ _ __ ___ | |__ (_)/ ___| | |_ ___ __ _ _ __ ___ | ___|__ _ _ __ _ __ ___
// / _ \ | '__|/ __|| '_ \ | |\___ \ | __|/ _ \ / _` || '_ ` _ \ | |_ / _` || '__|| '_ ` _ \
// / ___ \ | | | (__ | | | || | ___) || |_| __/| (_| || | | | | || _|| (_| || | | | | | | |
// /_/ \_\|_| \___||_| |_||_||____/ \__|\___| \__,_||_| |_| |_||_| \__,_||_| |_| |_| |_|
//
// Copyright 2015-2018 Łukasz "JustArchi" Domeradzki
// Contact: JustArchi@JustArchi.net
//
// Licensed under the Apache License, Version 2.0 (the "License");
// you may not use this file except in compliance with the License.
// You may obtain a copy of the License at
//
// http://www.apache.org/licenses/LICENSE-2.0
//
// Unless required by applicable law or agreed to in writing, software
// distributed under the License is distributed on an "AS IS" BASIS,
// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
// See the License for the specific language governing permissions and
// limitations under the License.
using System.Collections.Generic;
using System.Collections.Specialized;
using System.Linq;
using System.Threading.Tasks;
using ArchiSteamFarm.IPC.Requests;
using ArchiSteamFarm.IPC.Responses;
using ArchiSteamFarm.Localization;
using Microsoft.AspNetCore.Mvc;
namespace ArchiSteamFarm.IPC.Controllers.Api {
[ApiController]
[Route("Api/GamesToRedeemInBackground")]
public sealed class GamesToRedeemInBackgroundController : ControllerBase {
[HttpDelete("{botNames:required}")]
public async Task<ActionResult<GenericResponse>> GamesToRedeemInBackgroundDelete(string botNames) {
if (string.IsNullOrEmpty(botNames)) {
ASF.ArchiLogger.LogNullError(nameof(botNames));
return BadRequest(new GenericResponse(false, string.Format(Strings.ErrorIsEmpty, nameof(botNames))));
}
HashSet<Bot> bots = Bot.GetBots(botNames);
if ((bots == null) || (bots.Count == 0)) {
return BadRequest(new GenericResponse(false, string.Format(Strings.BotNotFound, botNames)));
}
IList<bool> results = await Utilities.InParallel(bots.Select(bot => Task.Run(bot.DeleteRedeemedKeysFiles))).ConfigureAwait(false);
return Ok(results.All(result => result) ? new GenericResponse(true) : new GenericResponse(false, Strings.WarningFailed));
}
[HttpGet("{botNames:required}")]
public async Task<ActionResult<GenericResponse<Dictionary<string, GamesToRedeemInBackgroundResponse>>>> GamesToRedeemInBackgroundGet(string botNames) {
if (string.IsNullOrEmpty(botNames)) {
ASF.ArchiLogger.LogNullError(nameof(botNames));
return BadRequest(new GenericResponse<Dictionary<string, GamesToRedeemInBackgroundResponse>>(false, string.Format(Strings.ErrorIsEmpty, nameof(botNames))));
}
HashSet<Bot> bots = Bot.GetBots(botNames);
if ((bots == null) || (bots.Count == 0)) {
return BadRequest(new GenericResponse<Dictionary<string, GamesToRedeemInBackgroundResponse>>(false, string.Format(Strings.BotNotFound, botNames)));
}
IList<(Dictionary<string, string> UnusedKeys, Dictionary<string, string> UsedKeys)> results = await Utilities.InParallel(bots.Select(bot => bot.GetUsedAndUnusedKeys())).ConfigureAwait(false);
Dictionary<string, GamesToRedeemInBackgroundResponse> result = new Dictionary<string, GamesToRedeemInBackgroundResponse>();
foreach (Bot bot in bots) {
(Dictionary<string, string> unusedKeys, Dictionary<string, string> usedKeys) = results[result.Count];
result[bot.BotName] = new GamesToRedeemInBackgroundResponse(unusedKeys, usedKeys);
}
return Ok(new GenericResponse<Dictionary<string, GamesToRedeemInBackgroundResponse>>(result));
}
[HttpPost("{botName:required}")]
public async Task<ActionResult<GenericResponse<OrderedDictionary>>> GamesToRedeemInBackgroundPost(string botName, [FromBody] GamesToRedeemInBackgroundRequest request) {
if (string.IsNullOrEmpty(botName) || (request == null)) {
ASF.ArchiLogger.LogNullError(nameof(botName) + " || " + nameof(request));
return BadRequest(new GenericResponse<OrderedDictionary>(false, string.Format(Strings.ErrorIsEmpty, nameof(botName) + " || " + nameof(request))));
}
if (request.GamesToRedeemInBackground.Count == 0) {
return BadRequest(new GenericResponse<OrderedDictionary>(false, string.Format(Strings.ErrorIsEmpty, nameof(request.GamesToRedeemInBackground))));
}
if (!Bot.Bots.TryGetValue(botName, out Bot bot)) {
return BadRequest(new GenericResponse<OrderedDictionary>(false, string.Format(Strings.BotNotFound, botName)));
}
bool result = await bot.ValidateAndAddGamesToRedeemInBackground(request.GamesToRedeemInBackground).ConfigureAwait(false);
return Ok(new GenericResponse<OrderedDictionary>(result, request.GamesToRedeemInBackground));
}
}
}

View file

@ -34,7 +34,6 @@ using Newtonsoft.Json;
namespace ArchiSteamFarm.IPC.Controllers.Api {
[ApiController]
[Route("Api/NLog")]
[Route("Api/Log")]
public sealed class NLogController : ControllerBase {
private static readonly ConcurrentDictionary<WebSocket, SemaphoreSlim> ActiveLogWebSockets = new ConcurrentDictionary<WebSocket, SemaphoreSlim>();

9
ArchiSteamFarm/UI.html Normal file
View file

@ -0,0 +1,9 @@
<!DOCTYPE html>
<html>
<head>
<title>ASF UI</title>
<meta http-equiv="refresh" content="0; url=http://127.0.0.1:1242">
</head>
<body>
</body>
</html>

File diff suppressed because one or more lines are too long

File diff suppressed because one or more lines are too long

View file

@ -1,233 +0,0 @@
.box-content-log {
font-family: monospace, monospace;
color: rgb(255, 255, 255);
font-size: 14px;
background-color: #000000;
width: auto;
height: 400px;
padding: 6px 12px;
white-space: pre-line;
border-color: rgb(221, 221, 221);
border-style: solid;
border-width: 1px;
overflow-y: auto;
overflow-x: hidden;
}
.box-content-commands {
width: auto;
height: 400px;
padding: 6px 12px;
white-space: pre-line;
border-color: rgb(221, 221, 221);
border-style: solid;
border-width: 1px;
overflow-y: auto;
overflow-x: hidden;
font-family: monospace, monospace;
color: rgb(255, 255, 255);
font-size: 14px;
background-color: #000000;
}
.bg-gray {
color: rgb(255, 255, 255);
background-color: #bfc3cb !important;
}
#commandSent {
font-family: monospace, monospace;
font-size: 12px;
cursor: default;
}
button.bot-stopped {
color: red;
}
button.bot-stopped:hover {
color: green;
}
button.bot-started:hover {
color: red;
}
button.bot-paused {
color: orange;
}
button.bot-paused:hover {
color: green;
}
button.bot-resumed:hover {
color: orange;
}
.botHeader {
padding: 3px;
}
.botTitle {
padding-left: 5px;
}
.botHeader > .botTools {
top: 2px;
}
.bots-info-box-icon {
height: 64px;
width: 64px;
line-height: 64px;
font-size: 35px;
}
.bot-info-box {
min-height: 64px;
}
.bot-info-box-content {
margin-left: 64px;
}
.nav-tabs-custom > .nav-tabs > li {
margin-right: 0px;
}
.info-overview {
cursor: default;
}
@media (max-width: 768px) {
.control-sidebar {
padding-top: 50px;
}
}
@media (max-width: 767px) {
.control-sidebar {
padding-top: 100px;
}
}
.btn-badge {
width: 18px;
height: 18px;
text-align: center;
padding: 6px 0;
font-size: 12px;
line-height: 1.42;
border-radius: .25em;
}
.btn-badge-active {
border-color: white;
}
.box .overlay, .overlay-wrapper .overlay {
background: none;
position: absolute;
top: 50%;
left: 50%;
margin-left: -15px;
margin-top: -15px;
font-size: 30px
}
.box .overlay, .overlay-wrapper .overlay .bot-box-loading {
font-size: 20px
}
.main-header .sidebar-toggle:before {
content: none;
}
.form-group-config {
margin-bottom: 10px;
}
::-webkit-scrollbar {
width: 10px;
height: 10px;
background-color: #333;
}
::-webkit-scrollbar-thumb {
-webkit-border-radius: 2px;
border-radius: 2px;
background: rgb(167, 167, 167);
}
#txtAddKeys,
#txtUnusedKeys,
#txtUsedKeys {
width: 100%;
height: 100px;
font-size: 18px;
resize: vertical;
}
@media (min-width: 1200px) {
.swal-wide {
width: 700px !important;
}
#txtAddKeys,
#txtUnusedKeys,
#txtUsedKeys {
height: 250px !important;
}
}
.sidebar-menu li.header {
text-transform: uppercase;
}
.lockscreen-image{
left:-5px
}
.language-item {
padding: 0.6rem;
}
.dropdown-language {
background: #222d32 !important;
border-color: #222d32 !important;
}
.scrollable-menu {
height: auto;
max-height: 220px;
overflow-x: hidden;
}
.toggle.ios, .toggle-on.ios, .toggle-off.ios, .toggle-handle {
border-radius: 20px;
}
.toggle-on {
color: #3d9970 !important;
}
.li-btn {
width: 100% !important;
}
.li-toggle {
padding: 5px 10px;
}
.dropdown-menu-toggle {
min-width: 140px !important;
}
.single-btn {
vertical-align: -webkit-baseline-middle;
}
[class^="games-carousel-"] .game-box:not(:first-child):not(.slick-slide){
display: none;
}

Binary file not shown.

Before

Width:  |  Height:  |  Size: 15 KiB

Binary file not shown.

Before

Width:  |  Height:  |  Size: 6.5 KiB

View file

@ -1,157 +0,0 @@
<!DOCTYPE html>
<html>
<head>
<title data-i18n="auth-title">ASF | Authentication</title>
<meta charset="utf-8">
<meta http-equiv="X-UA-Compatible" content="IE=edge,chrome=1">
<meta content="width=device-width, initial-scale=1, maximum-scale=1, user-scalable=no" name="viewport">
<script defer src="https://use.fontawesome.com/releases/v5.1.0/js/all.js"></script> <!--Change to cdnjs once available-->
<link rel="icon" href="img/favicon.png" type="image/png">
<link rel="shortcut icon" href="img/favicon.ico" type="img/x-icon">
<link rel="stylesheet" href="https://cdnjs.cloudflare.com/ajax/libs/twitter-bootstrap/3.3.7/css/bootstrap.min.css">
<link rel="stylesheet" href="https://cdnjs.cloudflare.com/ajax/libs/bootstrap-sweetalert/1.0.1/sweetalert.min.css">
<link rel="stylesheet" href="https://cdnjs.cloudflare.com/ajax/libs/admin-lte/2.4.2/css/AdminLTE.min.css">
<link rel="stylesheet" href="https://fonts.googleapis.com/css?family=Source+Sans+Pro:300,400,600,700,300italic,400italic,600italic">
<script src="https://cdnjs.cloudflare.com/ajax/libs/jquery/3.3.1/jquery.min.js"></script>
<script src="https://cdnjs.cloudflare.com/ajax/libs/jquery.i18n/1.0.4/jquery.i18n.min.js"></script>
<script src="https://cdnjs.cloudflare.com/ajax/libs/jquery.i18n/1.0.4/jquery.i18n.messagestore.min.js"></script>
<script src="https://cdnjs.cloudflare.com/ajax/libs/jquery.i18n/1.0.4/jquery.i18n.fallbacks.min.js"></script>
<script src="https://cdnjs.cloudflare.com/ajax/libs/jquery.i18n/1.0.4/jquery.i18n.language.min.js"></script>
<script src="https://cdnjs.cloudflare.com/ajax/libs/jquery.i18n/1.0.4/jquery.i18n.parser.min.js"></script>
<script src="https://cdnjs.cloudflare.com/ajax/libs/jquery.i18n/1.0.4/jquery.i18n.emitter.min.js"></script>
<script src="https://cdnjs.cloudflare.com/ajax/libs/jquery.i18n/1.0.4/jquery.i18n.emitter.bidi.min.js"></script>
<script src="js/utils.js"></script>
<script src="js/i18n.js"></script>
<link rel="stylesheet" href="css/app.css">
<link rel="stylesheet" href="css/_nightmode.min.css">
</head>
<body class="hold-transition lockscreen">
<div class="lockscreen-wrapper">
<div class="lockscreen-logo">
<a href="index.html"><b>Archi</b>SteamFarm</a>
</div>
<div class="lockscreen-name" data-i18n="auth-ipc-header">IPC password required</div>
<div class="lockscreen-item">
<div class="lockscreen-image">
<img src="img/favicon.png" alt="ASF">
</div>
<form class="lockscreen-credentials">
<div class="input-group">
<input type="password" id="IPCPassword" class="form-control" data-i18n="placeholder-auth" placeholder="Type your password...">
<div class="input-group-btn">
<button type="button" id="TryToAuth" class="btn"><i class="fa fa-arrow-right text-muted"></i></button>
</div>
</div>
</form>
</div>
<div class="help-block text-center">
<span data-i18n="auth-ipc-text">Please enter the correct IPC password</span>
</div>
</div>
<script src="https://cdnjs.cloudflare.com/ajax/libs/twitter-bootstrap/3.3.7/js/bootstrap.min.js"></script>
<script src="https://cdnjs.cloudflare.com/ajax/libs/bootstrap-sweetalert/1.0.1/sweetalert.min.js"></script>
<script src="js/adminlte.min.js"></script>
<script>
$(function () {
'use strict';
var tmpIsAuthorized = get('IsAuthorized'),
tmpLastPage = get('CurrentPage'),
tmpNightmodeState = get('nightmodeState'),
redirectPage = 'pages/commands.html';
if (tmpNightmodeState === 'nightmode') $('html').addClass('nightmode');
if (tmpLastPage) {
redirectPage = tmpLastPage;
}
if (tmpIsAuthorized === 'true') {
window.location.replace(redirectPage);
} else {
$.ajax({
url: '/Api/ASF',
type: 'GET',
statusCode: {
401: function () {
store('IsAuthorized', false);
store('IPCPassword', '');
},
403: function () {
store('IsAuthorized', false);
store('IPCPassword', '');
$('.lockscreen-name, .lockscreen-item').remove();
var res = $.i18n('auth-ipc-403');
$('.help-block').text(res);
},
200: function () {
store('IsAuthorized', true);
window.location.replace(redirectPage);
}
}
});
}
$(document).keypress(function (e) {
var keyCode = e.keyCode || e.which;
if (keyCode == 13) {
e.preventDefault();
$('#TryToAuth').click();
}
});
$('#TryToAuth').click(function () {
var newPwd = $('#IPCPassword').val();
if (newPwd === false) return false;
if (newPwd === '') {
swal({
title: $.i18n('global-error-title'),
text: $.i18n('global-error-invalid-pw'),
type: 'error'
}, function () { swal.close(); });
return false;
}
$.ajax({
url: '/Api/ASF',
type: 'GET',
beforeSend: function (jqXHR) {
jqXHR.setRequestHeader('Authentication', newPwd);
},
statusCode: {
401: function () {
store('IsAuthorized', false);
swal({
title: $.i18n('global-error-title'),
text: $.i18n('auth-ipc-pw-wrong'),
type: 'error'
}, function () { swal.close(); });
},
403: function () {
store('IsAuthorized', false);
$('.lockscreen-name, .lockscreen-item').remove();
$('.help-block').text($.i18n('auth-ipc-403'));
},
200: function () {
store('IsAuthorized', true);
store('IPCPassword', newPwd);
swal({
title: $.i18n('global-success-title'),
text: $.i18n('auth-ipc-pw-saved'),
type: 'success'
}, function () { window.location.replace(redirectPage); });
}
}
});
});
});
</script>
</body>
</html>

File diff suppressed because one or more lines are too long

View file

@ -1,956 +0,0 @@
//{#region Setup
const tmpIPCPassword = get('IPCPassword'),
vGUI = '0.4';
if (tmpIPCPassword) {
$.ajaxSetup({
beforeSend: function (jqXHR) {
jqXHR.setRequestHeader('Authentication', tmpIPCPassword);
}
});
}
$.ajaxSetup({
statusCode: {
401: function () {
store('IPCPassword', '');
store('IsAuthorized', false);
window.location.replace('../index.html');
},
403: function () {
store('IPCPassword', '');
store('IsAuthorized', false);
window.location.replace('../index.html');
}
}
});
//}#endregion Setup
//{#region Footer
$.ajax({
url: '/Api/ASF',
type: 'GET',
success: function (data) {
var v = data.Result.Version,
vNr = v.Major + '.' + v.Minor + '.' + v.Build + '.' + v.Revision,
build = data.Result.BuildVariant;
$('#version').text(vNr + ' - ' + build + ' - ' + vGUI);
$('#changelog').attr('href', 'https://github.com/JustArchi/ArchiSteamFarm/releases/tag/' + vNr);
}
});
//}#endregion Footer
//{#region Bots Status Buttons
function displayBotStatus() {
var offline = 0,
disconnected = 0,
online = 0,
farming = 0;
$.ajax({
url: '/Api/Bot/ASF',
type: 'GET',
success: function (data) {
var json = data.Result;
for (var i = 0; i < json.length; i++) {
var obj = json[i],
KeepRunning = obj.KeepRunning,
TimeRemaining = obj.CardsFarmer.TimeRemaining,
SteamID = obj.SteamID;
if (KeepRunning === false) {
offline++;
} else {
if (SteamID === 0) {
disconnected++;
} else {
if (TimeRemaining === '00:00:00') {
online++;
}
else {
farming++;
}
}
}
}
$('#offlineBots').text(offline);
if (disconnected > 0) {
$('#disconnectedBots').show();
$('#disconnectedBots').text(disconnected);
} else {
$('#disconnectedBots').hide();
}
$('#onlineBots').text(online);
$('#farmingBots').text(farming);
}
});
}
displayBotStatus();
window.setInterval(function () { displayBotStatus(); }, 5000);
//}#endregion Bots Status Buttons
//{#region Information
function displayRAMUsage() {
$.ajax({
url: '/Api/ASF',
type: 'GET',
success: function (data) {
var mem = data.Result.MemoryUsage,
memMB = (mem / 1024).toFixed(2);
$('#ramUsage').html(memMB + ' MB');
}
});
}
displayRAMUsage();
window.setInterval(function () { displayRAMUsage(); }, 10000);
function displayUptime() {
$.ajax({
url: '/Api/ASF',
type: 'GET',
success: function (data) {
var pst = data.Result.ProcessStartTime,
start = new Date(pst),
now = new Date(),
diff = now.getTime() - start.getTime();
var d = Math.floor(diff / (1000 * 60 * 60 * 24));
diff -= d * (1000 * 60 * 60 * 24);
var h = Math.floor(diff / (1000 * 60 * 60));
diff -= h * (1000 * 60 * 60);
var m = Math.floor(diff / (1000 * 60));
h = (h < 10 ? '0' : '') + h;
m = (m < 10 ? '0' : '') + m;
up = d + 'd ' + h + 'h ' + m + 'm';
$('#uptime').html(up);
}
});
}
displayUptime();
window.setInterval(function () { displayUptime(); }, 60000);
//}#endregion Information
//{#region Commands
var $cmdInput = $('#commandInput');
function getDateAndTime() {
var date = new Date();
return ('0' + date.getDate()).slice(-2) + '.'
+ ('0' + (date.getMonth() + 1)).slice(-2) + '.'
+ date.getFullYear() + ' @ '
+ ('0' + date.getHours()).slice(-2) + ':'
+ ('0' + date.getMinutes()).slice(-2) + ':'
+ ('0' + date.getSeconds()).slice(-2);
}
function logCommand(state, cmd) {
var tmpAutoClear = get('chkClear');
if (state) {
$('#commandSent').val($.i18n('commands-sent', getDateAndTime(), cmd));
return;
}
var response = $.i18n('commands-response', getDateAndTime(), cmd);
if (tmpAutoClear === 'false') {
var oldText = $('.box-content-commands').text();
$('.box-content-commands').text(oldText + '\n' + response + '\n');
} else {
$('.box-content-commands').text(response);
}
}
function sendCommand() {
var command = $cmdInput.val(),
requestURL = '/Api/Command/' + encodeURIComponent(command),
tmpAutoClear = get('chkClear');
if (command === '') return;
logCommand(true, command);
var response = $.i18n('commands-waiting', getDateAndTime());
if (tmpAutoClear === 'false') {
if ($('.box-content-commands').text() === '') {
$('.box-content-commands').append(response + '\n');
} else {
$('.box-content-commands').append('\n' + response + '\n');
}
} else {
$('.box-content-commands').text(response);
}
$('.box-content-commands').append('<div class="overlay"><i class="fas fa-sync fa-spin" style="color:white"></i></div>');
$.ajax({
url: requestURL,
type: 'POST',
success: function (data) {
$('.overlay').remove();
logCommand(false, data.Result);
},
error: function (jqXHR, textStatus, errorThrown) {
$('.overlay').remove();
logCommand(false, jqXHR.status + ' ' + errorThrown + ' - ' + jqXHR.responseJSON.Message);
}
});
if (tmpAutoClear !== 'false') $cmdInput.val('');
}
//}#endregion Commands
//{#region Config Utils
function generateConfigHTML(mode) {
var namespace = mode === 'ASF' ? 'ArchiSteamFarm.GlobalConfig' : 'ArchiSteamFarm.BotConfig';
$('.box-content-config').empty(); // Clear page content first
$.ajax({
url: '/Api/Type/' + namespace,
type: 'GET',
async: false,
success: function (data) {
var obj = data.Result,
config = obj.Body,
boxBodyHTML = '',
textBoxes = '',
checkBoxes = '',
numberBoxes = '',
defaultBoxes = '',
textAreas = '';
for (var key in config) {
if (config.hasOwnProperty(key)) {
var value = config[key],
noSpaceKey = key.replace(/([A-Z])/g, ' $1').trim(),
readableKey = noSpaceKey.replace(/([A-Z])\s(?=[A-Z])/g, '$1');
switch (value) {
case 'System.Boolean':
checkBoxes += '<div class="">'
+ '<button type="button" data-type="' + value + '" class="btn btn-box-tool text-grey" id="' + key + '">'
+ '<i id="ico' + key + '" class="fas fa-toggle-on fa-2x fa-fw fa-rotate-180" ></i ></button>'
+ readableKey
+ '</div>';
break;
case 'System.String':
textBoxes += '<div class="form-group-config">'
+ '<label for="' + key + '">' + readableKey + '</label>'
+ '<input type="text" id="' + key + '" class="form-control" data-type="' + value + '">'
+ '</div>';
break;
case 'System.Byte':
numberBoxes += '<div class="form-group-config">'
+ '<label for="' + key + '">' + readableKey + '</label>'
+ '<input type="number" id="' + key + '" class="form-control" data-type="' + value + '">'
+ '</div>';
break;
case 'System.Collections.Generic.HashSet`1[System.String]':
case 'System.Collections.Immutable.ImmutableHashSet`1[System.String]':
textAreas += '<div class="form-group-config">'
+ '<label for="' + key + '">' + readableKey + '</label>'
+ '<textarea id="' + key + '" class="form-control" data-type="' + value + '" rows="4"></textarea>'
+ '</div>';
break;
case 'System.Collections.Generic.Dictionary`2[System.UInt64][ArchiSteamFarm.BotConfig+EPermission]':
case 'System.Collections.Immutable.ImmutableDictionary`2[System.UInt64][ArchiSteamFarm.BotConfig+EPermission]':
textAreas += '<div class="form-group-config">'
+ '<label for="' + key + '">' + readableKey + '</label>'
+ '<textarea id="' + key + '" class="form-control" data-type="' + value + '" rows="3"></textarea>'
+ '</div>';
break;
default:
defaultBoxes += '<div class="form-group-config">'
+ '<label for="' + key + '">' + readableKey + '</label>'
+ '<input type="text" id="' + key + '" class="form-control" data-type="' + value + '">'
+ '</div>';
}
}
if (mode === 'ASF') {
boxBodyHTML = '<div class="col-lg-6 col-md-6 col-sm-6 col-xs-12">' + checkBoxes + numberBoxes + '</div>'
+ '<div class="col-lg-6 col-md-6 col-sm-6 col-xs-12">' + textBoxes + defaultBoxes + textAreas + '</div>';
} else {
boxBodyHTML = '<div class="col-lg-4 col-md-4 col-sm-6 col-xs-12">' + defaultBoxes + '</div>'
+ '<div class="col-lg-4 col-md-4 col-sm-6 col-xs-12">' + textBoxes + numberBoxes + '</div>'
+ '<div class="col-lg-4 col-md-4 col-sm-6 col-xs-12">' + checkBoxes + textAreas + '</div>';
}
}
$('.box-content-config').html(boxBodyHTML);
createClickFunction();
}
});
}
function createClickFunction() {
var myNodeList = document.querySelectorAll('[data-type="System.Boolean"]');
for (i = 0; i < myNodeList.length; i++) {
var myID = myNodeList[i].id;
$('#' + myID).bind('click', function () {
var $key = $('#' + this.id);
if ($key.hasClass('text-grey')) {
$key.removeClass('text-grey');
$key.addClass('text-olive');
$('#ico' + this.id).removeClass('fa-rotate-180');
$key.blur();
} else {
$key.removeClass('text-olive');
$key.addClass('text-grey');
$('#ico' + this.id).addClass('fa-rotate-180');
$key.blur();
}
});
}
}
//}#endregion Config Utils
//{#region Editor
var globalConfig = {};
function loadPageContentEditor(botName) {
if (botName === 'ASF') {
generateConfigHTML('ASF');
} else {
generateConfigHTML();
}
$("#saveButton").unbind();
$("#saveButton").click(function (e) {
swal({
title: $.i18n('global-question-title'),
text: $.i18n('editor-update', botName),
type: 'warning',
showCancelButton: true,
confirmButtonClass: 'btn-danger',
confirmButtonText: $.i18n('editor-update-confirm'),
closeOnConfirm: false,
showLoaderOnConfirm: true
}, function () { prepareConfigForSaving(botName); });
e.preventDefault();
});
$('.box-content-config').ready(function () {
loadConfigValues(botName);
});
}
function loadConfigValues(botName) {
var requestURL = botName === 'ASF' ? '/Api/ASF' : '/Api/Bot/' + encodeURIComponent(botName);
$.ajax({
url: requestURL,
type: 'GET',
success: function (data) {
var objResult = data.Result,
config = botName === 'ASF' ? objResult.GlobalConfig : objResult[0].BotConfig;
globalConfig = config;
for (var key in config) {
if (config.hasOwnProperty(key)) {
var value = config[key],
$key = $('#' + key),
keyObj = $key[0];
if (typeof keyObj === 'undefined') continue;
var inputType = keyObj.dataset.type;
switch (inputType) {
case 'System.Boolean':
if (value) {
$key.removeClass('text-grey');
$key.addClass('text-olive');
$('#ico' + key).removeClass('fa-rotate-180');
} else {
$key.removeClass('text-olive');
$key.addClass('text-grey');
$('#ico' + key).addClass('fa-rotate-180');
}
break;
case 'System.UInt64':
$key.val(config['s_' + key]);
break;
case 'System.Collections.Generic.HashSet`1[System.String]':
case 'System.Collections.Immutable.ImmutableHashSet`1[System.String]':
$key.text(''); // Reset textarea before filling
for (var ipcPrefix in value) {
if (value.hasOwnProperty(ipcPrefix)) $key.append(value[ipcPrefix] + '\n');
}
break;
case 'System.Collections.Generic.Dictionary`2[System.UInt64][ArchiSteamFarm.BotConfig+EPermission]':
case 'System.Collections.Immutable.ImmutableDictionary`2[System.UInt64][ArchiSteamFarm.BotConfig+EPermission]':
$key.text(''); // Reset textarea before filling
for (var steamID64 in value) {
if (value.hasOwnProperty(steamID64)) $key.append(steamID64 + ':' + value[steamID64] + '\n');
}
break;
default:
$key.val(value);
}
}
}
loadValuesForBotsDropDown(botName);
}
});
}
function loadValuesForBotsDropDown(botName) {
var botsDropDownHTML = '';
$.ajax({
url: '/Api/Bot/ASF',
type: 'GET',
success: function (data) {
var obj = data.Result;
if (botName !== 'ASF') {
botsDropDownHTML += '<li><a href="javascript:void(0)" onclick="loadPageContentEditor(\'ASF\')">ASF</a></li>';
}
for (var i = 0; i < obj.length; i++) {
var currentBot = obj[i],
currentBotName = currentBot.BotName;
if (botName === currentBotName) continue;
botsDropDownHTML += '<li><a href="javascript:void(0)" onclick="loadPageContentEditor(\'' + currentBotName + '\')">' + currentBotName + '</a></li>';
}
$('.box-title').html($.i18n('editor-current-bot', botName));
$('#saveButton').data('BotName', botName);
$('#botsDropDown').html(botsDropDownHTML);
}
});
}
function prepareConfigForSaving() {
var botName = $('#saveButton').data('BotName'),
config = globalConfig;
for (var key in config) {
if (config.hasOwnProperty(key)) {
var value = config[key],
$key = $('#' + key),
keyObj = $key[0];
if (typeof keyObj === 'undefined') continue;
var inputType = keyObj.dataset.type,
$keyValue = $key.val();
switch (inputType) {
case 'System.Boolean':
var $keyState = $('#ico' + key).hasClass('fa-rotate-180') ? false : true;
if ($keyState !== value) config[key] = $keyState;
break;
case 'System.String':
if ($keyValue === '') {
$keyValue = null;
break;
}
if ($keyValue !== value) config[key] = $keyValue;
break;
case 'System.UInt64':
if ($keyValue !== config['s_' + key]) {
delete config[key];
config['s_' + key] = $keyValue;
}
break;
case 'System.Collections.Generic.HashSet`1[System.UInt32]':
case 'System.Collections.Immutable.ImmutableHashSet`1[System.UInt32]':
if ($keyValue === '') {
config[key] = [];
break;
}
var items = $keyValue.split(',');
if (items.map(Number) !== value) config[key] = items.map(Number);
break;
case 'System.Collections.Generic.HashSet`1[System.String]':
case 'System.Collections.Immutable.ImmutableHashSet`1[System.String]':
var ipcprefix = [],
lines = $key.val().split('\n');
for (var i = 0; i < lines.length; i++) {
if (lines[i] !== '') ipcprefix.push(lines[i]);
}
if (ipcprefix !== value) config[key] = ipcprefix;
break;
case 'System.Collections.Generic.Dictionary`2[System.UInt64][ArchiSteamFarm.BotConfig+EPermission]':
case 'System.Collections.Immutable.ImmutableDictionary`2[System.UInt64][ArchiSteamFarm.BotConfig+EPermission]':
var steamUserPermissions = {},
permissions = [],
lines = $key.val().split('\n');
for (var i = 0; i < lines.length; i++) {
if (lines[i] !== '') permissions.push(lines[i].split(':'));
}
for (var j = 0; j < permissions.length; j++) {
var obj = permissions[j];
steamUserPermissions[obj[0]] = parseInt(obj[1]);
}
if (steamUserPermissions !== value) config[key] = steamUserPermissions;
break;
default:
if (typeof value === 'object') {
var objItems = $keyValue.split(',');
if (objItems.map(Number) !== value) config[key] = objItems.map(Number);
} else if (typeof value === 'number') {
var number = Number($keyValue);
if (number !== value) config[key] = number;
} else {
if ($keyValue !== value) config[key] = $keyValue;
}
}
}
}
config = botName === 'ASF' ? { GlobalConfig: config } : { BotConfig: config };
saveConfig(botName, config);
}
function saveConfig(botName, config) {
var requestURL = botName === 'ASF' ? '/Api/ASF' : '/Api/Bot/' + encodeURIComponent(botName);
$.ajax({
url: requestURL,
type: 'POST',
data: JSON.stringify(config, null, "\t"),
contentType: 'application/json',
success: function (data) {
swal({
title: $.i18n('global-success-title'),
text: $.i18n('editor-save-confirm', botName),
type: 'success'
}, function () { location.reload(); });
},
error: function (jqXHR, textStatus, errorThrown) {
swal({
title: $.i18n('global-error-title'),
text: jqXHR.status + ' ' + errorThrown + ' - ' + jqXHR.responseJSON.Message,
type: 'error'
}, function () { location.reload(); });
}
});
}
//}#endregion Editor
//{#region Generator
var globalDefaultConfig = {};
function loadPageContentGenerator(mode) {
if (mode === 'ASF') {
generateConfigHTML('ASF');
$('#GeneratorName').hide();
} else {
generateConfigHTML();
$('#GeneratorName').show();
}
$("#downloadButton").unbind();
$("#downloadButton").click(function (e) {
prepareConfigForDownload(mode);
e.preventDefault();
});
$('.box-content-config').ready(function () {
loadDefaultConfigValues(mode);
});
}
function loadDefaultConfigValues(mode) {
var namespace = mode === 'ASF' ? 'ArchiSteamFarm.GlobalConfig' : 'ArchiSteamFarm.BotConfig';
$.ajax({
url: '/Api/Structure/' + namespace,
type: 'GET',
success: function (data) {
var config = data.Result;
globalDefaultConfig = config;
for (var key in config) {
if (config.hasOwnProperty(key)) {
var value = config[key],
$key = $('#' + key),
keyObj = $key[0];
if (typeof keyObj === 'undefined') continue;
var inputType = keyObj.dataset.type;
switch (inputType) {
case 'System.Boolean':
if (value) {
$key.removeClass('text-grey');
$key.addClass('text-olive');
$('#ico' + key).removeClass('fa-rotate-180');
} else {
$key.removeClass('text-olive');
$key.addClass('text-grey');
$('#ico' + key).addClass('fa-rotate-180');
}
break;
case 'System.UInt64':
$key.val(config['s_' + key]);
break;
case 'System.Collections.Generic.Dictionary`2[System.UInt64][ArchiSteamFarm.BotConfig+EPermission]':
case 'System.Collections.Immutable.ImmutableDictionary`2[System.UInt64][ArchiSteamFarm.BotConfig+EPermission]':
$key.text(''); // Reset textarea before filling
for (var steamID64 in value) {
if (value.hasOwnProperty(steamID64)) $key.append(steamID64 + ':' + value[steamID64] + '\n');
}
break;
default:
$key.val(value);
}
}
}
loadValuesForModeDropDown(mode);
}
});
}
function loadValuesForModeDropDown(mode) {
var botsDropDownHTML = '';
mode = mode !== 'ASF' ? 'Bot' : 'ASF';
if (mode === 'ASF') {
botsDropDownHTML = '<li><a href="javascript:void(0)" onclick="loadPageContentGenerator();">Bot</a></li>';
} else {
botsDropDownHTML = '<li><a href="javascript:void(0)" onclick="loadPageContentGenerator(\'ASF\');">ASF</a></li>';
}
$('.box-title').html($.i18n('generator-current-bot', mode));
$('#modeDropDown').html(botsDropDownHTML);
}
function prepareConfigForDownload(mode) {
var config = globalDefaultConfig;
if (mode !== 'ASF') {
var botName = $('#GeneratorName').val();
if (botName === '') {
swal({
title: $.i18n('global-error-title'),
text: $.i18n('generator-name'),
type: 'error'
});
return false;
}
if (botName.substr(botName.length - 5) === '.json') {
botName = botName.substr(0, botName.length - 5);
}
}
for (var key in config) {
if (config.hasOwnProperty(key)) {
var value = config[key],
$key = $('#' + key),
keyObj = $key[0];
if (typeof keyObj === 'undefined') continue;
var inputType = keyObj.dataset.type,
$keyValue = $key.val();
switch (inputType) {
case 'System.Boolean':
var $keyState = $('#ico' + key).hasClass('fa-rotate-180') ? false : true;
if ($keyState !== value) config[key] = $keyState;
break;
case 'System.String':
if ($keyValue === '') $keyValue = null;
if ($keyValue !== value) config[key] = $keyValue;
break;
case 'System.UInt64':
if ($keyValue !== config['s_' + key]) {
delete config[key];
config['s_' + key] = $keyValue;
}
break;
case 'System.Collections.Generic.HashSet`1[System.UInt32]':
case 'System.Collections.Immutable.ImmutableHashSet`1[System.UInt32]':
if ($keyValue === '') continue;
var items = $keyValue.split(',');
if (items.map(Number) !== value) config[key] = items.map(Number);
break;
case 'System.Collections.Generic.HashSet`1[System.String]':
case 'System.Collections.Immutable.ImmutableHashSet`1[System.String]':
var ipcprefix = [],
lines = $key.val().split('\n');
for (var i = 0; i < lines.length; i++) {
if (lines[i] !== '') ipcprefix.push(lines[i]);
}
if (ipcprefix !== value) config[key] = ipcprefix;
break;
case 'System.Collections.Generic.Dictionary`2[System.UInt64][ArchiSteamFarm.BotConfig+EPermission]':
case 'System.Collections.Immutable.ImmutableDictionary`2[System.UInt64][ArchiSteamFarm.BotConfig+EPermission]':
var steamUserPermissions = {},
permissions = [],
lines = $key.val().split('\n');
for (var i = 0; i < lines.length; i++) {
if (lines[i] !== '') permissions.push(lines[i].split(':'));
}
for (var j = 0; j < permissions.length; j++) {
var obj = permissions[j];
steamUserPermissions[obj[0]] = parseInt(obj[1]);
}
if (steamUserPermissions !== value) config[key] = steamUserPermissions;
break;
default:
if (typeof value === 'object') {
var objItems = $keyValue.split(',');
if (objItems.map(Number) !== value) config[key] = objItems.map(Number);
} else if (typeof value === 'number') {
var number = Number($keyValue);
if (number !== value) config[key] = number;
} else {
if ($keyValue !== value) config[key] = $keyValue;
}
}
}
}
if (mode !== 'ASF') {
downloadObjectAsJson(botName, config);
$('#GeneratorName').val('');
} else {
downloadObjectAsJson('ASF', config);
}
}
function downloadObjectAsJson(filename, json) {
var dataStr = "data:text/json;charset=utf-8," + encodeURIComponent(JSON.stringify(json, null, "\t"));
var downloadAnchorNode = document.createElement('a');
downloadAnchorNode.setAttribute("href", dataStr);
downloadAnchorNode.setAttribute("download", filename + ".json");
downloadAnchorNode.click();
downloadAnchorNode.remove();
}
//}#endregion Generator
//{#region Right Sidebar
$(function () {
'use strict';
var mySkins = [
'skin-blue',
'skin-teal',
'skin-black',
'skin-red',
'skin-yellow',
'skin-purple',
'skin-green'
];
function changeSkin(cls) {
$.each(mySkins, function (i) {
$('body').removeClass(mySkins[i]);
$('[data-skin="' + mySkins[i] + '"]').removeClass('btn-badge-active');
});
$('body').addClass(cls);
$('[data-skin="' + cls + '"]').addClass('btn-badge-active');
store('skin', cls);
return false;
}
function changeBoxed(savedLayout) {
if (savedLayout === 'layout-boxed') {
if ($('body').hasClass('fixed')) {
$('body').removeClass('fixed');
$('body').addClass('layout-boxed');
$('#chkBoxed').bootstrapToggle('on');
}
}
}
function changeNightmode(savedNightmodeState) {
if (savedNightmodeState === 'nightmode') {
$('body').addClass('nightmode');
$('#chkNightmode').bootstrapToggle('on');
}
}
function loadLanguageHTML() {
var tmpLangCode = get('langCode');
$('#currentLanguage').attr('class', 'flag-icon');
$('#currentLanguage').addClass('flag-icon-' + tmpLangCode);
}
function loadLayout() {
var tmpSkin = get('skin'),
tmpLayoutState = get('layoutState'),
tmpNightmodeState = get('nightmodeState'),
tmpLeftSidebarState = get('leftSidebarState');
if (tmpSkin && $.inArray(tmpSkin, mySkins)) changeSkin(tmpSkin);
if (tmpLeftSidebarState === 'sidebar-collapse') $('body').addClass('sidebar-collapse');
if (tmpLayoutState) changeBoxed(tmpLayoutState);
if (tmpNightmodeState) changeNightmode(tmpNightmodeState);
loadLanguageHTML();
$('[data-skin]').on('click', function (e) {
e.preventDefault();
changeSkin($(this).data('skin'));
});
$('#chkBoxed').change(function() {
if ($('body').hasClass('fixed')) {
$('body').removeClass('fixed');
$('body').addClass('layout-boxed');
store('layoutState', 'layout-boxed');
} else {
$('body').removeClass('layout-boxed');
$('body').addClass('fixed');
store('layoutState', 'fixed');
}
});
$('#chkNightmode').change(function() {
if ($('body').hasClass('nightmode')) {
$('body').removeClass('nightmode');
store('nightmodeState', null);
} else {
$('body').addClass('nightmode');
store('nightmodeState', 'nightmode');
}
});
$('#leftSidebar').on('click', function (e) {
e.preventDefault();
var state = $('body').hasClass('sidebar-collapse') ? 'normal' : 'sidebar-collapse';
store('leftSidebarState', state);
});
$('.language-item').on('click', function (e) {
e.preventDefault();
loadLocales($(this).data('locale'));
loadLanguageHTML();
});
$('#chkBoxed').bootstrapToggle();
$('#chkNightmode').bootstrapToggle();
}
// Create the menu
var $layoutSettings = $('<div />');
// Layout options
$layoutSettings.append(
'<h4 class="control-sidebar-heading" data-i18n="global-layout">Layout</h4>'
// Boxed Layout
+ '<div class="form-group hidden-xs hidden-sm">'
+ '<label class="control-sidebar-subheading">'
+ '<input id="chkBoxed" type="checkbox" data-style="ios pull-right" data-onstyle="default" data-toggle="toggle" data-size="mini" data-on="<i class=\'far fa-square\'></i>" data-off="<i class=\'far fa-square\'></i>">'
+ '<i class="far fa-square fa-fw"></i> <span data-i18n="global-boxed">Boxed Layout</span>'
+ '</label>'
+ '<p data-i18n="global-boxed-description">Toggle boxed layout</p>'
+ '</div>'
// Nightmode
+ '<div class="form-group">'
+ '<label class="control-sidebar-subheading">'
+ '<input id="chkNightmode" type="checkbox" data-style="ios pull-right" data-onstyle="default" data-toggle="toggle" data-size="mini" data-on="<i class=\'fas fa-moon\'></i>" data-off="<i class=\'fas fa-moon\'></i>">'
+ '<i class="fas fa-moon fa-fw"></i> <span data-i18n="global-nightmode">Nightmode</span>'
+ '</label>'
+ '<p data-i18n="global-nightmode-description">Toggle nightmode</p>'
+ '</div>'
);
var $skinsList = $('<ul />', { 'class': 'list-unstyled clearfix text-center' });
var $skinBlue = $('<li />', { style: 'float:left; width: 14%;' })
.append('<button data-skin="skin-blue" class="clearfix full-opacity-hover btn btn-badge bg-blue"></button>');
$skinsList.append($skinBlue);
var $skinBlack = $('<li />', { style: 'float:left; width: 14%;' })
.append('<button data-skin="skin-black" class="clearfix full-opacity-hover btn btn-badge bg-black"></button>');
$skinsList.append($skinBlack);
var $skinPurple = $('<li />', { style: 'float:left; width: 14%;' })
.append('<button data-skin="skin-purple" class="clearfix full-opacity-hover btn btn-badge bg-purple"></button>');
$skinsList.append($skinPurple);
var $skinGreen = $('<li />', { style: 'float:left; width: 14%;' })
.append('<button data-skin="skin-green" class="clearfix full-opacity-hover btn btn-badge bg-green"></button>');
$skinsList.append($skinGreen);
var $skinRed = $('<li />', { style: 'float:left; width: 14%;' })
.append('<button data-skin="skin-red" class="clearfix full-opacity-hover btn btn-badge bg-red"></button>');
$skinsList.append($skinRed);
var $skinYellow = $('<li />', { style: 'float:left; width: 14%;' })
.append('<button data-skin="skin-yellow" class="clearfix full-opacity-hover btn btn-badge bg-yellow"></button>');
$skinsList.append($skinYellow);
var $skinTeal = $('<li />', { style: 'float:left; width: 14%;' })
.append('<button data-skin="skin-teal" class="clearfix full-opacity-hover btn btn-badge bg-teal"></button>');
$skinsList.append($skinTeal);
$layoutSettings.append('<h4 class="control-sidebar-heading" data-i18n="global-skins">Skins</h4>');
$layoutSettings.append($skinsList);
loadAllLanguages();
for (var i in availableLanguages) {
var language = availableLanguages[i],
langCode = (language === 'strings') ? 'us' : language.substr(language.length - 2).toLowerCase();
if (language === 'strings.sr-CS') langCode = 'rs'; // fix for flag-icon-css
$('.dropdown-language').append('<a class="language-item" href="javascript:void(0)" data-locale="' + language + '"><i class="flag-icon flag-icon-' + langCode + '"></i></a>');
}
$('#control-right-sidebar').after($layoutSettings);
loadLayout();
});
//}#endregion Right Sidebar

View file

@ -1,79 +0,0 @@
const defaultLocale = 'strings';
var availableLanguages = [],
tmpLanguage = get('language'),
myLocal = (tmpLanguage) ? tmpLanguage : getLocale(availableLanguages);
function getLocale(validLocales) {
const language = navigator.language || navigator.userLanguage; // If the browser doesn't support this, it will not support other page elements as well
if (!language) return defaultLocale; // If the browser doesn't provide the language - return default locale
if (language.length !== 2) return validLocales.includes(language) ? language : defaultLocale; // If the language is in `xx-XX` format, check if it's valid
if (validLocales.includes(`${language}-${language.toUpperCase()}`)) return `${language}-${language.toUpperCase()}`; // If the language is two letter code, check if corresponding 5 letter code is a valid locale
const languageRegex = new RegExp(`${language}\-\\\S\\\S`); // Create a regex to match `xx-**` where `*` is a wildcard
for (const validLocale of validLocales) {
if (languageRegex.test(validLocale)) return validLocale; // Check if the locale matches the regex, if so, return it
}
return defaultLocale; // If no match found, return default locale
}
function loadLocales(language) {
var i18n = $.i18n(),
langCode = (language === 'strings') ? 'us' : language.substr(language.length - 2).toLowerCase(),
translationFile;
i18n.locale = language;
translationFile = '../locale/' + i18n.locale + '.json';
i18n.load(translationFile, i18n.locale).done(
function () {
$.getJSON(translationFile, function (obj) {
for (var prop in obj) {
if (obj.hasOwnProperty(prop)) {
if (obj[prop]) {
if (prop.substring(0, 12) === 'placeholder-') {
$('[data-i18n="' + prop + '"]').attr("placeholder", $.i18n(prop));
} else if (prop.substring(0, 6) === 'title-') {
$('[data-i18n="' + prop + '"]').attr("title", $.i18n(prop));
} else {
$('[data-i18n="' + prop + '"]').i18n();
}
}
}
}
// fix for bootstrap-select elements
$('[data-id="commandsDropDown"] > .filter-option').text($.i18n('title-commands'));
$('[data-id="botsDropDown"] > .filter-option').text($.i18n('title-bots'));
});
}
);
store('language', language);
store('langCode', langCode);
}
function loadAllLanguages() {
$.ajax({
url: '/Api/WWW/Directory/locale',
type: 'GET',
async: false,
success: function (data) {
var obj = data.Result;
const languageRegex = new RegExp("strings(.[a-z]{2}-[A-Z]{2})?.json");
availableLanguages = [];
for (var prop in obj) {
if (obj.hasOwnProperty(prop)) {
var language = obj[prop];
if (languageRegex.test(language))
availableLanguages.push(language.substr(0, language.length - 5));
}
}
}
});
}
loadLocales(myLocal);

View file

@ -1,10 +0,0 @@
if (typeof Storage === 'undefined')
window.alert('Please use a modern browser to properly view ASF GUI!');
function get(name) {
return localStorage.getItem(name);
}
function store(name, val) {
localStorage.setItem(name, val);
}

View file

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

View file

@ -1,87 +0,0 @@
{
"auth-ipc-403": "",
"auth-ipc-header": "",
"auth-ipc-pw-saved": "",
"auth-ipc-pw-wrong": "",
"auth-ipc-text": "",
"auth-title": "",
"bots-confirm-delete": "",
"bots-delete-success": "",
"bots-delimiter": "",
"bots-download": "",
"bots-hide": "Скрий ботовете",
"bots-hide-offline": "Офлайн ботове",
"bots-hide-inactive": "",
"bots-hide-online": "Онлайн ботове",
"bots-infobox-cards": "",
"bots-infobox-games": "",
"bots-infobox-time": "",
"bots-in-use": "В момента се ползва бот.",
"bots-paused": "",
"bots-pause-success": "",
"bots-recover-files": "",
"bots-redeem-add-button": "",
"bots-redeem-unused-button": "",
"bots-redeem-used-button": "",
"bots-redeem-confirm": "",
"bots-redeem-title": "",
"bots-redeem-add-title": "",
"bots-redeem-unused-title": "",
"bots-redeem-used-title": "",
"bots-resume-success": "",
"bots-start-success": "",
"bots-stop-success": "",
"bots-syntax": "",
"bots-title": "ASF | Ботове",
"commands-response": "",
"commands-sent": "",
"commands-title": "ASF | Команди",
"commands-waiting": "",
"editor-change": "Промяна на бот",
"editor-current": "В момента се редактира:",
"editor-current-bot": "",
"editor-save": "Запази",
"editor-save-confirm": "",
"editor-title": "ASF | Редактор на настройките",
"editor-update": "",
"editor-update-confirm": "",
"generator-change": "Промяна на режима",
"generator-current": "Текущ режим:",
"generator-current-bot": "",
"generator-download": "Изтегляне",
"generator-name": "",
"generator-title": "ASF | Генератор на настройките",
"global-bots": "Ботове",
"global-boxed": "Затворено оформление",
"global-boxed-description": "",
"global-change-language": "",
"global-changelog": "Списък на промените",
"global-commands": "Команди",
"global-config": "Конфигурация",
"global-control-panel": "Контролен панел",
"global-editor": "Редактор",
"global-error-invalid-pw": "",
"global-error-title": "",
"global-generator": "Генератор",
"global-home": "Начало",
"global-information": "Информация",
"global-layout": "Оформление",
"global-log": "Регистър",
"global-navigation": "Превключване на навигация",
"global-nightmode": "Нощен режим",
"global-nightmode-description": "",
"global-question-title": "",
"global-ram-usage": "Употреба на RAM",
"global-skins": "Скинове",
"global-success-title": "Успешно!",
"global-uptime": "Продължителност на работа",
"global-version": "Версия",
"global-wiki": "Wiki",
"log-event-code": "",
"log-title": "ASF | Регистър",
"placeholder-auth": "",
"placeholder-commands": "",
"placeholder-generator": "Име",
"title-commands": "Команди",
"title-bots": "Ботове"
}

View file

@ -1,87 +0,0 @@
{
"auth-ipc-403": "Nepodařilo se vám mnohokrát ověřit, prosím vyzkoušejte to později.",
"auth-ipc-header": "IPC Heslo vyžadováno",
"auth-ipc-pw-saved": "Vaše IPC heslo bylo uloženo.",
"auth-ipc-pw-wrong": "Vaše IPC heslo je špatné, vyzkoušejte to znova!",
"auth-ipc-text": "Prosím zadejte správné IPC heslo",
"auth-title": "ASF | Autentizace",
"bots-confirm-delete": "Ano, vymaž bota!",
"bots-delete-success": "<$1> a všechny souvisící soubory byly smazány.",
"bots-delimiter": "",
"bots-download": "Není nic ke stažení!",
"bots-hide": "Skrýt boty",
"bots-hide-offline": "Offline boti",
"bots-hide-inactive": "Neaktivní boti",
"bots-hide-online": "Online boti",
"bots-infobox-cards": "Zbývající karty",
"bots-infobox-games": "Zbývající hry",
"bots-infobox-time": "Zbývající čas",
"bots-in-use": "Bot je právě použiván.",
"bots-paused": "Bot je pauznutý.",
"bots-pause-success": "<$1> byl pauznut.",
"bots-recover-files": "Nebudeš schopný zobrazit žádné soubory bota!",
"bots-redeem-add-button": "Přidej klíče",
"bots-redeem-unused-button": "",
"bots-redeem-used-button": "",
"bots-redeem-confirm": "",
"bots-redeem-title": "",
"bots-redeem-add-title": "Přidej klíče",
"bots-redeem-unused-title": "Zobrazit použité klíče",
"bots-redeem-used-title": "Zobrazit použité klíče",
"bots-resume-success": "<$1> byl obnoven.",
"bots-start-success": "<$1> byl aktivován.",
"bots-stop-success": "<$1> byl zastaven.",
"bots-syntax": "",
"bots-title": "ASF | Boti",
"commands-response": "$1 Odpověd obdržená: $2",
"commands-sent": "$1 Příkaz odeslán: $2",
"commands-title": "ASF | Příkazy",
"commands-waiting": "$1 Čekání na odpověď...",
"editor-change": "Změnit bota",
"editor-current": "Aktuálně se mění:",
"editor-current-bot": "Aktuálně se mění: <b>$1</b>",
"editor-save": "Uložit",
"editor-save-confirm": "<$1> a jeho nastavení byly aktualizovány.",
"editor-title": "ASF | Editor konfigurace",
"editor-update": "Konfigurace bude aktualizována a <$1> bude restartován!",
"editor-update-confirm": "Ano, aktualizuj konfiguraci!",
"generator-change": "Změnit mód",
"generator-current": "Aktuální mód:",
"generator-current-bot": "Aktuální mód: <b>$1</b>",
"generator-download": "Stáhnout",
"generator-name": "Musíte zadat jméno!",
"generator-title": "ASF | Generátor Konfigurace",
"global-bots": "Boti",
"global-boxed": "Čtvercové rozložení",
"global-boxed-description": "Zapnout čtvercové rozložení",
"global-change-language": "Změnit jazyk",
"global-changelog": "Seznam změn",
"global-commands": "Příkazy",
"global-config": "Konfigurace",
"global-control-panel": "Ovládací panel",
"global-editor": "Editor",
"global-error-invalid-pw": "Musíte zadat platné heslo!",
"global-error-title": "Chyba!",
"global-generator": "Generátor",
"global-home": "Domovská stránka",
"global-information": "Informace",
"global-layout": "Rozložení",
"global-log": "Záznamy",
"global-navigation": "Přepnout navigaci",
"global-nightmode": "Noční režim",
"global-nightmode-description": "Zapnout noční režim",
"global-question-title": "Jste si jisti?",
"global-ram-usage": "Využití paměti RAM",
"global-skins": "Skiny",
"global-success-title": "Hotovo.",
"global-uptime": "Doba provozu",
"global-version": "Verze",
"global-wiki": "Wiki",
"log-event-code": "Kód události: $1",
"log-title": "ASF | Log",
"placeholder-auth": "Zadejte heslo...",
"placeholder-commands": "Zadejte příkaz...",
"placeholder-generator": "Jméno",
"title-commands": "Příkazy",
"title-bots": "Boti"
}

View file

@ -1,87 +0,0 @@
{
"auth-ipc-403": "",
"auth-ipc-header": "Kræver IPC adgangskode",
"auth-ipc-pw-saved": "Din IPC adgangskode er blevet gemt.",
"auth-ipc-pw-wrong": "Din IPC adgangskode synes at være forkert, prøv igen!",
"auth-ipc-text": "Angiv venligst den korrekte IPC adgangskode",
"auth-title": "ASF | Verificering",
"bots-confirm-delete": "Ja, slet den bot!",
"bots-delete-success": "<$1> og alle relaterede filer er blevet slettet.",
"bots-delimiter": "Afgrænser",
"bots-download": "Der er intet at downloade!",
"bots-hide": "Skjul bots",
"bots-hide-offline": "Offline bots",
"bots-hide-inactive": "Inaktive bots",
"bots-hide-online": "Online bots",
"bots-infobox-cards": "Kort tilbage",
"bots-infobox-games": "Spil tilbage",
"bots-infobox-time": "Tid tilbage",
"bots-in-use": "Botten bruges i øjeblikket.",
"bots-paused": "Bot er sat på pause.",
"bots-pause-success": "<$1> er sat på pause.",
"bots-recover-files": "Du vil ikke kunne genoprette nogen bot filer!",
"bots-redeem-add-button": "Tilføje nøgler",
"bots-redeem-unused-button": "Download $1.keys.unused",
"bots-redeem-used-button": "Download $1.keys.used",
"bots-redeem-confirm": "",
"bots-redeem-title": "Produktaktivering i baggrunden",
"bots-redeem-add-title": "Tilføje nøgler",
"bots-redeem-unused-title": "Vis ubrugte nøgler",
"bots-redeem-used-title": "Vis brugte nøgler",
"bots-resume-success": "<$1> er genoptaget.",
"bots-start-success": "<$1> er blevet startet.",
"bots-stop-success": "<$1> er blevet stoppet.",
"bots-syntax": "",
"bots-title": "ASF | Bots",
"commands-response": "$1 Svar modtaget: $2",
"commands-sent": "$1 Kommando sendt: $2",
"commands-title": "ASF | Kommandoer",
"commands-waiting": "$1 Venter på svar...",
"editor-change": "Skift bot",
"editor-current": "I øjeblikket redigeres:",
"editor-current-bot": "I øjeblikket redigering: <b>$1</b>",
"editor-save": "Gem",
"editor-save-confirm": "<$1> og dens konfig fil blev opdateret.",
"editor-title": "ASF | Konfigurations Editor",
"editor-update": "Kofigurationen vil blive opdateret og <$1> vil blive genstartet!",
"editor-update-confirm": "Ja, opdatere konfig!",
"generator-change": "Ændr modus",
"generator-current": "Nuværende modus:",
"generator-current-bot": "Nuværende tilstand: <b>$1</b>",
"generator-download": "Download",
"generator-name": "Du skal angive et navn!",
"generator-title": "ASF | Konfigurationsgenerator",
"global-bots": "Bots",
"global-boxed": "Boxed Layout",
"global-boxed-description": "Skift boxed layout",
"global-change-language": "Skift sprog",
"global-changelog": "Ændringslog",
"global-commands": "Kommandoer",
"global-config": "Konfiguration",
"global-control-panel": "Kontrolpanel",
"global-editor": "Redigeringsværktøj",
"global-error-invalid-pw": "Du skal angive en gyldig adgangskode!",
"global-error-title": "Fejl!",
"global-generator": "Generator",
"global-home": "Hjem",
"global-information": "Information",
"global-layout": "Layout",
"global-log": "Log",
"global-navigation": "Skift navigation",
"global-nightmode": "Nattilstand",
"global-nightmode-description": "Skift nattilstand",
"global-question-title": "Er du sikker?",
"global-ram-usage": "RAM-forbrug",
"global-skins": "Udseende",
"global-success-title": "Lykkedes!",
"global-uptime": "Oppetid",
"global-version": "Version",
"global-wiki": "Wiki",
"log-event-code": "Begivenhed kode: $1",
"log-title": "ASF | Log",
"placeholder-auth": "Skriv din adgangskode...",
"placeholder-commands": "Skriv kommandoen...",
"placeholder-generator": "Navn",
"title-commands": "Kommandoer",
"title-bots": "Bots"
}

View file

@ -1,87 +0,0 @@
{
"auth-ipc-403": "Du hast dich zu oft fehlerhaft authentifiziert. Bitte versuche es in einer Stunde erneut.",
"auth-ipc-header": "IPC-Passwort erforderlich",
"auth-ipc-pw-saved": "Dein IPC-Passwort wurde gespeichert.",
"auth-ipc-pw-wrong": "Dein IPC-Passwort scheint falsch zu sein, versuche es erneut!",
"auth-ipc-text": "Bitte gib das richtige IPC-Passwort ein",
"auth-title": "ASF | Authentifizierung",
"bots-confirm-delete": "Ja, den Bot wirklich löschen!",
"bots-delete-success": "<$1> und alle damit zusammenhängenden Dateien wurden gelöscht.",
"bots-delimiter": "Trennzeichen",
"bots-download": "Es gibt nichts zum herunterladen!",
"bots-hide": "Bots ausblenden",
"bots-hide-offline": "Offline Bots",
"bots-hide-inactive": "Inaktive Bots",
"bots-hide-online": "Online Bots",
"bots-infobox-cards": "Verbleibenden Karten",
"bots-infobox-games": "Verbleibenden Spiele",
"bots-infobox-time": "Verbleibende Zeit",
"bots-in-use": "Bot wird zurzeit benutzt.",
"bots-paused": "Bot ist pausiert.",
"bots-pause-success": "<$1> wurde pausiert.",
"bots-recover-files": "Es wird dir nicht möglich sein, irgendwelche Bot-Dateien wiederherzustellen!",
"bots-redeem-add-button": "Schlüssel hinzufügen",
"bots-redeem-unused-button": "$1.keys.unused herunterladen",
"bots-redeem-used-button": "$1.keys.used herunterladen",
"bots-redeem-confirm": "$1 {{PLURAL:$1|Schlüssel wurde|Schlüssel wurden}} zu <$2> zum Einlösen im Hintergrund hinzugefügt.",
"bots-redeem-title": "Hintergrund-Key-Einlöser",
"bots-redeem-add-title": "Schlüssel hinzufügen",
"bots-redeem-unused-title": "Unbenutzte Schlüssel anzeigen",
"bots-redeem-used-title": "Benutzte Schlüssel anzeigen",
"bots-resume-success": "<$1> wurde fortgesetzt.",
"bots-start-success": "<$1> wurde gestartet.",
"bots-stop-success": "<$1> wurde gestoppt.",
"bots-syntax": "Syntax: Spielname{Trennzeichen}Schlüssel",
"bots-title": "ASF | Bots",
"commands-response": "$1 Antwort erhalten: $2",
"commands-sent": "$1 Kommando gesendet: $2",
"commands-title": "ASF | Kommandos",
"commands-waiting": "$1 Warte auf Antwort...",
"editor-change": "Bot wechseln",
"editor-current": "Derzeit in Bearbeitung:",
"editor-current-bot": "Derzeit in Bearbeitung: <b>$1</b>",
"editor-save": "Speichern",
"editor-save-confirm": "<$1> und die dazugehörige Konfigdatei wurde aktualisiert.",
"editor-title": "ASF | Konfig Editor",
"editor-update": "Die Konfigdatei wird aktualisiert und <$1> wird neugestartet!",
"editor-update-confirm": "Ja, Konfigdatei aktualisieren!",
"generator-change": "Modus wechseln",
"generator-current": "Aktueller Modus:",
"generator-current-bot": "Aktueller Modus: <b>$1</b>",
"generator-download": "Herunterladen",
"generator-name": "Du musst einen Namen eingeben!",
"generator-title": "ASF | Konfig Generator",
"global-bots": "Bots",
"global-boxed": "Kompakte Ansicht",
"global-boxed-description": "Kompakte Ansicht umschalten",
"global-change-language": "Sprache ändern",
"global-changelog": "Änderungsprotokoll",
"global-commands": "Kommandos",
"global-config": "Konfig",
"global-control-panel": "Schalttafel",
"global-editor": "Editor",
"global-error-invalid-pw": "Du musst ein gültiges Passwort eingeben!",
"global-error-title": "Fehler!",
"global-generator": "Generator",
"global-home": "Startseite",
"global-information": "Informationen",
"global-layout": "Layout",
"global-log": "Protokoll",
"global-navigation": "Navigation umschalten",
"global-nightmode": "Nachtmodus",
"global-nightmode-description": "Nachtmodus umschalten",
"global-question-title": "Bist du sicher?",
"global-ram-usage": "RAM-Auslastung",
"global-skins": "Designs",
"global-success-title": "Erfolg!",
"global-uptime": "Betriebszeit",
"global-version": "Version",
"global-wiki": "Wiki",
"log-event-code": "Ereigniscode: $1",
"log-title": "ASF | Protokoll",
"placeholder-auth": "Gib dein Passwort ein...",
"placeholder-commands": "Kommando eingeben...",
"placeholder-generator": "Name",
"title-commands": "Kommandos",
"title-bots": "Bots"
}

View file

@ -1,87 +0,0 @@
{
"auth-ipc-403": "",
"auth-ipc-header": "",
"auth-ipc-pw-saved": "",
"auth-ipc-pw-wrong": "",
"auth-ipc-text": "",
"auth-title": "",
"bots-confirm-delete": "",
"bots-delete-success": "",
"bots-delimiter": "",
"bots-download": "",
"bots-hide": "Απόκρυψη bot",
"bots-hide-offline": "Αποσυνδεδεμένα bot",
"bots-hide-inactive": "",
"bots-hide-online": "Συνδεδεμένα bot",
"bots-infobox-cards": "",
"bots-infobox-games": "",
"bots-infobox-time": "",
"bots-in-use": "Το bot χρησιμοποιείται αυτή τη στιγμή.",
"bots-paused": "",
"bots-pause-success": "",
"bots-recover-files": "",
"bots-redeem-add-button": "",
"bots-redeem-unused-button": "",
"bots-redeem-used-button": "",
"bots-redeem-confirm": "",
"bots-redeem-title": "",
"bots-redeem-add-title": "",
"bots-redeem-unused-title": "",
"bots-redeem-used-title": "",
"bots-resume-success": "",
"bots-start-success": "",
"bots-stop-success": "",
"bots-syntax": "",
"bots-title": "ASF | Bot",
"commands-response": "",
"commands-sent": "",
"commands-title": "ASF | Εντολές",
"commands-waiting": "",
"editor-change": "Αλλαγή bot",
"editor-current": "Επεξεργάζεστε το:",
"editor-current-bot": "",
"editor-save": "Αποθήκευση",
"editor-save-confirm": "",
"editor-title": "ASF | Επεξεργαστής ρυθμίσεων",
"editor-update": "",
"editor-update-confirm": "",
"generator-change": "Αλλαγή λειτουργίας",
"generator-current": "Τρέχουσα λειτουργία:",
"generator-current-bot": "",
"generator-download": "Λήψη",
"generator-name": "",
"generator-title": "ASF | Δημιουργός ρυθμίσεων",
"global-bots": "Bot",
"global-boxed": "Διάταξη πλαισίου",
"global-boxed-description": "",
"global-change-language": "",
"global-changelog": "Αρχείο αλλαγών",
"global-commands": "Εντολές",
"global-config": "Ρυθμίσεις",
"global-control-panel": "Πίνακας ελέγχου",
"global-editor": "Επεξεργαστής",
"global-error-invalid-pw": "",
"global-error-title": "",
"global-generator": "Δημιουργός",
"global-home": "Αρχική",
"global-information": "Πληροφορίες",
"global-layout": "Διάταξη",
"global-log": "Αρχείο καταγραφής",
"global-navigation": "Εναλλαγή πλοήγησης",
"global-nightmode": "Νυχτερινή λειτουργία",
"global-nightmode-description": "",
"global-question-title": "",
"global-ram-usage": "Χρήση RAM",
"global-skins": "Θέματα",
"global-success-title": "Επιτυχία!",
"global-uptime": "Χρόνος σε λειτουργία",
"global-version": "Έκδοση",
"global-wiki": "Wiki",
"log-event-code": "",
"log-title": "ASF | Αρχείο καταγραφής",
"placeholder-auth": "",
"placeholder-commands": "",
"placeholder-generator": "Όνομα",
"title-commands": "Εντολές",
"title-bots": "Bot"
}

View file

@ -1,87 +0,0 @@
{
"auth-ipc-403": "No se ha podido identificar correctamente demasiadas veces, intentelo de nuevo en una hora.",
"auth-ipc-header": "Contraseña de IPC requerida",
"auth-ipc-pw-saved": "Su contraseña IPC ha sido guardada.",
"auth-ipc-pw-wrong": "Su contraseña IPC parece ser incorrecta, inténtelo de nuevo!",
"auth-ipc-text": "Por favor introduzca la contraseña IPC correcta",
"auth-title": "ASF | Autentificación",
"bots-confirm-delete": "¡Sí, eliminar bot!",
"bots-delete-success": "<$1> y todos los ficheros relacionados han sido eliminados.",
"bots-delimiter": "Separador",
"bots-download": "¡No hay nada para descargar!",
"bots-hide": "Ocultar bots",
"bots-hide-offline": "Bots sin conexión",
"bots-hide-inactive": "Bots inactivos",
"bots-hide-online": "Bots en línea",
"bots-infobox-cards": "Cromos restantes",
"bots-infobox-games": "Juegos restantes",
"bots-infobox-time": "Tiempo restante",
"bots-in-use": "El bot se está utilizando actualmente.",
"bots-paused": "El bot está pausado.",
"bots-pause-success": "<$1> ha sido pausado.",
"bots-recover-files": "¡No podrás recuperar los archivos del bot!",
"bots-redeem-add-button": "Agregar claves",
"bots-redeem-unused-button": "Descargar $1.keys.unused",
"bots-redeem-used-button": "Descargar $1.keys.used",
"bots-redeem-confirm": "",
"bots-redeem-title": "",
"bots-redeem-add-title": "Agregar claves",
"bots-redeem-unused-title": "Ver claves sin uso",
"bots-redeem-used-title": "Ver claves usadas",
"bots-resume-success": "<$1> ha sido pausado.",
"bots-start-success": "<$1> se ha iniciado.",
"bots-stop-success": "<$1> ha sido pausado.",
"bots-syntax": "Sintaxis: nombreJuego{delimiter}clave",
"bots-title": "ASF | Bots",
"commands-response": "$1 Respuesta recibida: $2",
"commands-sent": "Envía comando de $1: $2",
"commands-title": "ASF | Comandos",
"commands-waiting": "$1 Esperando una respuesta...",
"editor-change": "Cambiar bot",
"editor-current": "Actualmente editando:",
"editor-current-bot": "Editando: <b>$1</b>",
"editor-save": "Guardar",
"editor-save-confirm": "Se ha actualizado <$1> y su fichero de configuración.",
"editor-title": "ASF | Editor de configuración",
"editor-update": "La configuración se actualizará y <$1> se reiniciará!",
"editor-update-confirm": "¡Sí, actualizar configuración!",
"generator-change": "Cambiar modo",
"generator-current": "Modo actual:",
"generator-current-bot": "Modo actual: <b>$1</b>",
"generator-download": "Descarga",
"generator-name": "¡Debes ingresar un nombre!",
"generator-title": "ASF | Generador de configuración",
"global-bots": "Bots",
"global-boxed": "Diseño encajonado",
"global-boxed-description": "",
"global-change-language": "Cambiar lenguaje",
"global-changelog": "Registro de cambios",
"global-commands": "Comandos",
"global-config": "Ajustes",
"global-control-panel": "Panel de control",
"global-editor": "Editor",
"global-error-invalid-pw": "¡Debes ingresar una contraseña válida!",
"global-error-title": "¡Error!",
"global-generator": "Generador",
"global-home": "Inicio",
"global-information": "Información",
"global-layout": "Diseño",
"global-log": "Registro",
"global-navigation": "Cambiar modo de navegación",
"global-nightmode": "Modo nocturno",
"global-nightmode-description": "Alternar modo nocturno",
"global-question-title": "¿Estás seguro?",
"global-ram-usage": "Consumo de RAM",
"global-skins": "Temas",
"global-success-title": "¡Éxito!",
"global-uptime": "Tiempo en funcionamiento",
"global-version": "Versión",
"global-wiki": "Wiki",
"log-event-code": "Código de evento: $1",
"log-title": "ASF | Registro",
"placeholder-auth": "Escribe tu contraseña...",
"placeholder-commands": "Escriba el comando...",
"placeholder-generator": "Nombre",
"title-commands": "Comandos",
"title-bots": "Bots"
}

View file

@ -1,87 +0,0 @@
{
"auth-ipc-403": "",
"auth-ipc-header": "",
"auth-ipc-pw-saved": "",
"auth-ipc-pw-wrong": "",
"auth-ipc-text": "",
"auth-title": "",
"bots-confirm-delete": "",
"bots-delete-success": "",
"bots-delimiter": "",
"bots-download": "",
"bots-hide": "Piilota botit",
"bots-hide-offline": "Offline botit",
"bots-hide-inactive": "",
"bots-hide-online": "Online botit",
"bots-infobox-cards": "",
"bots-infobox-games": "",
"bots-infobox-time": "",
"bots-in-use": "Botti ei ole tällä hetkellä käytössä.",
"bots-paused": "",
"bots-pause-success": "",
"bots-recover-files": "",
"bots-redeem-add-button": "",
"bots-redeem-unused-button": "",
"bots-redeem-used-button": "",
"bots-redeem-confirm": "",
"bots-redeem-title": "",
"bots-redeem-add-title": "",
"bots-redeem-unused-title": "",
"bots-redeem-used-title": "",
"bots-resume-success": "",
"bots-start-success": "",
"bots-stop-success": "",
"bots-syntax": "",
"bots-title": "ASF |Botit",
"commands-response": "",
"commands-sent": "",
"commands-title": "ASF | Komennot",
"commands-waiting": "",
"editor-change": "Vaihda bottia",
"editor-current": "Tällä hetkellä muokataan:",
"editor-current-bot": "",
"editor-save": "Tallenna",
"editor-save-confirm": "",
"editor-title": "ASF |Asetus editori",
"editor-update": "",
"editor-update-confirm": "",
"generator-change": "Vaihda tilaa",
"generator-current": "Tämänhetkinen tila:",
"generator-current-bot": "",
"generator-download": "Lataa",
"generator-name": "",
"generator-title": "ASF |Asetus generaattori",
"global-bots": "Botit",
"global-boxed": "",
"global-boxed-description": "",
"global-change-language": "",
"global-changelog": "Päivityshistoria",
"global-commands": "Komennot",
"global-config": "Asetukset",
"global-control-panel": "Ohjauspaneli",
"global-editor": "Editori",
"global-error-invalid-pw": "",
"global-error-title": "",
"global-generator": "Generaattori",
"global-home": "Aloitus",
"global-information": "Tiedot",
"global-layout": "Asettelu",
"global-log": "Loki",
"global-navigation": "Näytä/piilota navigointi",
"global-nightmode": "Yötila",
"global-nightmode-description": "",
"global-question-title": "",
"global-ram-usage": "RAM:in käyttö",
"global-skins": "Skinit",
"global-success-title": "Valmis!",
"global-uptime": "Käynnissäoloaika",
"global-version": "Versio",
"global-wiki": "Wiki",
"log-event-code": "",
"log-title": "ASF | Loki",
"placeholder-auth": "",
"placeholder-commands": "",
"placeholder-generator": "Nimi",
"title-commands": "Komennot",
"title-bots": "Botit"
}

View file

@ -1,87 +0,0 @@
{
"auth-ipc-403": "L'authentification a échoué trop de fois, réessayez dans une heure.",
"auth-ipc-header": "Mot de passe IPC requis",
"auth-ipc-pw-saved": "Votre mot de passe IPC a été enregistré.",
"auth-ipc-pw-wrong": "Votre mot de passe IPC semble incorrect, essayez encore !",
"auth-ipc-text": "Veuillez entrer le mot de passe IPC correct",
"auth-title": "ASF | Authentification",
"bots-confirm-delete": "Oui, supprimer le bot !",
"bots-delete-success": "<$1> et ses fichiers relatifs ont été supprimés.",
"bots-delimiter": "",
"bots-download": "Il n'y a rien à télécharger!",
"bots-hide": "Masquer les bots",
"bots-hide-offline": "Bots hors-ligne",
"bots-hide-inactive": "Bots inactifs",
"bots-hide-online": "Bots en ligne",
"bots-infobox-cards": "Cartes restantes",
"bots-infobox-games": "Jeux restants",
"bots-infobox-time": "Temps restant",
"bots-in-use": "Le bot est actuellement utilisé.",
"bots-paused": "Bot en pause.",
"bots-pause-success": "<$1> a été mis en pause.",
"bots-recover-files": "Vous ne pourrez récupérer aucun fichier de bot !",
"bots-redeem-add-button": "",
"bots-redeem-unused-button": "",
"bots-redeem-used-button": "",
"bots-redeem-confirm": "",
"bots-redeem-title": "Activateur de Jeux de Fond",
"bots-redeem-add-title": "",
"bots-redeem-unused-title": "",
"bots-redeem-used-title": "",
"bots-resume-success": "<$1> a été réactivé.",
"bots-start-success": "<$1> a été démarré.",
"bots-stop-success": "<$1> a été arrêté.",
"bots-syntax": "",
"bots-title": "ASF | Bots",
"commands-response": "$1 Réponse reçue : $2",
"commands-sent": "$1 Commande envoyée : $2",
"commands-title": "ASF | Commandes",
"commands-waiting": "$1 En attente de réponse...",
"editor-change": "Changer de bot",
"editor-current": "En train d'éditer :",
"editor-current-bot": "Édition en cours : <b>$1</b>",
"editor-save": "Sauvegarder",
"editor-save-confirm": "<$1> et son fichier de configuration mis à jour.",
"editor-title": "ASF | Éditeur de configuration",
"editor-update": "La configuration sera mise à jour et <$1> redémarrera !",
"editor-update-confirm": "Oui, mettre à jour la configuration !",
"generator-change": "Changer de mode",
"generator-current": "Mode actuel :",
"generator-current-bot": "Mode actuel : <b>$1</b>",
"generator-download": "Téléchargement",
"generator-name": "",
"generator-title": "ASF | Générateur de config",
"global-bots": "Bots",
"global-boxed": "Mise en page en boîtes",
"global-boxed-description": "Basculer l'interface en boîtes",
"global-change-language": "Changer la langue",
"global-changelog": "Liste des changements",
"global-commands": "Commandes",
"global-config": "Configuration",
"global-control-panel": "Panneau de Configuration",
"global-editor": "Editeur",
"global-error-invalid-pw": "",
"global-error-title": "Erreur !",
"global-generator": "Générateur",
"global-home": "Accueil",
"global-information": "Information",
"global-layout": "Mise en page",
"global-log": "Log",
"global-navigation": "Activer navigation",
"global-nightmode": "Mode nuit",
"global-nightmode-description": "Basculer le mode nuit",
"global-question-title": "Êtes-vous sûr ?",
"global-ram-usage": "Utilisation de la RAM",
"global-skins": "Thèmes",
"global-success-title": "Succès !",
"global-uptime": "Temps d'activité",
"global-version": "Version",
"global-wiki": "Wiki",
"log-event-code": "Code dévénement : $1",
"log-title": "ASF | Log",
"placeholder-auth": "Tapez votre mot de passe...",
"placeholder-commands": "Tapez une commande...",
"placeholder-generator": "Nom",
"title-commands": "Commandes",
"title-bots": "Bots"
}

View file

@ -1,87 +0,0 @@
{
"auth-ipc-403": "",
"auth-ipc-header": "",
"auth-ipc-pw-saved": "",
"auth-ipc-pw-wrong": "",
"auth-ipc-text": "",
"auth-title": "",
"bots-confirm-delete": "",
"bots-delete-success": "",
"bots-delimiter": "",
"bots-download": "",
"bots-hide": "להחביא בוטים",
"bots-hide-offline": "בוטים לא מקוונים",
"bots-hide-inactive": "",
"bots-hide-online": "בוטים מופעלים",
"bots-infobox-cards": "",
"bots-infobox-games": "",
"bots-infobox-time": "",
"bots-in-use": "הבוט נמצא בשימוש.",
"bots-paused": "",
"bots-pause-success": "",
"bots-recover-files": "",
"bots-redeem-add-button": "",
"bots-redeem-unused-button": "",
"bots-redeem-used-button": "",
"bots-redeem-confirm": "",
"bots-redeem-title": "רקע משחק",
"bots-redeem-add-title": "",
"bots-redeem-unused-title": "",
"bots-redeem-used-title": "",
"bots-resume-success": "",
"bots-start-success": "",
"bots-stop-success": "",
"bots-syntax": "",
"bots-title": "ASF | בוטים",
"commands-response": "",
"commands-sent": "",
"commands-title": "ASF | פקודות",
"commands-waiting": "",
"editor-change": "שינוי בוט",
"editor-current": "כעת עריכה:",
"editor-current-bot": "",
"editor-save": "שמירה",
"editor-save-confirm": "",
"editor-title": "ASF | שינוי הגדרות",
"editor-update": "",
"editor-update-confirm": "",
"generator-change": "שינוי מצב",
"generator-current": "מצב נוכחי:",
"generator-current-bot": "",
"generator-download": "הורדה",
"generator-name": "",
"generator-title": "ASF | יוצר הגדרות",
"global-bots": "בוטים",
"global-boxed": "פריסת מסגרת",
"global-boxed-description": "",
"global-change-language": "",
"global-changelog": "יומן שינוים",
"global-commands": "פקודות",
"global-config": "הגדרות",
"global-control-panel": "לוח הבקרה",
"global-editor": "עורך",
"global-error-invalid-pw": "",
"global-error-title": "",
"global-generator": "יוצר",
"global-home": "דף בית",
"global-information": "מידע",
"global-layout": "פריסה",
"global-log": "יומן",
"global-navigation": "הפעלה/כיבוי ניווט",
"global-nightmode": "מצב לילה",
"global-nightmode-description": "",
"global-question-title": "",
"global-ram-usage": "שימוש בזיכרון",
"global-skins": "סקינים (מעטפות)",
"global-success-title": "הצלחה!",
"global-uptime": "זמן פעולה תקינה",
"global-version": "גירסה",
"global-wiki": "Wiki",
"log-event-code": "",
"log-title": "ASF | יומן",
"placeholder-auth": "",
"placeholder-commands": "",
"placeholder-generator": "שם",
"title-commands": "פקודות",
"title-bots": "בוטים"
}

View file

@ -1,87 +0,0 @@
{
"auth-ipc-403": "Túl sokszor nem sikerült a hitelesítés, próbáld újra egy óra múlva.",
"auth-ipc-header": "IPC jelszó kötelező",
"auth-ipc-pw-saved": "Az IPC jelszavad elmentve.",
"auth-ipc-pw-wrong": "Az IPC jelszavad rossznak tűnik,próbáld újra!",
"auth-ipc-text": "Kérlek a helyes jelszót írd be!",
"auth-title": "ASF | Hitelesítés",
"bots-confirm-delete": "Igen, töröld a botot!",
"bots-delete-success": "<$1> és az összes kapcsolódó fájl törölve.",
"bots-delimiter": "Elválasztó",
"bots-download": "Nincs letöltendő adat!",
"bots-hide": "Botok elrejtése",
"bots-hide-offline": "Offline botok",
"bots-hide-inactive": "Inaktív botok",
"bots-hide-online": "Online botok",
"bots-infobox-cards": "Fennmaradó kártyák",
"bots-infobox-games": "Fennmaradó játékok",
"bots-infobox-time": "Hátralévő Idő",
"bots-in-use": "A bot jelenleg használatban van.",
"bots-paused": "BOT szüneteltetve.",
"bots-pause-success": "<$1> sikeresen szüneteltetve.",
"bots-recover-files": "Nem vagy képes visszaállítani a BOT fájljait!",
"bots-redeem-add-button": "Adj hozzá kulcsokat",
"bots-redeem-unused-button": "Letöltés $1.keys.unused",
"bots-redeem-used-button": "Letöltés $1.keys.used",
"bots-redeem-confirm": "$1 {{PLURAL:$1|Key has|Keys have}} hozzáadva <$2> beváltóhoz .",
"bots-redeem-title": "Beváltó",
"bots-redeem-add-title": "Adj hozzá kulcsokat",
"bots-redeem-unused-title": "Nézd meg a felhasználatlan kulcsokat",
"bots-redeem-used-title": "Nézd meg a használt kulcsokat",
"bots-resume-success": "<$1> szüneteltetve.",
"bots-start-success": "<$1> elindítva.",
"bots-stop-success": "<$1> leállítva.",
"bots-syntax": "Módszer: játékNeve{delimiter}kulcs",
"bots-title": "ASF | Botok",
"commands-response": "$1 Válasz érkezett: $2",
"commands-sent": "$1 Parancs elküldve: $2",
"commands-title": "ASF | Parancsok",
"commands-waiting": "$1 Várakozás a válaszra...",
"editor-change": "Bot váltása",
"editor-current": "Jelenleg szerkesztett:",
"editor-current-bot": "Jelenleg szerkesztés alatt: <b>$1</b>",
"editor-save": "Mentés",
"editor-save-confirm": "<$1> és beállításai frissítve.",
"editor-title": "ASF | Konfigurációszerkesztő",
"editor-update": "A beállítások frissültek és <$1> újraindítva!",
"editor-update-confirm": "Igen, frissítsd a beállításokat!",
"generator-change": "Mód váltása",
"generator-current": "Jelenlegi mód:",
"generator-current-bot": "Jelenlegi mód: <b>$1</b>",
"generator-download": "Letöltés",
"generator-name": "Adj meg egy nevet!",
"generator-title": "ASF | Konfiguráció generátor",
"global-bots": "Botok",
"global-boxed": "Tömör megjelenés",
"global-boxed-description": "Váltás dobozos elrendezésre",
"global-change-language": "Nyelv változtatása",
"global-changelog": "Változási napló",
"global-commands": "Parancsok",
"global-config": "Konfiguráció",
"global-control-panel": "Vezérlőpult",
"global-editor": "Szerkesztő",
"global-error-invalid-pw": "Add meg a helyes jelszót!",
"global-error-title": "Hiba!",
"global-generator": "Generátor",
"global-home": "Főoldal",
"global-information": "Információ",
"global-layout": "Elrendezés",
"global-log": "Napló",
"global-navigation": "Navigáció váltása",
"global-nightmode": "Éjszakai mód",
"global-nightmode-description": "Éjszakai mód ki- / bekapcsolása",
"global-question-title": "Biztos vagy benne?",
"global-ram-usage": "Memóriahasználat",
"global-skins": "Kinézetek",
"global-success-title": "Kész!",
"global-uptime": "Üzemidő",
"global-version": "Verzió",
"global-wiki": "Wiki",
"log-event-code": "Esemény kódja: $1",
"log-title": "ASF | Napló",
"placeholder-auth": "Írd be a jelszavad...",
"placeholder-commands": "Írj be egy parancsot...",
"placeholder-generator": "Név",
"title-commands": "Parancsok",
"title-bots": "Botok"
}

View file

@ -1,87 +0,0 @@
{
"auth-ipc-403": "",
"auth-ipc-header": "",
"auth-ipc-pw-saved": "",
"auth-ipc-pw-wrong": "",
"auth-ipc-text": "",
"auth-title": "",
"bots-confirm-delete": "",
"bots-delete-success": "",
"bots-delimiter": "",
"bots-download": "",
"bots-hide": "",
"bots-hide-offline": "",
"bots-hide-inactive": "",
"bots-hide-online": "",
"bots-infobox-cards": "",
"bots-infobox-games": "",
"bots-infobox-time": "",
"bots-in-use": "Bot saat ini sedang digunakan.",
"bots-paused": "",
"bots-pause-success": "",
"bots-recover-files": "",
"bots-redeem-add-button": "",
"bots-redeem-unused-button": "",
"bots-redeem-used-button": "",
"bots-redeem-confirm": "",
"bots-redeem-title": "",
"bots-redeem-add-title": "",
"bots-redeem-unused-title": "",
"bots-redeem-used-title": "",
"bots-resume-success": "",
"bots-start-success": "",
"bots-stop-success": "",
"bots-syntax": "",
"bots-title": "",
"commands-response": "",
"commands-sent": "",
"commands-title": "",
"commands-waiting": "",
"editor-change": "",
"editor-current": "",
"editor-current-bot": "",
"editor-save": "",
"editor-save-confirm": "",
"editor-title": "",
"editor-update": "",
"editor-update-confirm": "",
"generator-change": "",
"generator-current": "",
"generator-current-bot": "",
"generator-download": "Unduhan",
"generator-name": "",
"generator-title": "",
"global-bots": "",
"global-boxed": "",
"global-boxed-description": "",
"global-change-language": "",
"global-changelog": "",
"global-commands": "",
"global-config": "",
"global-control-panel": "",
"global-editor": "",
"global-error-invalid-pw": "",
"global-error-title": "",
"global-generator": "",
"global-home": "Rumah",
"global-information": "",
"global-layout": "",
"global-log": "",
"global-navigation": "",
"global-nightmode": "",
"global-nightmode-description": "",
"global-question-title": "",
"global-ram-usage": "",
"global-skins": "",
"global-success-title": "Sukses!",
"global-uptime": "",
"global-version": "",
"global-wiki": "",
"log-event-code": "",
"log-title": "",
"placeholder-auth": "",
"placeholder-commands": "",
"placeholder-generator": "Nama",
"title-commands": "",
"title-bots": ""
}

View file

@ -1,87 +0,0 @@
{
"auth-ipc-403": "Autenticazione fallita troppe volte, provare di nuovo tra un'ora.",
"auth-ipc-header": "Password IPC necessaria",
"auth-ipc-pw-saved": "La password IPC è stata salvata.",
"auth-ipc-pw-wrong": "La password IPC sembra essere sbagliata, riprova!",
"auth-ipc-text": "Si prega di inserire la password corretta di IPC",
"auth-title": "ASF | Autenticazione",
"bots-confirm-delete": "Sì, elimina il bot!",
"bots-delete-success": "<$1> e tutti i relativi file sono stati eliminati.",
"bots-delimiter": "Delimitatore",
"bots-download": "Non c'è niente da scaricare!",
"bots-hide": "Nascondi bot",
"bots-hide-offline": "Bot offline",
"bots-hide-inactive": "Bot inattivi",
"bots-hide-online": "Bot online",
"bots-infobox-cards": "Carte rimanenti",
"bots-infobox-games": "Giochi rimanenti",
"bots-infobox-time": "Tempo rimanente",
"bots-in-use": "Il bot è attualmente in uso.",
"bots-paused": "Il Bot è in pausa.",
"bots-pause-success": "<$1> è ora in pausa.",
"bots-recover-files": "Non sarai in grado di recuperare alcun file bot!",
"bots-redeem-add-button": "Aggiungi chiave",
"bots-redeem-unused-button": "Scarica $1.keys.unused",
"bots-redeem-used-button": "Scarica $1.keys.used",
"bots-redeem-confirm": "$1 {{PLURAL:$1|La chiave è stata aggiunta|Le chiavi sono state aggiunte}} al <$2> riscattatore in background.",
"bots-redeem-title": "Riscatto giochi in background",
"bots-redeem-add-title": "Aggiungi chiavi",
"bots-redeem-unused-title": "Visualizza chiavi non usate",
"bots-redeem-used-title": "Visualizza chiavi usate",
"bots-resume-success": "<$1> è stato ripreso.",
"bots-start-success": "<$1> è stato avviato.",
"bots-stop-success": "<$1> è stato arrestato.",
"bots-syntax": "Sintassi: nomeGioco{delimiter}chiave",
"bots-title": "ASF | Bot",
"commands-response": "$1 risposta ricevuta: $2",
"commands-sent": "Inviato di comando $1: $2",
"commands-title": "ASF | Comandi",
"commands-waiting": "In attesa di risposta da $1...",
"editor-change": "Cambia bot",
"editor-current": "Attualmente in modifica:",
"editor-current-bot": "Attualmente modificando: <b>$1</b>",
"editor-save": "Salva",
"editor-save-confirm": "<$1> e il relativo file delle configurazioni sono stati aggiornati.",
"editor-title": "ASF | Editor di configurazione",
"editor-update": "La configurazione verrà aggiornata e <$1> verrà riavviato!",
"editor-update-confirm": "Sì, aggiorna la configurazione!",
"generator-change": "Cambia modalità",
"generator-current": "Modalità attuale:",
"generator-current-bot": "Modalità corrente: <b>$1</b>",
"generator-download": "Scarica",
"generator-name": "Devi inserire un nome!",
"generator-title": "ASF | Generatore di configurazione",
"global-bots": "Bot",
"global-boxed": "Layout quadrato",
"global-boxed-description": "Attiva/Disattiva layout quadrato",
"global-change-language": "Cambia lingua",
"global-changelog": "Registro delle modifiche",
"global-commands": "Comandi",
"global-config": "Configurazione",
"global-control-panel": "Pannello di controllo",
"global-editor": "Editor",
"global-error-invalid-pw": "Devi inserire una password valida!",
"global-error-title": "Errore!",
"global-generator": "Generatore",
"global-home": "Homepage",
"global-information": "Informazioni",
"global-layout": "Layout",
"global-log": "Log",
"global-navigation": "Attiva/disattiva navigazione",
"global-nightmode": "Modalità notturna",
"global-nightmode-description": "Attiva/Disattiva modalità notturna",
"global-question-title": "Ne sei sicuro?",
"global-ram-usage": "RAM utilizzata",
"global-skins": "Temi",
"global-success-title": "Operazione riuscita!",
"global-uptime": "Tempo di attività",
"global-version": "Versione",
"global-wiki": "Wiki",
"log-event-code": "Codice evento: $1",
"log-title": "ASF | Log",
"placeholder-auth": "Digitare la password...",
"placeholder-commands": "Digitare il comando...",
"placeholder-generator": "Nome",
"title-commands": "Comandi",
"title-bots": "Bot"
}

View file

@ -1,87 +0,0 @@
{
"auth-ipc-403": "",
"auth-ipc-header": "",
"auth-ipc-pw-saved": "",
"auth-ipc-pw-wrong": "",
"auth-ipc-text": "",
"auth-title": "",
"bots-confirm-delete": "",
"bots-delete-success": "",
"bots-delimiter": "",
"bots-download": "",
"bots-hide": "Botを非表示",
"bots-hide-offline": "オフラインのBot",
"bots-hide-inactive": "",
"bots-hide-online": "オンラインのBot",
"bots-infobox-cards": "",
"bots-infobox-games": "",
"bots-infobox-time": "",
"bots-in-use": "Botは現在使用されています。",
"bots-paused": "",
"bots-pause-success": "",
"bots-recover-files": "",
"bots-redeem-add-button": "",
"bots-redeem-unused-button": "",
"bots-redeem-used-button": "",
"bots-redeem-confirm": "",
"bots-redeem-title": "",
"bots-redeem-add-title": "",
"bots-redeem-unused-title": "",
"bots-redeem-used-title": "",
"bots-resume-success": "",
"bots-start-success": "",
"bots-stop-success": "",
"bots-syntax": "",
"bots-title": "ASF | Bots",
"commands-response": "",
"commands-sent": "",
"commands-title": "",
"commands-waiting": "",
"editor-change": "Botの変更",
"editor-current": "編集中:",
"editor-current-bot": "",
"editor-save": "保存",
"editor-save-confirm": "",
"editor-title": "",
"editor-update": "",
"editor-update-confirm": "",
"generator-change": "モード変更",
"generator-current": "現在のモード:",
"generator-current-bot": "",
"generator-download": "ダウンロード",
"generator-name": "",
"generator-title": "",
"global-bots": "",
"global-boxed": "ボックスレイアウト",
"global-boxed-description": "",
"global-change-language": "",
"global-changelog": "チェンジログ",
"global-commands": "コマンド",
"global-config": "設定",
"global-control-panel": "コントロールパネル",
"global-editor": "",
"global-error-invalid-pw": "",
"global-error-title": "",
"global-generator": "ジェネレーター",
"global-home": "ホーム",
"global-information": "インフォメーション",
"global-layout": "レイアウト",
"global-log": "ログ",
"global-navigation": "ナビゲーションの切り替え",
"global-nightmode": "ナイトモード",
"global-nightmode-description": "",
"global-question-title": "",
"global-ram-usage": "RAMの使用量",
"global-skins": "スキン",
"global-success-title": "成功!",
"global-uptime": "稼働時間",
"global-version": "バージョン",
"global-wiki": "Wiki",
"log-event-code": "",
"log-title": "",
"placeholder-auth": "",
"placeholder-commands": "",
"placeholder-generator": "名前",
"title-commands": "コマンド",
"title-bots": ""
}

View file

@ -1,87 +0,0 @@
{
"auth-ipc-403": "You failed to authenticate properly too many times, try again in an hour.",
"auth-ipc-header": "IPC password required",
"auth-ipc-pw-saved": "Your IPC password has been saved.",
"auth-ipc-pw-wrong": "Your IPC password seems to be wrong, try again!",
"auth-ipc-text": "Please enter the correct IPC password",
"auth-title": "ASF | Authentication",
"bots-confirm-delete": "Yes, delete bot!",
"bots-delete-success": "<$1> and all related files have been deleted.",
"bots-delimiter": "Delimiter",
"bots-download": "There is nothing to download!",
"bots-hide": "Hide bots",
"bots-hide-offline": "Offline bots",
"bots-hide-inactive": "Inactive bots",
"bots-hide-online": "Online bots",
"bots-infobox-cards": "Cards Remaining",
"bots-infobox-games": "Games Remaining",
"bots-infobox-time": "Time Remaining",
"bots-in-use": "Bot is currently being used.",
"bots-paused": "Bot is paused.",
"bots-pause-success": "<$1> has been paused.",
"bots-recover-files": "You will not be able to recover any bot files!",
"bots-redeem-add-button": "Add keys",
"bots-redeem-unused-button": "Download $1.keys.unused",
"bots-redeem-used-button": "Download $1.keys.used",
"bots-redeem-confirm": "$1 {{PLURAL:$1|Key has|Keys have}} been added to <$2> background redeemer.",
"bots-redeem-title": "Background games redeemer",
"bots-redeem-add-title": "Add keys",
"bots-redeem-unused-title": "View unused keys",
"bots-redeem-used-title": "View used keys",
"bots-resume-success": "<$1> has been resumed.",
"bots-start-success": "<$1> has been started.",
"bots-stop-success": "<$1> has been stopped.",
"bots-syntax": "Syntax: gameName{delimiter}key",
"bots-title": "ASF | Bots",
"commands-response": "$1 Response received: $2",
"commands-sent": "$1 Command sent: $2",
"commands-title": "ASF | Commands",
"commands-waiting": "$1 Waiting for response...",
"editor-change": "Change bot",
"editor-current": "Currently editing:",
"editor-current-bot": "Currently editing: <b>$1</b>",
"editor-save": "Save",
"editor-save-confirm": "<$1> and its config file got updated.",
"editor-title": "ASF | Config Editor",
"editor-update": "The config will be updated and <$1> will be restarted!",
"editor-update-confirm": "Yes, update config!",
"generator-change": "Change mode",
"generator-current": "Current mode:",
"generator-current-bot": "Current mode: <b>$1</b>",
"generator-download": "Download",
"generator-name": "You must enter a name!",
"generator-title": "ASF | Config Generator",
"global-bots": "Bots",
"global-boxed": "Boxed Layout",
"global-boxed-description": "Toggle boxed layout",
"global-change-language": "Change language",
"global-changelog": "Changelog",
"global-commands": "Commands",
"global-config": "Config",
"global-control-panel": "Control Panel",
"global-editor": "Editor",
"global-error-invalid-pw": "You must enter a valid password!",
"global-error-title": "Error!",
"global-generator": "Generator",
"global-home": "Home",
"global-information": "Information",
"global-layout": "Layout",
"global-log": "Log",
"global-navigation": "Toggle navigation",
"global-nightmode": "Nightmode",
"global-nightmode-description": "Toggle nightmode",
"global-question-title": "Are you sure?",
"global-ram-usage": "RAM Usage",
"global-skins": "Skins",
"global-success-title": "Success!",
"global-uptime": "Uptime",
"global-version": "Version",
"global-wiki": "Wiki",
"log-event-code": "Event code: $1",
"log-title": "ASF | Log",
"placeholder-auth": "Type your password...",
"placeholder-commands": "Type command...",
"placeholder-generator": "Name",
"title-commands": "Commands",
"title-bots": "Bots"
}

View file

@ -1,87 +0,0 @@
{
"auth-ipc-403": "너무 많이 인증에 실패했습니다. 한시간 후에 다시 시도하세요.",
"auth-ipc-header": "IPC 비밀번호 필요",
"auth-ipc-pw-saved": "IPC 비밀번호가 저장되었습니다.",
"auth-ipc-pw-wrong": "IPC 비밀번호가 틀렸습니다. 다시 시도하세요.",
"auth-ipc-text": "올바른 IPC 비밀번호를 입력하세요.",
"auth-title": "ASF | 인증",
"bots-confirm-delete": "예. 봇을 삭제합니다.",
"bots-delete-success": "<$1>과 모든 관련 파일이 삭제되었습니다.",
"bots-delimiter": "구분 기호",
"bots-download": "다운로드할 것이 없습니다.",
"bots-hide": "봇 숨기기",
"bots-hide-offline": "오프라인 봇",
"bots-hide-inactive": "비활성 봇",
"bots-hide-online": "온라인 봇",
"bots-infobox-cards": "남은 카드",
"bots-infobox-games": "남은 게임",
"bots-infobox-time": "남은 시간",
"bots-in-use": "봇 - 현재 사용 중.",
"bots-paused": "봇이 일시정지되었습니다.",
"bots-pause-success": "<$1> 이 일시정지되었습니다.",
"bots-recover-files": "어떠한 봇 파일도 복구할 수 없습니다.",
"bots-redeem-add-button": "키 추가",
"bots-redeem-unused-button": "$1.keys.unused 다운로드",
"bots-redeem-used-button": "$1.keys.used 다운로드",
"bots-redeem-confirm": "$1 {{PLURAL:$1|개의 키|개의 키}}가 <$2> 봇의 백그라운드 게임 등록기에 추가되었습니다.",
"bots-redeem-title": "백그라운드 게임 등록기",
"bots-redeem-add-title": "키 추가",
"bots-redeem-unused-title": "사용되지 않은 키 확인",
"bots-redeem-used-title": "사용된 키 확인",
"bots-resume-success": "<$1>이 다시 시작되었습니다.",
"bots-start-success": "<$1>이 시작되었습니다.",
"bots-stop-success": "<$1>이 중지되었습니다.",
"bots-syntax": "입력형식: 게임이름{구분자}키",
"bots-title": "ASF | 봇",
"commands-response": "$1 응답 수신: $2",
"commands-sent": "$1 명령 전송: $2",
"commands-title": "ASF | 명령어",
"commands-waiting": "$1 응답을 기다리는 중...",
"editor-change": "봇 변경",
"editor-current": "현재 설정 편집중인 봇:",
"editor-current-bot": "현재 설정 편집중인 봇: <b>$1</b>",
"editor-save": "저장",
"editor-save-confirm": "<$1> 봇의 환경설정이 저장되었습니다.",
"editor-title": "ASF | 환경설정 편집기",
"editor-update": "환경설정 내용을 저장하고 <$1> 봇을 다시 시작합니다.",
"editor-update-confirm": "예. 설정을 저장합니다.",
"generator-change": "모드 변경",
"generator-current": "현재 모드:",
"generator-current-bot": "현재 모드: <b>$1</b>",
"generator-download": "다운로드",
"generator-name": "이름을 기입하십시오.",
"generator-title": "ASF | 환경설정 생성기",
"global-bots": "봇",
"global-boxed": "박스 레이아웃",
"global-boxed-description": "박스 레이아웃 켬/끔",
"global-change-language": "언어 바꾸기",
"global-changelog": "변경사항",
"global-commands": "명령어",
"global-config": "환경설정",
"global-control-panel": "제어판",
"global-editor": "편집기",
"global-error-invalid-pw": "정확한 비밀번호를 입력하십시오.",
"global-error-title": "오류!",
"global-generator": "생성기",
"global-home": "홈",
"global-information": "정보",
"global-layout": "레이아웃",
"global-log": "로그",
"global-navigation": "네비게이션 전환",
"global-nightmode": "야간모드",
"global-nightmode-description": "야간모드 켬/끔",
"global-question-title": "확실합니까?",
"global-ram-usage": "RAM 사용량",
"global-skins": "스킨",
"global-success-title": "성공!",
"global-uptime": "가동시간",
"global-version": "버전",
"global-wiki": "위키",
"log-event-code": "이벤트 코드: $1",
"log-title": "ASF | 로그",
"placeholder-auth": "비밀번호를 입력하십시오.",
"placeholder-commands": "여기에 명령을 입력하세요...",
"placeholder-generator": "이름",
"title-commands": "명령어",
"title-bots": "봇"
}

View file

@ -1,87 +0,0 @@
{
"auth-ipc-403": "Jūs nesugebėjote tinkamai autentifikuotis per daug kartų, prašome bandyti po valandos.",
"auth-ipc-header": "IPC slaptažodis būtinas",
"auth-ipc-pw-saved": "Jūsų IPC slaptažodis buvo išsaugotas.",
"auth-ipc-pw-wrong": "Atrodo, Jūsų IPC slaptažodis yra blogas, bandykite dar kartą!",
"auth-ipc-text": "",
"auth-title": "ASF | Autentifikacija",
"bots-confirm-delete": "Taip, ištrinti botą!",
"bots-delete-success": "<$1> ir kiti susiją failai buvo ištrinti.",
"bots-delimiter": "",
"bots-download": "",
"bots-hide": "Slėpti botus",
"bots-hide-offline": "Atsijungę botai",
"bots-hide-inactive": "",
"bots-hide-online": "Prisijungę botai",
"bots-infobox-cards": "Likę kortelių",
"bots-infobox-games": "Likę žaidimų",
"bots-infobox-time": "Likęs laikas",
"bots-in-use": "Botas šiuo metu yra naudojamas.",
"bots-paused": "Botas yra sustabdytas.",
"bots-pause-success": "<$1> buvo sustabdytas.",
"bots-recover-files": "Jūs nebegalėsite atkurti jokių boto failų!",
"bots-redeem-add-button": "Pridėti cd-raktus",
"bots-redeem-unused-button": "",
"bots-redeem-used-button": "",
"bots-redeem-confirm": "",
"bots-redeem-title": "Pasyvusis žaidimų aktyvatorius",
"bots-redeem-add-title": "Pridėti cd-raktus",
"bots-redeem-unused-title": "",
"bots-redeem-used-title": "",
"bots-resume-success": "<$1> buvo pratęstas.",
"bots-start-success": "<$1> buvo pradėtas.",
"bots-stop-success": "<$1> buvo sustabdytas.",
"bots-syntax": "",
"bots-title": "ASF | Botai",
"commands-response": "$1 Atsakymas gauta: $2",
"commands-sent": "$1 Komanda išsiųsta: $2",
"commands-title": "ASF | Komandos",
"commands-waiting": "$1 Laukiama atsakymo...",
"editor-change": "Keisti botą",
"editor-current": "Šiuo metu redaguojama:",
"editor-current-bot": "Šiuo metu redaguojama: <b>$1</b>",
"editor-save": "Išsaugoti",
"editor-save-confirm": "",
"editor-title": "ASF | Nustatymų redaktorius",
"editor-update": "Konfigūracija bus atnaujinta ir <$1> perkrautas!",
"editor-update-confirm": "Taip, atnaujinti konfigūraciją!",
"generator-change": "Pakeisti režimą",
"generator-current": "Dabartinis režimas:",
"generator-current-bot": "Dabartinis režimas: <b>$1</b>",
"generator-download": "Parsisiųsti",
"generator-name": "",
"generator-title": "ASF | Nustatymų generatorius",
"global-bots": "Botai",
"global-boxed": "Dėžutės išdėstymas",
"global-boxed-description": "Įjungti dėžutės išdėstymą",
"global-change-language": "Pakeisti kalbą",
"global-changelog": "Pakeitimai",
"global-commands": "Komandos",
"global-config": "Nustatymai",
"global-control-panel": "Valdymo panelė",
"global-editor": "Redaktorius",
"global-error-invalid-pw": "",
"global-error-title": "Klaida!",
"global-generator": "Generatorius",
"global-home": "Pradžia",
"global-information": "Informacija",
"global-layout": "Išdėstymas",
"global-log": "Žurnalas",
"global-navigation": "Įjungti naršymo režimą",
"global-nightmode": "Naktinis režimas",
"global-nightmode-description": "Įjungti naktinį režimą",
"global-question-title": "Ar esate įsitikinę?",
"global-ram-usage": "RAM naudojimas",
"global-skins": "Išvaizda",
"global-success-title": "Sėkmingai!",
"global-uptime": "Veikimo laikas",
"global-version": "Versija",
"global-wiki": "Vikipedija",
"log-event-code": "Įvykio kodas: $1",
"log-title": "ASF | Žurnalas",
"placeholder-auth": "Įveskite jūsų slaptažodį...",
"placeholder-commands": "Įveskite komandą...",
"placeholder-generator": "Pavadinimas",
"title-commands": "Komandos",
"title-bots": "Botai"
}

View file

@ -1,87 +0,0 @@
{
"auth-ipc-403": "Authenticatie is te vaak mislukt, probeer het over een uur opnieuw.",
"auth-ipc-header": "IPC-wachtwoord vereist",
"auth-ipc-pw-saved": "Je IPC-wachtwoord is opgeslagen.",
"auth-ipc-pw-wrong": "Je IPC-wachtwoord is onjuist, probeer het opnieuw!",
"auth-ipc-text": "Voer het correcte IPC-wachtwoord in",
"auth-title": "ASF | Authenticatie",
"bots-confirm-delete": "Ja, verwijder bot!",
"bots-delete-success": "<$1> en alle bijbehorende bestanden zijn verwijderd.",
"bots-delimiter": "Scheidingsteken",
"bots-download": "Er is niets te downloaden!",
"bots-hide": "Verberg bots",
"bots-hide-offline": "Offline bots",
"bots-hide-inactive": "Inactieve bots",
"bots-hide-online": "Online bots",
"bots-infobox-cards": "Resterende kaarten",
"bots-infobox-games": "Resterende spellen",
"bots-infobox-time": "Resterende tijd",
"bots-in-use": "Bot is momenteel in gebruik.",
"bots-paused": "Bot is gepauzeerd.",
"bots-pause-success": "<$1> is gepauzeerd.",
"bots-recover-files": "Je kunt geen bot-bestanden herstellen!",
"bots-redeem-add-button": "Productcodes toevoegen",
"bots-redeem-unused-button": "Download $1.keys.unused",
"bots-redeem-used-button": "Download $1.keys.used",
"bots-redeem-confirm": "$1 {{PLURAL:$1|productsleutel is|productsleutels zijn}} toegevoegd aan <$2> om op de achtergrond geactiveerd te worden.",
"bots-redeem-title": "Productactivering op de achtergrond",
"bots-redeem-add-title": "Productcodes toevoegen",
"bots-redeem-unused-title": "Bekijk ongebruikte productcodes",
"bots-redeem-used-title": "Bekijk gebruikte productcodes",
"bots-resume-success": "<$1> is hervat.",
"bots-start-success": "<$1> is gestart.",
"bots-stop-success": "<$1> is gestopt.",
"bots-syntax": "Syntaxis: spelnaam{delimiter}productcode",
"bots-title": "ASF | Bots",
"commands-response": "$1 Reactie ontvangen: $2",
"commands-sent": "$1 Commando verzonden: $2",
"commands-title": "ASF | Commando's",
"commands-waiting": "$1 Wachten op reactie...",
"editor-change": "Switch bot",
"editor-current": "Nu aan het bewerken:",
"editor-current-bot": "Momenteel aan het bewerken: <b>$1</b>",
"editor-save": "Opslaan",
"editor-save-confirm": "<$1>en het bijbehorende configuratiebestand is bijgewerkt.",
"editor-title": "ASF | Config Editor",
"editor-update": "De configuratie wordt bijgewerkt en <$1> wordt opnieuw gestart!",
"editor-update-confirm": "Ja, update de configuratie!",
"generator-change": "Modus wijzigen",
"generator-current": "Huidige modus:",
"generator-current-bot": "Huidige modus: <b>$1</b>",
"generator-download": "Download",
"generator-name": "Je moet een naam invoeren!",
"generator-title": "ASF | Config Generator",
"global-bots": "Bots",
"global-boxed": "Boxed lay-out",
"global-boxed-description": "Boxed lay-out in-/uitschakelen",
"global-change-language": "Taal wijzigen",
"global-changelog": "Versiegeschiedenis",
"global-commands": "Commando's",
"global-config": "Configuratie",
"global-control-panel": "Configuratiescherm",
"global-editor": "Editor",
"global-error-invalid-pw": "Je moet een geldig wachtwoord invoeren!",
"global-error-title": "Fout!",
"global-generator": "Generator",
"global-home": "Homepagina",
"global-information": "Informatie",
"global-layout": "Lay-out",
"global-log": "Log",
"global-navigation": "Switch navigatie",
"global-nightmode": "Nachtmodus",
"global-nightmode-description": "Nachtmodus in-/uitschakelen",
"global-question-title": "Weet je het zeker?",
"global-ram-usage": "RAM-gebruik",
"global-skins": "Uiterlijk",
"global-success-title": "Succesvol!",
"global-uptime": "Actief",
"global-version": "Versie",
"global-wiki": "Wiki",
"log-event-code": "Gebeurteniscode: $1",
"log-title": "ASF | Log",
"placeholder-auth": "Voer je wachtwoord in...",
"placeholder-commands": "Commando invoeren...",
"placeholder-generator": "Naam",
"title-commands": "Commando's",
"title-bots": "Bots"
}

View file

@ -1,87 +0,0 @@
{
"auth-ipc-403": "Nie udało się zalogować zbyt wiele razy, spróbuj ponownie za godzinę.",
"auth-ipc-header": "Wymagane hasło IPC",
"auth-ipc-pw-saved": "Twoje hasło IPC zostało zapisane.",
"auth-ipc-pw-wrong": "Hasło IPC wydaje się być niepoprawne, spróbuj ponownie!",
"auth-ipc-text": "Wprowadź poprawne hasło IPC",
"auth-title": "ASF | Logowanie",
"bots-confirm-delete": "Tak, usuń bota!",
"bots-delete-success": "<$1> i wszystkie powiązane pliki zostały usunięte.",
"bots-delimiter": "Ogranicznik",
"bots-download": "Nie ma nic do ściągnięcia!",
"bots-hide": "Ukryj boty",
"bots-hide-offline": "Boty w trybie offline",
"bots-hide-inactive": "Nieaktywne boty",
"bots-hide-online": "Boty w trybie online",
"bots-infobox-cards": "Pozostałe karty",
"bots-infobox-games": "Pozostałe gry",
"bots-infobox-time": "Pozostały czas",
"bots-in-use": "Bot jest aktualnie używany.",
"bots-paused": "Bot jest wstrzymany.",
"bots-pause-success": "<$1> został wstrzymany.",
"bots-recover-files": "Nie będziesz w stanie odzyskać żadnych plików bota!",
"bots-redeem-add-button": "Dodaj klucze",
"bots-redeem-unused-button": "Ściągnij $1.keys.unused",
"bots-redeem-used-button": "Ściągnij $1.keys.used",
"bots-redeem-confirm": "$1 {{PLURAL:$1|Klucz został dodany|Klucze zostały dodane}} do <$2> aktywacji w tle.",
"bots-redeem-title": "Aktywacja gier w tle",
"bots-redeem-add-title": "Dodaj klucze",
"bots-redeem-unused-title": "Pokaż nieużyte klucze",
"bots-redeem-used-title": "Pokaż użyte klucze",
"bots-resume-success": "<$1> został wznowiony.",
"bots-start-success": "<$1> został uruchomiony.",
"bots-stop-success": "<$1> został zatrzymany.",
"bots-syntax": "Składnia: nazwaGry{ogranicznik}klucz",
"bots-title": "ASF | Boty",
"commands-response": "$1 Uzyskana odpowiedź: $2",
"commands-sent": "$1 Wysłano polecenie: $2",
"commands-title": "ASF | Komendy",
"commands-waiting": "$1 Oczekiwanie na odpowiedź...",
"editor-change": "Zmień bota",
"editor-current": "Aktualnie edytujesz:",
"editor-current-bot": "Obecnie edytowane: <b>$1</b>",
"editor-save": "Zapisz",
"editor-save-confirm": "<$1> i jego plik konfiguracyjny został zaktualizowany.",
"editor-title": "ASF | Edytor ustawień",
"editor-update": "Plik konfiguracyjny zostanie zaktualizowany i <$1> zostanie zrestartowany!",
"editor-update-confirm": "Tak, aktualizuj plik konfiguracyjny!",
"generator-change": "Zmień tryb",
"generator-current": "Bieżący tryb:",
"generator-current-bot": "Bieżący tryb: <b>$1</b>",
"generator-download": "Pobierz",
"generator-name": "Musisz wprowadzić nazwę!",
"generator-title": "ASF | Generator ustawień",
"global-bots": "Boty",
"global-boxed": "Układ boxed",
"global-boxed-description": "Przełącz tryb okienkowy",
"global-change-language": "Zmień język",
"global-changelog": "Lista zmian",
"global-commands": "Komendy",
"global-config": "Konfiguracja",
"global-control-panel": "Panel sterowania",
"global-editor": "Edytor",
"global-error-invalid-pw": "Musisz wprowadzić poprawne hasło!",
"global-error-title": "Błąd!",
"global-generator": "Generator",
"global-home": "Strona główna",
"global-information": "Informacje",
"global-layout": "Układ",
"global-log": "Dziennik",
"global-navigation": "Przełącz nawigację",
"global-nightmode": "Tryb nocny",
"global-nightmode-description": "Przełącz tryb nocny",
"global-question-title": "Jesteś pewien?",
"global-ram-usage": "Użycie pamięci RAM",
"global-skins": "Skórki",
"global-success-title": "Sukces!",
"global-uptime": "Czas działania",
"global-version": "Wersja",
"global-wiki": "Wiki",
"log-event-code": "Kod zdarzenia: $1",
"log-title": "ASF | Dziennik",
"placeholder-auth": "Wprowadź hasło...",
"placeholder-commands": "Wpisz polecenie...",
"placeholder-generator": "Nazwa",
"title-commands": "Komendy",
"title-bots": "Boty"
}

View file

@ -1,87 +0,0 @@
{
"auth-ipc-403": "A autenticação falhou várias vezes. Tente novamente em uma hora.",
"auth-ipc-header": "Senha IPC necessária",
"auth-ipc-pw-saved": "A sua senha IPC foi salva.",
"auth-ipc-pw-wrong": "Senha IPC incorreta, tente novamente.",
"auth-ipc-text": "Por favor, insira a senha IPC correta",
"auth-title": "ASF | Autenticação",
"bots-confirm-delete": "Sim, excluir bot!",
"bots-delete-success": "<$1> e todos os arquivos relacionados foram excluídos.",
"bots-delimiter": "Delimitador",
"bots-download": "Não há nada para baixar!",
"bots-hide": "Ocultar bots",
"bots-hide-offline": "Bots offline",
"bots-hide-inactive": "Bots inativos",
"bots-hide-online": "Bots online",
"bots-infobox-cards": "Cartas restantes",
"bots-infobox-games": "Jogos restantes",
"bots-infobox-time": "Tempo restante",
"bots-in-use": "O bot está sendo usado.",
"bots-paused": "Bot pausado.",
"bots-pause-success": "<$1> foi pausado.",
"bots-recover-files": "Não será possível recuperar os arquivos do bot!",
"bots-redeem-add-button": "Adicionar keys",
"bots-redeem-unused-button": "Baixar $1.keys.unused",
"bots-redeem-used-button": "Baixar $1.keys.used",
"bots-redeem-confirm": "$1 {{PLURAL:$1|Código foi adicionado|Códigos foram adicionados}} ao ativador em segundo plano de <$2>.",
"bots-redeem-title": "Ativador de códigos em segundo plano",
"bots-redeem-add-title": "Adicionar códigos",
"bots-redeem-unused-title": "Ver códigos não utilizados",
"bots-redeem-used-title": "Ver códigos utilizados",
"bots-resume-success": "<$1> foi retomado.",
"bots-start-success": "<$1> foi iniciado.",
"bots-stop-success": "<$1> foi interrompido.",
"bots-syntax": "Sintaxe: gameName{delimiter}key",
"bots-title": "ASF | Bots",
"commands-response": "$1 Resposta recebida: $2",
"commands-sent": "$1 Comando enviado: $2",
"commands-title": "ASF | Comandos",
"commands-waiting": "$1 Aguardando resposta...",
"editor-change": "Alterar bot",
"editor-current": "Editando:",
"editor-current-bot": "Editando: <b>$1</b>",
"editor-save": "Salvar",
"editor-save-confirm": "<$1> e seu arquivo de configuração foram atualizados.",
"editor-title": "ASF | Editor de configuração",
"editor-update": "A configuração será atualizada e <$1> será reiniciado!",
"editor-update-confirm": "Sim, atualizar configuração!",
"generator-change": "Alterar modo",
"generator-current": "Modo:",
"generator-current-bot": "Modo: <b>$1</b>",
"generator-download": "Baixar",
"generator-name": "Você deve digitar um nome!",
"generator-title": "ASF | Gerador de configuração",
"global-bots": "Bots",
"global-boxed": "Interface de caixa",
"global-boxed-description": "Alternar interface em caixa",
"global-change-language": "Alterar idioma",
"global-changelog": "Atualizações",
"global-commands": "Comandos",
"global-config": "Configurações",
"global-control-panel": "Painel de controle",
"global-editor": "Editor",
"global-error-invalid-pw": "Você deve inserir uma senha válida!",
"global-error-title": "Erro!",
"global-generator": "Gerador",
"global-home": "Início",
"global-information": "Informações",
"global-layout": "Interface",
"global-log": "Registro",
"global-navigation": "Alternar navegação",
"global-nightmode": "Modo noturno",
"global-nightmode-description": "Alternar modo noturno",
"global-question-title": "Tem certeza?",
"global-ram-usage": "Uso de RAM",
"global-skins": "Visuais",
"global-success-title": "Sucesso!",
"global-uptime": "Tempo de atividade",
"global-version": "Versão",
"global-wiki": "Wiki",
"log-event-code": "Código do evento: $1",
"log-title": "ASF | Registro",
"placeholder-auth": "Insira a sua senha...",
"placeholder-commands": "Insira um comando...",
"placeholder-generator": "Nome",
"title-commands": "Comandos",
"title-bots": "Bots"
}

View file

@ -1,87 +0,0 @@
{
"auth-ipc-403": "",
"auth-ipc-header": "",
"auth-ipc-pw-saved": "",
"auth-ipc-pw-wrong": "",
"auth-ipc-text": "",
"auth-title": "",
"bots-confirm-delete": "",
"bots-delete-success": "",
"bots-delimiter": "",
"bots-download": "",
"bots-hide": "",
"bots-hide-offline": "",
"bots-hide-inactive": "",
"bots-hide-online": "",
"bots-infobox-cards": "",
"bots-infobox-games": "",
"bots-infobox-time": "",
"bots-in-use": "O Bot está a ser usado atualmente.",
"bots-paused": "",
"bots-pause-success": "",
"bots-recover-files": "",
"bots-redeem-add-button": "",
"bots-redeem-unused-button": "",
"bots-redeem-used-button": "",
"bots-redeem-confirm": "",
"bots-redeem-title": "",
"bots-redeem-add-title": "",
"bots-redeem-unused-title": "",
"bots-redeem-used-title": "",
"bots-resume-success": "",
"bots-start-success": "",
"bots-stop-success": "",
"bots-syntax": "",
"bots-title": "",
"commands-response": "",
"commands-sent": "",
"commands-title": "",
"commands-waiting": "",
"editor-change": "",
"editor-current": "",
"editor-current-bot": "",
"editor-save": "",
"editor-save-confirm": "",
"editor-title": "",
"editor-update": "",
"editor-update-confirm": "",
"generator-change": "",
"generator-current": "",
"generator-current-bot": "",
"generator-download": "",
"generator-name": "",
"generator-title": "",
"global-bots": "",
"global-boxed": "",
"global-boxed-description": "",
"global-change-language": "",
"global-changelog": "",
"global-commands": "",
"global-config": "",
"global-control-panel": "",
"global-editor": "",
"global-error-invalid-pw": "",
"global-error-title": "",
"global-generator": "",
"global-home": "",
"global-information": "",
"global-layout": "",
"global-log": "",
"global-navigation": "",
"global-nightmode": "",
"global-nightmode-description": "",
"global-question-title": "",
"global-ram-usage": "",
"global-skins": "",
"global-success-title": "Sucesso!",
"global-uptime": "",
"global-version": "",
"global-wiki": "",
"log-event-code": "",
"log-title": "",
"placeholder-auth": "",
"placeholder-commands": "",
"placeholder-generator": "",
"title-commands": "",
"title-bots": ""
}

View file

@ -1,87 +0,0 @@
{
"auth-ipc-403": "Autentificarea ta a eșuat de prea multe ori, reîncearcă într-o oră.",
"auth-ipc-header": "Parolă IPC necesară",
"auth-ipc-pw-saved": "Parola ta IPC a fost salvată.",
"auth-ipc-pw-wrong": "Parola ta IPC pare să fie greșită, încearcă din nou!",
"auth-ipc-text": "Te rugăm să introduci parola corectă IPC",
"auth-title": "ASF | Autentificare",
"bots-confirm-delete": "Da, șterge robotul!",
"bots-delete-success": "<$1> și toate fișierele asociate au fost șterse.",
"bots-delimiter": "Delimitator",
"bots-download": "Nimic de descărcat!",
"bots-hide": "Ascunde boții",
"bots-hide-offline": "Boți offline",
"bots-hide-inactive": "Boți inactivi",
"bots-hide-online": "Boți online",
"bots-infobox-cards": "Cartonașe rămase",
"bots-infobox-games": "Jocuri rămase",
"bots-infobox-time": "Timp rămas",
"bots-in-use": "Botul este folosit momentan.",
"bots-paused": "Robotul este oprit.",
"bots-pause-success": "<$1> a fost oprit.",
"bots-recover-files": "Nu vei mai putea recupera fișierele boților!",
"bots-redeem-add-button": "Adaugă coduri",
"bots-redeem-unused-button": "Descărcă $1.keys.unused",
"bots-redeem-used-button": "Descărcă $1.keys.used",
"bots-redeem-confirm": "$1 {{PLURAL:$1|Codul a|Codurile au}} fost adăugat{{PLURAL:$1||e}} la activatorul de coduri în plan secundar <$2>.",
"bots-redeem-title": "Activator de coduri în plan secundar",
"bots-redeem-add-title": "Adaugă coduri",
"bots-redeem-unused-title": "Vezi codurile nefolosite",
"bots-redeem-used-title": "Vezi codurile folosite",
"bots-resume-success": "<$1> a fost reluat.",
"bots-start-success": "<$1> a fost pornit.",
"bots-stop-success": "<$1> a fost oprit.",
"bots-syntax": "Sintaxă: gameName{delimiter}key",
"bots-title": "ASF | Boți",
"commands-response": "$1 Răspuns primit: $2",
"commands-sent": "$1 Comandă trimisă: $2",
"commands-title": "ASF | Comenzi",
"commands-waiting": "$1 Așteaptă un răspuns...",
"editor-change": "Schimbă botul",
"editor-current": "Se editează în prezent:",
"editor-current-bot": "Momentan editând: <b>$1</b>",
"editor-save": "Salvează",
"editor-save-confirm": "<$1> și fișierele sale de configure au fost actualizate.",
"editor-title": "ASF | Editor de configurații",
"editor-update": "Configurația va fi actualizată și <$1> va fi repornit!",
"editor-update-confirm": "Da, actualizează configurația!",
"generator-change": "Modifică modul",
"generator-current": "Modul actual:",
"generator-current-bot": "Modul curent: <b>$1</b>",
"generator-download": "Descarcă",
"generator-name": "Trebuie să introduci un nume!",
"generator-title": "ASF | Generator de configurații",
"global-bots": "Boți",
"global-boxed": "Aspect restrâns",
"global-boxed-description": "Comutare aspect restrâns",
"global-change-language": "Schimbă limba",
"global-changelog": "Jurnalul modificărilor",
"global-commands": "Comenzi",
"global-config": "Configurație",
"global-control-panel": "Panoul de control",
"global-editor": "Editor",
"global-error-invalid-pw": "Trebuie să introduci o parolă validă!",
"global-error-title": "Eroare!",
"global-generator": "Generator",
"global-home": "Pagina principală",
"global-information": "Informații",
"global-layout": "Aspect",
"global-log": "Log",
"global-navigation": "Comută navigarea",
"global-nightmode": "Mod nocturn",
"global-nightmode-description": "Comută modul nocturn",
"global-question-title": "Ești sigur?",
"global-ram-usage": "Utilizare RAM",
"global-skins": "Skinuri",
"global-success-title": "Succes!",
"global-uptime": "Timp de funcționare",
"global-version": "Versiune",
"global-wiki": "Wiki",
"log-event-code": "Cod eveniment: $1",
"log-title": "ASF | Log",
"placeholder-auth": "Introdu parola...",
"placeholder-commands": "Introdu comanda...",
"placeholder-generator": "Nume",
"title-commands": "Comenzi",
"title-bots": "Boți"
}

View file

@ -1,87 +0,0 @@
{
"auth-ipc-403": "Слишком много неудачных попыток авторизации, попробуйте через час.",
"auth-ipc-header": "Необходим пароль IPC",
"auth-ipc-pw-saved": "Ваш пароль IPC был сохранен.",
"auth-ipc-pw-wrong": "Ваш пароль IPC неправильный, попробуйте ещё раз!",
"auth-ipc-text": "Пожалуйста, введите верный пароль IPC",
"auth-title": "ASF | Аутентификация",
"bots-confirm-delete": "Да, удалить бота!",
"bots-delete-success": "<$1> и все связанные файлы были удалены.",
"bots-delimiter": "Разделитель",
"bots-download": "Нечего скачивать!",
"bots-hide": "Скрыть ботов",
"bots-hide-offline": "Оффлайн боты",
"bots-hide-inactive": "Неактивные боты",
"bots-hide-online": "Онлайн боты",
"bots-infobox-cards": "Осталось карт",
"bots-infobox-games": "Осталось игр",
"bots-infobox-time": "Осталось времени",
"bots-in-use": "Бот сейчас используется.",
"bots-paused": "Бот приостановлен.",
"bots-pause-success": "<$1> приостановлен.",
"bots-recover-files": "Вы не сможете восстановить файлы бота!",
"bots-redeem-add-button": "Добавьте ключи",
"bots-redeem-unused-button": "Скачать $1.keys.unused",
"bots-redeem-used-button": "Скачать $1.keys.used",
"bots-redeem-confirm": "$1 {{PLURAL:$1|Ключ был добавлен|Ключа были добавлены|Ключей были добавлены}} в очередь фоновой активации <$2>.",
"bots-redeem-title": "Фоновая активация ключей",
"bots-redeem-add-title": "Добавьте ключи",
"bots-redeem-unused-title": "Показать неиспользованные ключи",
"bots-redeem-used-title": "Показать использованные ключи",
"bots-resume-success": "<$1> возобновлён.",
"bots-start-success": "<$1> начал работу.",
"bots-stop-success": "<$1> прекратил работу.",
"bots-syntax": "Синтаксис: названиеИгры{delimiter}ключ",
"bots-title": "ASF | Боты",
"commands-response": "$1 Получен ответ: $2",
"commands-sent": "$1 Отправлена команда: $2",
"commands-title": "ASF | Команды",
"commands-waiting": "$1 Ожидание ответа...",
"editor-change": "Сменить бота",
"editor-current": "Сейчас редактируется:",
"editor-current-bot": "Редактирование: <b>$1</b>",
"editor-save": "Сохранить",
"editor-save-confirm": "<$1> и его файл конфигурации были обновлены.",
"editor-title": "ASF | Редактор конфигураций",
"editor-update": "Конфигурация будет изменена, <$1> будет перезапущен!",
"editor-update-confirm": "Да, обновить конфигурацию!",
"generator-change": "Изменить режим",
"generator-current": "Текущий режим:",
"generator-current-bot": "Текущий режим: <b>$1</b>",
"generator-download": "Скачать",
"generator-name": "Вы должны ввести имя!",
"generator-title": "ASF | Генератор конфигураций",
"global-bots": "Боты",
"global-boxed": "Фиксированная разметка",
"global-boxed-description": "Включить/выключить фиксированную разметку",
"global-change-language": "Сменить язык",
"global-changelog": "История изменений",
"global-commands": "Команды",
"global-config": "Конфигурация",
"global-control-panel": "Панель управления",
"global-editor": "Редактор",
"global-error-invalid-pw": "Вы должны ввести верный пароль!",
"global-error-title": "Ошибка!",
"global-generator": "Генератор",
"global-home": "Главная",
"global-information": "Информация",
"global-layout": "Разметка",
"global-log": "Журнал",
"global-navigation": "Включить/выключить панели навигации",
"global-nightmode": "Ночной режим",
"global-nightmode-description": "Включить/выключить ночной режим",
"global-question-title": "Вы уверены?",
"global-ram-usage": "Занято ОЗУ",
"global-skins": "Оформление",
"global-success-title": "Успешно!",
"global-uptime": "Время работы",
"global-version": "Версия",
"global-wiki": "Вики",
"log-event-code": "Код события: $1",
"log-title": "ASF | Журнал",
"placeholder-auth": "Введите пароль...",
"placeholder-commands": "Введите команду...",
"placeholder-generator": "Имя",
"title-commands": "Команды",
"title-bots": "Боты"
}

View file

@ -1,87 +0,0 @@
{
"auth-ipc-403": "",
"auth-ipc-header": "",
"auth-ipc-pw-saved": "",
"auth-ipc-pw-wrong": "",
"auth-ipc-text": "",
"auth-title": "",
"bots-confirm-delete": "",
"bots-delete-success": "",
"bots-delimiter": "",
"bots-download": "",
"bots-hide": "Skryť botov",
"bots-hide-offline": "Offline boti",
"bots-hide-inactive": "",
"bots-hide-online": "Online boti",
"bots-infobox-cards": "",
"bots-infobox-games": "",
"bots-infobox-time": "",
"bots-in-use": "Bot je práve používaný.",
"bots-paused": "",
"bots-pause-success": "",
"bots-recover-files": "",
"bots-redeem-add-button": "",
"bots-redeem-unused-button": "",
"bots-redeem-used-button": "",
"bots-redeem-confirm": "",
"bots-redeem-title": "",
"bots-redeem-add-title": "",
"bots-redeem-unused-title": "",
"bots-redeem-used-title": "",
"bots-resume-success": "",
"bots-start-success": "",
"bots-stop-success": "",
"bots-syntax": "",
"bots-title": "ASF | Boti",
"commands-response": "",
"commands-sent": "",
"commands-title": "ASF | Príkazy",
"commands-waiting": "",
"editor-change": "Zmeniť bota",
"editor-current": "Aktuálne sa mení:",
"editor-current-bot": "",
"editor-save": "Uložiť",
"editor-save-confirm": "",
"editor-title": "ASF | Editor konfigurácie",
"editor-update": "",
"editor-update-confirm": "",
"generator-change": "Zmeniť mód",
"generator-current": "Aktuálny mód:",
"generator-current-bot": "",
"generator-download": "Stiahnuť",
"generator-name": "",
"generator-title": "ASF | Generátor konfigurácie",
"global-bots": "Boti",
"global-boxed": "Štvorcové rozloženie",
"global-boxed-description": "",
"global-change-language": "",
"global-changelog": "Zoznam zmien",
"global-commands": "Príkazy",
"global-config": "Konfigurácia",
"global-control-panel": "Ovládací panel",
"global-editor": "Editor",
"global-error-invalid-pw": "",
"global-error-title": "",
"global-generator": "Generátor",
"global-home": "Domovská stránka",
"global-information": "Informácie",
"global-layout": "Rozloženie",
"global-log": "Log",
"global-navigation": "Zmena navigácie",
"global-nightmode": "Nočný mód",
"global-nightmode-description": "",
"global-question-title": "",
"global-ram-usage": "Využitie RAM pamäte",
"global-skins": "Skiny",
"global-success-title": "Úspech!",
"global-uptime": "Čas behu",
"global-version": "Verzia",
"global-wiki": "Wiki",
"log-event-code": "",
"log-title": "ASF | Log",
"placeholder-auth": "",
"placeholder-commands": "",
"placeholder-generator": "Meno",
"title-commands": "Príkazy",
"title-bots": "Boti"
}

View file

@ -1,87 +0,0 @@
{
"auth-ipc-403": "",
"auth-ipc-header": "Neophodna IPC lozinka",
"auth-ipc-pw-saved": "Vaša IPC lozinka je sačuvana.",
"auth-ipc-pw-wrong": "Vaša IPC lozinka je netačna, probajte ponovo!",
"auth-ipc-text": "Molimo vas da unesete ispravnu IPC lozinku",
"auth-title": "ASF | Autentifikacija",
"bots-confirm-delete": "Da, izbriši bota!",
"bots-delete-success": "",
"bots-delimiter": "",
"bots-download": "",
"bots-hide": "Sakrij botove",
"bots-hide-offline": "Offline botovi",
"bots-hide-inactive": "Neaktivni botovi",
"bots-hide-online": "Online botovi",
"bots-infobox-cards": "Preostale kartice",
"bots-infobox-games": "Preostale Igre",
"bots-infobox-time": "Preostalo vreme",
"bots-in-use": "Bot je trenutno u upotrebi.",
"bots-paused": "Bot je pauziran.",
"bots-pause-success": "",
"bots-recover-files": "",
"bots-redeem-add-button": "Dodaj ključeve",
"bots-redeem-unused-button": "",
"bots-redeem-used-button": "",
"bots-redeem-confirm": "",
"bots-redeem-title": "",
"bots-redeem-add-title": "Dodaj ključeve",
"bots-redeem-unused-title": "",
"bots-redeem-used-title": "",
"bots-resume-success": "",
"bots-start-success": "",
"bots-stop-success": "",
"bots-syntax": "",
"bots-title": "",
"commands-response": "",
"commands-sent": "",
"commands-title": "",
"commands-waiting": "",
"editor-change": "",
"editor-current": "",
"editor-current-bot": "",
"editor-save": "",
"editor-save-confirm": "",
"editor-title": "",
"editor-update": "",
"editor-update-confirm": "",
"generator-change": "",
"generator-current": "",
"generator-current-bot": "",
"generator-download": "",
"generator-name": "",
"generator-title": "",
"global-bots": "",
"global-boxed": "",
"global-boxed-description": "",
"global-change-language": "",
"global-changelog": "",
"global-commands": "",
"global-config": "",
"global-control-panel": "",
"global-editor": "",
"global-error-invalid-pw": "",
"global-error-title": "",
"global-generator": "",
"global-home": "",
"global-information": "",
"global-layout": "",
"global-log": "",
"global-navigation": "",
"global-nightmode": "",
"global-nightmode-description": "",
"global-question-title": "",
"global-ram-usage": "",
"global-skins": "",
"global-success-title": "Uspeh!",
"global-uptime": "",
"global-version": "",
"global-wiki": "",
"log-event-code": "",
"log-title": "",
"placeholder-auth": "",
"placeholder-commands": "",
"placeholder-generator": "",
"title-commands": "",
"title-bots": ""
}

View file

@ -1,87 +0,0 @@
{
"auth-ipc-403": "Du kunde inte autentisera korrekt för många gånger, försök igen om en timme.",
"auth-ipc-header": "Krävs IPC lösenord",
"auth-ipc-pw-saved": "",
"auth-ipc-pw-wrong": "",
"auth-ipc-text": "Vänligen ange det korrekt IPC lösenordet",
"auth-title": "ASF | Autentisering",
"bots-confirm-delete": "Ja, radera bot!",
"bots-delete-success": "",
"bots-delimiter": "",
"bots-download": "",
"bots-hide": "Göm bots",
"bots-hide-offline": "Offline bots",
"bots-hide-inactive": "Inaktiva bots",
"bots-hide-online": "Online bots",
"bots-infobox-cards": "Kort återstår",
"bots-infobox-games": "Spel återstår",
"bots-infobox-time": "Tid återstår",
"bots-in-use": "Bot används för närvarande.",
"bots-paused": "Bot är pausad.",
"bots-pause-success": "",
"bots-recover-files": "",
"bots-redeem-add-button": "",
"bots-redeem-unused-button": "",
"bots-redeem-used-button": "",
"bots-redeem-confirm": "",
"bots-redeem-title": "",
"bots-redeem-add-title": "",
"bots-redeem-unused-title": "",
"bots-redeem-used-title": "",
"bots-resume-success": "",
"bots-start-success": "<$1> har startats.",
"bots-stop-success": "<$1> har stoppats.",
"bots-syntax": "",
"bots-title": "ASF | Bots",
"commands-response": "$1 Svar mottaget: $2",
"commands-sent": "$1 Kommando skickas: $2",
"commands-title": "ASF | Kommandon",
"commands-waiting": "$1 Väntar på svar...",
"editor-change": "Ändra bot",
"editor-current": "",
"editor-current-bot": "",
"editor-save": "Spara",
"editor-save-confirm": "",
"editor-title": "ASF | Konfig Redaktör",
"editor-update": "",
"editor-update-confirm": "Ja, uppdatera konfig!",
"generator-change": "",
"generator-current": "",
"generator-current-bot": "",
"generator-download": "Ladda ner",
"generator-name": "",
"generator-title": "ASF | Konfig Generator",
"global-bots": "Bots",
"global-boxed": "",
"global-boxed-description": "",
"global-change-language": "Ändra språk",
"global-changelog": "Ändringslogg",
"global-commands": "Kommandon",
"global-config": "Konfig",
"global-control-panel": "Kontrollpanelen",
"global-editor": "Redaktör",
"global-error-invalid-pw": "",
"global-error-title": "Fel!",
"global-generator": "",
"global-home": "",
"global-information": "Information",
"global-layout": "",
"global-log": "",
"global-navigation": "",
"global-nightmode": "",
"global-nightmode-description": "",
"global-question-title": "Är du säker?",
"global-ram-usage": "",
"global-skins": "",
"global-success-title": "Framgång!",
"global-uptime": "",
"global-version": "Version",
"global-wiki": "Wiki",
"log-event-code": "",
"log-title": "",
"placeholder-auth": "Skriv ditt lösenord...",
"placeholder-commands": "Skriv kommando...",
"placeholder-generator": "Namn",
"title-commands": "Kommandon",
"title-bots": "Bots"
}

View file

@ -1,87 +0,0 @@
{
"auth-ipc-403": "Kimlik doğrulamanız çok kez başarısız oldu, bir saat içinde tekrar deneyin.",
"auth-ipc-header": "IPC parolası gerekli",
"auth-ipc-pw-saved": "IPC parolanız kaydedildi.",
"auth-ipc-pw-wrong": "ICP parolanız hatalı gibi görünüyor, tekrar deneyin!",
"auth-ipc-text": "Lütfen geçerli IPC parolanızı girin",
"auth-title": "ASF | Kimlik Doğrulama",
"bots-confirm-delete": "Evet, botu sil!",
"bots-delete-success": "<$1> ve tüm ilişkili dosyaları silindi.",
"bots-delimiter": "Ayraç",
"bots-download": "İndirilecek bir şey yok!",
"bots-hide": "Botları gizle",
"bots-hide-offline": "Çevrimdışı botlar",
"bots-hide-inactive": "Devre dışı botlar",
"bots-hide-online": "Çevrimiçi botlar",
"bots-infobox-cards": "Kalan Kart",
"bots-infobox-games": "Kalan Oyun",
"bots-infobox-time": "Kalan Süre",
"bots-in-use": "Bot şu anda kullanılıyor.",
"bots-paused": "Bot duraklatıldı.",
"bots-pause-success": "<$1> duraklatıldı.",
"bots-recover-files": "Herhangi bir bot dosyasını kurtaramayacaksınız!",
"bots-redeem-add-button": "Anahtarları ekleyin",
"bots-redeem-unused-button": "$1.keys.unused indir",
"bots-redeem-used-button": "$1.keys.used indir",
"bots-redeem-confirm": "$1 {{PLURAL:$1|Anahtar|Anahtarlar}} <$2> arkaplan etkinleştiriciye eklendi.",
"bots-redeem-title": "Arkaplan oyun etkinleştirici",
"bots-redeem-add-title": "Anahtarları ekleyin",
"bots-redeem-unused-title": "Kullanılmayan anahtarları göster",
"bots-redeem-used-title": "Kullanılan anahtarları göster",
"bots-resume-success": "<$1> devam ediyor.",
"bots-start-success": "<$1> başlatıldı.",
"bots-stop-success": "<$1> durduruldu.",
"bots-syntax": "Sözdizimi: oyunAdı{delimiter}anahtar",
"bots-title": "ASF | Botlar",
"commands-response": "$1 Yanıt alındı: $2",
"commands-sent": "$1 Komut gönderildi: $2",
"commands-title": "ASF | Komutlar",
"commands-waiting": "$1 Yanıt bekleniyor...",
"editor-change": "Botu değiştir",
"editor-current": "Şu anda düzenlenen:",
"editor-current-bot": "Şu anda düzenlenen: <b>$1</b>",
"editor-save": "Kaydet",
"editor-save-confirm": "<$1> ve yapılandırma dosyası güncellendi.",
"editor-title": "ASF | Yapılandırma Düzenleyici",
"editor-update": "Yapılandırma güncellenecek ve <$1> yeniden başlatılacak!",
"editor-update-confirm": "Evet, yapılandırmayı güncelle!",
"generator-change": "Modu değiştir",
"generator-current": "Geçerli mod:",
"generator-current-bot": "Geçerli mod: <b>$1</b>",
"generator-download": "İndir",
"generator-name": "Bir isim girmelisiniz!",
"generator-title": "ASF | Yapılandırma Oluşturucu",
"global-bots": "Botlar",
"global-boxed": "Kutu Düzeni",
"global-boxed-description": "Kutulu düzeni aç/kapat",
"global-change-language": "Dili değiştir",
"global-changelog": "Değişim günlüğü",
"global-commands": "Komutlar",
"global-config": "Yapılandırma",
"global-control-panel": "Denetim Masası",
"global-editor": "Düzenleyici",
"global-error-invalid-pw": "Geçerli bir parola girmelisiniz!",
"global-error-title": "Hata!",
"global-generator": "Oluşturucu",
"global-home": "Ana sayfa",
"global-information": "Bilgi",
"global-layout": "Düzen",
"global-log": "Günlük",
"global-navigation": "Gezintiyi aç/kapat",
"global-nightmode": "Gece modu",
"global-nightmode-description": "Gece modunu aç/kapat",
"global-question-title": "Emin misiniz?",
"global-ram-usage": "RAM Kullanımı",
"global-skins": "Temalar",
"global-success-title": "Başarılı!",
"global-uptime": "Çalışma süresi",
"global-version": "Sürüm",
"global-wiki": "Viki",
"log-event-code": "Olay kodu: $1",
"log-title": "ASF | Günlük",
"placeholder-auth": "Parolanızı yazın...",
"placeholder-commands": "Komutu yazın...",
"placeholder-generator": "İsim",
"title-commands": "Komutlar",
"title-bots": "Botlar"
}

View file

@ -1,87 +0,0 @@
{
"auth-ipc-403": "Ви не змогли увійти забагото разів, спробуйте через одну годину.",
"auth-ipc-header": "Необхідний пароль IPC",
"auth-ipc-pw-saved": "Ваш IPC пароль збережено.",
"auth-ipc-pw-wrong": "Ваш пароль IPC здається невірний, спробуйте ще раз!",
"auth-ipc-text": "Будь ласка, введіть вірний IPC пароль",
"auth-title": "ASF | Автентифікація",
"bots-confirm-delete": "Так, видалити бота!",
"bots-delete-success": "<$1> та усі пов'язані файли було видалено.",
"bots-delimiter": "Роздільник",
"bots-download": "Немає нічого для скачування!",
"bots-hide": "Приховати ботів",
"bots-hide-offline": "Боти що офлайн",
"bots-hide-inactive": "Неактивні боти",
"bots-hide-online": "Боти що онлайн",
"bots-infobox-cards": "Залишилося карток",
"bots-infobox-games": "Ігор залишилося",
"bots-infobox-time": "Залишилося часу",
"bots-in-use": "Бот зараз використовується.",
"bots-paused": "Бот призупинено.",
"bots-pause-success": "<$1> призупинено.",
"bots-recover-files": "Ви не зможете відновити файли бота!",
"bots-redeem-add-button": "Додати ключі",
"bots-redeem-unused-button": "Скачати $1.keys.unused",
"bots-redeem-used-button": "Скачати $1.keys.used",
"bots-redeem-confirm": "$1 {{PLURAL:$1|Ключ|Ключа|Ключів}} було додано до черги фонової активації <$2>.",
"bots-redeem-title": "Активація ігор у фоновому режимі",
"bots-redeem-add-title": "Додати ключі",
"bots-redeem-unused-title": "Показати невикористані ключі",
"bots-redeem-used-title": "Показати використані ключі",
"bots-resume-success": "<$1> відновлено.",
"bots-start-success": "<$1> запущено.",
"bots-stop-success": "<$1> зупинено.",
"bots-syntax": "Синтаксис: назваГри{delimiter}ключ",
"bots-title": "ASF | Боти",
"commands-response": "Від $1 отримано відповідь: $2",
"commands-sent": "$1 Надіслано команду: $2",
"commands-title": "ASF | Команди",
"commands-waiting": "$1 Зачекайте на відповідь...",
"editor-change": "Змінити бота",
"editor-current": "Зараз редагується:",
"editor-current-bot": "Зараз редагується: <b>$1</b>",
"editor-save": "Зберегти",
"editor-save-confirm": "<$1> та його файл конфігурації було оновлено.",
"editor-title": "ASF | Редактор конфігурацій",
"editor-update": "Файл конфігурації оновлено і <$1> буде перезапущений!",
"editor-update-confirm": "Так, оновіть конфігурацію!",
"generator-change": "Змінити режим",
"generator-current": "Поточний режим:",
"generator-current-bot": "Поточний режим: <b>$1</b>",
"generator-download": "Скачати",
"generator-name": "Ви повинні ввести ім'я!",
"generator-title": "ASF | Генератор конфігурацій",
"global-bots": "Боти",
"global-boxed": "Фіксована розмітка",
"global-boxed-description": "Перемикач фіксованої розмітки",
"global-change-language": "Змінити мову",
"global-changelog": "Журнал змін",
"global-commands": "Команди",
"global-config": "Конфігурація",
"global-control-panel": "Панель управління",
"global-editor": "Редактор",
"global-error-invalid-pw": "Ви повинні ввести правильний пароль!",
"global-error-title": "Помилка!",
"global-generator": "Генератор",
"global-home": "Головна",
"global-information": "Інформація",
"global-layout": "Розмітка",
"global-log": "Журнал",
"global-navigation": "Перемикач панелі навігації",
"global-nightmode": "Нічний режим",
"global-nightmode-description": "Переключити нічний режим",
"global-question-title": "Ви впевнені?",
"global-ram-usage": "Зайнято пам'яті",
"global-skins": "Теми оформлення",
"global-success-title": "Успіх!",
"global-uptime": "Час роботи",
"global-version": "Версія",
"global-wiki": "Wiki",
"log-event-code": "Код події: $1",
"log-title": "ASF | Журнал",
"placeholder-auth": "Введіть пароль...",
"placeholder-commands": "Введіть команду...",
"placeholder-generator": "Ім'я",
"title-commands": "Команди",
"title-bots": "Боти"
}

View file

@ -1,87 +0,0 @@
{
"auth-ipc-403": "",
"auth-ipc-header": "",
"auth-ipc-pw-saved": "",
"auth-ipc-pw-wrong": "",
"auth-ipc-text": "",
"auth-title": "",
"bots-confirm-delete": "",
"bots-delete-success": "",
"bots-delimiter": "",
"bots-download": "",
"bots-hide": "Ẩn bot",
"bots-hide-offline": "",
"bots-hide-inactive": "",
"bots-hide-online": "",
"bots-infobox-cards": "",
"bots-infobox-games": "",
"bots-infobox-time": "",
"bots-in-use": "Bot hiện đang được sử dụng.",
"bots-paused": "",
"bots-pause-success": "",
"bots-recover-files": "",
"bots-redeem-add-button": "",
"bots-redeem-unused-button": "",
"bots-redeem-used-button": "",
"bots-redeem-confirm": "",
"bots-redeem-title": "",
"bots-redeem-add-title": "",
"bots-redeem-unused-title": "",
"bots-redeem-used-title": "",
"bots-resume-success": "",
"bots-start-success": "",
"bots-stop-success": "",
"bots-syntax": "",
"bots-title": "ASF | Bot",
"commands-response": "",
"commands-sent": "",
"commands-title": "ASF | Lệnh",
"commands-waiting": "",
"editor-change": "Thay đổi bot",
"editor-current": "Hiện đang chỉnh sửa:",
"editor-current-bot": "",
"editor-save": "Lưu",
"editor-save-confirm": "",
"editor-title": "",
"editor-update": "",
"editor-update-confirm": "",
"generator-change": "Chuyển chế độ",
"generator-current": "Chế độ hiện tại:",
"generator-current-bot": "",
"generator-download": "Tải về",
"generator-name": "",
"generator-title": "",
"global-bots": "Bot",
"global-boxed": "",
"global-boxed-description": "",
"global-change-language": "",
"global-changelog": "Các thay đổi",
"global-commands": "Lệnh",
"global-config": "Cấu hình",
"global-control-panel": "Bảng điều khiển trung tâm",
"global-editor": "Trình biên tập",
"global-error-invalid-pw": "",
"global-error-title": "",
"global-generator": "Tạo",
"global-home": "Trang chủ",
"global-information": "Thông tin",
"global-layout": "Bố cục",
"global-log": "Nhật ký",
"global-navigation": "Chuyển đổi điều hướng",
"global-nightmode": "Chế độ ban đêm",
"global-nightmode-description": "",
"global-question-title": "",
"global-ram-usage": "Bộ nhớ RAM dùng",
"global-skins": "Giao diện",
"global-success-title": "Hoàn tất!",
"global-uptime": "Thời gian hoạt động",
"global-version": "Phiên bản",
"global-wiki": "Wiki",
"log-event-code": "",
"log-title": "ASF | Nhật ký",
"placeholder-auth": "",
"placeholder-commands": "",
"placeholder-generator": "Tên",
"title-commands": "Lệnh",
"title-bots": "Bot"
}

View file

@ -1,87 +0,0 @@
{
"auth-ipc-403": "失败验证次数过多,请在一小时后重试",
"auth-ipc-header": "密码为必填项。",
"auth-ipc-pw-saved": "您的密码已经被重置。",
"auth-ipc-pw-wrong": "您的 IPC 密码似乎是错误的, 请重试!",
"auth-ipc-text": "请输入正确的密码。",
"auth-title": "认证",
"bots-confirm-delete": "是的删除这个bot",
"bots-delete-success": "<$1> 和所有相关文件已被删除。",
"bots-delimiter": "",
"bots-download": "",
"bots-hide": "隐藏机器人",
"bots-hide-offline": "离线机器人",
"bots-hide-inactive": "",
"bots-hide-online": "在线机器人",
"bots-infobox-cards": "剩余卡牌数量",
"bots-infobox-games": "剩余游戏数量",
"bots-infobox-time": "剩余时间",
"bots-in-use": "当前帐号正在使用。",
"bots-paused": "Bot已暂停",
"bots-pause-success": "<$1> 已暂停。",
"bots-recover-files": "您将无法恢复任何 bot 文件!",
"bots-redeem-add-button": "",
"bots-redeem-unused-button": "",
"bots-redeem-used-button": "",
"bots-redeem-confirm": "",
"bots-redeem-title": "批量激活游戏",
"bots-redeem-add-title": "",
"bots-redeem-unused-title": "",
"bots-redeem-used-title": "",
"bots-resume-success": "<$1> 已恢复。",
"bots-start-success": "<$1> 已启动。",
"bots-stop-success": "<$1> 已停止。",
"bots-syntax": "",
"bots-title": "ASF | 机器人",
"commands-response": "$1 收到回复: $2",
"commands-sent": "$1 命令发送至: $2",
"commands-title": "ASF | 命令",
"commands-waiting": "$1 等待响应",
"editor-change": "更改机器人",
"editor-current": "正在编辑:",
"editor-current-bot": "当前编辑: <b>$1</b>",
"editor-save": "保存",
"editor-save-confirm": "",
"editor-title": "ASF | 配置编辑器",
"editor-update": "配置将被更新, <$1> 将重新启动!",
"editor-update-confirm": "是, 更新配置!",
"generator-change": "更改模式",
"generator-current": "当前模式:",
"generator-current-bot": "当前模式: <b>$ 1</b>",
"generator-download": "下载",
"generator-name": "",
"generator-title": "ASF | 配置文件生成器",
"global-bots": "机器人",
"global-boxed": "框式布局",
"global-boxed-description": "切换框式布局",
"global-change-language": "更改语言",
"global-changelog": "更新日志",
"global-commands": "命令",
"global-config": "配置",
"global-control-panel": "控制面板",
"global-editor": "编辑器",
"global-error-invalid-pw": "",
"global-error-title": "错误!",
"global-generator": "生成器",
"global-home": "首页",
"global-information": "信息",
"global-layout": "布局",
"global-log": "日志",
"global-navigation": "切换导航",
"global-nightmode": "夜晚模式",
"global-nightmode-description": "切换夜间模式",
"global-question-title": "是否确定?",
"global-ram-usage": "内存用量",
"global-skins": "皮肤",
"global-success-title": "成功!",
"global-uptime": "在线时长",
"global-version": "版本",
"global-wiki": "Wiki",
"log-event-code": "事件代码: $ 1",
"log-title": "ASF | 日志",
"placeholder-auth": "请输入密码...",
"placeholder-commands": "在此处键入命令...",
"placeholder-generator": "名称",
"title-commands": "命令",
"title-bots": "机器人"
}

View file

@ -1,87 +0,0 @@
{
"auth-ipc-403": "您未通過驗證次數過多,請一小時後再試。",
"auth-ipc-header": "需要 IPC 密碼",
"auth-ipc-pw-saved": "您的 IPC 密碼已儲存。",
"auth-ipc-pw-wrong": "您的 IPC 密碼似乎是錯誤的,請再試一次!",
"auth-ipc-text": "請輸入正確的 IPC 密碼",
"auth-title": "ASF | 驗證",
"bots-confirm-delete": "是的刪除BOT",
"bots-delete-success": "<$1> 與所有相關檔案已被刪除。",
"bots-delimiter": "",
"bots-download": "",
"bots-hide": "隱藏 bots",
"bots-hide-offline": "Bots 離線",
"bots-hide-inactive": "",
"bots-hide-online": "Bots 在線上",
"bots-infobox-cards": "剩餘卡片",
"bots-infobox-games": "剩餘遊戲",
"bots-infobox-time": "剩餘時間",
"bots-in-use": "BOT 目前正被使用。",
"bots-paused": "BOT 已暫停。",
"bots-pause-success": "<$1> 已暫停。",
"bots-recover-files": "您將無法恢復任何 BOT 檔案!",
"bots-redeem-add-button": "",
"bots-redeem-unused-button": "",
"bots-redeem-used-button": "",
"bots-redeem-confirm": "",
"bots-redeem-title": "背景啟動序號",
"bots-redeem-add-title": "",
"bots-redeem-unused-title": "",
"bots-redeem-used-title": "",
"bots-resume-success": "<$1> 已暫停。",
"bots-start-success": "<$1> 已啟動。",
"bots-stop-success": "<$1> 已停止。",
"bots-syntax": "",
"bots-title": "ASF | Bots",
"commands-response": "$1 收到回應:$2",
"commands-sent": "$1 指令已傳送:$2",
"commands-title": "ASF | 指令",
"commands-waiting": "$1 正在等待回應...",
"editor-change": "更改 Bot",
"editor-current": "正在編輯:",
"editor-current-bot": "目前正在編輯:<b>$1</b>",
"editor-save": "儲存",
"editor-save-confirm": "",
"editor-title": "ASF | 設定檔編輯",
"editor-update": "設定檔將會更新以及 <$1> 將會重新啟動!",
"editor-update-confirm": "是的,更新設定檔!",
"generator-change": "更改模式",
"generator-current": "目前模式:",
"generator-current-bot": "目前模式:<b>$1</b>",
"generator-download": "下載",
"generator-name": "",
"generator-title": "ASF | 設定檔產生器",
"global-bots": "Bots",
"global-boxed": "窄版布局",
"global-boxed-description": "切換窄版佈局",
"global-change-language": "變更語言",
"global-changelog": "更新紀錄",
"global-commands": "指令",
"global-config": "設定",
"global-control-panel": "控制台",
"global-editor": "編輯器",
"global-error-invalid-pw": "",
"global-error-title": "錯誤!",
"global-generator": "產生器",
"global-home": "首頁",
"global-information": "資訊",
"global-layout": "佈局",
"global-log": "紀錄",
"global-navigation": "切換導航欄",
"global-nightmode": "夜間模式",
"global-nightmode-description": "切換夜間模式",
"global-question-title": "您確定嗎?",
"global-ram-usage": "RAM 使用率",
"global-skins": "外觀",
"global-success-title": "成功!",
"global-uptime": "執行時間",
"global-version": "版本",
"global-wiki": "Wiki",
"log-event-code": "事件代碼:$1",
"log-title": "ASF | 紀錄",
"placeholder-auth": "輸入您的密碼...",
"placeholder-commands": "輸入指令...",
"placeholder-generator": "名稱",
"title-commands": "指令",
"title-bots": "Bots"
}

View file

@ -1,754 +0,0 @@
<!DOCTYPE html>
<html>
<head>
<title data-i18n="bots-title">ASF | Bots</title>
<meta charset="utf-8">
<meta http-equiv="X-UA-Compatible" content="IE=edge,chrome=1">
<meta content="width=device-width, initial-scale=1, maximum-scale=1, user-scalable=no" name="viewport">
<script defer src="https://use.fontawesome.com/releases/v5.1.0/js/all.js"></script> <!--Change to cdnjs once available-->
<link rel="icon" href="../img/favicon.png" type="image/png">
<link rel="shortcut icon" href="../img/favicon.ico" type="img/x-icon">
<link rel="stylesheet" href="https://cdnjs.cloudflare.com/ajax/libs/twitter-bootstrap/3.3.7/css/bootstrap.min.css">
<link rel="stylesheet" href="https://cdnjs.cloudflare.com/ajax/libs/bootstrap-sweetalert/1.0.1/sweetalert.min.css">
<link rel="stylesheet" href="https://cdnjs.cloudflare.com/ajax/libs/admin-lte/2.4.2/css/AdminLTE.min.css">
<link rel="stylesheet" href="https://cdnjs.cloudflare.com/ajax/libs/slick-carousel/1.8.1/slick.min.css">
<link rel="stylesheet" href="https://fonts.googleapis.com/css?family=Source+Sans+Pro:300,400,600,700,300italic,400italic,600italic">
<link rel="stylesheet" href="https://cdnjs.cloudflare.com/ajax/libs/flag-icon-css/3.1.0/css/flag-icon.min.css">
<link rel="stylesheet" href="https://cdnjs.cloudflare.com/ajax/libs/bootstrap-toggle/2.2.2/css/bootstrap-toggle.min.css">
<link rel="stylesheet" href="../css/_all-skins.min.css">
<link rel="stylesheet" href="../css/app.css">
<link rel="stylesheet" href="../css/_nightmode.min.css">
</head>
<body class="hold-transition skin-blue sidebar-mini fixed">
<div class="wrapper">
<!-- Header -->
<header class="main-header">
<!-- Logo -->
<a href="javascript:void(0)" class="logo">
<span class="logo-mini"><b>A</b>SF</span>
<span class="logo-lg"><b>Archi</b>SteamFarm</span>
</a>
<nav class="navbar navbar-static-top" role="navigation">
<!-- Left Sidebar Toggle Button-->
<a href="javascript:void(0)" class="sidebar-toggle" id="leftSidebar" data-toggle="push-menu" role="button">
<i class="fas fa-bars"></i>
<span class="sr-only" data-i18n="global-navigation">Toggle navigation</span>
</a>
<div class="navbar-custom-menu">
<ul class="nav navbar-nav">
<!-- Language Button -->
<li class="dropdown">
<a class="dropdown-toggle" href="javascript:void(0)" data-toggle="dropdown"><i id="currentLanguage" class="flag-icon flag-icon-us"></i></a>
<div class="dropdown-menu dropdown-language"></div>
</li>
<!-- Right Sidebar Toggle Button -->
<li><a href="javascript:void(0)" data-toggle="control-sidebar"><i class="fas fa-cogs"></i></a></li>
</ul>
</div>
</nav>
</header>
<!-- Left Sidebar -->
<aside class="main-sidebar">
<section class="sidebar">
<ul class="sidebar-menu" data-widget="tree">
<li class="header" data-i18n="global-home">Home</li>
<li><a href="commands.html"><i class="fas fa-laptop fa-fw"></i> <span data-i18n="global-commands">Commands</span></a></li>
<li class="active">
<a href="bots.html">
<i class="fas fa-users fa-fw"></i> <span data-i18n="global-bots">Bots</span>
<span class="pull-right-container bot-status">
<small class="label pull-right bg-gray" id="offlineBots">0</small>
<small class="label pull-right bg-red" id="disconnectedBots" style="display:none;">0</small>
<small class="label pull-right bg-yellow" id="onlineBots">0</small>
<small class="label pull-right bg-olive" id="farmingBots">0</small>
</span>
</a>
</li>
<li><a href="log.html"><i class="far fa-file-alt fa-fw"></i> <span data-i18n="global-log">Log</span></a></li>
<li class="header" data-i18n="global-config">Config</li>
<li><a href="editor.html"><i class="far fa-edit fa-fw"></i> <span data-i18n="global-editor">Editor</span></a></li>
<li><a href="generator.html"><i class="far fa-copy fa-fw"></i> <span data-i18n="global-generator">Generator</span></a></li>
<li class="header" data-i18n="global-information">Information</li>
<li>
<a class="info-overview" href="javascript:void(0)">
<i class="fas fa-tachometer-alt fa-fw"></i> <span data-i18n="global-ram-usage">RAM Usage</span>
<span class="pull-right-container">
<small class="label pull-right bg-blue" id="ramUsage">0.00 MB</small>
</span>
</a>
</li>
<li>
<a class="info-overview" href="javascript:void(0)">
<i class="far fa-clock fa-fw"></i> <span data-i18n="global-uptime">Uptime</span>
<span class="pull-right-container">
<small class="label pull-right bg-blue" id="uptime">0d 0h 0m</small>
</span>
</a>
</li>
</ul>
</section>
</aside>
<!-- Content -->
<div class="content-wrapper">
<section class="content-header">
<h1>
<span data-i18n="global-bots">Bots</span>
<small data-i18n="global-control-panel">Control Panel</small>
</h1>
<ol class="breadcrumb">
<li><i class="fas fa-home"></i> <span data-i18n="global-home">Home</span></li>
<li class="active"><i class="fas fa-users"></i> <span data-i18n="global-bots">Bots</span></li>
</ol>
</section>
<!-- Content Body -->
<section class="content container-fluid">
<div class="box collapsed-box" id="headerBox">
<div class="box-header with-border">
<i class="fas fa-users"></i>
<h3 class="box-title" data-i18n="global-bots">Bots</h3>
<div class="box-tools pull-right">
<div class="btn-group">
<button type="button" class="btn btn-box-tool dropdown-toggle" data-toggle="dropdown">
<span data-i18n="bots-hide">Hide bots</span> <span class="fas fa-caret-down"></span>
</button>
<ul class="dropdown-menu dropdown-menu-toggle" role="menu">
<li class="li-toggle"><input id="chkOn" type="checkbox" data-style="ios li-btn" data-onstyle="default" data-toggle="toggle" data-size="small" data-on="<i class='fas fa-users'></i> <span data-i18n='bots-hide-online'>Online bots</span>" data-off="<i class='fas fa-users'></i> <span data-i18n='bots-hide-online'>Online bots</span>"></li>
<li class="li-toggle"><input id="chkInactive" type="checkbox" data-style="ios li-btn" data-onstyle="default" data-toggle="toggle" data-size="small" data-on="<i class='fas fa-users'></i> <span data-i18n='bots-hide-inactive'>Inactive bots</span>" data-off="<i class='fas fa-users'></i> <span data-i18n='bots-hide-inactive'>Inactive bots</span>"></li>
<li class="li-toggle"><input id="chkOff" type="checkbox" data-style="ios li-btn" data-onstyle="default" data-toggle="toggle" data-size="small" data-on="<i class='fas fa-users'></i> <span data-i18n='bots-hide-offline'>Offline bots</span>" data-off="<i class='fas fa-users'></i> <span data-i18n='bots-hide-offline'>Offline bots</span>"></li>
</ul>
</div>
<input id="chkKey" type="checkbox" data-style="ios" data-onstyle="default" data-toggle="toggle" data-size="mini" data-on="<i class='fas fa-key'></i>" data-off="<i class='fas fa-key'></i>">
<input id="chkDelete" type="checkbox" data-style="ios" data-onstyle="default" data-toggle="toggle" data-size="mini" data-on="<i class='far fa-trash-alt'></i>" data-off="<i class='far fa-trash-alt'></i>">
<input id="chkSimple" type="checkbox" data-style="ios" data-onstyle="default" data-toggle="toggle" data-size="mini" data-on="<i class='fas fa-info'></i>" data-off="<i class='fas fa-info'></i>">
<button type="button" class="btn btn-box-tool" id="btnRefresh"><i class="fas fa-sync"></i></button>
</div>
</div>
</div>
<div class="row" id="totalBotOverview"></div>
<div class="row" id="botRow"></div>
</section>
</div>
<!-- Footer -->
<footer class="main-footer">
<div class="pull-right"><strong data-i18n="global-version">Version</strong> <span id="version">0.0.0.0</span></div>
<strong>
<a target="_blank" href="https://github.com/JustArchi/ArchiSteamFarm">GitHub</a> -
<a target="_blank" href="https://github.com/JustArchi/ArchiSteamFarm/wiki"><span data-i18n="global-wiki">Wiki</span></a> -
<a target="_blank" href="https://github.com/JustArchi/ArchiSteamFarm/commits/master" id="changelog"><span data-i18n="global-changelog">Changelog</span></a>
</strong>
</footer>
<!-- Right Sidebar -->
<aside class="control-sidebar control-sidebar-dark">
<div class="tab-content">
<div class="tab-pane" id="control-right-sidebar"></div>
</div>
</aside>
<div class="control-sidebar-bg"></div>
</div>
<script src="https://cdnjs.cloudflare.com/ajax/libs/jquery/3.3.1/jquery.min.js"></script>
<script src="https://cdnjs.cloudflare.com/ajax/libs/twitter-bootstrap/3.3.7/js/bootstrap.min.js"></script>
<script src="https://cdnjs.cloudflare.com/ajax/libs/bootstrap-sweetalert/1.0.1/sweetalert.min.js"></script>
<script src="../js/adminlte.min.js"></script>
<script src="https://cdnjs.cloudflare.com/ajax/libs/slick-carousel/1.8.1/slick.min.js"></script>
<script src="https://cdnjs.cloudflare.com/ajax/libs/humanize-duration/3.12.1/humanize-duration.min.js"></script>
<script src="https://cdnjs.cloudflare.com/ajax/libs/moment.js/2.20.1/moment.min.js"></script>
<script src="https://cdnjs.cloudflare.com/ajax/libs/jquery.i18n/1.0.4/jquery.i18n.min.js"></script>
<script src="https://cdnjs.cloudflare.com/ajax/libs/jquery.i18n/1.0.4/jquery.i18n.messagestore.min.js"></script>
<script src="https://cdnjs.cloudflare.com/ajax/libs/jquery.i18n/1.0.4/jquery.i18n.fallbacks.min.js"></script>
<script src="https://cdnjs.cloudflare.com/ajax/libs/jquery.i18n/1.0.4/jquery.i18n.language.min.js"></script>
<script src="https://cdnjs.cloudflare.com/ajax/libs/jquery.i18n/1.0.4/jquery.i18n.parser.min.js"></script>
<script src="https://cdnjs.cloudflare.com/ajax/libs/jquery.i18n/1.0.4/jquery.i18n.emitter.min.js"></script>
<script src="https://cdnjs.cloudflare.com/ajax/libs/jquery.i18n/1.0.4/jquery.i18n.emitter.bidi.min.js"></script>
<script src="https://cdnjs.cloudflare.com/ajax/libs/bootstrap-toggle/2.2.2/js/bootstrap-toggle.min.js"></script>
<script src="../js/utils.js"></script>
<script src="../js/i18n.js"></script>
<script src="../js/app.js"></script>
<script>
$(function () {
'use strict';
store('CurrentPage', 'pages/bots.html');
var tmpHideOnlineBots = get('chkOn'),
tmpHideInactiveBots = get('chkInactive'),
tmpHideOfflineBots = get('chkOff'),
tmpShowKeyButton = get('chkKey'),
tmpShowDeleteButton = get('chkDelete'),
tmpSimpleFarmingInfo = get('chkSimple');
$(document).delegate('#txtAddKeys, #delimiter', 'keydown', function (e) {
var keyCode = e.keyCode || e.which;
if (keyCode == 9) {
e.preventDefault();
e.stopImmediatePropagation();
var start = this.selectionStart;
var end = this.selectionEnd;
$(this).val($(this).val().substring(0, start) + "\t" + $(this).val().substring(end)); // set textarea value to: text before caret + tab + text after caret
this.selectionStart = this.selectionEnd = start + 1; // put caret at right position again
}
});
$('.box-tools').ready(function () {
if (tmpHideOnlineBots === 'true') $('#chkOn').bootstrapToggle('on');
if (tmpHideInactiveBots === 'true') $('#chkInactive').bootstrapToggle('on');
if (tmpHideOfflineBots === 'true') $('#chkOff').bootstrapToggle('on');
if (tmpHideOnlineBots !== 'true' || tmpHideInactiveBots !== 'true' || tmpHideOfflineBots !== 'true') loadPageContent();
if (tmpShowKeyButton === 'true') $('#chkKey').bootstrapToggle('on');
if (tmpShowDeleteButton === 'true') $('#chkDelete').bootstrapToggle('on');
if (tmpSimpleFarmingInfo === 'true') $('#chkSimple').bootstrapToggle('on');
$('#chkOn, #chkInactive, #chkOff, #chkKey, #chkDelete, #chkSimple').change(function() {
store($(this).attr('id'), $(this).prop('checked'));
loadPageContent();
});
$('#btnRefresh').click(function () {
$('#btnRefresh').blur();
loadPageContent();
});
});
function loadPageContent() {
var tmpHideOnlineBots = get('chkOn'),
tmpHideInactiveBots = get('chkInactive'),
tmpHideOfflineBots = get('chkOff'),
tmpShowKeyButton = get('chkKey'),
tmpShowDeleteButton = get('chkDelete'),
tmpSimpleFarmingInfo = get('chkSimple'),
tmpDelimiter = get('delimiter');
$('#totalBotOverview').empty();
$('#botRow').empty();
if (!tmpDelimiter) {
tmpDelimiter = '\t';
}
$.ajax({
url: '/Api/Bot/ASF',
type: 'GET',
success: function (data) {
var json = data.Result,
steamAvatarBaseURL = 'https://steamcdn-a.akamaihd.net/steamcommunity/public/images/avatars/',
steamAvatarDefault = 'fe/fef49e7fa7e1997310d705b2a6158ff8dc1cdfeb.jpg',
steamGameBaseURL = 'https://steamcdn-a.akamaihd.net/steam/apps/',
totalGamesRemaining = 0,
totalTimeRemaining = 0,
totalCardsRemaining = 0,
farmingIsActive = false;
var deleteBotHTML = tmpShowDeleteButton === 'true' ? '<button type="button" class="btn btn-box-tool" data-command="deleteBot"><i class="far fa-trash-alt"></i></button>' : '';
var bgrHTML = tmpShowKeyButton === 'true' ? '<button type="button" class="btn btn-box-tool" data-command="BGR"><i class="fas fa-key"></i></button>' : '';
for (var i = 0; i < json.length; i++) {
var obj = json[i],
BotName = obj.BotName,
AvatarHash = obj.AvatarHash,
IsPlayingPossible = obj.IsPlayingPossible,
KeepRunning = obj.KeepRunning,
SteamID = obj.SteamID,
Paused = obj.CardsFarmer.Paused,
boxColorHTML = '',
avatarHTML = '',
profileHTML = '',
startOrStopHTML = '',
pauseOrResumeHTML = '',
expandBoxHTML = '',
allGamesHTML = '',
boxBodyHTML = '';
if (AvatarHash) {
var folder = AvatarHash.substring(0, 2);
avatarHTML = steamAvatarBaseURL + folder + '/' + AvatarHash + '.jpg';
} else {
avatarHTML = steamAvatarBaseURL + steamAvatarDefault;
}
profileHTML = '<img src="' + avatarHTML + '">';
if (KeepRunning === false) { // Bot is offline
if (tmpHideOfflineBots === 'true') continue;
boxColorHTML = 'box-gray';
startOrStopHTML = '<button type="button" class="btn btn-box-tool bot-stopped" data-command="startBot"><i class="fas fa-power-off"></i></button>';
} else { // Bot is online
if (tmpHideOnlineBots === 'true') continue;
boxColorHTML = 'box-warning';
startOrStopHTML = '<button type="button" class="btn btn-box-tool bot-started" data-command="stopBot"><i class="fas fa-power-off"></i></button>';
var TimeRemaining = moment.duration(obj.CardsFarmer.TimeRemaining).asMilliseconds();
if (SteamID === 0) { // Bot is not connected to steam
boxColorHTML = 'box-danger';
} else { // Bot is connected to steam
profileHTML = '<a href="https://steamcommunity.com/profiles/' + obj.s_SteamID + '" target="_blank">'
+ '<img src="' + avatarHTML + '">'
+ '</a>';
if (TimeRemaining !== 0) { // Bot is farming
var GamesToFarm = obj.CardsFarmer.GamesToFarm,
CurrentGamesFarming = obj.CardsFarmer.CurrentGamesFarming,
allGamesFarmingAppID = [],
allGamesFarmingName = [],
allCardsRemaining = 0;
farmingIsActive = true; // At least one bot is farming
boxColorHTML = 'box-success';
for (var j = 0; j < GamesToFarm.length; j++) {
totalCardsRemaining = totalCardsRemaining + GamesToFarm[j].CardsRemaining;
allCardsRemaining = allCardsRemaining + GamesToFarm[j].CardsRemaining;
}
for (var k = 0; k < CurrentGamesFarming.length; k++) {
allGamesFarmingAppID.push(CurrentGamesFarming[k].AppID);
allGamesFarmingName.push(CurrentGamesFarming[k].GameName);
}
if (totalTimeRemaining < TimeRemaining) totalTimeRemaining = TimeRemaining;
totalGamesRemaining += GamesToFarm.length;
expandBoxHTML = '<button type="button" class="btn btn-box-tool" data-widget="collapse" id="collapse-trigger"><i class="fas fa-plus"></i></button>';
if (IsPlayingPossible) {
if (Paused) {
allGamesHTML = '<p class="text-center no-margin">' + $.i18n('bots-paused') + '</p>';
} else {
if (tmpSimpleFarmingInfo === 'true') {
allGamesHTML = '<p class="text-center no-margin">' + allGamesFarmingName.join(", ") + '</p>';
} else {
if (allGamesFarmingAppID.length === 1) {
var value = allGamesFarmingAppID;
allGamesHTML = '<img src="' + steamGameBaseURL + value[0] + '/header.jpg" alt="" class="img-responsive">'; // ToDo: Fill alt="" with gameName
} else { // Multiple game farming is active
allGamesHTML = '<div class="games-carousel-' + BotName + '">';
for (var appID in allGamesFarmingAppID) {
var value = allGamesFarmingAppID[appID];
allGamesHTML += '<div class="game-box" style="max-height: 215px;"><img src="' + steamGameBaseURL + value + '/header.jpg" alt="" class="img-responsive"></div>'; // ToDo: Fill alt="" with gameName
}
allGamesHTML += '</div>';
}
}
}
} else {
allGamesHTML = '<p class="text-center no-margin">' + $.i18n('bots-in-use') + '</p>';
}
boxBodyHTML = '<div class="box-body" id="' + BotName + '" style="display:none;">'
+ '<div class="row">'
+ '<div class="col-lg-8 col-md-8 col-sm-8 col-xs-8">'
+ '<span class="pull-left"><i class="far fa-clock"></i> ' + humanizeDuration(TimeRemaining) + '</span>'
+ '</div>'
+ '<div class="col-lg-4 col-md-4 col-sm-4 col-xs-4">'
+ '<span class="pull-right"><i class="far fa-clone"></i> ' + allCardsRemaining + '</span>'
+ '</div>'
+ '</div>'
+ allGamesHTML
+ '</div>';
} else { // Bot is inactive
if (tmpHideInactiveBots === 'true') continue;
}
}
if (Paused) {
pauseOrResumeHTML = '<button type="button" class="btn btn-box-tool bot-paused" data-command="resumeBot"><i class="fas fa-pause"></i></button>';
} else {
pauseOrResumeHTML = '<button type="button" class="btn btn-box-tool bot-resumed" data-command="pauseBot"><i class="fas fa-pause"></i></button>';
}
}
$('#botRow').append('<div class="col-lg-3 col-md-4 col-sm-6 col-xs-12">'
+ '<div class="box ' + boxColorHTML + ' collapsed-box" id="bot-box-' + BotName + '">'
+ '<div class="box-header with-border botHeader">'
+ profileHTML
+ '<h3 class="box-title botTitle">' + BotName + '</h3>'
+ '<div class="box-tools pull-right botTools" id="' + BotName + '">'
+ startOrStopHTML
+ pauseOrResumeHTML
+ bgrHTML
+ deleteBotHTML
+ expandBoxHTML
+ '</div>'
+ '</div>'
+ boxBodyHTML
+ '</div>'
+ '</div>');
$('#bot-box-' + BotName).boxWidget({
animationSpeed: 500,
collapseTrigger: '#collapse-trigger',
collapseIcon: 'fa-minus',
expandIcon: 'fa-plus',
})
.on('expanded.boxwidget', function (BotName) {
var botCarousel = $('.games-carousel-' + BotName);
if ($(botCarousel).hasClass('slick-initialized')) { // Check if Slick was already initialized
$(botCarousel).slick('slickPlay'); // Slick is set up, so just resume the animation
} else {
$(botCarousel).slick({ // Set up Slick for the first time.
slidesToShow: 1,
draggable: true,
autoplay: true,
autoplaySpeed: 2000,
arrows: false,
infinite: true
});
}
}.bind(null, BotName))
.on('collapsed.boxwidget', function (BotName) {
$('.games-carousel-' + BotName).slick('slickPause'); // Pause Slick's animation and collapse the menu
}.bind(null, BotName)
);
$('#bot-box-' + BotName + ' .btn').click(function () {
var BotName = $(this).parent().attr('id'),
cmd = $(this).data('command'),
$botBox = $('#bot-box-' + BotName);
if (typeof cmd === 'undefined') {
return;
}
$botBox.append('<div class="overlay bot-box-loading"><i class="fas fa-sync fa-spin"></i></div>');
switch (cmd) {
case 'startBot':
$.ajax({
url: '/Api/Command/start ' + encodeURIComponent(BotName),
type: 'POST',
success: function (data) {
$('.overlay').remove();
swal({
title: $.i18n('global-success-title'),
text: $.i18n('bots-start-success', BotName),
type: 'success'
}, function () { location.reload(); });
}
});
break;
case 'stopBot':
$.ajax({
url: '/Api/Command/stop ' + encodeURIComponent(BotName),
type: 'POST',
success: function (data) {
$('.overlay').remove();
swal({
title: $.i18n('global-success-title'),
text: $.i18n('bots-stop-success', BotName),
type: 'success'
}, function () { location.reload(); });
}
});
break;
case 'pauseBot':
$.ajax({
url: '/Api/Command/pause ' + encodeURIComponent(BotName),
type: 'POST',
success: function (data) {
$('.overlay').remove();
swal({
title: $.i18n('global-success-title'),
text: $.i18n('bots-pause-success', BotName),
type: 'success'
}, function () { location.reload(); });
}
});
break;
case 'resumeBot':
$.ajax({
url: '/Api/Command/resume ' + encodeURIComponent(BotName),
type: 'POST',
success: function (data) {
$('.overlay').remove();
swal({
title: $.i18n('global-success-title'),
text: $.i18n('bots-resume-success', BotName),
type: 'success'
}, function () { location.reload(); });
}
});
break;
case 'deleteBot':
swal({
title: $.i18n('global-question-title'),
text: $.i18n('bots-recover-files'),
type: 'warning',
showCancelButton: true,
confirmButtonClass: 'btn-danger',
confirmButtonText: $.i18n('bots-confirm-delete'),
closeOnConfirm: false,
showLoaderOnConfirm: true
}, function (isConfirm) {
if (isConfirm) {
$.ajax({
url: '/Api/Bot/' + encodeURIComponent(BotName),
type: 'DELETE',
success: function (data) {
$('.overlay').remove();
swal({
title: $.i18n('global-success-title'),
text: $.i18n('bots-delete-success', BotName),
type: 'success'
}, function () { location.reload(); });
}
});
} else {
$('.overlay').remove();
}
});
break;
case 'BGR':
var bgrHTML = '<div class="nav-tabs-custom">'
+ '<ul class="nav nav-tabs nav-justified">'
+ '<li class="active"><a href="#addKeys" data-toggle="tab" aria-expanded="true">' + $.i18n('bots-redeem-add-title') + '</a></li>'
+ '<li class=""><a href="#unusedKeys" data-toggle="tab" aria-expanded="false">' + $.i18n('bots-redeem-unused-title') + '</a></li>'
+ '<li class=""><a href="#usedKeys" data-toggle="tab" aria-expanded="false">' + $.i18n('bots-redeem-used-title') + '</a></li>'
+ '</ul>'
+ '<div class="tab-content">'
+ '<div class="tab-pane active" id="addKeys">'
+ '<p class="lead text-muted" style="display: block;">' + $.i18n('bots-syntax') + '</p>'
+ '<textarea id="txtAddKeys"></textarea>'
+ '<div class="input-group">'
+ '<span class="input-group-addon" id="delimiter-text">' + $.i18n('bots-delimiter') + '</span>'
+ '<input type="text" class="form-control" id="delimiter" value="' + tmpDelimiter + '" aria-describedby="delimiter-text">'
+ '</div>'
+ '</div>'
+ '<div class="tab-pane" id="unusedKeys">'
+ '<textarea id="txtUnusedKeys"></textarea>'
+ '</div>'
+ '<div class="tab-pane" id="usedKeys">'
+ '<textarea id="txtUsedKeys"></textarea>'
+ '</div>'
+ '</div>'
+ '</div>';
swal({
title: $.i18n('bots-redeem-title'),
text: bgrHTML,
html: true,
customClass: 'swal-wide',
showCancelButton: true,
confirmButtonClass: 'btn-success',
confirmButtonText: $.i18n('bots-redeem-add-button'),
closeOnConfirm: false,
showLoaderOnConfirm: true
}, function (isConfirm) {
if (isConfirm === false) {
$("#downloadUnusedKeysBtn").remove();
$("#downloadUsedKeysBtn").remove();
$('.overlay').remove();
return false;
}
var val = $('#txtAddKeys').val();
var _gamesToRedeemInBackground = {},
gamesAndKeys = [],
lines = val.split('\n'),
currentDelimiter = $('#delimiter').val();
store('delimiter', currentDelimiter);
for (var i = 0; i < lines.length; i++) {
if (lines[i] !== '') gamesAndKeys.push(lines[i].split(currentDelimiter));
}
for (var j = 0; j < gamesAndKeys.length; j++) {
var obj = gamesAndKeys[j];
_gamesToRedeemInBackground[obj[1]] = obj[0];
}
var ajaxData = { GamesToRedeemInBackground: _gamesToRedeemInBackground };
$.ajax({
url: '/Api/GamesToRedeemInBackground/' + encodeURIComponent(BotName),
type: 'POST',
data: JSON.stringify(ajaxData, null, "\t"),
contentType: 'application/json',
success: function (data) {
var obj = data.Result,
gamesAdded = Object.keys(obj).length;
swal({
title: $.i18n('global-success-title'),
text: $.i18n('bots-redeem-confirm', gamesAdded, BotName),
type: 'success'
}, function () { location.reload(); });
},
error: function (jqXHR, textStatus, errorThrown) {
swal({
title: $.i18n('global-error-title'),
text: jqXHR.status + ' ' + errorThrown + ' - ' + jqXHR.responseJSON.Message,
type: 'error'
}, function () { location.reload(); });
}
});
$('.overlay').remove();
});
$('a[data-toggle="tab"]').on('shown.bs.tab', function (e) {
var target = $(e.target).attr("href");
if (target === '#unusedKeys') {
$("#downloadUnusedKeysBtn").remove();
$("#downloadUsedKeysBtn").remove();
$(".confirm").hide();
$(".sa-button-container").append('<div id="downloadUnusedKeysBtn" class="sa-confirm-button-container">'
+ '<button class="confirm btn btn-lg btn-success" id="downloadUnusedKeys" tabindex="1" style="display: inline-block;">'
+ $.i18n('bots-redeem-unused-button', BotName) + '</button>'
+ '</div>');
$('#downloadUnusedKeys').on('click', function (e) {
e.preventDefault();
var unusedText = $('#txtUnusedKeys').val();
if (unusedText === '') {
$("#downloadUnusedKeysBtn").remove();
swal({
title: $.i18n('global-error-title'),
text: $.i18n('bots-download'),
type: 'error'
});
$('.overlay').remove();
return false;
}
download(BotName + '.keys.unused', unusedText);
});
$.ajax({
url: '/Api/GamesToRedeemInBackground/' + encodeURIComponent(BotName),
type: 'GET',
success: function (data) {
var obj = data.Result,
unusedKeys = obj[BotName].UnusedKeys;
for (var key in unusedKeys) {
if (unusedKeys.hasOwnProperty(key)) {
$('#txtUnusedKeys').append(unusedKeys[key] + tmpDelimiter + key + '\n');
}
}
var allKeys = $('#txtUnusedKeys').val();
$('#txtUnusedKeys').val(allKeys.substring(0,allKeys.length-1));
}
});
} else if (target === '#usedKeys') {
$("#downloadUnusedKeysBtn").remove();
$("#downloadUsedKeysBtn").remove();
$(".confirm").hide();
$(".sa-button-container").append('<div id="downloadUsedKeysBtn" class="sa-confirm-button-container">'
+ '<button class="confirm btn btn-lg btn-success" id="downloadUsedKeys" tabindex="1" style="display: inline-block;">'
+ $.i18n('bots-redeem-used-button', BotName) + '</button>'
+ '</div>');
$('#downloadUsedKeys').on('click', function (e) {
e.preventDefault();
var usedText = $('#txtUsedKeys').val();
if (usedText === '') {
$("#downloadUsedKeysBtn").remove();
swal({
title: $.i18n('global-error-title'),
text: $.i18n('bots-download'),
type: 'error'
});
$('.overlay').remove();
return false;
}
download(BotName + '.keys.used', usedText);
});
$.ajax({
url: '/Api/GamesToRedeemInBackground/' + encodeURIComponent(BotName),
type: 'GET',
success: function (data) {
var obj = data.Result,
usedKeys = obj[BotName].UsedKeys;
for (var key in usedKeys) {
if (usedKeys.hasOwnProperty(key)) {
$('#txtUsedKeys').append(usedKeys[key] + tmpDelimiter + key + '\n');
}
}
var allKeys = $('#txtUsedKeys').val();
$('#txtUsedKeys').val(allKeys.substring(0,allKeys.length-1));
}
});
} else if (target === '#addKeys') {
$("#downloadUnusedKeysBtn").remove();
$("#downloadUsedKeysBtn").remove();
$(".confirm").show();
}
});
break;
}
});
}
if (farmingIsActive) { // Add info boxes if at least one bot is farming
$('#totalBotOverview').html('<div class="col-md-4 col-sm-4 col-xs-12">'
+ '<div class="info-box bot-info-box">'
+ '<span class="info-box-icon bg-purple bots-info-box-icon"><i class="fas fa-gamepad"></i></span>'
+ '<div class="info-box-content bot-info-box-content">'
+ '<span class="info-box-text">' + $.i18n('bots-infobox-games') + '</span>'
+ '<span class="info-box-number" id="totalGamesRemaining"></span>'
+ '</div>'
+ '</div>'
+ '</div>'
+ '<div class="col-md-4 col-sm-4 col-xs-12">'
+ '<div class="info-box bot-info-box">'
+ '<span class="info-box-icon bg-green bots-info-box-icon"><i class="far fa-clock"></i></span>'
+ '<div class="info-box-content bot-info-box-content">'
+ '<span class="info-box-text">' + $.i18n('bots-infobox-time') + '</span>'
+ '<span class="info-box-number" id="totalTimeRemaining"></span>'
+ '</div>'
+ '</div>'
+ '</div>'
+ '<div class="col-md-4 col-sm-4 col-xs-12">'
+ '<div class="info-box bot-info-box">'
+ '<span class="info-box-icon bg-aqua bots-info-box-icon"><i class="far fa-clone"></i></span>'
+ '<div class="info-box-content bot-info-box-content">'
+ '<span class="info-box-text">' + $.i18n('bots-infobox-cards') + '</span>'
+ '<span class="info-box-number" id="totalCardsRemaining"></span>'
+ '</div>'
+ '</div>'
+ '</div>');
$('#totalGamesRemaining').text(totalGamesRemaining);
$('#totalTimeRemaining').text(humanizeDuration(totalTimeRemaining));
$('#totalCardsRemaining').text(totalCardsRemaining);
}
}
});
}
function download(filename, text) {
var element = document.createElement('a');
element.setAttribute('href', 'data:text/plain;charset=utf-8,' + encodeURIComponent(text));
element.setAttribute('download', filename);
element.style.display = 'none';
document.body.appendChild(element);
element.click();
document.body.removeChild(element);
}
});
</script>
</body>
</html>

View file

@ -1,422 +0,0 @@
<!DOCTYPE html>
<html>
<head>
<title data-i18n="commands-title">ASF | Commands</title>
<meta charset="utf-8">
<meta http-equiv="X-UA-Compatible" content="IE=edge,chrome=1">
<meta content="width=device-width, initial-scale=1, maximum-scale=1, user-scalable=no" name="viewport">
<script defer src="https://use.fontawesome.com/releases/v5.1.0/js/all.js"></script> <!--Change to cdnjs once available-->
<link rel="icon" href="../img/favicon.png" type="image/png">
<link rel="shortcut icon" href="../img/favicon.ico" type="img/x-icon">
<link rel="stylesheet" href="https://cdnjs.cloudflare.com/ajax/libs/twitter-bootstrap/3.3.7/css/bootstrap.min.css">
<link rel="stylesheet" href="https://cdnjs.cloudflare.com/ajax/libs/bootstrap-sweetalert/1.0.1/sweetalert.min.css">
<link rel="stylesheet" href="https://cdnjs.cloudflare.com/ajax/libs/admin-lte/2.4.2/css/AdminLTE.min.css">
<link rel="stylesheet" href="https://fonts.googleapis.com/css?family=Source+Sans+Pro:300,400,600,700,300italic,400italic,600italic">
<link rel="stylesheet" href="https://cdnjs.cloudflare.com/ajax/libs/bootstrap-select/1.12.4/css/bootstrap-select.min.css">
<link rel="stylesheet" href="https://cdnjs.cloudflare.com/ajax/libs/flag-icon-css/3.1.0/css/flag-icon.min.css">
<link rel="stylesheet" href="https://cdnjs.cloudflare.com/ajax/libs/bootstrap-toggle/2.2.2/css/bootstrap-toggle.min.css">
<link rel="stylesheet" href="../css/_all-skins.min.css">
<link rel="stylesheet" href="../css/app.css">
<link rel="stylesheet" href="../css/_nightmode.min.css">
</head>
<body class="hold-transition skin-blue sidebar-mini fixed">
<div class="wrapper">
<!-- Header -->
<header class="main-header">
<!-- Logo -->
<a href="javascript:void(0)" class="logo">
<span class="logo-mini"><b>A</b>SF</span>
<span class="logo-lg"><b>Archi</b>SteamFarm</span>
</a>
<nav class="navbar navbar-static-top" role="navigation">
<!-- Left Sidebar Toggle Button-->
<a href="javascript:void(0)" class="sidebar-toggle" id="leftSidebar" data-toggle="push-menu" role="button">
<i class="fas fa-bars"></i>
<span class="sr-only" data-i18n="global-navigation">Toggle navigation</span>
</a>
<div class="navbar-custom-menu">
<ul class="nav navbar-nav">
<!-- Language Button -->
<li class="dropdown">
<a class="dropdown-toggle" href="javascript:void(0)" data-toggle="dropdown"><i id="currentLanguage" class="flag-icon flag-icon-us"></i></a>
<div class="dropdown-menu dropdown-language"></div>
</li>
<!-- Right Sidebar Toggle Button -->
<li><a href="javascript:void(0)" data-toggle="control-sidebar"><i class="fas fa-cogs"></i></a></li>
</ul>
</div>
</nav>
</header>
<!-- Left Sidebar -->
<aside class="main-sidebar">
<section class="sidebar">
<ul class="sidebar-menu" data-widget="tree">
<li class="header" data-i18n="global-home">Home</li>
<li class="active"><a href="commands.html"><i class="fas fa-laptop fa-fw"></i> <span data-i18n="global-commands">Commands</span></a></li>
<li>
<a href="bots.html">
<i class="fas fa-users fa-fw"></i> <span data-i18n="global-bots">Bots</span>
<span class="pull-right-container bot-status">
<small class="label pull-right bg-gray" id="offlineBots">0</small>
<small class="label pull-right bg-red" id="disconnectedBots" style="display:none;">0</small>
<small class="label pull-right bg-yellow" id="onlineBots">0</small>
<small class="label pull-right bg-olive" id="farmingBots">0</small>
</span>
</a>
</li>
<li><a href="log.html"><i class="far fa-file-alt fa-fw"></i> <span data-i18n="global-log">Log</span></a></li>
<li class="header" data-i18n="global-config">Config</li>
<li><a href="editor.html"><i class="far fa-edit fa-fw"></i> <span data-i18n="global-editor">Editor</span></a></li>
<li><a href="generator.html"><i class="far fa-copy fa-fw"></i> <span data-i18n="global-generator">Generator</span></a></li>
<li class="header" data-i18n="global-information">Information</li>
<li>
<a class="info-overview" href="javascript:void(0)">
<i class="fas fa-tachometer-alt fa-fw"></i> <span data-i18n="global-ram-usage">RAM Usage</span>
<span class="pull-right-container">
<small class="label pull-right bg-blue" id="ramUsage">0.00 MB</small>
</span>
</a>
</li>
<li>
<a class="info-overview" href="javascript:void(0)">
<i class="far fa-clock fa-fw"></i> <span data-i18n="global-uptime">Uptime</span>
<span class="pull-right-container">
<small class="label pull-right bg-blue" id="uptime">0d 0h 0m</small>
</span>
</a>
</li>
</ul>
</section>
</aside>
<!-- Content -->
<div class="content-wrapper">
<section class="content-header">
<h1>
<span data-i18n="global-commands">Commands</span>
<small data-i18n="global-control-panel">Control Panel</small>
</h1>
<ol class="breadcrumb">
<li><i class="fas fa-home"></i> <span data-i18n="global-home">Home</span></li>
<li class="active"><i class="fas fa-laptop"></i> <span data-i18n="global-commands">Commands</span></li>
</ol>
</section>
<!-- Content Body -->
<section class="content container-fluid">
<div class="box">
<div class="box-header with-border">
<i class="fas fa-laptop"></i>
<h3 class="box-title" data-i18n="global-commands">Commands</h3>
<div class="box-tools pull-right">
<input id="chkClear" type="checkbox" data-style="ios single-btn" data-onstyle="default" data-toggle="toggle" data-size="mini" data-on="<i class='fas fa-eraser'></i>" data-off="<i class='fas fa-eraser'></i>">
</div>
</div>
<div class="box-body">
<div class="box-content-commands"></div>
<input id="commandSent" type="text" class="form-control" disabled>
</div>
<div class="box-footer">
<div class="input-group">
<div id="commandsDropDownBox" class="input-group-btn hidden-xs">
<select id="commandsDropDown" class="form-control selectpicker" data-dropup-auto="false" data-size="7" data-live-search="true" data-i18n="title-commands" title="Commands"></select>
</div>
<div class="input-group-btn hidden-xs">
<select id="botsDropDown" class="form-control selectpicker" data-dropup-auto="false" data-size="7" data-live-search="true" data-i18n="title-bots" title="Bots"></select>
</div>
<input id="commandInput" type="text" class="form-control" data-i18n="placeholder-commands" placeholder="Type command...">
<div class="input-group-btn">
<button type="button" class="btn btn-default" id="sendCommand"><i class="far fa-paper-plane"></i></button>
</div>
</div>
</div>
</div>
</section>
</div>
<!-- Footer -->
<footer class="main-footer">
<div class="pull-right"><strong data-i18n="global-version">Version</strong> <span id="version">0.0.0.0</span></div>
<strong>
<a target="_blank" href="https://github.com/JustArchi/ArchiSteamFarm">GitHub</a> -
<a target="_blank" href="https://github.com/JustArchi/ArchiSteamFarm/wiki"><span data-i18n="global-wiki">Wiki</span></a> -
<a target="_blank" href="https://github.com/JustArchi/ArchiSteamFarm/commits/master" id="changelog"><span data-i18n="global-changelog">Changelog</span></a>
</strong>
</footer>
<!-- Right Sidebar -->
<aside class="control-sidebar control-sidebar-dark">
<div class="tab-content">
<div class="tab-pane" id="control-right-sidebar"></div>
</div>
</aside>
<div class="control-sidebar-bg"></div>
</div>
<script src="https://cdnjs.cloudflare.com/ajax/libs/jquery/3.3.1/jquery.min.js"></script>
<script src="https://cdnjs.cloudflare.com/ajax/libs/twitter-bootstrap/3.3.7/js/bootstrap.min.js"></script>
<script src="https://cdnjs.cloudflare.com/ajax/libs/interact.js/1.2.9/interact.min.js"></script>
<script src="https://cdnjs.cloudflare.com/ajax/libs/bootstrap-sweetalert/1.0.1/sweetalert.min.js"></script>
<script src="../js/adminlte.min.js"></script>
<script src="https://cdnjs.cloudflare.com/ajax/libs/jquery.i18n/1.0.4/jquery.i18n.min.js"></script>
<script src="https://cdnjs.cloudflare.com/ajax/libs/jquery.i18n/1.0.4/jquery.i18n.messagestore.min.js"></script>
<script src="https://cdnjs.cloudflare.com/ajax/libs/jquery.i18n/1.0.4/jquery.i18n.fallbacks.min.js"></script>
<script src="https://cdnjs.cloudflare.com/ajax/libs/jquery.i18n/1.0.4/jquery.i18n.language.min.js"></script>
<script src="https://cdnjs.cloudflare.com/ajax/libs/jquery.i18n/1.0.4/jquery.i18n.parser.min.js"></script>
<script src="https://cdnjs.cloudflare.com/ajax/libs/jquery.i18n/1.0.4/jquery.i18n.emitter.min.js"></script>
<script src="https://cdnjs.cloudflare.com/ajax/libs/jquery.i18n/1.0.4/jquery.i18n.emitter.bidi.min.js"></script>
<script src="https://cdnjs.cloudflare.com/ajax/libs/bootstrap-select/1.12.4/js/bootstrap-select.min.js"></script>
<script src="https://cdnjs.cloudflare.com/ajax/libs/bootstrap-toggle/2.2.2/js/bootstrap-toggle.min.js"></script>
<script src="../js/utils.js"></script>
<script src="../js/i18n.js"></script>
<script src="../js/app.js"></script>
<script>
$(function () {
'use strict';
store('CurrentPage', 'pages/commands.html');
var $commandInput = $('#commandInput'),
$botsDropDown = $("#botsDropDown"),
$commandsDropDown = $("#commandsDropDown");
var keyCount = 0,
prevCommand = (JSON.parse(get('prevCommand')) === null) ? [] : JSON.parse(get('prevCommand'));
$commandInput.focus();
$('#sendCommand').click(function (e) {
var cmd = $commandInput.val();
keyCount = 0;
if (typeof prevCommand[prevCommand.length - 1] === 'undefined') {
prevCommand.push(cmd);
} else if (prevCommand[prevCommand.length - 1] !== cmd) {
prevCommand.push(cmd);
}
store('prevCommand', JSON.stringify(prevCommand.slice(-20)));
prevCommand = (JSON.parse(get('prevCommand')) === null) ? [] : JSON.parse(get('prevCommand'));
sendCommand();
e.preventDefault();
});
$commandsDropDown.on('changed.bs.select', function (e) {
$cmdInput.val($commandsDropDown.val() + ' ');
// dirty... find a better solution
var elements = document.getElementById("commandsDropDown").options;
for(var i = 0; i < elements.length; i++){
elements[i].selected = false;
}
$commandsDropDown.selectpicker('render');
});
$botsDropDown.on('changed.bs.select', function (e) {
var bot = $botsDropDown.val(),
oldText = $cmdInput.val();
$cmdInput.val(oldText + bot);
// dirty... find a better solution
var elements = document.getElementById("botsDropDown").options;
for(var i = 0; i < elements.length; i++){
elements[i].selected = false;
}
$botsDropDown.selectpicker('render');
});
//#region Merge to one function
$(document).keydown(function (e) {
if (e.which == 38 && $commandInput.is(':focus')) {
if (prevCommand.length > keyCount) keyCount++;
var index = prevCommand.length - keyCount;
$commandInput.val(prevCommand[index]);
} else if (e.which == 40 && $commandInput.is(':focus')) {
if (keyCount > 0) keyCount--;
var index = prevCommand.length - keyCount;
$commandInput.val(prevCommand[index]);
}
});
$(document).keypress(function (e) {
var keyCode = e.keyCode || e.which;
if (keyCode == 13 && $cmdInput.val() !== "") {
e.preventDefault();
$('#sendCommand').click();
}
});
//#endregion Merge to one function
$('.box-tools').ready(function () {
var tmpAutoClear = get('chkClear');
if (tmpAutoClear == null) $('#chkClear').bootstrapToggle('on');
$('#chkClear').change(function() {
store($(this).attr('id'), $(this).prop('checked'));
});
});
$('.box-content-commands').ready(function () {
var tmpCommandHeight = get('commandHeight');
if (tmpCommandHeight) {
$('.box-content-commands').css('height', tmpCommandHeight + 'px');
if (shouldDropUp()) {
$commandsDropDown.addClass('dropup');
$botsDropDown.addClass('dropup');
$commandsDropDown.selectpicker('refresh');
$botsDropDown.selectpicker('refresh');
} else {
$commandsDropDown.removeClass('dropup');
$botsDropDown.removeClass('dropup');
$('.bootstrap-select').removeClass('dropup');
$commandsDropDown.selectpicker('refresh');
$botsDropDown.selectpicker('refresh');
}
} else {
$('.box-content-commands').css('height', 400 + 'px');
}
});
interact('.box-content-commands')
.resizable({
edges: { left: false, right: false, bottom: true, top: false },
restrictEdges: {
outer: 'parent',
endOnly: true,
},
inertia: true,
})
.on('resizemove', function (event) {
var target = event.target;
target.style.height = event.rect.height + 'px';
})
.on('resizeend', function (event) {
var currentHeight = parseInt(event.target.style.height, 10);
store('commandHeight', currentHeight);
if (shouldDropUp()) {
$commandsDropDown.addClass('dropup');
$botsDropDown.addClass('dropup');
$commandsDropDown.selectpicker('refresh');
$botsDropDown.selectpicker('refresh');
} else {
$commandsDropDown.removeClass('dropup');
$botsDropDown.removeClass('dropup');
$('.bootstrap-select').removeClass('dropup');
$commandsDropDown.selectpicker('refresh');
$botsDropDown.selectpicker('refresh');
}
});
$('.box-footer').ready(function () {
var cachedCommands = get('cachedCommands'),
cachedDate = get('cachedCommandsDate'),
today = new Date().toLocaleDateString();
if (cachedCommands && today == cachedDate) {
var myCommands = cachedCommands.split(',');
for (var i = 0; i < myCommands.length; i++) {
$commandsDropDown.append('<option title="Commands">' + myCommands[i] + '</option>');
}
$('.overlay').remove();
$commandsDropDown.selectpicker('refresh');
// fix for bootstrap-select elements
$('button > [data-id="commandsDropDown"]').attr("title", $.i18n('title-commands'));
$('[data-id="commandsDropDown"] > .filter-option').text($.i18n('title-commands'));
} else {
$('#commandsDropDownBox').append('<div class="overlay bot-box-loading"><i class="fas fa-sync fa-spin"></i></div>');
$.ajax({
url: '/Api/WWW/Send',
type: 'POST',
data: JSON.stringify({ "URL": "https://github.com/JustArchi/ArchiSteamFarm/wiki/Commands" }),
contentType: 'application/json',
success: function (data) {
var htmlString = data.Result,
doc = new DOMParser().parseFromString(htmlString,'text/html'),
result = doc.evaluate('//table[1]/tbody//td[1]', doc, null, XPathResult.ANY_TYPE, null),
myCommands = [],
xres;
while (xres = result.iterateNext()) {
var str = xres.innerText;
if (/\s/.test(str)) {
myCommands.push(str.substr(0,str.indexOf(' ')));
} else {
myCommands.push(str);
}
}
store('cachedCommands', myCommands);
store('cachedCommandsDate', new Date().toLocaleDateString());
for (var i = 0; i < myCommands.length; i++) {
$commandsDropDown.append('<option data-i18n="title-commands" title="Commands">' + myCommands[i] + '</option>');
}
$('.overlay').remove();
$commandsDropDown.selectpicker('refresh');
// fix for bootstrap-select elements
$('button > [data-id="commandsDropDown"]').attr("title", $.i18n('title-commands'));
$('[data-id="commandsDropDown"] > .filter-option').text($.i18n('title-commands'));
}
});
}
$botsDropDown.append('<option title="Bots">ASF</option>');
$.ajax({
url: '/Api/Bot/ASF',
type: 'GET',
success: function (data) {
var json = data.Result;
$botsDropDown.append('<option data-divider="true"></option>');
for (var i = 0; i < json.length; i++) {
var obj = json[i],
botName = obj.BotName;
$botsDropDown.append('<option data-i18n="title-bots" title="Bots">' + botName + '</option>');
}
$botsDropDown.selectpicker('refresh');
// fix for bootstrap-select elements
$('button > [data-id="botsDropDown"]').attr("title", $.i18n('title-bots'));
$('[data-id="botsDropDown"] > .filter-option').text($.i18n('title-bots'));
}
});
});
function shouldDropUp() {
var wrapper = $('.content-wrapper').height(),
header = $('.content-header').height(),
mainHeader = $('.main-header').height(),
box = $('.box').height(),
total = wrapper - (header + box + mainHeader),
dropdown = 236;
return dropdown > total;
}
});
</script>
</body>
</html>

View file

@ -1,192 +0,0 @@
<!DOCTYPE html>
<html>
<head>
<title data-i18n="editor-title">ASF | Config Editor</title>
<meta charset="utf-8">
<meta http-equiv="X-UA-Compatible" content="IE=edge,chrome=1">
<meta content="width=device-width, initial-scale=1, maximum-scale=1, user-scalable=no" name="viewport">
<script defer src="https://use.fontawesome.com/releases/v5.1.0/js/all.js"></script> <!--Change to cdnjs once available-->
<link rel="icon" href="../img/favicon.png" type="image/png">
<link rel="shortcut icon" href="../img/favicon.ico" type="img/x-icon">
<link rel="stylesheet" href="https://cdnjs.cloudflare.com/ajax/libs/twitter-bootstrap/3.3.7/css/bootstrap.min.css">
<link rel="stylesheet" href="https://cdnjs.cloudflare.com/ajax/libs/bootstrap-sweetalert/1.0.1/sweetalert.min.css">
<link rel="stylesheet" href="https://cdnjs.cloudflare.com/ajax/libs/admin-lte/2.4.2/css/AdminLTE.min.css">
<link rel="stylesheet" href="https://fonts.googleapis.com/css?family=Source+Sans+Pro:300,400,600,700,300italic,400italic,600italic">
<link rel="stylesheet" href="https://cdnjs.cloudflare.com/ajax/libs/flag-icon-css/3.1.0/css/flag-icon.min.css">
<link rel="stylesheet" href="https://cdnjs.cloudflare.com/ajax/libs/bootstrap-toggle/2.2.2/css/bootstrap-toggle.min.css">
<link rel="stylesheet" href="../css/_all-skins.min.css">
<link rel="stylesheet" href="../css/app.css">
<link rel="stylesheet" href="../css/_nightmode.min.css">
</head>
<body class="hold-transition skin-blue sidebar-mini fixed">
<div class="wrapper">
<!-- Header -->
<header class="main-header">
<!-- Logo -->
<a href="javascript:void(0)" class="logo">
<span class="logo-mini"><b>A</b>SF</span>
<span class="logo-lg"><b>Archi</b>SteamFarm</span>
</a>
<nav class="navbar navbar-static-top" role="navigation">
<!-- Left Sidebar Toggle Button-->
<a href="javascript:void(0)" class="sidebar-toggle" id="leftSidebar" data-toggle="push-menu" role="button">
<i class="fas fa-bars"></i>
<span class="sr-only" data-i18n="global-navigation">Toggle navigation</span>
</a>
<div class="navbar-custom-menu">
<ul class="nav navbar-nav">
<!-- Language Button -->
<li class="dropdown">
<a class="dropdown-toggle" href="javascript:void(0)" data-toggle="dropdown"><i id="currentLanguage" class="flag-icon flag-icon-us"></i></a>
<div class="dropdown-menu dropdown-language"></div>
</li>
<!-- Right Sidebar Toggle Button -->
<li><a href="javascript:void(0)" data-toggle="control-sidebar"><i class="fas fa-cogs"></i></a></li>
</ul>
</div>
</nav>
</header>
<!-- Left Sidebar -->
<aside class="main-sidebar">
<section class="sidebar">
<ul class="sidebar-menu" data-widget="tree">
<li class="header" data-i18n="global-home">Home</li>
<li><a href="commands.html"><i class="fas fa-laptop fa-fw"></i> <span data-i18n="global-commands">Commands</span></a></li>
<li>
<a href="bots.html">
<i class="fas fa-users fa-fw"></i> <span data-i18n="global-bots">Bots</span>
<span class="pull-right-container bot-status">
<small class="label pull-right bg-gray" id="offlineBots">0</small>
<small class="label pull-right bg-red" id="disconnectedBots" style="display:none;">0</small>
<small class="label pull-right bg-yellow" id="onlineBots">0</small>
<small class="label pull-right bg-olive" id="farmingBots">0</small>
</span>
</a>
</li>
<li><a href="log.html"><i class="far fa-file-alt fa-fw"></i> <span data-i18n="global-log">Log</span></a></li>
<li class="header" data-i18n="global-config">Config</li>
<li class="active"><a href="editor.html"><i class="far fa-edit fa-fw"></i> <span data-i18n="global-editor">Editor</span></a></li>
<li><a href="generator.html"><i class="far fa-copy fa-fw"></i> <span data-i18n="global-generator">Generator</span></a></li>
<li class="header" data-i18n="global-information">Information</li>
<li>
<a class="info-overview" href="javascript:void(0)">
<i class="fas fa-tachometer-alt fa-fw"></i> <span data-i18n="global-ram-usage">RAM Usage</span>
<span class="pull-right-container">
<small class="label pull-right bg-blue" id="ramUsage">0.00 MB</small>
</span>
</a>
</li>
<li>
<a class="info-overview" href="javascript:void(0)">
<i class="far fa-clock fa-fw"></i> <span data-i18n="global-uptime">Uptime</span>
<span class="pull-right-container">
<small class="label pull-right bg-blue" id="uptime">0d 0h 0m</small>
</span>
</a>
</li>
</ul>
</section>
</aside>
<!-- Content -->
<div class="content-wrapper">
<section class="content-header">
<h1>
<span data-i18n="global-editor">Editor</span>
<small data-i18n="global-control-panel">Control Panel</small>
</h1>
<ol class="breadcrumb">
<li><i class="fas fa-cogs"></i> <span data-i18n="global-config">Config</span></li>
<li class="active"><i class="far fa-edit"></i> <span data-i18n="global-editor">Editor</span></li>
</ol>
</section>
<!-- Content Body -->
<section class="content container-fluid">
<div class="box">
<div class="box-header with-border">
<i class="far fa-edit"></i>
<h3 class="box-title" data-i18n="editor-current">Currently editing:</h3>
<div class="box-tools pull-right">
<div class="btn-group">
<button type="button" class="btn btn-box-tool dropdown-toggle" data-toggle="dropdown">
<span data-i18n="editor-change">Change bot</span>
<span class="fas fa-caret-down"></span>
</button>
<ul class="dropdown-menu scrollable-menu" role="menu" id="botsDropDown"></ul>
</div>
</div>
</div>
<div class="box-body">
<div class="box-content-config"></div>
</div>
<div class="box-footer">
<div class="input-group pull-right">
<button class="btn btn-default" id="saveButton">
<i class="fas fa-save"></i> <span data-i18n="editor-save">Save</span>
</button>
</div>
</div>
</div>
</section>
</div>
<!-- Footer -->
<footer class="main-footer">
<div class="pull-right"><strong data-i18n="global-version">Version</strong> <span id="version">0.0.0.0</span></div>
<strong>
<a target="_blank" href="https://github.com/JustArchi/ArchiSteamFarm">GitHub</a> -
<a target="_blank" href="https://github.com/JustArchi/ArchiSteamFarm/wiki"><span data-i18n="global-wiki">Wiki</span></a> -
<a target="_blank" href="https://github.com/JustArchi/ArchiSteamFarm/commits/master" id="changelog"><span data-i18n="global-changelog">Changelog</span></a>
</strong>
</footer>
<!-- Right Sidebar -->
<aside class="control-sidebar control-sidebar-dark">
<div class="tab-content">
<div class="tab-pane" id="control-right-sidebar"></div>
</div>
</aside>
<div class="control-sidebar-bg"></div>
</div>
<script src="https://cdnjs.cloudflare.com/ajax/libs/jquery/3.3.1/jquery.min.js"></script>
<script src="https://cdnjs.cloudflare.com/ajax/libs/twitter-bootstrap/3.3.7/js/bootstrap.min.js"></script>
<script src="https://cdnjs.cloudflare.com/ajax/libs/bootstrap-sweetalert/1.0.1/sweetalert.min.js"></script>
<script src="../js/adminlte.min.js"></script>
<script src="https://cdnjs.cloudflare.com/ajax/libs/jquery.i18n/1.0.4/jquery.i18n.min.js"></script>
<script src="https://cdnjs.cloudflare.com/ajax/libs/jquery.i18n/1.0.4/jquery.i18n.messagestore.min.js"></script>
<script src="https://cdnjs.cloudflare.com/ajax/libs/jquery.i18n/1.0.4/jquery.i18n.fallbacks.min.js"></script>
<script src="https://cdnjs.cloudflare.com/ajax/libs/jquery.i18n/1.0.4/jquery.i18n.language.min.js"></script>
<script src="https://cdnjs.cloudflare.com/ajax/libs/jquery.i18n/1.0.4/jquery.i18n.parser.min.js"></script>
<script src="https://cdnjs.cloudflare.com/ajax/libs/jquery.i18n/1.0.4/jquery.i18n.emitter.min.js"></script>
<script src="https://cdnjs.cloudflare.com/ajax/libs/jquery.i18n/1.0.4/jquery.i18n.emitter.bidi.min.js"></script>
<script src="https://cdnjs.cloudflare.com/ajax/libs/bootstrap-toggle/2.2.2/js/bootstrap-toggle.min.js"></script>
<script src="../js/utils.js"></script>
<script src="../js/i18n.js"></script>
<script src="../js/app.js"></script>
<script>
$(function () {
'use strict';
store('CurrentPage', 'pages/editor.html');
$('.box-content-config').ready(function () {
$.ajax({
url: '/Api/Bot/ASF',
type: 'GET',
async: false,
success: function (data) {
var json = data.Result;
loadPageContentEditor(json[0].BotName);
}
});
});
});
</script>
</body>
</html>

View file

@ -1,189 +0,0 @@
<!DOCTYPE html>
<html>
<head>
<title data-i18n="generator-title">ASF | Config Generator</title>
<meta charset="utf-8">
<meta http-equiv="X-UA-Compatible" content="IE=edge,chrome=1">
<meta content="width=device-width, initial-scale=1, maximum-scale=1, user-scalable=no" name="viewport">
<script defer src="https://use.fontawesome.com/releases/v5.1.0/js/all.js"></script> <!--Change to cdnjs once available-->
<link rel="icon" href="../img/favicon.png" type="image/png">
<link rel="shortcut icon" href="../img/favicon.ico" type="img/x-icon">
<link rel="stylesheet" href="https://cdnjs.cloudflare.com/ajax/libs/twitter-bootstrap/3.3.7/css/bootstrap.min.css">
<link rel="stylesheet" href="https://cdnjs.cloudflare.com/ajax/libs/bootstrap-sweetalert/1.0.1/sweetalert.min.css">
<link rel="stylesheet" href="https://cdnjs.cloudflare.com/ajax/libs/admin-lte/2.4.2/css/AdminLTE.min.css">
<link rel="stylesheet" href="https://fonts.googleapis.com/css?family=Source+Sans+Pro:300,400,600,700,300italic,400italic,600italic">
<link rel="stylesheet" href="https://cdnjs.cloudflare.com/ajax/libs/flag-icon-css/3.1.0/css/flag-icon.min.css">
<link rel="stylesheet" href="https://cdnjs.cloudflare.com/ajax/libs/bootstrap-toggle/2.2.2/css/bootstrap-toggle.min.css">
<link rel="stylesheet" href="../css/_all-skins.min.css">
<link rel="stylesheet" href="../css/app.css">
<link rel="stylesheet" href="../css/_nightmode.min.css">
</head>
<body class="hold-transition skin-blue sidebar-mini fixed">
<div class="wrapper">
<!-- Header -->
<header class="main-header">
<!-- Logo -->
<a href="javascript:void(0)" class="logo">
<span class="logo-mini"><b>A</b>SF</span>
<span class="logo-lg"><b>Archi</b>SteamFarm</span>
</a>
<nav class="navbar navbar-static-top" role="navigation">
<!-- Left Sidebar Toggle Button-->
<a href="javascript:void(0)" class="sidebar-toggle" id="leftSidebar" data-toggle="push-menu" role="button">
<i class="fas fa-bars"></i>
<span class="sr-only" data-i18n="global-navigation">Toggle navigation</span>
</a>
<div class="navbar-custom-menu">
<ul class="nav navbar-nav">
<!-- Language Button -->
<li class="dropdown">
<a class="dropdown-toggle" href="javascript:void(0)" data-toggle="dropdown"><i id="currentLanguage" class="flag-icon flag-icon-us"></i></a>
<div class="dropdown-menu dropdown-language"></div>
</li>
<!-- Right Sidebar Toggle Button -->
<li><a href="javascript:void(0)" data-toggle="control-sidebar"><i class="fas fa-cogs"></i></a></li>
</ul>
</div>
</nav>
</header>
<!-- Left Sidebar -->
<aside class="main-sidebar">
<section class="sidebar">
<ul class="sidebar-menu" data-widget="tree">
<li class="header" data-i18n="global-home">Home</li>
<li><a href="commands.html"><i class="fas fa-laptop fa-fw"></i> <span data-i18n="global-commands">Commands</span></a></li>
<li>
<a href="bots.html">
<i class="fas fa-users fa-fw"></i> <span data-i18n="global-bots">Bots</span>
<span class="pull-right-container bot-status">
<small class="label pull-right bg-gray" id="offlineBots">0</small>
<small class="label pull-right bg-red" id="disconnectedBots" style="display:none;">0</small>
<small class="label pull-right bg-yellow" id="onlineBots">0</small>
<small class="label pull-right bg-olive" id="farmingBots">0</small>
</span>
</a>
</li>
<li><a href="log.html"><i class="far fa-file-alt fa-fw"></i> <span data-i18n="global-log">Log</span></a></li>
<li class="header" data-i18n="global-config">Config</li>
<li><a href="editor.html"><i class="far fa-edit fa-fw"></i> <span data-i18n="global-editor">Editor</span></a></li>
<li class="active"><a href="generator.html"><i class="far fa-copy fa-fw"></i> <span data-i18n="global-generator">Generator</span></a></li>
<li class="header" data-i18n="global-information">Information</li>
<li>
<a class="info-overview" href="javascript:void(0)">
<i class="fas fa-tachometer-alt fa-fw"></i> <span data-i18n="global-ram-usage">RAM Usage</span>
<span class="pull-right-container">
<small class="label pull-right bg-blue" id="ramUsage">0.00 MB</small>
</span>
</a>
</li>
<li>
<a class="info-overview" href="javascript:void(0)">
<i class="far fa-clock fa-fw"></i> <span data-i18n="global-uptime">Uptime</span>
<span class="pull-right-container">
<small class="label pull-right bg-blue" id="uptime">0d 0h 0m</small>
</span>
</a>
</li>
</ul>
</section>
</aside>
<!-- Content -->
<div class="content-wrapper">
<section class="content-header">
<h1>
<span data-i18n="global-generator">Generator</span>
<small data-i18n="global-control-panel">Control Panel</small>
</h1>
<ol class="breadcrumb">
<li><i class="fas fa-cogs"></i> <span data-i18n="global-config">Config</span></li>
<li class="active"><i class="far fa-copy"></i> <span data-i18n="global-generator">Generator</span></li>
</ol>
</section>
<!-- Content Body -->
<section class="content container-fluid">
<div class="box">
<div class="box-header with-border">
<i class="far fa-copy"></i>
<h3 class="box-title" data-i18n="generator-current">Current mode:</h3>
<div class="box-tools pull-right">
<div class="btn-group">
<button type="button" class="btn btn-box-tool dropdown-toggle" data-toggle="dropdown">
<span data-i18n="generator-change">Change mode</span>
<span class="fas fa-caret-down"></span>
</button>
<ul class="dropdown-menu scrollable-menu" role="menu" id="modeDropDown"></ul>
</div>
</div>
</div>
<div class="box-body">
<div class="box-content-config"></div>
</div>
<div class="box-footer">
<div class="input-group pull-right">
<div class="input-group">
<input type="text" class="form-control" data-i18n="placeholder-generator" placeholder="Name" id="GeneratorName">
<span class="input-group-btn">
<button class="btn btn-default" type="button" id="downloadButton">
<i class="fas fa-cloud-download-alt"></i> <span data-i18n="generator-download">Download</span>
</button>
</span>
</div>
</div>
</div>
</div>
</section>
</div>
<!-- Footer -->
<footer class="main-footer">
<div class="pull-right"><strong data-i18n="global-version">Version</strong> <span id="version">0.0.0.0</span></div>
<strong>
<a target="_blank" href="https://github.com/JustArchi/ArchiSteamFarm">GitHub</a> -
<a target="_blank" href="https://github.com/JustArchi/ArchiSteamFarm/wiki"><span data-i18n="global-wiki">Wiki</span></a> -
<a target="_blank" href="https://github.com/JustArchi/ArchiSteamFarm/commits/master" id="changelog"><span data-i18n="global-changelog">Changelog</span></a>
</strong>
</footer>
<!-- Right Sidebar -->
<aside class="control-sidebar control-sidebar-dark">
<div class="tab-content">
<div class="tab-pane" id="control-right-sidebar"></div>
</div>
</aside>
<div class="control-sidebar-bg"></div>
</div>
<script src="https://cdnjs.cloudflare.com/ajax/libs/jquery/3.3.1/jquery.min.js"></script>
<script src="https://cdnjs.cloudflare.com/ajax/libs/twitter-bootstrap/3.3.7/js/bootstrap.min.js"></script>
<script src="https://cdnjs.cloudflare.com/ajax/libs/bootstrap-sweetalert/1.0.1/sweetalert.min.js"></script>
<script src="../js/adminlte.min.js"></script>
<script src="https://cdnjs.cloudflare.com/ajax/libs/jquery.i18n/1.0.4/jquery.i18n.min.js"></script>
<script src="https://cdnjs.cloudflare.com/ajax/libs/jquery.i18n/1.0.4/jquery.i18n.messagestore.min.js"></script>
<script src="https://cdnjs.cloudflare.com/ajax/libs/jquery.i18n/1.0.4/jquery.i18n.fallbacks.min.js"></script>
<script src="https://cdnjs.cloudflare.com/ajax/libs/jquery.i18n/1.0.4/jquery.i18n.language.min.js"></script>
<script src="https://cdnjs.cloudflare.com/ajax/libs/jquery.i18n/1.0.4/jquery.i18n.parser.min.js"></script>
<script src="https://cdnjs.cloudflare.com/ajax/libs/jquery.i18n/1.0.4/jquery.i18n.emitter.min.js"></script>
<script src="https://cdnjs.cloudflare.com/ajax/libs/jquery.i18n/1.0.4/jquery.i18n.emitter.bidi.min.js"></script>
<script src="https://cdnjs.cloudflare.com/ajax/libs/bootstrap-toggle/2.2.2/js/bootstrap-toggle.min.js"></script>
<script src="../js/utils.js"></script>
<script src="../js/i18n.js"></script>
<script src="../js/app.js"></script>
<script>
$(function () {
'use strict';
store('CurrentPage', 'pages/generator.html');
$('.box-content-config').ready(function () {
loadPageContentGenerator();
});
});
</script>
</body>
</html>

View file

@ -1,243 +0,0 @@
<!DOCTYPE html>
<html>
<head>
<title data-i18n="log-title">ASF | Log</title>
<meta charset="utf-8">
<meta http-equiv="X-UA-Compatible" content="IE=edge,chrome=1">
<meta content="width=device-width, initial-scale=1, maximum-scale=1, user-scalable=no" name="viewport">
<script defer src="https://use.fontawesome.com/releases/v5.1.0/js/all.js"></script> <!--Change to cdnjs once available-->
<link rel="icon" href="../img/favicon.png" type="image/png">
<link rel="shortcut icon" href="../img/favicon.ico" type="img/x-icon">
<link rel="stylesheet" href="https://cdnjs.cloudflare.com/ajax/libs/twitter-bootstrap/3.3.7/css/bootstrap.min.css">
<link rel="stylesheet" href="https://cdnjs.cloudflare.com/ajax/libs/bootstrap-sweetalert/1.0.1/sweetalert.min.css">
<link rel="stylesheet" href="https://cdnjs.cloudflare.com/ajax/libs/admin-lte/2.4.2/css/AdminLTE.min.css">
<link rel="stylesheet" href="https://fonts.googleapis.com/css?family=Source+Sans+Pro:300,400,600,700,300italic,400italic,600italic">
<link rel="stylesheet" href="https://cdnjs.cloudflare.com/ajax/libs/flag-icon-css/3.1.0/css/flag-icon.min.css">
<link rel="stylesheet" href="https://cdnjs.cloudflare.com/ajax/libs/bootstrap-toggle/2.2.2/css/bootstrap-toggle.min.css">
<link rel="stylesheet" href="../css/_all-skins.min.css">
<link rel="stylesheet" href="../css/app.css">
<link rel="stylesheet" href="../css/_nightmode.min.css">
</head>
<body class="hold-transition skin-blue sidebar-mini fixed">
<div class="wrapper">
<!-- Header -->
<header class="main-header">
<!-- Logo -->
<a href="javascript:void(0)" class="logo">
<span class="logo-mini"><b>A</b>SF</span>
<span class="logo-lg"><b>Archi</b>SteamFarm</span>
</a>
<nav class="navbar navbar-static-top" role="navigation">
<!-- Left Sidebar Toggle Button-->
<a href="javascript:void(0)" class="sidebar-toggle" id="leftSidebar" data-toggle="push-menu" role="button">
<i class="fas fa-bars"></i>
<span class="sr-only" data-i18n="global-navigation">Toggle navigation</span>
</a>
<div class="navbar-custom-menu">
<ul class="nav navbar-nav">
<!-- Language Button -->
<li class="dropdown">
<a class="dropdown-toggle" href="javascript:void(0)" data-toggle="dropdown"><i id="currentLanguage" class="flag-icon flag-icon-us"></i></a>
<div class="dropdown-menu dropdown-language"></div>
</li>
<!-- Right Sidebar Toggle Button -->
<li><a href="javascript:void(0)" data-toggle="control-sidebar"><i class="fas fa-cogs"></i></a></li>
</ul>
</div>
</nav>
</header>
<!-- Left Sidebar -->
<aside class="main-sidebar">
<section class="sidebar">
<ul class="sidebar-menu" data-widget="tree">
<li class="header" data-i18n="global-home">Home</li>
<li><a href="commands.html"><i class="fas fa-laptop fa-fw"></i> <span data-i18n="global-commands">Commands</span></a></li>
<li>
<a href="bots.html">
<i class="fas fa-users fa-fw"></i> <span data-i18n="global-bots">Bots</span>
<span class="pull-right-container bot-status">
<small class="label pull-right bg-gray" id="offlineBots">0</small>
<small class="label pull-right bg-red" id="disconnectedBots" style="display:none;">0</small>
<small class="label pull-right bg-yellow" id="onlineBots">0</small>
<small class="label pull-right bg-olive" id="farmingBots">0</small>
</span>
</a>
</li>
<li class="active"><a href="log.html"><i class="far fa-file-alt fa-fw"></i> <span data-i18n="global-log">Log</span></a></li>
<li class="header" data-i18n="global-config">Config</li>
<li><a href="editor.html"><i class="far fa-edit fa-fw"></i> <span data-i18n="global-editor">Editor</span></a></li>
<li><a href="generator.html"><i class="far fa-copy fa-fw"></i> <span data-i18n="global-generator">Generator</span></a></li>
<li class="header" data-i18n="global-information">Information</li>
<li>
<a class="info-overview" href="javascript:void(0)">
<i class="fas fa-tachometer-alt fa-fw"></i> <span data-i18n="global-ram-usage">RAM Usage</span>
<span class="pull-right-container">
<small class="label pull-right bg-blue" id="ramUsage">0.00 MB</small>
</span>
</a>
</li>
<li>
<a class="info-overview" href="javascript:void(0)">
<i class="far fa-clock fa-fw"></i> <span data-i18n="global-uptime">Uptime</span>
<span class="pull-right-container">
<small class="label pull-right bg-blue" id="uptime">0d 0h 0m</small>
</span>
</a>
</li>
</ul>
</section>
</aside>
<!-- Content -->
<div class="content-wrapper">
<section class="content-header">
<h1>
<span data-i18n="global-log">Log</span>
<small data-i18n="global-control-panel">Control Panel</small>
</h1>
<ol class="breadcrumb">
<li><i class="fas fa-home"></i> <span data-i18n="global-home">Home</span></li>
<li class="active"><i class="far fa-file-alt"></i> <span data-i18n="global-log">Log</span></li>
</ol>
</section>
<!-- Content Body -->
<section class="content container-fluid">
<div class="box">
<div class="box-header with-border">
<i class="far fa-file-alt"></i>
<h3 class="box-title" data-i18n="global-log">Log</h3>
<div class="box-tools pull-right">
<input id="chkScroll" checked type="checkbox" data-style="ios single-btn" data-onstyle="default" data-toggle="toggle" data-size="mini" data-on="<i class='fas fa-sync'></i>" data-off="<i class='fas fa-sync'></i>">
</div>
</div>
<div class="box-body">
<div class="box-content-log">
<div class="overlay"><i class="fas fa-sync fa-spin" style="color:white"></i></div>
</div>
</div>
</div>
</section>
</div>
<!-- Footer -->
<footer class="main-footer">
<div class="pull-right"><strong data-i18n="global-version">Version</strong> <span id="version">0.0.0.0</span></div>
<strong>
<a target="_blank" href="https://github.com/JustArchi/ArchiSteamFarm">GitHub</a> -
<a target="_blank" href="https://github.com/JustArchi/ArchiSteamFarm/wiki"><span data-i18n="global-wiki">Wiki</span></a> -
<a target="_blank" href="https://github.com/JustArchi/ArchiSteamFarm/commits/master" id="changelog"><span data-i18n="global-changelog">Changelog</span></a>
</strong>
</footer>
<!-- Right Sidebar -->
<aside class="control-sidebar control-sidebar-dark">
<div class="tab-content">
<div class="tab-pane" id="control-right-sidebar"></div>
</div>
</aside>
<div class="control-sidebar-bg"></div>
</div>
<script src="https://cdnjs.cloudflare.com/ajax/libs/jquery/3.3.1/jquery.min.js"></script>
<script src="https://cdnjs.cloudflare.com/ajax/libs/twitter-bootstrap/3.3.7/js/bootstrap.min.js"></script>
<script src="https://cdnjs.cloudflare.com/ajax/libs/interact.js/1.2.9/interact.min.js"></script>
<script src="https://cdnjs.cloudflare.com/ajax/libs/bootstrap-sweetalert/1.0.1/sweetalert.min.js"></script>
<script src="../js/adminlte.min.js"></script>
<script src="https://cdnjs.cloudflare.com/ajax/libs/jquery.i18n/1.0.4/jquery.i18n.min.js"></script>
<script src="https://cdnjs.cloudflare.com/ajax/libs/jquery.i18n/1.0.4/jquery.i18n.messagestore.min.js"></script>
<script src="https://cdnjs.cloudflare.com/ajax/libs/jquery.i18n/1.0.4/jquery.i18n.fallbacks.min.js"></script>
<script src="https://cdnjs.cloudflare.com/ajax/libs/jquery.i18n/1.0.4/jquery.i18n.language.min.js"></script>
<script src="https://cdnjs.cloudflare.com/ajax/libs/jquery.i18n/1.0.4/jquery.i18n.parser.min.js"></script>
<script src="https://cdnjs.cloudflare.com/ajax/libs/jquery.i18n/1.0.4/jquery.i18n.emitter.min.js"></script>
<script src="https://cdnjs.cloudflare.com/ajax/libs/jquery.i18n/1.0.4/jquery.i18n.emitter.bidi.min.js"></script>
<script src="https://cdnjs.cloudflare.com/ajax/libs/bootstrap-toggle/2.2.2/js/bootstrap-toggle.min.js"></script>
<script src="../js/utils.js"></script>
<script src="../js/i18n.js"></script>
<script src="../js/app.js"></script>
<script>
$(function () {
'use strict';
store('CurrentPage', 'pages/log.html');
var ws;
startWebSocket();
function startWebSocket() {
if (!'WebSocket' in window) window.alert('Please use a modern browser to properly view ASF GUI!');
var loc = window.location,
new_uri = (loc.protocol === 'https:') ? 'wss:' : 'ws:';
new_uri += '//' + loc.host + '/Api/Log?password=' + encodeURIComponent(tmpIPCPassword);
ws = new WebSocket(new_uri);
ws.onopen = function (event) {
$('.overlay').remove();
$('.box-content-log').text('');
};
ws.onmessage = function (event) {
var msg = JSON.parse(event.data).Result + '\n';
$('.box-content-log').append(msg);
$('.box-content-log').stop().animate({ scrollTop: $('.box-content-log')[0].scrollHeight }, 1000);
};
ws.onclose = function (event) {
if (event.code !== 1000) { // 1000 = connection was closed normally
swal({
title: $.i18n('global-error-title'),
text: $.i18n('log-event-code', event.code),
type: 'error'
}, function () { swal.close(); });
}
};
window.onbeforeunload = function () { ws.close(); };
}
$('#chkScroll').change(function() {
if ($(this).prop('checked')) {
startWebSocket();
} else {
ws.close();
}
});
$('.box-content-log').ready(function () {
var tmpLogHeight = get('logHeight');
if (tmpLogHeight) {
$('.box-content-log').css('height', tmpLogHeight + 'px');
} else {
$('.box-content-log').css('height', 400 + 'px');
}
});
interact('.box-content-log')
.resizable({
edges: { left: false, right: false, bottom: true, top: false },
restrictEdges: {
outer: 'parent',
endOnly: true,
},
inertia: true,
})
.on('resizemove', function (event) {
var target = event.target;
target.style.height = event.rect.height + 'px';
})
.on('resizeend', function (event) {
var currentHeight = parseInt(event.target.style.height, 10);
store('logHeight', currentHeight);
});
});
</script>
</body>
</html>

View file

@ -18,6 +18,21 @@ matrix:
allow_failures:
- image: Visual Studio 2017 Preview
fast_finish: true
install:
- pwsh: >-
Set-StrictMode -Version Latest
$ErrorActionPreference = 'Stop'
$ProgressPreference = 'SilentlyContinue'
git submodule update --init --recursive
if ($LastExitCode -ne 0) {
throw "Last command failed."
}
before_build:
- pwsh: >-
Set-StrictMode -Version Latest
@ -42,6 +57,28 @@ build_script:
$ProgressPreference = 'SilentlyContinue'
Push-Location -Path ASF-ui
npm ci --no-progress
if ($LastExitCode -ne 0) {
throw "Last command failed."
}
npm run-script deploy --no-progress
if ($LastExitCode -ne 0) {
throw "Last command failed."
}
Pop-Location
dotnet build ArchiSteamFarm -c "$env:CONFIGURATION" -f "$env:NET_CORE_VERSION" -o 'out\source' /nologo

11
cc.sh
View file

@ -53,6 +53,17 @@ if [[ ! -f "$SOLUTION" ]]; then
exit 1
fi
if [[ -f "ASF-ui/package.json" ]] && hash npm 2>/dev/null; then
echo "Building ASF UI..."
cd ASF-ui
npm i --no-progress
npm run-script deploy --no-progress
cd ..
else
echo "WARNING: ASF UI dependencies are missing, skipping build of ASF UI..."
fi
DOTNET_FLAGS=(-c "$CONFIGURATION" -f "$TARGET_FRAMEWORK" -o "$OUT" '/nologo')
if [[ "$LINK_DURING_PUBLISH" -eq 0 ]]; then

View file

@ -4,10 +4,6 @@
"source": "/ArchiSteamFarm/Localization/Strings.resx",
"translation": "/ArchiSteamFarm/Localization/Strings.%locale%.resx"
},
{
"source": "/ArchiSteamFarm/www/locale/strings.json",
"translation": "/ArchiSteamFarm/www/locale/strings.%locale%.json"
},
{
"source": "/ASF-WebConfigGenerator/src/locale/strings.json",
"translation": "/ASF-WebConfigGenerator/src/locale/%locale%.json"