diff --git a/.env.example b/.env.example index 37b8aeac7..5dfb9f8a0 100644 --- a/.env.example +++ b/.env.example @@ -7,6 +7,8 @@ APP_LOCALE=en #If you dont want a locale to appear just remove it(transaltions are accepted on our github) AVAILABLE_LOCALES=en,es,ru,sk,de,pl,uk,hi,it,zh-hk,zh-cn,ja APP_THEME=default +# Pulse dashboard for health monitoring +PULSE_ENABLED=false # Dont enable on production APP_DEBUG=false @@ -42,6 +44,7 @@ VERIFY_USER_EMAIL=false PLAYER_SKIN_CHANGER_ENABLED=true PLAYER_SKIN_CHANGER_COOLDOWN_IN_SECONDS=60 HIDE_COUNTRY_FOR_PRIVACY=false +HIDE_PLAYER_NEXT_RANK=false MAX_USER_PROFILE_PHOTO_SIZE_KB=512 MAX_USER_COVER_PHOTO_SIZE_KB=1024 MAX_POST_FEED_MEDIA_SIZE_KB=1024 @@ -133,6 +136,7 @@ MAXMIND_LICENSE_KEY= RATELIMIT_API_PER_MINUTE=600 USE_LEGACY_FTP_DRIVER=false MARK_USER_VERIFYED_ON_ACCOUNT_LINK=true +DISABLE_PLAYER_UNLINKING=false USE_USERNAME_FOR_SKINS=false FETCH_AVATAR_FROM_URL_USING_CURL=false PLAYER_FETCHER_CRON_INTERVAL=everyThirtyMinutes diff --git a/README.md b/README.md index 02d344e51..8c64bc044 100644 --- a/README.md +++ b/README.md @@ -49,7 +49,7 @@ MineTrax has lot of features, some of them are listed below: ## Upcoming - Ban Management System - - Staff Recruitment System + - Application System (for staff recruitment and other applications) - Store System - Automated Server Events - Rewards & Achievements diff --git a/app/Console/Kernel.php b/app/Console/Kernel.php index 5f060077b..14e169b7b 100644 --- a/app/Console/Kernel.php +++ b/app/Console/Kernel.php @@ -4,6 +4,7 @@ use App\Console\Commands\ResetUserPasswordCommand; use App\Jobs\CalculatePlayersJob; +use App\Jobs\RunAwaitingCommandQueuesJob; use Illuminate\Console\Scheduling\Schedule; use Illuminate\Foundation\Console\Kernel as ConsoleKernel; @@ -27,6 +28,7 @@ protected function schedule(Schedule $schedule) { $playerFetcherInterval = config('minetrax.players_fetcher_cron_interval') ?? 'hourly'; $schedule->job(new CalculatePlayersJob)->{$playerFetcherInterval}(); + $schedule->job(new RunAwaitingCommandQueuesJob)->everyMinute(); $schedule->command('telescope:prune')->daily(); $schedule->command('queue:prune-batches --hours=48 --unfinished=72')->daily(); diff --git a/app/Enums/CommandQueueStatus.php b/app/Enums/CommandQueueStatus.php new file mode 100644 index 000000000..239122fa6 --- /dev/null +++ b/app/Enums/CommandQueueStatus.php @@ -0,0 +1,28 @@ + $this->key, + 'value' => $this->value, + ]; + } +} diff --git a/app/Http/Controllers/AccountLinkController.php b/app/Http/Controllers/AccountLinkController.php index 0c1262959..961bb1ac8 100644 --- a/app/Http/Controllers/AccountLinkController.php +++ b/app/Http/Controllers/AccountLinkController.php @@ -2,73 +2,39 @@ namespace App\Http\Controllers; -use App\Jobs\AccountLinkAfterSuccessCommandJob; +use App\Jobs\AccountUnlinkAfterSuccessCommandJob; use App\Models\Player; -use App\Models\Server; use App\Settings\PluginSettings; +use App\Utils\Helpers\AccountLinkUtils; use Illuminate\Http\Request; use Inertia\Inertia; class AccountLinkController extends Controller { - public function verify($uuid, Server $server, Request $request, PluginSettings $pluginSettings): \Illuminate\Http\RedirectResponse - { - if (! $request->hasValidSignature()) { - return redirect()->route('home') - ->with(['toast' => ['type' => 'danger', 'title' => __('Link expired or invalid!'), 'body' => __('Please request a fresh link and try again.'), 'milliseconds' => 10000]]); - } - - // Find player with UUID if not found then tell user to wait for sometime till his player become visible in website - $player = Player::where('uuid', $uuid)->first(); - if (! $player) { - return redirect()->route('home') - ->with(['toast' => ['type' => 'warning', 'title' => __('Player not found in database!'), 'body' => __('Please wait for sometime for server to update its player database.'), 'milliseconds' => 10000]]); - } - - // Player found. check if this player is already linked with a user. - if ($player->users()->count() > 0) { - return redirect()->route('home') - ->with(['toast' => ['type' => 'danger', 'title' => __('Player already linked to a user!'), 'body' => __('If you own this user please unlink it from your another account or contact administrator.'), 'milliseconds' => 10000]]); - } - - // Check if current user has enough available slot to link the player. - $user = $request->user(); - $max_slots = $pluginSettings->max_players_link_per_account; // Total number of players that can be linked to account - if ($user->players()->count() >= $max_slots) { - return redirect()->route('home') - ->with(['toast' => ['type' => 'danger', 'title' => __('User already have max :max_slots players linked!', ['max_slots' => $max_slots]), 'body' => __('If you want to link this player please unlink a player.'), 'milliseconds' => 10000]]); - } - - // @TODO: All good. return a view to confirm the link. - // return Inertia::render('User/ConfirmLinkUserToPlayer', ['player' => $player]); - - $user->players()->attach($player); - - // If MARK_USER_VERIFYED_ON_ACCOUNT_LINK is enabled then mark user as verified. - if (config('minetrax.mark_user_verified_on_account_link') && $user->verified_at == null) { - $user->verified_at = now(); - $user->save(); - } - - // Run command to give this player the reward according to Plugin setting if enabled - AccountLinkAfterSuccessCommandJob::dispatch($player, $user->id, $server); - - return redirect()->route('linked-player.list') - ->with(['toast' => ['type' => 'success', 'title' => __('Played linked successfully!'), 'body' => __('This player is now linked to your account.'), 'milliseconds' => 10000]]); - } - public function listMyPlayers(Request $request, PluginSettings $pluginSettings) { $linkedPlayers = $request->user()->players()->with(['country', 'rank:id,name,shortname'])->get(); + $currentLinkOtp = AccountLinkUtils::generateOtp($request->user()->id); + + $isUnlinkingDisabled = config('minetrax.disable_player_unlinking'); + return Inertia::render('User/ListLinkedPlayer', [ 'linkedPlayers' => $linkedPlayers, 'maxPlayerPerUser' => $pluginSettings->max_players_link_per_account, + 'currentLinkOtp' => $currentLinkOtp, + 'isUnlinkingDisabled' => $isUnlinkingDisabled, ]); } public function unlink(Player $player, Request $request) { + $isUnlinkingDisabled = config('minetrax.disable_player_unlinking'); + if ($isUnlinkingDisabled) { + return redirect()->back() + ->with(['toast' => ['type' => 'danger', 'title' => __('Player unlinking disabled!'), 'body' => __('Player unlinking is disabled by the administrator.'), 'milliseconds' => 10000]]); + } + // Make sure the player is linked to current user who is running to unlink $user = $request->user(); $userHasPlayer = $user->players()->where('player_id', $player->id)->exists(); @@ -87,6 +53,9 @@ public function unlink(Player $player, Request $request) $user->save(); } + // Dispatch unlink after success commands + AccountUnlinkAfterSuccessCommandJob::dispatch($player, $user->id); + // Return redirect back with flash return redirect()->back() ->with(['toast' => ['type' => 'success', 'title' => __('Played unlinked successfully!'), 'body' => __('Player has been removed from your account.'), 'milliseconds' => 10000]]); diff --git a/app/Http/Controllers/Admin/CommandQueueController.php b/app/Http/Controllers/Admin/CommandQueueController.php new file mode 100644 index 000000000..716367f75 --- /dev/null +++ b/app/Http/Controllers/Admin/CommandQueueController.php @@ -0,0 +1,139 @@ +authorize('viewAny', CommandQueue::class); + + $perPage = request()->input('perPage', 10); + if ($perPage > 100) { + $perPage = 100; + } + + $fields = [ + 'id', + 'command_id', + 'server_id', + 'parsed_command', + 'config', + 'status', + 'execute_at', + 'max_attempts', + 'attempts', + 'last_attempt_at', + 'output', + 'tag', + 'player_uuid', + 'user_id', + 'player_id', + 'created_at', + 'updated_at', + ]; + + $commandQueues = QueryBuilder::for(CommandQueue::class) + ->with(['server:id,name,hostname', 'player:id,uuid,username']) + ->allowedFilters([ + ...$fields, + 'server.name', + 'player.username', + AllowedFilter::custom('q', new FilterMultipleFields([ + 'id', + 'parsed_command', + 'status', + 'output', + 'tag', + 'player_uuid', + ])), + ]) + ->allowedSorts($fields) + ->defaultSort('-updated_at') + ->simplePaginate($perPage) + ->withQueryString(); + + return Inertia::render('Admin/CommandQueue/IndexCommandQueue', [ + 'commandQueues' => $commandQueues, + 'filters' => request()->all(['perPage', 'sort', 'filter']), + ]); + } + + public function create() + { + $this->authorize('create', CommandQueue::class); + + $servers = Server::select(['id', 'name', 'hostname'])->whereNotNull('webquery_port')->get(); + $players = Player::select(['id', 'uuid', 'username'])->get(); + + return Inertia::render('Admin/CommandQueue/CreateCommandQueue', [ + 'servers' => $servers, + 'players' => $players, + ]); + } + + public function store(CreateCommandQueueRequest $request) + { + RunCommandQueuesFromRequestJob::dispatch($request->collect(), $request->user()->id); + + return redirect()->back() + ->with(['toast' => ['type' => 'success', 'title' => __('Commands Scheduled!'), 'body' => __('Commands has been scheduled for execution. Check the status in Command History.'), 'milliseconds' => 5000]]); + } + + public function destroy(Request $request) + { + $request->validate([ + 'id' => 'required|int', + ]); + + $commandQueue = CommandQueue::findOrFail($request->id); + $this->authorize('delete', $commandQueue); + + $commandQueue->delete(); + + return redirect()->route('admin.command-queue.index') + ->with(['toast' => ['type' => 'success', 'title' => __('Deleted!')]]); + } + + public function retry(Request $request) + { + $request->validate([ + 'id' => 'sometimes|required|int', + ]); + + if ($request->id) { + $commandQueues = CommandQueue::where('id', $request->id)->get(); + } else { + $commandQueues = CommandQueue::whereIn('status', [ + CommandQueueStatus::FAILED, + CommandQueueStatus::CANCELLED, + ])->get(); + } + + foreach ($commandQueues as $commandQueue) { + if ($request->user()->cannot('retry', $commandQueue)) { + continue; + } + $commandQueue->status = 'pending'; + $commandQueue->save(); + RunCommandQueueJob::dispatch($commandQueue); + } + + return redirect()->route('admin.command-queue.index') + ->with(['toast' => ['type' => 'success', 'title' => __('Retried!'), 'body' => __('Command has been queued for retrying! Refresh the page after few seconds to check the status.')]]); + } +} diff --git a/app/Http/Controllers/Admin/CustomFormSubmissionController.php b/app/Http/Controllers/Admin/CustomFormSubmissionController.php index 1f0253157..3fc843598 100644 --- a/app/Http/Controllers/Admin/CustomFormSubmissionController.php +++ b/app/Http/Controllers/Admin/CustomFormSubmissionController.php @@ -55,6 +55,7 @@ public function index(Request $request) ->select($fields) ->allowedFilters([ ...$fields, + 'user.name', AllowedFilter::custom('q', new FilterMultipleFields(['data'])), ]) ->allowedSorts($fields) @@ -113,6 +114,7 @@ public function indexArchived(Request $request) ->select($fields) ->allowedFilters([ ...$fields, + 'user.name', AllowedFilter::custom('q', new FilterMultipleFields(['data'])), ]) ->allowedSorts($fields) diff --git a/app/Http/Controllers/Admin/FailedJobController.php b/app/Http/Controllers/Admin/FailedJobController.php new file mode 100644 index 000000000..cc5dd0f95 --- /dev/null +++ b/app/Http/Controllers/Admin/FailedJobController.php @@ -0,0 +1,91 @@ +authorize('viewAny', FailedJob::class); + + $perPage = request()->input('perPage', 10); + if ($perPage > 100) { + $perPage = 100; + } + + $failedJobs = QueryBuilder::for(FailedJob::class) + ->allowedFilters([ + 'id', + 'uuid', + 'connection', + 'queue', + 'payload', + 'exception', + AllowedFilter::custom('q', new FilterMultipleFields([ + 'id', + 'uuid', + 'connection', + 'queue', + 'payload', + 'exception', + ])), + ]) + ->allowedSorts(['id', 'uuid', 'connection', 'queue', 'exception', 'failed_at']) + ->defaultSort('-failed_at') + ->paginate($perPage) + ->withQueryString(); + + return Inertia::render('Admin/FailedJob/IndexFailedJob', [ + 'jobs' => $failedJobs, + 'filters' => request()->all(['perPage', 'sort', 'filter']), + ]); + } + + public function retry(Request $request) + { + $this->authorize('retry', FailedJob::class); + + // run command to retry the job + if ($request->uuid) { + try { + Artisan::call('queue:retry '.$request->uuid); + } catch (ModelNotFoundException $e) { + Artisan::call('queue:forget '.$request->uuid); + } + } else { + try { + Artisan::call('queue:retry all'); + } catch (ModelNotFoundException $e) { + Artisan::call('queue:flush'); + } + } + + return redirect()->route('admin.failed-job.index') + ->with(['toast' => ['type' => 'success', 'title' => __('Retry Queued!'), 'body' => __('Job has been queued for retrying!')]]); + } + + public function destroy(Request $request) + { + $this->authorize('delete', FailedJob::class); + + if ($request->uuid) { + Artisan::call('queue:forget '.$request->uuid); + } else { + Artisan::call('queue:flush'); + } + + return redirect()->route('admin.failed-job.index') + ->with(['toast' => ['type' => 'success', 'title' => __('Deleted!')]]); + } +} diff --git a/app/Http/Controllers/Admin/GraphController.php b/app/Http/Controllers/Admin/GraphController.php index 0e27cbeaa..9b7d6e4d9 100644 --- a/app/Http/Controllers/Admin/GraphController.php +++ b/app/Http/Controllers/Admin/GraphController.php @@ -5,6 +5,7 @@ use App\Enums\ServerType; use App\Http\Controllers\Controller; use App\Models\Country; +use App\Models\MinecraftServerLiveInfo; use App\Models\Server; use Cache; use Carbon\CarbonImmutable; @@ -185,14 +186,8 @@ public function getNetworkTrendsMonthVsMonth() $averagePlayerPingChangePercent = (($averagePlayerPingCurrentMonth - $averagePlayerPingPreviousMonth) / ($averagePlayerPingPreviousMonth == 0 ? 1 : $averagePlayerPingPreviousMonth)) * 100; // Peek Online Players. - $peekOnlinePlayersPreviousMonth = DB::table('minecraft_server_live_infos') - ->where('created_at', '>=', $previousMonth->startOfMonth()) - ->where('created_at', '<', $previousMonth->endOfMonth()) - ->max('online_players') ?? 0; - $peekOnlinePlayersCurrentMonth = DB::table('minecraft_server_live_infos') - ->where('created_at', '>=', $currentMonth->startOfMonth()) - ->where('created_at', '<', $currentMonth->endOfMonth()) - ->max('online_players') ?? 0; + $peekOnlinePlayersPreviousMonth = MinecraftServerLiveInfo::getOnlinePlayersCount(null, $previousMonth->startOfMonth(), $previousMonth->endOfMonth()) ?? 0; + $peekOnlinePlayersCurrentMonth = MinecraftServerLiveInfo::getOnlinePlayersCount(null, $currentMonth->startOfMonth(), $currentMonth->endOfMonth()) ?? 0; $peekOnlinePlayersChangePercent = (($peekOnlinePlayersCurrentMonth - $peekOnlinePlayersPreviousMonth) / ($peekOnlinePlayersPreviousMonth == 0 ? 1 : $peekOnlinePlayersPreviousMonth)) * 100; return [ diff --git a/app/Http/Controllers/Admin/PlayerController.php b/app/Http/Controllers/Admin/PlayerController.php index e8914f695..23852b4ba 100644 --- a/app/Http/Controllers/Admin/PlayerController.php +++ b/app/Http/Controllers/Admin/PlayerController.php @@ -3,9 +3,11 @@ namespace App\Http\Controllers\Admin; use App\Http\Controllers\Controller; +use App\Jobs\AccountUnlinkAfterSuccessCommandJob; use App\Models\MinecraftPlayerSession; use App\Models\Player; use DB; +use Illuminate\Http\Request; class PlayerController extends Controller { @@ -22,4 +24,32 @@ public function destroy(Player $player) return redirect()->back() ->with(['toast' => ['type' => 'success', 'title' => __('Player Deleted!'), 'body' => __('All intel data related to the player is deleted.')]]); } + + public function unlink(Player $player, Request $request) + { + $this->authorize('unlink', $player); + + $attachedUser = $player->users()->first(); + if (! $attachedUser) { + return redirect()->back() + ->with(['toast' => ['type' => 'danger', 'title' => __('Not Linked!'), 'body' => __('Player is not linked to any user.')]]); + } + + // Unlink the player + $player->users()->detach($attachedUser->id); + + // If MARK_USER_VERIFYED_ON_ACCOUNT_LINK is enabled then mark user as unverified when he unlink all players. + $linkedPlayersExist = $attachedUser->players()->exists(); + if (config('minetrax.mark_user_verified_on_account_link') && $attachedUser->verified_at && ! $linkedPlayersExist) { + $attachedUser->verified_at = null; + $attachedUser->save(); + } + + // Dispatch unlink after success commands + AccountUnlinkAfterSuccessCommandJob::dispatch($player, $attachedUser->id); + + // Return redirect back with flash + return redirect()->back() + ->with(['toast' => ['type' => 'success', 'title' => __('Played unlinked successfully!'), 'body' => __('Player has been unlinked from that account.'), 'milliseconds' => 10000]]); + } } diff --git a/app/Http/Controllers/Admin/PlayerIntelController.php b/app/Http/Controllers/Admin/PlayerIntelController.php index 9557ed63b..ff513e39a 100644 --- a/app/Http/Controllers/Admin/PlayerIntelController.php +++ b/app/Http/Controllers/Admin/PlayerIntelController.php @@ -4,6 +4,7 @@ use App\Enums\ServerType; use App\Http\Controllers\Controller; +use App\Models\Country; use App\Models\MinecraftPlayer; use App\Models\Server; use App\Queries\Filters\FilterMultipleFields; @@ -62,6 +63,9 @@ public function playersList(Request $request) 'country_id', 'last_seen_at', 'first_seen_at', + 'last_join_address', + 'last_minecraft_version', + 'country.name', AllowedFilter::custom('q', new FilterMultipleFields(['player_uuid', 'player_username'])), ]) ->groupBy(['player_id']) @@ -86,10 +90,13 @@ public function playersList(Request $request) ->paginate($perPage) ->withQueryString(); + $countries = Country::select(['id', 'name'])->get()->pluck('name'); + return Inertia::render('Admin/PlayerIntel/PlayersList', [ 'filters' => request()->all(['servers']), 'serverList' => $serverList, 'data' => $data, + 'countries' => $countries, ]); } } diff --git a/app/Http/Controllers/Admin/RecruitmentController.php b/app/Http/Controllers/Admin/RecruitmentController.php index 85eea2eee..c30bf19f1 100644 --- a/app/Http/Controllers/Admin/RecruitmentController.php +++ b/app/Http/Controllers/Admin/RecruitmentController.php @@ -245,7 +245,7 @@ public function store(CreateRecruitmentRequest $request) ]); return redirect()->route('admin.recruitment.index') - ->with(['toast' => ['type' => 'success', 'title' => __('Created Successfully'), 'body' => __('Recruitment Form is created successfully')]]); + ->with(['toast' => ['type' => 'success', 'title' => __('Created Successfully'), 'body' => __('Application Form is created successfully')]]); } public function edit(Recruitment $recruitment) @@ -283,7 +283,7 @@ public function update(UpdateRecruitmentRequest $request, Recruitment $recruitme $recruitment->save(); return redirect()->route('admin.recruitment.index') - ->with(['toast' => ['type' => 'success', 'title' => __('Updated Successfully'), 'body' => __('Recruitment Form updated successfully')]]); + ->with(['toast' => ['type' => 'success', 'title' => __('Updated Successfully'), 'body' => __('Application Form updated successfully')]]); } public function destroy(Recruitment $recruitment) @@ -293,6 +293,6 @@ public function destroy(Recruitment $recruitment) $recruitment->delete(); return redirect()->route('admin.recruitment.index') - ->with(['toast' => ['type' => 'success', 'title' => __('Deleted Successfully'), 'body' => __('Recruitment Form has been deleted permanently')]]); + ->with(['toast' => ['type' => 'success', 'title' => __('Deleted Successfully'), 'body' => __('Application Form has been deleted permanently')]]); } } diff --git a/app/Http/Controllers/Admin/RecruitmentSubmissionController.php b/app/Http/Controllers/Admin/RecruitmentSubmissionController.php index 167e357b8..6ea576677 100644 --- a/app/Http/Controllers/Admin/RecruitmentSubmissionController.php +++ b/app/Http/Controllers/Admin/RecruitmentSubmissionController.php @@ -46,6 +46,10 @@ public function indexOpen(Request $request) $fields = [ 'id', 'recruitment_id', + 'last_act_by', + 'last_act_at', + 'last_comment_by', + 'last_comment_at', 'status', 'user_id', 'created_at', @@ -62,10 +66,13 @@ public function indexOpen(Request $request) $query->whereIn('recruitment_id', $selectedRecruitments); }) ->whereIn('recruitment_id', $recruitments->keys()) - ->with(['user:id,name,username', 'recruitment']) + ->with(['user:id,name,username', 'recruitment', 'lastActor:id,username,name,profile_photo_path,verified_at,settings', 'lastCommentor:id,username,name,profile_photo_path,verified_at,settings']) ->select($fields) ->allowedFilters([ ...$fields, + 'user.name', + 'lastActor.name', + 'lastCommentor.name', AllowedFilter::custom('q', new FilterMultipleFields(['data', 'status'])), ]) ->allowedSorts($fields) @@ -108,6 +115,10 @@ public function indexClosed(Request $request) $fields = [ 'id', 'recruitment_id', + 'last_act_by', + 'last_act_at', + 'last_comment_by', + 'last_comment_at', 'status', 'user_id', 'created_at', @@ -124,10 +135,13 @@ public function indexClosed(Request $request) $query->whereIn('recruitment_id', $selectedRecruitments); }) ->whereIn('recruitment_id', $recruitments->keys()) - ->with(['user:id,name,username', 'recruitment']) + ->with(['user:id,name,username', 'recruitment', 'lastActor:id,name,username', 'lastCommentor:id,name,username']) ->select($fields) ->allowedFilters([ ...$fields, + 'user.name', + 'lastActor.name', + 'lastCommentor.name', AllowedFilter::custom('q', new FilterMultipleFields(['data', 'status'])), ]) ->allowedSorts($fields) @@ -182,7 +196,7 @@ public function destroy(Request $request, RecruitmentSubmission $submission) $submission->delete(); return redirect()->route('admin.recruitment-submission.index-closed') - ->with(['toast' => ['type' => 'success', 'title' => __('Deleted Successfully'), 'body' => __('Recruitment Submission deleted successfully')]]); + ->with(['toast' => ['type' => 'success', 'title' => __('Deleted Successfully'), 'body' => __('Request deleted successfully')]]); } public function act(Request $request, RecruitmentSubmission $submission) @@ -214,7 +228,7 @@ public function act(Request $request, RecruitmentSubmission $submission) RecruitmentSubmissionStatusChanged::dispatch($submission, $request->user(), $previousStatus); return redirect()->back() - ->with(['toast' => ['type' => 'success', 'title' => __('Action Successful'), 'body' => __('Recruitment Submission action has been completed successfully')]]); + ->with(['toast' => ['type' => 'success', 'title' => __('Action Successful'), 'body' => __('Request action has been completed successfully')]]); } public function indexMessages(Request $request, RecruitmentSubmission $submission) @@ -242,7 +256,10 @@ public function postMessage(Request $request, RecruitmentSubmission $submission) $comment = $submission->comment($request->message, $request->type); if ($request->type != CommentType::RECRUITMENT_STAFF_WHISPER) { - $submission->touch(); + $submission->update([ + 'last_comment_by' => $request->user()->id, + 'last_comment_at' => now(), + ]); } // Fire event diff --git a/app/Http/Controllers/Admin/ServerController.php b/app/Http/Controllers/Admin/ServerController.php index bc64e685d..8eb048992 100644 --- a/app/Http/Controllers/Admin/ServerController.php +++ b/app/Http/Controllers/Admin/ServerController.php @@ -69,7 +69,7 @@ public function index() AllowedFilter::custom('q', new FilterMultipleFields(['name', 'hostname', 'ip_address', 'join_port', 'query_port', 'webquery_port', 'minecraft_version'])), ]) ->allowedSorts(['id', 'name', 'hostname', 'ip_address', 'join_port', 'query_port', 'webquery_port', 'type', 'minecraft_version', 'order', 'country_id', 'last_scanned_at', 'created_at']) - ->defaultSort('-created_at') + ->defaultSort('-order') ->paginate($perPage) ->withQueryString(); @@ -133,7 +133,7 @@ public function store(CreateServerRequest $request, GeolocationService $geolocat ])->with(['toast' => ['type' => 'success', 'title' => __('Created Successfully'), 'body' => __('New server added successfully')]]); } - public function storeBungee(Request $request, GeolocationService $geolocationService) + public function storeBungee(Request $request, GeolocationService $geolocationService, PluginSettings $pluginSettings) { $alreadyHasBungee = Server::where('type', ServerType::Bungee)->exists(); if ($alreadyHasBungee) { @@ -147,14 +147,16 @@ public function storeBungee(Request $request, GeolocationService $geolocationSer 'ip_address' => 'required|ip', 'join_port' => 'required|numeric|min:0|max:65535', 'query_port' => 'required|numeric|min:0|max:65535', - 'webquery_port' => 'nullable|numeric|min:0|max:65535', + 'webquery_port' => 'nullable|numeric|min:0|max:65535|required_if_accepted:is_server_intel_enabled|different:join_port', 'name' => 'required', 'minecraft_version' => ['required', new EnumValue(ServerVersion::class)], + 'settings' => 'sometimes', + 'is_server_intel_enabled' => 'required|boolean', ]); $countryId = $geolocationService->getCountryIdFromIP($request->ip_address); - Server::create([ + $server = Server::create([ 'ip_address' => $request->ip_address, 'join_port' => $request->join_port, 'query_port' => $request->query_port, @@ -164,11 +166,22 @@ public function storeBungee(Request $request, GeolocationService $geolocationSer 'minecraft_version' => $request->minecraft_version, 'type' => ServerType::Bungee, 'country_id' => $countryId, + 'is_server_intel_enabled' => $request->is_server_intel_enabled, + 'settings' => $request->settings, 'created_by' => $request->user()->id, ]); - return redirect()->route('admin.server.index') - ->with(['toast' => ['type' => 'success', 'title' => __('Created Successfully'), 'body' => __('Bungee server added successfully')]]); + if (! $request->webquery_port) { + return redirect()->route('admin.server.index') + ->with(['toast' => ['type' => 'success', 'title' => __('Created Successfully'), 'body' => __('Proxy server added successfully')]]); + } + + return Inertia::render('Admin/Server/AfterCreateSteps', [ + 'server' => $server, + 'apiKey' => $pluginSettings->plugin_api_key, + 'apiSecret' => $pluginSettings->plugin_api_secret, + 'apiHost' => config('app.url'), + ])->with(['toast' => ['type' => 'success', 'title' => __('Created Successfully'), 'body' => __('Proxy server added successfully')]]); } public function show(Server $server) @@ -259,9 +272,11 @@ public function updateBungee(Request $request, Server $server, GeolocationServic 'ip_address' => 'required|ip', 'join_port' => 'required|numeric|min:0|max:65535', 'query_port' => 'required|numeric|min:0|max:65535', - 'webquery_port' => 'nullable|numeric|min:0|max:65535', + 'webquery_port' => 'nullable|numeric|min:0|max:65535|required_if_accepted:is_server_intel_enabled|different:join_port', 'name' => 'required', 'minecraft_version' => ['required', new EnumValue(ServerVersion::class)], + 'settings' => 'sometimes', + 'is_server_intel_enabled' => 'required|boolean', ]); $countryId = $geolocationService->getCountryIdFromIP($request->ip_address); @@ -273,6 +288,8 @@ public function updateBungee(Request $request, Server $server, GeolocationServic $server->minecraft_version = $request->minecraft_version; $server->hostname = $request->hostname; $server->ip_address = $request->ip_address; + $server->settings = $request->settings; + $server->is_server_intel_enabled = $request->is_server_intel_enabled; $server->country_id = $countryId; $server->updated_by = $request->user()->id; $server->save(); @@ -283,7 +300,7 @@ public function updateBungee(Request $request, Server $server, GeolocationServic Cache::forget('server:webquery:'.$server->id); return redirect()->route('admin.server.index') - ->with(['toast' => ['type' => 'success', 'title' => __('Updated Successfully'), 'body' => __('Bungee server updated successfully')]]); + ->with(['toast' => ['type' => 'success', 'title' => __('Updated Successfully'), 'body' => __('Server updated successfully')]]); } public function update(UpdateServerRequest $request, Server $server, GeolocationService $geolocationService) diff --git a/app/Http/Controllers/Admin/Settings/NavigationSettingController.php b/app/Http/Controllers/Admin/Settings/NavigationSettingController.php index 7f6b16449..a6fe1498b 100644 --- a/app/Http/Controllers/Admin/Settings/NavigationSettingController.php +++ b/app/Http/Controllers/Admin/Settings/NavigationSettingController.php @@ -60,7 +60,7 @@ public function show(NavigationSettings $settings, GeneralSettings $generalSetti $recruitmentItems = Recruitment::select(['id', 'title', 'slug'])->get(); foreach ($recruitmentItems as $item) { $availableNavItems[] = [ - 'type' => 'recruitment', + 'type' => 'application', 'name' => $item->title, 'title' => $item->title, 'id' => $item->id, @@ -69,7 +69,7 @@ public function show(NavigationSettings $settings, GeneralSettings $generalSetti 'recruitment' => $item->slug, ], 'is_open_in_new_tab' => false, - 'key' => 'recruitment-'.$item->id, + 'key' => 'application-'.$item->id, ]; } diff --git a/app/Http/Controllers/Admin/Settings/PluginSettingController.php b/app/Http/Controllers/Admin/Settings/PluginSettingController.php index a8c5b695a..bd3321894 100644 --- a/app/Http/Controllers/Admin/Settings/PluginSettingController.php +++ b/app/Http/Controllers/Admin/Settings/PluginSettingController.php @@ -4,9 +4,11 @@ use App\Enums\ServerType; use App\Http\Controllers\Controller; +use App\Models\Command; use App\Models\Server; use App\Settings\PluginSettings; use Illuminate\Http\Request; +use Illuminate\Support\Arr; use Illuminate\Support\Str; use Inertia\Inertia; @@ -19,15 +21,25 @@ public function __construct() public function show(PluginSettings $settings) { - $serverList = Server::select(['id', 'name', 'hostname']) + $serversForRankSync = Server::select(['id', 'name', 'hostname']) ->where('type', '!=', ServerType::Bungee) - ->get()->keyBy('id')->map(function($value) { + ->get()->keyBy('id')->map(function ($value) { return '#'.$value->id.' - '.$value->name.' - '.$value->hostname; }); - return Inertia::render('Admin/Setting/PluginSetting',[ + $serversForAccountLink = Server::select(['id', 'name', 'hostname'])->whereNotNull('webquery_port')->get(); + $accountLinkAfterSuccessCommands = Command::select('id', 'command', 'is_run_on_all_servers', 'config') + ->whereIn('id', $settings->account_link_after_success_commands)->with('servers:id,name,hostname')->get(); + + $accountUnlinkAfterSuccessCommands = Command::select('id', 'command', 'is_run_on_all_servers', 'config') + ->whereIn('id', $settings->account_unlink_after_success_commands)->with('servers:id,name,hostname')->get(); + + return Inertia::render('Admin/Setting/PluginSetting', [ 'settings' => $settings->toArray(), - 'servers' => $serverList + 'settingsAccountLinkAfterSuccessCommands' => $accountLinkAfterSuccessCommands, + 'settingsAccountUnlinkAfterSuccessCommands' => $accountUnlinkAfterSuccessCommands, + 'serversForRankSync' => $serversForRankSync, + 'serversForAccountLink' => $serversForAccountLink, ]); } @@ -47,21 +59,137 @@ public function update(Request $request, PluginSettings $settings): \Illuminate\ 'enable_api' => ['required', 'boolean'], 'enable_account_link' => ['required', 'boolean'], 'max_players_link_per_account' => ['required', 'integer', 'min:1', 'max:999'], - 'account_link_after_success_command' => ['nullable', 'string', 'max:255'], - 'account_link_after_success_broadcast_message' => ['nullable', 'string', 'max:1000'], 'enable_sync_player_ranks_from_server' => ['required', 'boolean'], - 'sync_player_ranks_from_server_id' => ['required_if:enable_sync_player_ranks_from_server,true', 'nullable', 'integer', 'exists:servers,id'] + 'sync_player_ranks_from_server_id' => ['required_if:enable_sync_player_ranks_from_server,true', 'nullable', 'integer', 'exists:servers,id'], + 'account_link_after_success_commands' => ['nullable', 'array'], + 'account_link_after_success_commands.*.id' => ['nullable', 'integer', 'exists:commands,id'], + 'account_link_after_success_commands.*.command' => ['required', 'string'], + 'account_link_after_success_commands.*.servers' => ['nullable', 'array'], + 'account_link_after_success_commands.*.config' => ['required', 'array'], + 'account_link_after_success_commands.*.config.is_player_online_required' => ['required', 'boolean'], + 'account_link_after_success_commands.*.config.is_run_only_first_link' => ['required', 'boolean'], + + 'account_unlink_after_success_commands' => ['nullable', 'array'], + 'account_unlink_after_success_commands.*.id' => ['nullable', 'integer', 'exists:commands,id'], + 'account_unlink_after_success_commands.*.command' => ['required', 'string'], + 'account_unlink_after_success_commands.*.servers' => ['nullable', 'array'], + 'account_unlink_after_success_commands.*.config' => ['required', 'array'], + 'account_unlink_after_success_commands.*.config.is_player_online_required' => ['required', 'boolean'], + 'account_unlink_after_success_commands.*.config.is_run_only_first_unlink' => ['required', 'boolean'], ]); $settings->enable_api = $request->enable_api; $settings->enable_account_link = $request->enable_account_link; $settings->max_players_link_per_account = $request->max_players_link_per_account; - $settings->account_link_after_success_command = $request->account_link_after_success_command; - $settings->account_link_after_success_broadcast_message = $request->account_link_after_success_broadcast_message; - $settings->enable_sync_player_ranks_from_server = $request->enable_sync_player_ranks_from_server; $settings->sync_player_ranks_from_server_id = $request->sync_player_ranks_from_server_id; + // account link commands + $existingAccountLinkCommands = $settings->account_link_after_success_commands; + $updatedAccountLinkCommands = []; + if ($request->account_link_after_success_commands) { + foreach ($request->account_link_after_success_commands as $command) { + $id = array_key_exists('id', $command) ? $command['id'] : null; + $isRunOnAllServers = count($command['servers']) > 0 ? false : true; + $serverIds = Arr::pluck($command['servers'], 'id'); + + // If there isn't any id, then it's a new command. add to database. + if (! $id) { + $created = Command::create([ + 'command' => $command['command'], + 'name' => 'Account Link Command', + 'tag' => 'account_link', + 'description' => null, + 'is_enabled' => true, + 'is_run_on_all_servers' => $isRunOnAllServers, + 'max_attempts' => 1, + 'config' => $command['config'], + ]); + $created->servers()->sync($serverIds); + $updatedAccountLinkCommands[] = $created->id; + } + // If there is an id, then it's an existing command. update it. + else { + $found = Command::where('id', $id)->first(); + if (! $found) { + continue; + } + $found->update([ + 'command' => $command['command'], + 'is_run_on_all_servers' => $isRunOnAllServers, + 'config' => $command['config'], + ]); + + $found->servers()->sync($serverIds); + $updatedAccountLinkCommands[] = $id; + } + } + + // Finally, find all IDs from existing commands that are not in the updated commands and delete them. + $deletedCommands = array_diff($existingAccountLinkCommands, $updatedAccountLinkCommands); + if (count($deletedCommands) > 0) { + Command::whereIn('id', $deletedCommands)->delete(); + } + + $settings->account_link_after_success_commands = $updatedAccountLinkCommands; + } else { + $settings->account_link_after_success_commands = []; + Command::whereIn('id', $existingAccountLinkCommands)->delete(); + } + + // account unlink commands + $existingAccountUnlinkCommands = $settings->account_unlink_after_success_commands; + $updatedAccountUnlinkCommands = []; + if ($request->account_unlink_after_success_commands) { + foreach ($request->account_unlink_after_success_commands as $command) { + $id = array_key_exists('id', $command) ? $command['id'] : null; + $isRunOnAllServers = count($command['servers']) > 0 ? false : true; + $serverIds = Arr::pluck($command['servers'], 'id'); + + // If there isn't any id, then it's a new command. add to database. + if (! $id) { + $created = Command::create([ + 'command' => $command['command'], + 'name' => 'Account Unlink Command', + 'tag' => 'account_unlink', + 'description' => null, + 'is_enabled' => true, + 'is_run_on_all_servers' => $isRunOnAllServers, + 'max_attempts' => 1, + 'config' => $command['config'], + ]); + $created->servers()->sync($serverIds); + $updatedAccountUnlinkCommands[] = $created->id; + } + // If there is an id, then it's an existing command. update it. + else { + $found = Command::where('id', $id)->first(); + if (! $found) { + continue; + } + $found->update([ + 'command' => $command['command'], + 'is_run_on_all_servers' => $isRunOnAllServers, + 'config' => $command['config'], + ]); + + $found->servers()->sync($serverIds); + $updatedAccountUnlinkCommands[] = $id; + } + } + + // Finally, find all IDs from existing commands that are not in the updated commands and delete them. + $deletedUCommands = array_diff($existingAccountUnlinkCommands, $updatedAccountUnlinkCommands); + if (count($deletedUCommands) > 0) { + Command::whereIn('id', $deletedUCommands)->delete(); + } + + $settings->account_unlink_after_success_commands = $updatedAccountUnlinkCommands; + } else { + $settings->account_unlink_after_success_commands = []; + Command::whereIn('id', $existingAccountUnlinkCommands)->delete(); + } + $settings->save(); return redirect()->back() diff --git a/app/Http/Controllers/Admin/UserController.php b/app/Http/Controllers/Admin/UserController.php index 8ca92858f..4455a73d0 100644 --- a/app/Http/Controllers/Admin/UserController.php +++ b/app/Http/Controllers/Admin/UserController.php @@ -40,6 +40,8 @@ public function index() 'updated_at', 'country_id', 'last_login_at', + 'roles.display_name', + 'country.name', AllowedFilter::custom('q', new FilterMultipleFields(['name', 'email', 'username'])), ]) ->allowedSorts(['id', 'name', 'email', 'username', 'created_at', 'updated_at', 'country_id', 'last_login_at']) @@ -47,7 +49,10 @@ public function index() ->paginate($perPage) ->withQueryString(); + $countries = Country::select(['id', 'name'])->get()->pluck('name'); + return Inertia::render('Admin/User/IndexUser', [ + 'countries' => $countries, 'users' => $users, 'filters' => request()->all(['perPage', 'sort', 'filter']), ]); diff --git a/app/Http/Controllers/Api/ApiAccountLinkController.php b/app/Http/Controllers/Api/ApiAccountLinkController.php index d1453106e..7e672e26a 100644 --- a/app/Http/Controllers/Api/ApiAccountLinkController.php +++ b/app/Http/Controllers/Api/ApiAccountLinkController.php @@ -2,52 +2,64 @@ namespace App\Http\Controllers\Api; -use App\Http\Controllers\Controller; +use App\Jobs\AccountLinkAfterSuccessCommandJob; use App\Models\Player; +use App\Models\Server; +use App\Models\User; +use App\Settings\PluginSettings; +use App\Utils\Helpers\AccountLinkUtils; use Illuminate\Http\Request; -use URL; -class ApiAccountLinkController extends Controller +class ApiAccountLinkController extends ApiController { - /** - * Generate a signed account link url - * @param Request $request - * @return \Illuminate\Http\JsonResponse - */ - public function init(Request $request): \Illuminate\Http\JsonResponse + public function verify(Request $request, PluginSettings $pluginSettings) { $request->validate([ - 'uuid' => 'required|uuid', - 'server_id' => 'required|exists:servers,id' + 'data' => 'required|array', + 'data.uuid' => 'required|uuid', + 'data.otp' => 'required|string|size:6', + 'data.server_id' => 'required|exists:servers,id', ]); // Find player with UUID if not found then tell player to wait - $player = Player::where('uuid', $request->uuid)->first(); - if (!$player) { - return response()->json([ - 'status' => 'error', - 'type' => 'not-found', - 'message' => __('Player not found'), - ], 200); + $player = Player::where('uuid', $request->input('data.uuid'))->first(); + if (! $player) { + return $this->error(__('Player not found'), 'not-found', 404); } // Check if player is already linked to some user if ($player->users()->count() > 0) { - return response()->json([ - 'status' => 'error', - 'type' => 'player-already-linked', - 'message' => __('Player already linked to a user'), - ], 200); + return $this->error(__('Player already linked to a user'), 'already-linked'); } - $url = URL::temporarySignedRoute( - 'account-link.verify', now()->addMinutes(30), ['uuid' => $request->uuid, 'server' => $request->server_id] - ); + // Check if OTP is valid + $valid = AccountLinkUtils::verifyOtp($request->input('data.otp')); + if (! $valid) { + return $this->error(__('Provided OTP is invalid or expired. Please try again.'), 'otp-invalid'); + } - return response()->json([ - 'status' => 'success', - 'message' => 'Ok', - 'data' => $url - ]); + // Check if current user has enough available slot to link the player. + $user = User::where('id', $valid['user_id'])->first(); + $maxSlots = $pluginSettings->max_players_link_per_account; // Total number of players that can be linked to account + $linkedPlayers = $user->players()->count(); // Number of players already linked to account + if ($linkedPlayers >= $maxSlots) { + return $this->error(__('You already have max :max_slots players linked!', ['max_slots' => $maxSlots]), 'max-players-reached'); + } + + // Link player to user + $user->players()->attach($player); + AccountLinkUtils::forgetOtp($request->input('data.otp')); + + // If MARK_USER_VERIFYED_ON_ACCOUNT_LINK is enabled then mark user as verified. + if (config('minetrax.mark_user_verified_on_account_link') && $user->verified_at == null) { + $user->verified_at = now(); + $user->save(); + } + + // Run command to give this player the reward according to Plugin setting if enabled + $server = Server::find($request->input('data.server_id')); + AccountLinkAfterSuccessCommandJob::dispatch($player, $user->id, $server); + + return $this->success(null, __('Player linked successfully')); } } diff --git a/app/Http/Controllers/Api/ApiController.php b/app/Http/Controllers/Api/ApiController.php new file mode 100644 index 000000000..0ba3c18f0 --- /dev/null +++ b/app/Http/Controllers/Api/ApiController.php @@ -0,0 +1,11 @@ +validate([ - 'server_id' => 'required|numeric|exists:servers,id', - 'session_uuid' => 'required|uuid', - 'uuid' => 'required|uuid', - 'player_id' => 'sometimes|nullable|numeric', - 'username' => 'required|string', - 'ip_address' => 'required|string', - 'join_address' => 'sometimes|nullable|string', - 'minecraft_version' => 'sometimes|nullable|string', - 'display_name' => 'required|string', - 'session_started_at' => 'required|numeric', - 'is_op' => 'required|boolean', - 'players_world_stat_intel' => 'sometimes|nullable|array', - 'skin_property' => 'sometimes|nullable|json', - 'skin_texture_id' => 'sometimes|nullable|string', + 'data' => 'required|array', + 'data.server_id' => 'required|numeric|exists:servers,id', + 'data.session_uuid' => 'required|uuid', + 'data.uuid' => 'required|uuid', + 'data.player_id' => 'sometimes|nullable|numeric', + 'data.username' => 'required|string', + 'data.ip_address' => 'required|string', + 'data.join_address' => 'sometimes|nullable|string', + 'data.minecraft_version' => 'sometimes|nullable|string', + 'data.display_name' => 'required|string', + 'data.session_started_at' => 'required|numeric', + 'data.is_op' => 'required|boolean', + 'data.players_world_stat_intel' => 'sometimes|nullable|array', + 'data.skin_property' => 'sometimes|nullable|json', + 'data.skin_texture_id' => 'sometimes|nullable|string', ]); - $server = Server::where('id', $request->server_id)->firstOrFail(); + $server = Server::where('id', $request->input('data.server_id'))->firstOrFail(); if (! $server->is_player_intel_enabled) { - return response()->json([ - 'status' => 'error', - 'message' => 'Player intel is disabled for this server.', - ], 403); + return $this->error(__('Player intel is disabled for this server.'), 'player_intel_disabled', 403); } try { - $playerCountryId = $geolocationService->getCountryIdFromIP($request->ip_address); - $carbonDate = Carbon::createFromTimestampMs($request->session_started_at); + $playerCountryId = $geolocationService->getCountryIdFromIP($request->input('data.ip_address')); + $carbonDate = Carbon::createFromTimestampMs($request->input('data.session_started_at')); // trim join address last . - $fixedJoinAddress = $request->join_address ? trim($request->join_address, '.') : null; + $fixedJoinAddress = $request->input('data.join_address') ? trim($request->input('data.join_address'), '.') : null; // Start the session $newSession = MinecraftPlayerSession::create([ - 'uuid' => $request->session_uuid, - 'server_id' => $request->server_id, - 'player_uuid' => $request->uuid, - 'player_username' => $request->username, - 'player_displayname' => $request->display_name, + 'uuid' => $request->input('data.session_uuid'), + 'server_id' => $request->input('data.server_id'), + 'player_uuid' => $request->input('data.uuid'), + 'player_username' => $request->input('data.username'), + 'player_displayname' => $request->input('data.display_name'), 'session_started_at' => $carbonDate, - 'player_ip_address' => $request->ip_address, + 'player_ip_address' => $request->input('data.ip_address'), 'country_id' => $playerCountryId, - 'is_op' => $request->is_op, + 'is_op' => $request->input('data.is_op'), 'join_address' => $fixedJoinAddress, - 'minecraft_version' => $request->minecraft_version, + 'minecraft_version' => $request->input('data.minecraft_version'), ]); - if ($request->players_world_stat_intel) { - foreach ($request->players_world_stat_intel as $playerWorldStat) { - $sWorld = MinecraftServerWorld::where('world_name', $playerWorldStat['world_name'])->where('server_id', $request->server_id)->first(); + if ($request->input('data.players_world_stat_intel')) { + foreach ($request->input('data.players_world_stat_intel') as $playerWorldStat) { + $sWorld = MinecraftServerWorld::where('world_name', $playerWorldStat['world_name'])->where('server_id', $request->input('data.server_id'))->first(); if (! $sWorld) { continue; } MinecraftPlayerWorldStat::create([ - 'player_uuid' => $request->uuid, + 'player_uuid' => $request->input('data.uuid'), 'session_id' => $newSession->id, 'minecraft_server_world_id' => $sWorld->id, 'survival_time' => 0, @@ -85,196 +82,197 @@ public function postSessionInit(Request $request, GeolocationService $geolocatio } // Create a minecraft_player and player if not exists using event. - MinecraftPlayerSessionCreated::dispatch($newSession, $request->all()); + MinecraftPlayerSessionCreated::dispatch($newSession, $request->input('data')); - return response()->json($newSession, 201); + return $this->success($newSession); } catch (\Exception $e) { \Log::error($e); - return response()->json([ - 'status' => 'error', - 'message' => __('Failed to start player session.'), - 'debug' => $e->getMessage(), - ], 500); + return $this->error( + __('Failed to start player session. :message', [ + 'message' => $e->getMessage(), + ]), + 'internal_server_error', + 500, + ); } } public function postReportPvpKill(Request $request) { $request->validate([ - 'session_uuid' => 'required|uuid|exists:minecraft_player_sessions,uuid', - 'killer_uuid' => 'required|uuid', - 'killer_username' => 'required|string', - 'victim_uuid' => 'required|uuid', - 'victim_username' => 'required|string', - 'weapon' => 'present|nullable|string', - 'killed_at' => 'required|numeric', - 'world_name' => 'present|nullable|string', - 'world_location' => 'present|nullable|string', + 'data' => 'required|array', + 'data.session_uuid' => 'required|uuid|exists:minecraft_player_sessions,uuid', + 'data.killer_uuid' => 'required|uuid', + 'data.killer_username' => 'required|string', + 'data.victim_uuid' => 'required|uuid', + 'data.victim_username' => 'required|string', + 'data.weapon' => 'present|nullable|string', + 'data.killed_at' => 'required|numeric', + 'data.world_name' => 'present|nullable|string', + 'data.world_location' => 'present|nullable|string', ]); - $minecraftPlayerSession = MinecraftPlayerSession::where('uuid', $request->session_uuid)->firstOrFail(); + $minecraftPlayerSession = MinecraftPlayerSession::where('uuid', $request->input('data.session_uuid'))->firstOrFail(); try { - $minecraftServerWorld = MinecraftServerWorld::where('server_id', $minecraftPlayerSession->server_id)->where('world_name', $request->world_name)->first(); - $killedAt = Carbon::createFromTimestampMs($request->killed_at); + $minecraftServerWorld = MinecraftServerWorld::where('server_id', $minecraftPlayerSession->server_id)->where('world_name', $request->input('data.world_name'))->first(); + $killedAt = Carbon::createFromTimestampMs($request->input('data.killed_at')); $minecraftPlayerPvpKill = MinecraftPlayerPvpKill::create([ 'session_id' => $minecraftPlayerSession->id, - 'killer_uuid' => $request->killer_uuid, - 'killer_username' => $request->killer_username, - 'victim_uuid' => $request->victim_uuid, - 'victim_username' => $request->victim_username, + 'killer_uuid' => $request->input('data.killer_uuid'), + 'killer_username' => $request->input('data.killer_username'), + 'victim_uuid' => $request->input('data.victim_uuid'), + 'victim_username' => $request->input('data.victim_username'), 'killed_at' => $killedAt, - 'weapon' => $request->weapon, - 'world_location' => $request->world_location, + 'weapon' => $request->input('data.weapon'), + 'world_location' => $request->input('data.world_location'), 'minecraft_server_world_id' => $minecraftServerWorld?->id, ]); - return response()->json($minecraftPlayerPvpKill, 201); + return $this->success($minecraftPlayerPvpKill); } catch (\Exception $e) { \Log::error($e); - return response()->json([ - 'status' => 'error', - 'message' => __('Failed reporting player pvp kill.'), - 'debug' => $e->getMessage(), - ], 500); + return $this->error(__('Failed reporting player pvp kill: :message', [ + 'message' => $e->getMessage(), + ]), 'internal_server_error', 500); } } public function postReportDeath(Request $request) { $request->validate([ - 'session_uuid' => 'required|uuid|exists:minecraft_player_sessions,uuid', - 'player_uuid' => 'required|uuid', - 'player_username' => 'required|string', - 'cause' => 'present|nullable|string', - 'killer_uuid' => 'present|nullable|uuid', - 'killer_username' => 'present|nullable|string', - 'killer_entity_id' => 'present|nullable|string', - 'killer_entity_name' => 'present|nullable|string', - 'died_at' => 'required|numeric', - 'world_name' => 'present|nullable|string', - 'world_location' => 'present|nullable|string', + 'data' => 'required|array', + 'data.session_uuid' => 'required|uuid|exists:minecraft_player_sessions,uuid', + 'data.player_uuid' => 'required|uuid', + 'data.player_username' => 'required|string', + 'data.cause' => 'present|nullable|string', + 'data.killer_uuid' => 'present|nullable|uuid', + 'data.killer_username' => 'present|nullable|string', + 'data.killer_entity_id' => 'present|nullable|string', + 'data.killer_entity_name' => 'present|nullable|string', + 'data.died_at' => 'required|numeric', + 'data.world_name' => 'present|nullable|string', + 'data.world_location' => 'present|nullable|string', ]); - $minecraftPlayerSession = MinecraftPlayerSession::where('uuid', $request->session_uuid)->firstOrFail(); + $minecraftPlayerSession = MinecraftPlayerSession::where('uuid', $request->input('data.session_uuid'))->firstOrFail(); try { - $minecraftServerWorld = MinecraftServerWorld::where('server_id', $minecraftPlayerSession->server_id)->where('world_name', $request->world_name)->first(); - $diedAt = Carbon::createFromTimestampMs($request->died_at); + $minecraftServerWorld = MinecraftServerWorld::where('server_id', $minecraftPlayerSession->server_id)->where('world_name', $request->input('data.world_name'))->first(); + $diedAt = Carbon::createFromTimestampMs($request->input('data.died_at')); $minecraftPlayerDeath = MinecraftPlayerDeath::create([ 'session_id' => $minecraftPlayerSession->id, - 'player_uuid' => $request->player_uuid, - 'player_username' => $request->player_username, - 'cause' => $request->cause ?? 'unknown', - 'killer_uuid' => $request->killer_uuid, - 'killer_username' => $request->killer_username, - 'killer_entity_id' => $request->killer_entity_id, - 'killer_entity_name' => $request->killer_entity_name, + 'player_uuid' => $request->input('data.player_uuid'), + 'player_username' => $request->input('data.player_username'), + 'cause' => $request->input('data.cause') ?? 'unknown', + 'killer_uuid' => $request->input('data.killer_uuid'), + 'killer_username' => $request->input('data.killer_username'), + 'killer_entity_id' => $request->input('data.killer_entity_id'), + 'killer_entity_name' => $request->input('data.killer_entity_name'), 'died_at' => $diedAt, - 'world_location' => $request->world_location, + 'world_location' => $request->input('data.world_location'), 'minecraft_server_world_id' => $minecraftServerWorld?->id, ]); - return response()->json($minecraftPlayerDeath, 201); + return $this->success($minecraftPlayerDeath); } catch (\Exception $e) { \Log::error($e); - return response()->json([ - 'status' => 'error', - 'message' => __('Failed reporting player pvp kill.'), - 'debug' => $e->getMessage(), - ], 500); + return $this->error(__('Failed reporting player death: :message', [ + 'message' => $e->getMessage(), + ]), 'internal_server_error', 500); } } public function postReportEvent(Request $request, GeolocationService $geolocationService) { $request->validate([ - 'session_uuid' => 'required|uuid|exists:minecraft_player_sessions,uuid', - 'uuid' => 'required|uuid', - 'username' => 'required|string', - 'server_id' => 'required|exists:servers,id', - 'ip_address' => 'required|string', - 'display_name' => 'nullable|string', - 'is_op' => 'required|boolean', - 'session_started_at' => 'required', - 'session_ended_at' => 'required|nullable', - 'mob_kills' => 'required|numeric', - 'player_kills' => 'required|numeric', - 'deaths' => 'required|numeric', - 'afk_time' => 'required|numeric', - 'play_time' => 'sometimes|nullable|integer', - 'is_kicked' => 'required|boolean', - 'is_banned' => 'required|boolean', + 'data' => 'required|array', + 'data.session_uuid' => 'required|uuid|exists:minecraft_player_sessions,uuid', + 'data.uuid' => 'required|uuid', + 'data.username' => 'required|string', + 'data.server_id' => 'required|exists:servers,id', + 'data.ip_address' => 'required|string', + 'data.display_name' => 'nullable|string', + 'data.is_op' => 'required|boolean', + 'data.session_started_at' => 'required', + 'data.session_ended_at' => 'required|nullable', + 'data.mob_kills' => 'required|numeric', + 'data.player_kills' => 'required|numeric', + 'data.deaths' => 'required|numeric', + 'data.afk_time' => 'required|numeric', + 'data.play_time' => 'sometimes|nullable|integer', + 'data.is_kicked' => 'required|boolean', + 'data.is_banned' => 'required|boolean', - 'player_ping' => 'nullable|numeric', - 'mob_kills_xmin' => 'required|numeric', - 'player_kills_xmin' => 'required|numeric', - 'deaths_xmin' => 'required|numeric', - 'items_used_xmin' => 'required|numeric', - 'items_mined_xmin' => 'required|numeric', - 'items_picked_up_xmin' => 'required|numeric', - 'items_dropped_xmin' => 'required|numeric', - 'items_broken_xmin' => 'required|numeric', - 'items_crafted_xmin' => 'required|numeric', - 'items_placed_xmin' => 'required|numeric', - 'items_consumed_xmin' => 'required|numeric', - 'afk_time_xmin' => 'required|numeric', - 'play_time_xmin' => 'required|numeric', - 'world_location' => 'sometimes|nullable|json', - 'world_name' => 'sometimes|nullable|string', - 'players_world_stat_intel' => 'sometimes|nullable|array', + 'data.player_ping' => 'nullable|numeric', + 'data.mob_kills_xmin' => 'required|numeric', + 'data.player_kills_xmin' => 'required|numeric', + 'data.deaths_xmin' => 'required|numeric', + 'data.items_used_xmin' => 'required|numeric', + 'data.items_mined_xmin' => 'required|numeric', + 'data.items_picked_up_xmin' => 'required|numeric', + 'data.items_dropped_xmin' => 'required|numeric', + 'data.items_broken_xmin' => 'required|numeric', + 'data.items_crafted_xmin' => 'required|numeric', + 'data.items_placed_xmin' => 'required|numeric', + 'data.items_consumed_xmin' => 'required|numeric', + 'data.afk_time_xmin' => 'required|numeric', + 'data.play_time_xmin' => 'required|numeric', + 'data.world_location' => 'sometimes|nullable|json', + 'data.world_name' => 'sometimes|nullable|string', + 'data.players_world_stat_intel' => 'sometimes|nullable|array', - 'fish_caught_xmin' => 'sometimes|nullable|integer', - 'items_enchanted_xmin' => 'sometimes|nullable|integer', - 'times_slept_in_bed_xmin' => 'sometimes|nullable|integer', - 'jumps_xmin' => 'sometimes|nullable|integer', - 'raids_won_xmin' => 'sometimes|nullable|integer', - 'distance_traveled_xmin' => 'sometimes|nullable|numeric', - 'distance_traveled_on_land_xmin' => 'sometimes|nullable|numeric', - 'distance_traveled_on_water_xmin' => 'sometimes|nullable|numeric', - 'distance_traveled_on_air_xmin' => 'sometimes|nullable|numeric', - 'pvp_damage_given_xmin' => 'sometimes|nullable|numeric', - 'pvp_damage_taken_xmin' => 'sometimes|nullable|numeric', - 'vault_balance' => 'sometimes|nullable|numeric', - 'vault_groups' => 'sometimes|nullable|array', - 'inventory' => 'sometimes|nullable|json', - 'ender_chest' => 'sometimes|nullable|json', + 'data.fish_caught_xmin' => 'sometimes|nullable|integer', + 'data.items_enchanted_xmin' => 'sometimes|nullable|integer', + 'data.times_slept_in_bed_xmin' => 'sometimes|nullable|integer', + 'data.jumps_xmin' => 'sometimes|nullable|integer', + 'data.raids_won_xmin' => 'sometimes|nullable|integer', + 'data.distance_traveled_xmin' => 'sometimes|nullable|numeric', + 'data.distance_traveled_on_land_xmin' => 'sometimes|nullable|numeric', + 'data.distance_traveled_on_water_xmin' => 'sometimes|nullable|numeric', + 'data.distance_traveled_on_air_xmin' => 'sometimes|nullable|numeric', + 'data.pvp_damage_given_xmin' => 'sometimes|nullable|numeric', + 'data.pvp_damage_taken_xmin' => 'sometimes|nullable|numeric', + 'data.vault_balance' => 'sometimes|nullable|numeric', + 'data.vault_groups' => 'sometimes|nullable|array', + 'data.inventory' => 'sometimes|nullable|json', + 'data.ender_chest' => 'sometimes|nullable|json', - 'skin_property' => 'sometimes|nullable|json', - 'skin_texture_id' => 'sometimes|nullable|string', + 'data.skin_property' => 'sometimes|nullable|json', + 'data.skin_texture_id' => 'sometimes|nullable|string', ]); - $inventory = $request->inventory ? json_decode($request->inventory) : null; - $enderchest = $request->ender_chest ? json_decode($request->ender_chest) : null; - $worldLocation = $request->world_location ? json_decode($request->world_location) : null; + $inventory = $request->input('data.inventory') ? json_decode($request->input('data.inventory')) : null; + $enderchest = $request->input('data.ender_chest') ? json_decode($request->input('data.ender_chest')) : null; + $worldLocation = $request->input('data.world_location') ? json_decode($request->input('data.world_location')) : null; - $minecraftPlayerSession = MinecraftPlayerSession::where('uuid', $request->session_uuid)->firstOrFail(); + $minecraftPlayerSession = MinecraftPlayerSession::where('uuid', $request->input('data.session_uuid'))->firstOrFail(); DB::beginTransaction(); try { // Report data to MinecraftPlayerSessions table and end the session if condition there. - $sessionEndedCarbonDate = $request->session_ended_at ? Carbon::createFromTimestampMs($request->session_ended_at) : null; - MinecraftPlayerSession::where('uuid', $request->session_uuid)->update([ - 'player_ping' => $request->player_ping, - 'mob_kills' => $request->mob_kills, - 'player_kills' => $request->player_kills, - 'deaths' => $request->deaths, - 'afk_time' => $request->afk_time, - 'play_time' => $request->play_time ?? 0, - 'is_kicked' => $request->is_kicked, - 'is_banned' => $request->is_banned, - 'is_op' => $request->is_op || $minecraftPlayerSession->is_op, + $sessionEndedCarbonDate = $request->input('data.session_ended_at') ? Carbon::createFromTimestampMs($request->input('data.session_ended_at')) : null; + MinecraftPlayerSession::where('uuid', $request->input('data.session_uuid'))->update([ + 'player_ping' => $request->input('data.player_ping'), + 'mob_kills' => $request->input('data.mob_kills'), + 'player_kills' => $request->input('data.player_kills'), + 'deaths' => $request->input('data.deaths'), + 'afk_time' => $request->input('data.afk_time'), + 'play_time' => $request->input('data.play_time') ?? 0, + 'is_kicked' => $request->input('data.is_kicked'), + 'is_banned' => $request->input('data.is_banned'), + 'is_op' => $request->input('data.is_op') || $minecraftPlayerSession->is_op, 'session_ended_at' => $sessionEndedCarbonDate, - 'vault_balance' => $request->vault_balance, - 'vault_groups' => $request->vault_groups, + 'vault_balance' => $request->input('data.vault_balance'), + 'vault_groups' => $request->input('data.vault_groups'), ]); // Update PlayerWorldStats for the given session for each world - if ($request->players_world_stat_intel) { - foreach ($request->players_world_stat_intel as $playerWorldStat) { - $sWorld = MinecraftServerWorld::where('world_name', $playerWorldStat['world_name'])->where('server_id', $request->server_id)->first(); + if ($request->input('data.players_world_stat_intel')) { + foreach ($request->input('data.players_world_stat_intel') as $playerWorldStat) { + $sWorld = MinecraftServerWorld::where('world_name', $playerWorldStat['world_name'])->where('server_id', $request->input('data.server_id'))->first(); if (! $sWorld) { continue; } @@ -282,7 +280,7 @@ public function postReportEvent(Request $request, GeolocationService $geolocatio [ 'session_id' => $minecraftPlayerSession->id, 'minecraft_server_world_id' => $sWorld->id, - 'player_uuid' => $request->uuid, + 'player_uuid' => $request->input('data.uuid'), ], [ 'survival_time' => $playerWorldStat['survival_time'], @@ -298,39 +296,39 @@ public function postReportEvent(Request $request, GeolocationService $geolocatio $minecraftServerWorld = MinecraftServerWorld::where('server_id', $minecraftPlayerSession->server_id)->where('world_name', $request->world_name)->first(); $mcPlayerEvent = MinecraftPlayerEvent::create([ 'session_id' => $minecraftPlayerSession->id, - 'player_uuid' => $request->uuid, - 'player_username' => $request->username, - 'player_displayname' => $request->display_name, - 'ip_address' => $request->ip_address, - 'player_ping' => $request->player_ping, - 'mob_kills' => $request->mob_kills_xmin, - 'player_kills' => $request->player_kills_xmin, - 'deaths' => $request->deaths_xmin, - 'afk_time' => $request->afk_time_xmin, - 'play_time' => $request->play_time_xmin, - 'items_used' => $request->items_used_xmin, - 'items_mined' => $request->items_mined_xmin, - 'items_picked_up' => $request->items_picked_up_xmin, - 'items_dropped' => $request->items_dropped_xmin, - 'items_broken' => $request->items_broken_xmin, - 'items_crafted' => $request->items_crafted_xmin, - 'items_placed' => $request->items_placed_xmin, - 'items_consumed' => $request->items_consumed_xmin, + 'player_uuid' => $request->input('data.uuid'), + 'player_username' => $request->input('data.username'), + 'player_displayname' => $request->input('data.display_name'), + 'ip_address' => $request->input('data.ip_address'), + 'player_ping' => $request->input('data.player_ping'), + 'mob_kills' => $request->input('data.mob_kills_xmin'), + 'player_kills' => $request->input('data.player_kills_xmin'), + 'deaths' => $request->input('data.deaths_xmin'), + 'afk_time' => $request->input('data.afk_time_xmin'), + 'play_time' => $request->input('data.play_time_xmin'), + 'items_used' => $request->input('data.items_used_xmin'), + 'items_mined' => $request->input('data.items_mined_xmin'), + 'items_picked_up' => $request->input('data.items_picked_up_xmin'), + 'items_dropped' => $request->input('data.items_dropped_xmin'), + 'items_broken' => $request->input('data.items_broken_xmin'), + 'items_crafted' => $request->input('data.items_crafted_xmin'), + 'items_placed' => $request->input('data.items_placed_xmin'), + 'items_consumed' => $request->input('data.items_consumed_xmin'), 'world_location' => $worldLocation, 'minecraft_server_world_id' => $minecraftServerWorld?->id, - 'fish_caught' => $request->fish_caught_xmin, - 'items_enchanted' => $request->items_enchanted_xmin, - 'times_slept_in_bed' => $request->times_slept_in_bed_xmin, - 'times_jumped' => $request->jumps_xmin, - 'raids_won' => $request->raids_won_xmin, - 'distance_traveled' => $request->distance_traveled_xmin, - 'distance_traveled_on_land' => $request->distance_traveled_on_land_xmin, - 'distance_traveled_on_water' => $request->distance_traveled_on_water_xmin, - 'distance_traveled_on_air' => $request->distance_traveled_on_air_xmin, - 'pvp_damage_given' => $request->pvp_damage_given_xmin, - 'pvp_damage_taken' => $request->pvp_damage_taken_xmin, - 'vault_balance' => $request->vault_balance, - 'vault_groups' => $request->vault_groups, + 'fish_caught' => $request->input('data.fish_caught_xmin'), + 'items_enchanted' => $request->input('data.items_enchanted_xmin'), + 'times_slept_in_bed' => $request->input('data.times_slept_in_bed_xmin'), + 'times_jumped' => $request->input('data.jumps_xmin'), + 'raids_won' => $request->input('data.raids_won_xmin'), + 'distance_traveled' => $request->input('data.distance_traveled_xmin'), + 'distance_traveled_on_land' => $request->input('data.distance_traveled_on_land_xmin'), + 'distance_traveled_on_water' => $request->input('data.distance_traveled_on_water_xmin'), + 'distance_traveled_on_air' => $request->input('data.distance_traveled_on_air_xmin'), + 'pvp_damage_given' => $request->input('data.pvp_damage_given_xmin'), + 'pvp_damage_taken' => $request->input('data.pvp_damage_taken_xmin'), + 'vault_balance' => $request->input('data.vault_balance'), + 'vault_groups' => $request->input('data.vault_groups'), 'enderchest_items' => $enderchest, 'inventory_items' => $inventory, ]); @@ -338,22 +336,17 @@ public function postReportEvent(Request $request, GeolocationService $geolocatio DB::commit(); // Fire Event for this so we can update minecraft_players and players table. - MinecraftPlayerEventCreated::dispatch($mcPlayerEvent, $minecraftPlayerSession->server_id, $request->all()); + MinecraftPlayerEventCreated::dispatch($mcPlayerEvent, $minecraftPlayerSession->server_id, $request->input('data')); // Return response - return response()->json([ - 'status' => 'success', - 'message' => __('PlayerIntel event for :username reported successfully.', ['username' => $request->username]), - ], 201); + return $this->success(null, __('PlayerIntel event for :username reported successfully.', ['username' => $request->input('data.username')])); } catch (\Exception $e) { DB::rollBack(); \Log::error($e); - return response()->json([ - 'status' => 'error', - 'message' => __('Failed to report Event data.'), - 'debug' => $e->getMessage(), - ], 500); + return $this->error(__('Failed to report Event data: :message', [ + 'message' => $e->getMessage(), + ]), 'failed_to_report_event', 500); } } } diff --git a/app/Http/Controllers/Api/ApiMinecraftServerIntelController.php b/app/Http/Controllers/Api/ApiMinecraftServerIntelController.php index 9ae1d2522..5fdd94c1a 100644 --- a/app/Http/Controllers/Api/ApiMinecraftServerIntelController.php +++ b/app/Http/Controllers/Api/ApiMinecraftServerIntelController.php @@ -2,7 +2,6 @@ namespace App\Http\Controllers\Api; -use App\Http\Controllers\Controller; use App\Models\MinecraftServerLiveInfo; use App\Models\MinecraftServerWorld; use App\Models\MinecraftWorldLiveInfo; @@ -10,66 +9,64 @@ use DB; use Illuminate\Http\Request; -class ApiMinecraftServerIntelController extends Controller +class ApiMinecraftServerIntelController extends ApiController { public function postReport(Request $request) { $this->validate($request, [ - 'server_id' => 'required|int|exists:servers,id', - 'online_players' => 'required|int', - 'max_players' => 'required|int', - 'tps' => 'required|numeric', - 'max_memory' => 'required|int', - 'total_memory' => 'required|int', - 'free_memory' => 'required|int', - 'available_cpu_count' => 'required', - 'cpu_load' => 'required|numeric', - 'uptime' => 'required|int', - 'free_disk_in_kb' => 'required|numeric', - 'world_data' => 'required|array', - 'motd' => 'nullable|string', - 'server_version' => 'required|string', - 'server_session_id' => 'present|nullable|string' + 'data' => 'required|array', + 'data.server_id' => 'required|int|exists:servers,id', + 'data.online_players' => 'required|int', + 'data.max_players' => 'required|int', + 'data.tps' => 'nullable|numeric', + 'data.max_memory' => 'required|int', + 'data.total_memory' => 'required|int', + 'data.free_memory' => 'required|int', + 'data.available_cpu_count' => 'required', + 'data.cpu_load' => 'required|numeric', + 'data.uptime' => 'required|int', + 'data.free_disk_in_kb' => 'required|numeric', + 'data.world_data' => 'nullable|array', + 'data.motd' => 'nullable|string', + 'data.server_version' => 'required|string', + 'data.server_session_id' => 'present|nullable|string', ]); - $server = Server::where('id', $request->server_id)->firstOrFail(); - if (!$server->is_server_intel_enabled) { - return response()->json([ - 'status' => 'error', - 'message' => 'Server intel is disabled for this server.', - ], 403); + $server = Server::where('id', $request->input('data.server_id'))->firstOrFail(); + if (! $server->is_server_intel_enabled) { + return $this->error('Server intel is disabled for this server.', 'server_intel_disabled', 403); } try { // Create MinecraftServerLiveInfo - DB::transaction(function() use ($request, $server) { + DB::transaction(function () use ($request, $server) { MinecraftServerLiveInfo::create([ - 'server_id' => $request->input('server_id'), - 'online_players' => $request->input('online_players'), - 'max_players' => $request->input('max_players'), - 'tps' => $request->input('tps'), - 'max_memory' => $request->input('max_memory'), - 'total_memory' => $request->input('total_memory'), - 'free_memory' => $request->input('free_memory'), - 'used_memory' => $request->input('total_memory') - $request->input('free_memory'), - 'available_cpu_count' => $request->input('available_cpu_count'), - 'cpu_load' => $request->input('cpu_load'), - 'uptime' => $request->input('uptime'), - 'free_disk_in_kb' => $request->input('free_disk_in_kb'), - 'motd' => $request->input('motd') ?? null, - 'server_version' => $request->input('server_version'), - 'chunks_loaded' => $request->input('chunks_loaded'), - 'server_session_id' => $request->input('server_session_id'), + 'server_id' => $request->input('data.server_id'), + 'online_players' => $request->input('data.online_players'), + 'max_players' => $request->input('data.max_players'), + 'tps' => $request->input('data.tps') ?? 0, + 'max_memory' => $request->input('data.max_memory'), + 'total_memory' => $request->input('data.total_memory'), + 'free_memory' => $request->input('data.free_memory'), + 'used_memory' => $request->input('data.total_memory') - $request->input('data.free_memory'), + 'available_cpu_count' => $request->input('data.available_cpu_count'), + 'cpu_load' => $request->input('data.cpu_load'), + 'uptime' => $request->input('data.uptime'), + 'free_disk_in_kb' => $request->input('data.free_disk_in_kb'), + 'motd' => $request->input('data.motd') ?? null, + 'server_version' => $request->input('data.server_version'), + 'chunks_loaded' => $request->input('data.chunks_loaded'), + 'server_session_id' => $request->input('data.server_session_id'), ]); // Create MinecraftServerWorld if not exists and record its MinecraftWorldLiveInfo - $worlds = $request->input('world_data'); + $worlds = $request->input('data.world_data') ?? []; foreach ($worlds as $world) { $worldEntity = MinecraftServerWorld::updateOrCreate([ - 'server_id' => $request->input('server_id'), + 'server_id' => $request->input('data.server_id'), 'world_name' => $world['world_name'], ], [ - 'server_id' => $request->input('server_id'), + 'server_id' => $request->input('data.server_id'), 'world_name' => $world['world_name'], 'world_border' => $world['world_border'], 'environment' => $world['environment'], @@ -80,7 +77,7 @@ public function postReport(Request $request) 'online_players' => $world['online_players'], 'chunks_loaded' => $world['chunks_loaded'], 'game_time' => $world['game_time'], - 'server_session_id' => $request->input('server_session_id'), + 'server_session_id' => $request->input('data.server_session_id'), ]); } @@ -89,17 +86,15 @@ public function postReport(Request $request) ]); }, 3); - return response()->json([ - 'status' => 'success', - 'message' => 'Server Intel successfully reported.', - ], 201); - } catch(\Exception $e) { + return $this->success(null, 'Server Intel successfully reported.'); + } catch (\Exception $e) { \Log::error($e); - return response()->json([ - 'status' => 'error', - 'message' => 'Server Intel failed to report.', - 'debug' => $e->getMessage(), - ], 500); + + return $this->error( + __('Server Intel failed to report: :message', ['message' => $e->getMessage()]), + 'internal_server_error', + 500, + ); } } } diff --git a/app/Http/Controllers/Api/ApiPlayerController.php b/app/Http/Controllers/Api/ApiPlayerController.php index e908cf9bc..6b37193cd 100644 --- a/app/Http/Controllers/Api/ApiPlayerController.php +++ b/app/Http/Controllers/Api/ApiPlayerController.php @@ -2,11 +2,11 @@ namespace App\Http\Controllers\Api; -use App\Http\Controllers\Controller; +use App\Jobs\RunDeferredPlayerCommandQueuesJob; use App\Models\Player; use Illuminate\Http\Request; -class ApiPlayerController extends Controller +class ApiPlayerController extends ApiController { /** * Whois Detail of a Player. @@ -25,20 +25,24 @@ class ApiPlayerController extends Controller public function postWhoisPlayer(Request $request) { $request->validate([ - 'username' => ['required_without:uuid', 'string', 'min:3'], - 'uuid' => ['required_without:username', 'uuid'], - 'ip_address' => ['sometimes', 'nullable', 'ip'], + 'data' => ['required', 'array'], + 'data.username' => ['required_without:data.uuid', 'string', 'min:3'], + 'data.uuid' => ['required_without:data.username', 'uuid'], + 'data.ip_address' => ['sometimes', 'nullable', 'ip'], + 'data.only_exact_result' => ['sometimes', 'nullable', 'boolean'], ]); - $username = $request->uuid ?? $request->username; - $columnName = $request->uuid ? 'uuid' : 'username'; + $username = $request->input('data.uuid') ?? $request->input('data.username'); + $columnName = $request->input('data.uuid') ? 'uuid' : 'username'; + $onlyExactResult = $request->input('data.only_exact_result'); + $ipAddress = $request->input('data.ip_address'); // Count the number of matches and return 1 if there is an exact match $playerFoundCount = Player::where($columnName, 'LIKE', $username)->whereNotNull($columnName)->count(); - if ($playerFoundCount && $request->only_exact_result) { + if ($playerFoundCount && $onlyExactResult) { $playerFoundCount = 1; } - if (! $playerFoundCount && ! $request->only_exact_result) { + if (! $playerFoundCount && ! $onlyExactResult) { $playerFoundCount = Player::where($columnName, 'LIKE', '%'.$username.'%')->whereNotNull($columnName)->count(); } @@ -81,8 +85,8 @@ public function postWhoisPlayer(Request $request) // IF IP IS SENT THEN RETURN ITS WHOIS INFORMATION $geoResponse = null; - if ($request->ip_address) { - $country = geoip($request->ip_address); + if ($ipAddress) { + $country = geoip($ipAddress); $geoResponse = [ 'ip' => $country->ip, 'iso_code' => $country->iso_code, @@ -93,29 +97,29 @@ public function postWhoisPlayer(Request $request) } $whoisData['geo'] = $geoResponse; - return response()->json([ - 'status' => 'success', - 'message' => 'Ok', - 'data' => $whoisData, - ]); + return $this->success($whoisData, 'Ok'); } public function postFetchPlayerData(Request $request) { $request->validate([ - 'uuid' => ['required', 'uuid'], - 'username' => ['required', 'string', 'min:3'], + 'data' => ['required', 'array'], + 'data.uuid' => ['required', 'uuid'], + 'data.username' => ['required', 'string', 'min:3'], ]); + $requestUuid = $request->input('data.uuid'); + $requestUsername = $request->input('data.username'); + $responseData = [ - 'uuid' => $request->uuid, - 'username' => $request->username, + 'uuid' => $requestUuid, + 'username' => $requestUsername, 'is_verified' => false, 'daily_rewards_claimed_at' => null, 'player_id' => null, ]; - $player = Player::where('uuid', $request->uuid) + $player = Player::where('uuid', $requestUuid) ->with(['users:id,name,username,profile_photo_path,verified_at', 'rank:id,shortname,name', 'country:id,name,iso_code']) ->first(); @@ -132,6 +136,9 @@ public function postFetchPlayerData(Request $request) $responseData['profile_link'] = route('player.show', [$player->uuid]); } - return response()->json($responseData); + // Queue Job to check if any pending command queue exists for this player then run it. + RunDeferredPlayerCommandQueuesJob::dispatch($requestUuid); + + return $this->success($responseData, 'Ok'); } } diff --git a/app/Http/Controllers/Api/ApiServerChatlogController.php b/app/Http/Controllers/Api/ApiServerChatlogController.php index b66c27fef..c0cb0f5e8 100644 --- a/app/Http/Controllers/Api/ApiServerChatlogController.php +++ b/app/Http/Controllers/Api/ApiServerChatlogController.php @@ -3,35 +3,37 @@ namespace App\Http\Controllers\Api; use App\Events\ServerChatlogCreated; -use App\Http\Controllers\Controller; use App\Models\ServerChatlog; use Illuminate\Http\Request; use Illuminate\Support\Facades\Cache; -use Spirit55555\Minecraft\MinecraftColors; -class ApiServerChatlogController extends Controller +class ApiServerChatlogController extends ApiController { public function store(Request $request): \Illuminate\Http\JsonResponse { $request->validate([ - 'chat' => 'nullable', - 'causer_username' => 'sometimes|nullable|string', - 'causer_uuid' => 'sometimes|nullable|uuid', - 'server_id' => 'required|exists:servers,id', - 'channel' => 'sometimes|nullable|string', - 'type' => 'required|string|max:50', + 'data' => 'required|array', + 'data.chat' => 'nullable', + 'data.causer_username' => 'sometimes|nullable|string', + 'data.causer_uuid' => 'sometimes|nullable|uuid', + 'data.server_id' => 'required|exists:servers,id', + 'data.channel' => 'sometimes|nullable|string', + 'data.type' => 'required|string|max:50', ]); + $channel = $request->input('data.channel'); + $type = $request->input('data.type'); + $serverId = $request->input('data.server_id'); $log = ServerChatlog::create([ - 'server_id' => $request->server_id, - 'data' => $request->chat ?? null, - 'causer_username' => $request->causer_username, - 'causer_uuid' => $request->causer_uuid, - 'type' => $request->type, - 'channel' => $request->channel + 'server_id' => $request->input('data.server_id'), + 'data' => $request->input('data.chat') ?? null, + 'causer_username' => $request->input('data.causer_username') ?? null, + 'causer_uuid' => $request->input('data.causer_uuid') ?? null, + 'type' => $type, + 'channel' => $channel, ]); - if (!$request->channel && $request->chat) { + if (! $channel && $request->input('data.chat')) { broadcast(new ServerChatlogCreated($log)); } @@ -39,15 +41,12 @@ public function store(Request $request): \Illuminate\Http\JsonResponse * If type is of player-join or player-leave then clear the server player count related caches * This will ensure a fresh webquery in ServerController is done and player-list show latest data. */ - if ($request->type == 'player-leave' || $request->type == 'player-join') { - Cache::forget('server:webquery:'.$request->server_id); - Cache::forget('server:query:'.$request->server_id); - Cache::forget('server:ping:'.$request->server_id); + if ($type == 'player-leave' || $type == 'player-join') { + Cache::forget('server:webquery:'.$serverId); + Cache::forget('server:query:'.$serverId); + Cache::forget('server:ping:'.$serverId); } - return response()->json([ - 'status' => 'success', - 'message' => 'Ok' - ], 201); + return $this->success(null, 'Ok', 200); } } diff --git a/app/Http/Controllers/Api/ApiServerConsolelogController.php b/app/Http/Controllers/Api/ApiServerConsolelogController.php index dab26dd3b..172fcb19d 100644 --- a/app/Http/Controllers/Api/ApiServerConsolelogController.php +++ b/app/Http/Controllers/Api/ApiServerConsolelogController.php @@ -3,34 +3,30 @@ namespace App\Http\Controllers\Api; use App\Events\ServerConsolelogCreated; -use App\Http\Controllers\Controller; use App\Models\ServerConsolelog; use Illuminate\Http\Request; -class ApiServerConsolelogController extends Controller +class ApiServerConsolelogController extends ApiController { public function store(Request $request): \Illuminate\Http\JsonResponse { $request->validate([ - 'log' => 'required', - 'server_id' => 'required|exists:servers,id', + 'data.log' => 'required', + 'data.server_id' => 'required|exists:servers,id', ]); // Split each log into 50000 (<65535) bytes max (MySQL TEXT column limit) - $logs = str_split($request->log, 50000); + $logs = str_split($request->input('data.log'), 50000); foreach ($logs as $log) { $log = ServerConsolelog::create([ - 'server_id' => $request->server_id, + 'server_id' => $request->input('data.server_id'), 'data' => $log, ]); broadcast(new ServerConsolelogCreated($log)); } - return response()->json([ - 'status' => 'success', - 'message' => 'Ok', - ], 201); + return $this->success(null, 'Ok', 200); } } diff --git a/app/Http/Controllers/DownloadController.php b/app/Http/Controllers/DownloadController.php index 15dd4d557..1991a29ca 100644 --- a/app/Http/Controllers/DownloadController.php +++ b/app/Http/Controllers/DownloadController.php @@ -87,7 +87,7 @@ public function download(Download $download) if (! $isExternal) { $file = $download->file; - return response()->download($file->getPath(), $download->file_name); + return $file; } if ($isExternal && $isExternalUrlHidden) { diff --git a/app/Http/Controllers/HomeController.php b/app/Http/Controllers/HomeController.php index 69dfdf3bc..c7fabf2d4 100644 --- a/app/Http/Controllers/HomeController.php +++ b/app/Http/Controllers/HomeController.php @@ -11,6 +11,7 @@ use App\Models\User; use App\Settings\GeneralSettings; use App\Settings\ThemeSettings; +use App\Utils\Helpers\Helper; use Cache; use Http; use Illuminate\Http\Request; @@ -158,21 +159,25 @@ public function version() { $myVersion = config('app.version'); - $latestVersion = Http::withoutVerifying()->timeout(5)->get( - 'https://e74gvrc5hpiyr7wojet23ursau0ehgxd.lambda-url.eu-central-1.on.aws', - [ - 'version' => $myVersion, - 'from' => 'web', - 'appName' => config('app.name'), - 'appUrl' => config('app.url'), - ] - )->json(); + $latestVersion = Cache::remember('verion_check', 60, function () use ($myVersion) { + return Http::withoutVerifying()->timeout(5)->get( + 'https://e74gvrc5hpiyr7wojet23ursau0ehgxd.lambda-url.eu-central-1.on.aws', + [ + 'version' => $myVersion, + 'from' => 'web', + 'appName' => config('app.name'), + 'appUrl' => config('app.url'), + ] + )->json(); + }); + $latestVersion = $latestVersion['web']; + $isUpToDate = Helper::compareVersions($myVersion, $latestVersion); $response = [ 'my_version' => $myVersion, 'latest_version' => $latestVersion, - 'is_uptodate' => $myVersion == $latestVersion, + 'is_uptodate' => $isUpToDate >= 0, ]; return response()->json($response); diff --git a/app/Http/Controllers/PlayerController.php b/app/Http/Controllers/PlayerController.php index 9a56a7ab5..bd88661e7 100644 --- a/app/Http/Controllers/PlayerController.php +++ b/app/Http/Controllers/PlayerController.php @@ -49,15 +49,20 @@ public function show($player, Request $request) ->with(['rank:id,shortname,name', 'country:id,name,iso_code,flag'])->firstOrFail(); // next rank - $currentRank = $player->rank()->first(); - if ($currentRank) { - $player->next_rank = Rank::select(['id', 'shortname', 'name']) - ->where('weight', '>=', $currentRank->weight) - ->where('id', '!=', $currentRank->id) - ->orderBy('weight') - ->first()?->name; + $hideNextRank = config('minetrax.hide_player_next_rank'); + if ($hideNextRank) { + $player->next_rank = null; } else { - $player->next_rank = Rank::select(['id', 'shortname', 'name'])->orderBy('weight')->first()?->name; + $currentRank = $player->rank()->first(); + if ($currentRank) { + $player->next_rank = Rank::select(['id', 'shortname', 'name']) + ->where('weight', '>=', $currentRank->weight) + ->where('id', '!=', $currentRank->id) + ->orderBy('weight') + ->first()?->name; + } else { + $player->next_rank = Rank::select(['id', 'shortname', 'name'])->orderBy('weight')->first()?->name; + } } // Servers Count diff --git a/app/Http/Controllers/PlayerSkinController.php b/app/Http/Controllers/PlayerSkinController.php index cb6fa5b80..ce0803fef 100644 --- a/app/Http/Controllers/PlayerSkinController.php +++ b/app/Http/Controllers/PlayerSkinController.php @@ -2,7 +2,6 @@ namespace App\Http\Controllers; -use App\Enums\ServerType; use App\Jobs\ChangePlayerSkinJob; use App\Models\Player; use App\Models\Server; @@ -26,10 +25,9 @@ public function showChangeSkin(Request $request) $selectedPlayerUuid = $request->query('player_uuid'); // has servers which supports skin change feature. - $hasServersWithFeature = Server::where('type', '!=', ServerType::Bungee) - ->select('settings')->get()->some(function ($server) { - return $server->getSettingsKey('is_skin_change_via_web_allowed'); - }); + $hasServersWithFeature = Server::select('settings')->get()->some(function ($server) { + return $server->getSettingsKey('is_skin_change_via_web_allowed'); + }); // Cooldown Check. $isUserStaff = $request->user()->isStaffMember() || $request->user()->can('change any_player_skin'); @@ -84,7 +82,7 @@ public function postChangeSkin(Request $request) Cache::put('player_skin_changer_cooldown::user::'.$request->user()->id, now(), $cooldownInSeconds); // get servers which supports skin change feature. - $servers = Server::where('type', '!=', ServerType::Bungee)->get()->filter(function ($server) { + $servers = Server::get()->filter(function ($server) { return $server->getSettingsKey('is_skin_change_via_web_allowed'); }); @@ -92,10 +90,11 @@ public function postChangeSkin(Request $request) case 'upload': try { $response = MinecraftSkinUtils::uploadSkinToMineSkin($request->file, $request->skin_type); - $param['value'] = $response['data']['texture']['value']; - $param['signature'] = $response['data']['texture']['signature']; + $value = $response['data']['texture']['value']; + $signature = $response['data']['texture']['signature']; + $payload = $value.':::'.$signature; foreach ($servers as $server) { - ChangePlayerSkinJob::dispatch($server, $request->player_uuid, 'upload', $param); + ChangePlayerSkinJob::dispatch($server, $request->player_uuid, 'upload', $payload); } } catch (\Exception $e) { throw ValidationException::withMessages(['file' => $e->getMessage()]); @@ -112,7 +111,6 @@ public function postChangeSkin(Request $request) } break; case 'reset': - // queue for all servers foreach ($servers as $server) { ChangePlayerSkinJob::dispatch($server, $request->player_uuid, 'reset', null); } diff --git a/app/Http/Controllers/RecruitmentSubmissionController.php b/app/Http/Controllers/RecruitmentSubmissionController.php index c9b5af179..6f59c926e 100644 --- a/app/Http/Controllers/RecruitmentSubmissionController.php +++ b/app/Http/Controllers/RecruitmentSubmissionController.php @@ -113,7 +113,7 @@ public function withdraw(Request $request, Recruitment $recruitment, Recruitment RecruitmentSubmissionStatusChanged::dispatch($submission, $request->user(), $previousStatus); return redirect()->back() - ->with(['toast' => ['type' => 'success', 'title' => __('Withdraw Successful'), 'body' => __('Recruitment Submission withdrawn successfully')]]); + ->with(['toast' => ['type' => 'success', 'title' => __('Withdraw Successful'), 'body' => __('Application Request withdrawn successfully')]]); } public function indexMessages(Request $request, Recruitment $recruitment, RecruitmentSubmission $submission) @@ -146,7 +146,10 @@ public function postMessage(Request $request, Recruitment $recruitment, Recruitm ]); $comment = $submission->comment($request->message, CommentType::RECRUITMENT_APPLICANT_MESSAGE); - $submission->touch(); + $submission->update([ + 'last_comment_by' => $request->user()->id, + 'last_comment_at' => now(), + ]); // Fire event RecruitmentSubmissionCommentCreated::dispatch($comment, $submission, $request->user()); diff --git a/app/Http/Controllers/ServerController.php b/app/Http/Controllers/ServerController.php index 6bb6597e3..705c69dc2 100644 --- a/app/Http/Controllers/ServerController.php +++ b/app/Http/Controllers/ServerController.php @@ -92,10 +92,10 @@ public function queryServerWithWebQueryProtocol(Server $server, MinecraftServerQ $queryData = $queryService->getServerStatusWithPluginWebQueryProtocol($server->ip_address, $server->webquery_port); - $queryData = $queryData->map(function ($player) use ($geolocationService) { - $player->country = $geolocationService->getCountryFromIP($player->ip_address); - $player->is_in_db = Player::whereUuid($player->id)->exists(); - unset($player->ip_address); + $queryData['players'] = $queryData->get('players')->map(function ($player) use ($geolocationService) { + $player['country'] = $geolocationService->getCountryFromIP($player->get('ip_address')); + $player['is_in_db'] = Player::whereUuid($player->get('id'))->exists(); + unset($player['ip_address']); return $player; }); diff --git a/app/Http/Middleware/AuthenticateApiKey.php b/app/Http/Middleware/AuthenticateApiKey.php index c50c94b52..47e0cf7c1 100644 --- a/app/Http/Middleware/AuthenticateApiKey.php +++ b/app/Http/Middleware/AuthenticateApiKey.php @@ -3,39 +3,85 @@ namespace App\Http\Middleware; use App\Settings\PluginSettings; +use App\Utils\Helpers\CryptoUtils; use Closure; use Illuminate\Http\Request; +const REQUEST_MAX_AGE_THRESHOLD_SECONDS = 600; // servers can be out of sync against NTP servers by various minutes so give some buffer . +const VALIDATE_SIGNATURE = true; // For testing purposes, we can disable signature validation. + class AuthenticateApiKey { - - public function __construct(public PluginSettings $pluginSettings) {} + public function __construct(public PluginSettings $pluginSettings) + { + } /** * Handle an incoming request. * - * @param \Illuminate\Http\Request $request - * @param Closure $next * @return mixed */ public function handle(Request $request, Closure $next) { - if (!$this->pluginSettings->enable_api) { + if (! $this->pluginSettings->enable_api) { return response()->json([ - 'message' => 'API Access is Disabled' + 'status' => 'error', + 'type' => 'api_disabled', + 'message' => 'API Access is Disabled. Please enable it from Admin > Settings > Plugins.', ], 422); } // Get from either header X-API-KEY and X-API-SECRET or from body api_key and api_secret - $apiKey = $request->input('api_key') ?? $request->header('X-API-KEY'); - $apiSecret = $request->input('api_secret') ?? $request->header('X-API-SECRET'); + $apiKey = $request->header('X-API-KEY') ?? $request->input('x_api_key'); + $requestSignature = $request->header('X-SIGNATURE') ?? $request->input('x_signature'); + + // Validate API Key + if ($apiKey != $this->pluginSettings->plugin_api_key) { + return response()->json([ + 'status' => 'error', + 'type' => 'invalid_credentials', + 'message' => 'Please provide valid API credentials.', + ], 401); + } - if ($apiKey != $this->pluginSettings->plugin_api_key || $apiSecret != $this->pluginSettings->plugin_api_secret) { + if (! $requestSignature) { return response()->json([ - 'message' => 'Please provide valid API credentials' + 'status' => 'error', + 'type' => 'signature_missing', + 'message' => 'Request Signature is missing.', ], 401); } + // Validate Signature + if ($request->method() == 'GET') { + $signaturePayload = $request->getUri(); + } else { + $signaturePayload = $request->getContent(); + } + $signatureValid = CryptoUtils::validateHmacSignature($signaturePayload, $requestSignature, $this->pluginSettings->plugin_api_secret); + if (! $signatureValid && VALIDATE_SIGNATURE) { + return response()->json([ + 'status' => 'error', + 'type' => 'invalid_signature', + 'message' => 'Invalid Request Signature.', + ], 401); + } + + // Validate Request Age if provided + $timestampMs = $request->get('timestamp'); + if ($timestampMs && VALIDATE_SIGNATURE) { + $timestamp = $timestampMs / 1000; + $currentTimestamp = now()->timestamp; + $requestAge = abs($currentTimestamp - $timestamp); + if ($requestAge > REQUEST_MAX_AGE_THRESHOLD_SECONDS) { + return response()->json([ + 'status' => 'error', + 'type' => 'request_expired', + 'message' => 'Request is too old.', + ], 401); + } + } + return $next($request); } } diff --git a/app/Http/Middleware/HandleInertiaRequests.php b/app/Http/Middleware/HandleInertiaRequests.php index 12e7df795..d8a7cfa1b 100644 --- a/app/Http/Middleware/HandleInertiaRequests.php +++ b/app/Http/Middleware/HandleInertiaRequests.php @@ -3,7 +3,6 @@ namespace App\Http\Middleware; use App\Enums\ServerType; -use App\Models\CustomPage; use App\Models\Permission; use App\Models\Role; use App\Models\Server; @@ -11,7 +10,6 @@ use Illuminate\Http\Request; use Inertia\Middleware; use Route; -use Storage; class HandleInertiaRequests extends Middleware { @@ -19,6 +17,7 @@ class HandleInertiaRequests extends Middleware * The root template that's loaded on the first page visit. * * @see https://inertiajs.com/server-side-setup#root-template + * * @var string */ protected $rootView = 'app'; @@ -27,7 +26,7 @@ class HandleInertiaRequests extends Middleware * Determines the current asset version. * * @see https://inertiajs.com/asset-versioning - * @param \Illuminate\Http\Request $request + * * @return string|null */ public function version(Request $request) @@ -39,7 +38,7 @@ public function version(Request $request) * Defines the props that are shared by default. * * @see https://inertiajs.com/shared-data - * @param \Illuminate\Http\Request $request + * * @return array */ public function share(Request $request) @@ -52,20 +51,24 @@ public function share(Request $request) 'toast' => fn () => $request->session()->get('toast'), 'popstate' => \Str::uuid(), 'permissions' => function () use ($request) { - if (!$request->user()) return []; + if (! $request->user()) { + return []; + } if ($request->user()->hasRole(Role::SUPER_ADMIN_ROLE_NAME)) { return Permission::all()->pluck('name'); } + return $request->user()->getAllPermissions()->pluck('name'); }, 'defaultQueryServer' => function () { $shouldUseWebQuery = false; - $defaultQueryServer = Server::where('type', ServerType::Bungee)->select(['hostname', 'id'])->latest()->first(); - if (!$defaultQueryServer) { + $defaultQueryServer = Server::where('type', ServerType::Bungee)->select(['hostname', 'id', 'webquery_port'])->latest()->first(); + if (! $defaultQueryServer) { $defaultQueryServer = Server::select(['id', 'hostname', 'webquery_port'])->orderByDesc('order')->orderBy('id')->first(); - $shouldUseWebQuery = $defaultQueryServer?->webquery_port != null; } + $shouldUseWebQuery = $defaultQueryServer?->webquery_port != null; + return [ 'server' => $defaultQueryServer?->only(['id', 'hostname']), 'shouldUseWebQuery' => $shouldUseWebQuery, @@ -81,17 +84,18 @@ public function share(Request $request) $enabledSocialLogins['facebook'] = config('services.facebook.oauth_enabled'); $enabledSocialLogins['twitter'] = config('services.twitter-oauth-2.oauth_enabled'); $enabledSocialLogins['discord'] = config('services.discord.oauth_enabled'); + return $enabledSocialLogins; }, - "webVersion" => config("app.version"), - "hasRegistrationFeature" => Route::has("register"), - "showPoweredBy" => config("minetrax.show_powered_by"), - 'poweredByExtraName' => config("minetrax.powered_by_extra_name"), - 'poweredByExtraLink' => config("minetrax.powered_by_extra_link"), - "showHomeButton" => config("minetrax.show_home_button"), - "showCookieConsent" => config("minetrax.cookie_consent_enabled") && !$request->cookie("laravel_cookie_consent"), - "playerSkinChangerEnabled" => config("minetrax.player_skin_changer_enabled"), + 'webVersion' => config('app.version'), + 'hasRegistrationFeature' => Route::has('register'), + 'showPoweredBy' => config('minetrax.show_powered_by'), + 'poweredByExtraName' => config('minetrax.powered_by_extra_name'), + 'poweredByExtraLink' => config('minetrax.powered_by_extra_link'), + 'showHomeButton' => config('minetrax.show_home_button'), + 'showCookieConsent' => config('minetrax.cookie_consent_enabled') && ! $request->cookie('laravel_cookie_consent'), + 'playerSkinChangerEnabled' => config('minetrax.player_skin_changer_enabled'), 'localeSwitcherEnabled' => count(config('app.available_locales')) > 0, ]); } diff --git a/app/Http/Requests/CreateCommandQueueRequest.php b/app/Http/Requests/CreateCommandQueueRequest.php new file mode 100644 index 000000000..1bda9cba2 --- /dev/null +++ b/app/Http/Requests/CreateCommandQueueRequest.php @@ -0,0 +1,38 @@ +|string> + */ + public function rules(): array + { + return [ + 'scope' => 'required|string|in:global,player', + 'command' => 'required|string', + 'execute_at' => 'nullable|date|after:now', + 'servers' => 'nullable|array', + 'servers.*.id' => 'required|int|exists:servers,id', + 'players' => 'required_if:scope,player|array', + 'players.scope' => 'required_if:scope,player|in:all,linked,unlinked,custom', + 'players.is_player_online_required' => 'required_if:scope,player|boolean', + 'players.id' => 'required_if:players.scope,custom|array', + ]; + } +} diff --git a/app/Jobs/AccountLinkAfterSuccessCommandJob.php b/app/Jobs/AccountLinkAfterSuccessCommandJob.php index d45f2faba..f1d60ec54 100644 --- a/app/Jobs/AccountLinkAfterSuccessCommandJob.php +++ b/app/Jobs/AccountLinkAfterSuccessCommandJob.php @@ -2,9 +2,13 @@ namespace App\Jobs; +use App\Enums\CommandQueueStatus; +use App\Models\Command; +use App\Models\CommandQueue; use App\Models\Player; use App\Models\Server; use App\Settings\PluginSettings; +use App\Utils\Helpers\Helper; use App\Utils\MinecraftQuery\MinecraftWebQuery; use Illuminate\Bus\Queueable; use Illuminate\Contracts\Queue\ShouldQueue; @@ -32,37 +36,74 @@ public function __construct(private Player $player, private $userId, private Ser public function handle() { $pluginSettings = app(PluginSettings::class); - $webQuery = new MinecraftWebQuery($this->server->ip_address, $this->server->webquery_port); - // Notify server about account link success - try { - $webQuery->notifyAccountLinkSuccess($this->player->uuid, $this->userId); - } catch (\Exception $e) { - // If command fails then we need to notify user about it. - \Log::warning('AccountLinkAfterSuccessCommandJob:Notify: '.$e->getMessage()); - } + // Notify accountlink webquery + $this->notifyAccountLinkSuccess(); - // Send Broadcast - if ($pluginSettings->account_link_after_success_broadcast_message) { - $rewardMessageString = \Str::replace('{PLAYER}', $this->player->username, $pluginSettings->account_link_after_success_broadcast_message); - $webQuery->sendBroadcast($rewardMessageString); + $commandIds = $pluginSettings->account_link_after_success_commands; + if (! $commandIds) { + return; } - // If there is no command to send then return - if (! $pluginSettings->account_link_after_success_command) { - return; + $commands = Command::with('servers')->enabled()->whereIn('id', $commandIds)->get(); + // for each commands. + foreach ($commands as $command) { + // If command is only for first link and player has already run this command then skip. + $isRunOnlyFirstLink = $command->config['is_run_only_first_link']; + if ($isRunOnlyFirstLink && $this->player->account_link_after_success_command_run_count > 0) { + continue; + } + + if ($command->is_run_on_all_servers) { + $servers = Server::whereNotNull('webquery_port')->get(); + } else { + $servers = $command->servers; + } + + foreach ($servers as $server) { + // create & run command on server. + $this->createAndDispatchJob($command, $server); + } } - // Only give this once per user else they can abuse it by removing and adding player everytime. - if ($this->player->account_link_after_success_command_run_count > 0) { + $this->player->account_link_after_success_command_run_count += 1; + $this->player->save(); + } + + private function notifyAccountLinkSuccess() + { + if (! $this->server->webquery_port) { return; } - $rewardCommandString = $pluginSettings->account_link_after_success_command; - $rewardCommandString = \Str::replace('{PLAYER}', $this->player->username, $rewardCommandString); - $webQuery->sendQuery('command', $rewardCommandString); + try { + $webQuery = new MinecraftWebQuery($this->server->ip_address, $this->server->webquery_port); + $webQuery->notifyAccountLinkSuccess($this->player->uuid, $this->userId); + } catch (\Exception $e) { + \Log::warning('AccountLinkAfterSuccessCommandJob:Notify failed: '.$e->getMessage().' Server: '.$this->server->id.' Player: '.$this->player->uuid); + } + } - $this->player->account_link_after_success_command_run_count += 1; - $this->player->save(); + private function createAndDispatchJob(Command $command, Server $server) + { + $params = [ + 'player_uuid' => $this->player->uuid, + 'player_username' => $this->player->username, + ]; + $parsedCommandString = Helper::replacePlaceholders($command->command, $params); + $commandQueue = CommandQueue::create([ + 'server_id' => $server->id, + 'command_id' => $command->id, + 'parsed_command' => $parsedCommandString, + 'config' => $command->config, + 'params' => $params, + 'status' => CommandQueueStatus::PENDING, + 'max_attempts' => $command->max_attempts, + 'player_uuid' => $this->player->uuid, + 'user_id' => $this->userId, + 'player_id' => $this->player->id, + 'tag' => $command->tag, + ]); + RunCommandQueueJob::dispatch($commandQueue); } } diff --git a/app/Jobs/AccountUnlinkAfterSuccessCommandJob.php b/app/Jobs/AccountUnlinkAfterSuccessCommandJob.php new file mode 100644 index 000000000..8b2fe6414 --- /dev/null +++ b/app/Jobs/AccountUnlinkAfterSuccessCommandJob.php @@ -0,0 +1,82 @@ +account_unlink_after_success_commands; + if (! $commandIds) { + return; + } + + $commands = Command::with('servers')->enabled()->whereIn('id', $commandIds)->get(); + // for each commands. + foreach ($commands as $command) { + // If command is only for first link and player has already run this command then skip. + $isRunOnlyFirstUnlink = $command->config['is_run_only_first_unlink']; + if ($isRunOnlyFirstUnlink && $this->player->account_link_after_success_command_run_count > 1) { + continue; + } + + if ($command->is_run_on_all_servers) { + $servers = Server::whereNotNull('webquery_port')->get(); + } else { + $servers = $command->servers; + } + + foreach ($servers as $server) { + // create & run command on server. + $this->createAndDispatchJob($command, $server); + } + } + } + + private function createAndDispatchJob(Command $command, Server $server) + { + $params = [ + 'player_uuid' => $this->player->uuid, + 'player_username' => $this->player->username, + ]; + $parsedCommandString = Helper::replacePlaceholders($command->command, $params); + $commandQueue = CommandQueue::create([ + 'server_id' => $server->id, + 'command_id' => $command->id, + 'parsed_command' => $parsedCommandString, + 'config' => $command->config, + 'params' => $params, + 'status' => CommandQueueStatus::PENDING, + 'max_attempts' => $command->max_attempts, + 'player_uuid' => $this->player->uuid, + 'user_id' => $this->userId, + 'player_id' => $this->player->id, + 'tag' => $command->tag, + ]); + RunCommandQueueJob::dispatch($commandQueue); + } +} diff --git a/app/Jobs/RunAwaitingCommandQueuesJob.php b/app/Jobs/RunAwaitingCommandQueuesJob.php new file mode 100644 index 000000000..8ec3dae67 --- /dev/null +++ b/app/Jobs/RunAwaitingCommandQueuesJob.php @@ -0,0 +1,59 @@ +whereNotNull('max_attempts') + ->whereColumn('attempts', '<', 'max_attempts') + ->where(function ($q) { + $q->whereNull('execute_at') + ->orWhere('execute_at', '<=', now()); + }) + ->limit(50) + ->get(); + + Log::info('[RunAwaitingCommandQueuesJob] Running Failed commands: '.$failedCommands->count()); + foreach ($failedCommands as $command) { + RunCommandQueueJob::dispatch($command); + } + + // DELAYED + $awaitingCommands = CommandQueue::where('status', CommandQueueStatus::PENDING) + ->whereNotNull('execute_at') + ->where('execute_at', '<=', now()) + ->limit(50) + ->get(); + + Log::info('[RunAwaitingCommandQueuesJob] Running Delayed commands: '.$awaitingCommands->count()); + foreach ($awaitingCommands as $command) { + RunCommandQueueJob::dispatch($command); + } + } +} diff --git a/app/Jobs/RunCommandQueueJob.php b/app/Jobs/RunCommandQueueJob.php new file mode 100644 index 000000000..90aa31b8d --- /dev/null +++ b/app/Jobs/RunCommandQueueJob.php @@ -0,0 +1,99 @@ +commandQueue->status->value, [ + CommandQueueStatus::PENDING, + CommandQueueStatus::FAILED, + CommandQueueStatus::DEFERRED, + ])) { + Log::info('SKIPPED! CommandQueue '.$this->commandQueue->id.' is not in pending, failed or deferred status'); + + return; + } + + // change status to running so that it won't be picked up by another worker. + $this->commandQueue->update([ + 'status' => CommandQueueStatus::RUNNING, + ]); + + // load missing relations + $this->commandQueue->loadMissing([ + 'server', + 'command', + ]); + $isPlayerOnlineRequired = $this->commandQueue->config ? $this->commandQueue->config['is_player_online_required'] : false; + $server = $this->commandQueue->server; + if (! $server->webquery_port) { + $this->commandQueue->update([ + 'status' => CommandQueueStatus::CANCELLED, + 'output' => 'Server does not have webquery port', + ]); + // Log::info('CANCELLED! CommandQueue '.$this->commandQueue->id.' is cancelled because server does not have webquery port'); + + return; + } + + try { + $webQuery = new MinecraftWebQuery($server->ip_address, $server->webquery_port); + if ($isPlayerOnlineRequired) { + $playerUuid = $this->commandQueue->player_uuid; + $isOnline = $webQuery->checkPlayerOnline($playerUuid); + + if (! $isOnline) { + $this->commandQueue->update([ + 'status' => CommandQueueStatus::DEFERRED, + 'output' => 'Player not online', + ]); + // Log::info('DEFERRED! CommandQueue '.$this->commandQueue->id.' is deferred because player is not online'); + + return; + } + } + + $status = $webQuery->runCommand($this->commandQueue->parsed_command); + $this->commandQueue->update([ + 'status' => CommandQueueStatus::COMPLETED, + 'output' => $status, + 'last_attempt_at' => now(), + 'attempts' => $this->commandQueue->attempts + 1, + ]); + // Log::info('COMPLETED! CommandQueue '.$this->commandQueue->id.' is completed'); + } catch (\Exception $e) { + $this->commandQueue->update([ + 'status' => CommandQueueStatus::FAILED, + 'output' => $e->getMessage(), + 'last_attempt_at' => now(), + 'attempts' => $this->commandQueue->attempts + 1, + ]); + // Log::error('OOPS! CommandQueue '.$this->commandQueue->id.' failed: '.$e->getMessage()); + } + } +} diff --git a/app/Jobs/RunCommandQueuesFromRequestJob.php b/app/Jobs/RunCommandQueuesFromRequestJob.php new file mode 100644 index 000000000..26f171cd0 --- /dev/null +++ b/app/Jobs/RunCommandQueuesFromRequestJob.php @@ -0,0 +1,121 @@ +onQueue('longtask'); + } + + /** + * Execute the job. + */ + public function handle(): void + { + $servers = []; + if (empty($this->request->get('servers'))) { + $servers = Server::select(['id', 'name', 'hostname'])->whereNotNull('webquery_port')->get(); + } else { + $serverIds = collect($this->request->get('servers'))->pluck('id'); + $servers = Server::select(['id', 'name', 'hostname']) + ->whereIn('id', $serverIds) + ->whereNotNull('webquery_port') + ->get(); + } + + $totalCounter = 0; + $executeAt = $this->request->get('execute_at') ?? null; + if ($this->request->get('scope') == 'global') { + foreach ($servers as $server) { + $totalCounter++; + $created = $this->createCommandQueue($this->request->get('command'), $executeAt, null, null, $server->id, $this->userId); + if ($executeAt == null) { + RunCommandQueueJob::dispatch($created); + } + } + } else { + $playerScope = $this->request->get('players')['scope']; + + switch ($playerScope) { + case 'all': + $players = Player::select(['id', 'uuid', 'username'])->lazy(); + break; + case 'linked': + $players = Player::whereHas('users')->select(['id', 'uuid', 'username'])->lazy(); + break; + case 'unlinked': + $players = Player::whereDoesntHave('users')->select(['id', 'uuid', 'username'])->lazy(); + break; + case 'custom': + $playerIds = collect($this->request->get('players')['id'])->pluck('id'); + $players = Player::select(['id', 'uuid', 'username'])->whereIn('id', $playerIds)->lazy(); + break; + } + // Create command for each player. + + $commandString = $this->request->get('command'); + foreach ($players as $player) { + foreach ($servers as $server) { + $totalCounter++; + $config = [ + 'is_player_online_required' => $this->request->get('players')['is_player_online_required'], + ]; + // Dispatch jobs. + $created = $this->createCommandQueue($commandString, $executeAt, $config, $player, $server->id, $this->userId); + if ($executeAt == null) { + RunCommandQueueJob::dispatch($created); + } + } + } + } + Log::info('[RunCommandQueuesFromRequestJob] Created '.$totalCounter.' command queues.'); + } + + private function createCommandQueue($rawCommand, $executeAt, $config, $player, $serverId, $userId) + { + $params = []; + if ($player) { + $params = [ + 'player_uuid' => $player->uuid, + 'player_username' => $player->username, + ]; + } + $parsedCommandString = Helper::replacePlaceholders($rawCommand, $params); + $commandQueue = CommandQueue::create([ + 'server_id' => $serverId, + 'command_id' => null, + 'parsed_command' => $parsedCommandString, + 'config' => $config, + 'params' => $params, + 'status' => CommandQueueStatus::PENDING, + 'max_attempts' => 1, + 'player_uuid' => $player ? $player->uuid : null, + 'user_id' => $userId, + 'player_id' => $player ? $player->id : null, + 'execute_at' => $executeAt, + 'tag' => 'run_command', + ]); + + return $commandQueue; + } +} diff --git a/app/Jobs/RunDeferredPlayerCommandQueuesJob.php b/app/Jobs/RunDeferredPlayerCommandQueuesJob.php new file mode 100644 index 000000000..c2aebd710 --- /dev/null +++ b/app/Jobs/RunDeferredPlayerCommandQueuesJob.php @@ -0,0 +1,39 @@ +where('status', CommandQueueStatus::DEFERRED) + ->where('player_uuid', $this->playerUuid) + ->get(); + + foreach ($deferredJobs as $deferredJob) { + RunCommandQueueJob::dispatch($deferredJob); + } + } +} diff --git a/app/Models/Command.php b/app/Models/Command.php new file mode 100644 index 000000000..8af79ad4b --- /dev/null +++ b/app/Models/Command.php @@ -0,0 +1,27 @@ + 'boolean', + 'is_run_on_all_servers' => 'boolean', + 'is_scheduled' => 'boolean', + 'config' => 'array', + ]; + + public function servers() + { + return $this->belongsToMany(Server::class); + } + + public function scopeEnabled() + { + return $this->where('is_enabled', true); + } +} diff --git a/app/Models/CommandQueue.php b/app/Models/CommandQueue.php new file mode 100644 index 000000000..2cf068d5d --- /dev/null +++ b/app/Models/CommandQueue.php @@ -0,0 +1,39 @@ + 'datetime', + 'last_attempt_at' => 'datetime', + 'params' => 'array', + 'config' => 'array', + 'status' => CommandQueueStatus::class, + ]; + + public function command() + { + return $this->belongsTo(Command::class); + } + + public function server() + { + return $this->belongsTo(Server::class); + } + + public function user() + { + return $this->belongsTo(User::class); + } + + public function player() + { + return $this->belongsTo(Player::class); + } +} diff --git a/app/Models/FailedJob.php b/app/Models/FailedJob.php new file mode 100644 index 000000000..126aecbe5 --- /dev/null +++ b/app/Models/FailedJob.php @@ -0,0 +1,11 @@ + 'array', + 'failed_at' => 'datetime', + ]; +} diff --git a/app/Models/MinecraftServerLiveInfo.php b/app/Models/MinecraftServerLiveInfo.php index f2a79883c..c0b10b14b 100644 --- a/app/Models/MinecraftServerLiveInfo.php +++ b/app/Models/MinecraftServerLiveInfo.php @@ -9,14 +9,17 @@ class MinecraftServerLiveInfo extends BaseModel { use HasFactory; - public static function getOnlinePlayersCount($serverIds, $endDate) + public static function getOnlinePlayersCount($serverIds, $greaterDate, $lesserDate = null) { $subquery = DB::table('minecraft_server_live_infos') ->selectRaw('ROUND(UNIX_TIMESTAMP(CONCAT(DATE_FORMAT(created_at, "%Y-%m-%d %H:"),LPAD((MINUTE(created_at) DIV 5) * 5, 2, "0"),":00")) * 1000) AS created_at_5min') ->selectRaw('MAX(online_players) AS max_online_players') ->selectRaw('server_id') - ->when($endDate, function ($query, $endDate) { - return $query->where('created_at', '>=', $endDate); + ->when($greaterDate, function ($query, $greaterDate) { + return $query->where('created_at', '>=', $greaterDate); + }) + ->when($lesserDate, function ($query, $lesserDate) { + return $query->where('created_at', '<', $lesserDate); }) ->when($serverIds, function ($query, $serverIds) { return $query->whereIn('server_id', $serverIds); diff --git a/app/Models/RecruitmentSubmission.php b/app/Models/RecruitmentSubmission.php index c50ee8724..f271957bb 100644 --- a/app/Models/RecruitmentSubmission.php +++ b/app/Models/RecruitmentSubmission.php @@ -14,6 +14,7 @@ class RecruitmentSubmission extends BaseModel 'data' => 'array', 'status' => RecruitmentSubmissionStatus::class, 'last_act_at' => 'datetime', + 'last_comment_at' => 'datetime', ]; public function recruitment() @@ -30,4 +31,9 @@ public function lastActor() { return $this->belongsTo(User::class, 'last_act_by'); } + + public function lastCommentor() + { + return $this->belongsTo(User::class, 'last_comment_by'); + } } diff --git a/app/Models/Server.php b/app/Models/Server.php index 5ab2e80a4..418e741fc 100644 --- a/app/Models/Server.php +++ b/app/Models/Server.php @@ -21,6 +21,10 @@ class Server extends BaseModel 'last_scanned_at' => 'datetime', ]; + protected $hidden = [ + 'pivot', + ]; + public function minecraftPlayers(): \Illuminate\Database\Eloquent\Relations\HasMany { return $this->hasMany(MinecraftPlayer::class); @@ -41,6 +45,11 @@ public function serverConsolelog(): \Illuminate\Database\Eloquent\Relations\HasM return $this->hasMany(ServerConsolelog::class); } + public function commands(): \Illuminate\Database\Eloquent\Relations\BelongsToMany + { + return $this->belongsToMany(Command::class); + } + public function getAggregatedTotalJsonStats() { return $this->minecraftPlayers() diff --git a/app/Notifications/RecruitmentSubmissionCommentCreatedNotification.php b/app/Notifications/RecruitmentSubmissionCommentCreatedNotification.php index 67538a8d1..ad745083f 100644 --- a/app/Notifications/RecruitmentSubmissionCommentCreatedNotification.php +++ b/app/Notifications/RecruitmentSubmissionCommentCreatedNotification.php @@ -46,10 +46,10 @@ public function toMail(object $notifiable): MailMessage ->subject($title) ->line($body) ->line('"'.$this->comment->comment.'"') - ->action('View Application', $route) + ->action('View Request', $route) ->line('Applicant: '.$applicant) ->line('Status: '.ucfirst($this->submission->status->value)) - ->line('Recruitment: '.$this->submission->recruitment->title); + ->line('Application: '.$this->submission->recruitment->title); } /** @@ -102,7 +102,7 @@ public function toDiscord($notifiable) 'inline' => true, ], [ - 'name' => 'Recruitment', + 'name' => 'Application', 'value' => $this->submission->recruitment->title, 'inline' => false, ], @@ -120,16 +120,16 @@ private function generateTitleBodyRoute(): array $causer = $this->causer->name.' (@'.$this->causer->username.')'; if ($this->comment->type == CommentType::RECRUITMENT_APPLICANT_MESSAGE) { // Sent to staffs - $title = __('[Notification] New message received on a recruitment application.'); - $body = __(':causer sent new message on his application for :recruitment:', [ + $title = __('[Notification] New message received on a application request.'); + $body = __(':causer sent new message on his application request for :recruitment:', [ 'causer' => $causer, 'recruitment' => $this->submission->recruitment->title, ]); $route = route('admin.recruitment-submission.show', [$this->submission->id]); } elseif ($this->comment->type == CommentType::RECRUITMENT_STAFF_MESSAGE) { // Sent to applicant - $title = __('[Notification] Your application has a new message.'); - $body = __(':causer sent you a message on your application for :recruitment:', [ + $title = __('[Notification] Your application request has a new message.'); + $body = __(':causer sent you a message on your application request for :recruitment:', [ 'causer' => $causer, 'recruitment' => $this->submission->recruitment->title, ]); diff --git a/app/Notifications/RecruitmentSubmissionCreatedNotification.php b/app/Notifications/RecruitmentSubmissionCreatedNotification.php index 242f84ff8..9621d3b6d 100644 --- a/app/Notifications/RecruitmentSubmissionCreatedNotification.php +++ b/app/Notifications/RecruitmentSubmissionCreatedNotification.php @@ -39,11 +39,11 @@ public function toMail(object $notifiable): MailMessage $applicant = $this->submission->user->name.' (@'.$this->submission->user->username.')'; return (new MailMessage) - ->subject(__('[Notification] New recruitment application received.')) - ->line('A new application has been received for recruitment - '.$this->submission->recruitment->title) - ->action('View Application', route('admin.recruitment-submission.show', [$this->submission->id])) + ->subject(__('[Notification] New application request received.')) + ->line('A new request has been received for application - '.$this->submission->recruitment->title) + ->action('View Request', route('admin.recruitment-submission.show', [$this->submission->id])) ->line('Applicant: '.$applicant) - ->line('Recruitment: '.$this->submission->recruitment->title); + ->line('Application: '.$this->submission->recruitment->title); } /** @@ -66,8 +66,8 @@ public function toDiscord($notifiable) $applicant = $this->submission->user->name.' (@'.$this->submission->user->username.')'; return DiscordMessage::create()->embed([ - 'title' => __('[Notification] New recruitment application received.'), - 'description' => 'A new application has been received for recruitment - '.$this->submission->recruitment->title, + 'title' => __('[Notification] New application request received.'), + 'description' => 'A new request has been received for application - '.$this->submission->recruitment->title, 'type' => 'rich', 'url' => route('admin.recruitment-submission.show', [$this->submission->id]), 'fields' => [ @@ -77,7 +77,7 @@ public function toDiscord($notifiable) 'inline' => true, ], [ - 'name' => 'Recruitment', + 'name' => 'Application', 'value' => $this->submission->recruitment->title, 'inline' => false, ], diff --git a/app/Notifications/RecruitmentSubmissionStatusChangedNotification.php b/app/Notifications/RecruitmentSubmissionStatusChangedNotification.php index 8b7cfa141..5dc31edcf 100644 --- a/app/Notifications/RecruitmentSubmissionStatusChangedNotification.php +++ b/app/Notifications/RecruitmentSubmissionStatusChangedNotification.php @@ -47,11 +47,11 @@ public function toMail(object $notifiable): MailMessage return (new MailMessage) ->subject($title) ->line($body) - ->action('View Application', $route) + ->action('View Request', $route) ->line('Applicant: '.$applicant) ->line('Status: '.ucfirst($this->submission->status->value)) ->lineIf($this->submission->last_act_reason, 'Reason: '.$this->submission->last_act_reason) - ->line('Recruitment: '.$this->submission->recruitment->title); + ->line('Application: '.$this->submission->recruitment->title); } /** @@ -97,7 +97,7 @@ public function toDiscord($notifiable) 'inline' => true, ], [ - 'name' => 'Recruitment', + 'name' => 'Application', 'value' => $this->submission->recruitment->title, 'inline' => false, ], @@ -113,8 +113,8 @@ private function generateTitleBodyRoute($applicant): array { $title = $body = $route = $causer = ''; if ($this->submission->status == RecruitmentSubmissionStatus::WITHDRAWN) { - $title = __('[Notification] An application withdrawn by user.'); - $body = __(':applicant has withdrawn his application for :recruitment.', [ + $title = __('[Notification] An application request withdrawn by user.'); + $body = __(':applicant has withdrawn his application request for :recruitment.', [ 'applicant' => $applicant, 'recruitment' => $this->submission->recruitment->title, ]); @@ -128,29 +128,29 @@ private function generateTitleBodyRoute($applicant): array $causer = $this->causer->name.' (@'.$this->causer->username.')'; switch ($this->submission->status) { case RecruitmentSubmissionStatus::INPROGRESS: - $title = __('[Notification] Your Application status has changed.'); - $body = __(':causer has started processing your application for :recruitment.', [ + $title = __('[Notification] Your Application request status has changed.'); + $body = __(':causer has started processing your application request for :recruitment.', [ 'causer' => $causer, 'recruitment' => $this->submission->recruitment->title, ]); break; case RecruitmentSubmissionStatus::ONHOLD: - $title = __('[Notification] Your Application status has changed.'); - $body = __(':causer has put on-hold your application for :recruitment.', [ + $title = __('[Notification] Your Application request status has changed.'); + $body = __(':causer has put on-hold your application request for :recruitment.', [ 'causer' => $causer, 'recruitment' => $this->submission->recruitment->title, ]); break; case RecruitmentSubmissionStatus::APPROVED: - $title = __('[Notification] Congratulations! Your Application has been Approved.'); - $body = __(':causer has approved your application for :recruitment.', [ + $title = __('[Notification] Congratulations! Your Application request has been Approved.'); + $body = __(':causer has approved your application request for :recruitment.', [ 'causer' => $causer, 'recruitment' => $this->submission->recruitment->title, ]); break; case RecruitmentSubmissionStatus::REJECTED: - $title = __('[Notification] Sorry! Your Application has been Rejected.'); - $body = __(':causer has rejected your application for :recruitment.', [ + $title = __('[Notification] Sorry! Your Application request has been Rejected.'); + $body = __(':causer has rejected your application request for :recruitment.', [ 'causer' => $causer, 'recruitment' => $this->submission->recruitment->title, ]); diff --git a/app/Policies/CommandQueuePolicy.php b/app/Policies/CommandQueuePolicy.php new file mode 100644 index 000000000..99cf9e942 --- /dev/null +++ b/app/Policies/CommandQueuePolicy.php @@ -0,0 +1,62 @@ +can('read command_queues')) { + return true; + } + + return false; + } + + public function view(User $user, CommandQueue $commandQueue): bool + { + if ($user->can('read command_queues')) { + return true; + } + + return false; + } + + public function create(User $user): bool + { + if ($user->can('create command_queues')) { + return true; + } + + return false; + } + + public function delete(User $user, CommandQueue $commandQueue): bool + { + if ($commandQueue->status->value === CommandQueueStatus::RUNNING) { + return false; + } + + if ($user->can('delete command_queues')) { + return true; + } + + return false; + } + + public function retry(User $user, CommandQueue $commandQueue): bool + { + if ( + $user->can('create command_queues') && + in_array($commandQueue->status->value, [CommandQueueStatus::FAILED, CommandQueueStatus::CANCELLED]) + ) { + return true; + } + + return false; + } +} diff --git a/app/Policies/FailedJobPolicy.php b/app/Policies/FailedJobPolicy.php new file mode 100644 index 000000000..2a333b974 --- /dev/null +++ b/app/Policies/FailedJobPolicy.php @@ -0,0 +1,30 @@ +can('read failed_jobs')) { + return true; + } + } + + public function delete(User $user, FailedJob $job) + { + if ($user->can('delete failed_jobs')) { + return true; + } + } + + public function retry(User $user, FailedJob $job) + { + if ($user->can('retry failed_jobs')) { + return true; + } + } +} diff --git a/app/Policies/PlayerPolicy.php b/app/Policies/PlayerPolicy.php index 51fd2a50d..98f326a50 100644 --- a/app/Policies/PlayerPolicy.php +++ b/app/Policies/PlayerPolicy.php @@ -62,4 +62,9 @@ public function destroy(User $user, Player $player) { return $user->can('delete players'); } + + public function unlink(User $user, Player $player) + { + return $user->can('unlink any_players'); + } } diff --git a/app/Providers/AppServiceProvider.php b/app/Providers/AppServiceProvider.php index 582227b94..3a6fed5b4 100644 --- a/app/Providers/AppServiceProvider.php +++ b/app/Providers/AppServiceProvider.php @@ -3,6 +3,7 @@ namespace App\Providers; use App\Models\User; +use Illuminate\Support\Collection; use Illuminate\Support\ServiceProvider; use Laravel\Pulse\Facades\Pulse; @@ -34,5 +35,16 @@ public function boot() 'avatar' => $user->profile_photo_url, ]); }); + + // Add ->recursive() method to Collection. Eg: collect([something])->recursive() + Collection::macro('recursive', function () { + return $this->map(function ($value) { + if (is_array($value) || is_object($value)) { + return collect($value)->recursive(); + } + + return $value; + }); + }); } } diff --git a/app/Providers/AuthServiceProvider.php b/app/Providers/AuthServiceProvider.php index 0deded9fc..6a30d463d 100644 --- a/app/Providers/AuthServiceProvider.php +++ b/app/Providers/AuthServiceProvider.php @@ -3,22 +3,24 @@ namespace App\Providers; use App\Models\Badge; +use App\Models\CommandQueue; use App\Models\Comment; use App\Models\CustomForm; use App\Models\CustomFormSubmission; use App\Models\CustomPage; use App\Models\Download; +use App\Models\FailedJob; use App\Models\News; use App\Models\Poll; use App\Models\Post; use App\Models\Rank; +use App\Models\Recruitment; +use App\Models\RecruitmentSubmission; use App\Models\Role; use App\Models\Server; use App\Models\Session; use App\Models\Shout; use App\Models\User; -use App\Policies\RecruitmentPolicy; -use App\Policies\RecruitmentSubmissionPolicy; use Illuminate\Foundation\Support\Providers\AuthServiceProvider as ServiceProvider; use Illuminate\Support\Facades\Gate; @@ -45,8 +47,10 @@ class AuthServiceProvider extends ServiceProvider Download::class => \App\Policies\DownloadPolicy::class, CustomForm::class => \App\Policies\CustomFormPolicy::class, CustomFormSubmission::class => \App\Policies\CustomFormSubmissionPolicy::class, - RecruitmentPolicy::class => \App\Policies\RecruitmentPolicy::class, - RecruitmentSubmissionPolicy::class => \App\Policies\RecruitmentSubmissionPolicy::class, + Recruitment::class => \App\Policies\RecruitmentPolicy::class, + RecruitmentSubmission::class => \App\Policies\RecruitmentSubmissionPolicy::class, + FailedJob::class => \App\Policies\FailedJobPolicy::class, + CommandQueue::class => \App\Policies\CommandQueuePolicy::class, ]; /** diff --git a/app/Services/MinecraftServerQueryService.php b/app/Services/MinecraftServerQueryService.php index dae3ab13d..923bbf4b7 100644 --- a/app/Services/MinecraftServerQueryService.php +++ b/app/Services/MinecraftServerQueryService.php @@ -1,15 +1,11 @@ Connect( $serverHost, $serverPort ); + $Query = new MinecraftQuery(); + try { + $Query->Connect($serverHost, $serverPort); $serverInfo = $Query->GetInfo(); // Get list of players $playerList = $Query->GetPlayers(); - } - catch (MinecraftQueryException $e) - { + } catch (MinecraftQueryException $e) { \Log::error($e->getMessage()); + // Return if offline return false; } @@ -53,21 +47,20 @@ public function getServerStatusWithPlayerUuid($serverHost, $serverPort = 25565) // Format the data and return return [ 'server_info' => $serverInfo, - 'players_list' => $playerList + 'players_list' => $playerList, ]; } private function getPlayersUuidFromDatabase($playerList): array { - if (!$playerList) { + if (! $playerList) { return []; } $playerListModified = []; $playersFromDatabase = Player::whereIn('username', $playerList)->get(); - foreach ($playerList as $player) - { + foreach ($playerList as $player) { $playerUuid = $playersFromDatabase->firstWhere('username', $player); $playerUuid = $playerUuid ? $playerUuid->uuid : null; $playerListModified[$player] = $playerUuid; @@ -87,26 +80,24 @@ private function getPlayerUuidFromThirdPartyAPI($username) // https://api.minetools.eu $response = Http::get('https://api.minetools.eu/uuid/'.$username); - if ($response->successful()) - { + if ($response->successful()) { $response = $response->json(); - if ($response && $response['status'] == 'OK') - { + if ($response && $response['status'] == 'OK') { $uuid = $response['id']; Redis::set('player:uuid:'.$username, $uuid, 'EX', 86400); // 1 Day Expire + return $uuid; } } // https://playerdb.co/ $response = Http::get('https://playerdb.co/api/player/minecraft/'.$username); - if ($response->successful()) - { + if ($response->successful()) { $response = $response->json(); - if ($response && $response['code'] == 'player.found') - { + if ($response && $response['code'] == 'player.found') { $uuid = $response['data']['player']['id']; Redis::set('player:uuid:'.$username, $uuid, 'EX', 86400); // 1 Day Expire + return $uuid; } } @@ -116,27 +107,10 @@ private function getPlayerUuidFromThirdPartyAPI($username) public function getServerStatusWithPluginWebQueryProtocol($serverHost, $serverPort) { - $pluginSettings = app(PluginSettings::class); - $webQuery = new MinecraftWebQuery($serverHost, $serverPort); $data = $webQuery->getStatusQuery(); + $data = collect($data['data'])->recursive(); - $apiKey = $pluginSettings->plugin_api_key; - $newEncrypter = new Encrypter( ($apiKey), "AES-256-CBC" ); - $data = $newEncrypter->decryptString($data['status']); - return collect(json_decode($data)); - } - - public function getPlayerGroupWithPluginWebQueryProtocol($serverHost, $serverPort, $playerUuid) - { - $pluginSettings = app(PluginSettings::class); - - $webQuery = new MinecraftWebQuery($serverHost, $serverPort); - $data = $webQuery->getPlayerGroups($playerUuid); - - $apiKey = $pluginSettings->plugin_api_key; - $newEncrypter = new Encrypter( ($apiKey), "AES-256-CBC" ); - $data = $newEncrypter->decryptString($data['status']); - return json_decode($data, true); + return $data; } } diff --git a/app/Settings/PluginSettings.php b/app/Settings/PluginSettings.php index 0b35fb734..e34a3b2d0 100644 --- a/app/Settings/PluginSettings.php +++ b/app/Settings/PluginSettings.php @@ -7,15 +7,21 @@ class PluginSettings extends Settings { public bool $enable_api; + public string $plugin_api_key; + public string $plugin_api_secret; public bool $enable_account_link; + public int $max_players_link_per_account; - public ?string $account_link_after_success_command; - public ?string $account_link_after_success_broadcast_message; + + public array $account_link_after_success_commands; + + public array $account_unlink_after_success_commands; public bool $enable_sync_player_ranks_from_server; + public ?int $sync_player_ranks_from_server_id; public static function group(): string @@ -27,7 +33,7 @@ public static function encrypted(): array { return [ 'plugin_api_key', - 'plugin_api_secret' + 'plugin_api_secret', ]; } } diff --git a/app/Traits/ApiResponseTrait.php b/app/Traits/ApiResponseTrait.php new file mode 100644 index 000000000..e9b802e81 --- /dev/null +++ b/app/Traits/ApiResponseTrait.php @@ -0,0 +1,29 @@ +json([ + 'status' => 'success', + 'message' => $message, + 'data' => $data, + ], $status); + } + + public function error($message, $type, int $status = 400) + { + return response()->json([ + 'status' => 'error', + 'type' => $type, + 'message' => $message, + ], $status); + } + + public function noContent() + { + return response()->noContent(); + } +} diff --git a/app/Traits/HasCommandsTrait.php b/app/Traits/HasCommandsTrait.php new file mode 100644 index 000000000..c43b27d13 --- /dev/null +++ b/app/Traits/HasCommandsTrait.php @@ -0,0 +1,13 @@ +morphToMany(Command::class, 'commandable'); + } +} diff --git a/app/Utils/Helpers/AccountLinkUtils.php b/app/Utils/Helpers/AccountLinkUtils.php new file mode 100644 index 000000000..8e438ddf1 --- /dev/null +++ b/app/Utils/Helpers/AccountLinkUtils.php @@ -0,0 +1,56 @@ +addSeconds(120); + $otp = Helper::generateNumericOtp(6); + + // Try again if this already exists in cache (for other user). + while (Cache::has('account-link-otp::otp::'.$otp)) { + $otp = Helper::generateNumericOtp(6); + } + + // All good. Save in cache + $otpData = ['otp' => $otp, 'user_id' => $userId, 'expires_at' => $otpExpiresAt]; + Cache::add('account-link-otp::user::'.$userId, $otpData, $otpExpiresAt); + Cache::add('account-link-otp::otp::'.$otp, $otpData, $otpExpiresAt); + + return $otpData; + } + + public static function verifyOtp($otp) + { + $otpData = Cache::get('account-link-otp::otp::'.$otp); + if (! $otpData) { + return false; + } + + return $otpData; + } + + public static function forgetOtp($otp) + { + $otpData = Cache::get('account-link-otp::otp::'.$otp); + if (! $otpData) { + return false; + } + + Cache::forget('account-link-otp::otp::'.$otp); + Cache::forget('account-link-otp::user::'.$otpData['user_id']); + + return $otpData; + } +} diff --git a/app/Utils/Helpers/CryptoUtils.php b/app/Utils/Helpers/CryptoUtils.php new file mode 100644 index 000000000..5bb1d2000 --- /dev/null +++ b/app/Utils/Helpers/CryptoUtils.php @@ -0,0 +1,16 @@ + $value) { + $content = str_ireplace('{'.$key.'}', $value, $content); + } + + return $content; + } + + public static function compareVersions($version1, $version2) + { + // Split the version strings by the dot character. + $parts1 = explode('.', $version1); + $parts2 = explode('.', $version2); + + // Compare each part of the version numbers. + for ($i = 0; $i < 3; $i++) { + // Convert parts to integers for numerical comparison. + $v1 = isset($parts1[$i]) ? (int) $parts1[$i] : 0; + $v2 = isset($parts2[$i]) ? (int) $parts2[$i] : 0; + + // Compare the current parts. + if ($v1 > $v2) { + return 1; + } elseif ($v1 < $v2) { + return -1; + } + } + + // If all parts are equal, return 0. + return 0; + } } diff --git a/app/Utils/MinecraftQuery/MinecraftWebQuery.php b/app/Utils/MinecraftQuery/MinecraftWebQuery.php index 4a67fdc33..7fdcd813f 100644 --- a/app/Utils/MinecraftQuery/MinecraftWebQuery.php +++ b/app/Utils/MinecraftQuery/MinecraftWebQuery.php @@ -3,6 +3,7 @@ namespace App\Utils\MinecraftQuery; use App\Settings\PluginSettings; +use App\Utils\Helpers\CryptoUtils; use Illuminate\Encryption\Encrypter; use Str; @@ -20,56 +21,58 @@ public function __construct(public $HOST, public $PORT) */ public function setPlayerSkin(string $playerUuid, string $changeCommandType, $value = null) { - // If commandType is custom we need to send two request to set skin and signature due to WebQuery byte limit. - if ($changeCommandType === 'upload') { - $skinValue = $value['value']; - $param = $playerUuid.'½½½½'.'upload:init'.'½½½½'.$skinValue; - $status = $this->sendQuery('set-player-skin', $param); - if ($status['status'] === 'err') { - throw new \Exception(__('Oh Jeez! Something went wrong. Please try again later.')); - } - $value = $value['signature']; - } - - $param = $playerUuid.'½½½½'.$changeCommandType.'½½½½'.$value; - $status = $this->sendQuery('set-player-skin', $param); - if ($status['status'] === 'err') { + try { + $payload = [ + 'player_uuid' => $playerUuid, + 'change_command_type' => $changeCommandType, + 'value' => $value, + ]; + $status = $this->sendQuery('set-player-skin', $payload); + + return $status; + } catch (\Exception $e) { throw new \Exception(__('Error setting player skin. Please make sure provided skin is valid.')); } - - return $status; } public function sendChat($username, $message) { - $param = $username.'½½½½'.$message; - $status = $this->sendQuery('user-say', $param); + $payload = [ + 'username' => $username, + 'message' => $message, + ]; + $status = $this->sendQuery('user-say', $payload); return $status; } public function notifyAccountLinkSuccess($playerUuid, $userId) { - $param = $playerUuid.'½½½½'.$userId; - $status = $this->sendQuery('account-link-success', $param); + $payload = [ + 'player_uuid' => $playerUuid, + 'user_id' => $userId, + ]; + $status = $this->sendQuery('account-link-success', $payload); return $status; } public function sendBroadcast($message) { - $status = $this->sendQuery('broadcast', $message); + $payload = [ + 'message' => $message, + ]; + $status = $this->sendQuery('broadcast', $payload); return $status; } public function runCommand($command, $params = null) { - if ($params) { - $status = $this->sendQuery('command', $command.' '.$params); - } else { - $status = $this->sendQuery('command', $command); - } + $payload = [ + 'command' => $params ? $command.' '.$params : $command, + ]; + $status = $this->sendQuery('command', $payload); return $status; } @@ -81,54 +84,79 @@ public function getStatusQuery() return $status; } - public function getPlayerGroups($playerUuid) + public function checkPlayerOnline($playerUuid): bool { - $status = $this->sendQuery('get-player-groups', $playerUuid); + if (! Str::isUuid($playerUuid)) { + throw new \Exception(__('Provided UUID is not valid.')); + } - return $status; + $payload = [ + 'player_uuid' => $playerUuid, + ]; + $status = $this->sendQuery('check-player-online', $payload); + + return $status['data']; } - public function sendQuery($type, $params = null) + public function sendQuery($type, array $data = []) { + $encrypted = $this->makePayload($type, $data); + $factory = new \Socket\Raw\Factory(); - $socket = $factory->createClient("tcp://{$this->HOST}:{$this->PORT}", 2.5); - $encryptedCommand = $this->makeEncryptedString($type, $params); - $text = $encryptedCommand."\n"; + $socket = $factory->createClient("tcp://{$this->HOST}:{$this->PORT}", 10); + $text = $encrypted."\n"; $socket->write($text); // Timeout after 5 seconds for webquery in case of no response - socket_set_option($socket->getResource(), SOL_SOCKET, SO_RCVTIMEO, ['sec' => 5, 'usec' => 0]); + socket_set_option($socket->getResource(), SOL_SOCKET, SO_RCVTIMEO, ['sec' => 10, 'usec' => 0]); $buf = $socket->read(102400); $socket->close(); - return [ - 'status' => trim($buf), - ]; + $response = json_decode(trim($buf), true); + + if ($response['status'] != 'ok') { + throw new \Exception(__('WebQuery failed for unknown reasons. Please check minecraft server logs.')); + } + + $pluginSettings = app(PluginSettings::class); + $apiKey = $pluginSettings->plugin_api_key; + $response['data'] = json_decode($this->decryptEncryptedString($response['data'], $apiKey), true); + + return $response; } - public function makeEncryptedString(string $type, ?string $params = null): string + public function makePayload($type, array $data = []) { + // Get the API Key and Secret from the plugin settings. $pluginSettings = app(PluginSettings::class); $apiKey = $pluginSettings->plugin_api_key; $apiSecret = Str::substr($pluginSettings->plugin_api_secret, 0, 32); - $string = [ - 'api_key' => $apiKey, - 'type' => $type, - 'params' => $params, - ]; - $string = json_encode($string); + // Sign the data using Secret Key. + $data['timestamp'] = now()->getTimestampMs(); + $data['type'] = $type; + $stringData = json_encode($data); + $dataSignature = CryptoUtils::generateHmacSignature($stringData, $apiSecret); + $payload = []; + $payload['payload'] = $stringData; + $payload['signature'] = $dataSignature; - $newEncrypter = new Encrypter(($apiSecret), 'AES-256-CBC'); + // Encrypt the payload using the API Key. + $encrypted = $this->makeEncryptedString($payload, $apiKey); - return $newEncrypter->encryptString($string); + return $encrypted; } - public function decryptEncryptedString(string $string): string + public function makeEncryptedString(array $payload, string $apiKey): string { - $pluginSettings = app(PluginSettings::class); + $stringPayload = json_encode($payload); + $newEncrypter = new Encrypter(($apiKey), 'AES-256-CBC'); - $apiSecret = Str::substr($pluginSettings->plugin_api_secret, 0, 32); - $newEncrypter = new Encrypter(($apiSecret), 'AES-256-CBC'); + return $newEncrypter->encryptString($stringPayload); + } + + public function decryptEncryptedString(string $string, string $apiKey): string + { + $newEncrypter = new Encrypter(($apiKey), 'AES-256-CBC'); return $newEncrypter->decryptString($string); } diff --git a/app/View/Components/PhpVarsToJsTransformer.php b/app/View/Components/PhpVarsToJsTransformer.php index e8b98c1d2..f6c16a8ca 100644 --- a/app/View/Components/PhpVarsToJsTransformer.php +++ b/app/View/Components/PhpVarsToJsTransformer.php @@ -169,16 +169,16 @@ private function generateCustomNavbarData($navbarSettings) ], [ 'type' => 'route', - 'name' => 'Recruitments', - 'title' => 'Recruitments', + 'name' => 'Applications', + 'title' => 'Applications', 'route' => 'recruitment.index', - 'key' => 'route-recruitments-01', + 'key' => 'route-applications-01', 'authenticated' => false, ], [ 'type' => 'route', 'name' => 'Custom Forms', - 'title' => 'Forms', + 'title' => 'Custom Forms', 'route' => 'custom-form.index', 'key' => 'route-custom-forms-01', 'authenticated' => false, diff --git a/config/app.php b/config/app.php index 5f3f4dc85..38a1115eb 100644 --- a/config/app.php +++ b/config/app.php @@ -28,7 +28,7 @@ | */ - 'version' => '5.1.0', + 'version' => '6.0.0', /* |-------------------------------------------------------------------------- diff --git a/config/minetrax.php b/config/minetrax.php index faa30e129..47bd9ac04 100644 --- a/config/minetrax.php +++ b/config/minetrax.php @@ -240,16 +240,16 @@ ], [ 'type' => 'route', - 'name' => 'Recruitments', - 'title' => 'Recruitments', + 'name' => 'Applications', + 'title' => 'Applications', 'route' => 'recruitment.index', - 'key' => 'route-recruitments', + 'key' => 'route-applications', 'authenticated' => false, ], [ 'type' => 'route', - 'name' => 'My Recruitment Applications', - 'title' => 'My Applications', + 'name' => 'My Application Requests', + 'title' => 'My Application Requests', 'route' => 'recruitment-submission.index', 'key' => 'route-recruitment-submission', 'authenticated' => true, @@ -364,4 +364,25 @@ | */ 'hide_country_for_privacy' => env('HIDE_COUNTRY_FOR_PRIVACY', false), + + /* + |-------------------------------------------------------------------------- + | Disable Player Unlinking + |-------------------------------------------------------------------------- + | + | Don't allow users to unlink their player accounts. + | + */ + 'disable_player_unlinking' => env('DISABLE_PLAYER_UNLINKING', false), + + + /* + |-------------------------------------------------------------------------- + | Hide Next Rank of Player. + |-------------------------------------------------------------------------- + | + | If enabled, next rank of player won't be shown in player profile. + | + */ + 'hide_player_next_rank' => env('HIDE_PLAYER_NEXT_RANK', false), ]; diff --git a/database/migrations/2024_05_21_083608_add_last_comment_by_to_recruitment_submissions_table.php b/database/migrations/2024_05_21_083608_add_last_comment_by_to_recruitment_submissions_table.php new file mode 100644 index 000000000..827ba1407 --- /dev/null +++ b/database/migrations/2024_05_21_083608_add_last_comment_by_to_recruitment_submissions_table.php @@ -0,0 +1,30 @@ +foreignId('last_comment_by')->nullable()->constrained('users')->nullOnDelete(); + $table->timestamp('last_comment_at')->nullable(); + }); + } + + /** + * Reverse the migrations. + */ + public function down(): void + { + Schema::table('recruitment_submissions', function (Blueprint $table) { + $table->dropConstrainedForeignId('last_comment_by'); + $table->dropColumn('last_comment_at'); + }); + } +}; diff --git a/database/migrations/2024_05_22_072111_create_command_module_tables.php b/database/migrations/2024_05_22_072111_create_command_module_tables.php new file mode 100644 index 000000000..623fe1419 --- /dev/null +++ b/database/migrations/2024_05_22_072111_create_command_module_tables.php @@ -0,0 +1,74 @@ +id(); + $table->text('command'); + $table->string('name')->nullable(); + $table->text('description')->nullable(); + $table->boolean('is_enabled')->default(true); + $table->boolean('is_run_on_all_servers')->default(false); // if command should run on all servers. + $table->integer('max_attempts')->nullable(); + $table->json('config')->nullable(); + $table->boolean('is_scheduled')->default(false); // if command is repeating scheduled task. + $table->string('scheduled_cron')->nullable(); // if command is scheduled task (cron expression) + $table->string('tag')->nullable(); + $table->timestamps(); + }); + + Schema::create('command_server', function (Blueprint $table) { + $table->id(); + $table->foreignId('command_id')->constrained()->cascadeOnDelete(); + $table->foreignId('server_id')->constrained()->cascadeOnDelete(); + $table->timestamps(); + }); + + Schema::create('commandables', function (Blueprint $table) { + $table->id(); + $table->foreignId('command_id')->constrained()->cascadeOnDelete(); + $table->morphs('commandable'); + $table->timestamps(); + }); + + Schema::create('command_queues', function (Blueprint $table) { + $table->id(); + $table->foreignId('command_id')->nullable()->constrained()->nullOnDelete(); + $table->foreignId('server_id')->constrained()->cascadeOnDelete(); + $table->text('parsed_command'); + $table->string('config')->nullable(); + $table->json('params')->nullable(); + $table->string('status')->index(); // pending, running, failed, completed, cancelled, deferred + $table->timestamp('execute_at')->nullable()->index(); // support for delayed commands, null if immediate + $table->integer('max_attempts')->nullable(); + $table->integer('attempts')->default(0); + $table->timestamp('last_attempt_at')->nullable(); + $table->text('output')->nullable(); + $table->string('tag')->nullable(); + $table->string('player_uuid')->nullable()->index(); // if command is run on player (used to check player online in deferred command) + $table->foreignId('user_id')->nullable()->constrained()->nullOnDelete(); // causer + $table->foreignId('player_id')->nullable()->constrained()->nullOnDelete(); // if command is run on player (helpful for analytics) + $table->timestamps(); + }); + } + + /** + * Reverse the migrations. + */ + public function down(): void + { + Schema::dropIfExists('command_queues'); + Schema::dropIfExists('commandables'); + Schema::dropIfExists('command_server'); + Schema::dropIfExists('commands'); + } +}; diff --git a/database/seeders/PermissionSeeder.php b/database/seeders/PermissionSeeder.php index d159070fb..57c4302af 100644 --- a/database/seeders/PermissionSeeder.php +++ b/database/seeders/PermissionSeeder.php @@ -115,5 +115,16 @@ public function run() Permission::findOrCreate('acton recruitment_submissions'); // Accept, Reject, etc. Permission::findOrCreate('delete recruitment_submissions'); Permission::findOrCreate('delete recruitment_submission_messages'); + + Permission::findOrCreate('read failed_jobs'); + Permission::findOrCreate('delete failed_jobs'); + Permission::findOrCreate('retry failed_jobs'); + + Permission::findOrCreate('create command_queues'); + Permission::findOrCreate('read command_queues'); + Permission::findOrCreate('delete command_queues'); + + Permission::findOrCreate('link any_players'); + Permission::findOrCreate('unlink any_players'); } } diff --git a/database/settings/2024_05_22_211702_update_command_fields_to_plugin_settings.php b/database/settings/2024_05_22_211702_update_command_fields_to_plugin_settings.php new file mode 100644 index 000000000..97bb134b2 --- /dev/null +++ b/database/settings/2024_05_22_211702_update_command_fields_to_plugin_settings.php @@ -0,0 +1,22 @@ +migrator->add('plugin.account_link_after_success_commands', []); + $this->migrator->add('plugin.account_unlink_after_success_commands', []); + $this->migrator->deleteIfExists('plugin.account_link_after_success_command'); + $this->migrator->deleteIfExists('plugin.account_link_after_success_broadcast_message'); + } + + public function down(): void + { + $this->migrator->deleteIfExists('plugin.account_link_after_success_commands'); + $this->migrator->deleteIfExists('plugin.account_unlink_after_success_commands'); + $this->migrator->add('plugin.account_link_after_success_command', null); + $this->migrator->add('plugin.account_link_after_success_broadcast_message', null); + } +}; diff --git a/docker-run.sh b/docker-run.sh index af361637a..d4a54e833 100644 --- a/docker-run.sh +++ b/docker-run.sh @@ -102,7 +102,7 @@ function storagelink() { function up() { # Try taking pull, if dont work then prompt for stash - if git pull origin main; then + if git pull; then echo "${Green}Git pull successful! Continuing update..." else echo "${Yellow}Warning! You have local changes which will get lost. Type Y to continue, N to cancel update." @@ -114,7 +114,7 @@ function up() { fi git stash - git pull origin main + git pull fi # Stop container diff --git a/lang/de.json b/lang/de.json index 7b224d490..5b70b178a 100644 --- a/lang/de.json +++ b/lang/de.json @@ -1,16 +1,8 @@ { "Email\/Password authentication is disabled.": "Die E-Mail-\/Passwort-Authentifizierung ist deaktiviert.", "The provided password does not match your current password.": "Das angegebene Passwort stimmt nicht mit Ihrem aktuellen Passwort überein.", - "Link expired or invalid!": "Link abgelaufen oder ungültig!", - "Please request a fresh link and try again.": "Bitte fordern Sie einen neuen Link an und versuchen Sie es erneut.", - "Player not found in database!": "Spieler nicht in Datenbank gefunden!", - "Please wait for sometime for server to update its player database.": "Bitte warten Sie einige Zeit, bis der Server seine Spielerdatenbank aktualisiert hat.", - "Player already linked to a user!": "Spieler ist bereits mit einem Benutzer verknüpft!", - "If you own this user please unlink it from your another account or contact administrator.": "Wenn Sie Eigentümer dieses Benutzers sind, trennen Sie ihn bitte von Ihrem anderen Konto oder wenden Sie sich an den Administrator.", - "User already have max :max_slots players linked!": "Benutzer haben bereits max. :max_slots Spieler verknüpft!", - "If you want to link this player please unlink a player.": "Wenn Sie diesen Player verknüpfen möchten, heben Sie bitte die Verknüpfung zu einem Player auf.", - "Played linked successfully!": "Link erfolgreich gespielt!", - "This player is now linked to your account.": "Dieser Spieler ist jetzt mit Ihrem Konto verknüpft.", + "Player unlinking disabled!": "Das Aufheben der Spielerverknüpfung ist deaktiviert!", + "Player unlinking is disabled by the administrator.": "Das Aufheben der Spielerverknüpfung wurde vom Administrator deaktiviert.", "Player not found!": "Spieler nicht gefunden!", "No player with that ID found linked to your account.": "Es wurde kein Spieler mit dieser ID gefunden, der mit Ihrem Konto verknüpft ist.", "Played unlinked successfully!": "Unlinked erfolgreich gespielt!", @@ -22,6 +14,11 @@ "Badge updated successfully": "Badge erfolgreich aktualisiert", "Deleted Successfully": "Erfolgreich gelöscht", "Badge has been deleted permanently": "Abzeichen wurde dauerhaft gelöscht", + ":count Commands Scheduled!": ":count Befehle geplant!", + "Commands has been scheduled for execution. Check the status in Command History.": "Befehle wurden zur Ausführung eingeplant. Überprüfen Sie den Status im Befehlsverlauf.", + "Deleted!": "Gelöscht!", + "Retried!": "Wiederholt!", + "Command has been queued for retrying! Refresh the page after few seconds to check the status.": "Der Befehl wurde zum erneuten Versuch in die Warteschlange gestellt! Aktualisieren Sie die Seite nach einigen Sekunden, um den Status zu überprüfen.", "Custom Form is created successfully": "Das benutzerdefinierte Formular wurde erfolgreich erstellt", "Custom Form updated successfully": "Benutzerdefiniertes Formular erfolgreich aktualisiert", "Custom Form has been deleted permanently": "Das benutzerdefinierte Formular wurde endgültig gelöscht", @@ -38,6 +35,8 @@ "Download has been created successfully": "Der Download wurde erfolgreich erstellt", "Download has been updated successfully": "Der Download wurde erfolgreich aktualisiert", "Download has been deleted permanently": "Der Download wurde endgültig gelöscht", + "Retry Queued!": "Wiederholungsversuch in der Warteschlange!", + "Job has been queued for retrying!": "Der Job wurde für einen erneuten Versuch in die Warteschlange gestellt!", "Online Players": "Online-Spieler", "TPS": "TPS", "CPU Load (%)": "CPU-Last (%)", @@ -63,12 +62,12 @@ "Rank updated successfully": "Rang erfolgreich aktualisiert", "Rank has been deleted permanently": "Rang wurde dauerhaft gelöscht", "Rank Reset Successful": "Rangzurücksetzung erfolgreich", - "Recruitment Form is created successfully": "Das Rekrutierungsformular wurde erfolgreich erstellt", - "Recruitment Form updated successfully": "Das Rekrutierungsformular wurde erfolgreich aktualisiert", - "Recruitment Form has been deleted permanently": "Das Rekrutierungsformular wurde endgültig gelöscht", - "Recruitment Submission deleted successfully": "Stellenausschreibung erfolgreich gelöscht", + "Application Form is created successfully": "Das Antragsformular wurde erfolgreich erstellt", + "Application Form updated successfully": "Antragsformular erfolgreich aktualisiert", + "Application Form has been deleted permanently": "Das Bewerbungsformular wurde endgültig gelöscht", + "Request deleted successfully": "Anfrage erfolgreich gelöscht", "Action Successful": "Aktion erfolgreich", - "Recruitment Submission action has been completed successfully": "Die Aktion zur Einstellungsübermittlung wurde erfolgreich abgeschlossen", + "Request action has been completed successfully": "Die Anforderungsaktion wurde erfolgreich abgeschlossen", "Message Successfully": "Nachricht erfolgreich", "Message has been deleted successfully": "Die Nachricht wurde erfolgreich gelöscht", "New Role is created successfully": "Neue Rolle wurde erfolgreich erstellt", @@ -78,8 +77,7 @@ ":role cannot be deleted because there are users on this role.!": ":role kann nicht gelöscht werden, da es Benutzer in dieser Rolle gibt.!", "Role has been deleted!": "Rolle wurde gelöscht!", "New server added successfully": "Neuer Server erfolgreich hinzugefügt", - "Bungee server added successfully": "Bungee-Server erfolgreich hinzugefügt", - "Bungee server updated successfully": "Bungee-Server erfolgreich aktualisiert", + "Proxy server added successfully": "Proxyserver erfolgreich hinzugefügt", "Server updated successfully": "Server erfolgreich aktualisiert", "Server has been deleted permanently": "Server wurde dauerhaft gelöscht", "Rescan Queued!": "Erneuter Scan in Warteschlange!", @@ -117,10 +115,16 @@ "User deleted successfully": "Benutzer erfolgreich gelöscht", "Player not found": "Spieler nicht gefunden", "Player already linked to a user": "Spieler ist bereits mit einem Benutzer verknüpft", - "Failed to start player session.": "Spielersitzung konnte nicht gestartet werden.", - "Failed reporting player pvp kill.": "Fehler beim Melden des PvP-Kills des Spielers.", + "Provided OTP is invalid or expired. Please try again.": "Das vorausgesetzte OTP ist ungültig oder abgelaufen. Bitte versuche es erneut.", + "You already have max :max_slots players linked!": "Du hast bereits maximal :max_slots Spieler verlinkt!", + "Player linked successfully": "Spieler erfolgreich verknüpft", + "Player intel is disabled for this server.": "Spielerinformationen sind für diesen Server deaktiviert.", + "Failed to start player session. :message": "Spielersitzung konnte nicht gestartet werden. :message", + "Failed reporting player pvp kill: :message": "PvP-Kill des Spielers konnte nicht gemeldet werden: :message", + "Failed reporting player death: :message": "Spielertod konnte nicht gemeldet werden: :message", "PlayerIntel event for :username reported successfully.": "PlayerIntel-Ereignis für :username erfolgreich gemeldet.", - "Failed to report Event data.": "Ereignisdaten konnten nicht gemeldet werden.", + "Failed to report Event data: :message": "Ereignisdaten konnten nicht gemeldet werden: :message", + "Server Intel failed to report: :message": "Server Intel konnte Folgendes nicht melden: :message", "Submit Successful!": "Einreichen erfolgreich!", "Form has been submitted successfully.": "Das Formular wurde erfolgreich übermittelt.", "Comments are not allowed for this news": "Kommentare sind für diese Nachricht nicht gestattet", @@ -139,7 +143,7 @@ "Applied Successfully!": "Erfolgreich beworben!", "Application has been submitted successfully.": "Der Antrag wurde erfolgreich eingereicht.", "Withdraw Successful": "Erfolgreich zurückziehen", - "Recruitment Submission withdrawn successfully": "Der Einstellungsantrag wurde erfolgreich zurückgezogen", + "Application Request withdrawn successfully": "Bewerbungsanfrage erfolgreich zurückgezogen", "Failed to ping server": "Ping-Server fehlgeschlagen", "Failed to query server": "Fehler beim Abfragen des Servers", "Web Query Failed": "Webabfrage fehlgeschlagen", @@ -164,20 +168,20 @@ "[Notification] :user commented on your post": "[Benachrichtigung] :user hat Ihren Beitrag kommentiert", "[Notification] Someone liked your post": "[Benachrichtigung] Jemand hat Ihren Beitrag mit „Gefällt mir“ markiert", "[Notification] :user liked your post": "[Benachrichtigung] :user hat Ihren Beitrag gefallen", - "[Notification] New message received on a recruitment application.": "[Benachrichtigung] Neue Nachricht zu einer Stellenbewerbung erhalten.", - ":causer sent new message on his application for :recruitment:": ":causer hat eine neue Nachricht zu seiner Bewerbung für :recruitment gesendet:", - "[Notification] Your application has a new message.": "[Benachrichtigung] Ihre Bewerbung hat eine neue Nachricht.", - ":causer sent you a message on your application for :recruitment:": ":causer hat Ihnen eine Nachricht zu Ihrer Bewerbung für :recruitment gesendet:", - "[Notification] New recruitment application received.": "[Benachrichtigung] Neue Bewerbung eingegangen.", - "[Notification] An application withdrawn by user.": "[Benachrichtigung] Ein Antrag wurde vom Benutzer zurückgezogen.", - ":applicant has withdrawn his application for :recruitment.": ":applicant hat seine Bewerbung für :recruitment zurückgezogen.", - "[Notification] Your Application status has changed.": "[Benachrichtigung] Ihr Bewerbungsstatus hat sich geändert.", - ":causer has started processing your application for :recruitment.": ":causer hat mit der Bearbeitung Ihrer Bewerbung für :recruitment begonnen.", - ":causer has put on-hold your application for :recruitment.": ":causer hat Ihre Bewerbung für :recruitment zurückgestellt.", - "[Notification] Congratulations! Your Application has been Approved.": "[Benachrichtigung] Herzlichen Glückwunsch! Ihr Antrag wurde genehmigt.", - ":causer has approved your application for :recruitment.": ":causer hat Ihren Antrag für :recruitment genehmigt.", - "[Notification] Sorry! Your Application has been Rejected.": "[Benachrichtigung] Entschuldigung! Ihr Antrag wurde abgelehnt.", - ":causer has rejected your application for :recruitment.": ":causer hat Ihre Bewerbung für :recruitment abgelehnt.", + "[Notification] New message received on a application request.": "[Benachrichtigung] Neue Nachricht zu einer Bewerbungsanfrage erhalten.", + ":causer sent new message on his application request for :recruitment:": ":causer hat eine neue Nachricht zu seiner Bewerbungsanfrage für :recruitment gesendet:", + "[Notification] Your application request has a new message.": "[Benachrichtigung] Ihre Bewerbungsanfrage hat eine neue Nachricht.", + ":causer sent you a message on your application request for :recruitment:": ":causer hat Ihnen eine Nachricht zu Ihrer Bewerbungsanfrage für :recruitment gesendet:", + "[Notification] New application request received.": "[Benachrichtigung] Neue Bewerbungsanfrage erhalten.", + "[Notification] An application request withdrawn by user.": "[Benachrichtigung] Eine Bewerbungsanfrage wurde vom Benutzer zurückgezogen.", + ":applicant has withdrawn his application request for :recruitment.": ":applicant hat seine Bewerbungsanfrage für :recruitment zurückgezogen.", + "[Notification] Your Application request status has changed.": "[Benachrichtigung] Der Status Ihrer Bewerbungsanfrage hat sich geändert.", + ":causer has started processing your application request for :recruitment.": ":causer hat mit der Bearbeitung Ihrer Bewerbungsanfrage für :recruitment begonnen.", + ":causer has put on-hold your application request for :recruitment.": ":causer hat Ihre Bewerbungsanfrage für :recruitment zurückgestellt.", + "[Notification] Congratulations! Your Application request has been Approved.": "[Benachrichtigung] Herzlichen Glückwunsch! Ihre Bewerbungsanfrage wurde genehmigt.", + ":causer has approved your application request for :recruitment.": ":causer hat Ihre Bewerbungsanfrage für :recruitment genehmigt.", + "[Notification] Sorry! Your Application request has been Rejected.": "[Benachrichtigung] Entschuldigung! Ihre Bewerbungsanfrage wurde abgelehnt.", + ":causer has rejected your application request for :recruitment.": ":causer hat Ihre Bewerbungsanfrage für :recruitment abgelehnt.", "[Notification] You are Banned by :user": "[Benachrichtigung] Du bist von :user gesperrt", "Oh no! You are banned by a staff member and can no longer access our website. If you think this was a mistake please create an appeal.": "Ach nein! Sie werden von einem Mitarbeiter gesperrt und können nicht mehr auf unsere Website zugreifen. Wenn Sie der Meinung sind, dass dies ein Fehler war, legen Sie bitte Einspruch ein.", "Banned by: :user": "Gebannt von: :user", @@ -185,8 +189,9 @@ "Oh no! You are muted by a staff member and can no longer send messages or chat in our website. If you think this was a mistake please create an appeal.": "Ach nein! Sie wurden von einem Mitarbeiter stummgeschaltet und können keine Nachrichten mehr senden oder auf unserer Website chatten. Wenn Sie der Meinung sind, dass dies ein Fehler war, legen Sie bitte Einspruch ein.", "Muted by: :user": "Stummgeschaltet durch: :user", "Failed to upload skin to MineSkin. Please try again later": "Der Skin konnte nicht auf MineSkin hochgeladen werden. Bitte versuchen Sie es später noch einmal", - "Oh Jeez! Something went wrong. Please try again later.": "Oh Herrgott! Etwas ist schief gelaufen. Bitte versuchen Sie es später noch einmal.", "Error setting player skin. Please make sure provided skin is valid.": "Fehler beim Festlegen des Player-Skins. Bitte stellen Sie sicher, dass der bereitgestellte Skin gültig ist.", + "Provided UUID is not valid.": "Die angegebene UUID ist ungültig.", + "WebQuery failed for unknown reasons. Please check minecraft server logs.": "WebQuery ist aus unbekannten Gründen fehlgeschlagen. Bitte überprüfen Sie die Minecraft-Serverprotokolle.", "Minecraft Servers & Players Tracking": "Minecraft-Server & Spieler-Tracking", "Use Light Theme": "Verwenden Sie das helle Design", "Use Dark Theme": "Verwenden Sie das dunkle Design", @@ -197,6 +202,8 @@ "We use cookies to enhance your browsing experience. By continuing, you consent to our cookie policy.": "Wir verwenden Cookies, um Ihr Surferlebnis zu verbessern. Wenn Sie fortfahren, stimmen Sie unserer Cookie-Richtlinie zu.", "I Understand": "Ich verstehe", "Reset": "Zurücksetzen", + "Filter by :column": "Filtern Sie nach :column", + "Clear": "Klar", "No data found": "Keine Daten gefunden", "Previous": "Vorherige", "Next": "Nächste", @@ -218,15 +225,15 @@ "Logout": "Ausloggen", "An anonymous user": "Ein anonymer Benutzer", "submitted a custom form.": "ein benutzerdefiniertes Formular eingereicht.", - "applied for a recruitment.": "sich auf eine Stelle beworben.", + "created a new application request.": "hat eine neue Bewerbungsanfrage erstellt.", " has withdrawn his application.": "hat seine Bewerbung zurückgezogen.", " rejected your application.": "lehnte Ihre Bewerbung ab.", " approved your application.": "hat Ihrem Antrag zugestimmt.", " has put your application on-hold.": "hat Ihre Bewerbung zurückgestellt.", " has started processing your application.": "hat mit der Bearbeitung Ihrer Bewerbung begonnen.", " has changed status of your application": "Der Status Ihrer Bewerbung hat sich geändert", - "New message received on a recruitment application.": "Neue Nachricht zu einer Stellenbewerbung erhalten.", - "Your application has a new message from @:username": "Ihre Anwendung hat eine neue Nachricht von @:username", + "New message received on an application request.": "Neue Nachricht zu einer Bewerbungsanfrage erhalten.", + "Your application request received a new message from @:username": "Ihre Bewerbungsanfrage hat eine neue Nachricht von @:username erhalten", "Poll starting": "Umfrage startet", "Poll closing": "Schließung der Umfrage", "Are you sure you want to delete this Post?": "Möchten Sie diesen Beitrag wirklich löschen?", @@ -242,6 +249,7 @@ "Staff Member": "Mitarbeiter", "Muted User": "Stummgeschalteter Benutzer", "Password": "Passwort", + "Continue with empty password if you have no password.": "Fahren Sie mit leerem Passwort fort, wenn Sie kein Passwort haben.", "Cancel": "Absagen", "Whoops! Something went wrong.": "Hoppla! Etwas ist schief gelaufen.", "Leave Impersonation": "Identitätswechsel verlassen", @@ -281,6 +289,37 @@ "Badge": "Abzeichen", "Badge Image": "Abzeichenbild", "Delete Badge": "Abzeichen löschen", + "Run Command": "Führen Sie den Befehl aus", + "Scope": "Umfang", + "Global": "Global", + "Run generic command": "Führen Sie den generischen Befehl aus", + "Player": "Spieler", + "Run against players": "Laufen Sie gegen Spieler", + "Available Placeholders": "Verfügbare Platzhalter", + "Username of the player the command is running on.": "Benutzername des Players, auf dem der Befehl ausgeführt wird.", + "Unique Id of the player the command is running on.": "Eindeutige ID des Players, auf dem der Befehl ausgeführt wird.", + "Enter command to run...": "Geben Sie den Befehl zum Ausführen ein...", + "Servers to run on": "Server, auf denen ausgeführt werden soll", + "Leave empty to run on all servers": "Lassen Sie es leer, um es auf allen Servern auszuführen", + "Players to run on": "Spieler zum Laufen", + "Select players": "Wählen Sie Spieler aus", + "Select players to run command on": "Wählen Sie Spieler aus, auf denen Sie den Befehl ausführen möchten", + "Require player to be online": "Der Spieler muss online sein", + "This command should only run if player is online on running server. If not online it will be queued to run when player comes online.": "Dieser Befehl sollte nur ausgeführt werden, wenn der Player auf dem laufenden Server online ist. Wenn es nicht online ist, wird es in die Warteschlange gestellt, um ausgeführt zu werden, sobald der Spieler online geht.", + "Command": "Befehl", + "Server": "Server", + "Status": "Status", + "Last Attempted": "Letzter Versuch", + "Execute At": "Ausführen bei", + "Tags": "Stichworte", + "For Player": "Für Spieler", + "Output": "Ausgabe", + "Command History": "Befehlsverlauf", + "Retry All Failed": "Alle Wiederholungen fehlgeschlagen", + "Attempts: :attempts\/:max_attempts": "Versuche: :attempts\/:max_attempts", + "none": "keinen", + "Retry Command": "Befehl wiederholen", + "Delete Command": "Befehl löschen", "Create Custom Form": "Erstellen Sie ein benutzerdefiniertes Formular", "Title of Custom Form": "Titel des benutzerdefinierten Formulars", "Eg: Contact Us": "Beispiel: Kontaktieren Sie uns", @@ -303,7 +342,6 @@ "Edit Custom Form": "Benutzerdefiniertes Formular bearbeiten", "Update Custom Form": "Benutzerdefiniertes Formular aktualisieren", "Title": "Titel", - "Status": "Status", "Can Submit": "Kann einreichen", "Notify Staff on Submit": "Benachrichtigen Sie die Mitarbeiter bei der Übermittlung", "Visible in Listing": "Im Eintrag sichtbar", @@ -323,7 +361,6 @@ "Max submission per user": "Maximale Einreichung pro Benutzer", "not applicable": "unzutreffend", "Minimum staff role weight to view submissions": "Mindestgewicht der Mitarbeiterrolle zum Anzeigen von Einreichungen", - "none": "keinen", "Notify staff on new submission": "Benachrichtigen Sie die Mitarbeiter über neue Einreichungen", "Updated": "Aktualisiert", "Country": "Land", @@ -410,6 +447,17 @@ "External URL is protected from end users.": "Die externe URL ist vor Endbenutzern geschützt.", "Minimum Role Weight Required to Download": "Für den Download ist eine minimale Rollengewichtung erforderlich", "Delete Download": "Download löschen", + "UUID": "UUID", + "Job": "Arbeit", + "Connection\/Queue": "Verbindung\/Warteschlange", + "Exception": "Ausnahme", + "Failed At": "Fehlgeschlagen bei", + "Failed Jobs": "Fehlgeschlagene Jobs", + "Retry All Jobs": "Alle Jobs erneut versuchen", + "Clear All Jobs": "Alle Jobs löschen", + "Attempts: :attempts": "Versuche: :attempts", + "Retry Job": "Job erneut versuchen", + "Delete Job": "Auftrag löschen", "Create News": "Nachrichten erstellen", "News Category": "Nachrichten-Kategorie", "General": "Allgemein", @@ -486,11 +534,11 @@ "Reset to Default Ranks": "Auf Standardränge zurücksetzen", "Rank": "Rang", "Delete Rank": "Rang löschen", - "Create Recruitment Form": "Erstellen Sie ein Rekrutierungsformular", - "Title of this Recruitment": "Titel dieser Einstellung", + "Create Application Form": "Antragsformular erstellen", + "Title of this Application": "Titel dieser Anwendung", "Eg: Apply to be a Staff Member": "Beispiel: Bewerben Sie sich als Mitarbeiter", - "Recruitment Slug": "Rekrutierungsschnecke", - "Recruitment Status": "Rekrutierungsstatus", + "Application Slug for URL": "Anwendungs-Slug für URL", + "Application Status": "Bewerbungsstatus", "How many times a user can reapply after rejection. Leave empty for no limit.": "Wie oft kann sich ein Benutzer nach einer Ablehnung erneut bewerben? Für keine Begrenzung leer lassen.", "Submission Cooldown in Seconds": "Abklingzeit der Einreichung in Sekunden", "After how many seconds user can reapply this application. Leave empty for no cooldown.": "Nach wie vielen Sekunden kann der Benutzer diese Anwendung erneut anwenden? Für keine Abklingzeit leer lassen.", @@ -499,20 +547,19 @@ "Leave empty to allow any staff with [vote recruitment_submissions] permission to vote on submissions.": "Lassen Sie das Feld leer, damit alle Mitarbeiter mit der Berechtigung [vote recruitment_submissions] über Beiträge abstimmen können.", "Min Staff Role Weight to Act on Submission": "Min. Gewicht der Mitarbeiterrolle, um bei der Einreichung zu handeln", "Min staff role weight required to Approve\/Reject on submission. Leave empty to allow any staff with [acton recruitment_submissions] permission to act on submissions.": "Mindestgewicht der Mitarbeiterrolle, das zum Genehmigen\/Ablehnen bei der Einreichung erforderlich ist. Lassen Sie das Feld leer, damit alle Mitarbeiter mit der Berechtigung [acton recruitment_submissions] auf Eingaben reagieren können.", - "If this recruitment is for hiring of a specific role, select the role here.": "Wenn es sich bei dieser Einstellung um die Einstellung einer bestimmten Rolle handelt, wählen Sie die Rolle hier aus.", - "Create Recruitment": "Rekrutierung erstellen", - "Edit Recruitment Form": "Rekrutierungsformular bearbeiten", - "Update Recruitment": "Rekrutierung aktualisieren", + "If this application is for hiring of a specific role, select the role here.": "Wenn es sich bei dieser Bewerbung um die Einstellung einer bestimmten Rolle handelt, wählen Sie die Rolle hier aus.", + "Edit Application Form": "Bewerbungsformular bearbeiten", + "Update Application Form": "Antragsformular aktualisieren", "Notify Staff": "Personal benachrichtigen", "Messaging": "Nachrichten", "Open Requests": "Offene Anfragen", "Closed Requests": "Geschlossene Anfragen", - "Manage Recruitment Forms": "Rekrutierungsformulare verwalten", - "Recruitment": "Rekrutierung", - "Delete Recruitment": "Rekrutierung löschen", - ":title Intel - Recruitments": ":title Intel – Rekrutierung", + "Manage Application Forms": "Antragsformulare verwalten", + "Application Form": "Anmeldeformular", + "Delete Application Form": "Bewerbungsformular löschen", + ":title Intel - Application Form": ":title Intel – Bewerbungsformular", ":title - Intel": ":title – Intel", - "This recruitment hiring for": "Diese Rekrutierung erfolgt für", + "This application hiring for": "Diese Bewerbung stellt für", "Submission Cooldown": "Abklingzeit für die Einreichung", "Allow only Player Linked Users": "Nur mit Spielern verknüpfte Benutzer zulassen", "Allow only Verified Users": "Nur verifizierte Benutzer zulassen", @@ -520,16 +567,19 @@ "Enable Messaging Feature": "Aktivieren Sie die Messaging-Funktion", "Notify staff on Events": "Benachrichtigen Sie das Personal über Ereignisse", "Applicant": "Antragsteller", + "Application": "Anwendung", + "Last Actor": "Letzter Schauspieler", + "Last Comment": "Letzter Kommentar", "Updated At": "Aktualisiert am", - "Closed Request - Recruitments": "Geschlossene Anfrage – Rekrutierung", - "Open Requests - Recruitments": "Offene Anfragen – Rekrutierung", - "Closed Recruitment Submissions:": "Geschlossene Stellenausschreibungen:", - "Open Recruitment Submissions:": "Offene Stellenausschreibungen:", - "All Recruitments": "Alle Rekrutierungen", - ":user application for :recruitmenttitle #:index - Recruitments": ":user Bewerbung für :recruitmenttitle #:index - Rekrutierungen", + "Closed Request - Applications": "Geschlossene Anfrage – Bewerbungen", + "Open Requests - Applications": "Offene Anfragen – Bewerbungen", + "Closed Requests:": "Geschlossene Anfragen:", + "Open Requests:": "Offene Anfragen:", + "All Applications": "Alle Anwendungen", + ":user application for :recruitmenttitle #:index - Applications": ":user-Anwendung für :recruitmenttitle #:index – Anwendungen", ":user application for :recruitmenttitle #:index": ":user-Anwendung für :recruitmenttitle #:index", "Last Updated At": "Zuletzt aktualisiert um", - "Submission Status": "Submission Status", + "Request Status": "Anforderungsstatus", "Reason": "Grund", "Marked :status By": "Markiert :status von", "Mark In-Progress": "Als „In Bearbeitung“ markieren", @@ -580,8 +630,8 @@ "Go back to Server List": "Gehen Sie zurück zur Serverliste", "Add Bungee Server": "Bungee-Server hinzufügen", "Edit Bungee Server: :name": "Bungee-Server bearbeiten: :name", - "Minetrax only support adding one bungee server. This server will be used to show online players and server status. All sensitive information will be encrypted.": "Minetrax unterstützt nur das Hinzufügen eines Bungee-Servers. Dieser Server wird verwendet, um Online-Spieler und den Serverstatus anzuzeigen. Alle sensiblen Informationen werden verschlüsselt.", - "Please note Proxy servers don't need Minetrax.jar plugin. Only install them on actual servers like spigot, bukkit etc.": "Bitte beachten Sie, dass Proxy-Server kein Minetrax.jar-Plugin benötigen. Installieren Sie sie nur auf tatsächlichen Servern wie Spigot, Bukkit usw.", + "Add Bungee\/Velocity Server": "Bungee-\/Velocity-Server hinzufügen", + "Edit Bungee\/Velocity Server: :name": "Bungee\/Velocity-Server bearbeiten: :name", "Server Name": "Servername", "Eg: My Bungee Server": "Beispiel: Mein Bungee-Server", "Hostname": "Hostname", @@ -593,27 +643,26 @@ "Query Port": "Query Port", "Eg: 25575": "Beispiel: 25575", "Webquery Port": "Webabfrage-Port", - "Eg: 25585": "Beispiel: 25585", + "WebQuery port is a new port which MineTrax plugin will open for secure connection between server and web. Enter a port value which is available and can be open. Eg: 25569": "Der WebQuery-Port ist ein neuer Port, den das MineTrax-Plugin für eine sichere Verbindung zwischen Server und Web öffnet. Geben Sie einen Portwert ein, der verfügbar ist und geöffnet sein kann. Beispiel: 25569", "Server Version": "Serverversion", "Select version..": "Version auswählen..", - "Edit Bungee Server": "Bungee-Server bearbeiten", - "Add New Server": "Neuen Server hinzufügen", + "Enable Server Intel \/ Analytics": "Aktivieren Sie Server Intel\/Analytics", + "If enabled, server analytics data (performance metric, join activity etc) will be captured for this server via plugin.": "Wenn diese Option aktiviert ist, werden über das Plugin Serveranalysedaten (Leistungsmetrik, Beitrittsaktivität usw.) für diesen Server erfasst.", + "Enable Skin Change via Web (SkinsRestorer)": "Skin-Änderung über das Web aktivieren (SkinsRestorer)", + "Allow user to change their linked players skin via web for this server. This will require SkinsRestorer plugin to be installed on the server.": "Ermöglichen Sie dem Benutzer, den Skin seines verknüpften Players für diesen Server über das Internet zu ändern. Dazu muss das SkinsRestorer-Plugin auf dem Server installiert sein.", "Add Server": "Server hinzufügen", + "Edit Server": "Server bearbeiten", + "Add New Server": "Neuen Server hinzufügen", "This name will help to identify this server. Eg: Survival, Skyblock, etc.": "Dieser Name hilft bei der Identifizierung dieses Servers. ZB: Survival, Skyblock usw.", "Publicly visible join address of the server. Eg: play.example.com": "Öffentlich sichtbare Join-Adresse des Servers. Beispiel: play.example.com", "Higher the weight, higher the priority. Eg: 1,3,10 etc. Can be left empty.": "Je höher das Gewicht, desto höher die Priorität. Beispiel: 1,3,10 usw. Kann leer bleiben.", - "WebQuery port is a new port which MineTrax plugin will open for secure connection between server and web. Enter a port value which is available and can be open. Eg: 25569": "Der WebQuery-Port ist ein neuer Port, den das MineTrax-Plugin für eine sichere Verbindung zwischen Server und Web öffnet. Geben Sie einen Portwert ein, der verfügbar ist und geöffnet sein kann. Beispiel: 25569", "Select server type": "Servertyp auswählen", "Server Type": "Server Typ", "Version": "Ausführung", - "Enable Server Intel \/ Analytics": "Aktivieren Sie Server Intel\/Analytics", - "If enabled, server analytics data (performance metric, join activity etc) will be captured for this server via plugin.": "Wenn diese Option aktiviert ist, werden über das Plugin Serveranalysedaten (Leistungsmetrik, Beitrittsaktivität usw.) für diesen Server erfasst.", "Enable Player Intel \/ Analytics": "Aktivieren Sie Player Intel\/Analytics", "If enabled, player intel & statistics data will be captured for this server via plugin.": "Wenn diese Option aktiviert ist, werden über das Plugin Spielerinformationen und Statistikdaten für diesen Server erfasst.", "Enable In-Game Chat": "Aktivieren Sie den In-Game-Chat", "Enable in-game chat for this server, which allow users to view & chat to in-game players from website.": "Aktivieren Sie den In-Game-Chat für diesen Server, der es Benutzern ermöglicht, In-Game-Spieler von der Website aus anzusehen und mit ihnen zu chatten.", - "Enable Skin Change via Web (SkinsRestorer)": "Skin-Änderung über das Web aktivieren (SkinsRestorer)", - "Allow user to change their linked players skin via web for this server. This will require SkinsRestorer plugin to be installed on the server.": "Ermöglichen Sie dem Benutzer, den Skin seines verknüpften Players für diesen Server über das Internet zu ändern. Dazu muss das SkinsRestorer-Plugin auf dem Server installiert sein.", "Edit Server: :name": "Server bearbeiten: :name", "Update Server": "Update-Server", "IP:Port": "IP:Anschluss", @@ -623,17 +672,12 @@ "Servers": "Server", "Sync Player Statistics": "Spielerstatistiken synchronisieren", "Add": "Hinzufügen", - "Server": "Server", "Add Proxy Server": "Proxyserver hinzufügen", "WebQuery: :webquery_port": "WebAbfrage: :webquery_port", "not set": "nicht festgelegt", - "Server Online": "Online-Server", - "Server Offline": "Server offline", "Loading": "Wird geladen", - "WebQuery Online": "WebQuery Online", - "WebQuery Offline": "WebQuery Offline", + "WebQuery": "WebQuery", "View Server Intel": "Server Intel anzeigen", - "Edit Server": "Server bearbeiten", "Delete Server": "Server löschen", "Statistics": "Statistiken", "Performance": "Leistung", @@ -873,10 +917,23 @@ "Enable user to link their players to account": "Ermöglichen Sie dem Benutzer, seine Spieler mit dem Konto zu verknüpfen", "Max Players Per Account": "Max. Spieler pro Konto", "Number of players that can be linked to one account in website.": "Anzahl der Spieler, die mit einem Konto auf der Website verknüpft werden können.", - "Account Link Success Command": "Befehl zum Erfolg der Kontoverknüpfung", - "Use this to reward players when they link account: Eg: give {PLAYER} diamond 1": "Verwenden Sie dies, um Spieler zu belohnen, wenn sie ein Konto verknüpfen: Beispiel: Geben Sie {SPIELER} Diamant 1", - "Account Link Success Broadcast": "Erfolgreiche Übertragung der Kontoverknüpfung", - "If set then this will be broadcast to server when player link is successful: Eg: {PLAYER} has successfully linked his account and won a ultra key.": "Wenn gesetzt, wird dies an den Server gesendet, wenn die Spielerverknüpfung erfolgreich ist: Beispiel: {PLAYER} hat sein Konto erfolgreich verknüpft und einen Ultra Key gewonnen.", + "Account Link Success Commands": "Erfolgreiche Kontoverknüpfungsbefehle", + "(runs when a player is linked to account)": "(läuft, wenn ein Spieler mit einem Konto verknüpft ist)", + "Username of the player which is linked.": "Benutzername des verlinkten Spielers.", + "Unique Id of the player which is linked.": "Eindeutige ID des verknüpften Spielers.", + "Run on servers": "Auf Servern ausführen", + "Run on first link only": "Nur auf dem ersten Link ausführen", + "This command should only run if given player is getting linked for first time. (Eg: This wont run if player get unlinked and then linked again)": "Dieser Befehl sollte nur ausgeführt werden, wenn ein bestimmter Spieler zum ersten Mal verknüpft wird. (Beispiel: Dies wird nicht ausgeführt, wenn die Verknüpfung des Spielers aufgehoben und dann erneut verknüpft wird.)", + "No commands on account link.": "Keine Befehle für die Kontoverknüpfung.", + "Add New Link Command": "Befehl „Neuen Link hinzufügen“ hinzufügen", + "Account Unlink Success Commands": "Erfolgreiche Befehle zum Aufheben der Kontoverbindung", + "(runs when a player is unlinked from account)": "(wird ausgeführt, wenn die Verknüpfung eines Spielers mit dem Konto aufgehoben wird)", + "Username of the player which is unlinked.": "Benutzername des Spielers, der nicht verknüpft ist.", + "Unique Id of the player which is unlinked.": "Eindeutige ID des Spielers, der nicht verknüpft ist.", + "Run on first unlink only": "Nur beim ersten Aufheben der Verknüpfung ausführen", + "This command should only run if given player is getting unlinked for first time. (Eg: This wont run if player was linked and unlinked before)": "Dieser Befehl sollte nur ausgeführt werden, wenn die Verbindung zu einem bestimmten Spieler zum ersten Mal getrennt wird. (Beispiel: Dies wird nicht ausgeführt, wenn der Player zuvor verknüpft und wieder getrennt wurde.)", + "No commands on account unlink.": "Keine Befehle zum Aufheben der Verknüpfung des Kontos.", + "Add New Unlink Command": "Neuen Befehl zum Aufheben der Verknüpfung hinzufügen", "Enable Player Rank Sync": "Spielerrang-Synchronisierung aktivieren", "Enable this if you want to sync your player rank from server instead of website calculated rank. you must create a rank for each group you have in server making sure rank shortname matches the name of your player group in server.": "Aktivieren Sie dies, wenn Sie Ihren Spielerrang vom Server anstelle des von der Website berechneten Rangs synchronisieren möchten. Sie müssen für jede Gruppe, die Sie auf dem Server haben, einen Rang erstellen und sicherstellen, dass der Kurzname des Rangs mit dem Namen Ihrer Spielergruppe auf dem Server übereinstimmt.", "Rank Sync From Server": "Rangsynchronisierung vom Server", @@ -987,6 +1044,7 @@ "Joined": "Trat bei", "Flags": "Flaggen", "Users Administration": "Benutzerverwaltung", + "Discord ID": "Discord-ID", "Muted": "Stummgeschaltet", "Banned": "Verboten", "View Profile": "Profil anzeigen", @@ -1188,10 +1246,10 @@ "Someone liked my Post": "jemandem mein Beitrag gefallen hat.", "I am muted by Staff": "ich von Staff stummgeschaltet wurde.", "I am banned by Staff": "ich von Staff gesperrt wurde.", - "Recruitment submission status changed": "Der Status der Stellenausschreibung wurde geändert", - "New message in recruitment submission": "Neue Nachricht in der Stellenausschreibung", + "Application request status changed": "Der Status der Bewerbungsanfrage wurde geändert", + "New message in application request": "Neue Nachricht in der Bewerbungsanfrage", "For staff members": "Für Mitarbeiter", - "Recruitment submission received": "Einstellungsantrag eingegangen", + "Application request received": "Bewerbungsanfrage eingegangen", "Custom form submission received": "Benutzerdefinierte Formularübermittlung erhalten", "Someone commented on News": "Jemand hat die Nachrichten kommentiert", "Saved.": "Gespeichert.", @@ -1213,25 +1271,25 @@ "Mark all as read": "Alles als gelesen markieren", "No notifications to show.": "Keine Benachrichtigungen zum Anzeigen.", "Last Updated": "Letzte Aktualisierung", - "Recruitments": "Rekrutierungen", + "Application Forms": "Antragsformulare", "View My Applications": "Meine Bewerbungen anzeigen", "Only for Verified Users": "Nur für verifizierte Benutzer", "Only for Linked Account Users (Player linked)": "Nur für Benutzer mit verknüpftem Konto (mit Spieler verknüpft)", "Apply": "Anwenden", "Application Closed!": "Bewerbung geschlossen!", "Login or Register to Apply!": "Melden Sie sich an oder registrieren Sie sich, um sich zu bewerben!", - "You need to be logged in to apply to this recruitment.": "Sie müssen angemeldet sein, um sich für diese Stellenausschreibung zu bewerben.", + "You need to be logged in to apply to this application.": "Sie müssen angemeldet sein, um sich für diese Bewerbung zu bewerben.", "Max Submissions Reached!": "Maximale Anzahl an Einsendungen erreicht!", "You are on a Cooldown!": "Du befindest dich in einer Abklingzeit!", "Account Verification Required!": "Kontobestätigung erforderlich!", "Account Linking Required!": "Kontoverknüpfung erforderlich!", "You have already applied!": "Sie haben sich bereits beworben!", - "View Application": "Anwendung anzeigen", + "View Request": "Anfrage anzeigen", "Already approved in past! Wanna apply again?": "Bereits in der Vergangenheit genehmigt! Möchten Sie sich erneut bewerben?", "You may wanna check that before applying again.": "Möglicherweise möchten Sie dies überprüfen, bevor Sie sich erneut bewerben.", - "View Approved Application": "Genehmigten Antrag anzeigen", - "My Recruitment Applications": "Meine Bewerbungen", - "Your application for :recruitmenttitle #:index - Recruitments": "Ihre Bewerbung für :recruitmenttitle #:index - Recruiting", + "View Approved Request": "Genehmigte Anfrage anzeigen", + "My Application Requests": "Meine Bewerbungsanfragen", + "Your application request for :recruitmenttitle #:index - Applications": "Ihre Bewerbungsanfrage für :recruitmenttitle #:index - Bewerbungen", "Application for :recruitmenttitle #:index": "Anwendung für :recruitmenttitle #:index", "Success! A staff will soon review your application. Please be patience.": "Erfolg! Ein Mitarbeiter wird Ihren Antrag in Kürze prüfen. Bitte haben Sie Geduld.", "Withdraw": "Zurückziehen", @@ -1246,7 +1304,11 @@ "You can link upto :count :player to your account! ( :left available )": "Sie können bis zu :count :player mit Ihrem Konto verknüpfen! ( :left verfügbar)", "player": "Spieler", "players": "Spieler", - "Initiate the process by joining the server and typing \/account-link in chat. A link will be generated, click on that link and your player will added to your account.": "Starten Sie den Vorgang, indem Sie dem Server beitreten und \/account-link im Chat eingeben. Ein Link wird generiert, klicken Sie auf diesen Link und Ihr Spieler wird Ihrem Konto hinzugefügt.", + "To link a player to your account, join server and type '\/link :otp' in your chat.": "Um einen Spieler mit Ihrem Konto zu verknüpfen, treten Sie dem Server bei und geben Sie „\/link :otp“ in Ihren Chat ein.", + "Copied!": "Kopiert!", + "This OTP will expire in :seconds seconds.": "Dieses OTP läuft in :seconds Sekunden ab.", + "This OTP has expired. Refresh the page to get a new OTP.": "Dieses OTP ist abgelaufen. Aktualisieren Sie die Seite, um ein neues OTP zu erhalten.", + "Click here to refresh.": "Klicken Sie hier, um zu aktualisieren.", "No players linked to your account right now.": "Derzeit sind keine Spieler mit Ihrem Konto verknüpft.", "Change Skin of this player.": "Ändere den Skin dieses Spielers.", "Are you sure you want to unlink this player from your account?": "Sind Sie sicher, dass Sie die Verknüpfung dieses Spielers mit Ihrem Konto aufheben möchten?", @@ -1377,11 +1439,9 @@ "Used Memory (MB)": "Verwendeter Arbeitsspeicher (MB)", "Server Status": "Server Status", "Join": "Verbinden", - "Copied!": "Kopiert!", "SETTINGS": "DIE EINSTELLUNGEN", "Theme": "Thema", "Plugin": "Plugin", - "Player": "Spieler", "Navigation": "Navigation", "Delete this shout permanently?": "Diesen Shout dauerhaft löschen?", "No shouts yet.": "Noch keine Schreie.", @@ -1433,5 +1493,18 @@ "You are muted by": "Du bist stummgeschaltet durch", "Role Weight to View Submission": "Rollengewicht zum Anzeigen der Einreichung", "Slug": "Schnecke", - "via Email": "per Email" + "Minetrax only support adding one bungee server. This server will be used to show online players and server status. All sensitive information will be encrypted.": "Minetrax unterstützt nur das Hinzufügen eines Bungee-Servers. Dieser Server wird verwendet, um Online-Spieler und den Serverstatus anzuzeigen. Alle sensiblen Informationen werden verschlüsselt.", + "Please note Proxy servers don't need Minetrax.jar plugin. Only install them on actual servers like spigot, bukkit etc.": "Bitte beachten Sie, dass Proxy-Server kein Minetrax.jar-Plugin benötigen. Installieren Sie sie nur auf tatsächlichen Servern wie Spigot, Bukkit usw.", + "Eg: 25585": "Beispiel: 25585", + "Edit Bungee Server": "Bungee-Server bearbeiten", + "Server Online": "Online-Server", + "Server Offline": "Server offline", + "WebQuery Online": "WebQuery Online", + "WebQuery Offline": "WebQuery Offline", + "Account Link Success Command": "Befehl zum Erfolg der Kontoverknüpfung", + "Use this to reward players when they link account: Eg: give {PLAYER} diamond 1": "Verwenden Sie dies, um Spieler zu belohnen, wenn sie ein Konto verknüpfen: Beispiel: Geben Sie {SPIELER} Diamant 1", + "Account Link Success Broadcast": "Erfolgreiche Übertragung der Kontoverknüpfung", + "If set then this will be broadcast to server when player link is successful: Eg: {PLAYER} has successfully linked his account and won a ultra key.": "Wenn gesetzt, wird dies an den Server gesendet, wenn die Spielerverknüpfung erfolgreich ist: Beispiel: {PLAYER} hat sein Konto erfolgreich verknüpft und einen Ultra Key gewonnen.", + "via Email": "per Email", + "Initiate the process by joining the server and typing \/account-link in chat. A link will be generated, click on that link and your player will added to your account.": "Starten Sie den Vorgang, indem Sie dem Server beitreten und \/account-link im Chat eingeben. Ein Link wird generiert, klicken Sie auf diesen Link und Ihr Spieler wird Ihrem Konto hinzugefügt." } \ No newline at end of file diff --git a/lang/es.json b/lang/es.json index 87bedadaa..4a90a879f 100644 --- a/lang/es.json +++ b/lang/es.json @@ -1,16 +1,8 @@ { "Email\/Password authentication is disabled.": "La autenticación de correo electrónico\/contraseña está deshabilitada.", "The provided password does not match your current password.": "La contraseña proporcionada no coincide con su contraseña actual.", - "Link expired or invalid!": "¡Enlace caducado o inválido!", - "Please request a fresh link and try again.": "Solicite un enlace nuevo y vuelva a intentarlo.", - "Player not found in database!": "¡No se encuentra el jugador en la base de datos!", - "Please wait for sometime for server to update its player database.": "Espere un momento a que el servidor actualice su base de datos de jugadores.", - "Player already linked to a user!": "¡El jugador ya está vinculado a un usuario!", - "If you own this user please unlink it from your another account or contact administrator.": "Si es el propietario de este usuario, desvincúlelo de su otra cuenta o comuníquese con el administrador.", - "User already have max :max_slots players linked!": "¡El usuario ya tiene un máximo de :max_slots jugadores vinculados!", - "If you want to link this player please unlink a player.": "Si desea vincular este reproductor, desvincule un reproductor.", - "Played linked successfully!": "¡Jugado vinculado con éxito!", - "This player is now linked to your account.": "Este jugador ahora está vinculado a su cuenta.", + "Player unlinking disabled!": "¡Desvinculación del jugador desactivada!", + "Player unlinking is disabled by the administrator.": "El administrador desactiva la desvinculación del jugador.", "Player not found!": "¡Jugador no encontrado!", "No player with that ID found linked to your account.": "No se encontró ningún jugador con esa ID vinculado a su cuenta.", "Played unlinked successfully!": "¡Jugado desvinculado con éxito!", @@ -22,6 +14,11 @@ "Badge updated successfully": "Insignia actualizada con éxito", "Deleted Successfully": "Borrado exitosamente", "Badge has been deleted permanently": "La insignia se ha eliminado de forma permanente", + ":count Commands Scheduled!": "¡Comandos :count programados!", + "Commands has been scheduled for execution. Check the status in Command History.": "Los comandos han sido programados para su ejecución. Verifique el estado en el Historial de comandos.", + "Deleted!": "¡Eliminado!", + "Retried!": "¡Reintentado!", + "Command has been queued for retrying! Refresh the page after few seconds to check the status.": "¡El comando está en cola para volver a intentarlo! Actualice la página después de unos segundos para verificar el estado.", "Custom Form is created successfully": "El formulario personalizado se creó correctamente", "Custom Form updated successfully": "Formulario personalizado actualizado correctamente", "Custom Form has been deleted permanently": "El formulario personalizado se ha eliminado permanentemente", @@ -38,6 +35,8 @@ "Download has been created successfully": "La descarga se ha creado correctamente.", "Download has been updated successfully": "La descarga se ha actualizado correctamente.", "Download has been deleted permanently": "La descarga se ha eliminado permanentemente.", + "Retry Queued!": "¡Reintentar en cola!", + "Job has been queued for retrying!": "¡El trabajo está en cola para volver a intentarlo!", "Online Players": "Jugadores en línea", "TPS": "TPS", "CPU Load (%)": "Carga de CPU (%)", @@ -63,12 +62,12 @@ "Rank updated successfully": "Rango actualizado con éxito", "Rank has been deleted permanently": "El rango se ha eliminado de forma permanente", "Rank Reset Successful": "Restablecimiento de rango exitoso", - "Recruitment Form is created successfully": "El formulario de contratación se creó correctamente", - "Recruitment Form updated successfully": "Formulario de reclutamiento actualizado exitosamente", - "Recruitment Form has been deleted permanently": "El formulario de contratación se ha eliminado permanentemente.", - "Recruitment Submission deleted successfully": "Envío de reclutamiento eliminado exitosamente", + "Application Form is created successfully": "El formulario de solicitud se creó correctamente", + "Application Form updated successfully": "Formulario de solicitud actualizado con éxito", + "Application Form has been deleted permanently": "El formulario de solicitud se ha eliminado permanentemente.", + "Request deleted successfully": "Solicitud eliminada exitosamente", "Action Successful": "Acción exitosa", - "Recruitment Submission action has been completed successfully": "La acción de envío de reclutamiento se ha completado con éxito", + "Request action has been completed successfully": "La acción de solicitud se ha completado con éxito", "Message Successfully": "Mensaje exitoso", "Message has been deleted successfully": "El mensaje ha sido eliminado exitosamente", "New Role is created successfully": "El nuevo rol se crea con éxito", @@ -78,8 +77,7 @@ ":role cannot be deleted because there are users on this role.!": ":role no se puede eliminar porque hay usuarios en este rol.!", "Role has been deleted!": "¡El rol ha sido eliminado!", "New server added successfully": "Nuevo servidor agregado exitosamente", - "Bungee server added successfully": "Servidor Bungee añadido con éxito", - "Bungee server updated successfully": "Servidor Bungee actualizado con éxito", + "Proxy server added successfully": "Servidor proxy agregado exitosamente", "Server updated successfully": "Servidor actualizado con éxito", "Server has been deleted permanently": "El servidor ha sido eliminado permanentemente", "Rescan Queued!": "¡Volver a escanear en cola!", @@ -117,10 +115,16 @@ "User deleted successfully": "Usuario eliminado con éxito", "Player not found": "Jugador no encontrado", "Player already linked to a user": "Jugador ya vinculado a un usuario", - "Failed to start player session.": "No se pudo iniciar la sesión del jugador.", - "Failed reporting player pvp kill.": "No se ha podido informar de la muerte de JcJ del jugador.", + "Provided OTP is invalid or expired. Please try again.": "La OTP proporcionada no es válida o ha caducado. Inténtalo de nuevo.", + "You already have max :max_slots players linked!": "¡Ya tienes un máximo de :max_slots jugadores vinculados!", + "Player linked successfully": "Jugador vinculado exitosamente", + "Player intel is disabled for this server.": "La información del jugador está deshabilitada para este servidor.", + "Failed to start player session. :message": "No se pudo iniciar la sesión del jugador. :message", + "Failed reporting player pvp kill: :message": "Error al informar la muerte del jugador pvp: :message", + "Failed reporting player death: :message": "Error al informar la muerte del jugador: :message", "PlayerIntel event for :username reported successfully.": "Evento de PlayerIntel para :username informado con éxito.", - "Failed to report Event data.": "No se pudieron informar los datos del evento.", + "Failed to report Event data: :message": "No se pudieron informar los datos del evento: :message", + "Server Intel failed to report: :message": "El servidor Intel no pudo informar: :message", "Submit Successful!": "¡Enviar con éxito!", "Form has been submitted successfully.": "El formulario se ha enviado correctamente.", "Comments are not allowed for this news": "No se permiten comentarios para esta noticia.", @@ -139,7 +143,7 @@ "Applied Successfully!": "¡Aplicado con éxito!", "Application has been submitted successfully.": "La solicitud ha sido enviada exitosamente.", "Withdraw Successful": "Retiro exitoso", - "Recruitment Submission withdrawn successfully": "Presentación de reclutamiento retirada exitosamente", + "Application Request withdrawn successfully": "Solicitud de solicitud retirada con éxito", "Failed to ping server": "Error al hacer ping al servidor", "Failed to query server": "No se pudo consultar el servidor", "Web Query Failed": "Consulta web fallida", @@ -164,20 +168,20 @@ "[Notification] :user commented on your post": "[Notificación] :user comentó tu publicación", "[Notification] Someone liked your post": "[Notificación] A alguien le gustó tu publicación", "[Notification] :user liked your post": "[Notificación] A :user le gustó tu publicación.", - "[Notification] New message received on a recruitment application.": "[Notificación] Nuevo mensaje recibido en una solicitud de contratación.", - ":causer sent new message on his application for :recruitment:": ":causer envió un nuevo mensaje en su solicitud para :recruitment:", - "[Notification] Your application has a new message.": "[Notificación] Tu aplicación tiene un mensaje nuevo.", - ":causer sent you a message on your application for :recruitment:": ":causer te envió un mensaje en tu solicitud para :recruitment:", - "[Notification] New recruitment application received.": "[Notificación] Nueva solicitud de contratación recibida.", - "[Notification] An application withdrawn by user.": "[Notificación] Una solicitud retirada por el usuario.", - ":applicant has withdrawn his application for :recruitment.": ":applicant ha retirado su solicitud para :recruitment.", - "[Notification] Your Application status has changed.": "[Notificación] El estado de su solicitud ha cambiado.", - ":causer has started processing your application for :recruitment.": ":causer ha comenzado a procesar su solicitud para :recruitment.", - ":causer has put on-hold your application for :recruitment.": ":causer ha puesto en espera su solicitud para :recruitment.", - "[Notification] Congratulations! Your Application has been Approved.": "[Notificación] ¡Felicitaciones! Su solicitud ha sido aprobada.", - ":causer has approved your application for :recruitment.": ":causer ha aprobado su solicitud para :recruitment.", - "[Notification] Sorry! Your Application has been Rejected.": "[Notificación] ¡Lo siento! Su solicitud ha sido rechazada.", - ":causer has rejected your application for :recruitment.": ":causer ha rechazado su solicitud para :recruitment.", + "[Notification] New message received on a application request.": "[Notificación] Nuevo mensaje recibido en una solicitud de solicitud.", + ":causer sent new message on his application request for :recruitment:": ":causer envió un nuevo mensaje en su solicitud de solicitud para :recruitment:", + "[Notification] Your application request has a new message.": "[Notificación] Su solicitud de solicitud tiene un mensaje nuevo.", + ":causer sent you a message on your application request for :recruitment:": ":causer le envió un mensaje en su solicitud de solicitud para :recruitment:", + "[Notification] New application request received.": "[Notificación] Nueva solicitud de solicitud recibida.", + "[Notification] An application request withdrawn by user.": "[Notificación] Una solicitud de solicitud retirada por el usuario.", + ":applicant has withdrawn his application request for :recruitment.": ":applicant ha retirado su solicitud de solicitud para :recruitment.", + "[Notification] Your Application request status has changed.": "[Notificación] El estado de su solicitud de solicitud ha cambiado.", + ":causer has started processing your application request for :recruitment.": ":causer ha comenzado a procesar su solicitud de solicitud para :recruitment.", + ":causer has put on-hold your application request for :recruitment.": ":causer ha puesto en espera su solicitud de solicitud para :recruitment.", + "[Notification] Congratulations! Your Application request has been Approved.": "[Notificación] ¡Felicitaciones! Su solicitud de solicitud ha sido aprobada.", + ":causer has approved your application request for :recruitment.": ":causer ha aprobado su solicitud de solicitud para :recruitment.", + "[Notification] Sorry! Your Application request has been Rejected.": "[Notificación] ¡Lo siento! Su solicitud de solicitud ha sido rechazada.", + ":causer has rejected your application request for :recruitment.": ":causer ha rechazado su solicitud de solicitud para :recruitment.", "[Notification] You are Banned by :user": "[Notificación] Estás baneado por :user", "Oh no! You are banned by a staff member and can no longer access our website. If you think this was a mistake please create an appeal.": "¡Oh, no! Un miembro del personal te ha baneado y ya no puede acceder a nuestro sitio web. Si crees que esto fue un error, crea una apelación.", "Banned by: :user": "Baneado por: :user", @@ -185,8 +189,9 @@ "Oh no! You are muted by a staff member and can no longer send messages or chat in our website. If you think this was a mistake please create an appeal.": "¡Oh, no! Un miembro del personal lo silencia y ya no puede enviar mensajes ni chatear en nuestro sitio web. Si cree que esto fue un error, cree una apelación.", "Muted by: :user": "Silenciado por: :user", "Failed to upload skin to MineSkin. Please try again later": "No se pudo cargar la máscara en MineSkin. Por favor, inténtelo de nuevo más tarde", - "Oh Jeez! Something went wrong. Please try again later.": "¡Oh Dios! Algo salió mal. Por favor, inténtelo de nuevo más tarde.", "Error setting player skin. Please make sure provided skin is valid.": "Error al configurar la máscara del reproductor. Asegúrese de que la máscara proporcionada sea válida.", + "Provided UUID is not valid.": "El UUID proporcionado no es válido.", + "WebQuery failed for unknown reasons. Please check minecraft server logs.": "WebQuery falló por motivos desconocidos. Consulte los registros del servidor de Minecraft.", "Minecraft Servers & Players Tracking": "Seguimiento de servidores y jugadores de Minecraft", "Use Light Theme": "Usar tema claro", "Use Dark Theme": "Usar tema oscuro", @@ -197,6 +202,8 @@ "We use cookies to enhance your browsing experience. By continuing, you consent to our cookie policy.": "Utilizamos cookies para mejorar su experiencia de navegación. Al continuar, aceptas nuestra política de cookies.", "I Understand": "Entiendo", "Reset": "Reiniciar", + "Filter by :column": "Filtrar por :column", + "Clear": "Claro", "No data found": "Datos no encontrados", "Previous": "Anterior", "Next": "Próximo", @@ -218,15 +225,15 @@ "Logout": "Cerrar sesión", "An anonymous user": "Un usuario anónimo", "submitted a custom form.": "envió un formulario personalizado.", - "applied for a recruitment.": "solicitó un reclutamiento.", + "created a new application request.": "creó una nueva solicitud de solicitud.", " has withdrawn his application.": "ha retirado su solicitud.", " rejected your application.": "rechazó su solicitud.", " approved your application.": "aprobó su solicitud.", " has put your application on-hold.": "ha puesto su solicitud en espera.", " has started processing your application.": "ha comenzado a procesar su solicitud.", " has changed status of your application": "ha cambiado el estado de su solicitud", - "New message received on a recruitment application.": "Nuevo mensaje recibido en una solicitud de contratación.", - "Your application has a new message from @:username": "Su aplicación tiene un nuevo mensaje de @:nombredeusuario", + "New message received on an application request.": "Nuevo mensaje recibido en una solicitud de solicitud.", + "Your application request received a new message from @:username": "Su solicitud de solicitud recibió un nuevo mensaje de @:nombre de usuario", "Poll starting": "Comienzo de la encuesta", "Poll closing": "cierre de encuesta", "Are you sure you want to delete this Post?": "¿Está seguro de que desea eliminar esta publicación?", @@ -242,6 +249,7 @@ "Staff Member": "Miembro del equipo", "Muted User": "Usuario silenciado", "Password": "Clave", + "Continue with empty password if you have no password.": "Continúe con la contraseña vacía si no tiene contraseña.", "Cancel": "Cancelar", "Whoops! Something went wrong.": "¡Vaya! Algo salió mal.", "Leave Impersonation": "Dejar suplantación de identidad", @@ -281,6 +289,37 @@ "Badge": "Placa", "Badge Image": "Imagen de la insignia", "Delete Badge": "Eliminar insignia", + "Run Command": "Ejecutar comando", + "Scope": "Alcance", + "Global": "Global", + "Run generic command": "Ejecutar comando genérico", + "Player": "Jugador", + "Run against players": "Corre contra jugadores", + "Available Placeholders": "Marcadores de posición disponibles", + "Username of the player the command is running on.": "Nombre de usuario del reproductor en el que se ejecuta el comando.", + "Unique Id of the player the command is running on.": "ID único del reproductor en el que se ejecuta el comando.", + "Enter command to run...": "Ingrese el comando para ejecutar...", + "Servers to run on": "Servidores para ejecutar", + "Leave empty to run on all servers": "Déjelo vacío para ejecutarlo en todos los servidores.", + "Players to run on": "Jugadores para correr", + "Select players": "Seleccionar jugadores", + "Select players to run command on": "Seleccionar jugadores para ejecutar el comando", + "Require player to be online": "Requerir que el jugador esté en línea", + "This command should only run if player is online on running server. If not online it will be queued to run when player comes online.": "Este comando solo debe ejecutarse si el jugador está en línea en el servidor en ejecución. Si no está en línea, se pondrá en cola para ejecutarse cuando el jugador se conecte.", + "Command": "Dominio", + "Server": "Servidor", + "Status": "Estado", + "Last Attempted": "Último intento", + "Execute At": "Ejecutar en", + "Tags": "Etiquetas", + "For Player": "Para jugador", + "Output": "Producción", + "Command History": "Historial de comandos", + "Retry All Failed": "Reintentar todo falló", + "Attempts: :attempts\/:max_attempts": "Intentos: :attempts\/:max_attempts", + "none": "N\/A", + "Retry Command": "Comando de reintento", + "Delete Command": "Eliminar comando", "Create Custom Form": "Crear formulario personalizado", "Title of Custom Form": "Título del formulario personalizado", "Eg: Contact Us": "Por ejemplo: Contáctenos", @@ -303,7 +342,6 @@ "Edit Custom Form": "Editar formulario personalizado", "Update Custom Form": "Actualizar formulario personalizado", "Title": "Título", - "Status": "Estado", "Can Submit": "Puede enviar", "Notify Staff on Submit": "Notificar al personal al enviar", "Visible in Listing": "Visible en el listado", @@ -323,7 +361,6 @@ "Max submission per user": "Envío máximo por usuario", "not applicable": "no aplica", "Minimum staff role weight to view submissions": "Peso mínimo del rol del personal para ver los envíos", - "none": "N/A", "Notify staff on new submission": "Notificar al personal sobre un nuevo envío", "Updated": "Actualizado", "Country": "País", @@ -410,6 +447,17 @@ "External URL is protected from end users.": "La URL externa está protegida de los usuarios finales.", "Minimum Role Weight Required to Download": "Peso mínimo de función necesario para descargar", "Delete Download": "Eliminar Descargar", + "UUID": "UUID", + "Job": "Trabajo", + "Connection\/Queue": "Conexión\/Cola", + "Exception": "Excepción", + "Failed At": "Falló en", + "Failed Jobs": "Trabajos fallidos", + "Retry All Jobs": "Reintentar todos los trabajos", + "Clear All Jobs": "Borrar todos los trabajos", + "Attempts: :attempts": "Intentos: :attempts", + "Retry Job": "Reintentar trabajo", + "Delete Job": "Eliminar trabajo", "Create News": "Crear noticias", "News Category": "Categoría de noticias", "General": "General", @@ -437,7 +485,7 @@ "Join Address": "Unido desde", "MC Version": "Versión MC", "First Seen": "Visto por primera vez", - "Last Seen": "Visto por última vez ", + "Last Seen": "Visto por última vez ", "Players - PlayerIntel": "Jugadores - PlayerIntel", "Players": "jugadores", "servers": "servidores", @@ -486,11 +534,11 @@ "Reset to Default Ranks": "Restablecer rangos predeterminados", "Rank": "Rango", "Delete Rank": "Eliminar rango", - "Create Recruitment Form": "Crear formulario de reclutamiento", - "Title of this Recruitment": "Título de este Reclutamiento", + "Create Application Form": "Crear formulario de solicitud", + "Title of this Application": "Título de esta solicitud", "Eg: Apply to be a Staff Member": "Por ejemplo: postularse para ser miembro del personal", - "Recruitment Slug": "Babosa de reclutamiento", - "Recruitment Status": "Estado de reclutamiento", + "Application Slug for URL": "Aplicación Slug para URL", + "Application Status": "Estado de la aplicación", "How many times a user can reapply after rejection. Leave empty for no limit.": "Cuántas veces un usuario puede volver a presentar su solicitud después del rechazo. Déjelo vacío sin límite.", "Submission Cooldown in Seconds": "Enfriamiento de envío en segundos", "After how many seconds user can reapply this application. Leave empty for no cooldown.": "Después de cuántos segundos el usuario puede volver a aplicar esta aplicación. Déjelo vacío para que no haya tiempo de reutilización.", @@ -499,20 +547,19 @@ "Leave empty to allow any staff with [vote recruitment_submissions] permission to vote on submissions.": "Déjelo en blanco para permitir que cualquier miembro del personal con permiso [vote reclutamiento_submissions] vote sobre las presentaciones.", "Min Staff Role Weight to Act on Submission": "Peso mínimo del rol del personal para actuar en base a la sumisión", "Min staff role weight required to Approve\/Reject on submission. Leave empty to allow any staff with [acton recruitment_submissions] permission to act on submissions.": "Peso mínimo del rol del personal requerido para aprobar\/rechazar el envío. Déjelo vacío para permitir que cualquier miembro del personal con permiso [acton reclutamiento_submissions] pueda actuar sobre los envíos.", - "If this recruitment is for hiring of a specific role, select the role here.": "Si este reclutamiento es para la contratación de un rol específico, seleccione el rol aquí.", - "Create Recruitment": "Crear reclutamiento", - "Edit Recruitment Form": "Editar formulario de contratación", - "Update Recruitment": "Actualizar Reclutamiento", + "If this application is for hiring of a specific role, select the role here.": "Si esta solicitud es para la contratación de un rol específico, seleccione el rol aquí.", + "Edit Application Form": "Editar formulario de solicitud", + "Update Application Form": "Actualizar formulario de solicitud", "Notify Staff": "Notificar al personal", "Messaging": "Mensajería", "Open Requests": "Solicitudes abiertas", "Closed Requests": "Solicitudes cerradas", - "Manage Recruitment Forms": "Administrar formularios de reclutamiento", - "Recruitment": "Reclutamiento", - "Delete Recruitment": "Eliminar reclutamiento", - ":title Intel - Recruitments": ":title Intel - Reclutamiento", + "Manage Application Forms": "Administrar formularios de solicitud", + "Application Form": "Formulario de aplicación", + "Delete Application Form": "Eliminar formulario de solicitud", + ":title Intel - Application Form": ":title Intel - Formulario de solicitud", ":title - Intel": ":title-Intel", - "This recruitment hiring for": "Esta contratación de reclutamiento para", + "This application hiring for": "Esta aplicación de contratación para", "Submission Cooldown": "Enfriamiento de envío", "Allow only Player Linked Users": "Permitir solo usuarios vinculados al jugador", "Allow only Verified Users": "Permitir solo usuarios verificados", @@ -520,16 +567,19 @@ "Enable Messaging Feature": "Habilitar función de mensajería", "Notify staff on Events": "Notificar al personal sobre eventos", "Applicant": "Solicitante", + "Application": "Solicitud", + "Last Actor": "último actor", + "Last Comment": "Último comentario", "Updated At": "Actualizado en", - "Closed Request - Recruitments": "Solicitud cerrada - Reclutamiento", - "Open Requests - Recruitments": "Solicitudes abiertas - Reclutamiento", - "Closed Recruitment Submissions:": "Presentaciones de reclutamiento cerradas:", - "Open Recruitment Submissions:": "Presentaciones de reclutamiento abiertas:", - "All Recruitments": "Todo el reclutamiento", - ":user application for :recruitmenttitle #:index - Recruitments": "Solicitud :user para :recruitmenttitle #:index - Reclutamientos", + "Closed Request - Applications": "Solicitud cerrada - Aplicaciones", + "Open Requests - Applications": "Solicitudes abiertas - Aplicaciones", + "Closed Requests:": "Solicitudes cerradas:", + "Open Requests:": "Solicitudes abiertas:", + "All Applications": "Todas las aplicaciones", + ":user application for :recruitmenttitle #:index - Applications": "Aplicación :user para :recruitmenttitle #:index - Aplicaciones", ":user application for :recruitmenttitle #:index": ":user aplicación para :recruitmenttitle #:índice", "Last Updated At": "Última actualización en", - "Submission Status": "Estado de presentación", + "Request Status": "Estado de la solicitud", "Reason": "Razón", "Marked :status By": "Marcado :status por", "Mark In-Progress": "Marcar en curso", @@ -580,8 +630,8 @@ "Go back to Server List": "Volver a la lista de servidores", "Add Bungee Server": "Añadir servidor Bungee", "Edit Bungee Server: :name": "Editar servidor Bungee: :name", - "Minetrax only support adding one bungee server. This server will be used to show online players and server status. All sensitive information will be encrypted.": "Minetrax solo admite agregar un servidor bungee. Este servidor se utilizará para mostrar los jugadores en línea y el estado del servidor. Toda la información confidencial será encriptada.", - "Please note Proxy servers don't need Minetrax.jar plugin. Only install them on actual servers like spigot, bukkit etc.": "Tenga en cuenta que los servidores proxy no necesitan el complemento Minetrax.jar. Solo instálelos en servidores reales como spigot, bukkit, etc.", + "Add Bungee\/Velocity Server": "Agregar servidor Bungee\/Velocity", + "Edit Bungee\/Velocity Server: :name": "Editar servidor Bungee\/Velocity: :name", "Server Name": "Nombre del servidor", "Eg: My Bungee Server": "Por ejemplo: Mi servidor Bungee", "Hostname": "nombre de host", @@ -593,27 +643,26 @@ "Query Port": "Puerto de consulta", "Eg: 25575": "Por ejemplo: 25575", "Webquery Port": "Puerto de consulta web", - "Eg: 25585": "Por ejemplo: 25585", + "WebQuery port is a new port which MineTrax plugin will open for secure connection between server and web. Enter a port value which is available and can be open. Eg: 25569": "El puerto WebQuery es un nuevo puerto que el complemento MineTrax abrirá para una conexión segura entre el servidor y la web. Introduzca un valor de puerto que esté disponible y pueda abrirse. Por ejemplo: 25569", "Server Version": "Versión del servidor", "Select version..": "Seleccionar versión..", - "Edit Bungee Server": "Editar servidor Bungee", - "Add New Server": "Agregar nuevo servidor", + "Enable Server Intel \/ Analytics": "Habilitar servidor Intel\/Análisis", + "If enabled, server analytics data (performance metric, join activity etc) will be captured for this server via plugin.": "Si está habilitado, los datos analíticos del servidor (métrica de rendimiento, actividad de unión, etc.) se capturarán para este servidor mediante un complemento.", + "Enable Skin Change via Web (SkinsRestorer)": "Habilitar cambio de máscara a través de la web (SkinsRestorer)", + "Allow user to change their linked players skin via web for this server. This will require SkinsRestorer plugin to be installed on the server.": "Permitir al usuario cambiar el aspecto de sus jugadores vinculados a través de la web para este servidor. Esto requerirá que el complemento SkinsRestorer esté instalado en el servidor.", "Add Server": "Agregar servidor", + "Edit Server": "Editar servidor", + "Add New Server": "Agregar nuevo servidor", "This name will help to identify this server. Eg: Survival, Skyblock, etc.": "Este nombre ayudará a identificar este servidor. Por ejemplo: Supervivencia, Skyblock, etc.", "Publicly visible join address of the server. Eg: play.example.com": "Dirección de unión públicamente visible del servidor. Por ejemplo: play.example.com", "Higher the weight, higher the priority. Eg: 1,3,10 etc. Can be left empty.": "Cuanto mayor sea el peso, mayor será la prioridad. Por ejemplo: 1,3,10, etc. Se puede dejar vacío.", - "WebQuery port is a new port which MineTrax plugin will open for secure connection between server and web. Enter a port value which is available and can be open. Eg: 25569": "El puerto WebQuery es un nuevo puerto que el complemento MineTrax abrirá para una conexión segura entre el servidor y la web. Introduzca un valor de puerto que esté disponible y pueda abrirse. Por ejemplo: 25569", "Select server type": "Seleccionar tipo de servidor", "Server Type": "Tipo de servidor", "Version": "Versión", - "Enable Server Intel \/ Analytics": "Habilitar servidor Intel\/Análisis", - "If enabled, server analytics data (performance metric, join activity etc) will be captured for this server via plugin.": "Si está habilitado, los datos analíticos del servidor (métrica de rendimiento, actividad de unión, etc.) se capturarán para este servidor mediante un complemento.", "Enable Player Intel \/ Analytics": "Habilitar jugador Intel\/Análisis", "If enabled, player intel & statistics data will be captured for this server via plugin.": "Si está habilitado, los datos estadísticos e información del jugador se capturarán para este servidor a través del complemento.", "Enable In-Game Chat": "Habilitar chat en el juego", "Enable in-game chat for this server, which allow users to view & chat to in-game players from website.": "Habilite el chat en el juego para este servidor, que permite a los usuarios ver y chatear con los jugadores del juego desde el sitio web.", - "Enable Skin Change via Web (SkinsRestorer)": "Habilitar cambio de máscara a través de la web (SkinsRestorer)", - "Allow user to change their linked players skin via web for this server. This will require SkinsRestorer plugin to be installed on the server.": "Permitir al usuario cambiar el aspecto de sus jugadores vinculados a través de la web para este servidor. Esto requerirá que el complemento SkinsRestorer esté instalado en el servidor.", "Edit Server: :name": "Editar servidor: :name", "Update Server": "Actualizar servidor", "IP:Port": "IP:Puerto", @@ -623,17 +672,12 @@ "Servers": "Servidores", "Sync Player Statistics": "Sincronizar estadísticas del jugador", "Add": "Agregar", - "Server": "Servidor", "Add Proxy Server": "Agregar servidor proxy", "WebQuery: :webquery_port": "Consulta web: :webquery_port", "not set": "no establecido", - "Server Online": "Servidor en línea", - "Server Offline": "Servidor fuera de linea", "Loading": "Cargando", - "WebQuery Online": "Consulta web en línea", - "WebQuery Offline": "WebQuery fuera de línea", + "WebQuery": "Consulta web", "View Server Intel": "Ver servidor Intel", - "Edit Server": "Editar servidor", "Delete Server": "Eliminar servidor", "Statistics": "Estadísticas", "Performance": "Rendimiento", @@ -873,10 +917,23 @@ "Enable user to link their players to account": "Permitir al usuario vincular sus jugadores a la cuenta", "Max Players Per Account": "Máximo de jugadores por cuenta", "Number of players that can be linked to one account in website.": "Número de jugadores que se pueden vincular a una cuenta en el sitio web.", - "Account Link Success Command": "Comando de Éxito de Enlace de Cuenta", - "Use this to reward players when they link account: Eg: give {PLAYER} diamond 1": "Use esto para recompensar a los jugadores cuando vinculen la cuenta: por ejemplo: dar a {JUGADOR} diamante 1", - "Account Link Success Broadcast": "Difusión exitosa de enlace de cuenta", - "If set then this will be broadcast to server when player link is successful: Eg: {PLAYER} has successfully linked his account and won a ultra key.": "Si se establece, esto se transmitirá al servidor cuando el enlace del jugador sea exitoso: por ejemplo: {JUGADOR} ha vinculado con éxito su cuenta y ganó una llave ultra.", + "Account Link Success Commands": "Comandos exitosos de vinculación de cuenta", + "(runs when a player is linked to account)": "(se ejecuta cuando un jugador está vinculado a la cuenta)", + "Username of the player which is linked.": "Nombre de usuario del jugador al que está vinculado.", + "Unique Id of the player which is linked.": "Id único del jugador al que está vinculado.", + "Run on servers": "Ejecutar en servidores", + "Run on first link only": "Ejecutar solo en el primer enlace", + "This command should only run if given player is getting linked for first time. (Eg: This wont run if player get unlinked and then linked again)": "Este comando solo debe ejecutarse si un jugador determinado se vincula por primera vez. (Por ejemplo: esto no se ejecutará si el jugador se desvincula y luego se vuelve a vincular)", + "No commands on account link.": "No hay comandos en el enlace de la cuenta.", + "Add New Link Command": "Agregar nuevo comando de enlace", + "Account Unlink Success Commands": "Comandos exitosos para desvincular cuenta", + "(runs when a player is unlinked from account)": "(se ejecuta cuando un jugador se desvincula de la cuenta)", + "Username of the player which is unlinked.": "Nombre de usuario del jugador que se desvincula.", + "Unique Id of the player which is unlinked.": "Id único del jugador que está desvinculado.", + "Run on first unlink only": "Ejecutar solo en la primera desvinculación", + "This command should only run if given player is getting unlinked for first time. (Eg: This wont run if player was linked and unlinked before)": "Este comando solo debe ejecutarse si un jugador determinado se desvincula por primera vez. (Por ejemplo: esto no se ejecutará si el jugador estuvo vinculado y desvinculado antes)", + "No commands on account unlink.": "No hay comandos en la cuenta para desvincularse.", + "Add New Unlink Command": "Agregar nuevo comando de desvinculación", "Enable Player Rank Sync": "Habilitar sincronización de rango de jugador", "Enable this if you want to sync your player rank from server instead of website calculated rank. you must create a rank for each group you have in server making sure rank shortname matches the name of your player group in server.": "Habilite esto si desea sincronizar su rango de jugador desde el servidor en lugar del rango calculado del sitio web. debe crear un rango para cada grupo que tenga en el servidor, asegurándose de que el nombre abreviado del rango coincida con el nombre de su grupo de jugadores en el servidor.", "Rank Sync From Server": "Sincronización de clasificación desde el servidor", @@ -987,6 +1044,7 @@ "Joined": "Se unió", "Flags": "banderas", "Users Administration": "Administración de Usuarios", + "Discord ID": "ID de discordia", "Muted": "Apagado", "Banned": "Baneado", "View Profile": "Ver perfil", @@ -1092,7 +1150,7 @@ "Position: None": "Puesto: Ninguno", "Position": "Posición", "Rating: :rating": "Calificación: :rating", - "Rating: None": "Calificación: N/A", + "Rating: None": "Calificación: N\/A", "Rank: :rank": "Rango: :rank", "Rank: None": "Rango: Ninguno", "Country: :country": "País: :country", @@ -1188,10 +1246,10 @@ "Someone liked my Post": "A alguien le gustó mi publicación", "I am muted by Staff": "Estoy silenciado por el personal", "I am banned by Staff": "Estoy baneado por el personal", - "Recruitment submission status changed": "El estado de envío de reclutamiento cambió", - "New message in recruitment submission": "Nuevo mensaje en el envío de reclutamiento", + "Application request status changed": "El estado de la solicitud de solicitud cambió", + "New message in application request": "Nuevo mensaje en solicitud de solicitud", "For staff members": "Para miembros del personal", - "Recruitment submission received": "Presentación de reclutamiento recibida", + "Application request received": "Solicitud de solicitud recibida", "Custom form submission received": "Envío de formulario personalizado recibido", "Someone commented on News": "Alguien comentó en Noticias", "Saved.": "Guardado.", @@ -1213,25 +1271,25 @@ "Mark all as read": "Marcar todo como leido", "No notifications to show.": "No hay notificaciones para mostrar.", "Last Updated": "Última actualización", - "Recruitments": "Reclutamientos", + "Application Forms": "Formularios de solicitud", "View My Applications": "Ver mis postulaciones", "Only for Verified Users": "Sólo para usuarios verificados", "Only for Linked Account Users (Player linked)": "Solo para usuarios de cuentas vinculadas (jugador vinculado)", "Apply": "Aplicar", "Application Closed!": "¡Solicitud cerrada!", "Login or Register to Apply!": "¡Inicie sesión o regístrese para aplicar!", - "You need to be logged in to apply to this recruitment.": "Debe iniciar sesión para postularse a este reclutamiento.", + "You need to be logged in to apply to this application.": "Debe iniciar sesión para postularse a esta solicitud.", "Max Submissions Reached!": "¡Se alcanzó el máximo de envíos!", "You are on a Cooldown!": "¡Estás en tiempo de reutilización!", "Account Verification Required!": "¡Se requiere verificación de cuenta!", "Account Linking Required!": "¡Se requiere vinculación de cuenta!", "You have already applied!": "¡Ya has aplicado!", - "View Application": "Ver solicitud", + "View Request": "Ver solicitud", "Already approved in past! Wanna apply again?": "¡Ya aprobado en el pasado! ¿Quieres postularte nuevamente?", "You may wanna check that before applying again.": "Quizás quieras comprobarlo antes de volver a presentar la solicitud.", - "View Approved Application": "Ver solicitud aprobada", - "My Recruitment Applications": "Mis solicitudes de contratación", - "Your application for :recruitmenttitle #:index - Recruitments": "Su solicitud para :recruitmenttitle #:index - Reclutamientos", + "View Approved Request": "Ver solicitud aprobada", + "My Application Requests": "Mis solicitudes de solicitud", + "Your application request for :recruitmenttitle #:index - Applications": "Su solicitud de solicitud para :recruitmenttitle #:index - Aplicaciones", "Application for :recruitmenttitle #:index": "Solicitud de :recruitmenttitle #:índice", "Success! A staff will soon review your application. Please be patience.": "¡Éxito! Un personal pronto revisará su solicitud. Por favor, sea paciente.", "Withdraw": "Retirar", @@ -1246,7 +1304,11 @@ "You can link upto :count :player to your account! ( :left available )": "¡Puedes vincular hasta :count :player a tu cuenta! ( :left disponibles)", "player": "Jugador", "players": "Jugadores", - "Initiate the process by joining the server and typing \/account-link in chat. A link will be generated, click on that link and your player will added to your account.": "Inicie el proceso uniéndote al servidor y escribiendo \/account-link en el chat. Se generará un enlace, haz clic en ese enlace y tu jugador se agregará a tu cuenta.", + "To link a player to your account, join server and type '\/link :otp' in your chat.": "Para vincular un jugador a tu cuenta, únete al servidor y escribe \\'\/link :otp\\' en tu chat.", + "Copied!": "¡Copiado!", + "This OTP will expire in :seconds seconds.": "Esta OTP caducará en :seconds segundos.", + "This OTP has expired. Refresh the page to get a new OTP.": "Esta OTP ha caducado. Actualiza la página para obtener una nueva OTP.", + "Click here to refresh.": "Haga clic aquí para actualizar.", "No players linked to your account right now.": "No hay jugadores vinculados a tu cuenta en este momento.", "Change Skin of this player.": "Cambiar la skin de este jugador.", "Are you sure you want to unlink this player from your account?": "¿Estás seguro de que quieres desvincular a este jugador de tu cuenta?", @@ -1377,11 +1439,9 @@ "Used Memory (MB)": "Memoria utilizada (MB)", "Server Status": "Estado del servidor", "Join": "Unirse", - "Copied!": "¡Copiado!", "SETTINGS": "AJUSTES", "Theme": "Tema", "Plugin": "Plugin", - "Player": "Jugador", "Navigation": "Navegación", "Delete this shout permanently?": "¿Eliminar esta nota de forma permanente?", "No shouts yet.": "Aún no hay notas.", @@ -1433,5 +1493,18 @@ "You are muted by": "Estás silenciado por", "Role Weight to View Submission": "Peso del rol para ver el envío", "Slug": "Babosa", - "via Email": "vía correo electrónico" -} + "Minetrax only support adding one bungee server. This server will be used to show online players and server status. All sensitive information will be encrypted.": "Minetrax solo admite agregar un servidor bungee. Este servidor se utilizará para mostrar los jugadores en línea y el estado del servidor. Toda la información confidencial será encriptada.", + "Please note Proxy servers don't need Minetrax.jar plugin. Only install them on actual servers like spigot, bukkit etc.": "Tenga en cuenta que los servidores proxy no necesitan el complemento Minetrax.jar. Solo instálelos en servidores reales como spigot, bukkit, etc.", + "Eg: 25585": "Por ejemplo: 25585", + "Edit Bungee Server": "Editar servidor Bungee", + "Server Online": "Servidor en línea", + "Server Offline": "Servidor fuera de linea", + "WebQuery Online": "Consulta web en línea", + "WebQuery Offline": "WebQuery fuera de línea", + "Account Link Success Command": "Comando de Éxito de Enlace de Cuenta", + "Use this to reward players when they link account: Eg: give {PLAYER} diamond 1": "Use esto para recompensar a los jugadores cuando vinculen la cuenta: por ejemplo: dar a {JUGADOR} diamante 1", + "Account Link Success Broadcast": "Difusión exitosa de enlace de cuenta", + "If set then this will be broadcast to server when player link is successful: Eg: {PLAYER} has successfully linked his account and won a ultra key.": "Si se establece, esto se transmitirá al servidor cuando el enlace del jugador sea exitoso: por ejemplo: {JUGADOR} ha vinculado con éxito su cuenta y ganó una llave ultra.", + "via Email": "vía correo electrónico", + "Initiate the process by joining the server and typing \/account-link in chat. A link will be generated, click on that link and your player will added to your account.": "Inicie el proceso uniéndote al servidor y escribiendo \/account-link en el chat. Se generará un enlace, haz clic en ese enlace y tu jugador se agregará a tu cuenta." +} \ No newline at end of file diff --git a/lang/fr.json b/lang/fr.json index f150394f5..a7373fd3c 100644 --- a/lang/fr.json +++ b/lang/fr.json @@ -1,16 +1,8 @@ { "Email\/Password authentication is disabled.": "L\\'authentification par e-mail\/mot de passe est désactivée.", "The provided password does not match your current password.": "Le mot de passe fourni ne correspond pas à votre mot de passe actuel.", - "Link expired or invalid!": "Lien expiré ou invalide !", - "Please request a fresh link and try again.": "Veuillez demander un nouveau lien et réessayer.", - "Player not found in database!": "Joueur introuvable dans la base de données !", - "Please wait for sometime for server to update its player database.": "Veuillez attendre un moment que le serveur mette à jour sa base de données de joueurs.", - "Player already linked to a user!": "Joueur déjà lié à un utilisateur !", - "If you own this user please unlink it from your another account or contact administrator.": "Si vous possédez cet utilisateur, veuillez le dissocier de votre autre compte ou contacter l\\'administrateur.", - "User already have max :max_slots players linked!": "L\\'utilisateur a déjà un maximum de joueurs :max_slots liés !", - "If you want to link this player please unlink a player.": "Si vous souhaitez lier ce joueur, veuillez dissocier un joueur.", - "Played linked successfully!": "Joué lié avec succès !", - "This player is now linked to your account.": "Ce joueur est maintenant lié à votre compte.", + "Player unlinking disabled!": "Dissociation du joueur désactivée !", + "Player unlinking is disabled by the administrator.": "La dissociation du joueur est désactivée par l\\'administrateur.", "Player not found!": "Joueur non trouvé!", "No player with that ID found linked to your account.": "Aucun joueur avec cet identifiant trouvé lié à votre compte.", "Played unlinked successfully!": "Joué sans lien avec succès !", @@ -22,6 +14,11 @@ "Badge updated successfully": "Badge mis à jour avec succès", "Deleted Successfully": "Supprimé avec succès", "Badge has been deleted permanently": "Le badge a été définitivement supprimé", + ":count Commands Scheduled!": "Commandes :count programmées !", + "Commands has been scheduled for execution. Check the status in Command History.": "L\\'exécution des commandes a été planifiée. Vérifiez l\\'état dans l\\'historique des commandes.", + "Deleted!": "Supprimé !", + "Retried!": "Réessayé !", + "Command has been queued for retrying! Refresh the page after few seconds to check the status.": "La commande a été mise en file d\\'attente pour une nouvelle tentative ! Actualisez la page après quelques secondes pour vérifier l\\'état.", "Custom Form is created successfully": "Le formulaire personnalisé a été créé avec succès", "Custom Form updated successfully": "Formulaire personnalisé mis à jour avec succès", "Custom Form has been deleted permanently": "Le formulaire personnalisé a été supprimé définitivement", @@ -38,6 +35,8 @@ "Download has been created successfully": "Le téléchargement a été créé avec succès", "Download has been updated successfully": "Le téléchargement a été mis à jour avec succès", "Download has been deleted permanently": "Le téléchargement a été supprimé définitivement", + "Retry Queued!": "Réessayer en file d\\'attente !", + "Job has been queued for retrying!": "La tâche a été mise en file d\\'attente pour une nouvelle tentative !", "Online Players": "Joueurs en ligne", "TPS": "TPS", "CPU Load (%)": "Charge du processeur (%)", @@ -63,12 +62,12 @@ "Rank updated successfully": "Classement mis à jour avec succès", "Rank has been deleted permanently": "Le rang a été définitivement supprimé", "Rank Reset Successful": "Réinitialisation du classement réussie", - "Recruitment Form is created successfully": "Le formulaire de recrutement a été créé avec succès", - "Recruitment Form updated successfully": "Formulaire de recrutement mis à jour avec succès", - "Recruitment Form has been deleted permanently": "Le formulaire de recrutement a été définitivement supprimé", - "Recruitment Submission deleted successfully": "Soumission de recrutement supprimée avec succès", + "Application Form is created successfully": "Le formulaire de candidature a été créé avec succès", + "Application Form updated successfully": "Formulaire de candidature mis à jour avec succès", + "Application Form has been deleted permanently": "Le formulaire de candidature a été définitivement supprimé", + "Request deleted successfully": "Demande supprimée avec succès", "Action Successful": "Action réussie", - "Recruitment Submission action has been completed successfully": "L’action de soumission de recrutement a été complétée avec succès", + "Request action has been completed successfully": "L\\'action de la demande a été complétée avec succès", "Message Successfully": "Message réussi", "Message has been deleted successfully": "Le message a été supprimé avec succès", "New Role is created successfully": "Le nouveau rôle est créé avec succès", @@ -78,8 +77,7 @@ ":role cannot be deleted because there are users on this role.!": ":role ne peut pas être supprimé car il y a des utilisateurs sur ce rôle. !", "Role has been deleted!": "Le rôle a été supprimé !", "New server added successfully": "Nouveau serveur ajouté avec succès", - "Bungee server added successfully": "Le serveur Bungee a été ajouté avec succès", - "Bungee server updated successfully": "Le serveur Bungee a été mis à jour avec succès", + "Proxy server added successfully": "Serveur proxy ajouté avec succès", "Server updated successfully": "Serveur mis à jour avec succès", "Server has been deleted permanently": "Le serveur a été définitivement supprimé", "Rescan Queued!": "Nouvelle analyse en file d\\'attente !", @@ -117,10 +115,16 @@ "User deleted successfully": "Utilisateur supprimé avec succès", "Player not found": "Joueur non trouvé", "Player already linked to a user": "Joueur déjà lié à un utilisateur", - "Failed to start player session.": "Échec du démarrage de la session du joueur.", - "Failed reporting player pvp kill.": "Échec du signalement de la mise à mort du joueur en pvp.", + "Provided OTP is invalid or expired. Please try again.": "À condition que l\\'OTP soit invalide ou expiré. Veuillez réessayer.", + "You already have max :max_slots players linked!": "Vous avez déjà un maximum de :max_slots joueurs liés !", + "Player linked successfully": "Joueur lié avec succès", + "Player intel is disabled for this server.": "Les informations sur le joueur sont désactivées pour ce serveur.", + "Failed to start player session. :message": "Échec du démarrage de la session de joueur. :message", + "Failed reporting player pvp kill: :message": "Échec du rapport sur le kill pvp du joueur : :message", + "Failed reporting player death: :message": "Échec du signalement de la mort d\\'un joueur : :message", "PlayerIntel event for :username reported successfully.": "L\\'événement PlayerIntel pour :username a été signalé avec succès.", - "Failed to report Event data.": "Échec de la transmission des données d\\'événement.", + "Failed to report Event data: :message": "Échec du rapport des données d\\'événement : :message", + "Server Intel failed to report: :message": "Le serveur Intel n\\'a pas réussi à signaler : :message", "Submit Successful!": "Soumission réussie !", "Form has been submitted successfully.": "Le formulaire a été soumis avec succès.", "Comments are not allowed for this news": "Les commentaires ne sont pas autorisés pour cette actualité", @@ -139,7 +143,7 @@ "Applied Successfully!": "Appliqué avec succès !", "Application has been submitted successfully.": "La candidature a été soumise avec succès.", "Withdraw Successful": "Retrait réussi", - "Recruitment Submission withdrawn successfully": "Soumission de recrutement retirée avec succès", + "Application Request withdrawn successfully": "Demande de candidature retirée avec succès", "Failed to ping server": "Échec du ping du serveur", "Failed to query server": "Échec de la requête du serveur", "Web Query Failed": "Échec de la requête Web", @@ -164,20 +168,20 @@ "[Notification] :user commented on your post": "[Notification] :user a commenté votre message", "[Notification] Someone liked your post": "[Notification] Quelqu\\'un a aimé votre message", "[Notification] :user liked your post": "[Notification] :user a aimé votre message", - "[Notification] New message received on a recruitment application.": "[Notification] Nouveau message reçu sur une candidature de recrutement.", - ":causer sent new message on his application for :recruitment:": ":causer a envoyé un nouveau message sur sa candidature pour :recruitment :", - "[Notification] Your application has a new message.": "[Notification] Votre application a un nouveau message.", - ":causer sent you a message on your application for :recruitment:": ":causer vous a envoyé un message sur votre candidature pour :recruitment :", - "[Notification] New recruitment application received.": "[Notification] Nouvelle candidature de recrutement reçue.", - "[Notification] An application withdrawn by user.": "[Notification] Une demande retirée par l\\'utilisateur.", - ":applicant has withdrawn his application for :recruitment.": ":applicant a retiré sa candidature pour :recruitment.", - "[Notification] Your Application status has changed.": "[Notification] Le statut de votre candidature a changé.", - ":causer has started processing your application for :recruitment.": ":causer a commencé à traiter votre candidature pour :recruitment.", - ":causer has put on-hold your application for :recruitment.": ":causer a mis en attente votre candidature pour :recruitment.", - "[Notification] Congratulations! Your Application has been Approved.": "[Notification] Félicitations ! Votre candidature a été approuvée.", - ":causer has approved your application for :recruitment.": ":causer a approuvé votre candidature pour :recruitment.", - "[Notification] Sorry! Your Application has been Rejected.": "[Notification] Désolé ! Votre candidature a été rejetée.", - ":causer has rejected your application for :recruitment.": ":causer a rejeté votre candidature pour :recruitment.", + "[Notification] New message received on a application request.": "[Notification] Nouveau message reçu sur une demande de candidature.", + ":causer sent new message on his application request for :recruitment:": ":causer a envoyé un nouveau message sur sa demande de candidature pour :recruitment :", + "[Notification] Your application request has a new message.": "[Notification] Votre demande de candidature comporte un nouveau message.", + ":causer sent you a message on your application request for :recruitment:": ":causer vous a envoyé un message concernant votre demande de candidature pour :recruitment :", + "[Notification] New application request received.": "[Notification] Nouvelle demande de candidature reçue.", + "[Notification] An application request withdrawn by user.": "[Notification] Une demande de candidature retirée par l\\'utilisateur.", + ":applicant has withdrawn his application request for :recruitment.": ":applicant a retiré sa demande de candidature pour :recruitment.", + "[Notification] Your Application request status has changed.": "[Notification] Le statut de votre demande de candidature a changé.", + ":causer has started processing your application request for :recruitment.": ":causer a commencé à traiter votre demande de candidature pour :recruitment.", + ":causer has put on-hold your application request for :recruitment.": ":causer a mis en attente votre demande de candidature pour :recruitment.", + "[Notification] Congratulations! Your Application request has been Approved.": "[Notification] Félicitations ! Votre demande de candidature a été approuvée.", + ":causer has approved your application request for :recruitment.": ":causer a approuvé votre demande de candidature pour :recruitment.", + "[Notification] Sorry! Your Application request has been Rejected.": "[Notification] Désolé ! Votre demande de candidature a été rejetée.", + ":causer has rejected your application request for :recruitment.": ":causer a rejeté votre demande de candidature pour :recruitment.", "[Notification] You are Banned by :user": "[Notification] Vous êtes banni par :user", "Oh no! You are banned by a staff member and can no longer access our website. If you think this was a mistake please create an appeal.": "Oh non! Vous êtes banni par un membre du staff et ne pouvez plus accéder à notre site internet. Si vous pensez qu\\'il s\\'agit d\\'une erreur, veuillez créer un appel.", "Banned by: :user": "Banni par : :user", @@ -185,8 +189,9 @@ "Oh no! You are muted by a staff member and can no longer send messages or chat in our website. If you think this was a mistake please create an appeal.": "Oh non! Vous êtes mis en sourdine par un membre du personnel et ne pouvez plus envoyer de messages ni discuter sur notre site Web. Si vous pensez qu\\'il s\\'agit d\\'une erreur, veuillez créer un appel.", "Muted by: :user": "Muet par : :user", "Failed to upload skin to MineSkin. Please try again later": "Échec du téléchargement du skin sur MineSkin. Veuillez réessayer plus tard", - "Oh Jeez! Something went wrong. Please try again later.": "Oh mon Dieu ! Quelque chose s\\'est mal passé. Veuillez réessayer plus tard.", "Error setting player skin. Please make sure provided skin is valid.": "Erreur lors de la configuration du skin du joueur. Veuillez vous assurer que le skin fourni est valide.", + "Provided UUID is not valid.": "L\\'UUID fourni n\\'est pas valide.", + "WebQuery failed for unknown reasons. Please check minecraft server logs.": "WebQuery a échoué pour des raisons inconnues. Veuillez vérifier les journaux du serveur Minecraft.", "Minecraft Servers & Players Tracking": "Suivi des serveurs et des joueurs Minecraft", "Use Light Theme": "Utiliser le thème clair", "Use Dark Theme": "Utiliser le thème sombre", @@ -197,6 +202,8 @@ "We use cookies to enhance your browsing experience. By continuing, you consent to our cookie policy.": "Nous utilisons des cookies pour améliorer votre expérience de navigation. En continuant, vous acceptez notre politique en matière de cookies.", "I Understand": "Je comprends", "Reset": "Réinitialiser", + "Filter by :column": "Filtrer par :column", + "Clear": "Clair", "No data found": "Aucune donnée disponible", "Previous": "Précédent", "Next": "Suivant", @@ -218,15 +225,15 @@ "Logout": "Se déconnecter", "An anonymous user": "Un utilisateur anonyme", "submitted a custom form.": "soumis un formulaire personnalisé.", - "applied for a recruitment.": "postulé pour un recrutement.", + "created a new application request.": "a créé une nouvelle demande de candidature.", " has withdrawn his application.": "a retiré sa candidature.", " rejected your application.": "a rejeté votre candidature.", " approved your application.": "approuvé votre candidature.", " has put your application on-hold.": "a mis votre candidature en attente.", " has started processing your application.": "a commencé à traiter votre demande.", " has changed status of your application": "a changé le statut de votre candidature", - "New message received on a recruitment application.": "Nouveau message reçu sur une demande de recrutement.", - "Your application has a new message from @:username": "Votre application a un nouveau message de @:username", + "New message received on an application request.": "Nouveau message reçu sur une demande de candidature.", + "Your application request received a new message from @:username": "Votre demande de candidature a reçu un nouveau message de @:username", "Poll starting": "Début du sondage", "Poll closing": "Clôture du scrutin", "Are you sure you want to delete this Post?": "Es-tu sur de vouloir supprimer cette annonce?", @@ -242,6 +249,7 @@ "Staff Member": "Membre du staff", "Muted User": "Utilisateur masqué", "Password": "Mot de passe", + "Continue with empty password if you have no password.": "Continuez avec un mot de passe vide si vous n\\'avez pas de mot de passe.", "Cancel": "Annuler", "Whoops! Something went wrong.": "Oups ! Quelque chose s\\'est mal passé.", "Leave Impersonation": "Quitter l\\'usurpation d\\'identité", @@ -281,6 +289,37 @@ "Badge": "Badge", "Badge Image": "Image du badge", "Delete Badge": "Supprimer le badge", + "Run Command": "Exécuter la commande", + "Scope": "Portée", + "Global": "Mondial", + "Run generic command": "Exécuter une commande générique", + "Player": "Joueur", + "Run against players": "Courir contre des joueurs", + "Available Placeholders": "Espaces réservés disponibles", + "Username of the player the command is running on.": "Nom d\\'utilisateur du joueur sur lequel la commande est exécutée.", + "Unique Id of the player the command is running on.": "Identifiant unique du joueur sur lequel la commande est exécutée.", + "Enter command to run...": "Entrez la commande pour exécuter...", + "Servers to run on": "Serveurs sur lesquels fonctionner", + "Leave empty to run on all servers": "Laisser vide pour exécuter sur tous les serveurs", + "Players to run on": "Des joueurs sur lesquels courir", + "Select players": "Sélectionner des joueurs", + "Select players to run command on": "Sélectionnez les joueurs sur lesquels exécuter la commande", + "Require player to be online": "Exiger que le joueur soit en ligne", + "This command should only run if player is online on running server. If not online it will be queued to run when player comes online.": "Cette commande ne doit s\\'exécuter que si le joueur est en ligne sur le serveur en cours d\\'exécution. S\\'il n\\'est pas en ligne, il sera mis en file d\\'attente pour s\\'exécuter lorsque le joueur se connectera.", + "Command": "Commande", + "Server": "Serveur", + "Status": "Statut", + "Last Attempted": "Dernière tentative", + "Execute At": "Exécuter à", + "Tags": "Mots clés", + "For Player": "Pour le joueur", + "Output": "Sortir", + "Command History": "Historique des commandes", + "Retry All Failed": "Réessayer tout a échoué", + "Attempts: :attempts\/:max_attempts": "Tentatives : :attempts\/:max_attempts", + "none": "rien", + "Retry Command": "Réessayer la commande", + "Delete Command": "Supprimer la commande", "Create Custom Form": "Créer un formulaire personnalisé", "Title of Custom Form": "Titre du formulaire personnalisé", "Eg: Contact Us": "Par exemple : contactez-nous", @@ -303,7 +342,6 @@ "Edit Custom Form": "Modifier le formulaire personnalisé", "Update Custom Form": "Mettre à jour le formulaire personnalisé", "Title": "Titre", - "Status": "Statut", "Can Submit": "Peut soumettre", "Notify Staff on Submit": "Informer le personnel lors de la soumission", "Visible in Listing": "Visible dans l\\'annonce", @@ -323,7 +361,6 @@ "Max submission per user": "Soumission maximale par utilisateur", "not applicable": "n\\'est pas applicable", "Minimum staff role weight to view submissions": "Poids minimum du rôle du personnel pour afficher les soumissions", - "none": "rien", "Notify staff on new submission": "Informer le personnel de toute nouvelle soumission", "Updated": "Mis à jour", "Country": "Pays", @@ -410,6 +447,17 @@ "External URL is protected from end users.": "L\\'URL externe est protégée des utilisateurs finaux.", "Minimum Role Weight Required to Download": "Poids minimum du rôle requis pour le téléchargement", "Delete Download": "Supprimer le téléchargement", + "UUID": "UUID", + "Job": "Emploi", + "Connection\/Queue": "Connexion\/file d\\'attente", + "Exception": "Exception", + "Failed At": "Échec à", + "Failed Jobs": "Travaux échoués", + "Retry All Jobs": "Réessayer toutes les tâches", + "Clear All Jobs": "Effacer toutes les tâches", + "Attempts: :attempts": "Tentatives : :attempts", + "Retry Job": "Réessayer le travail", + "Delete Job": "Supprimer le travail", "Create News": "Créer des nouvelles", "News Category": "Catégorie Actualités", "General": "Général", @@ -486,11 +534,11 @@ "Reset to Default Ranks": "Rétablir les rangs par défaut", "Rank": "Rang", "Delete Rank": "Supprimer le classement", - "Create Recruitment Form": "Créer un formulaire de recrutement", - "Title of this Recruitment": "Titre de ce recrutement", + "Create Application Form": "Créer un formulaire de candidature", + "Title of this Application": "Titre de cette demande", "Eg: Apply to be a Staff Member": "Par exemple : postuler pour devenir membre du personnel", - "Recruitment Slug": "Limace de recrutement", - "Recruitment Status": "Statut de recrutement", + "Application Slug for URL": "Slug d\\'application pour l\\'URL", + "Application Status": "État de la candidature", "How many times a user can reapply after rejection. Leave empty for no limit.": "Combien de fois un utilisateur peut présenter une nouvelle demande après un refus. Laissez vide sans limite.", "Submission Cooldown in Seconds": "Temps de recharge de soumission en secondes", "After how many seconds user can reapply this application. Leave empty for no cooldown.": "Après combien de secondes l\\'utilisateur peut réappliquer cette application. Laissez vide sans temps de recharge.", @@ -499,20 +547,19 @@ "Leave empty to allow any staff with [vote recruitment_submissions] permission to vote on submissions.": "Laissez vide pour permettre à tout membre du personnel disposant de l\\'autorisation [vote recrutement_submissions] de voter sur les soumissions.", "Min Staff Role Weight to Act on Submission": "Poids minimum du rôle du personnel pour agir sur la soumission", "Min staff role weight required to Approve\/Reject on submission. Leave empty to allow any staff with [acton recruitment_submissions] permission to act on submissions.": "Poids minimum du rôle du personnel requis pour approuver\/rejeter lors de la soumission. Laissez vide pour permettre à tout membre du personnel disposant de l\\'autorisation [acton recrutement_submissions] d\\'agir sur les soumissions.", - "If this recruitment is for hiring of a specific role, select the role here.": "Si ce recrutement concerne l\\'embauche d\\'un rôle spécifique, sélectionnez le rôle ici.", - "Create Recruitment": "Créer un recrutement", - "Edit Recruitment Form": "Modifier le formulaire de recrutement", - "Update Recruitment": "Mettre à jour le recrutement", + "If this application is for hiring of a specific role, select the role here.": "Si cette candidature concerne l\\'embauche d\\'un rôle spécifique, sélectionnez le rôle ici.", + "Edit Application Form": "Modifier le formulaire de candidature", + "Update Application Form": "Mettre à jour le formulaire de demande", "Notify Staff": "Informer le personnel", "Messaging": "Messagerie", "Open Requests": "Demandes ouvertes", "Closed Requests": "Demandes fermées", - "Manage Recruitment Forms": "Gérer les formulaires de recrutement", - "Recruitment": "Recrutement", - "Delete Recruitment": "Supprimer le recrutement", - ":title Intel - Recruitments": ":title Intel - Recrutement", + "Manage Application Forms": "Gérer les formulaires de candidature", + "Application Form": "Formulaire de candidature", + "Delete Application Form": "Supprimer le formulaire de candidature", + ":title Intel - Application Form": ":title Intel - Formulaire de candidature", ":title - Intel": ":title - Intel", - "This recruitment hiring for": "Ce recrutement embauche pour", + "This application hiring for": "Cette candidature embauche pour", "Submission Cooldown": "Temps de recharge de soumission", "Allow only Player Linked Users": "Autoriser uniquement les utilisateurs liés au joueur", "Allow only Verified Users": "Autoriser uniquement les utilisateurs vérifiés", @@ -520,16 +567,19 @@ "Enable Messaging Feature": "Activer la fonctionnalité de messagerie", "Notify staff on Events": "Informer le personnel des événements", "Applicant": "Demandeur", + "Application": "Application", + "Last Actor": "Dernier acteur", + "Last Comment": "Dernier commentaire", "Updated At": "Mis à jour à", - "Closed Request - Recruitments": "Demande fermée - Recrutement", - "Open Requests - Recruitments": "Demandes ouvertes - Recrutement", - "Closed Recruitment Submissions:": "Candidatures de recrutement clôturées :", - "Open Recruitment Submissions:": "Candidatures ouvertes pour le recrutement :", - "All Recruitments": "Tous les recrutements", - ":user application for :recruitmenttitle #:index - Recruitments": "candidature :user pour :recruitmenttitle #:index - Recrutements", + "Closed Request - Applications": "Demande fermée - Candidatures", + "Open Requests - Applications": "Demandes ouvertes - Candidatures", + "Closed Requests:": "Demandes fermées :", + "Open Requests:": "Demandes ouvertes :", + "All Applications": "Toutes les candidatures", + ":user application for :recruitmenttitle #:index - Applications": "application :user pour :recruitmenttitle #:index - Applications", ":user application for :recruitmenttitle #:index": "application :user pour :recruitmenttitle #:index", "Last Updated At": "Dernière mise à jour à", - "Submission Status": "Statut de la soumission", + "Request Status": "Statut de la demande", "Reason": "Raison", "Marked :status By": "Marqué :status par", "Mark In-Progress": "Marquer en cours", @@ -580,8 +630,8 @@ "Go back to Server List": "Revenir à la liste des serveurs", "Add Bungee Server": "Ajouter un serveur Bungee", "Edit Bungee Server: :name": "Modifier le serveur Bungee : :name", - "Minetrax only support adding one bungee server. This server will be used to show online players and server status. All sensitive information will be encrypted.": "Minetrax ne prend en charge que l\\'ajout d\\'un serveur élastique. Ce serveur sera utilisé pour afficher les joueurs en ligne et l\\'état du serveur. Toutes les informations sensibles seront cryptées.", - "Please note Proxy servers don't need Minetrax.jar plugin. Only install them on actual servers like spigot, bukkit etc.": "Veuillez noter que les serveurs proxy n\\'ont pas besoin du plugin Minetrax.jar. Installez-les uniquement sur des serveurs réels tels que spigot, bukkit, etc.", + "Add Bungee\/Velocity Server": "Ajouter un serveur Bungee\/Velocity", + "Edit Bungee\/Velocity Server: :name": "Modifier le serveur Bungee\/Velocity : :name", "Server Name": "Nom du serveur", "Eg: My Bungee Server": "Par exemple : Mon serveur Bungee", "Hostname": "Nom d\\'hôte", @@ -593,27 +643,26 @@ "Query Port": "Port de requête", "Eg: 25575": "Ex : 25575", "Webquery Port": "Port de requête Web", - "Eg: 25585": "Ex : 25585", + "WebQuery port is a new port which MineTrax plugin will open for secure connection between server and web. Enter a port value which is available and can be open. Eg: 25569": "Le port WebQuery est un nouveau port que le plugin MineTrax ouvrira pour une connexion sécurisée entre le serveur et le Web. Entrez une valeur de port disponible et pouvant être ouverte. Ex : 25569", "Server Version": "Version du serveur", "Select version..": "Sélectionnez la version..", - "Edit Bungee Server": "Modifier le serveur Bungee", - "Add New Server": "Ajouter un nouveau serveur", + "Enable Server Intel \/ Analytics": "Activer le serveur Intel\/Analytics", + "If enabled, server analytics data (performance metric, join activity etc) will be captured for this server via plugin.": "Si cette option est activée, les données analytiques du serveur (métriques de performances, activité de jointure, etc.) seront capturées pour ce serveur via un plugin.", + "Enable Skin Change via Web (SkinsRestorer)": "Activer le changement de peau via le Web (SkinsRestorer)", + "Allow user to change their linked players skin via web for this server. This will require SkinsRestorer plugin to be installed on the server.": "Autoriser l\\'utilisateur à modifier le skin de ses joueurs liés via le Web pour ce serveur. Cela nécessitera que le plugin SkinsRestorer soit installé sur le serveur.", "Add Server": "Ajouter un serveur", + "Edit Server": "Modifier le serveur", + "Add New Server": "Ajouter un nouveau serveur", "This name will help to identify this server. Eg: Survival, Skyblock, etc.": "Ce nom aidera à identifier ce serveur. Ex : Survie, Skyblock, etc.", "Publicly visible join address of the server. Eg: play.example.com": "Adresse de jointure visible publiquement du serveur. Par exemple : play.example.com", "Higher the weight, higher the priority. Eg: 1,3,10 etc. Can be left empty.": "Plus le poids est élevé, plus la priorité est élevée. Par exemple : 1,3,10 etc. Peut être laissé vide.", - "WebQuery port is a new port which MineTrax plugin will open for secure connection between server and web. Enter a port value which is available and can be open. Eg: 25569": "Le port WebQuery est un nouveau port que le plugin MineTrax ouvrira pour une connexion sécurisée entre le serveur et le Web. Entrez une valeur de port disponible et pouvant être ouverte. Ex : 25569", "Select server type": "Sélectionnez le type de serveur", "Server Type": "Type de serveur", "Version": "Version", - "Enable Server Intel \/ Analytics": "Activer le serveur Intel\/Analytics", - "If enabled, server analytics data (performance metric, join activity etc) will be captured for this server via plugin.": "Si cette option est activée, les données analytiques du serveur (métriques de performances, activité de jointure, etc.) seront capturées pour ce serveur via un plugin.", "Enable Player Intel \/ Analytics": "Activer le lecteur Intel\/Analytics", "If enabled, player intel & statistics data will be captured for this server via plugin.": "Si activé, les données d\\'informations et de statistiques du joueur seront capturées pour ce serveur via un plugin.", "Enable In-Game Chat": "Activer le chat en jeu", "Enable in-game chat for this server, which allow users to view & chat to in-game players from website.": "Activez le chat en jeu pour ce serveur, ce qui permet aux utilisateurs de visualiser et de discuter avec les joueurs du jeu à partir du site Web.", - "Enable Skin Change via Web (SkinsRestorer)": "Activer le changement de peau via le Web (SkinsRestorer)", - "Allow user to change their linked players skin via web for this server. This will require SkinsRestorer plugin to be installed on the server.": "Autoriser l\\'utilisateur à modifier le skin de ses joueurs liés via le Web pour ce serveur. Cela nécessitera que le plugin SkinsRestorer soit installé sur le serveur.", "Edit Server: :name": "Modifier le serveur : :name", "Update Server": "Mettre à jour le serveur", "IP:Port": "IP : port", @@ -623,17 +672,12 @@ "Servers": "Les serveurs", "Sync Player Statistics": "Synchroniser les statistiques du lecteur", "Add": "Ajouter", - "Server": "Serveur", "Add Proxy Server": "Ajouter un serveur proxy", "WebQuery: :webquery_port": "Requête Web : :webquery_port", "not set": "pas encore défini", - "Server Online": "Serveur en ligne", - "Server Offline": "Serveur hors ligne", "Loading": "Chargement", - "WebQuery Online": "Requête Web en ligne", - "WebQuery Offline": "Requête Web hors ligne", + "WebQuery": "Requête Web", "View Server Intel": "Afficher le serveur Intel", - "Edit Server": "Modifier le serveur", "Delete Server": "Supprimer le serveur", "Statistics": "Statistiques", "Performance": "Performance", @@ -873,10 +917,23 @@ "Enable user to link their players to account": "Permettre à l\\'utilisateur de lier ses joueurs à son compte", "Max Players Per Account": "Nombre maximum de joueurs par compte", "Number of players that can be linked to one account in website.": "Nombre de joueurs pouvant être liés à un compte sur le site Web.", - "Account Link Success Command": "Commande de réussite du lien de compte", - "Use this to reward players when they link account: Eg: give {PLAYER} diamond 1": "Utilisez ceci pour récompenser les joueurs lorsqu\\'ils associent un compte : par exemple : donnez {PLAYER} diamant 1", - "Account Link Success Broadcast": "Diffusion réussie du lien de compte", - "If set then this will be broadcast to server when player link is successful: Eg: {PLAYER} has successfully linked his account and won a ultra key.": "S\\'il est défini, cela sera diffusé sur le serveur lorsque la liaison du joueur est réussie : par exemple : {PLAYER} a réussi à lier son compte et a gagné une clé ultra.", + "Account Link Success Commands": "Commandes de réussite de la liaison de compte", + "(runs when a player is linked to account)": "(s\\'exécute lorsqu\\'un joueur est lié à un compte)", + "Username of the player which is linked.": "Nom d\\'utilisateur du joueur lié.", + "Unique Id of the player which is linked.": "Identifiant unique du joueur lié.", + "Run on servers": "Exécuté sur des serveurs", + "Run on first link only": "Exécuter uniquement sur le premier lien", + "This command should only run if given player is getting linked for first time. (Eg: This wont run if player get unlinked and then linked again)": "Cette commande ne doit s\\'exécuter que si un joueur donné est lié pour la première fois. (Par exemple : cela ne fonctionnera pas si le joueur est dissocié puis lié à nouveau)", + "No commands on account link.": "Aucune commande sur le lien du compte.", + "Add New Link Command": "Ajouter une nouvelle commande de lien", + "Account Unlink Success Commands": "Commandes réussies de dissociation du compte", + "(runs when a player is unlinked from account)": "(s\\'exécute lorsqu\\'un joueur est dissocié du compte)", + "Username of the player which is unlinked.": "Nom d\\'utilisateur du joueur dissocié.", + "Unique Id of the player which is unlinked.": "Identifiant unique du joueur qui n\\'est pas lié.", + "Run on first unlink only": "Exécuter uniquement lors de la première dissociation", + "This command should only run if given player is getting unlinked for first time. (Eg: This wont run if player was linked and unlinked before)": "Cette commande ne doit être exécutée que si un joueur donné est dissocié pour la première fois. (Par exemple : cela ne fonctionnera pas si le joueur était lié et dissocié auparavant)", + "No commands on account unlink.": "Aucune commande pour dissocier le compte.", + "Add New Unlink Command": "Ajouter une nouvelle commande de dissociation", "Enable Player Rank Sync": "Activer la synchronisation du classement des joueurs", "Enable this if you want to sync your player rank from server instead of website calculated rank. you must create a rank for each group you have in server making sure rank shortname matches the name of your player group in server.": "Activez cette option si vous souhaitez synchroniser votre classement de joueur à partir du serveur au lieu du classement calculé par le site Web. vous devez créer un rang pour chaque groupe que vous avez sur le serveur en vous assurant que le nom abrégé du rang correspond au nom de votre groupe de joueurs sur le serveur.", "Rank Sync From Server": "Synchronisation du classement depuis le serveur", @@ -987,6 +1044,7 @@ "Joined": "Rejoint", "Flags": "Drapeaux", "Users Administration": "Administration des utilisateurs", + "Discord ID": "Identifiant Discorde", "Muted": "En sourdine", "Banned": "banni", "View Profile": "Voir le profil", @@ -1188,10 +1246,10 @@ "Someone liked my Post": "Quelqu\\'un a aimé mon article", "I am muted by Staff": "Je suis mis en sourdine par le personnel", "I am banned by Staff": "Je suis banni par le staff", - "Recruitment submission status changed": "Le statut de la soumission du recrutement a été modifié", - "New message in recruitment submission": "Nouveau message dans le dossier de recrutement", + "Application request status changed": "Statut de la demande de candidature modifié", + "New message in application request": "Nouveau message dans la demande de candidature", "For staff members": "Pour les membres du personnel", - "Recruitment submission received": "Dossier de recrutement reçu", + "Application request received": "Demande de candidature reçue", "Custom form submission received": "Soumission de formulaire personnalisé reçue", "Someone commented on News": "Quelqu\\'un a commenté Actualités", "Saved.": "Enregistré.", @@ -1213,25 +1271,25 @@ "Mark all as read": "tout marquer comme lu", "No notifications to show.": "Aucune notification à afficher.", "Last Updated": "Dernière mise à jour", - "Recruitments": "Recrutements", + "Application Forms": "Les formulaires de demande", "View My Applications": "Afficher mes candidatures", "Only for Verified Users": "Uniquement pour les utilisateurs vérifiés", "Only for Linked Account Users (Player linked)": "Uniquement pour les utilisateurs de comptes liés (joueur lié)", "Apply": "Appliquer", "Application Closed!": "Candidature fermée !", "Login or Register to Apply!": "Connectez-vous ou inscrivez-vous pour postuler !", - "You need to be logged in to apply to this recruitment.": "Vous devez être connecté pour postuler à ce recrutement.", + "You need to be logged in to apply to this application.": "Vous devez être connecté pour postuler à cette candidature.", "Max Submissions Reached!": "Nombre maximum de soumissions atteint !", "You are on a Cooldown!": "Vous êtes en temps de recharge !", "Account Verification Required!": "Vérification du compte requise !", "Account Linking Required!": "Liaison de compte requise !", "You have already applied!": "Vous avez déjà postulé !", - "View Application": "Voir la candidature", + "View Request": "Afficher la demande", "Already approved in past! Wanna apply again?": "Déjà approuvé par le passé ! Vous voulez postuler à nouveau ?", "You may wanna check that before applying again.": "Vous voudrez peut-être vérifier cela avant de postuler à nouveau.", - "View Approved Application": "Afficher la demande approuvée", - "My Recruitment Applications": "Mes candidatures de recrutement", - "Your application for :recruitmenttitle #:index - Recruitments": "Votre candidature pour :recruitmenttitle #:index - Recrutements", + "View Approved Request": "Afficher la demande approuvée", + "My Application Requests": "Mes demandes de candidature", + "Your application request for :recruitmenttitle #:index - Applications": "Votre demande de candidature pour :recruitmenttitle #:index - Candidatures", "Application for :recruitmenttitle #:index": "Demande de :recruitmenttitle #:index", "Success! A staff will soon review your application. Please be patience.": "Succès! Un personnel examinera bientôt votre candidature. S\\'il vous plaît soyez patient.", "Withdraw": "Retirer", @@ -1246,7 +1304,11 @@ "You can link upto :count :player to your account! ( :left available )": "Vous pouvez lier jusqu\\'à :count :player à votre compte ! ( :left disponibles)", "player": "joueur", "players": "joueurs", - "Initiate the process by joining the server and typing \/account-link in chat. A link will be generated, click on that link and your player will added to your account.": "Lancez le processus en rejoignant le serveur et en tapant \/account-link dans le chat. Un lien sera généré, cliquez dessus et votre lecteur sera ajouté à votre compte.", + "To link a player to your account, join server and type '\/link :otp' in your chat.": "Pour lier un joueur à votre compte, rejoignez le serveur et tapez « \/link :otp » dans votre chat.", + "Copied!": "Copié !", + "This OTP will expire in :seconds seconds.": "Cet OTP expirera dans :seconds secondes.", + "This OTP has expired. Refresh the page to get a new OTP.": "Cet OTP a expiré. Actualisez la page pour obtenir un nouvel OTP.", + "Click here to refresh.": "Cliquez ici pour actualiser.", "No players linked to your account right now.": "Aucun joueur lié à votre compte pour le moment.", "Change Skin of this player.": "Changer le skin de ce joueur.", "Are you sure you want to unlink this player from your account?": "Etes-vous sûr de vouloir dissocier ce joueur de votre compte ?", @@ -1377,11 +1439,9 @@ "Used Memory (MB)": "Mémoire utilisée (Mo)", "Server Status": "État du serveur", "Join": "Rejoindre", - "Copied!": "Copié !", "SETTINGS": "RÉGLAGES", "Theme": "Thème", "Plugin": "Brancher", - "Player": "Joueur", "Navigation": "La navigation", "Delete this shout permanently?": "Supprimer ce cri définitivement ?", "No shouts yet.": "Pas encore de cris.", @@ -1433,5 +1493,18 @@ "You are muted by": "Vous êtes mis en sourdine par", "Role Weight to View Submission": "Poids du rôle pour afficher la soumission", "Slug": "Limace", - "via Email": "par email" + "Minetrax only support adding one bungee server. This server will be used to show online players and server status. All sensitive information will be encrypted.": "Minetrax ne prend en charge que l\\'ajout d\\'un serveur élastique. Ce serveur sera utilisé pour afficher les joueurs en ligne et l\\'état du serveur. Toutes les informations sensibles seront cryptées.", + "Please note Proxy servers don't need Minetrax.jar plugin. Only install them on actual servers like spigot, bukkit etc.": "Veuillez noter que les serveurs proxy n\\'ont pas besoin du plugin Minetrax.jar. Installez-les uniquement sur des serveurs réels tels que spigot, bukkit, etc.", + "Eg: 25585": "Ex : 25585", + "Edit Bungee Server": "Modifier le serveur Bungee", + "Server Online": "Serveur en ligne", + "Server Offline": "Serveur hors ligne", + "WebQuery Online": "Requête Web en ligne", + "WebQuery Offline": "Requête Web hors ligne", + "Account Link Success Command": "Commande de réussite du lien de compte", + "Use this to reward players when they link account: Eg: give {PLAYER} diamond 1": "Utilisez ceci pour récompenser les joueurs lorsqu\\'ils associent un compte : par exemple : donnez {PLAYER} diamant 1", + "Account Link Success Broadcast": "Diffusion réussie du lien de compte", + "If set then this will be broadcast to server when player link is successful: Eg: {PLAYER} has successfully linked his account and won a ultra key.": "S\\'il est défini, cela sera diffusé sur le serveur lorsque la liaison du joueur est réussie : par exemple : {PLAYER} a réussi à lier son compte et a gagné une clé ultra.", + "via Email": "par email", + "Initiate the process by joining the server and typing \/account-link in chat. A link will be generated, click on that link and your player will added to your account.": "Lancez le processus en rejoignant le serveur et en tapant \/account-link dans le chat. Un lien sera généré, cliquez dessus et votre lecteur sera ajouté à votre compte." } \ No newline at end of file diff --git a/lang/hi.json b/lang/hi.json index ccd5fd829..0c56f6928 100644 --- a/lang/hi.json +++ b/lang/hi.json @@ -1,16 +1,8 @@ { "Email\/Password authentication is disabled.": "ईमेल\/पासवर्ड प्रमाणीकरण अक्षम है.", "The provided password does not match your current password.": "प्रदान किया गया पासवर्ड आपके वर्तमान पासवर्ड से मेल नहीं खाता।", - "Link expired or invalid!": "लिंक समाप्त हो गया या अमान्य!", - "Please request a fresh link and try again.": "कृपया एक नए लिंक का अनुरोध करें और पुनः प्रयास करें।", - "Player not found in database!": "डेटाबेस में प्लेयर नहीं मिला!", - "Please wait for sometime for server to update its player database.": "कृपया सर्वर के लिए अपने प्लेयर डेटाबेस को अपडेट करने के लिए कुछ समय प्रतीक्षा करें।", - "Player already linked to a user!": "खिलाड़ी पहले से ही एक उपयोगकर्ता से जुड़ा हुआ है!", - "If you own this user please unlink it from your another account or contact administrator.": "यदि आप इस उपयोगकर्ता के स्वामी हैं तो कृपया इसे अपने किसी अन्य खाते से अनलिंक करें या व्यवस्थापक से संपर्क करें।", - "User already have max :max_slots players linked!": "उपयोगकर्ता के पास पहले से अधिकतम :max_slots खिलाड़ी जुड़े हुए हैं!", - "If you want to link this player please unlink a player.": "अगर आप इस प्लेयर को लिंक करना चाहते हैं तो कृपया किसी प्लेयर को अनलिंक करें।", - "Played linked successfully!": "सफलतापूर्वक लिंक किया गया खेला गया!", - "This player is now linked to your account.": "यह खिलाड़ी अब आपके खाते से जुड़ा हुआ है।", + "Player unlinking disabled!": "प्लेयर अनलिंकिंग अक्षम!", + "Player unlinking is disabled by the administrator.": "प्लेयर अनलिंकिंग व्यवस्थापक द्वारा अक्षम कर दिया गया है.", "Player not found!": "खिलाड़ी नहीं मिले!", "No player with that ID found linked to your account.": "उस आईडी वाला कोई खिलाड़ी आपके खाते से लिंक नहीं मिला।", "Played unlinked successfully!": "अनलिंक सफलतापूर्वक चलाया गया!", @@ -22,6 +14,11 @@ "Badge updated successfully": "बैज सफलतापूर्वक अपडेट किया गया", "Deleted Successfully": "सफलतापूर्वक मिटाया गया", "Badge has been deleted permanently": "बैज स्थायी रूप से हटा दिया गया है", + ":count Commands Scheduled!": ":count कमांड शेड्यूल किया गया!", + "Commands has been scheduled for execution. Check the status in Command History.": "निष्पादन के लिए आदेश निर्धारित कर दिए गए हैं. कमांड इतिहास में स्थिति की जाँच करें।", + "Deleted!": "हटा दिया गया!", + "Retried!": "पुनः प्रयास किया!", + "Command has been queued for retrying! Refresh the page after few seconds to check the status.": "पुनः प्रयास करने के लिए कमांड को कतारबद्ध कर दिया गया है! स्थिति जांचने के लिए कुछ सेकंड के बाद पेज को रीफ्रेश करें।", "Custom Form is created successfully": "कस्टम फॉर्म सफलतापूर्वक बनाया गया है", "Custom Form updated successfully": "कस्टम फॉर्म सफलतापूर्वक अपडेट किया गया", "Custom Form has been deleted permanently": "कस्टम फ़ॉर्म स्थायी रूप से हटा दिया गया है", @@ -38,6 +35,8 @@ "Download has been created successfully": "डाउनलोड सफलतापूर्वक बनाया गया है", "Download has been updated successfully": "डाउनलोड सफलतापूर्वक अपडेट कर दिया गया है", "Download has been deleted permanently": "डाउनलोड स्थायी रूप से हटा दिया गया है", + "Retry Queued!": "पुन: प्रयास कतारबद्ध!", + "Job has been queued for retrying!": "नौकरी पुनः प्रयास करने के लिए कतारबद्ध है!", "Online Players": "ऑनलाइन खिलाड़ी", "TPS": "टी पी एस", "CPU Load (%)": "सीपीयू लोड (%)", @@ -63,12 +62,12 @@ "Rank updated successfully": "रैंक सफलतापूर्वक अपडेट की गई", "Rank has been deleted permanently": "रैंक को स्थायी रूप से हटा दिया गया है", "Rank Reset Successful": "रैंक रीसेट सफल", - "Recruitment Form is created successfully": "भर्ती फॉर्म सफलतापूर्वक तैयार हो गया है", - "Recruitment Form updated successfully": "भर्ती फॉर्म सफलतापूर्वक अपडेट किया गया", - "Recruitment Form has been deleted permanently": "भर्ती फॉर्म स्थायी रूप से हटा दिया गया है", - "Recruitment Submission deleted successfully": "भर्ती सबमिशन सफलतापूर्वक हटा दिया गया", + "Application Form is created successfully": "आवेदन पत्र सफलतापूर्वक तैयार हो गया है", + "Application Form updated successfully": "आवेदन प्रपत्र सफलतापूर्वक अद्यतन किया गया", + "Application Form has been deleted permanently": "आवेदन पत्र स्थायी रूप से हटा दिया गया है", + "Request deleted successfully": "अनुरोध सफलतापूर्वक हटा दिया गया", "Action Successful": "कार्रवाई सफल", - "Recruitment Submission action has been completed successfully": "भर्ती सबमिशन कार्रवाई सफलतापूर्वक पूरी हो गई है", + "Request action has been completed successfully": "अनुरोध कार्रवाई सफलतापूर्वक पूरी हो गई है", "Message Successfully": "संदेश सफलतापूर्वक", "Message has been deleted successfully": "संदेश सफलतापूर्वक हटा दिया गया है", "New Role is created successfully": "नई भूमिका सफलतापूर्वक बनाई गई", @@ -78,8 +77,7 @@ ":role cannot be deleted because there are users on this role.!": ":role को हटाया नहीं जा सकता क्योंकि इस भूमिका में उपयोगकर्ता हैं।!", "Role has been deleted!": "भूमिका हटा दी गई है!", "New server added successfully": "नया सर्वर सफलतापूर्वक जोड़ा गया", - "Bungee server added successfully": "बंजी सर्वर सफलतापूर्वक जोड़ा गया", - "Bungee server updated successfully": "बंजी सर्वर सफलतापूर्वक अपडेट किया गया", + "Proxy server added successfully": "प्रॉक्सी सर्वर सफलतापूर्वक जोड़ा गया", "Server updated successfully": "सर्वर सफलतापूर्वक अपडेट किया गया", "Server has been deleted permanently": "सर्वर को स्थायी रूप से हटा दिया गया है", "Rescan Queued!": "कतार में फिर से स्कैन करें!", @@ -117,10 +115,16 @@ "User deleted successfully": "उपयोगकर्ता सफलतापूर्वक हटा दिया गया", "Player not found": "खिलाड़ी नहीं मिले", "Player already linked to a user": "खिलाड़ी पहले से ही एक उपयोगकर्ता से जुड़ा हुआ है", - "Failed to start player session.": "खिलाड़ी सत्र प्रारंभ करने में विफल.", - "Failed reporting player pvp kill.": "विफल रिपोर्टिंग खिलाड़ी pvp किल।", + "Provided OTP is invalid or expired. Please try again.": "बशर्ते ओटीपी अमान्य या समाप्त हो गया हो। कृपया पुन: प्रयास करें।", + "You already have max :max_slots players linked!": "आपके पास पहले से ही अधिकतम :max_slots खिलाड़ी लिंक हैं!", + "Player linked successfully": "प्लेयर सफलतापूर्वक लिंक हो गया", + "Player intel is disabled for this server.": "इस सर्वर के लिए प्लेयर इंटेल अक्षम है.", + "Failed to start player session. :message": "प्लेयर सत्र प्रारंभ करने में विफल. :message", + "Failed reporting player pvp kill: :message": "विफल रिपोर्टिंग प्लेयर पीवीपी किल: :message", + "Failed reporting player death: :message": "खिलाड़ी की मृत्यु की रिपोर्ट करने में विफल: :message", "PlayerIntel event for :username reported successfully.": " :username के लिए प्लेयरइंटेल इवेंट सफलतापूर्वक रिपोर्ट किया गया।", - "Failed to report Event data.": "घटना डेटा की रिपोर्ट करने में विफल।", + "Failed to report Event data: :message": "इवेंट डेटा रिपोर्ट करने में विफल: :message", + "Server Intel failed to report: :message": "सर्वर इंटेल रिपोर्ट करने में विफल रहा: :message", "Submit Successful!": "सबमिट सफल!", "Form has been submitted successfully.": "फॉर्म सफलतापूर्वक सबमिट कर दिया गया है.", "Comments are not allowed for this news": "इस समाचार के लिए टिप्पणियों की अनुमति नहीं है", @@ -139,7 +143,7 @@ "Applied Successfully!": "सफलतापूर्वक लागू किया गया!", "Application has been submitted successfully.": "आवेदन सफलतापूर्वक सबमिट कर दिया गया है.", "Withdraw Successful": "निकासी सफल", - "Recruitment Submission withdrawn successfully": "भर्ती सबमिशन सफलतापूर्वक वापस ले लिया गया", + "Application Request withdrawn successfully": "आवेदन अनुरोध सफलतापूर्वक वापस ले लिया गया", "Failed to ping server": "सर्वर पिंग करने में विफल", "Failed to query server": "सर्वर से पूछताछ करने में विफल", "Web Query Failed": "वेब क्वेरी विफल", @@ -164,20 +168,20 @@ "[Notification] :user commented on your post": "[सूचना] :user ने आपकी पोस्ट पर टिप्पणी की", "[Notification] Someone liked your post": "[सूचना] किसी ने आपकी पोस्ट पसंद की", "[Notification] :user liked your post": "[सूचना] :user को आपकी पोस्ट पसंद आई", - "[Notification] New message received on a recruitment application.": "[सूचना] एक भर्ती आवेदन पर नया संदेश प्राप्त हुआ।", - ":causer sent new message on his application for :recruitment:": ":causer ने :recruitment के लिए अपने आवेदन पर नया संदेश भेजा:", - "[Notification] Your application has a new message.": "[सूचना] आपके एप्लिकेशन में एक नया संदेश है।", - ":causer sent you a message on your application for :recruitment:": ":causer ने आपको :recruitment के लिए आपके आवेदन पर एक संदेश भेजा है:", - "[Notification] New recruitment application received.": "[अधिसूचना] नई भर्ती आवेदन प्राप्त हुआ।", - "[Notification] An application withdrawn by user.": "[अधिसूचना] उपयोगकर्ता द्वारा वापस लिया गया आवेदन।", - ":applicant has withdrawn his application for :recruitment.": ":applicant ने :recruitment के लिए अपना आवेदन वापस ले लिया है।", - "[Notification] Your Application status has changed.": "[अधिसूचना] आपके आवेदन की स्थिति बदल गई है।", - ":causer has started processing your application for :recruitment.": ":causer ने :recruitment के लिए आपके आवेदन पर कार्रवाई शुरू कर दी है।", - ":causer has put on-hold your application for :recruitment.": ":causer ने :recruitment के लिए आपका आवेदन रोक दिया है।", - "[Notification] Congratulations! Your Application has been Approved.": "[अधिसूचना] बधाई हो! आपका आवेदन स्वीकृत हो गया है.", - ":causer has approved your application for :recruitment.": ":causer ने :recruitment के लिए आपका आवेदन स्वीकृत कर दिया है।", - "[Notification] Sorry! Your Application has been Rejected.": "[सूचना] क्षमा करें! आपका आवेदन अस्वीकृत कर दिया गया है.", - ":causer has rejected your application for :recruitment.": ":causer ने :recruitment के लिए आपका आवेदन अस्वीकार कर दिया है।", + "[Notification] New message received on a application request.": "[अधिसूचना] आवेदन अनुरोध पर नया संदेश प्राप्त हुआ।", + ":causer sent new message on his application request for :recruitment:": ":causer ने :recruitment के लिए अपने आवेदन अनुरोध पर नया संदेश भेजा:", + "[Notification] Your application request has a new message.": "[सूचना] आपके आवेदन अनुरोध में एक नया संदेश है।", + ":causer sent you a message on your application request for :recruitment:": ":causer ने आपको :recruitment के लिए आपके आवेदन अनुरोध पर एक संदेश भेजा है:", + "[Notification] New application request received.": "[अधिसूचना] नया आवेदन अनुरोध प्राप्त हुआ।", + "[Notification] An application request withdrawn by user.": "[अधिसूचना] उपयोगकर्ता द्वारा एक आवेदन अनुरोध वापस ले लिया गया।", + ":applicant has withdrawn his application request for :recruitment.": ":applicant ने :recruitment के लिए अपना आवेदन अनुरोध वापस ले लिया है।", + "[Notification] Your Application request status has changed.": "[अधिसूचना] आपके आवेदन अनुरोध की स्थिति बदल गई है।", + ":causer has started processing your application request for :recruitment.": ":causer ने :recruitment के लिए आपके आवेदन अनुरोध पर कार्रवाई शुरू कर दी है।", + ":causer has put on-hold your application request for :recruitment.": ":causer ने :recruitment के लिए आपके आवेदन अनुरोध को रोक दिया है।", + "[Notification] Congratulations! Your Application request has been Approved.": "[अधिसूचना] बधाई हो! आपका आवेदन अनुरोध स्वीकृत कर दिया गया है.", + ":causer has approved your application request for :recruitment.": ":causer ने :recruitment के लिए आपके आवेदन अनुरोध को मंजूरी दे दी है।", + "[Notification] Sorry! Your Application request has been Rejected.": "[सूचना] क्षमा करें! आपका आवेदन अनुरोध अस्वीकार कर दिया गया है.", + ":causer has rejected your application request for :recruitment.": ":causer ने :recruitment के लिए आपके आवेदन अनुरोध को अस्वीकार कर दिया है।", "[Notification] You are Banned by :user": "[अधिसूचना] आप :user द्वारा प्रतिबंधित हैं", "Oh no! You are banned by a staff member and can no longer access our website. If you think this was a mistake please create an appeal.": "अरे नहीं! आपको एक स्टाफ सदस्य द्वारा प्रतिबंधित कर दिया गया है और आप अब हमारी वेबसाइट तक नहीं पहुंच सकते। यदि आपको लगता है कि यह एक गलती थी तो कृपया एक अपील बनाएं।", "Banned by: :user": "द्वारा प्रतिबंधित: :user", @@ -185,8 +189,9 @@ "Oh no! You are muted by a staff member and can no longer send messages or chat in our website. If you think this was a mistake please create an appeal.": "अरे नहीं! आपको एक स्टाफ सदस्य द्वारा म्यूट कर दिया गया है और अब आप संदेश नहीं भेज सकते या हमारी वेबसाइट पर चैट नहीं कर सकते। यदि आपको लगता है कि यह एक गलती थी तो कृपया एक अपील बनाएं।", "Muted by: :user": "द्वारा म्यूट किया गया: :user", "Failed to upload skin to MineSkin. Please try again later": "माइनस्किन पर त्वचा अपलोड करने में विफल। कृपया बाद में पुन: प्रयास करें", - "Oh Jeez! Something went wrong. Please try again later.": "ओह भगवान! कुछ गलत हो गया। कृपया बाद में पुन: प्रयास करें।", "Error setting player skin. Please make sure provided skin is valid.": "प्लेयर स्किन सेट करने में त्रुटि. कृपया सुनिश्चित करें कि प्रदान की गई त्वचा वैध है।", + "Provided UUID is not valid.": "बशर्ते यूयूआईडी मान्य नहीं है.", + "WebQuery failed for unknown reasons. Please check minecraft server logs.": "अज्ञात कारणों से WebQuery विफल हो गया. कृपया Minecraft सर्वर लॉग की जाँच करें।", "Minecraft Servers & Players Tracking": "Minecraft सर्वर और खिलाड़ी ट्रैकिंग", "Use Light Theme": "लाइट थीम का प्रयोग करें", "Use Dark Theme": "डार्क थीम का प्रयोग करें", @@ -197,6 +202,8 @@ "We use cookies to enhance your browsing experience. By continuing, you consent to our cookie policy.": "हम आपके ब्राउज़िंग अनुभव को बेहतर बनाने के लिए कुकीज़ का उपयोग करते हैं। जारी रखकर, आप हमारी कुकी नीति से सहमत हैं।", "I Understand": "मैं समझता हूँ", "Reset": "रीसेट", + "Filter by :column": " :column द्वारा फ़िल्टर करें", + "Clear": "स्पष्ट", "No data found": "डाटा प्राप्त नहीं हुआ", "Previous": "पहले का", "Next": "अगला", @@ -218,15 +225,15 @@ "Logout": "लॉग आउट", "An anonymous user": "एक अनाम उपयोगकर्ता", "submitted a custom form.": "एक कस्टम फॉर्म जमा किया.", - "applied for a recruitment.": "एक भर्ती के लिए आवेदन किया.", + "created a new application request.": "एक नया एप्लिकेशन अनुरोध बनाया गया.", " has withdrawn his application.": "ने अपना आवेदन वापस ले लिया है.", " rejected your application.": "आपका आवेदन अस्वीकृत कर दिया.", " approved your application.": "आपके आवेदन को मंजूरी दे दी.", " has put your application on-hold.": "आपके आवेदन को होल्ड पर रख दिया है.", " has started processing your application.": "आपके आवेदन पर कार्रवाई शुरू कर दी है.", " has changed status of your application": "आपके आवेदन की स्थिति बदल गई है", - "New message received on a recruitment application.": "एक भर्ती आवेदन पर नया संदेश प्राप्त हुआ.", - "Your application has a new message from @:username": "आपके एप्लिकेशन में @:उपयोगकर्ता नाम से एक नया संदेश है", + "New message received on an application request.": "एप्लिकेशन अनुरोध पर नया संदेश प्राप्त हुआ.", + "Your application request received a new message from @:username": "आपके आवेदन अनुरोध को @:उपयोगकर्ता नाम से एक नया संदेश प्राप्त हुआ", "Poll starting": "मतदान शुरू", "Poll closing": "मतदान समापन", "Are you sure you want to delete this Post?": "क्या आप वाकई इस पोस्ट को हटाना चाहते हैं?", @@ -242,6 +249,7 @@ "Staff Member": "स्टाफ के सदस्य", "Muted User": "मौन उपयोगकर्ता", "Password": "पासवर्ड", + "Continue with empty password if you have no password.": "यदि आपके पास कोई पासवर्ड नहीं है तो खाली पासवर्ड के साथ जारी रखें।", "Cancel": "रद्द करना", "Whoops! Something went wrong.": "ओह! कुछ गलत हो गया।", "Leave Impersonation": "प्रतिरूपण छोड़ें", @@ -281,6 +289,37 @@ "Badge": "बैज", "Badge Image": "बैज छवि", "Delete Badge": "बैज हटाएँ", + "Run Command": "चलाने के आदेश", + "Scope": "दायरा", + "Global": "वैश्विक", + "Run generic command": "सामान्य आदेश चलाएँ", + "Player": "खिलाड़ी", + "Run against players": "खिलाड़ियों के विरुद्ध दौड़ें", + "Available Placeholders": "उपलब्ध प्लेसहोल्डर", + "Username of the player the command is running on.": "उस प्लेयर का उपयोगकर्ता नाम जिस पर कमांड चल रहा है।", + "Unique Id of the player the command is running on.": "उस प्लेयर की विशिष्ट आईडी जिस पर कमांड चल रही है।", + "Enter command to run...": "चलाने के लिए कमांड दर्ज करें...", + "Servers to run on": "चलाने के लिए सर्वर", + "Leave empty to run on all servers": "सभी सर्वरों पर चलने के लिए खाली छोड़ दें", + "Players to run on": "दौड़ने के लिए खिलाड़ी", + "Select players": "खिलाड़ियों का चयन करें", + "Select players to run command on": "कमांड चलाने के लिए खिलाड़ियों का चयन करें", + "Require player to be online": "खिलाड़ी को ऑनलाइन होना आवश्यक है", + "This command should only run if player is online on running server. If not online it will be queued to run when player comes online.": "यह कमांड केवल तभी चलना चाहिए जब प्लेयर रनिंग सर्वर पर ऑनलाइन हो। यदि ऑनलाइन नहीं है तो खिलाड़ी के ऑनलाइन आने पर इसे चलाने के लिए कतारबद्ध किया जाएगा।", + "Command": "आज्ञा", + "Server": "सर्वर", + "Status": "दर्जा", + "Last Attempted": "अंतिम प्रयास", + "Execute At": "पर निष्पादित करें", + "Tags": "टैग", + "For Player": "खिलाड़ी के लिए", + "Output": "उत्पादन", + "Command History": "कमान इतिहास", + "Retry All Failed": "पुनः प्रयास विफल", + "Attempts: :attempts\/:max_attempts": "प्रयास: :attempts\/:max_attempts", + "none": "कोई भी नहीं", + "Retry Command": "पुनः प्रयास करें आदेश", + "Delete Command": "आदेश हटाएँ", "Create Custom Form": "कस्टम फॉर्म बनाएं", "Title of Custom Form": "कस्टम फॉर्म का शीर्षक", "Eg: Contact Us": "जैसे: हमसे संपर्क करें", @@ -303,7 +342,6 @@ "Edit Custom Form": "कस्टम फॉर्म संपादित करें", "Update Custom Form": "कस्टम फॉर्म अपडेट करें", "Title": "शीर्षक", - "Status": "दर्जा", "Can Submit": "सबमिट कर सकते हैं", "Notify Staff on Submit": "सबमिट करने पर स्टाफ को सूचित करें", "Visible in Listing": "लिस्टिंग में दिखाई दे रहा है", @@ -323,7 +361,6 @@ "Max submission per user": "प्रति उपयोगकर्ता अधिकतम सबमिशन", "not applicable": "लागू नहीं", "Minimum staff role weight to view submissions": "प्रस्तुतियाँ देखने के लिए न्यूनतम स्टाफ भूमिका भार", - "none": "कोई भी नहीं", "Notify staff on new submission": "नई प्रस्तुति पर कर्मचारियों को सूचित करें", "Updated": "अद्यतन", "Country": "देश", @@ -410,6 +447,17 @@ "External URL is protected from end users.": "बाहरी यूआरएल अंतिम उपयोगकर्ताओं से सुरक्षित है।", "Minimum Role Weight Required to Download": "डाउनलोड करने के लिए न्यूनतम भूमिका भार आवश्यक है", "Delete Download": "डाउनलोड हटाएँ", + "UUID": "यूयूआईडी", + "Job": "काम", + "Connection\/Queue": "कनेक्शन\/कतार", + "Exception": "अपवाद", + "Failed At": "पर असफल", + "Failed Jobs": "असफल नौकरियाँ", + "Retry All Jobs": "सभी नौकरियों के लिए पुनः प्रयास करें", + "Clear All Jobs": "सभी नौकरियाँ साफ़ करें", + "Attempts: :attempts": "प्रयास: :attempts", + "Retry Job": "कार्य पुनः प्रयास करें", + "Delete Job": "कार्य हटाएँ", "Create News": "समाचार बनाएं", "News Category": "समाचार श्रेणी", "General": "सामान्य", @@ -486,11 +534,11 @@ "Reset to Default Ranks": "डिफ़ॉल्ट रैंक पर रीसेट करें", "Rank": "पद", "Delete Rank": "रैंक हटाएं", - "Create Recruitment Form": "भर्ती प्रपत्र बनाएं", - "Title of this Recruitment": "इस भर्ती का शीर्षक", + "Create Application Form": "आवेदन पत्र बनाएं", + "Title of this Application": "इस एप्लिकेशन का शीर्षक", "Eg: Apply to be a Staff Member": "उदाहरण: स्टाफ सदस्य बनने के लिए आवेदन करें", - "Recruitment Slug": "भर्ती स्लग", - "Recruitment Status": "भर्ती की स्थिति", + "Application Slug for URL": "यूआरएल के लिए एप्लिकेशन स्लग", + "Application Status": "आवेदन की स्थिति", "How many times a user can reapply after rejection. Leave empty for no limit.": "अस्वीकृति के बाद उपयोगकर्ता कितनी बार पुनः आवेदन कर सकता है। बिना किसी सीमा के खाली छोड़ दें.", "Submission Cooldown in Seconds": "कुछ ही सेकंड में सबमिशन कूलडाउन", "After how many seconds user can reapply this application. Leave empty for no cooldown.": "कितने सेकंड के बाद यूजर इस एप्लिकेशन को दोबारा अप्लाई कर सकता है। ठंडा न होने तक खाली छोड़ दें।", @@ -499,20 +547,19 @@ "Leave empty to allow any staff with [vote recruitment_submissions] permission to vote on submissions.": "[वोट रिक्रूटमेंट_सबमिशन] की अनुमति वाले किसी भी कर्मचारी को सबमिशन पर वोट करने की अनुमति देने के लिए खाली छोड़ें।", "Min Staff Role Weight to Act on Submission": "सबमिशन पर कार्य करने के लिए न्यूनतम स्टाफ भूमिका भार", "Min staff role weight required to Approve\/Reject on submission. Leave empty to allow any staff with [acton recruitment_submissions] permission to act on submissions.": "प्रस्तुत करने पर स्वीकृत\/अस्वीकार करने के लिए न्यूनतम स्टाफ भूमिका भार आवश्यक है। [एक्टन रिक्रूटमेंट_सबमिशन] की अनुमति वाले किसी भी कर्मचारी को सबमिशन पर कार्रवाई करने की अनुमति देने के लिए खाली छोड़ दें।", - "If this recruitment is for hiring of a specific role, select the role here.": "यदि यह भर्ती किसी विशिष्ट भूमिका के लिए है, तो यहां भूमिका का चयन करें।", - "Create Recruitment": "भर्ती बनाएँ", - "Edit Recruitment Form": "भर्ती प्रपत्र संपादित करें", - "Update Recruitment": "अद्यतन भर्ती", + "If this application is for hiring of a specific role, select the role here.": "यदि यह एप्लिकेशन किसी विशिष्ट भूमिका की भर्ती के लिए है, तो यहां भूमिका का चयन करें।", + "Edit Application Form": "आवेदन पत्र संपादित करें", + "Update Application Form": "आवेदन पत्र अद्यतन करें", "Notify Staff": "स्टाफ को सूचित करें", "Messaging": "संदेश", "Open Requests": "अनुरोध खोलें", "Closed Requests": "बंद अनुरोध", - "Manage Recruitment Forms": "भर्ती प्रपत्र प्रबंधित करें", - "Recruitment": "भर्ती", - "Delete Recruitment": "भर्ती हटाएँ", - ":title Intel - Recruitments": ":title इंटेल - भर्ती", + "Manage Application Forms": "आवेदन प्रपत्र प्रबंधित करें", + "Application Form": "आवेदन फार्म", + "Delete Application Form": "आवेदन पत्र हटाएं", + ":title Intel - Application Form": ":title इंटेल - आवेदन पत्र", ":title - Intel": ":title - इंटेल", - "This recruitment hiring for": "यह भर्ती के लिए भर्ती है", + "This application hiring for": "इस एप्लिकेशन के लिए भर्ती", "Submission Cooldown": "सबमिशन कूलडाउन", "Allow only Player Linked Users": "केवल प्लेयर लिंक्ड उपयोगकर्ताओं को अनुमति दें", "Allow only Verified Users": "केवल सत्यापित उपयोगकर्ताओं को ही अनुमति दें", @@ -520,16 +567,19 @@ "Enable Messaging Feature": "मैसेजिंग सुविधा सक्षम करें", "Notify staff on Events": "घटनाओं पर कर्मचारियों को सूचित करें", "Applicant": "आवेदक", + "Application": "आवेदन", + "Last Actor": "अंतिम अभिनेता", + "Last Comment": "अंतिम टिप्पणी", "Updated At": "अद्यतन किया गया", - "Closed Request - Recruitments": "बंद अनुरोध - भर्ती", - "Open Requests - Recruitments": "खुले अनुरोध - भर्ती", - "Closed Recruitment Submissions:": "बंद भर्ती प्रस्तुतियाँ:", - "Open Recruitment Submissions:": "भर्ती प्रविष्टियाँ खोलें:", - "All Recruitments": "सभी भर्ती", - ":user application for :recruitmenttitle #:index - Recruitments": " :recruitmenttitle #:सूचकांक के लिए :user आवेदन - भर्तियाँ", + "Closed Request - Applications": "बंद अनुरोध - अनुप्रयोग", + "Open Requests - Applications": "खुले अनुरोध - अनुप्रयोग", + "Closed Requests:": "बंद अनुरोध:", + "Open Requests:": "खुले अनुरोध:", + "All Applications": "सभी अनुप्रयोग", + ":user application for :recruitmenttitle #:index - Applications": " :recruitmenttitle के लिए :user अनुप्रयोग #:सूचकांक - अनुप्रयोग", ":user application for :recruitmenttitle #:index": " :recruitmenttitle #:index के लिए :user अनुप्रयोग", "Last Updated At": "अंतिम बार अद्यतन किया गया", - "Submission Status": "सबमिशन की स्थिति", + "Request Status": "अनुरोध की स्थिति", "Reason": "कारण", "Marked :status By": " :status द्वारा चिह्नित", "Mark In-Progress": "प्रगति पर अंकित करें", @@ -580,8 +630,8 @@ "Go back to Server List": "सर्वर सूची पर वापस जाएँ", "Add Bungee Server": "बंजी सर्वर जोड़ें", "Edit Bungee Server: :name": "बंजी सर्वर संपादित करें: :name", - "Minetrax only support adding one bungee server. This server will be used to show online players and server status. All sensitive information will be encrypted.": "मिनेट्रैक्स केवल एक बंजी सर्वर जोड़ने का समर्थन करता है। इस सर्वर का इस्तेमाल ऑनलाइन प्लेयर्स और सर्वर स्टेटस दिखाने के लिए किया जाएगा। सभी संवेदनशील जानकारी एन्क्रिप्ट की जाएगी।", - "Please note Proxy servers don't need Minetrax.jar plugin. Only install them on actual servers like spigot, bukkit etc.": "कृपया ध्यान दें कि प्रॉक्सी सर्वरों को Minetrax.jar प्लगइन की आवश्यकता नहीं है। उन्हें केवल वास्तविक सर्वर जैसे स्पिगोट, बुक्किट आदि पर स्थापित करें।", + "Add Bungee\/Velocity Server": "बंजी\/वेलोसिटी सर्वर जोड़ें", + "Edit Bungee\/Velocity Server: :name": "बंजी\/वेलोसिटी सर्वर संपादित करें: :name", "Server Name": "सर्वर का नाम", "Eg: My Bungee Server": "उदाहरण: मेरा बंजी सर्वर", "Hostname": "होस्ट का नाम", @@ -593,27 +643,26 @@ "Query Port": "प्रश्न गाह", "Eg: 25575": "जैसे: 25575", "Webquery Port": "वेबक्वेरी पोर्ट", - "Eg: 25585": "जैसे: 25585", + "WebQuery port is a new port which MineTrax plugin will open for secure connection between server and web. Enter a port value which is available and can be open. Eg: 25569": "वेबक्वेरी पोर्ट एक नया पोर्ट है जिसे माइनट्रैक्स प्लगइन सर्वर और वेब के बीच सुरक्षित कनेक्शन के लिए खोलेगा। एक पोर्ट मान दर्ज करें जो उपलब्ध है और खुला हो सकता है। जैसे: 25569", "Server Version": "सर्वर संस्करण", "Select version..": "संस्करण चुनें..", - "Edit Bungee Server": "बंजी सर्वर संपादित करें", - "Add New Server": "नया सर्वर जोड़ें", + "Enable Server Intel \/ Analytics": "सर्वर इंटेल\/एनालिटिक्स सक्षम करें", + "If enabled, server analytics data (performance metric, join activity etc) will be captured for this server via plugin.": "यदि सक्षम किया गया है, तो प्लगइन के माध्यम से इस सर्वर के लिए सर्वर एनालिटिक्स डेटा (प्रदर्शन मीट्रिक, जॉइन एक्टिविटी आदि) कैप्चर किया जाएगा।", + "Enable Skin Change via Web (SkinsRestorer)": "वेब के माध्यम से त्वचा परिवर्तन सक्षम करें (SkinsRestorer)", + "Allow user to change their linked players skin via web for this server. This will require SkinsRestorer plugin to be installed on the server.": "उपयोगकर्ता को इस सर्वर के लिए वेब के माध्यम से अपने लिंक किए गए खिलाड़ियों की त्वचा को बदलने की अनुमति दें। इसके लिए सर्वर पर SkinsRestorer प्लगइन इंस्टॉल करना होगा।", "Add Server": "सर्वर जोड़े", + "Edit Server": "सर्वर संपादित करें", + "Add New Server": "नया सर्वर जोड़ें", "This name will help to identify this server. Eg: Survival, Skyblock, etc.": "यह नाम इस सर्वर को पहचानने में मदद करेगा. जैसे: सर्वाइवल, स्काईब्लॉक, आदि।", "Publicly visible join address of the server. Eg: play.example.com": "सर्वर का सार्वजनिक रूप से दृश्यमान जुड़ाव पता। जैसे: play.example.com", "Higher the weight, higher the priority. Eg: 1,3,10 etc. Can be left empty.": "जितना अधिक वजन, उतनी अधिक प्राथमिकता। जैसे: 1,3,10 आदि। खाली छोड़ा जा सकता है।", - "WebQuery port is a new port which MineTrax plugin will open for secure connection between server and web. Enter a port value which is available and can be open. Eg: 25569": "वेबक्वेरी पोर्ट एक नया पोर्ट है जिसे माइनट्रैक्स प्लगइन सर्वर और वेब के बीच सुरक्षित कनेक्शन के लिए खोलेगा। एक पोर्ट मान दर्ज करें जो उपलब्ध है और खुला हो सकता है। जैसे: 25569", "Select server type": "सर्वर प्रकार चुनें", "Server Type": "सर्वर प्रकार", "Version": "संस्करण", - "Enable Server Intel \/ Analytics": "सर्वर इंटेल\/एनालिटिक्स सक्षम करें", - "If enabled, server analytics data (performance metric, join activity etc) will be captured for this server via plugin.": "यदि सक्षम किया गया है, तो प्लगइन के माध्यम से इस सर्वर के लिए सर्वर एनालिटिक्स डेटा (प्रदर्शन मीट्रिक, जॉइन एक्टिविटी आदि) कैप्चर किया जाएगा।", "Enable Player Intel \/ Analytics": "प्लेयर इंटेल\/एनालिटिक्स सक्षम करें", "If enabled, player intel & statistics data will be captured for this server via plugin.": "यदि सक्षम किया गया है, तो प्लगइन के माध्यम से इस सर्वर के लिए प्लेयर इंटेल और सांख्यिकी डेटा कैप्चर किया जाएगा।", "Enable In-Game Chat": "इन-गेम चैट सक्षम करें", "Enable in-game chat for this server, which allow users to view & chat to in-game players from website.": "इस सर्वर के लिए इन-गेम चैट सक्षम करें, जो उपयोगकर्ताओं को वेबसाइट से इन-गेम खिलाड़ियों को देखने और चैट करने की अनुमति देता है।", - "Enable Skin Change via Web (SkinsRestorer)": "वेब के माध्यम से त्वचा परिवर्तन सक्षम करें (SkinsRestorer)", - "Allow user to change their linked players skin via web for this server. This will require SkinsRestorer plugin to be installed on the server.": "उपयोगकर्ता को इस सर्वर के लिए वेब के माध्यम से अपने लिंक किए गए खिलाड़ियों की त्वचा को बदलने की अनुमति दें। इसके लिए सर्वर पर SkinsRestorer प्लगइन इंस्टॉल करना होगा।", "Edit Server: :name": "सर्वर संपादित करें: :name", "Update Server": "सर्वर अपडेट करें", "IP:Port": "आईपी: पोर्ट", @@ -623,17 +672,12 @@ "Servers": "सर्वर", "Sync Player Statistics": "सिंक प्लेयर सांख्यिकी", "Add": "जोड़ें", - "Server": "सर्वर", "Add Proxy Server": "प्रॉक्सी सर्वर जोड़ें", "WebQuery: :webquery_port": "वेबक्वेरी: :webquery_port", "not set": "सेट नहीं", - "Server Online": "सर्वर ऑनलाइन", - "Server Offline": "सर्वर ऑफ़लाइन", "Loading": "लोड हो रहा है", - "WebQuery Online": "वेबक्वेरी ऑनलाइन", - "WebQuery Offline": "WebQuery ऑफ़लाइन", + "WebQuery": "वेबक्वेरी", "View Server Intel": "सर्वर इंटेल देखें", - "Edit Server": "सर्वर संपादित करें", "Delete Server": "सर्वर हटाएं", "Statistics": "आंकड़े", "Performance": "प्रदर्शन", @@ -873,10 +917,23 @@ "Enable user to link their players to account": "उपयोगकर्ता को अपने खिलाड़ियों को खाते से जोड़ने के लिए सक्षम करें", "Max Players Per Account": "प्रति खाता अधिकतम खिलाड़ी", "Number of players that can be linked to one account in website.": "खिलाड़ियों की संख्या जिन्हें वेबसाइट में एक खाते से जोड़ा जा सकता है।", - "Account Link Success Command": "अकाउंट लिंक सक्सेस कमांड", - "Use this to reward players when they link account: Eg: give {PLAYER} diamond 1": "इसका उपयोग खिलाड़ियों द्वारा खाता लिंक करने पर उन्हें पुरस्कृत करने के लिए करें: उदा: {PLAYER} हीरा दें 1", - "Account Link Success Broadcast": "खाता लिंक सफलता प्रसारण", - "If set then this will be broadcast to server when player link is successful: Eg: {PLAYER} has successfully linked his account and won a ultra key.": "यदि सेट किया जाता है तो खिलाड़ी लिंक के सफल होने पर इसे सर्वर पर प्रसारित किया जाएगा: उदाहरण: {PLAYER} ने सफलतापूर्वक अपना खाता लिंक कर लिया है और एक अल्ट्रा कुंजी जीत ली है।", + "Account Link Success Commands": "खाता लिंक सफलता आदेश", + "(runs when a player is linked to account)": "(यह तब चलता है जब कोई खिलाड़ी खाते से जुड़ा होता है)", + "Username of the player which is linked.": "खिलाड़ी का उपयोगकर्ता नाम जो जुड़ा हुआ है.", + "Unique Id of the player which is linked.": "खिलाड़ी की विशिष्ट आईडी जो लिंक की गई है।", + "Run on servers": "सर्वर पर चलाएँ", + "Run on first link only": "केवल पहले लिंक पर ही चलाएँ", + "This command should only run if given player is getting linked for first time. (Eg: This wont run if player get unlinked and then linked again)": "यह कमांड केवल तभी चलना चाहिए जब दिया गया प्लेयर पहली बार लिंक हो रहा हो। (उदाहरण: यदि खिलाड़ी अनलिंक हो जाता है और फिर दोबारा लिंक हो जाता है तो यह नहीं चलेगा)", + "No commands on account link.": "खाता लिंक पर कोई आदेश नहीं.", + "Add New Link Command": "नया लिंक कमांड जोड़ें", + "Account Unlink Success Commands": "खाता अनलिंक सफलता आदेश", + "(runs when a player is unlinked from account)": "(यह तब चलता है जब कोई खिलाड़ी खाते से अनलिंक हो जाता है)", + "Username of the player which is unlinked.": "खिलाड़ी का उपयोक्तानाम जो अनलिंक किया गया है।", + "Unique Id of the player which is unlinked.": "प्लेयर की विशिष्ट आईडी जो अनलिंक है।", + "Run on first unlink only": "पहले अनलिंक पर ही चलाएँ", + "This command should only run if given player is getting unlinked for first time. (Eg: This wont run if player was linked and unlinked before)": "यह कमांड केवल तभी चलना चाहिए जब दिया गया प्लेयर पहली बार अनलिंक हो रहा हो। (उदाहरण: यदि प्लेयर पहले लिंक किया गया था और अनलिंक किया गया था तो यह नहीं चलेगा)", + "No commands on account unlink.": "खाता अनलिंक पर कोई आदेश नहीं.", + "Add New Unlink Command": "नया अनलिंक कमांड जोड़ें", "Enable Player Rank Sync": "प्लेयर रैंक सिंक सक्षम करें", "Enable this if you want to sync your player rank from server instead of website calculated rank. you must create a rank for each group you have in server making sure rank shortname matches the name of your player group in server.": "यदि आप वेबसाइट परिकलित रैंक के बजाय सर्वर से अपने खिलाड़ी रैंक को सिंक करना चाहते हैं तो इसे सक्षम करें। आपको सर्वर में मौजूद प्रत्येक समूह के लिए एक रैंक बनानी होगी, जिससे सुनिश्चित हो सके कि रैंक शॉर्टनाम सर्वर में आपके खिलाड़ी समूह के नाम से मेल खाता है।", "Rank Sync From Server": "सर्वर से रैंक सिंक", @@ -987,6 +1044,7 @@ "Joined": "में शामिल हो गए", "Flags": "झंडे", "Users Administration": "उपयोगकर्ता प्रशासन", + "Discord ID": "कलह आईडी", "Muted": "म्यूट किए गए", "Banned": "प्रतिबंधित", "View Profile": "प्रोफ़ाइल देखें", @@ -1188,10 +1246,10 @@ "Someone liked my Post": "किसी ने मेरी पोस्ट पसंद की", "I am muted by Staff": "मैं स्टाफ़ द्वारा मौन हूँ", "I am banned by Staff": "मुझे स्टाफ़ द्वारा प्रतिबंधित किया गया है", - "Recruitment submission status changed": "भर्ती सबमिशन स्थिति बदल गई", - "New message in recruitment submission": "भर्ती सबमिशन में नया संदेश", + "Application request status changed": "आवेदन अनुरोध स्थिति बदल गई", + "New message in application request": "आवेदन अनुरोध में नया संदेश", "For staff members": "स्टाफ सदस्यों के लिए", - "Recruitment submission received": "भर्ती आवेदन प्राप्त हुआ", + "Application request received": "आवेदन अनुरोध प्राप्त हुआ", "Custom form submission received": "कस्टम फॉर्म सबमिशन प्राप्त हुआ", "Someone commented on News": "किसी ने न्यूज पर टिप्पणी की", "Saved.": "बचाया।", @@ -1213,25 +1271,25 @@ "Mark all as read": "सभी को पढ़ा हुआ मार्क करें", "No notifications to show.": "दिखाने के लिए कोई सूचना नहीं.", "Last Updated": "आखरी अपडेट", - "Recruitments": "भर्ती", + "Application Forms": "आवेदन फॉर्म", "View My Applications": "मेरे एप्लिकेशन देखें", "Only for Verified Users": "केवल सत्यापित उपयोगकर्ताओं के लिए", "Only for Linked Account Users (Player linked)": "केवल लिंक किए गए खाता उपयोगकर्ताओं के लिए (प्लेयर लिंक्ड)", "Apply": "आवेदन करना", "Application Closed!": "आवेदन बंद!", "Login or Register to Apply!": "आवेदन करने के लिए लॉगिन या रजिस्टर करें!", - "You need to be logged in to apply to this recruitment.": "इस भर्ती में आवेदन करने के लिए आपको लॉग इन करना होगा।", + "You need to be logged in to apply to this application.": "इस एप्लिकेशन पर आवेदन करने के लिए आपको लॉग इन करना होगा।", "Max Submissions Reached!": "अधिकतम सबमिशन तक पहुंच गया!", "You are on a Cooldown!": "आप कूलडाउन पर हैं!", "Account Verification Required!": "खाता सत्यापन आवश्यक!", "Account Linking Required!": "खाता लिंक करना आवश्यक!", "You have already applied!": "आप पहले ही आवेदन कर चुके हैं!", - "View Application": "एप्लिकेशन देखें", + "View Request": "अनुरोध देखें", "Already approved in past! Wanna apply again?": "पहले ही मंजूरी मिल चुकी है! दोबारा आवेदन करना चाहते हैं?", "You may wanna check that before applying again.": "आप दोबारा आवेदन करने से पहले इसकी जांच कर सकते हैं।", - "View Approved Application": "स्वीकृत आवेदन देखें", - "My Recruitment Applications": "मेरे भर्ती आवेदन", - "Your application for :recruitmenttitle #:index - Recruitments": " :recruitmenttitle #:सूचकांक - भर्तियों के लिए आपका आवेदन", + "View Approved Request": "स्वीकृत अनुरोध देखें", + "My Application Requests": "मेरा आवेदन अनुरोध", + "Your application request for :recruitmenttitle #:index - Applications": " :recruitmenttitle #:index - एप्लीकेशन के लिए आपका आवेदन अनुरोध", "Application for :recruitmenttitle #:index": " :recruitmenttitle #:सूचकांक के लिए आवेदन", "Success! A staff will soon review your application. Please be patience.": "सफलता! एक कर्मचारी जल्द ही आपके आवेदन की समीक्षा करेगा। कृपया धैर्य रखिए।", "Withdraw": "निकालना", @@ -1246,7 +1304,11 @@ "You can link upto :count :player to your account! ( :left available )": "आप अपने खाते से :count :player तक लिंक कर सकते हैं! ( :left उपलब्ध)", "player": "खिलाड़ी", "players": "खिलाड़ियों", - "Initiate the process by joining the server and typing \/account-link in chat. A link will be generated, click on that link and your player will added to your account.": "सर्वर से जुड़कर और चैट में \/खाता-लिंक टाइप करके प्रक्रिया शुरू करें। एक लिंक जेनरेट होगा, उस लिंक पर क्लिक करें और आपका प्लेयर आपके अकाउंट में जुड़ जाएगा।", + "To link a player to your account, join server and type '\/link :otp' in your chat.": "किसी खिलाड़ी को अपने खाते से लिंक करने के लिए, सर्वर से जुड़ें और अपनी चैट में \\'\/link :otp\\' टाइप करें।", + "Copied!": "कॉपी किया गया!", + "This OTP will expire in :seconds seconds.": "यह OTP :seconds सेकंड में समाप्त हो जाएगा.", + "This OTP has expired. Refresh the page to get a new OTP.": "यह ओटीपी समाप्त हो गया है. नया ओटीपी प्राप्त करने के लिए पेज को रिफ्रेश करें।", + "Click here to refresh.": "यहाँ क्लिक करें डेटा ताज़ा।", "No players linked to your account right now.": "अभी आपके खाते से कोई खिलाड़ी लिंक नहीं है।", "Change Skin of this player.": "इस खिलाड़ी की त्वचा बदलें.", "Are you sure you want to unlink this player from your account?": "क्या आप वाकई इस प्लेयर को अपने खाते से अनलिंक करना चाहते हैं?", @@ -1377,11 +1439,9 @@ "Used Memory (MB)": "प्रयुक्त मेमोरी (एमबी)", "Server Status": "सर्वर की स्थिति", "Join": "जोड़ना", - "Copied!": "कॉपी किया गया!", "SETTINGS": "समायोजन", "Theme": "थीम", "Plugin": "लगाना", - "Player": "खिलाड़ी", "Navigation": "मार्गदर्शन", "Delete this shout permanently?": "इस चिल्लाहट को स्थायी रूप से हटाएं?", "No shouts yet.": "अभी तक कोई चिल्लाहट नहीं.", @@ -1433,5 +1493,18 @@ "You are muted by": "आप द्वारा म्यूट कर दिया गया है", "Role Weight to View Submission": "सबमिशन देखने के लिए भूमिका भार", "Slug": "काउंटर", - "via Email": "ईमेल के माध्यम से" + "Minetrax only support adding one bungee server. This server will be used to show online players and server status. All sensitive information will be encrypted.": "मिनेट्रैक्स केवल एक बंजी सर्वर जोड़ने का समर्थन करता है। इस सर्वर का इस्तेमाल ऑनलाइन प्लेयर्स और सर्वर स्टेटस दिखाने के लिए किया जाएगा। सभी संवेदनशील जानकारी एन्क्रिप्ट की जाएगी।", + "Please note Proxy servers don't need Minetrax.jar plugin. Only install them on actual servers like spigot, bukkit etc.": "कृपया ध्यान दें कि प्रॉक्सी सर्वरों को Minetrax.jar प्लगइन की आवश्यकता नहीं है। उन्हें केवल वास्तविक सर्वर जैसे स्पिगोट, बुक्किट आदि पर स्थापित करें।", + "Eg: 25585": "जैसे: 25585", + "Edit Bungee Server": "बंजी सर्वर संपादित करें", + "Server Online": "सर्वर ऑनलाइन", + "Server Offline": "सर्वर ऑफ़लाइन", + "WebQuery Online": "वेबक्वेरी ऑनलाइन", + "WebQuery Offline": "WebQuery ऑफ़लाइन", + "Account Link Success Command": "अकाउंट लिंक सक्सेस कमांड", + "Use this to reward players when they link account: Eg: give {PLAYER} diamond 1": "इसका उपयोग खिलाड़ियों द्वारा खाता लिंक करने पर उन्हें पुरस्कृत करने के लिए करें: उदा: {PLAYER} हीरा दें 1", + "Account Link Success Broadcast": "खाता लिंक सफलता प्रसारण", + "If set then this will be broadcast to server when player link is successful: Eg: {PLAYER} has successfully linked his account and won a ultra key.": "यदि सेट किया जाता है तो खिलाड़ी लिंक के सफल होने पर इसे सर्वर पर प्रसारित किया जाएगा: उदाहरण: {PLAYER} ने सफलतापूर्वक अपना खाता लिंक कर लिया है और एक अल्ट्रा कुंजी जीत ली है।", + "via Email": "ईमेल के माध्यम से", + "Initiate the process by joining the server and typing \/account-link in chat. A link will be generated, click on that link and your player will added to your account.": "सर्वर से जुड़कर और चैट में \/खाता-लिंक टाइप करके प्रक्रिया शुरू करें। एक लिंक जेनरेट होगा, उस लिंक पर क्लिक करें और आपका प्लेयर आपके अकाउंट में जुड़ जाएगा।" } \ No newline at end of file diff --git a/lang/hu.json b/lang/hu.json index a7fbc555f..14338df50 100644 --- a/lang/hu.json +++ b/lang/hu.json @@ -1,16 +1,8 @@ { "Email\/Password authentication is disabled.": "Az e-mail\/jelszó hitelesítés le van tiltva.", "The provided password does not match your current password.": "A megadott jelszó nem egyezik a jelenlegi jelszavával.", - "Link expired or invalid!": "A link lejárt vagy érvénytelen!", - "Please request a fresh link and try again.": "Kérjen új linket, és próbálja újra.", - "Player not found in database!": "A lejátszó nem található az adatbázisban!", - "Please wait for sometime for server to update its player database.": "Várjon egy ideig, amíg a szerver frissíti a lejátszó adatbázisát.", - "Player already linked to a user!": "A lejátszó már hozzá van kapcsolva egy felhasználóhoz!", - "If you own this user please unlink it from your another account or contact administrator.": "Ha Ön a felhasználó tulajdonosa, kérjük, válassza le másik fiókjáról, vagy lépjen kapcsolatba a rendszergazdával.", - "User already have max :max_slots players linked!": "A felhasználónak már max :max_slots játékosa van összekapcsolva!", - "If you want to link this player please unlink a player.": "Ha össze szeretné kapcsolni ezt a lejátszót, szüntesse meg a lejátszó összekapcsolását.", - "Played linked successfully!": "Sikeresen lejátszva linkelve!", - "This player is now linked to your account.": "Ez a játékos most össze van kapcsolva az Ön fiókjával.", + "Player unlinking disabled!": "A lejátszó leválasztása letiltva!", + "Player unlinking is disabled by the administrator.": "A lejátszó leválasztását a rendszergazda letiltotta.", "Player not found!": "Játékos nem található!", "No player with that ID found linked to your account.": "Nem találtunk ilyen azonosítóval rendelkező játékost a fiókodhoz kapcsolva.", "Played unlinked successfully!": "Lejátszva sikeresen leválasztva!", @@ -22,6 +14,11 @@ "Badge updated successfully": "A jelvény sikeresen frissítve", "Deleted Successfully": "Sikeresen törölve", "Badge has been deleted permanently": "A jelvényt véglegesen törölték", + ":count Commands Scheduled!": ":count parancsok ütemezve!", + "Commands has been scheduled for execution. Check the status in Command History.": "A parancsok végrehajtását ütemezték. Ellenőrizze az állapotot a Parancselőzményekben.", + "Deleted!": "Törölve!", + "Retried!": "Újrapróbálva!", + "Command has been queued for retrying! Refresh the page after few seconds to check the status.": "A parancs újrapróbálkozási sorba került! Az állapot ellenőrzéséhez néhány másodperc múlva frissítse az oldalt.", "Custom Form is created successfully": "Az egyéni űrlap sikeresen létrejött", "Custom Form updated successfully": "Egyéni űrlap sikeresen frissítve", "Custom Form has been deleted permanently": "Az egyéni űrlapot véglegesen törölték", @@ -38,6 +35,8 @@ "Download has been created successfully": "A letöltés sikeresen létrejött", "Download has been updated successfully": "A letöltés sikeresen frissítve", "Download has been deleted permanently": "A letöltés véglegesen törölve", + "Retry Queued!": "Újra Várólista!", + "Job has been queued for retrying!": "A feladat újrapróbálkozási sorba került!", "Online Players": "Online játékosok", "TPS": "TPS", "CPU Load (%)": "CPU terhelés (%)", @@ -63,12 +62,12 @@ "Rank updated successfully": "A rangsor sikeresen frissítve", "Rank has been deleted permanently": "A rangot véglegesen törölték", "Rank Reset Successful": "Ranghely visszaállítása sikeres", - "Recruitment Form is created successfully": "A felvételi űrlap sikeresen elkészült", - "Recruitment Form updated successfully": "Toborzási űrlap sikeresen frissítve", - "Recruitment Form has been deleted permanently": "Toborzási űrlap véglegesen törölve", - "Recruitment Submission deleted successfully": "A toborzási beadvány sikeresen törölve", + "Application Form is created successfully": "A jelentkezési lap sikeresen elkészült", + "Application Form updated successfully": "A jelentkezési lap sikeresen frissítve", + "Application Form has been deleted permanently": "A jelentkezési lapot véglegesen törölték", + "Request deleted successfully": "A kérés sikeresen törölve", "Action Successful": "Az akció sikeres", - "Recruitment Submission action has been completed successfully": "A toborzási beadási művelet sikeresen befejeződött", + "Request action has been completed successfully": "A kérési művelet sikeresen befejeződött", "Message Successfully": "Üzenet sikeresen", "Message has been deleted successfully": "Az üzenet sikeresen törölve", "New Role is created successfully": "Az új szerepkör sikeresen létrejött", @@ -78,8 +77,7 @@ ":role cannot be deleted because there are users on this role.!": ":role nem törölhető, mert vannak felhasználók ebben a szerepkörben.!", "Role has been deleted!": "A szerepkör törölve!", "New server added successfully": "Új szerver sikeresen hozzáadva", - "Bungee server added successfully": "Bungee szerver sikeresen hozzáadva", - "Bungee server updated successfully": "Bungee szerver sikeresen frissítve", + "Proxy server added successfully": "A proxyszerver sikeresen hozzáadva", "Server updated successfully": "A szerver sikeresen frissítve", "Server has been deleted permanently": "A szerver véglegesen törölve lett", "Rescan Queued!": "Újrakeresés várólistában!", @@ -117,10 +115,16 @@ "User deleted successfully": "A felhasználó sikeresen törölve", "Player not found": "Játékos nem található", "Player already linked to a user": "A lejátszó már hozzá van kapcsolva egy felhasználóhoz", - "Failed to start player session.": "Nem sikerült elindítani a játékos munkamenetet.", - "Failed reporting player pvp kill.": "A játékos pvp kill bejelentése sikertelen.", + "Provided OTP is invalid or expired. Please try again.": "Feltéve, hogy az OTP érvénytelen vagy lejárt. Kérlek próbáld újra.", + "You already have max :max_slots players linked!": "Már max :max_slots játékosod van linkelve!", + "Player linked successfully": "A lejátszó sikeresen összekapcsolva", + "Player intel is disabled for this server.": "A Player Intel le van tiltva ezen a szerveren.", + "Failed to start player session. :message": "Nem sikerült elindítani a játékos munkamenetet. :message", + "Failed reporting player pvp kill: :message": "Nem sikerült jelenteni a játékos pvp kill: :message", + "Failed reporting player death: :message": "A játékos halálának bejelentése sikertelen: :message", "PlayerIntel event for :username reported successfully.": "Sikeresen jelentették az :username PlayerIntel eseményt.", - "Failed to report Event data.": "Nem sikerült jelenteni az eseményadatokat.", + "Failed to report Event data: :message": "Nem sikerült jelenteni Eseményadatok: :message", + "Server Intel failed to report: :message": "Az Intel szerver nem tudta bejelenteni: :message", "Submit Successful!": "Sikeres beküldés!", "Form has been submitted successfully.": "Az űrlap sikeresen elküldve.", "Comments are not allowed for this news": "Ehhez a hírhez nem lehet kommentárt írni", @@ -139,7 +143,7 @@ "Applied Successfully!": "Sikeresen alkalmazva!", "Application has been submitted successfully.": "A jelentkezés sikeresen beküldve.", "Withdraw Successful": "A visszavonás sikeres", - "Recruitment Submission withdrawn successfully": "A toborzási beadvány sikeresen visszavonva", + "Application Request withdrawn successfully": "A jelentkezési kérelem sikeresen visszavonva", "Failed to ping server": "Nem sikerült pingelni a szervert", "Failed to query server": "Nem sikerült lekérdezni a szervert", "Web Query Failed": "A webes lekérdezés sikertelen", @@ -164,20 +168,20 @@ "[Notification] :user commented on your post": "[Értesítés] :user megjegyzést fűzött a bejegyzésedhez", "[Notification] Someone liked your post": "[Értesítés] Valakinek tetszett a bejegyzésed", "[Notification] :user liked your post": "[Értesítés] :user-nek tetszett a bejegyzésed", - "[Notification] New message received on a recruitment application.": "[Értesítés] Új üzenet érkezett egy munkaerő-felvételi kérelemhez.", - ":causer sent new message on his application for :recruitment:": ":causer új üzenetet küldött az :recruitment-re vonatkozó jelentkezéséhez:", - "[Notification] Your application has a new message.": "[Értesítés] Az alkalmazás új üzenetet kapott.", - ":causer sent you a message on your application for :recruitment:": ":causer üzenetet küldött neked az :recruitment jelentkezésedhez:", - "[Notification] New recruitment application received.": "[Értesítés] Új felvételi jelentkezés érkezett.", - "[Notification] An application withdrawn by user.": "[Értesítés] A felhasználó által visszavont alkalmazás.", - ":applicant has withdrawn his application for :recruitment.": ":applicant visszavonta :recruitment-re jelentkezését.", - "[Notification] Your Application status has changed.": "[Értesítés] Az alkalmazás állapota megváltozott.", - ":causer has started processing your application for :recruitment.": "Az :causer megkezdte az :recruitment-re vonatkozó kérelmének feldolgozását.", - ":causer has put on-hold your application for :recruitment.": "Az :causer felfüggesztette az :recruitment-re való jelentkezését.", - "[Notification] Congratulations! Your Application has been Approved.": "[Értesítés] Gratulálunk! Jelentkezését jóváhagytuk.", - ":causer has approved your application for :recruitment.": ":causer jóváhagyta a jelentkezését az :recruitment-re.", - "[Notification] Sorry! Your Application has been Rejected.": "[Értesítés] Elnézést! Jelentkezését elutasították.", - ":causer has rejected your application for :recruitment.": ":causer elutasította az :recruitment-re vonatkozó jelentkezését.", + "[Notification] New message received on a application request.": "[Értesítés] Új üzenet érkezett egy jelentkezési kérelemre.", + ":causer sent new message on his application request for :recruitment:": ":causer új üzenetet küldött az :recruitment jelentkezési kérelmére:", + "[Notification] Your application request has a new message.": "[Értesítés] A jelentkezési kérelméhez új üzenet érkezett.", + ":causer sent you a message on your application request for :recruitment:": ":causer üzenetet küldött Önnek az :recruitment jelentkezési kérelméről:", + "[Notification] New application request received.": "[Értesítés] Új jelentkezési kérelem érkezett.", + "[Notification] An application request withdrawn by user.": "[Értesítés] A felhasználó által visszavont alkalmazási kérelem.", + ":applicant has withdrawn his application request for :recruitment.": ":applicant visszavonta :recruitment jelentkezési kérelmét.", + "[Notification] Your Application request status has changed.": "[Értesítés] A jelentkezési kérelem állapota megváltozott.", + ":causer has started processing your application request for :recruitment.": "Az :causer megkezdte az :recruitment jelentkezési kérelmének feldolgozását.", + ":causer has put on-hold your application request for :recruitment.": "Az :causer felfüggesztette az :recruitment jelentkezési kérelmét.", + "[Notification] Congratulations! Your Application request has been Approved.": "[Értesítés] Gratulálunk! Pályázati kérelmét jóváhagytuk.", + ":causer has approved your application request for :recruitment.": ":causer jóváhagyta az :recruitment jelentkezési kérelmét.", + "[Notification] Sorry! Your Application request has been Rejected.": "[Értesítés] Elnézést! Jelentkezési kérelmét elutasították.", + ":causer has rejected your application request for :recruitment.": ":causer elutasította az :recruitment jelentkezési kérelmét.", "[Notification] You are Banned by :user": "[Értesítés] :user kitiltotta", "Oh no! You are banned by a staff member and can no longer access our website. If you think this was a mistake please create an appeal.": "Óh ne! Egy munkatársa kitiltotta Önt, és többé nem fér hozzá webhelyünkhöz. Ha úgy gondolja, hogy ez hiba volt, kérjük, hozzon létre fellebbezést.", "Banned by: :user": "Kitiltotta: :user", @@ -185,8 +189,9 @@ "Oh no! You are muted by a staff member and can no longer send messages or chat in our website. If you think this was a mistake please create an appeal.": "Óh ne! Egy munkatársunk elnémította Önt, és többé nem küldhet üzenetet, és nem cseveghet webhelyünkön. Ha úgy gondolja, hogy ez hiba volt, kérjük, hozzon létre fellebbezést.", "Muted by: :user": "Elnémította: :user", "Failed to upload skin to MineSkin. Please try again later": "Nem sikerült feltölteni a bőrt a MineSkinbe. Kérlek, próbáld újra később", - "Oh Jeez! Something went wrong. Please try again later.": "Ó Jesszusom! Valami elromlott. Kérlek, próbáld újra később.", "Error setting player skin. Please make sure provided skin is valid.": "Hiba a lejátszó skin beállításakor. Kérjük, győződjön meg arról, hogy a megadott bőr érvényes.", + "Provided UUID is not valid.": "A megadott UUID nem érvényes.", + "WebQuery failed for unknown reasons. Please check minecraft server logs.": "A WebQuery ismeretlen okok miatt meghiúsult. Kérjük, ellenőrizze a minecraft szerver naplóit.", "Minecraft Servers & Players Tracking": "Minecraft szerverek és játékosok követése", "Use Light Theme": "Használja a Fény témát", "Use Dark Theme": "Sötét téma használata", @@ -197,6 +202,8 @@ "We use cookies to enhance your browsing experience. By continuing, you consent to our cookie policy.": "Cookie-kat használunk a böngészési élmény fokozása érdekében. A folytatással elfogadja a cookie-kra vonatkozó szabályzatunkat.", "I Understand": "Megértem", "Reset": "Visszaállítás", + "Filter by :column": "Szűrés :column szerint", + "Clear": "Egyértelmű", "No data found": "Nem található adat", "Previous": "Előző", "Next": "Következő", @@ -218,15 +225,15 @@ "Logout": "Kijelentkezés", "An anonymous user": "Névtelen felhasználó", "submitted a custom form.": "egyéni űrlapot nyújtott be.", - "applied for a recruitment.": "felvételére jelentkezett.", + "created a new application request.": "új jelentkezési kérelmet hozott létre.", " has withdrawn his application.": "visszavonta kérelmét.", " rejected your application.": "elutasította a jelentkezését.", " approved your application.": "jóváhagyta a jelentkezését.", " has put your application on-hold.": "felfüggesztette a jelentkezését.", " has started processing your application.": "megkezdte a jelentkezés feldolgozását.", " has changed status of your application": "megváltoztatta az alkalmazás állapotát", - "New message received on a recruitment application.": "Új üzenet érkezett egy munkaerő-felvételi kérelemhez.", - "Your application has a new message from @:username": "Az alkalmazás új üzenetet kapott a @:felhasználónévtől", + "New message received on an application request.": "Új üzenet érkezett egy jelentkezési kérelemre.", + "Your application request received a new message from @:username": "Jelentkezési kérelmére új üzenet érkezett a @:username felhasználótól", "Poll starting": "Szavazás indul", "Poll closing": "Szavazás lezárása", "Are you sure you want to delete this Post?": "Biztosan törlöd ezt a bejegyzést?", @@ -242,6 +249,7 @@ "Staff Member": "Munkatárs", "Muted User": "Elnémított felhasználó", "Password": "Jelszó", + "Continue with empty password if you have no password.": "Ha nincs jelszava, folytassa üres jelszóval.", "Cancel": "Megszünteti", "Whoops! Something went wrong.": "Hoppá! Valami elromlott.", "Leave Impersonation": "A megszemélyesítés elhagyása", @@ -281,6 +289,37 @@ "Badge": "Jelvény", "Badge Image": "Jelvény képe", "Delete Badge": "Jelvény törlése", + "Run Command": "Futtassa a parancsot", + "Scope": "Hatály", + "Global": "Globális", + "Run generic command": "Futtassa az általános parancsot", + "Player": "Játékos", + "Run against players": "Fuss játékosok ellen", + "Available Placeholders": "Elérhető helyőrzők", + "Username of the player the command is running on.": "Annak a játékosnak a felhasználóneve, amelyen a parancs fut.", + "Unique Id of the player the command is running on.": "Annak a lejátszónak az egyedi azonosítója, amelyen a parancs fut.", + "Enter command to run...": "Írja be a parancsot a futtatáshoz...", + "Servers to run on": "Szerverek, amelyeken futni kell", + "Leave empty to run on all servers": "Hagyja üresen az összes szerveren való futtatáshoz", + "Players to run on": "Játékosok, akikre futni kell", + "Select players": "Válassza ki a játékosokat", + "Select players to run command on": "Válassza ki a játékosokat, akiken futtatni kívánja a parancsot", + "Require player to be online": "A játékosnak online kell lennie", + "This command should only run if player is online on running server. If not online it will be queued to run when player comes online.": "Ez a parancs csak akkor futhat le, ha a játékos online állapotban van a futó szerveren. Ha nincs online, akkor sorba kerül, hogy futni kezdjen, amikor a játékos online lesz.", + "Command": "Parancs", + "Server": "szerver", + "Status": "Állapot", + "Last Attempted": "Utolsó próbálkozás", + "Execute At": "Végrehajtás at", + "Tags": "Címkék", + "For Player": "Játékos számára", + "Output": "Kimenet", + "Command History": "Parancstörténet", + "Retry All Failed": "Minden újrapróbálkozás sikertelen", + "Attempts: :attempts\/:max_attempts": "Kísérletek: :attempts\/:max_attempts", + "none": "egyik sem", + "Retry Command": "Próbálja újra a parancsot", + "Delete Command": "Parancs törlése", "Create Custom Form": "Egyéni űrlap létrehozása", "Title of Custom Form": "Az egyéni űrlap címe", "Eg: Contact Us": "Pl.: Vegye fel velünk a kapcsolatot", @@ -303,7 +342,6 @@ "Edit Custom Form": "Egyéni űrlap szerkesztése", "Update Custom Form": "Egyéni űrlap frissítése", "Title": "Cím", - "Status": "Állapot", "Can Submit": "Beküldheti", "Notify Staff on Submit": "Értesítse a személyzetet a benyújtáskor", "Visible in Listing": "Látható a listában", @@ -323,7 +361,6 @@ "Max submission per user": "Maximális beküldés felhasználónként", "not applicable": "nem alkalmazható", "Minimum staff role weight to view submissions": "Minimális alkalmazotti szerepsúly a beadványok megtekintéséhez", - "none": "egyik sem", "Notify staff on new submission": "Értesítse a személyzetet az új beadványról", "Updated": "Frissítve", "Country": "Ország", @@ -410,6 +447,17 @@ "External URL is protected from end users.": "A külső URL védve van a végfelhasználóktól.", "Minimum Role Weight Required to Download": "A letöltéshez szükséges minimális szerepsúly", "Delete Download": "Letöltés törlése", + "UUID": "UUID", + "Job": "Munka", + "Connection\/Queue": "Csatlakozás\/Várólista", + "Exception": "Kivétel", + "Failed At": "Sikertelen at", + "Failed Jobs": "Sikertelen munkák", + "Retry All Jobs": "Próbálja újra az összes munkát", + "Clear All Jobs": "Minden munka törlése", + "Attempts: :attempts": "Próbálkozások: :attempts", + "Retry Job": "Próbálja újra a munkát", + "Delete Job": "Munka törlése", "Create News": "Hírek létrehozása", "News Category": "Hírek kategória", "General": "Tábornok", @@ -486,11 +534,11 @@ "Reset to Default Ranks": "Visszaállítás az alapértelmezett rangokra", "Rank": "Rang", "Delete Rank": "Rang törlése", - "Create Recruitment Form": "Toborzási űrlap létrehozása", - "Title of this Recruitment": "Ennek a toborzásnak a címe", + "Create Application Form": "Jelentkezési űrlap létrehozása", + "Title of this Application": "Jelen kérelem címe", "Eg: Apply to be a Staff Member": "Pl.: Jelentkezzen munkatársnak", - "Recruitment Slug": "Recruitment Slug", - "Recruitment Status": "Toborzási állapot", + "Application Slug for URL": "Application Slug az URL-hez", + "Application Status": "Alkalmazás állapota", "How many times a user can reapply after rejection. Leave empty for no limit.": "Hányszor jelentkezhet újra egy felhasználó az elutasítás után. Hagyja üresen korlátozás nélkül.", "Submission Cooldown in Seconds": "Beküldés lehűlése másodpercek alatt", "After how many seconds user can reapply this application. Leave empty for no cooldown.": "Hány másodperc múlva jelentkezhet újra a felhasználó az alkalmazást. Hagyja üresen, hogy ne hűljön le.", @@ -499,20 +547,19 @@ "Leave empty to allow any staff with [vote recruitment_submissions] permission to vote on submissions.": "Hagyja üresen, hogy a [vote recruitment_submissions] engedéllyel rendelkező alkalmazottak szavazhassanak a beadványokra.", "Min Staff Role Weight to Act on Submission": "Minimális alkalmazotti szerep súlya a benyújtáskor", "Min staff role weight required to Approve\/Reject on submission. Leave empty to allow any staff with [acton recruitment_submissions] permission to act on submissions.": "A beküldéskor jóváhagyandó\/elutasítandó minimális alkalmazotti szerepkör súlya. Hagyja üresen, hogy az [acton recruitment_submissions] engedéllyel rendelkező személyzet eljárjon a beadványokkal kapcsolatban.", - "If this recruitment is for hiring of a specific role, select the role here.": "Ha ez a toborzás egy adott szerepkör felvételére vonatkozik, itt válassza ki a szerepet.", - "Create Recruitment": "Toborzás létrehozása", - "Edit Recruitment Form": "Toborzási űrlap szerkesztése", - "Update Recruitment": "Toborzás frissítése", + "If this application is for hiring of a specific role, select the role here.": "Ha ez az alkalmazás egy adott szerepkör felvételére vonatkozik, válassza ki a szerepet itt.", + "Edit Application Form": "Jelentkezési lap szerkesztése", + "Update Application Form": "Jelentkezési lap frissítése", "Notify Staff": "Értesítse a személyzetet", "Messaging": "Üzenetküldés", "Open Requests": "Nyissa meg a kéréseket", "Closed Requests": "Lezárt kérések", - "Manage Recruitment Forms": "Toborzási űrlapok kezelése", - "Recruitment": "Toborzás", - "Delete Recruitment": "Toborzás törlése", - ":title Intel - Recruitments": ":title Intel – Toborzás", + "Manage Application Forms": "Jelentkezési űrlapok kezelése", + "Application Form": "Jelentkezési lap", + "Delete Application Form": "Jelentkezési lap törlése", + ":title Intel - Application Form": ":title Intel - Jelentkezési űrlap", ":title - Intel": ":title - Intel", - "This recruitment hiring for": "Ez a munkaerő-felvétel", + "This application hiring for": "Ez az alkalmazás bérbeadása", "Submission Cooldown": "Beküldés Cooldown", "Allow only Player Linked Users": "Csak a játékoshoz kapcsolt felhasználók engedélyezése", "Allow only Verified Users": "Csak ellenőrzött felhasználók engedélyezése", @@ -520,16 +567,19 @@ "Enable Messaging Feature": "Üzenetküldési funkció engedélyezése", "Notify staff on Events": "Értesítse a személyzetet az eseményekről", "Applicant": "Pályázó", + "Application": "Alkalmazás", + "Last Actor": "Utolsó színész", + "Last Comment": "Utolsó hozzászólás", "Updated At": "Frissítve:", - "Closed Request - Recruitments": "Lezárt kérelem – Toborzás", - "Open Requests - Recruitments": "Nyitott kérelmek – Toborzás", - "Closed Recruitment Submissions:": "Lezárult toborzási jelentkezés:", - "Open Recruitment Submissions:": "Nyílt felvételi beadványok:", - "All Recruitments": "Minden toborzás", - ":user application for :recruitmenttitle #:index - Recruitments": ":user jelentkezés :recruitmenttitle #:indexhez - Toborzások", + "Closed Request - Applications": "Lezárt kérelem – Pályázatok", + "Open Requests - Applications": "Nyitott kérések – Alkalmazások", + "Closed Requests:": "Lezárt kérések:", + "Open Requests:": "Nyitott kérések:", + "All Applications": "Minden alkalmazás", + ":user application for :recruitmenttitle #:index - Applications": ":user alkalmazás :recruitmenttitle-hez #:index - Alkalmazások", ":user application for :recruitmenttitle #:index": ":user alkalmazás :recruitmenttitle #:indexhez", "Last Updated At": "Utolsó frissítés:", - "Submission Status": "Beküldés állapota", + "Request Status": "Kérelem állapota", "Reason": "Ok", "Marked :status By": "Megjelölte :status by", "Mark In-Progress": "Jelölje meg folyamatban", @@ -580,8 +630,8 @@ "Go back to Server List": "Menjen vissza a szerverlistához", "Add Bungee Server": "Bungee Server hozzáadása", "Edit Bungee Server: :name": "Bungee szerver szerkesztése: :name", - "Minetrax only support adding one bungee server. This server will be used to show online players and server status. All sensitive information will be encrypted.": "A Minetrax csak egy bungee szerver hozzáadását támogatja. Ez a szerver az online játékosok és a szerver állapotának megjelenítésére szolgál. Minden érzékeny információ titkosítva lesz.", - "Please note Proxy servers don't need Minetrax.jar plugin. Only install them on actual servers like spigot, bukkit etc.": "Kérjük, vegye figyelembe, hogy a proxyszerverekhez nincs szükség Minetrax.jar beépülő modulra. Csak olyan tényleges szerverekre telepítse őket, mint a spigot, bukkit stb.", + "Add Bungee\/Velocity Server": "Bungee\/Velocity szerver hozzáadása", + "Edit Bungee\/Velocity Server: :name": "Bungee\/Velocity szerver szerkesztése: :name", "Server Name": "Szerver név", "Eg: My Bungee Server": "Pl.: My Bungee Server", "Hostname": "Gazdanév", @@ -593,27 +643,26 @@ "Query Port": "Lekérdezési port", "Eg: 25575": "Pl.: 25575", "Webquery Port": "Weblekérdezési port", - "Eg: 25585": "Pl.: 25585", + "WebQuery port is a new port which MineTrax plugin will open for secure connection between server and web. Enter a port value which is available and can be open. Eg: 25569": "A WebQuery port egy új port, amelyet a MineTrax plugin nyit meg a szerver és a web közötti biztonságos kapcsolat érdekében. Adjon meg egy elérhető és megnyitható portértéket. Pl.: 25569", "Server Version": "Szerver verzió", "Select version..": "Válassz verziót..", - "Edit Bungee Server": "Bungee Server szerkesztése", - "Add New Server": "Új szerver hozzáadása", + "Enable Server Intel \/ Analytics": "Szerver Intel\/Analytics engedélyezése", + "If enabled, server analytics data (performance metric, join activity etc) will be captured for this server via plugin.": "Ha engedélyezve van, a szerver elemzési adatai (teljesítménymutató, csatlakozási tevékenység stb.) rögzítésre kerülnek ehhez a szerverhez a bővítményen keresztül.", + "Enable Skin Change via Web (SkinsRestorer)": "Skin Change engedélyezése weben keresztül (SkinsRestorer)", + "Allow user to change their linked players skin via web for this server. This will require SkinsRestorer plugin to be installed on the server.": "Engedélyezi a felhasználóknak, hogy ezen a szerveren módosítsák a kapcsolt játékosok felületét az interneten keresztül. Ehhez telepíteni kell a SkinsRestorer beépülő modult a szerveren.", "Add Server": "Szerver hozzáadása", + "Edit Server": "Szerver szerkesztése", + "Add New Server": "Új szerver hozzáadása", "This name will help to identify this server. Eg: Survival, Skyblock, etc.": "Ez a név segít a szerver azonosításában. Pl.: Survival, Skyblock stb.", "Publicly visible join address of the server. Eg: play.example.com": "A szerver nyilvánosan látható csatlakozási címe. Pl.: play.example.com", "Higher the weight, higher the priority. Eg: 1,3,10 etc. Can be left empty.": "Minél nagyobb a súly, annál nagyobb a prioritás. Pl.: 1,3,10 stb. Üresen hagyható.", - "WebQuery port is a new port which MineTrax plugin will open for secure connection between server and web. Enter a port value which is available and can be open. Eg: 25569": "A WebQuery port egy új port, amelyet a MineTrax plugin nyit meg a szerver és a web közötti biztonságos kapcsolat érdekében. Adjon meg egy elérhető és megnyitható portértéket. Pl.: 25569", "Select server type": "Válassza ki a szerver típusát", "Server Type": "Szerver típusa", "Version": "Változat", - "Enable Server Intel \/ Analytics": "Szerver Intel\/Analytics engedélyezése", - "If enabled, server analytics data (performance metric, join activity etc) will be captured for this server via plugin.": "Ha engedélyezve van, a szerver elemzési adatai (teljesítménymutató, csatlakozási tevékenység stb.) rögzítésre kerülnek ehhez a szerverhez a bővítményen keresztül.", "Enable Player Intel \/ Analytics": "Lejátszó Intel\/Analytics engedélyezése", "If enabled, player intel & statistics data will be captured for this server via plugin.": "Ha engedélyezve van, a lejátszó intelligens és statisztikai adatait a rendszer rögzíti ehhez a szerverhez a bővítményen keresztül.", "Enable In-Game Chat": "Engedélyezze a játékon belüli csevegést", "Enable in-game chat for this server, which allow users to view & chat to in-game players from website.": "Engedélyezze a játékon belüli csevegést ezen a szerveren, amely lehetővé teszi a felhasználók számára, hogy megtekintsék a játékon belüli játékosokat és csevegjenek velük a webhelyről.", - "Enable Skin Change via Web (SkinsRestorer)": "Skin Change engedélyezése weben keresztül (SkinsRestorer)", - "Allow user to change their linked players skin via web for this server. This will require SkinsRestorer plugin to be installed on the server.": "Engedélyezi a felhasználóknak, hogy ezen a szerveren módosítsák a kapcsolt játékosok felületét az interneten keresztül. Ehhez telepíteni kell a SkinsRestorer beépülő modult a szerveren.", "Edit Server: :name": "Szerver szerkesztése: :name", "Update Server": "Szerver frissítése", "IP:Port": "IP: Port", @@ -623,17 +672,12 @@ "Servers": "Szerverek", "Sync Player Statistics": "Szinkronizálja a lejátszó statisztikáit", "Add": "Hozzáadás", - "Server": "szerver", "Add Proxy Server": "Proxy szerver hozzáadása", "WebQuery: :webquery_port": "WebQuery: :webquery_port", "not set": "nincs beállítva", - "Server Online": "Online szerver", - "Server Offline": "Szerver Offline", "Loading": "Betöltés", - "WebQuery Online": "WebQuery Online", - "WebQuery Offline": "WebQuery Offline", + "WebQuery": "WebQuery", "View Server Intel": "Intel szerver megtekintése", - "Edit Server": "Szerver szerkesztése", "Delete Server": "Szerver törlése", "Statistics": "Statisztika", "Performance": "Teljesítmény", @@ -873,10 +917,23 @@ "Enable user to link their players to account": "Engedélyezze a felhasználónak, hogy összekapcsolja játékosait a fiókkal", "Max Players Per Account": "Max játékosok száma fiókonként", "Number of players that can be linked to one account in website.": "A webhelyen egy fiókhoz kapcsolható játékosok száma.", - "Account Link Success Command": "Fiók összekapcsolása sikeres parancs", - "Use this to reward players when they link account: Eg: give {PLAYER} diamond 1": "Használja ezt a játékosok jutalmazására, amikor fiókot kapcsolnak össze: Pl.: adjon {PLAYER} 1 gyémántot", - "Account Link Success Broadcast": "Fióklinkelés sikeres közvetítése", - "If set then this will be broadcast to server when player link is successful: Eg: {PLAYER} has successfully linked his account and won a ultra key.": "Ha be van állítva, akkor ez közvetítésre kerül a szerverre, amikor a játékos összekapcsolása sikeres: Pl.: {PLAYER} sikeresen összekapcsolta a fiókját és ultrakulcsot nyert.", + "Account Link Success Commands": "Fióklinkelési sikerparancsok", + "(runs when a player is linked to account)": "(fut, ha egy játékos fiókhoz van kapcsolva)", + "Username of the player which is linked.": "A linkelt játékos felhasználóneve.", + "Unique Id of the player which is linked.": "A linkelt játékos egyedi azonosítója.", + "Run on servers": "Szervereken fut", + "Run on first link only": "Csak az első linken fut", + "This command should only run if given player is getting linked for first time. (Eg: This wont run if player get unlinked and then linked again)": "Ez a parancs csak akkor futhat le, ha az adott játékos először kapcsolódik be. (Pl.: Ez nem fut le, ha a játékost leválasztják, majd újra összekapcsolják)", + "No commands on account link.": "Nincsenek parancsok a fióklinken.", + "Add New Link Command": "Új hivatkozási parancs hozzáadása", + "Account Unlink Success Commands": "Fiók leválasztása sikerparancsok", + "(runs when a player is unlinked from account)": "(akkor fut le, ha a játékost leválasztják a fiókról)", + "Username of the player which is unlinked.": "A leválasztott játékos felhasználóneve.", + "Unique Id of the player which is unlinked.": "A leválasztott lejátszó egyedi azonosítója.", + "Run on first unlink only": "Csak az első leválasztáskor futtassa", + "This command should only run if given player is getting unlinked for first time. (Eg: This wont run if player was linked and unlinked before)": "Ennek a parancsnak csak akkor kell futnia, ha az adott játékos először kerül leválasztásra. (Pl.: Ez nem fog futni, ha a lejátszót korábban összekapcsolták és leválasztották)", + "No commands on account unlink.": "Nincsenek parancsok a fiók leválasztásához.", + "Add New Unlink Command": "Új leválasztási parancs hozzáadása", "Enable Player Rank Sync": "A Player Rank Sync engedélyezése", "Enable this if you want to sync your player rank from server instead of website calculated rank. you must create a rank for each group you have in server making sure rank shortname matches the name of your player group in server.": "Engedélyezze ezt, ha a játékos rangját a szerverről szeretné szinkronizálni a webhely által kiszámított rangsor helyett. minden csoporthoz létre kell hoznia egy rangot a szerveren, ügyelve arra, hogy a rang rövidített neve megegyezzen a szerveren lévő játékoscsoport nevével.", "Rank Sync From Server": "Rangszinkronizálás a szerverről", @@ -987,6 +1044,7 @@ "Joined": "Csatlakozott", "Flags": "Zászlók", "Users Administration": "Felhasználók adminisztrációja", + "Discord ID": "Discord ID", "Muted": "Tompított", "Banned": "Kitiltva", "View Profile": "Profil megtekintése", @@ -1188,10 +1246,10 @@ "Someone liked my Post": "Valakinek tetszett a bejegyzésem", "I am muted by Staff": "Elnémítottam a személyzet által", "I am banned by Staff": "Engem a személyzet kitiltott", - "Recruitment submission status changed": "A toborzási beadvány állapota megváltozott", - "New message in recruitment submission": "Új üzenet a felvételi benyújtásban", + "Application request status changed": "Az alkalmazáskérés állapota megváltozott", + "New message in application request": "Új üzenet a jelentkezési kérelemben", "For staff members": "A személyzet tagjainak", - "Recruitment submission received": "Beérkezett a felvételi beadvány", + "Application request received": "Pályázati kérelem érkezett", "Custom form submission received": "Egyéni űrlap beküldése érkezett", "Someone commented on News": "Valaki hozzászólt a Hírekhez", "Saved.": "Mentett.", @@ -1213,25 +1271,25 @@ "Mark all as read": "összes megjelölése olvasottként", "No notifications to show.": "Nincs megjeleníthető értesítés.", "Last Updated": "Utolsó frissítés", - "Recruitments": "Toborzások", + "Application Forms": "Jelentkezési lapok", "View My Applications": "Saját alkalmazások megtekintése", "Only for Verified Users": "Csak ellenőrzött felhasználók számára", "Only for Linked Account Users (Player linked)": "Csak kapcsolt fiókos felhasználóknak (a játékoshoz kapcsolva)", "Apply": "Alkalmaz", "Application Closed!": "Pályázat lezárva!", "Login or Register to Apply!": "A jelentkezéshez jelentkezz be vagy regisztrálj!", - "You need to be logged in to apply to this recruitment.": "A toborzásra való jelentkezéshez be kell jelentkeznie.", + "You need to be logged in to apply to this application.": "Ehhez az alkalmazáshoz be kell jelentkeznie.", "Max Submissions Reached!": "Elérte a maximális beküldések számát!", "You are on a Cooldown!": "Lehűlésben vagy!", "Account Verification Required!": "Számlaellenőrzés szükséges!", "Account Linking Required!": "Fiók összekapcsolása szükséges!", "You have already applied!": "Már jelentkeztél!", - "View Application": "Alkalmazás megtekintése", + "View Request": "Kérelem megtekintése", "Already approved in past! Wanna apply again?": "Már jóváhagyták a múltban! Újra jelentkezni szeretnél?", "You may wanna check that before applying again.": "Ezt érdemes ellenőrizni, mielőtt újra jelentkezne.", - "View Approved Application": "Jóváhagyott pályázat megtekintése", - "My Recruitment Applications": "Toborzási jelentkezéseim", - "Your application for :recruitmenttitle #:index - Recruitments": "Jelentkezése :recruitmenttitle #:index - Toborzásra", + "View Approved Request": "Jóváhagyott kérelem megtekintése", + "My Application Requests": "Pályázati kéréseim", + "Your application request for :recruitmenttitle #:index - Applications": "Az Ön jelentkezési kérelme :recruitmenttitle #:index - Alkalmazások", "Application for :recruitmenttitle #:index": "Alkalmazás :recruitmenttitle #:indexhez", "Success! A staff will soon review your application. Please be patience.": "Siker! A személyzet hamarosan felülvizsgálja jelentkezését. Kérjük, legyen türelmes.", "Withdraw": "Visszavonás", @@ -1246,7 +1304,11 @@ "You can link upto :count :player to your account! ( :left available )": "Akár 1 :player-szer is összekapcsolható fiókjával! ( :left elérhető)", "player": "játékos", "players": "játékosok", - "Initiate the process by joining the server and typing \/account-link in chat. A link will be generated, click on that link and your player will added to your account.": "A folyamat elindításához csatlakozzon a szerverhez, és írja be a \/account-link parancsot a csevegésbe. A rendszer létrehoz egy linket, kattintson arra, és a lejátszó hozzáadódik a fiókjához.", + "To link a player to your account, join server and type '\/link :otp' in your chat.": "Ahhoz, hogy egy játékost összekapcsolhass a fiókoddal, csatlakozz a szerverhez, és írd be a „\/link :otp” szót a chatbe.", + "Copied!": "Másolva!", + "This OTP will expire in :seconds seconds.": "Ez az OTP :seconds másodpercen belül lejár.", + "This OTP has expired. Refresh the page to get a new OTP.": "Ez az OTP lejárt. Frissítse az oldalt új OTP beszerzéséhez.", + "Click here to refresh.": "Kattintson ide a frissítéshez.", "No players linked to your account right now.": "Jelenleg egyetlen játékos sem kapcsolódik a fiókjához.", "Change Skin of this player.": "Változtasd meg a lejátszó bőrét.", "Are you sure you want to unlink this player from your account?": "Biztosan le szeretné választani ezt a lejátszót a fiókjáról?", @@ -1377,11 +1439,9 @@ "Used Memory (MB)": "Használt memória (MB)", "Server Status": "Szerver állapota", "Join": "Csatlakozik", - "Copied!": "Másolva!", "SETTINGS": "BEÁLLÍTÁSOK", "Theme": "Téma", "Plugin": "Csatlakoztat", - "Player": "Játékos", "Navigation": "Navigáció", "Delete this shout permanently?": "Véglegesen törli ezt a kiáltást?", "No shouts yet.": "Még nincs kiáltás.", @@ -1433,5 +1493,18 @@ "You are muted by": "Önt elnémította", "Role Weight to View Submission": "Szerep súlya a benyújtás megtekintéséhez", "Slug": "Meztelen csiga", - "via Email": "e-mailen keresztül" + "Minetrax only support adding one bungee server. This server will be used to show online players and server status. All sensitive information will be encrypted.": "A Minetrax csak egy bungee szerver hozzáadását támogatja. Ez a szerver az online játékosok és a szerver állapotának megjelenítésére szolgál. Minden érzékeny információ titkosítva lesz.", + "Please note Proxy servers don't need Minetrax.jar plugin. Only install them on actual servers like spigot, bukkit etc.": "Kérjük, vegye figyelembe, hogy a proxyszerverekhez nincs szükség Minetrax.jar beépülő modulra. Csak olyan tényleges szerverekre telepítse őket, mint a spigot, bukkit stb.", + "Eg: 25585": "Pl.: 25585", + "Edit Bungee Server": "Bungee Server szerkesztése", + "Server Online": "Online szerver", + "Server Offline": "Szerver Offline", + "WebQuery Online": "WebQuery Online", + "WebQuery Offline": "WebQuery Offline", + "Account Link Success Command": "Fiók összekapcsolása sikeres parancs", + "Use this to reward players when they link account: Eg: give {PLAYER} diamond 1": "Használja ezt a játékosok jutalmazására, amikor fiókot kapcsolnak össze: Pl.: adjon {PLAYER} 1 gyémántot", + "Account Link Success Broadcast": "Fióklinkelés sikeres közvetítése", + "If set then this will be broadcast to server when player link is successful: Eg: {PLAYER} has successfully linked his account and won a ultra key.": "Ha be van állítva, akkor ez közvetítésre kerül a szerverre, amikor a játékos összekapcsolása sikeres: Pl.: {PLAYER} sikeresen összekapcsolta a fiókját és ultrakulcsot nyert.", + "via Email": "e-mailen keresztül", + "Initiate the process by joining the server and typing \/account-link in chat. A link will be generated, click on that link and your player will added to your account.": "A folyamat elindításához csatlakozzon a szerverhez, és írja be a \/account-link parancsot a csevegésbe. A rendszer létrehoz egy linket, kattintson arra, és a lejátszó hozzáadódik a fiókjához." } \ No newline at end of file diff --git a/lang/it.json b/lang/it.json index 4f164dd56..c8cb70347 100644 --- a/lang/it.json +++ b/lang/it.json @@ -1,16 +1,8 @@ { "Email\/Password authentication is disabled.": "L\\'autenticazione e-mail\/password è disabilitata.", "The provided password does not match your current password.": "La password fornita non corrisponde alla password corrente.", - "Link expired or invalid!": "Link scaduto o non valido!", - "Please request a fresh link and try again.": "Richiedi un nuovo link e riprova.", - "Player not found in database!": "Giocatore non trovato nel database!", - "Please wait for sometime for server to update its player database.": "Si prega di attendere un po\\' di tempo affinché il server aggiorni il database dei giocatori.", - "Player already linked to a user!": "Giocatore già collegato a un utente!", - "If you own this user please unlink it from your another account or contact administrator.": "Se possiedi questo utente, scollegalo dal tuo altro account o contatta l\\'amministratore.", - "User already have max :max_slots players linked!": "L\\'utente ha già un massimo di :max_slots giocatori collegati!", - "If you want to link this player please unlink a player.": "Se vuoi collegare questo giocatore, scollega un giocatore.", - "Played linked successfully!": "Giocato collegato con successo!", - "This player is now linked to your account.": "Questo giocatore è ora collegato al tuo account.", + "Player unlinking disabled!": "Scollegamento del giocatore disabilitato!", + "Player unlinking is disabled by the administrator.": "Lo scollegamento del giocatore è disabilitato dall\\'amministratore.", "Player not found!": "Giocatore non trovato!", "No player with that ID found linked to your account.": "Nessun giocatore con quell\\'ID trovato collegato al tuo account.", "Played unlinked successfully!": "Giocato scollegato con successo!", @@ -22,6 +14,11 @@ "Badge updated successfully": "Badge aggiornato correttamente", "Deleted Successfully": "Eliminato con successo", "Badge has been deleted permanently": "Il badge è stato eliminato definitivamente", + ":count Commands Scheduled!": ":count comandi programmati!", + "Commands has been scheduled for execution. Check the status in Command History.": "È stata pianificata l\\'esecuzione dei comandi. Controlla lo stato nella cronologia dei comandi.", + "Deleted!": "Eliminato!", + "Retried!": "Riprovato!", + "Command has been queued for retrying! Refresh the page after few seconds to check the status.": "Il comando è stato messo in coda per un nuovo tentativo! Aggiorna la pagina dopo alcuni secondi per verificare lo stato.", "Custom Form is created successfully": "Il modulo personalizzato è stato creato correttamente", "Custom Form updated successfully": "Modulo personalizzato aggiornato correttamente", "Custom Form has been deleted permanently": "Il modulo personalizzato è stato eliminato definitivamente", @@ -38,6 +35,8 @@ "Download has been created successfully": "Il download è stato creato con successo", "Download has been updated successfully": "Il download è stato aggiornato con successo", "Download has been deleted permanently": "Il download è stato eliminato definitivamente", + "Retry Queued!": "Riprova in coda!", + "Job has been queued for retrying!": "Il lavoro è stato messo in coda per un nuovo tentativo!", "Online Players": "Giocatori online", "TPS": "TPS", "CPU Load (%)": "Carico della CPU (%)", @@ -63,12 +62,12 @@ "Rank updated successfully": "Classifica aggiornata con successo", "Rank has been deleted permanently": "Il rank è stato eliminato definitivamente", "Rank Reset Successful": "Ripristino del rank riuscito", - "Recruitment Form is created successfully": "Il modulo di reclutamento è stato creato correttamente", - "Recruitment Form updated successfully": "Modulo di reclutamento aggiornato con successo", - "Recruitment Form has been deleted permanently": "Il modulo di reclutamento è stato eliminato definitivamente", - "Recruitment Submission deleted successfully": "Invio di reclutamento eliminato correttamente", + "Application Form is created successfully": "Il modulo di domanda è stato creato correttamente", + "Application Form updated successfully": "Modulo di domanda aggiornato con successo", + "Application Form has been deleted permanently": "Il modulo di domanda è stato eliminato definitivamente", + "Request deleted successfully": "Richiesta eliminata con successo", "Action Successful": "Azione riuscita", - "Recruitment Submission action has been completed successfully": "L\\'azione di invio del reclutamento è stata completata con successo", + "Request action has been completed successfully": "L\\'azione richiesta è stata completata con successo", "Message Successfully": "Messaggio con successo", "Message has been deleted successfully": "Il messaggio è stato eliminato con successo", "New Role is created successfully": "Il nuovo ruolo è stato creato correttamente", @@ -78,8 +77,7 @@ ":role cannot be deleted because there are users on this role.!": ":role non può essere eliminato perché ci sono utenti in questo ruolo.!", "Role has been deleted!": "Il ruolo è stato eliminato!", "New server added successfully": "Nuovo server aggiunto correttamente", - "Bungee server added successfully": "Bungee server aggiunto con successo", - "Bungee server updated successfully": "Server Bungee aggiornato correttamente", + "Proxy server added successfully": "Server proxy aggiunto correttamente", "Server updated successfully": "Server aggiornato correttamente", "Server has been deleted permanently": "Il server è stato eliminato definitivamente", "Rescan Queued!": "Nuova scansione in coda!", @@ -117,10 +115,16 @@ "User deleted successfully": "Utente eliminato con successo", "Player not found": "Giocatore non trovato", "Player already linked to a user": "Giocatore già collegato a un utente", - "Failed to start player session.": "Impossibile avviare la sessione del giocatore.", - "Failed reporting player pvp kill.": "Segnalazione dell\\'uccisione pvp del giocatore fallita.", + "Provided OTP is invalid or expired. Please try again.": "A condizione che l\\'OTP non sia valido o sia scaduto. Per favore riprova.", + "You already have max :max_slots players linked!": "Hai già collegato un massimo di :max_slots giocatori!", + "Player linked successfully": "Il giocatore è stato collegato correttamente", + "Player intel is disabled for this server.": "Le informazioni sul giocatore sono disabilitate per questo server.", + "Failed to start player session. :message": "Impossibile avviare la sessione del giocatore. :message", + "Failed reporting player pvp kill: :message": "Segnalazione dell\\'uccisione PvP del giocatore non riuscita: :message", + "Failed reporting player death: :message": "Segnalazione morte giocatore fallita: :message", "PlayerIntel event for :username reported successfully.": "Evento PlayerIntel per :username segnalato correttamente.", - "Failed to report Event data.": "Impossibile riportare i dati dell\\'evento.", + "Failed to report Event data: :message": "Impossibile segnalare i dati dell\\'evento: :message", + "Server Intel failed to report: :message": "Il server Intel non è riuscito a segnalare: :message", "Submit Successful!": "Invio riuscito!", "Form has been submitted successfully.": "Il modulo è stato inviato con successo.", "Comments are not allowed for this news": "Non sono ammessi commenti per questa notizia", @@ -139,7 +143,7 @@ "Applied Successfully!": "Applicato con successo!", "Application has been submitted successfully.": "La domanda è stata inviata con successo.", "Withdraw Successful": "Ritiro riuscito", - "Recruitment Submission withdrawn successfully": "La proposta di reclutamento è stata ritirata con successo", + "Application Request withdrawn successfully": "Richiesta di domanda ritirata con successo", "Failed to ping server": "Impossibile eseguire il ping del server", "Failed to query server": "Impossibile interrogare il server", "Web Query Failed": "Query Web non riuscita", @@ -164,20 +168,20 @@ "[Notification] :user commented on your post": "[Notifica] :user ha commentato il tuo post", "[Notification] Someone liked your post": "[Notifica] A qualcuno è piaciuto il tuo post", "[Notification] :user liked your post": "[Notifica] :user è piaciuto il tuo post", - "[Notification] New message received on a recruitment application.": "[Notifica] Nuovo messaggio ricevuto su una domanda di assunzione.", - ":causer sent new message on his application for :recruitment:": ":causer ha inviato un nuovo messaggio sulla sua richiesta per :recruitment:", - "[Notification] Your application has a new message.": "[Notifica] La tua applicazione ha un nuovo messaggio.", - ":causer sent you a message on your application for :recruitment:": ":causer ti ha inviato un messaggio sulla tua richiesta per :recruitment:", - "[Notification] New recruitment application received.": "[Notifica] Nuova domanda di assunzione ricevuta.", - "[Notification] An application withdrawn by user.": "[Notifica] Un\\'applicazione ritirata dall\\'utente.", - ":applicant has withdrawn his application for :recruitment.": ":applicant ha ritirato la sua richiesta per :recruitment.", - "[Notification] Your Application status has changed.": "[Notifica] Lo stato della tua richiesta è cambiato.", - ":causer has started processing your application for :recruitment.": ":causer ha iniziato a elaborare la tua richiesta per :recruitment.", - ":causer has put on-hold your application for :recruitment.": ":causer ha sospeso la tua richiesta per :recruitment.", - "[Notification] Congratulations! Your Application has been Approved.": "[Notifica] Congratulazioni! La tua richiesta è stata approvata.", - ":causer has approved your application for :recruitment.": ":causer ha approvato la tua richiesta per :recruitment.", - "[Notification] Sorry! Your Application has been Rejected.": "[Notifica] Siamo spiacenti! La tua richiesta è stata respinta.", - ":causer has rejected your application for :recruitment.": ":causer ha rifiutato la tua richiesta per :recruitment.", + "[Notification] New message received on a application request.": "[Notifica] Nuovo messaggio ricevuto su una richiesta di candidatura.", + ":causer sent new message on his application request for :recruitment:": ":causer ha inviato un nuovo messaggio sulla sua richiesta di richiesta per :recruitment:", + "[Notification] Your application request has a new message.": "[Notifica] La tua richiesta di candidatura ha un nuovo messaggio.", + ":causer sent you a message on your application request for :recruitment:": ":causer ti ha inviato un messaggio sulla tua richiesta di richiesta per :recruitment:", + "[Notification] New application request received.": "[Notifica] Nuova richiesta di candidatura ricevuta.", + "[Notification] An application request withdrawn by user.": "[Notifica] Una richiesta di applicazione ritirata dall\\'utente.", + ":applicant has withdrawn his application request for :recruitment.": ":applicant ha ritirato la sua richiesta di richiesta per :recruitment.", + "[Notification] Your Application request status has changed.": "[Notifica] Lo stato della tua richiesta di candidatura è cambiato.", + ":causer has started processing your application request for :recruitment.": ":causer ha iniziato a elaborare la tua richiesta di richiesta per :recruitment.", + ":causer has put on-hold your application request for :recruitment.": ":causer ha sospeso la tua richiesta di richiesta per :recruitment.", + "[Notification] Congratulations! Your Application request has been Approved.": "[Notifica] Congratulazioni! La tua richiesta di candidatura è stata approvata.", + ":causer has approved your application request for :recruitment.": ":causer ha approvato la tua richiesta di richiesta per :recruitment.", + "[Notification] Sorry! Your Application request has been Rejected.": "[Notifica] Siamo spiacenti! La tua richiesta di candidatura è stata respinta.", + ":causer has rejected your application request for :recruitment.": ":causer ha rifiutato la tua richiesta di richiesta per :recruitment.", "[Notification] You are Banned by :user": "[Notifica] Sei stato bannato da :user", "Oh no! You are banned by a staff member and can no longer access our website. If you think this was a mistake please create an appeal.": "Oh no! Sei stato bannato da un membro dello staff e non puoi più accedere al nostro sito web. Se ritieni che si sia trattato di un errore, crea un ricorso.", "Banned by: :user": "Bandito da: :user", @@ -185,8 +189,9 @@ "Oh no! You are muted by a staff member and can no longer send messages or chat in our website. If you think this was a mistake please create an appeal.": "Oh no! L\\'audio è stato disattivato da un membro dello staff e non puoi più inviare messaggi o chattare nel nostro sito web. Se ritieni che si sia trattato di un errore, crea un ricorso.", "Muted by: :user": "Disattivato da: :user", "Failed to upload skin to MineSkin. Please try again later": "Impossibile caricare la skin su MineSkin. Per favore riprova più tardi", - "Oh Jeez! Something went wrong. Please try again later.": "Oh Gesù! Qualcosa è andato storto. Per favore riprova più tardi.", "Error setting player skin. Please make sure provided skin is valid.": "Errore durante l\\'impostazione della skin del giocatore. Assicurati che la skin fornita sia valida.", + "Provided UUID is not valid.": "A condizione che l\\'UUID non sia valido.", + "WebQuery failed for unknown reasons. Please check minecraft server logs.": "WebQuery non è riuscito per motivi sconosciuti. Controlla i registri del server Minecraft.", "Minecraft Servers & Players Tracking": "Server di Minecraft & Statistiche dei Giocatori", "Use Light Theme": "Usa il tema chiaro", "Use Dark Theme": "Usa il tema scuro", @@ -197,6 +202,8 @@ "We use cookies to enhance your browsing experience. By continuing, you consent to our cookie policy.": "Utilizziamo i cookie per migliorare la tua esperienza di navigazione. Continuando acconsenti alla nostra politica sui cookie.", "I Understand": "Capisco", "Reset": "Ripristina", + "Filter by :column": "Filtra per :column", + "Clear": "Chiaro", "No data found": "Nessun dato trovato", "Previous": "Precedente", "Next": "Prossimo", @@ -218,15 +225,15 @@ "Logout": "Disconnettiti", "An anonymous user": "Un utente anonimo", "submitted a custom form.": "inviato un modulo personalizzato.", - "applied for a recruitment.": "fatto domanda per un\\'assunzione.", + "created a new application request.": "ha creato una nuova richiesta di applicazione.", " has withdrawn his application.": "ha ritirato la sua domanda.", " rejected your application.": "ha rifiutato la tua richiesta.", " approved your application.": "ha approvato la tua richiesta", " has put your application on-hold.": "ha sospeso la tua richiesta.", " has started processing your application.": "ha iniziato a elaborare la tua richiesta.", " has changed status of your application": "ha cambiato lo stato della tua richiesta", - "New message received on a recruitment application.": "Nuovo messaggio ricevuto su una domanda di assunzione.", - "Your application has a new message from @:username": "La tua applicazione ha un nuovo messaggio da @:username", + "New message received on an application request.": "Nuovo messaggio ricevuto su una richiesta di candidatura.", + "Your application request received a new message from @:username": "La tua richiesta di candidatura ha ricevuto un nuovo messaggio da @:username", "Poll starting": "Sondaggio in partenza", "Poll closing": "Chiusura del sondaggio", "Are you sure you want to delete this Post?": "Sei sicuro di voler eliminare questo post?", @@ -242,6 +249,7 @@ "Staff Member": "Membro dello staff", "Muted User": "Utente mutato", "Password": "Password", + "Continue with empty password if you have no password.": "Continua con una password vuota se non hai una password.", "Cancel": "Annulla", "Whoops! Something went wrong.": "Ops! Qualcosa è andato storto.", "Leave Impersonation": "Lascia la impersonazione", @@ -281,6 +289,37 @@ "Badge": "badge", "Badge Image": "Immagine badge", "Delete Badge": "Elimina badge", + "Run Command": "Esegui comando", + "Scope": "Scopo", + "Global": "Globale", + "Run generic command": "Esegui un comando generico", + "Player": "Giocatore", + "Run against players": "Corri contro i giocatori", + "Available Placeholders": "Segnaposto disponibili", + "Username of the player the command is running on.": "Nome utente del giocatore su cui è in esecuzione il comando.", + "Unique Id of the player the command is running on.": "ID univoco del giocatore su cui è in esecuzione il comando.", + "Enter command to run...": "Inserisci il comando per eseguire...", + "Servers to run on": "Server su cui eseguire", + "Leave empty to run on all servers": "Lascia vuoto per eseguire su tutti i server", + "Players to run on": "Giocatori su cui correre", + "Select players": "Seleziona i giocatori", + "Select players to run command on": "Seleziona i giocatori su cui eseguire il comando", + "Require player to be online": "Richiedi che il giocatore sia online", + "This command should only run if player is online on running server. If not online it will be queued to run when player comes online.": "Questo comando dovrebbe essere eseguito solo se il giocatore è online sul server in esecuzione. Se non è online, verrà messo in coda per essere eseguito quando il giocatore sarà online.", + "Command": "Comando", + "Server": "server", + "Status": "Stato", + "Last Attempted": "Ultimo tentativo", + "Execute At": "Esegui a", + "Tags": "Tag", + "For Player": "Per il giocatore", + "Output": "Produzione", + "Command History": "Storia dei comandi", + "Retry All Failed": "Riprova tutti falliti", + "Attempts: :attempts\/:max_attempts": "Tentativi: :attempts\/:max_attempts", + "none": "nessuno", + "Retry Command": "Riprova comando", + "Delete Command": "Elimina comando", "Create Custom Form": "Crea modulo personalizzato", "Title of Custom Form": "Titolo del modulo personalizzato", "Eg: Contact Us": "Ad esempio: Contattaci", @@ -303,7 +342,6 @@ "Edit Custom Form": "Modifica modulo personalizzato", "Update Custom Form": "Aggiorna modulo personalizzato", "Title": "Titolo", - "Status": "Stato", "Can Submit": "Può inviare", "Notify Staff on Submit": "Avvisa lo staff all\\'invio", "Visible in Listing": "Visibile nell\\'elenco", @@ -323,7 +361,6 @@ "Max submission per user": "Invio massimo per utente", "not applicable": "non applicabile", "Minimum staff role weight to view submissions": "Peso minimo del ruolo del personale per visualizzare gli invii", - "none": "nessuno", "Notify staff on new submission": "Avvisare lo staff della nuova presentazione", "Updated": "Aggiornato", "Country": "Paese", @@ -410,6 +447,17 @@ "External URL is protected from end users.": "L\\'URL esterno è protetto dagli utenti finali.", "Minimum Role Weight Required to Download": "Peso minimo del ruolo richiesto per il download", "Delete Download": "Elimina download", + "UUID": "UUID", + "Job": "Lavoro", + "Connection\/Queue": "Connessione\/Coda", + "Exception": "Eccezione", + "Failed At": "Fallito a", + "Failed Jobs": "Lavori non riusciti", + "Retry All Jobs": "Riprova tutti i lavori", + "Clear All Jobs": "Cancella tutti i lavori", + "Attempts: :attempts": "Tentativi: :attempts", + "Retry Job": "Riprova il lavoro", + "Delete Job": "Elimina lavoro", "Create News": "Crea notizie", "News Category": "Categoria notizie", "General": "Generale", @@ -486,11 +534,11 @@ "Reset to Default Ranks": "Ripristina i livelli predefiniti", "Rank": "Rango", "Delete Rank": "Elimina classifica", - "Create Recruitment Form": "Crea modulo di reclutamento", - "Title of this Recruitment": "Titolo di questo reclutamento", + "Create Application Form": "Crea modulo di domanda", + "Title of this Application": "Titolo di questa applicazione", "Eg: Apply to be a Staff Member": "Ad esempio: fai domanda per diventare un membro dello staff", - "Recruitment Slug": "Lumaca di reclutamento", - "Recruitment Status": "Stato di reclutamento", + "Application Slug for URL": "Slug dell\\'applicazione per l\\'URL", + "Application Status": "Stato dell\\'applicazione", "How many times a user can reapply after rejection. Leave empty for no limit.": "Quante volte un utente può presentare nuovamente domanda dopo il rifiuto. Lascia vuoto per nessun limite.", "Submission Cooldown in Seconds": "Tempo di recupero dell\\'invio in pochi secondi", "After how many seconds user can reapply this application. Leave empty for no cooldown.": "Dopo quanti secondi l\\'utente può riapplicare questa applicazione. Lascia vuoto per nessun tempo di recupero.", @@ -499,20 +547,19 @@ "Leave empty to allow any staff with [vote recruitment_submissions] permission to vote on submissions.": "Lascia vuoto per consentire a qualsiasi membro del personale con l\\'autorizzazione [vota reclutamento_submissions] di votare le proposte.", "Min Staff Role Weight to Act on Submission": "Peso minimo del ruolo del personale per agire in seguito all\\'invio", "Min staff role weight required to Approve\/Reject on submission. Leave empty to allow any staff with [acton recruitment_submissions] permission to act on submissions.": "Peso minimo del ruolo del personale richiesto per approvare\/rifiutare al momento dell\\'invio. Lascia vuoto per consentire a qualsiasi membro dello staff con l\\'autorizzazione [acton recruitment_submissions] di agire sulle iscrizioni.", - "If this recruitment is for hiring of a specific role, select the role here.": "Se questa selezione riguarda l\\'assunzione di un ruolo specifico, seleziona il ruolo qui.", - "Create Recruitment": "Crea reclutamento", - "Edit Recruitment Form": "Modifica modulo di reclutamento", - "Update Recruitment": "Aggiorna reclutamento", + "If this application is for hiring of a specific role, select the role here.": "Se questa domanda riguarda l\\'assunzione di un ruolo specifico, seleziona il ruolo qui.", + "Edit Application Form": "Modifica modulo di domanda", + "Update Application Form": "Aggiorna modulo di domanda", "Notify Staff": "Avvisare il personale", "Messaging": "Messaggistica", "Open Requests": "Richieste aperte", "Closed Requests": "Richieste chiuse", - "Manage Recruitment Forms": "Gestire i moduli di reclutamento", - "Recruitment": "Reclutamento", - "Delete Recruitment": "Elimina reclutamento", - ":title Intel - Recruitments": ":title Intel - Reclutamento", + "Manage Application Forms": "Gestire i moduli di domanda", + "Application Form": "Modulo di domanda", + "Delete Application Form": "Elimina modulo di domanda", + ":title Intel - Application Form": ":title Intel - Modulo di domanda", ":title - Intel": ":title-Intel", - "This recruitment hiring for": "Questa assunzione di personale per", + "This application hiring for": "Questa applicazione assume per", "Submission Cooldown": "Recupero invio", "Allow only Player Linked Users": "Consenti solo utenti collegati al giocatore", "Allow only Verified Users": "Consenti solo utenti verificati", @@ -520,16 +567,19 @@ "Enable Messaging Feature": "Abilita la funzione di messaggistica", "Notify staff on Events": "Informare il personale sugli eventi", "Applicant": "Richiedente", + "Application": "Applicazione", + "Last Actor": "Ultimo attore", + "Last Comment": "Ultimo commento", "Updated At": "Aggiornato a", - "Closed Request - Recruitments": "Richiesta chiusa - Reclutamento", - "Open Requests - Recruitments": "Richieste Aperte - Reclutamento", - "Closed Recruitment Submissions:": "Presentazioni di reclutamento chiuse:", - "Open Recruitment Submissions:": "Proposte di reclutamento aperte:", - "All Recruitments": "Tutte le assunzioni", - ":user application for :recruitmenttitle #:index - Recruitments": "applicazione :user per :recruitmenttitle #:index - Reclutamenti", + "Closed Request - Applications": "Richiesta chiusa - Applicazioni", + "Open Requests - Applications": "Richieste aperte - Applicazioni", + "Closed Requests:": "Richieste chiuse:", + "Open Requests:": "Richieste aperte:", + "All Applications": "Tutte le applicazioni", + ":user application for :recruitmenttitle #:index - Applications": "applicazione :user per :recruitmenttitle #:index - Applicazioni", ":user application for :recruitmenttitle #:index": "Applicazione :user per :recruitmenttitle #:index", "Last Updated At": "Ultimo aggiornamento alle", - "Submission Status": "Stato di sottomissione", + "Request Status": "Richiedi stato", "Reason": "Motivo", "Marked :status By": "Contrassegnato :status da", "Mark In-Progress": "Segna come in corso", @@ -580,8 +630,8 @@ "Go back to Server List": "Torna all\\'elenco dei server", "Add Bungee Server": "Aggiungi Bungee Server", "Edit Bungee Server: :name": "Modifica Bungee Server: :name", - "Minetrax only support adding one bungee server. This server will be used to show online players and server status. All sensitive information will be encrypted.": "Minetrax supporta solo l\\'aggiunta di un server bungee. Questo server verrà utilizzato per mostrare i giocatori online e lo stato del server. Tutte le informazioni sensibili verranno crittografate.", - "Please note Proxy servers don't need Minetrax.jar plugin. Only install them on actual servers like spigot, bukkit etc.": "Si prega di notare che i server proxy non necessitano del plug-in Minetrax.jar. Installali solo su server reali come spigot, bukkit ecc.", + "Add Bungee\/Velocity Server": "Aggiungi Bungee\/Velocity Server", + "Edit Bungee\/Velocity Server: :name": "Modifica Bungee\/Velocity Server: :name", "Server Name": "Nome del server", "Eg: My Bungee Server": "Ad esempio: il mio Bungee Server", "Hostname": "Nome host", @@ -593,27 +643,26 @@ "Query Port": "Porta di Query", "Eg: 25575": "Es: 25575", "Webquery Port": "Porta per Webquery", - "Eg: 25585": "Es: 25585", + "WebQuery port is a new port which MineTrax plugin will open for secure connection between server and web. Enter a port value which is available and can be open. Eg: 25569": "La porta WebQuery è una nuova porta che il plugin MineTrax aprirà per una connessione sicura tra server e web. Immettere un valore di porta che sia disponibile e che possa essere aperto. Esempio: 25569", "Server Version": "Versione server", "Select version..": "Seleziona versione..", - "Edit Bungee Server": "Modifica server bungee", - "Add New Server": "Aggiungi nuovo server", + "Enable Server Intel \/ Analytics": "Abilita Server Intel\/Analisi", + "If enabled, server analytics data (performance metric, join activity etc) will be captured for this server via plugin.": "Se abilitato, i dati di analisi del server (metrica delle prestazioni, attività di partecipazione ecc.) verranno acquisiti per questo server tramite plug-in.", + "Enable Skin Change via Web (SkinsRestorer)": "Abilita il cambio skin tramite Web (SkinsRestorer)", + "Allow user to change their linked players skin via web for this server. This will require SkinsRestorer plugin to be installed on the server.": "Consenti all\\'utente di modificare la skin dei giocatori collegati tramite web per questo server. Ciò richiederà l\\'installazione del plug-in SkinsRestorer sul server.", "Add Server": "Aggiungi server", + "Edit Server": "Modifica server", + "Add New Server": "Aggiungi nuovo server", "This name will help to identify this server. Eg: Survival, Skyblock, etc.": "Questo nome aiuterà a identificare questo server. Ad esempio: Sopravvivenza, Skyblock, ecc.", "Publicly visible join address of the server. Eg: play.example.com": "Indirizzo di join del server visibile pubblicamente. Ad esempio: play.example.com", "Higher the weight, higher the priority. Eg: 1,3,10 etc. Can be left empty.": "Maggiore è il peso, maggiore è la priorità. Ad esempio: 1,3,10 ecc. Può essere lasciato vuoto.", - "WebQuery port is a new port which MineTrax plugin will open for secure connection between server and web. Enter a port value which is available and can be open. Eg: 25569": "La porta WebQuery è una nuova porta che il plugin MineTrax aprirà per una connessione sicura tra server e web. Immettere un valore di porta che sia disponibile e che possa essere aperto. Esempio: 25569", "Select server type": "Seleziona il tipo di server", "Server Type": "Tipo di server", "Version": "Versione", - "Enable Server Intel \/ Analytics": "Abilita Server Intel\/Analisi", - "If enabled, server analytics data (performance metric, join activity etc) will be captured for this server via plugin.": "Se abilitato, i dati di analisi del server (metrica delle prestazioni, attività di partecipazione ecc.) verranno acquisiti per questo server tramite plug-in.", "Enable Player Intel \/ Analytics": "Abilita Intel\/Analisi del giocatore", "If enabled, player intel & statistics data will be captured for this server via plugin.": "Se abilitato, le informazioni e le statistiche del giocatore verranno acquisite per questo server tramite plug-in.", "Enable In-Game Chat": "Abilita la chat di gioco", "Enable in-game chat for this server, which allow users to view & chat to in-game players from website.": "Abilita la chat in-game per questo server, che consente agli utenti di visualizzare e chattare con i giocatori in-game dal sito web.", - "Enable Skin Change via Web (SkinsRestorer)": "Abilita il cambio skin tramite Web (SkinsRestorer)", - "Allow user to change their linked players skin via web for this server. This will require SkinsRestorer plugin to be installed on the server.": "Consenti all\\'utente di modificare la skin dei giocatori collegati tramite web per questo server. Ciò richiederà l\\'installazione del plug-in SkinsRestorer sul server.", "Edit Server: :name": "Modifica server: :name", "Update Server": "Aggiorna server", "IP:Port": "IP:Porta", @@ -623,17 +672,12 @@ "Servers": "Server", "Sync Player Statistics": "Sincronizza le statistiche del giocatore", "Add": "Aggiungere", - "Server": "server", "Add Proxy Server": "Aggiungi server proxy", "WebQuery: :webquery_port": "WebQuery: :webquery_port", "not set": "non impostato", - "Server Online": "Server Online", - "Server Offline": "Server offline", "Loading": "Caricamento in corso", - "WebQuery Online": "WebQuery Online", - "WebQuery Offline": "WebQuery Offline", + "WebQuery": "WebQuery", "View Server Intel": "Visualizza Server Intel", - "Edit Server": "Modifica server", "Delete Server": "Elimina server", "Statistics": "Statistiche", "Performance": "Prestazione", @@ -873,10 +917,23 @@ "Enable user to link their players to account": "Consenti all\\'utente di collegare i propri giocatori all\\'account", "Max Players Per Account": "Numero massimo di giocatori per account", "Number of players that can be linked to one account in website.": "Numero di giocatori che possono essere collegati a un account nel sito web.", - "Account Link Success Command": "Comando di successo collegamento account", - "Use this to reward players when they link account: Eg: give {PLAYER} diamond 1": "Usalo per premiare i giocatori quando collegano l\\'account: Es.: dai un diamante a {GIOCATORE} 1", - "Account Link Success Broadcast": "Trasmissione riuscita collegamento account", - "If set then this will be broadcast to server when player link is successful: Eg: {PLAYER} has successfully linked his account and won a ultra key.": "Se impostato, questo verrà trasmesso al server quando il collegamento del giocatore ha esito positivo: Es.: {GIOCATORE} ha collegato con successo il suo account e ha vinto una chiave ultra.", + "Account Link Success Commands": "Comandi di successo del collegamento dell\\'account", + "(runs when a player is linked to account)": "(viene eseguito quando un giocatore è collegato all\\'account)", + "Username of the player which is linked.": "Nome utente del giocatore collegato.", + "Unique Id of the player which is linked.": "Id univoco del giocatore collegato.", + "Run on servers": "Esegui sui server", + "Run on first link only": "Esegui solo sul primo collegamento", + "This command should only run if given player is getting linked for first time. (Eg: This wont run if player get unlinked and then linked again)": "Questo comando dovrebbe essere eseguito solo se un determinato giocatore viene collegato per la prima volta. (Ad esempio: questo non funzionerà se il giocatore viene scollegato e poi collegato nuovamente)", + "No commands on account link.": "Nessun comando sul collegamento dell\\'account.", + "Add New Link Command": "Aggiungi nuovo comando di collegamento", + "Account Unlink Success Commands": "Comandi di successo per scollegamento account", + "(runs when a player is unlinked from account)": "(viene eseguito quando un giocatore è scollegato dall\\'account)", + "Username of the player which is unlinked.": "Nome utente del giocatore scollegato.", + "Unique Id of the player which is unlinked.": "ID univoco del giocatore scollegato.", + "Run on first unlink only": "Esegui solo al primo scollegamento", + "This command should only run if given player is getting unlinked for first time. (Eg: This wont run if player was linked and unlinked before)": "Questo comando dovrebbe essere eseguito solo se un determinato giocatore viene scollegato per la prima volta. (Ad esempio: questo non funzionerà se il giocatore è stato collegato e scollegato in precedenza)", + "No commands on account unlink.": "Nessun comando per lo scollegamento dell\\'account.", + "Add New Unlink Command": "Aggiungi nuovo comando di scollegamento", "Enable Player Rank Sync": "Abilita la sincronizzazione del rank giocatore", "Enable this if you want to sync your player rank from server instead of website calculated rank. you must create a rank for each group you have in server making sure rank shortname matches the name of your player group in server.": "Abilita questa opzione se desideri sincronizzare la classifica del tuo giocatore dal server anziché dalla classifica calcolata sul sito web. devi creare una classifica per ogni gruppo che hai nel server assicurandoti che il nome breve della classifica corrisponda al nome del tuo gruppo di giocatori nel server.", "Rank Sync From Server": "Classifica la sincronizzazione dal server", @@ -987,6 +1044,7 @@ "Joined": "Partecipato", "Flags": "Bandiere", "Users Administration": "Amministrazione utenti", + "Discord ID": "ID discordia", "Muted": "Mutato", "Banned": "Bannato", "View Profile": "Vedi profilo", @@ -1188,10 +1246,10 @@ "Someone liked my Post": "A qualcuno è piaciuto il mio post", "I am muted by Staff": "Sono disattivato dal personale", "I am banned by Staff": "Sono stato bannato dallo Staff", - "Recruitment submission status changed": "Lo stato di invio del reclutamento è cambiato", - "New message in recruitment submission": "Nuovo messaggio nella presentazione del reclutamento", + "Application request status changed": "Lo stato della richiesta della domanda è cambiato", + "New message in application request": "Nuovo messaggio nella richiesta di applicazione", "For staff members": "Per i membri del personale", - "Recruitment submission received": "Richiesta di reclutamento ricevuta", + "Application request received": "Richiesta di candidatura ricevuta", "Custom form submission received": "Invio modulo personalizzato ricevuto", "Someone commented on News": "Qualcuno ha commentato News", "Saved.": "Salvato.", @@ -1213,25 +1271,25 @@ "Mark all as read": "Segna tutti come letti", "No notifications to show.": "Nessuna notifica da mostrare.", "Last Updated": "Ultimo aggiornamento", - "Recruitments": "Reclutamenti", + "Application Forms": "I moduli di domanda", "View My Applications": "Visualizza le mie applicazioni", "Only for Verified Users": "Solo per utenti verificati", "Only for Linked Account Users (Player linked)": "Solo per gli utenti con account collegati (giocatore collegato)", "Apply": "Fare domanda a", "Application Closed!": "Applicazione chiusa!", "Login or Register to Apply!": "Accedi o registrati per candidarti!", - "You need to be logged in to apply to this recruitment.": "Devi essere loggato per candidarti a questo reclutamento.", + "You need to be logged in to apply to this application.": "È necessario effettuare l\\'accesso per candidarsi a questa applicazione.", "Max Submissions Reached!": "Numero massimo di invii raggiunto!", "You are on a Cooldown!": "Sei in cooldown!", "Account Verification Required!": "Verifica dell\\'account richiesta!", "Account Linking Required!": "Collegamento dell\\'account obbligatorio!", "You have already applied!": "Hai già fatto domanda!", - "View Application": "Visualizza l\\'applicazione", + "View Request": "Visualizza richiesta", "Already approved in past! Wanna apply again?": "Già approvato in passato! Vuoi candidarti di nuovo?", "You may wanna check that before applying again.": "Potresti volerlo verificare prima di fare nuovamente domanda.", - "View Approved Application": "Visualizza la domanda approvata", - "My Recruitment Applications": "Le mie domande di reclutamento", - "Your application for :recruitmenttitle #:index - Recruitments": "La tua candidatura per :recruitmenttitle #:index - Reclutamenti", + "View Approved Request": "Visualizza la richiesta approvata", + "My Application Requests": "Le mie richieste di candidatura", + "Your application request for :recruitmenttitle #:index - Applications": "La tua richiesta di applicazione per :recruitmenttitle #:index - Applicazioni", "Application for :recruitmenttitle #:index": "Applicazione per :recruitmenttitle #:index", "Success! A staff will soon review your application. Please be patience.": "Successo! Uno staff esaminerà presto la tua richiesta. Per favore sii paziente.", "Withdraw": "Ritirare", @@ -1246,7 +1304,11 @@ "You can link upto :count :player to your account! ( :left available )": "Puoi collegare fino a :count :player al tuo account! ( :left disponibili )", "player": "giocatore", "players": "Giocatori", - "Initiate the process by joining the server and typing \/account-link in chat. A link will be generated, click on that link and your player will added to your account.": "Avvia il processo unendoti al server e digitando \/account-link nella chat. Verrà generato un collegamento, fai clic su quel collegamento e il tuo giocatore verrà aggiunto al tuo account.", + "To link a player to your account, join server and type '\/link :otp' in your chat.": "Per collegare un giocatore al tuo account, unisciti al server e digita \\\"\/link :otp\\\" nella chat.", + "Copied!": "Copiato!", + "This OTP will expire in :seconds seconds.": "Questa OTP scadrà tra :seconds secondi.", + "This OTP has expired. Refresh the page to get a new OTP.": "Questa OTP è scaduta. Aggiorna la pagina per ottenere una nuova OTP.", + "Click here to refresh.": "Fare clic qui per aggiornare.", "No players linked to your account right now.": "Nessun giocatore collegato al tuo account in questo momento.", "Change Skin of this player.": "Cambia skin di questo giocatore.", "Are you sure you want to unlink this player from your account?": "Sei sicuro di voler scollegare questo giocatore dal tuo account?", @@ -1377,11 +1439,9 @@ "Used Memory (MB)": "Memoria utilizzata (MB)", "Server Status": "Stato del server", "Join": "Unisciti", - "Copied!": "Copiato!", "SETTINGS": "IMPOSTAZIONI", "Theme": "Tema", "Plugin": "Plugin", - "Player": "Giocatore", "Navigation": "Navigazione", "Delete this shout permanently?": "Eliminare questo Shout in modo permanente?", "No shouts yet.": "Ancora nessun grido.", @@ -1433,5 +1493,18 @@ "You are muted by": "Sei stato mutato da", "Role Weight to View Submission": "Peso del ruolo per visualizzare l\\'invio", "Slug": "Lumaca", - "via Email": "Via Posta Elettronica" + "Minetrax only support adding one bungee server. This server will be used to show online players and server status. All sensitive information will be encrypted.": "Minetrax supporta solo l\\'aggiunta di un server bungee. Questo server verrà utilizzato per mostrare i giocatori online e lo stato del server. Tutte le informazioni sensibili verranno crittografate.", + "Please note Proxy servers don't need Minetrax.jar plugin. Only install them on actual servers like spigot, bukkit etc.": "Si prega di notare che i server proxy non necessitano del plug-in Minetrax.jar. Installali solo su server reali come spigot, bukkit ecc.", + "Eg: 25585": "Es: 25585", + "Edit Bungee Server": "Modifica server bungee", + "Server Online": "Server Online", + "Server Offline": "Server offline", + "WebQuery Online": "WebQuery Online", + "WebQuery Offline": "WebQuery Offline", + "Account Link Success Command": "Comando di successo collegamento account", + "Use this to reward players when they link account: Eg: give {PLAYER} diamond 1": "Usalo per premiare i giocatori quando collegano l\\'account: Es.: dai un diamante a {GIOCATORE} 1", + "Account Link Success Broadcast": "Trasmissione riuscita collegamento account", + "If set then this will be broadcast to server when player link is successful: Eg: {PLAYER} has successfully linked his account and won a ultra key.": "Se impostato, questo verrà trasmesso al server quando il collegamento del giocatore ha esito positivo: Es.: {GIOCATORE} ha collegato con successo il suo account e ha vinto una chiave ultra.", + "via Email": "Via Posta Elettronica", + "Initiate the process by joining the server and typing \/account-link in chat. A link will be generated, click on that link and your player will added to your account.": "Avvia il processo unendoti al server e digitando \/account-link nella chat. Verrà generato un collegamento, fai clic su quel collegamento e il tuo giocatore verrà aggiunto al tuo account." } \ No newline at end of file diff --git a/lang/ja.json b/lang/ja.json index cfd911f83..ecef7d85f 100644 --- a/lang/ja.json +++ b/lang/ja.json @@ -1,16 +1,8 @@ { "Email\/Password authentication is disabled.": "メール\/パスワード認証が無効になっています。", "The provided password does not match your current password.": "指定されたパスワードは現在のパスワードと一致しません。", - "Link expired or invalid!": "リンクが期限切れか無効です!", - "Please request a fresh link and try again.": "新しいリンクをリクエストして、もう一度お試しください。", - "Player not found in database!": "プレーヤーがデータベースに見つかりません!", - "Please wait for sometime for server to update its player database.": "サーバーがプレーヤー データベースを更新するまでしばらくお待ちください。", - "Player already linked to a user!": "プレーヤーはすでにユーザーにリンクされています。", - "If you own this user please unlink it from your another account or contact administrator.": "このユーザーを所有している場合は、別のアカウントからリンクを解除するか、管理者に連絡してください。", - "User already have max :max_slots players linked!": "ユーザーはすでに最大 :max_slots 人のプレイヤーをリンクしています", - "If you want to link this player please unlink a player.": "このプレーヤーをリンクしたい場合は、プレーヤーのリンクを解除してください。", - "Played linked successfully!": "無事にリンクされました!", - "This player is now linked to your account.": "このプレーヤーはあなたのアカウントにリンクされました。", + "Player unlinking disabled!": "プレーヤーのリンク解除が無効になっています!", + "Player unlinking is disabled by the administrator.": "プレーヤーのリンク解除は管理者によって無効にされています。", "Player not found!": "プレイヤーが見つかりません!", "No player with that ID found linked to your account.": "その ID を持つプレーヤーがあなたのアカウントにリンクされていません。", "Played unlinked successfully!": "リンクを解除して正常にプレイされました!", @@ -22,6 +14,11 @@ "Badge updated successfully": "バッジが正常に更新されました", "Deleted Successfully": "正常に削除されました", "Badge has been deleted permanently": "バッジは完全に削除されました", + ":count Commands Scheduled!": ":count コマンドがスケジュールされました!", + "Commands has been scheduled for execution. Check the status in Command History.": "コマンドの実行がスケジュールされています。コマンド履歴でステータスを確認してください。", + "Deleted!": "削除されました!", + "Retried!": "再試行しました!", + "Command has been queued for retrying! Refresh the page after few seconds to check the status.": "コマンドは再試行のためにキューに入れられました。数秒後にページを更新してステータスを確認してください。", "Custom Form is created successfully": "カスタムフォームが正常に作成されました", "Custom Form updated successfully": "カスタムフォームが正常に更新されました", "Custom Form has been deleted permanently": "カスタムフォームは完全に削除されました", @@ -38,6 +35,8 @@ "Download has been created successfully": "ダウンロードが正常に作成されました", "Download has been updated successfully": "ダウンロードは正常に更新されました", "Download has been deleted permanently": "ダウンロードは完全に削除されました", + "Retry Queued!": "再試行がキューに登録されました!", + "Job has been queued for retrying!": "ジョブは再試行のためにキューに入れられました。", "Online Players": "オンラインのプレイヤー", "TPS": "TPS", "CPU Load (%)": "CPU負荷(%)", @@ -63,12 +62,12 @@ "Rank updated successfully": "ランクが正常に更新されました", "Rank has been deleted permanently": "ランクは完全に削除されました", "Rank Reset Successful": "ランクリセット成功", - "Recruitment Form is created successfully": "採用フォームが正常に作成されました", - "Recruitment Form updated successfully": "採用フォームが正常に更新されました", - "Recruitment Form has been deleted permanently": "募集フォームは完全に削除されました", - "Recruitment Submission deleted successfully": "求人の提出が正常に削除されました", + "Application Form is created successfully": "申請フォームが正常に作成されました", + "Application Form updated successfully": "申請フォームが正常に更新されました", + "Application Form has been deleted permanently": "申請フォームは完全に削除されました", + "Request deleted successfully": "リクエストは正常に削除されました", "Action Successful": "アクションが成功しました", - "Recruitment Submission action has been completed successfully": "採用の送信アクションが正常に完了しました", + "Request action has been completed successfully": "リクエストアクションが正常に完了しました", "Message Successfully": "メッセージが正常に送信されました", "Message has been deleted successfully": "メッセージは正常に削除されました", "New Role is created successfully": "新しいロールが正常に作成されました", @@ -78,8 +77,7 @@ ":role cannot be deleted because there are users on this role.!": ":role このロールにユーザーが存在するため、削除できません!", "Role has been deleted!": "役割が削除されました!", "New server added successfully": "新しいサーバーが正常に追加されました", - "Bungee server added successfully": "Bungee サーバーが正常に追加されました", - "Bungee server updated successfully": "Bungee サーバーが正常に更新されました", + "Proxy server added successfully": "プロキシサーバーが正常に追加されました", "Server updated successfully": "サーバーが正常に更新されました", "Server has been deleted permanently": "サーバーは完全に削除されました", "Rescan Queued!": "再スキャンがキューに入れられました!", @@ -117,10 +115,16 @@ "User deleted successfully": "ユーザーは正常に削除されました", "Player not found": "プレイヤーが見つかりません", "Player already linked to a user": "プレーヤーはすでにユーザーにリンクされています", - "Failed to start player session.": "プレーヤーセッションの開始に失敗しました。", - "Failed reporting player pvp kill.": "プレイヤーの PvP キルの報告に失敗しました。", + "Provided OTP is invalid or expired. Please try again.": "提供された OTP が無効か期限切れです。もう一度試してください。", + "You already have max :max_slots players linked!": "すでに最大 :max_slots 人のプレイヤーがリンクされています。", + "Player linked successfully": "プレーヤーは正常にリンクされました", + "Player intel is disabled for this server.": "このサーバーではプレーヤーの情報が無効になっています。", + "Failed to start player session. :message": "プレーヤーセッションの開始に失敗しました。 ×1", + "Failed reporting player pvp kill: :message": "プレイヤーの PvP キルの報告に失敗しました: :message", + "Failed reporting player death: :message": "プレイヤーの死亡報告に失敗しました: :message", "PlayerIntel event for :username reported successfully.": ":username の PlayerIntel イベントが正常に報告されました。", - "Failed to report Event data.": "イベントデータのレポートに失敗しました。", + "Failed to report Event data: :message": "イベントデータの報告に失敗しました: :message", + "Server Intel failed to report: :message": "サーバー Intel がレポートに失敗しました: :message", "Submit Successful!": "送信成功!", "Form has been submitted successfully.": "フォームは正常に送信されました。", "Comments are not allowed for this news": "このニュースへのコメントは禁止されています", @@ -139,7 +143,7 @@ "Applied Successfully!": "無事に適用されました!", "Application has been submitted successfully.": "申請は正常に送信されました。", "Withdraw Successful": "出金成功", - "Recruitment Submission withdrawn successfully": "採用応募は正常に取り下げられました", + "Application Request withdrawn successfully": "アプリケーションリクエストは正常に取り下げられました", "Failed to ping server": "サーバーへの ping に失敗しました", "Failed to query server": "サーバーへのクエリに失敗しました", "Web Query Failed": "Web クエリが失敗しました", @@ -164,20 +168,20 @@ "[Notification] :user commented on your post": "【お知らせ】あなたの投稿に1件のコメントが入りました", "[Notification] Someone liked your post": "[通知] 誰かがあなたの投稿に「いいね!」しました", "[Notification] :user liked your post": "[通知] :user 人があなたの投稿に「いいね!」しました", - "[Notification] New message received on a recruitment application.": "【お知らせ】 求人応募に新たなメッセージが届きました。", - ":causer sent new message on his application for :recruitment:": ":causer は、 :recruitment のアプリケーションに新しいメッセージを送信しました。", - "[Notification] Your application has a new message.": "[お知らせ] アプリケーションに新しいメッセージがあります。", - ":causer sent you a message on your application for :recruitment:": ":causer は、 :recruitment の申請に関するメッセージを送信しました。", - "[Notification] New recruitment application received.": "【お知らせ】新規採用応募を受け付けました。", - "[Notification] An application withdrawn by user.": "【お知らせ】ユーザーにより申請が取り下げられました。", - ":applicant has withdrawn his application for :recruitment.": ":applicant は :recruitment への申請を取り下げました。", - "[Notification] Your Application status has changed.": "【お知らせ】お申込み状況が変更になりました。", - ":causer has started processing your application for :recruitment.": ":causer が :recruitment のアプリケーションの処理を開始しました。", - ":causer has put on-hold your application for :recruitment.": ":causer は :recruitment へのあなたの申し込みを保留しました。", - "[Notification] Congratulations! Your Application has been Approved.": "【お知らせ】おめでとうございます!あなたの申請は承認されました。", - ":causer has approved your application for :recruitment.": ":causer が :recruitment へのあなたの申請を承認しました。", - "[Notification] Sorry! Your Application has been Rejected.": "【お知らせ】ごめんなさい!あなたの申請は拒否されました。", - ":causer has rejected your application for :recruitment.": ":causer は :recruitment へのあなたの申請を拒否しました。", + "[Notification] New message received on a application request.": "【お知らせ】アプリケーションリクエストに新しいメッセージを受信しました。", + ":causer sent new message on his application request for :recruitment:": ":causer は、 :recruitment に対するアプリケーション リクエストに関して新しいメッセージを送信しました。", + "[Notification] Your application request has a new message.": "【お知らせ】 申請リクエストに新しいメッセージが追加されました。", + ":causer sent you a message on your application request for :recruitment:": ":causer は、 :recruitment のアプリケーション リクエストに関するメッセージを送信しました。", + "[Notification] New application request received.": "【お知らせ】新規お申し込み受付中です。", + "[Notification] An application request withdrawn by user.": "【お知らせ】ユーザーにより申請リクエストが取り下げられました。", + ":applicant has withdrawn his application request for :recruitment.": ":applicant は :recruitment への申請リクエストを取り下げました。", + "[Notification] Your Application request status has changed.": "【お知らせ】お申込みステータスが変更になりました。", + ":causer has started processing your application request for :recruitment.": ":causer は、 :recruitment に対するアプリケーション要求の処理を開始しました。", + ":causer has put on-hold your application request for :recruitment.": ":causer は、 :recruitment に対するあなたのアプリケーションリクエストを保留しました。", + "[Notification] Congratulations! Your Application request has been Approved.": "【お知らせ】おめでとうございます!あなたのアプリケーションリクエストは承認されました。", + ":causer has approved your application request for :recruitment.": ":causer は :recruitment に対するあなたの申請リクエストを承認しました。", + "[Notification] Sorry! Your Application request has been Rejected.": "【お知らせ】ごめんなさい!あなたのアプリケーションリクエストは拒否されました。", + ":causer has rejected your application request for :recruitment.": ":causer は :recruitment に対するあなたの申請リクエストを拒否しました。", "[Notification] You are Banned by :user": "[通知] あなたは :user によって禁止されています", "Oh no! You are banned by a staff member and can no longer access our website. If you think this was a mistake please create an appeal.": "なんてこった!あなたはスタッフによって禁止されており、当社のウェブサイトにアクセスできなくなります。これが間違いだと思われる場合は、異議申し立てを作成してください。", "Banned by: :user": "禁止者: :user", @@ -185,8 +189,9 @@ "Oh no! You are muted by a staff member and can no longer send messages or chat in our website. If you think this was a mistake please create an appeal.": "なんてこった!あなたはスタッフによってミュートされており、当社の Web サイトでメッセージを送信したりチャットしたりすることができなくなります。これが間違いだと思われる場合は、異議申し立てを作成してください。", "Muted by: :user": "ミュートした人: :user", "Failed to upload skin to MineSkin. Please try again later": "MineSkin へのスキンのアップロードに失敗しました。後でもう一度試してください", - "Oh Jeez! Something went wrong. Please try again later.": "ああ、そうだね!何か問題が発生しました。後でもう一度試してください。", "Error setting player skin. Please make sure provided skin is valid.": "プレーヤースキンの設定中にエラーが発生しました。提供されたスキンが有効であることを確認してください。", + "Provided UUID is not valid.": "指定された UUID は無効です。", + "WebQuery failed for unknown reasons. Please check minecraft server logs.": "WebQuery が不明な理由で失敗しました。 Minecraft サーバーのログを確認してください。", "Minecraft Servers & Players Tracking": "マイクラサーバー & プレイヤートラッキング", "Use Light Theme": "ライトテーマを使用", "Use Dark Theme": "ダークテーマを使用", @@ -197,6 +202,8 @@ "We use cookies to enhance your browsing experience. By continuing, you consent to our cookie policy.": "ブラウジングエクスペリエンスを向上させるために Cookie を使用します。続行すると、Cookie ポリシーに同意したことになります。", "I Understand": "わかりました", "Reset": "リセット", + "Filter by :column": " :column でフィルターする", + "Clear": "クリア", "No data found": "何もデータが見つかりませんでした", "Previous": "前の", "Next": "次", @@ -218,15 +225,15 @@ "Logout": "ログアウト", "An anonymous user": "匿名ユーザー", "submitted a custom form.": "カスタムフォームを送信しました。", - "applied for a recruitment.": "募集に応募しました。", + "created a new application request.": "新しいアプリケーションリクエストを作成しました。", " has withdrawn his application.": "は申請を取り下げた。", " rejected your application.": "あなたの申請を拒否しました。", " approved your application.": "あなたの申請を承認しました。", " has put your application on-hold.": "あなたの申請を保留しました。", " has started processing your application.": "アプリケーションの処理を開始しました。", " has changed status of your application": "アプリケーションのステータスが変更されました", - "New message received on a recruitment application.": "採用応募に新しいメッセージが届きました。", - "Your application has a new message from @:username": "アプリケーションに @:username からの新しいメッセージがあります", + "New message received on an application request.": "アプリケーションリクエストで新しいメッセージを受信しました。", + "Your application request received a new message from @:username": "あなたのアプリケーションリクエストは@:usernameから新しいメッセージを受け取りました", "Poll starting": "投票開始", "Poll closing": "投票終了", "Are you sure you want to delete this Post?": "このポストを本当に削除しても宜しいですか?", @@ -242,6 +249,7 @@ "Staff Member": "スタッフメンバー", "Muted User": "Muted ユーザー", "Password": "パスワード", + "Continue with empty password if you have no password.": "パスワードがない場合は、空のパスワードで続行します。", "Cancel": "作成", "Whoops! Something went wrong.": "あらら...予期不能なことが起きてしまいました", "Leave Impersonation": "なりすましモードを退出", @@ -281,6 +289,37 @@ "Badge": "バッジ", "Badge Image": "バッジの画像", "Delete Badge": "バッジの削除", + "Run Command": "コマンドの実行", + "Scope": "範囲", + "Global": "グローバル", + "Run generic command": "汎用コマンドを実行する", + "Player": "プレイヤー", + "Run against players": "プレイヤーと対戦する", + "Available Placeholders": "利用可能なプレースホルダー", + "Username of the player the command is running on.": "コマンドを実行しているプレーヤーのユーザー名。", + "Unique Id of the player the command is running on.": "コマンドが実行されているプレーヤーの一意の ID。", + "Enter command to run...": "実行するコマンドを入力してください...", + "Servers to run on": "実行するサーバー", + "Leave empty to run on all servers": "すべてのサーバーで実行するには空のままにしておきます", + "Players to run on": "走る選手たち", + "Select players": "選手を選択する", + "Select players to run command on": "コマンドを実行するプレイヤーを選択してください", + "Require player to be online": "プレーヤーがオンラインであることを要求する", + "This command should only run if player is online on running server. If not online it will be queued to run when player comes online.": "このコマンドは、プレーヤーが実行中のサーバー上でオンラインである場合にのみ実行されます。オンラインでない場合は、プレーヤーがオンラインになったときに実行するためにキューに入れられます。", + "Command": "指示", + "Server": "サーバー", + "Status": "ステータス", + "Last Attempted": "最後に試行した", + "Execute At": "実行時刻", + "Tags": "タグ", + "For Player": "プレイヤー向け", + "Output": "出力", + "Command History": "コマンド履歴", + "Retry All Failed": "すべて再試行失敗", + "Attempts: :attempts\/:max_attempts": "試行回数: :attempts\/:max_attempts", + "none": "なし", + "Retry Command": "コマンドの再試行", + "Delete Command": "削除コマンド", "Create Custom Form": "カスタムフォームの作成", "Title of Custom Form": "カスタムフォームのタイトル", "Eg: Contact Us": "例: お問い合わせ", @@ -303,7 +342,6 @@ "Edit Custom Form": "カスタムフォームの編集", "Update Custom Form": "カスタムフォームの更新", "Title": "タイトル", - "Status": "ステータス", "Can Submit": "送信可能", "Notify Staff on Submit": "送信時にスタッフに通知", "Visible in Listing": "リストに表示されます", @@ -323,7 +361,6 @@ "Max submission per user": "ユーザーあたりの最大送信数", "not applicable": "適用できない", "Minimum staff role weight to view submissions": "提出物を表示するためのスタッフの役割の最小重み", - "none": "なし", "Notify staff on new submission": "新しい提出物についてスタッフに通知する", "Updated": "更新しました", "Country": "国", @@ -410,6 +447,17 @@ "External URL is protected from end users.": "外部 URL はエンド ユーザーから保護されています。", "Minimum Role Weight Required to Download": "ダウンロードに必要な最小役割の重み", "Delete Download": "ダウンロードの削除", + "UUID": "UUID", + "Job": "仕事", + "Connection\/Queue": "接続\/キュー", + "Exception": "例外", + "Failed At": "失敗しました", + "Failed Jobs": "失敗したジョブ", + "Retry All Jobs": "すべてのジョブを再試行", + "Clear All Jobs": "すべてのジョブをクリアする", + "Attempts: :attempts": "試行回数: 1 回", + "Retry Job": "ジョブの再試行", + "Delete Job": "ジョブの削除", "Create News": "ニュースを作成", "News Category": "ニュースカテゴリ", "General": "一般", @@ -486,11 +534,11 @@ "Reset to Default Ranks": "デフォルトランクにリセット", "Rank": "ランク", "Delete Rank": "ランク削除", - "Create Recruitment Form": "採用フォームを作成する", - "Title of this Recruitment": "この募集のタイトル", + "Create Application Form": "申請フォームの作成", + "Title of this Application": "このアプリケーションのタイトル", "Eg: Apply to be a Staff Member": "例:スタッフに応募する", - "Recruitment Slug": "採用スラッグ", - "Recruitment Status": "募集状況", + "Application Slug for URL": "URLのアプリケーションスラッグ", + "Application Status": "アプリケーションの状態", "How many times a user can reapply after rejection. Leave empty for no limit.": "ユーザーが拒否された後に再申請できる回数。制限を設けない場合は空のままにします。", "Submission Cooldown in Seconds": "秒単位の提出クールダウン", "After how many seconds user can reapply this application. Leave empty for no cooldown.": "ユーザーは何秒後にこのアプリケーションを再適用できますか。クールダウンを行わない場合は空のままにします。", @@ -499,20 +547,19 @@ "Leave empty to allow any staff with [vote recruitment_submissions] permission to vote on submissions.": "[vote recruit_submissions] 権限を持つスタッフが提出物に投票できるようにするには、空白のままにします。", "Min Staff Role Weight to Act on Submission": "提出時に作用する最小スタッフ役割の重み", "Min staff role weight required to Approve\/Reject on submission. Leave empty to allow any staff with [acton recruitment_submissions] permission to act on submissions.": "提出時に承認\/拒否するために必要なスタッフの役割の最小重み。 [acton recruit_submissions] 権限を持つスタッフが提出物に対応できるようにするには、空のままにします。", - "If this recruitment is for hiring of a specific role, select the role here.": "この募集が特定の役割の採用を目的としている場合は、ここで役割を選択します。", - "Create Recruitment": "求人を作成する", - "Edit Recruitment Form": "募集フォームの編集", - "Update Recruitment": "採用情報を更新", + "If this application is for hiring of a specific role, select the role here.": "この応募が特定の役割の採用を目的としている場合は、ここで役割を選択します。", + "Edit Application Form": "申請フォームの編集", + "Update Application Form": "更新申請フォーム", "Notify Staff": "スタッフに通知する", "Messaging": "メッセージング", "Open Requests": "オープンリクエスト", "Closed Requests": "クローズされたリクエスト", - "Manage Recruitment Forms": "採用フォームの管理", - "Recruitment": "募集", - "Delete Recruitment": "募集の削除", - ":title Intel - Recruitments": ":title インテル - 採用", + "Manage Application Forms": "申請フォームの管理", + "Application Form": "申し込みフォーム", + "Delete Application Form": "申請フォームの削除", + ":title Intel - Application Form": ":title インテル - 申請フォーム", ":title - Intel": ":title - インテル", - "This recruitment hiring for": "今回の採用募集は", + "This application hiring for": "このアプリケーションの募集対象者は、", "Submission Cooldown": "提出クールダウン", "Allow only Player Linked Users": "プレーヤーにリンクされたユーザーのみを許可する", "Allow only Verified Users": "認証済みユーザーのみを許可する", @@ -520,16 +567,19 @@ "Enable Messaging Feature": "メッセージング機能を有効にする", "Notify staff on Events": "イベントについてスタッフに通知する", "Applicant": "申請者", + "Application": "応用", + "Last Actor": "最後の俳優", + "Last Comment": "最後のコメント", "Updated At": "更新日", - "Closed Request - Recruitments": "クローズされたリクエスト - 募集", - "Open Requests - Recruitments": "オープンリクエスト - 採用", - "Closed Recruitment Submissions:": "募集終了の提出:", - "Open Recruitment Submissions:": "公募による提出:", - "All Recruitments": "すべての募集", - ":user application for :recruitmenttitle #:index - Recruitments": ":user の :recruitmenttitle #:index への応募 - 募集", + "Closed Request - Applications": "クローズされたリクエスト - アプリケーション", + "Open Requests - Applications": "オープンリクエスト - アプリケーション", + "Closed Requests:": "終了したリクエスト:", + "Open Requests:": "オープンリクエスト:", + "All Applications": "すべてのアプリケーション", + ":user application for :recruitmenttitle #:index - Applications": " :recruitmenttitle #:index 用の :user アプリケーション - アプリケーション", ":user application for :recruitmenttitle #:index": " :recruitmenttitle #:index 用の :user アプリケーション", "Last Updated At": "最終更新日", - "Submission Status": "提出ステータス", + "Request Status": "リクエストステータス", "Reason": "理由", "Marked :status By": "マーク :status によって", "Mark In-Progress": "進行中としてマークする", @@ -580,8 +630,8 @@ "Go back to Server List": "サーバーリストに戻る", "Add Bungee Server": "Bungee サーバー追加", "Edit Bungee Server: :name": "Bungee サーバー編集: :名", - "Minetrax only support adding one bungee server. This server will be used to show online players and server status. All sensitive information will be encrypted.": "Minetrax は一つのbungeeサーバー追加にしか対応してません。全ての重要情報は暗号化されます。", - "Please note Proxy servers don't need Minetrax.jar plugin. Only install them on actual servers like spigot, bukkit etc.": "注意: プロキシサーバーはMinetrax.jarプラグインを必要としません。実際のサーバーにインストールしてください。例えば、spigot,bukkitなど。", + "Add Bungee\/Velocity Server": "バンジー\/ベロシティサーバーを追加", + "Edit Bungee\/Velocity Server: :name": "バンジー\/ベロシティサーバー編集: :name", "Server Name": "サーバー名", "Eg: My Bungee Server": "例: My Bungee Server", "Hostname": "ホスト名", @@ -593,27 +643,26 @@ "Query Port": "Query ポート", "Eg: 25575": "例: 25575", "Webquery Port": "Webquery Port", - "Eg: 25585": "Eg: 25585", + "WebQuery port is a new port which MineTrax plugin will open for secure connection between server and web. Enter a port value which is available and can be open. Eg: 25569": "WebQuery ポートは、サーバーと Web 間の安全な接続のために MineTrax プラグインが開く新しいポートです。使用可能で開くことができるポート値を入力します。例: 25569", "Server Version": "サーバーバージョン", "Select version..": "バージョンを選択..", - "Edit Bungee Server": "Bungeeサーバーを編集", - "Add New Server": "新しいサーバーを追加", + "Enable Server Intel \/ Analytics": "サーバーインテル\/アナリティクスを有効にする", + "If enabled, server analytics data (performance metric, join activity etc) will be captured for this server via plugin.": "有効にすると、サーバー分析データ (パフォーマンス メトリック、参加アクティビティなど) がプラグインを介してこのサーバーに対してキャプチャされます。", + "Enable Skin Change via Web (SkinsRestorer)": "Web 経由でスキン変更を有効にする (SkinsRestorer)", + "Allow user to change their linked players skin via web for this server. This will require SkinsRestorer plugin to be installed on the server.": "ユーザーがこのサーバーのリンクされたプレーヤーのスキンを Web 経由で変更できるようにします。これには、SkinsRestorer プラグインをサーバーにインストールする必要があります。", "Add Server": "サーバー追加", + "Edit Server": "サーバーの編集", + "Add New Server": "新しいサーバーを追加", "This name will help to identify this server. Eg: Survival, Skyblock, etc.": "この名前は、このサーバーを識別するのに役立ちます。例: サバイバル、スカイブロックなど。", "Publicly visible join address of the server. Eg: play.example.com": "公開されているサーバーの参加アドレス。例: play.example.com", "Higher the weight, higher the priority. Eg: 1,3,10 etc. Can be left empty.": "重みが大きいほど優先順位が高くなります。例: 1、3、10 など。空のままにすることができます。", - "WebQuery port is a new port which MineTrax plugin will open for secure connection between server and web. Enter a port value which is available and can be open. Eg: 25569": "WebQuery ポートは、サーバーと Web 間の安全な接続のために MineTrax プラグインが開く新しいポートです。使用可能で開くことができるポート値を入力します。例: 25569", "Select server type": "Select server type", "Server Type": "Server Type", "Version": "Version", - "Enable Server Intel \/ Analytics": "サーバーインテル\/アナリティクスを有効にする", - "If enabled, server analytics data (performance metric, join activity etc) will be captured for this server via plugin.": "有効にすると、サーバー分析データ (パフォーマンス メトリック、参加アクティビティなど) がプラグインを介してこのサーバーに対してキャプチャされます。", "Enable Player Intel \/ Analytics": "プレーヤーのインテル\/アナリティクスを有効にする", "If enabled, player intel & statistics data will be captured for this server via plugin.": "有効にすると、プレーヤーの情報と統計データがプラグインを介してこのサーバーに対してキャプチャされます。", "Enable In-Game Chat": "ゲーム内チャットを有効にする", "Enable in-game chat for this server, which allow users to view & chat to in-game players from website.": "このサーバーのゲーム内チャットを有効にすると、ユーザーは Web サイトからゲーム内プレイヤーを表示してチャットできるようになります。", - "Enable Skin Change via Web (SkinsRestorer)": "Web 経由でスキン変更を有効にする (SkinsRestorer)", - "Allow user to change their linked players skin via web for this server. This will require SkinsRestorer plugin to be installed on the server.": "ユーザーがこのサーバーのリンクされたプレーヤーのスキンを Web 経由で変更できるようにします。これには、SkinsRestorer プラグインをサーバーにインストールする必要があります。", "Edit Server: :name": "サーバー名編集: :名", "Update Server": "サーバーをアップデート", "IP:Port": "IP:Port", @@ -623,17 +672,12 @@ "Servers": "サーバー", "Sync Player Statistics": "同期プレーヤーの統計", "Add": "追加", - "Server": "サーバー", "Add Proxy Server": "プロキシサーバーの追加", "WebQuery: :webquery_port": "WebQuery: :webquery_port", "not set": "未設定", - "Server Online": "サーバー オンライン", - "Server Offline": "サーバー オフライン", "Loading": "ロード中", - "WebQuery Online": "WebQuery オンライン", - "WebQuery Offline": "WebQuery オフライン", + "WebQuery": "Webクエリ", "View Server Intel": "サーバーインテルの表示", - "Edit Server": "サーバーの編集", "Delete Server": "サーバーを削除", "Statistics": "情報", "Performance": "パフォーマンス", @@ -873,10 +917,23 @@ "Enable user to link their players to account": "ユーザーにプレイヤーアカウントを紐づけを有効化", "Max Players Per Account": "ユーザーごとのアカウント数MAX", "Number of players that can be linked to one account in website.": "一人のユーザーがアカウントを紐づけできる最大数", - "Account Link Success Command": "アカウントリンク成功コマンド", - "Use this to reward players when they link account: Eg: give {PLAYER} diamond 1": "アカウントリンクをした際報酬与えるのにこれを使用してください。: 例: give {PLAYER} diamond 1", - "Account Link Success Broadcast": "アカウントリンク成功全体メッセージ", - "If set then this will be broadcast to server when player link is successful: Eg: {PLAYER} has successfully linked his account and won a ultra key.": "有効ならば、サーバー内で全体メッセージを送信します。: 例: {PLAYER} WEBアカウントとの紐づけに成功してウルトラキーを手に入れました。", + "Account Link Success Commands": "アカウントリンク成功コマンド", + "(runs when a player is linked to account)": "(プレーヤーがアカウントにリンクされているときに実行されます)", + "Username of the player which is linked.": "リンクされているプレーヤーのユーザー名。", + "Unique Id of the player which is linked.": "リンクされているプレーヤーの一意の ID。", + "Run on servers": "サーバー上で実行", + "Run on first link only": "最初のリンクのみで実行", + "This command should only run if given player is getting linked for first time. (Eg: This wont run if player get unlinked and then linked again)": "このコマンドは、特定のプレーヤーが初めてリンクされる場合にのみ実行する必要があります。 (例: プレイヤーがリンクを解除されてから再度リンクされた場合、これは実行されません)", + "No commands on account link.": "アカウントリンクにコマンドはありません。", + "Add New Link Command": "新しいリンクコマンドを追加", + "Account Unlink Success Commands": "アカウントのリンク解除の成功コマンド", + "(runs when a player is unlinked from account)": "(プレーヤーがアカウントからリンク解除されたときに実行されます)", + "Username of the player which is unlinked.": "リンクを解除したプレーヤーのユーザー名。", + "Unique Id of the player which is unlinked.": "リンクが解除されているプレーヤーの一意の ID。", + "Run on first unlink only": "最初のリンク解除時にのみ実行", + "This command should only run if given player is getting unlinked for first time. (Eg: This wont run if player was linked and unlinked before)": "このコマンドは、特定のプレイヤーが初めてリンクを解除する場合にのみ実行する必要があります。 (例: プレーヤーが以前にリンクされたりリンク解除されたりした場合、これは実行されません)", + "No commands on account unlink.": "アカウントのリンク解除に関するコマンドはありません。", + "Add New Unlink Command": "新しいリンク解除コマンドを追加", "Enable Player Rank Sync": "プレイヤーランクSyncを有効化", "Enable this if you want to sync your player rank from server instead of website calculated rank. you must create a rank for each group you have in server making sure rank shortname matches the name of your player group in server.": "Enable this if you want to sync your player rank from server instead of website calculated rank. you must create a rank for each group you have in server making sure rank shortname matches the name of your player group in server.", "Rank Sync From Server": "サーバーからランクをSync", @@ -987,6 +1044,7 @@ "Joined": "参加", "Flags": "フラグ", "Users Administration": "ユーザー管理", + "Discord ID": "ディスコードID", "Muted": "ミュート", "Banned": "Banned", "View Profile": "プロフィールを見る", @@ -1188,10 +1246,10 @@ "Someone liked my Post": "誰かが私の投稿を気に入ってくれました", "I am muted by Staff": "スタッフによってミュートされています", "I am banned by Staff": "スタッフからBanされています", - "Recruitment submission status changed": "求人提出ステータスが変更されました", - "New message in recruitment submission": "採用応募の新しいメッセージ", + "Application request status changed": "アプリケーションリクエストのステータスが変更されました", + "New message in application request": "アプリケーションリクエストの新しいメッセージ", "For staff members": "スタッフ向け", - "Recruitment submission received": "採用応募を受け付けました", + "Application request received": "申請リクエストを受信しました", "Custom form submission received": "カスタムフォームの送信を受け取りました", "Someone commented on News": "誰かがニュースにコメントしました", "Saved.": "保存しました。", @@ -1213,25 +1271,25 @@ "Mark all as read": "すべて既読", "No notifications to show.": "表示する通知はありません。", "Last Updated": "最終更新", - "Recruitments": "人材募集", + "Application Forms": "申請書", "View My Applications": "私のアプリケーションを見る", "Only for Verified Users": "認証済みユーザーのみ", "Only for Linked Account Users (Player linked)": "リンクされたアカウント ユーザーのみ (プレーヤーがリンクされている)", "Apply": "適用する", "Application Closed!": "応募は終了しました!", "Login or Register to Apply!": "ログインまたは登録して応募してください!", - "You need to be logged in to apply to this recruitment.": "この求人へのご応募にはログインが必要です。", + "You need to be logged in to apply to this application.": "このアプリケーションに応募するには、ログインする必要があります。", "Max Submissions Reached!": "最大提出数に達しました!", "You are on a Cooldown!": "クールダウン中です!", "Account Verification Required!": "アカウント認証が必要です!", "Account Linking Required!": "アカウントのリンクが必要です!", "You have already applied!": "すでにお申し込み済みです!", - "View Application": "アプリケーションを見る", + "View Request": "リクエストの表示", "Already approved in past! Wanna apply again?": "過去に承認済みです!もう一度応募したいですか?", "You may wanna check that before applying again.": "再申請する前に確認してみると良いかもしれません。", - "View Approved Application": "承認されたアプリケーションを表示する", - "My Recruitment Applications": "私の採用応募", - "Your application for :recruitmenttitle #:index - Recruitments": " :recruitmenttitle #:index への応募 - 採用情報", + "View Approved Request": "承認されたリクエストの表示", + "My Application Requests": "私のアプリケーションリクエスト", + "Your application request for :recruitmenttitle #:index - Applications": "アプリケーションによる :recruitmenttitle #:index のリクエスト - アプリケーション", "Application for :recruitmenttitle #:index": " :recruitmenttitle #:index のアプリケーション", "Success! A staff will soon review your application. Please be patience.": "成功!スタッフがすぐにお申し込みを審査させていただきます。ご辛抱ください。", "Withdraw": "撤回する", @@ -1246,7 +1304,11 @@ "You can link upto :count :player to your account! ( :left available )": "アカウントに :count :player までリンクできます! (:left 空きが残っています)", "player": "プレイヤー", "players": "プレイヤー", - "Initiate the process by joining the server and typing \/account-link in chat. A link will be generated, click on that link and your player will added to your account.": "サーバーに参加し、チャットに「\/account-link」と入力してプロセスを開始します。リンクが生成されるので、そのリンクをクリックすると、プレーヤーがアカウントに追加されます。", + "To link a player to your account, join server and type '\/link :otp' in your chat.": "プレーヤーをアカウントにリンクするには、サーバーに参加し、チャットに「\/link :otp」と入力します。", + "Copied!": "コピーしました!", + "This OTP will expire in :seconds seconds.": "この OTP は :seconds 秒で期限切れになります。", + "This OTP has expired. Refresh the page to get a new OTP.": "この OTP は有効期限が切れています。ページを更新して新しい OTP を取得します。", + "Click here to refresh.": "ここをクリックして更新してください。", "No players linked to your account right now.": "現在あなたのアカウントにリンクされているプレイヤーはいません。", "Change Skin of this player.": "このプレイヤーのスキンを変更します。", "Are you sure you want to unlink this player from your account?": "このプレーヤーをアカウントからリンク解除してもよろしいですか?", @@ -1377,11 +1439,9 @@ "Used Memory (MB)": "使用済みメモリ (MB)", "Server Status": "サーバーステータス", "Join": "参加", - "Copied!": "コピーしました!", "SETTINGS": "設定", "Theme": "テーマ", "Plugin": "プラグイン", - "Player": "プレイヤー", "Navigation": "ナビゲーション", "Delete this shout permanently?": "このシャウトを完全に削除しますか?", "No shouts yet.": "まだ叫び声はありません。", @@ -1433,5 +1493,18 @@ "You are muted by": "あなたはミュートされています", "Role Weight to View Submission": "提出を表示するための役割の重み", "Slug": "ナメクジ", - "via Email": "メールで" + "Minetrax only support adding one bungee server. This server will be used to show online players and server status. All sensitive information will be encrypted.": "Minetrax は一つのbungeeサーバー追加にしか対応してません。全ての重要情報は暗号化されます。", + "Please note Proxy servers don't need Minetrax.jar plugin. Only install them on actual servers like spigot, bukkit etc.": "注意: プロキシサーバーはMinetrax.jarプラグインを必要としません。実際のサーバーにインストールしてください。例えば、spigot,bukkitなど。", + "Eg: 25585": "Eg: 25585", + "Edit Bungee Server": "Bungeeサーバーを編集", + "Server Online": "サーバー オンライン", + "Server Offline": "サーバー オフライン", + "WebQuery Online": "WebQuery オンライン", + "WebQuery Offline": "WebQuery オフライン", + "Account Link Success Command": "アカウントリンク成功コマンド", + "Use this to reward players when they link account: Eg: give {PLAYER} diamond 1": "アカウントリンクをした際報酬与えるのにこれを使用してください。: 例: give {PLAYER} diamond 1", + "Account Link Success Broadcast": "アカウントリンク成功全体メッセージ", + "If set then this will be broadcast to server when player link is successful: Eg: {PLAYER} has successfully linked his account and won a ultra key.": "有効ならば、サーバー内で全体メッセージを送信します。: 例: {PLAYER} WEBアカウントとの紐づけに成功してウルトラキーを手に入れました。", + "via Email": "メールで", + "Initiate the process by joining the server and typing \/account-link in chat. A link will be generated, click on that link and your player will added to your account.": "サーバーに参加し、チャットに「\/account-link」と入力してプロセスを開始します。リンクが生成されるので、そのリンクをクリックすると、プレーヤーがアカウントに追加されます。" } \ No newline at end of file diff --git a/lang/pl.json b/lang/pl.json index 46d6bb31c..29716a8d4 100644 --- a/lang/pl.json +++ b/lang/pl.json @@ -1,16 +1,8 @@ { "Email\/Password authentication is disabled.": "Uwierzytelnianie e-mailem\/hasłem jest wyłączone.", "The provided password does not match your current password.": "Podane hasło nie jest zgodne z Twoim aktualnym hasłem.", - "Link expired or invalid!": "Link wygasł lub jest nieprawidłowy!", - "Please request a fresh link and try again.": "Poproś o nowy link i spróbuj ponownie.", - "Player not found in database!": "Nie znaleziono gracza w bazie danych!", - "Please wait for sometime for server to update its player database.": "Poczekaj chwilę, aż serwer zaktualizuje swoją bazę danych graczy.", - "Player already linked to a user!": "Gracz jest już połączony z użytkownikiem!", - "If you own this user please unlink it from your another account or contact administrator.": "Jeśli jesteś właścicielem tego użytkownika, odłącz go od innego konta lub skontaktuj się z administratorem.", - "User already have max :max_slots players linked!": "Użytkownik ma już połączoną maksymalną (:max_slots) ilość graczy!", - "If you want to link this player please unlink a player.": "Jeśli chcesz połączyć tego gracza z kontem, odłącz innego gracza.", - "Played linked successfully!": "Połączono z graczem!", - "This player is now linked to your account.": "Ten gracz jest teraz połączony z Twoim kontem.", + "Player unlinking disabled!": "Odłączanie graczy wyłączone!", + "Player unlinking is disabled by the administrator.": "Odłączanie graczy zostało wyłączone przez administratora.", "Player not found!": "Nie znaleziono gracza!", "No player with that ID found linked to your account.": "Nie znaleziono gracza o tym ID połączonego z Twoim kontem.", "Played unlinked successfully!": "Rozłączono z graczem!", @@ -22,6 +14,11 @@ "Badge updated successfully": "Odznaka została zaktualizowana pomyślnie", "Deleted Successfully": "Usunięto", "Badge has been deleted permanently": "Plakietka została trwale usunięta", + ":count Commands Scheduled!": "Zaplanowano :count poleceń!", + "Commands has been scheduled for execution. Check the status in Command History.": "Zaplanowano wykonanie poleceń. Sprawdź status w Historii poleceń.", + "Deleted!": "Usunięto!", + "Retried!": "Ponowiona próba!", + "Command has been queued for retrying! Refresh the page after few seconds to check the status.": "Polecenie umieszczono w kolejce do ponownej próby! Odśwież stronę po kilku sekundach, aby sprawdzić status.", "Custom Form is created successfully": "Formularz niestandardowy został utworzony pomyślnie", "Custom Form updated successfully": "Formularz niestandardowy został pomyślnie zaktualizowany", "Custom Form has been deleted permanently": "Formularz niestandardowy został trwale usunięty", @@ -38,6 +35,8 @@ "Download has been created successfully": "Plik do pobrania został pomyślnie utworzony", "Download has been updated successfully": "Pobieranie zostało pomyślnie zaktualizowane", "Download has been deleted permanently": "Pobieranie zostało trwale usunięte", + "Retry Queued!": "Ponów próbę w kolejce!", + "Job has been queued for retrying!": "Zadanie ustawiono w kolejce do ponownej próby!", "Online Players": "Gracze online", "TPS": "TPS", "CPU Load (%)": "Obciążenie procesora (%)", @@ -63,12 +62,12 @@ "Rank updated successfully": "Ranga została pomyślnie zaktualizowana", "Rank has been deleted permanently": "Ranga została trwale usunięta", "Rank Reset Successful": "Pomyślnie zresetowano rangę", - "Recruitment Form is created successfully": "Formularz rekrutacyjny został utworzony pomyślnie", - "Recruitment Form updated successfully": "Formularz rekrutacyjny został pomyślnie zaktualizowany", - "Recruitment Form has been deleted permanently": "Formularz rekrutacyjny został trwale usunięty", - "Recruitment Submission deleted successfully": "Zgłoszenie rekrutacyjne zostało pomyślnie usunięte", + "Application Form is created successfully": "Formularz wniosku został utworzony pomyślnie", + "Application Form updated successfully": "Formularz wniosku został pomyślnie zaktualizowany", + "Application Form has been deleted permanently": "Formularz zgłoszeniowy został trwale usunięty", + "Request deleted successfully": "Żądanie zostało pomyślnie usunięte", "Action Successful": "Akcja powiodła się", - "Recruitment Submission action has been completed successfully": "Akcja Zgłoszenia Rekrutacyjnego została pomyślnie ukończona", + "Request action has been completed successfully": "Akcja żądania została pomyślnie ukończona", "Message Successfully": "Wiadomość pomyślnie", "Message has been deleted successfully": "Wiadomość została pomyślnie usunięta", "New Role is created successfully": "Nowa rola została pomyślnie utworzona", @@ -78,8 +77,7 @@ ":role cannot be deleted because there are users on this role.!": "Nie można usunąć :role, ponieważ istnieją użytkownicy w tej roli!", "Role has been deleted!": "Rola została usunięta!", "New server added successfully": "Pomyślnie dodano nowy serwer", - "Bungee server added successfully": "Pomyślnie dodano serwer Bungee", - "Bungee server updated successfully": "Pomyślnie zaktualizowano serwer Bungee", + "Proxy server added successfully": "Serwer proxy dodano pomyślnie", "Server updated successfully": "Serwer został pomyślnie zaktualizowany", "Server has been deleted permanently": "Serwer został trwale usunięty", "Rescan Queued!": "Zaplanowano ponowne skanowanie!", @@ -117,10 +115,16 @@ "User deleted successfully": "Użytkownik został pomyślnie usunięty", "Player not found": "Nie znaleziono gracza", "Player already linked to a user": "Gracz jest już połączony z użytkownikiem", - "Failed to start player session.": "Nie udało się rozpocząć sesji gracza.", - "Failed reporting player pvp kill.": "Nie udało się zgłosić zabójstwa gracza w trybie PvP.", + "Provided OTP is invalid or expired. Please try again.": "Pod warunkiem, że hasło jednorazowe jest nieprawidłowe lub wygasło. Proszę spróbuj ponownie.", + "You already have max :max_slots players linked!": "Masz już połączonych maksymalnie 1 graczy!", + "Player linked successfully": "Gracz połączył się pomyślnie", + "Player intel is disabled for this server.": "Dane wywiadowcze gracza są wyłączone dla tego serwera.", + "Failed to start player session. :message": "Nie udało się rozpocząć sesji gracza. :message", + "Failed reporting player pvp kill: :message": "Nie udało się zgłosić zabicia gracza pvp: :message", + "Failed reporting player death: :message": "Nie udało się zgłosić śmierci gracza: :message", "PlayerIntel event for :username reported successfully.": "Pomyślnie zgłoszono zdarzenie PlayerIntel dla :username.", - "Failed to report Event data.": "Nie udało się zgłosić danych zdarzenia.", + "Failed to report Event data: :message": "Nie udało się zgłosić danych zdarzenia: :message", + "Server Intel failed to report: :message": "Serwer Intel nie zgłosił: :message", "Submit Successful!": "Prześlij pomyślnie!", "Form has been submitted successfully.": "Formularz został przesłany pomyślnie.", "Comments are not allowed for this news": "Do tej wiadomości nie można komentować", @@ -139,7 +143,7 @@ "Applied Successfully!": "Zastosowano pomyślnie!", "Application has been submitted successfully.": "Wniosek został przesłany pomyślnie.", "Withdraw Successful": "Wycofanie się powiodło", - "Recruitment Submission withdrawn successfully": "Zgłoszenie rekrutacyjne zostało pomyślnie wycofane", + "Application Request withdrawn successfully": "Żądanie aplikacji zostało pomyślnie wycofane", "Failed to ping server": "Nie udało się pingować serwera", "Failed to query server": "Nie udało się wysłać zapytania do serwera", "Web Query Failed": "Zapytanie internetowe nie powiodło się", @@ -164,20 +168,20 @@ "[Notification] :user commented on your post": "[Powiadomienie] :user skomentował Twój post", "[Notification] Someone liked your post": "[Powiadomienie] Ktoś polubił Twój post", "[Notification] :user liked your post": "[Powiadomienie] :user polubił Twój post", - "[Notification] New message received on a recruitment application.": "[Powiadomienie] Otrzymano nową wiadomość dotyczącą zgłoszenia rekrutacyjnego.", - ":causer sent new message on his application for :recruitment:": ":causer wysłał nową wiadomość w swojej aplikacji dla :recruitment:", - "[Notification] Your application has a new message.": "[Powiadomienie] Twoja aplikacja zawiera nową wiadomość.", - ":causer sent you a message on your application for :recruitment:": ":causer wysłało Ci wiadomość dotyczącą Twojej aplikacji dla :recruitment:", - "[Notification] New recruitment application received.": "[Powiadomienie] Otrzymano nowe zgłoszenie rekrutacyjne.", - "[Notification] An application withdrawn by user.": "[Powiadomienie] Aplikacja wycofana przez użytkownika.", - ":applicant has withdrawn his application for :recruitment.": ":applicant wycofał swój wniosek o :recruitment.", - "[Notification] Your Application status has changed.": "[Powiadomienie] Status Twojego wniosku uległ zmianie.", - ":causer has started processing your application for :recruitment.": ":causer rozpoczęło przetwarzanie Twojego wniosku dla :recruitment.", - ":causer has put on-hold your application for :recruitment.": ":causer wstrzymało twoją aplikację na :recruitment.", - "[Notification] Congratulations! Your Application has been Approved.": "[Powiadomienie] Gratulacje! Twój wniosek został zatwierdzony.", - ":causer has approved your application for :recruitment.": ":causer zatwierdziło Twój wniosek o :recruitment.", - "[Notification] Sorry! Your Application has been Rejected.": "[Powiadomienie] Przepraszamy! Twoje zgłoszenie zostało odrzucone.", - ":causer has rejected your application for :recruitment.": ":causer odrzuciło Twój wniosek o :recruitment.", + "[Notification] New message received on a application request.": "[Powiadomienie] Otrzymano nową wiadomość w sprawie żądania aplikacji.", + ":causer sent new message on his application request for :recruitment:": ":causer wysłał nową wiadomość w sprawie swojej prośby o aplikację dla :recruitment:", + "[Notification] Your application request has a new message.": "[Powiadomienie] Twoje zgłoszenie aplikacyjne zawiera nową wiadomość.", + ":causer sent you a message on your application request for :recruitment:": ":causer wysłało Ci wiadomość dotyczącą Twojego wniosku aplikacyjnego dla :recruitment:", + "[Notification] New application request received.": "[Powiadomienie] Otrzymano nową prośbę o aplikację.", + "[Notification] An application request withdrawn by user.": "[Powiadomienie] Żądanie aplikacji wycofane przez użytkownika.", + ":applicant has withdrawn his application request for :recruitment.": ":applicant wycofał swój wniosek aplikacyjny dla :recruitment.", + "[Notification] Your Application request status has changed.": "[Powiadomienie] Status Twojego wniosku aplikacyjnego uległ zmianie.", + ":causer has started processing your application request for :recruitment.": ":causer rozpoczęło przetwarzanie Twojego żądania aplikacji dla :recruitment.", + ":causer has put on-hold your application request for :recruitment.": ":causer wstrzymało Twoją prośbę o aplikację dla :recruitment.", + "[Notification] Congratulations! Your Application request has been Approved.": "[Powiadomienie] Gratulacje! Twoja prośba o aplikację została zatwierdzona.", + ":causer has approved your application request for :recruitment.": ":causer zatwierdziło Twoją prośbę o aplikację na :recruitment.", + "[Notification] Sorry! Your Application request has been Rejected.": "[Powiadomienie] Przepraszamy! Twoja prośba o aplikację została odrzucona.", + ":causer has rejected your application request for :recruitment.": ":causer odrzuciło Twoją prośbę o aplikację na :recruitment.", "[Notification] You are Banned by :user": "[Powiadomienie] Zostałeś zbanowany przez :user", "Oh no! You are banned by a staff member and can no longer access our website. If you think this was a mistake please create an appeal.": "O nie! Zostałeś zablokowany przez pracownika i nie możesz już uzyskać dostępu do naszej strony internetowej. Jeśli uważasz, że to pomyłka, złóż odwołanie.", "Banned by: :user": "Zablokowany przez: :user", @@ -185,8 +189,9 @@ "Oh no! You are muted by a staff member and can no longer send messages or chat in our website. If you think this was a mistake please create an appeal.": "O nie! Zostałeś wyciszony przez pracownika i nie możesz już wysyłać wiadomości ani rozmawiać na naszej stronie internetowej. Jeśli uważasz, że to pomyłka, złóż odwołanie.", "Muted by: :user": "Wyciszony przez: :user", "Failed to upload skin to MineSkin. Please try again later": "Nie udało się przesłać skórki do MineSkin. Spróbuj ponownie później", - "Oh Jeez! Something went wrong. Please try again later.": "O Jezu! Coś poszło nie tak. Spróbuj ponownie później.", "Error setting player skin. Please make sure provided skin is valid.": "Błąd podczas ustawiania skórki gracza. Upewnij się, że dostarczona skórka jest ważna.", + "Provided UUID is not valid.": "Podany identyfikator UUID jest nieprawidłowy.", + "WebQuery failed for unknown reasons. Please check minecraft server logs.": "WebQuery nie powiodło się z nieznanych przyczyn. Sprawdź logi serwera Minecraft.", "Minecraft Servers & Players Tracking": "Śledzenie serwerów i graczy Minecraft", "Use Light Theme": "Użyj jasnego motywu", "Use Dark Theme": "Użyj ciemnego motywu", @@ -197,6 +202,8 @@ "We use cookies to enhance your browsing experience. By continuing, you consent to our cookie policy.": "Używamy plików cookie, aby poprawić jakość przeglądania. Kontynuując, wyrażasz zgodę na naszą politykę dotyczącą plików cookie.", "I Understand": "Rozumiem", "Reset": "Resetowanie", + "Filter by :column": "Filtruj według :column", + "Clear": "Jasne", "No data found": "Nie znaleziono danych", "Previous": "Poprzedni", "Next": "Następny", @@ -218,15 +225,15 @@ "Logout": "Wyloguj się", "An anonymous user": "Anonimowy użytkownik", "submitted a custom form.": "przesłał niestandardowy formularz.", - "applied for a recruitment.": "zgłosił się do rekrutacji.", + "created a new application request.": "utworzył nowe żądanie aplikacji.", " has withdrawn his application.": "wycofał swój wniosek.", " rejected your application.": "odrzucił Twój wniosek.", " approved your application.": "zatwierdził Twój wniosek.", " has put your application on-hold.": "wstrzymał Twoją aplikację.", " has started processing your application.": "rozpoczął przetwarzanie Twojego wniosku.", " has changed status of your application": "zmienił status Twojego wniosku", - "New message received on a recruitment application.": "Otrzymano nową wiadomość dotyczącą aplikacji rekrutacyjnej.", - "Your application has a new message from @:username": "Twoja aplikacja zawiera nową wiadomość od @:username", + "New message received on an application request.": "Otrzymano nową wiadomość dotyczącą żądania aplikacji.", + "Your application request received a new message from @:username": "Do Twojego wniosku aplikacyjnego dotarła nowa wiadomość od @:username", "Poll starting": "Rozpoczęcie ankiety", "Poll closing": "Zamknięcie ankiety", "Are you sure you want to delete this Post?": "Czy na pewno chcesz usunąć ten post?", @@ -242,6 +249,7 @@ "Staff Member": "Członek administracji", "Muted User": "Wyciszony użytkownik", "Password": "Hasło", + "Continue with empty password if you have no password.": "Kontynuuj z pustym hasłem, jeśli nie masz hasła.", "Cancel": "Anuluj", "Whoops! Something went wrong.": "Ups! Coś poszło nie tak.", "Leave Impersonation": "Opuść tryb podszywania się", @@ -281,6 +289,37 @@ "Badge": "Odznaka", "Badge Image": "Obraz odznaki", "Delete Badge": "Usuń odznakę", + "Run Command": "Uruchom polecenie", + "Scope": "Zakres", + "Global": "Światowy", + "Run generic command": "Uruchom polecenie ogólne", + "Player": "Gracz", + "Run against players": "Biegnij przeciwko graczom", + "Available Placeholders": "Dostępne symbole zastępcze", + "Username of the player the command is running on.": "Nazwa użytkownika odtwarzacza, na którym uruchomione jest polecenie.", + "Unique Id of the player the command is running on.": "Unikalny identyfikator odtwarzacza, na którym działa polecenie.", + "Enter command to run...": "Wprowadź polecenie, aby uruchomić...", + "Servers to run on": "Serwery, na których można działać", + "Leave empty to run on all servers": "Pozostaw puste, aby uruchomić na wszystkich serwerach", + "Players to run on": "Gracze, na których można biegać", + "Select players": "Wybierz graczy", + "Select players to run command on": "Wybierz graczy, na których chcesz wydać polecenie", + "Require player to be online": "Wymagaj, aby gracz był online", + "This command should only run if player is online on running server. If not online it will be queued to run when player comes online.": "To polecenie powinno zostać uruchomione tylko wtedy, gdy gracz jest online na działającym serwerze. Jeśli nie jest on online, zostanie ustawiony w kolejce do uruchomienia, gdy gracz przejdzie do trybu online.", + "Command": "Komenda", + "Server": "Serwer", + "Status": "Status", + "Last Attempted": "Ostatnia próba", + "Execute At": "Wykonaj o godz", + "Tags": "Tagi", + "For Player": "Dla Gracza", + "Output": "Wyjście", + "Command History": "Historia poleceń", + "Retry All Failed": "Ponów próbę. Wszystko nie powiodło się", + "Attempts: :attempts\/:max_attempts": "Próby: :attempts\/:max_attempts", + "none": "żaden", + "Retry Command": "Ponów polecenie", + "Delete Command": "Usuń polecenie", "Create Custom Form": "Utwórz formularz niestandardowy", "Title of Custom Form": "Tytuł formularza niestandardowego", "Eg: Contact Us": "Np.: Skontaktuj się z nami", @@ -303,7 +342,6 @@ "Edit Custom Form": "Edytuj formularz niestandardowy", "Update Custom Form": "Zaktualizuj formularz niestandardowy", "Title": "Tytuł", - "Status": "Status", "Can Submit": "Można przesłać", "Notify Staff on Submit": "Powiadom personel po przesłaniu", "Visible in Listing": "Widoczne w aukcji", @@ -323,7 +361,6 @@ "Max submission per user": "Maksymalna liczba zgłoszeń na użytkownika", "not applicable": "nie dotyczy", "Minimum staff role weight to view submissions": "Minimalna waga roli personelu umożliwiająca przeglądanie zgłoszeń", - "none": "żaden", "Notify staff on new submission": "Powiadom personel o nowym zgłoszeniu", "Updated": "Zaktualizowano", "Country": "Kraj", @@ -410,6 +447,17 @@ "External URL is protected from end users.": "Zewnętrzny adres URL jest chroniony przed użytkownikami końcowymi.", "Minimum Role Weight Required to Download": "Minimalna waga roli wymagana do pobrania", "Delete Download": "Usuń pobieranie", + "UUID": "UUID", + "Job": "Stanowisko", + "Connection\/Queue": "Połączenie\/kolejka", + "Exception": "Wyjątek", + "Failed At": "Nie udało się o", + "Failed Jobs": "Nieudane zadania", + "Retry All Jobs": "Ponów próbę wszystkich zadań", + "Clear All Jobs": "Wyczyść wszystkie zadania", + "Attempts: :attempts": "Próby: :attempts", + "Retry Job": "Ponów próbę", + "Delete Job": "Usuń zadanie", "Create News": "Utwórz wiadomości", "News Category": "Kategoria wiadomości", "General": "Ogólny", @@ -486,11 +534,11 @@ "Reset to Default Ranks": "Zresetuj do domyślnych rang", "Rank": "Ranga", "Delete Rank": "Usuń pozycję", - "Create Recruitment Form": "Utwórz formularz rekrutacyjny", - "Title of this Recruitment": "Tytuł tej rekrutacji", + "Create Application Form": "Utwórz formularz zgłoszeniowy", + "Title of this Application": "Tytuł niniejszego wniosku", "Eg: Apply to be a Staff Member": "Np.: Aplikuj, aby zostać członkiem personelu", - "Recruitment Slug": "Ślimak rekrutacyjny", - "Recruitment Status": "Stan rekrutacji", + "Application Slug for URL": "Ślimak aplikacji dla adresu URL", + "Application Status": "Status aplikacji", "How many times a user can reapply after rejection. Leave empty for no limit.": "Ile razy użytkownik może ponownie złożyć wniosek po odrzuceniu. Pozostaw puste bez ograniczeń.", "Submission Cooldown in Seconds": "Czas odnowienia poddania w kilka sekund", "After how many seconds user can reapply this application. Leave empty for no cooldown.": "Po ilu sekundach użytkownik może ponownie zastosować tę aplikację. Pozostaw puste, aby nie było czasu odnowienia.", @@ -499,20 +547,19 @@ "Leave empty to allow any staff with [vote recruitment_submissions] permission to vote on submissions.": "Pozostaw puste, aby umożliwić każdemu pracownikowi z uprawnieniem [vote rekrutacja_submissions] głosowanie nad zgłoszeniami.", "Min Staff Role Weight to Act on Submission": "Minimalna waga roli personelu, którą należy podjąć po zgłoszeniu", "Min staff role weight required to Approve\/Reject on submission. Leave empty to allow any staff with [acton recruitment_submissions] permission to act on submissions.": "Minimalna waga roli pracownika wymagana do zatwierdzenia\/odrzucenia przy przesyłaniu. Pozostaw puste, aby umożliwić każdemu pracownikowi z uprawnieniem [acton rekrutacja_submissions] podjęcie działań w związku ze zgłoszeniami.", - "If this recruitment is for hiring of a specific role, select the role here.": "Jeśli ta rekrutacja dotyczy zatrudnienia na konkretną rolę, wybierz tę rolę tutaj.", - "Create Recruitment": "Utwórz rekrutację", - "Edit Recruitment Form": "Edytuj formularz rekrutacyjny", - "Update Recruitment": "Aktualizuj rekrutację", + "If this application is for hiring of a specific role, select the role here.": "Jeśli ta aplikacja dotyczy zatrudnienia na określonym stanowisku, wybierz tę rolę tutaj.", + "Edit Application Form": "Edytuj formularz zgłoszeniowy", + "Update Application Form": "Zaktualizuj formularz wniosku", "Notify Staff": "Powiadom personel", "Messaging": "Wiadomości", "Open Requests": "Otwórz żądania", "Closed Requests": "Zamknięte żądania", - "Manage Recruitment Forms": "Zarządzaj formularzami rekrutacyjnymi", - "Recruitment": "Rekrutacja", - "Delete Recruitment": "Usuń rekrutację", - ":title Intel - Recruitments": ":title Intel - Rekrutacja", + "Manage Application Forms": "Zarządzaj formularzami wniosków", + "Application Form": "Formularz zgłoszeniowy", + "Delete Application Form": "Usuń formularz wniosku", + ":title Intel - Application Form": ":title Intel — formularz zgłoszeniowy", ":title - Intel": ":title – Intel", - "This recruitment hiring for": "Ta rekrutacja zatrudnia do", + "This application hiring for": "Ta aplikacja zatrudnia dla", "Submission Cooldown": "Czas odnowienia poddania", "Allow only Player Linked Users": "Zezwalaj tylko na użytkowników połączonych z odtwarzaczem", "Allow only Verified Users": "Zezwalaj tylko zweryfikowanym użytkownikom", @@ -520,16 +567,19 @@ "Enable Messaging Feature": "Włącz funkcję przesyłania wiadomości", "Notify staff on Events": "Powiadom personel o wydarzeniach", "Applicant": "Petent", + "Application": "Aplikacja", + "Last Actor": "Ostatni aktor", + "Last Comment": "Ostatni komentarz", "Updated At": "Zaktualizowano", - "Closed Request - Recruitments": "Zamknięte zapytanie - rekrutacja", - "Open Requests - Recruitments": "Otwarte wnioski - rekrutacja", - "Closed Recruitment Submissions:": "Zgłoszenia do zamkniętej rekrutacji:", - "Open Recruitment Submissions:": "Zgłoszenia do otwartej rekrutacji:", - "All Recruitments": "Cała rekrutacja", - ":user application for :recruitmenttitle #:index - Recruitments": ":user aplikacja dla :recruitmenttitle #:index - Rekrutacje", + "Closed Request - Applications": "Zamknięte żądanie — aplikacje", + "Open Requests - Applications": "Otwarte wnioski – aplikacje", + "Closed Requests:": "Zamknięte żądania:", + "Open Requests:": "Otwarte żądania:", + "All Applications": "Wszystkie aplikacje", + ":user application for :recruitmenttitle #:index - Applications": "aplikacja :user dla :recruitmenttitle #:index - Aplikacje", ":user application for :recruitmenttitle #:index": "aplikacja :user dla :recruitmenttitle #:index", "Last Updated At": "Ostatnia aktualizacja o godz", - "Submission Status": "Stan przesłania", + "Request Status": "Zapytaj o status", "Reason": "Powód", "Marked :status By": "Oznaczone :status przez", "Mark In-Progress": "Oznacz w toku", @@ -580,8 +630,8 @@ "Go back to Server List": "Wróć do listy serwerów", "Add Bungee Server": "Dodaj serwer Bungee", "Edit Bungee Server: :name": "Edytuj serwer Bungee: :name", - "Minetrax only support adding one bungee server. This server will be used to show online players and server status. All sensitive information will be encrypted.": "Minetrax wspiera dodanie tylko jednego serwera Bungee. Ten serwer będzie używany do pokazywania graczy online i statusu serwera. Wszystkie poufne informacje zostaną zaszyfrowane.", - "Please note Proxy servers don't need Minetrax.jar plugin. Only install them on actual servers like spigot, bukkit etc.": "Uwaga: serwery proxy nie potrzebują pluginu Minetrax.jar. Instaluj je tylko na rzeczywistych serwerach, takich jak Spigot, Bukkit itp.", + "Add Bungee\/Velocity Server": "Dodaj serwer Bungee\/Velocity", + "Edit Bungee\/Velocity Server: :name": "Edytuj serwer Bungee\/Velocity: :name", "Server Name": "Nazwa serwera", "Eg: My Bungee Server": "Np.: Mój serwer Bungee", "Hostname": "Nazwa hosta", @@ -593,27 +643,26 @@ "Query Port": "Port zapytań", "Eg: 25575": "Np.: 25575", "Webquery Port": "Port zapytań internetowych", - "Eg: 25585": "Np.: 25585", + "WebQuery port is a new port which MineTrax plugin will open for secure connection between server and web. Enter a port value which is available and can be open. Eg: 25569": "Port WebQuery to nowy port, który wtyczka MineTrax otworzy w celu bezpiecznego połączenia między serwerem a siecią. Wprowadź wartość portu, która jest dostępna i może być otwarta. Np.: 25569", "Server Version": "Wersja serwera", "Select version..": "Wybierz wersję...", - "Edit Bungee Server": "Edytuj serwer Bungee", - "Add New Server": "Dodaj nowy serwer", + "Enable Server Intel \/ Analytics": "Włącz serwer Intel \/ Analytics", + "If enabled, server analytics data (performance metric, join activity etc) will be captured for this server via plugin.": "Jeśli ta opcja jest włączona, dane analityczne serwera (metryki wydajności, aktywność przyłączania itp.) będą przechwytywane dla tego serwera za pośrednictwem wtyczki.", + "Enable Skin Change via Web (SkinsRestorer)": "Włącz zmianę skórki przez Internet (SkinsRestorer)", + "Allow user to change their linked players skin via web for this server. This will require SkinsRestorer plugin to be installed on the server.": "Zezwalaj użytkownikowi na zmianę skórki połączonych graczy przez Internet dla tego serwera. Będzie to wymagało zainstalowania wtyczki SkinsRestorer na serwerze.", "Add Server": "Dodaj serwer", + "Edit Server": "Edytuj serwer", + "Add New Server": "Dodaj nowy serwer", "This name will help to identify this server. Eg: Survival, Skyblock, etc.": "Ta nazwa pomoże zidentyfikować ten serwer. Np.: Survival, Skyblock itp.", "Publicly visible join address of the server. Eg: play.example.com": "Publicznie widoczny adres dołączenia serwera. Np.: play.example.com", "Higher the weight, higher the priority. Eg: 1,3,10 etc. Can be left empty.": "Większa waga, wyższy priorytet. Np.: 1,3,10 itd. Można pozostawić puste.", - "WebQuery port is a new port which MineTrax plugin will open for secure connection between server and web. Enter a port value which is available and can be open. Eg: 25569": "Port WebQuery to nowy port, który wtyczka MineTrax otworzy w celu bezpiecznego połączenia między serwerem a siecią. Wprowadź wartość portu, która jest dostępna i może być otwarta. Np.: 25569", "Select server type": "Wybierz typ serwera", "Server Type": "Rodzaj serwera", "Version": "Wersja", - "Enable Server Intel \/ Analytics": "Włącz serwer Intel \/ Analytics", - "If enabled, server analytics data (performance metric, join activity etc) will be captured for this server via plugin.": "Jeśli ta opcja jest włączona, dane analityczne serwera (metryki wydajności, aktywność przyłączania itp.) będą przechwytywane dla tego serwera za pośrednictwem wtyczki.", "Enable Player Intel \/ Analytics": "Włącz Player Intel\/Analytics", "If enabled, player intel & statistics data will be captured for this server via plugin.": "Jeśli ta opcja jest włączona, dane wywiadowcze i statystyki gracza będą przechwytywane dla tego serwera za pośrednictwem wtyczki.", "Enable In-Game Chat": "Włącz czat w grze", "Enable in-game chat for this server, which allow users to view & chat to in-game players from website.": "Włącz czat w grze dla tego serwera, co pozwoli użytkownikom przeglądać i rozmawiać z graczami w grze ze strony internetowej.", - "Enable Skin Change via Web (SkinsRestorer)": "Włącz zmianę skórki przez Internet (SkinsRestorer)", - "Allow user to change their linked players skin via web for this server. This will require SkinsRestorer plugin to be installed on the server.": "Zezwalaj użytkownikowi na zmianę skórki połączonych graczy przez Internet dla tego serwera. Będzie to wymagało zainstalowania wtyczki SkinsRestorer na serwerze.", "Edit Server: :name": "Edytuj serwer: :name", "Update Server": "Aktualizuj serwer", "IP:Port": "IP:Port", @@ -623,17 +672,12 @@ "Servers": "Serwery", "Sync Player Statistics": "Synchronizuj statystyki graczy", "Add": "Dodaj", - "Server": "Serwer", "Add Proxy Server": "Dodaj serwer proxy", "WebQuery: :webquery_port": "Zapytanie internetowe: :webquery_port", "not set": "nie ustawiono", - "Server Online": "Serwer online", - "Server Offline": "Serwer offline", "Loading": "Ładowanie", - "WebQuery Online": "Zapytanie internetowe online", - "WebQuery Offline": "Zapytanie internetowe offline", + "WebQuery": "Zapytanie internetowe", "View Server Intel": "Zobacz serwer Intel", - "Edit Server": "Edytuj serwer", "Delete Server": "Usuń serwer", "Statistics": "Statystyki", "Performance": "Wydajność", @@ -873,10 +917,23 @@ "Enable user to link their players to account": "Zezwól użytkownikowi na łączenie swoich kont graczy z kontem na stronie", "Max Players Per Account": "Maksymalna liczba graczy na konto", "Number of players that can be linked to one account in website.": "Liczba graczy, którzy mogą być powiązani z jednym kontem na stronie.", - "Account Link Success Command": "Polecenie poprawnego połączenia konta", - "Use this to reward players when they link account: Eg: give {PLAYER} diamond 1": "Użyj tego, aby nagrodzić graczy, którzy połączą konto: Np.: give {PLAYER} diamond 1", - "Account Link Success Broadcast": "Transmisja o poprawnym połączeniu konta", - "If set then this will be broadcast to server when player link is successful: Eg: {PLAYER} has successfully linked his account and won a ultra key.": "Jeśli ustawione, to ta wiadomość będzie transmitowana do serwera po pomyślnym połączeniu konta gracza: Np.: {PLAYER} pomyślnie połączył swoje konto i wygrał ultra klucz.", + "Account Link Success Commands": "Polecenia dotyczące powodzenia połączenia konta", + "(runs when a player is linked to account)": "(działa, gdy gracz jest połączony z kontem)", + "Username of the player which is linked.": "Nazwa użytkownika gracza, który jest powiązany.", + "Unique Id of the player which is linked.": "Unikalny identyfikator gracza, który jest powiązany.", + "Run on servers": "Uruchom na serwerach", + "Run on first link only": "Uruchom tylko na pierwszym łączu", + "This command should only run if given player is getting linked for first time. (Eg: This wont run if player get unlinked and then linked again)": "To polecenie powinno zostać uruchomione tylko wtedy, gdy dany gracz jest łączony po raz pierwszy. (Przykład: To nie zadziała, jeśli gracz zostanie rozłączony, a następnie ponownie połączony)", + "No commands on account link.": "Brak poleceń dotyczących połączenia konta.", + "Add New Link Command": "Dodaj nowe polecenie połączenia", + "Account Unlink Success Commands": "Polecenia dotyczące powodzenia odłączania konta", + "(runs when a player is unlinked from account)": "(działa, gdy gracz zostanie odłączony od konta)", + "Username of the player which is unlinked.": "Nazwa użytkownika gracza, który jest odłączony.", + "Unique Id of the player which is unlinked.": "Unikalny identyfikator gracza, który jest odłączony.", + "Run on first unlink only": "Uruchom tylko przy pierwszym rozłączeniu", + "This command should only run if given player is getting unlinked for first time. (Eg: This wont run if player was linked and unlinked before)": "To polecenie powinno zostać uruchomione tylko wtedy, gdy dany gracz jest rozłączany po raz pierwszy. (Przykład: To nie zadziała, jeśli gracz był wcześniej połączony i rozłączony)", + "No commands on account unlink.": "Brak poleceń dotyczących odłączania konta.", + "Add New Unlink Command": "Dodaj nowe polecenie rozłączania", "Enable Player Rank Sync": "Włącz synchronizację rankingu gracza", "Enable this if you want to sync your player rank from server instead of website calculated rank. you must create a rank for each group you have in server making sure rank shortname matches the name of your player group in server.": "Włącz tę opcję, jeśli wolisz synchronizować rangi graczy z serwera niż korzystać z tych obliczonych przez stronę. Musisz stworzyć rangę dla każdej grupy na serwerze upewniając się, że krótka nazwa rangi jest tożsama z nazwą rangi graczy na serwerze.", "Rank Sync From Server": "Synchronizacja rang z serwera", @@ -987,6 +1044,7 @@ "Joined": "Dołączył(a)", "Flags": "Flagi", "Users Administration": "Zarządzanie użytkownikami", + "Discord ID": "Identyfikator Discorda", "Muted": "Wyciszony", "Banned": "Zbanowany", "View Profile": "Zobacz profil", @@ -1188,10 +1246,10 @@ "Someone liked my Post": "Ktoś polubił mój post", "I am muted by Staff": "Zostałem\/am wyciszony\/a przez administrację", "I am banned by Staff": "Zostałem\/am zbanowany\/a przez administrację", - "Recruitment submission status changed": "Zmienił się status zgłoszenia rekrutacyjnego", - "New message in recruitment submission": "Nowa wiadomość w zgłoszeniu rekrutacyjnym", + "Application request status changed": "Zmieniono status żądania aplikacji", + "New message in application request": "Nowa wiadomość w żądaniu aplikacji", "For staff members": "Dla pracowników", - "Recruitment submission received": "Otrzymano zgłoszenie rekrutacyjne", + "Application request received": "Otrzymano żądanie aplikacji", "Custom form submission received": "Otrzymano przesłany formularz niestandardowy", "Someone commented on News": "Ktoś skomentował w Wiadomościach", "Saved.": "Zapisano.", @@ -1213,25 +1271,25 @@ "Mark all as read": "Oznacz wszystkie jako przeczytane", "No notifications to show.": "Brak powiadomień do wyświetlenia.", "Last Updated": "Ostatnio zaktualizowany", - "Recruitments": "Rekrutacje", + "Application Forms": "Formularze aplikacyjne", "View My Applications": "Zobacz Moje aplikacje", "Only for Verified Users": "Tylko dla zweryfikowanych użytkowników", "Only for Linked Account Users (Player linked)": "Tylko dla użytkowników połączonych kont (gracz połączony)", "Apply": "Stosować", "Application Closed!": "Aplikacja zamknięta!", "Login or Register to Apply!": "Zaloguj się lub zarejestruj, aby aplikować!", - "You need to be logged in to apply to this recruitment.": "Aby wziąć udział w tej rekrutacji, musisz się zalogować.", + "You need to be logged in to apply to this application.": "Aby skorzystać z tej aplikacji, musisz się zalogować.", "Max Submissions Reached!": "Osiągnięto maksymalną liczbę zgłoszeń!", "You are on a Cooldown!": "Jesteś w fazie odnowienia!", "Account Verification Required!": "Wymagana weryfikacja konta!", "Account Linking Required!": "Wymagane połączenie konta!", "You have already applied!": "Już złożyłeś podanie!", - "View Application": "Zobacz aplikację", + "View Request": "Zobacz żądanie", "Already approved in past! Wanna apply again?": "Już zatwierdzone w przeszłości! Chcesz aplikować ponownie?", "You may wanna check that before applying again.": "Możesz to sprawdzić przed ponownym złożeniem wniosku.", - "View Approved Application": "Wyświetl zatwierdzoną aplikację", - "My Recruitment Applications": "Moje aplikacje rekrutacyjne", - "Your application for :recruitmenttitle #:index - Recruitments": "Twoja aplikacja na :recruitmenttitle #:index - Rekrutacje", + "View Approved Request": "Wyświetl zatwierdzony wniosek", + "My Application Requests": "Moje wnioski aplikacyjne", + "Your application request for :recruitmenttitle #:index - Applications": "Twoje zapytanie aplikacyjne dla :recruitmenttitle #:index - Aplikacje", "Application for :recruitmenttitle #:index": "Wniosek o :recruitmenttitle #:index", "Success! A staff will soon review your application. Please be patience.": "Powodzenie! Nasz personel wkrótce sprawdzi Twój wniosek. Proszę zachować cierpliwość.", "Withdraw": "Wycofać", @@ -1246,7 +1304,11 @@ "You can link upto :count :player to your account! ( :left available )": "Możesz połączyć do :count :player ze swoim kontem! ( :left dostępne )", "player": "graczy", "players": "graczy", - "Initiate the process by joining the server and typing \/account-link in chat. A link will be generated, click on that link and your player will added to your account.": "Rozpocznij proces, dołączając do serwera i wpisując \/account-link na czacie. Klijknij wygenerowany link, a gracz zostanie dodany do Twojego konta.", + "To link a player to your account, join server and type '\/link :otp' in your chat.": "Aby połączyć gracza ze swoim kontem, dołącz do serwera i wpisz „\/link :otp” na swoim czacie.", + "Copied!": "Skopiowano!", + "This OTP will expire in :seconds seconds.": "To hasło jednorazowe wygaśnie za :seconds sekund.", + "This OTP has expired. Refresh the page to get a new OTP.": "To hasło jednorazowe wygasło. Odśwież stronę, aby uzyskać nowe hasło jednorazowe.", + "Click here to refresh.": "Kliknij tutaj, aby odświeżyć.", "No players linked to your account right now.": "W tej chwili nie ma graczy połączonych z Twoim kontem.", "Change Skin of this player.": "Zmień skórkę tego gracza.", "Are you sure you want to unlink this player from your account?": "Czy na pewno chcesz odłączyć tego gracza od swojego konta?", @@ -1377,11 +1439,9 @@ "Used Memory (MB)": "Wykorzystana pamięć (MB)", "Server Status": "Status serwera", "Join": "Dołącz", - "Copied!": "Skopiowano!", "SETTINGS": "USTAWIENIA", "Theme": "Motyw", "Plugin": "Plugin", - "Player": "Gracz", "Navigation": "Nawigacja", "Delete this shout permanently?": "Usunąć ten shout na stałe?", "No shouts yet.": "Nie ma jeszcze żadnych krzyków.", @@ -1433,5 +1493,18 @@ "You are muted by": "Jesteś wyciszony\/a przez", "Role Weight to View Submission": "Rola Waga do przeglądania przesłanych treści", "Slug": "Ślimak", - "via Email": "poprzez e-mail" + "Minetrax only support adding one bungee server. This server will be used to show online players and server status. All sensitive information will be encrypted.": "Minetrax wspiera dodanie tylko jednego serwera Bungee. Ten serwer będzie używany do pokazywania graczy online i statusu serwera. Wszystkie poufne informacje zostaną zaszyfrowane.", + "Please note Proxy servers don't need Minetrax.jar plugin. Only install them on actual servers like spigot, bukkit etc.": "Uwaga: serwery proxy nie potrzebują pluginu Minetrax.jar. Instaluj je tylko na rzeczywistych serwerach, takich jak Spigot, Bukkit itp.", + "Eg: 25585": "Np.: 25585", + "Edit Bungee Server": "Edytuj serwer Bungee", + "Server Online": "Serwer online", + "Server Offline": "Serwer offline", + "WebQuery Online": "Zapytanie internetowe online", + "WebQuery Offline": "Zapytanie internetowe offline", + "Account Link Success Command": "Polecenie poprawnego połączenia konta", + "Use this to reward players when they link account: Eg: give {PLAYER} diamond 1": "Użyj tego, aby nagrodzić graczy, którzy połączą konto: Np.: give {PLAYER} diamond 1", + "Account Link Success Broadcast": "Transmisja o poprawnym połączeniu konta", + "If set then this will be broadcast to server when player link is successful: Eg: {PLAYER} has successfully linked his account and won a ultra key.": "Jeśli ustawione, to ta wiadomość będzie transmitowana do serwera po pomyślnym połączeniu konta gracza: Np.: {PLAYER} pomyślnie połączył swoje konto i wygrał ultra klucz.", + "via Email": "poprzez e-mail", + "Initiate the process by joining the server and typing \/account-link in chat. A link will be generated, click on that link and your player will added to your account.": "Rozpocznij proces, dołączając do serwera i wpisując \/account-link na czacie. Klijknij wygenerowany link, a gracz zostanie dodany do Twojego konta." } \ No newline at end of file diff --git a/lang/ru.json b/lang/ru.json index 0c26d2d16..cfad099a3 100644 --- a/lang/ru.json +++ b/lang/ru.json @@ -1,16 +1,8 @@ { "Email\/Password authentication is disabled.": "Аутентификация по электронной почте\/паролю отключена.", "The provided password does not match your current password.": "Введенный пароль не совпадает с вашим текущим паролем.", - "Link expired or invalid!": "Ссылка устарела или недействительна!", - "Please request a fresh link and try again.": "Пожалуйста, запросите новую ссылку и повторите попытку.", - "Player not found in database!": "Игрок не найден в базе!", - "Please wait for sometime for server to update its player database.": "Пожалуйста, подождите некоторое время, пока сервер обновит свою базу данных игроков.", - "Player already linked to a user!": "Игрок уже связан с пользователем!", - "If you own this user please unlink it from your another account or contact administrator.": "Если вы являетесь владельцем этого пользователя, отмените его связь с другой учетной записью или обратитесь к администратору.", - "User already have max :max_slots players linked!": "Пользователь уже связал максимальное количество игроков :max_slots!", - "If you want to link this player please unlink a player.": "Если вы хотите связать этого игрока, отмените связь с ним.", - "Played linked successfully!": "Игрок успешно связан с аккаунтом!", - "This player is now linked to your account.": "Теперь этот игрок связан с вашей учетной записью.", + "Player unlinking disabled!": "Отвязка игрока отключена!", + "Player unlinking is disabled by the administrator.": "Отвязка плеера отключена администратором.", "Player not found!": "Игрок не найден!", "No player with that ID found linked to your account.": "Ни один игрок с таким идентификатором не связан с вашей учетной записью.", "Played unlinked successfully!": "Игрок успешно отвязан от аккаунта!", @@ -22,6 +14,11 @@ "Badge updated successfully": "Значок успешно обновлен", "Deleted Successfully": "Удалено успешно", "Badge has been deleted permanently": "Значок удален навсегда", + ":count Commands Scheduled!": "Команды :count запланированы!", + "Commands has been scheduled for execution. Check the status in Command History.": "Команды запланированы к выполнению. Проверьте статус в истории команд.", + "Deleted!": "Удалено!", + "Retried!": "Повторная попытка!", + "Command has been queued for retrying! Refresh the page after few seconds to check the status.": "Команда поставлена ​​в очередь на повторную попытку! Обновите страницу через несколько секунд, чтобы проверить статус.", "Custom Form is created successfully": "Пользовательская форма успешно создана", "Custom Form updated successfully": "Пользовательская форма успешно обновлена.", "Custom Form has been deleted permanently": "Пользовательская форма удалена навсегда.", @@ -38,6 +35,8 @@ "Download has been created successfully": "Загрузка успешно создана", "Download has been updated successfully": "Загрузка успешно обновлена", "Download has been deleted permanently": "Загрузка удалена навсегда", + "Retry Queued!": "Повторить попытку!", + "Job has been queued for retrying!": "Задание поставлено в очередь на повторную попытку!", "Online Players": "Онлайн игроки", "TPS": "ТПС", "CPU Load (%)": "Загрузка процессора (%)", @@ -63,12 +62,12 @@ "Rank updated successfully": "Ранг успешно обновлен", "Rank has been deleted permanently": "Ранг удален навсегда", "Rank Reset Successful": "Сброс ранга выполнен успешно", - "Recruitment Form is created successfully": "Форма найма успешно создана", - "Recruitment Form updated successfully": "Форма найма успешно обновлена", - "Recruitment Form has been deleted permanently": "Форма приема на работу удалена навсегда", - "Recruitment Submission deleted successfully": "Заявление о приеме на работу успешно удалено", + "Application Form is created successfully": "Форма заявки успешно создана", + "Application Form updated successfully": "Форма заявки успешно обновлена", + "Application Form has been deleted permanently": "Форма заявки удалена навсегда", + "Request deleted successfully": "Запрос успешно удален", "Action Successful": "Действие успешное", - "Recruitment Submission action has been completed successfully": "Действие по отправке на работу успешно завершено", + "Request action has been completed successfully": "Запрос действия успешно завершен", "Message Successfully": "Сообщение успешно отправлено", "Message has been deleted successfully": "Сообщение успешно удалено", "New Role is created successfully": "Новая роль успешно создана", @@ -78,8 +77,7 @@ ":role cannot be deleted because there are users on this role.!": ":role нельзя удалить, так как на этой роли есть пользователи.!", "Role has been deleted!": "Роль удалена!", "New server added successfully": "Новый сервер успешно добавлен", - "Bungee server added successfully": "Сервер Bungee успешно добавлен", - "Bungee server updated successfully": "Сервер Bungee успешно обновлен", + "Proxy server added successfully": "Прокси-сервер успешно добавлен", "Server updated successfully": "Сервер успешно обновлен", "Server has been deleted permanently": "Сервер удален навсегда", "Rescan Queued!": "Повторное сканирование поставлено в очередь!", @@ -117,10 +115,16 @@ "User deleted successfully": "Пользователь успешно удален", "Player not found": "Игрок не найден", "Player already linked to a user": "Игрок уже связан с пользователем", - "Failed to start player session.": "Не удалось запустить сеанс игрока.", - "Failed reporting player pvp kill.": "Не удалось сообщить об убийстве игрока в пвп.", + "Provided OTP is invalid or expired. Please try again.": "Предоставленный OTP недействителен или срок его действия истек. Пожалуйста, попробуйте еще раз.", + "You already have max :max_slots players linked!": "У вас уже подключено максимальное количество игроков :max_slots!", + "Player linked successfully": "Игрок успешно подключен", + "Player intel is disabled for this server.": "Информация об игроках отключена для этого сервера.", + "Failed to start player session. :message": "Не удалось начать сеанс игрока. х1", + "Failed reporting player pvp kill: :message": "Не удалось сообщить об убийстве игрока в пвп: :message", + "Failed reporting player death: :message": "Не удалось сообщить о смерти игрока: :message", "PlayerIntel event for :username reported successfully.": "Событие PlayerIntel для :username успешно передано.", - "Failed to report Event data.": "Не удалось сообщить данные о событии.", + "Failed to report Event data: :message": "Не удалось сообщить данные о событии: :message", + "Server Intel failed to report: :message": "Сервер Intel не смог сообщить: :message", "Submit Successful!": "Отправить успешно!", "Form has been submitted successfully.": "Форма успешно отправлена.", "Comments are not allowed for this news": "Комментарии к этой новости запрещены", @@ -139,7 +143,7 @@ "Applied Successfully!": "Применено успешно!", "Application has been submitted successfully.": "Заявка успешно отправлена.", "Withdraw Successful": "Вывод успешный", - "Recruitment Submission withdrawn successfully": "Заявка на набор персонала успешно отозвана", + "Application Request withdrawn successfully": "Запрос на заявку успешно отозван", "Failed to ping server": "Не удалось пропинговать сервер", "Failed to query server": "Не удалось запросить сервер", "Web Query Failed": "Ошибка веб-запроса", @@ -164,20 +168,20 @@ "[Notification] :user commented on your post": "[Уведомление] :user прокомментировал ваше сообщение", "[Notification] Someone liked your post": "[Уведомление] Кому-то понравился ваш пост", "[Notification] :user liked your post": "[Уведомление] :user понравился ваш пост", - "[Notification] New message received on a recruitment application.": "[Уведомление] Получено новое сообщение о заявке на набор персонала.", - ":causer sent new message on his application for :recruitment:": ":causer отправил новое сообщение в своей заявке на :recruitment:", - "[Notification] Your application has a new message.": "[Уведомление] В вашем приложении появилось новое сообщение.", - ":causer sent you a message on your application for :recruitment:": ":causer отправил вам сообщение о вашей заявке на :recruitment:", - "[Notification] New recruitment application received.": "[Уведомление] Получено новое заявление о приеме на работу.", - "[Notification] An application withdrawn by user.": "[Уведомление] Заявка отозвана пользователем.", - ":applicant has withdrawn his application for :recruitment.": ":applicant отозвал свою заявку на :recruitment.", - "[Notification] Your Application status has changed.": "[Уведомление] Статус вашей заявки изменился.", - ":causer has started processing your application for :recruitment.": ":causer начал обработку вашей заявки на :recruitment.", - ":causer has put on-hold your application for :recruitment.": ":causer приостановил вашу заявку на :recruitment.", - "[Notification] Congratulations! Your Application has been Approved.": "[Уведомление] Поздравляем! Ваша заявка одобрена.", - ":causer has approved your application for :recruitment.": ":causer одобрил вашу заявку на :recruitment.", - "[Notification] Sorry! Your Application has been Rejected.": "[Уведомление] Извините! Ваша заявка была отклонена.", - ":causer has rejected your application for :recruitment.": ":causer отклонил вашу заявку на :recruitment.", + "[Notification] New message received on a application request.": "[Уведомление] Новое сообщение, полученное по запросу приложения.", + ":causer sent new message on his application request for :recruitment:": ":causer отправил новое сообщение по запросу заявки на :recruitment:", + "[Notification] Your application request has a new message.": "[Уведомление] В вашем запросе заявки появилось новое сообщение.", + ":causer sent you a message on your application request for :recruitment:": ":causer отправил вам сообщение по вашему запросу на :recruitment:", + "[Notification] New application request received.": "[Уведомление] Получен новый запрос на заявку.", + "[Notification] An application request withdrawn by user.": "[Уведомление] Запрос заявки отозван пользователем.", + ":applicant has withdrawn his application request for :recruitment.": ":applicant отозвал свою заявку на :recruitment.", + "[Notification] Your Application request status has changed.": "[Уведомление] Статус вашего запроса на участие изменился.", + ":causer has started processing your application request for :recruitment.": ":causer начал обработку вашего запроса на заявку на :recruitment.", + ":causer has put on-hold your application request for :recruitment.": ":causer приостановил ваш запрос на получение :recruitment.", + "[Notification] Congratulations! Your Application request has been Approved.": "[Уведомление] Поздравляем! Ваш запрос на участие был одобрен.", + ":causer has approved your application request for :recruitment.": ":causer одобрил ваш запрос на участие в :recruitment.", + "[Notification] Sorry! Your Application request has been Rejected.": "[Уведомление] Извините! Ваш запрос на подачу заявления был отклонен.", + ":causer has rejected your application request for :recruitment.": ":causer отклонил ваш запрос на получение :recruitment.", "[Notification] You are Banned by :user": "[Уведомление] Вы забанены :user", "Oh no! You are banned by a staff member and can no longer access our website. If you think this was a mistake please create an appeal.": "О, нет! Вы заблокированы сотрудником и больше не можете получить доступ к нашему сайту. Если вы считаете, что это была ошибка, подайте апелляцию.", "Banned by: :user": "Забанен: :user", @@ -185,8 +189,9 @@ "Oh no! You are muted by a staff member and can no longer send messages or chat in our website. If you think this was a mistake please create an appeal.": "О, нет! Сотрудник отключил ваш звук, и вы больше не можете отправлять сообщения или общаться в чате на нашем веб-сайте. Если вы считаете, что это была ошибка, подайте апелляцию.", "Muted by: :user": "Приглушено: :user", "Failed to upload skin to MineSkin. Please try again later": "Не удалось загрузить скин в MineSkin. Пожалуйста, повторите попытку позже", - "Oh Jeez! Something went wrong. Please try again later.": "О Боже! Что-то пошло не так. Пожалуйста, повторите попытку позже.", "Error setting player skin. Please make sure provided skin is valid.": "Ошибка установки скина игрока. Пожалуйста, убедитесь, что предоставленный скин действителен.", + "Provided UUID is not valid.": "Предоставленный UUID недействителен.", + "WebQuery failed for unknown reasons. Please check minecraft server logs.": "WebQuery не удалось выполнить по неизвестным причинам. Пожалуйста, проверьте журналы сервера Minecraft.", "Minecraft Servers & Players Tracking": "Серверы Minecraft и отслеживание игроков", "Use Light Theme": "Использовать светлую тему", "Use Dark Theme": "Использовать тёмную тему", @@ -197,6 +202,8 @@ "We use cookies to enhance your browsing experience. By continuing, you consent to our cookie policy.": "Мы используем файлы cookie, чтобы улучшить ваш опыт просмотра. Продолжая, вы соглашаетесь с нашей политикой использования файлов cookie.", "I Understand": "Я понимаю", "Reset": "Перезагрузить", + "Filter by :column": "Фильтровать по :column", + "Clear": "Прозрачный", "No data found": "Данные не найдены", "Previous": "Предыдущий", "Next": "Следующий", @@ -218,15 +225,15 @@ "Logout": "Выйти", "An anonymous user": "Анонимный пользователь", "submitted a custom form.": "отправил специальную форму.", - "applied for a recruitment.": "подал заявление о приеме на работу.", + "created a new application request.": "создал новый запрос приложения.", " has withdrawn his application.": "отозвал свое заявление.", " rejected your application.": "отклонил вашу заявку.", " approved your application.": "одобрил вашу заявку.", " has put your application on-hold.": "приостановил ваше заявление.", " has started processing your application.": "начал обработку вашего заявления.", " has changed status of your application": "изменил статус вашего заявления", - "New message received on a recruitment application.": "Новое сообщение получено в заявлении о приеме на работу.", - "Your application has a new message from @:username": "Ваше приложение получило новое сообщение от @:username.", + "New message received on an application request.": "Новое сообщение получено по запросу приложения.", + "Your application request received a new message from @:username": "На ваш запрос приложения получено новое сообщение от @:username.", "Poll starting": "Старт опроса", "Poll closing": "Закрытие опроса", "Are you sure you want to delete this Post?": "Вы уверены, что хотите удалить эту запись?", @@ -242,6 +249,7 @@ "Staff Member": "Штатный сотрудник", "Muted User": "Пользователь с отключенным звуком", "Password": "Пароль", + "Continue with empty password if you have no password.": "Если у вас нет пароля, продолжайте с пустым паролем.", "Cancel": "Отмена", "Whoops! Something went wrong.": "Упс! Что-то пошло не так.", "Leave Impersonation": "Оставить олицетворение", @@ -281,6 +289,37 @@ "Badge": "Значок", "Badge Image": "Изображение значка", "Delete Badge": "Удалить значок", + "Run Command": "Команда Run", + "Scope": "Объем", + "Global": "Глобальный", + "Run generic command": "Запустить общую команду", + "Player": "Игрок", + "Run against players": "Бегите против игроков", + "Available Placeholders": "Доступные заполнители", + "Username of the player the command is running on.": "Имя пользователя игрока, на котором выполняется команда.", + "Unique Id of the player the command is running on.": "Уникальный идентификатор игрока, на котором выполняется команда.", + "Enter command to run...": "Введите команду для запуска...", + "Servers to run on": "Серверы для работы", + "Leave empty to run on all servers": "Оставьте пустым для запуска на всех серверах.", + "Players to run on": "Игроки, на которых можно бежать", + "Select players": "Выберите игроков", + "Select players to run command on": "Выберите игроков для запуска команды", + "Require player to be online": "Требовать от игрока быть онлайн", + "This command should only run if player is online on running server. If not online it will be queued to run when player comes online.": "Эту команду следует запускать только в том случае, если игрок находится в сети на работающем сервере. Если он не в сети, он будет поставлен в очередь на запуск, когда игрок подключится к сети.", + "Command": "Команда", + "Server": "Сервер", + "Status": "Статус", + "Last Attempted": "Последняя попытка", + "Execute At": "Выполнить в", + "Tags": "Теги", + "For Player": "Для игрока", + "Output": "Выход", + "Command History": "История команд", + "Retry All Failed": "Повторить все не удалось", + "Attempts: :attempts\/:max_attempts": "Попытки: :attempts\/:max_attempts", + "none": "никто", + "Retry Command": "Повторить команду", + "Delete Command": "Удалить команду", "Create Custom Form": "Создать пользовательскую форму", "Title of Custom Form": "Название пользовательской формы", "Eg: Contact Us": "Например: Свяжитесь с нами", @@ -303,7 +342,6 @@ "Edit Custom Form": "Редактировать пользовательскую форму", "Update Custom Form": "Обновить пользовательскую форму", "Title": "Заголовок", - "Status": "Статус", "Can Submit": "Могу отправить", "Notify Staff on Submit": "Уведомить персонал об отправке", "Visible in Listing": "Видно в листинге", @@ -323,7 +361,6 @@ "Max submission per user": "Максимальное количество заявок на пользователя", "not applicable": "непригодный", "Minimum staff role weight to view submissions": "Минимальный вес роли персонала для просмотра материалов", - "none": "никто", "Notify staff on new submission": "Уведомить персонал о новом сообщении", "Updated": "Обновлено", "Country": "Страна", @@ -410,6 +447,17 @@ "External URL is protected from end users.": "Внешний URL-адрес защищен от конечных пользователей.", "Minimum Role Weight Required to Download": "Минимальный вес роли, необходимый для загрузки", "Delete Download": "Удалить загрузку", + "UUID": "UUID", + "Job": "Работа", + "Connection\/Queue": "Соединение\/Очередь", + "Exception": "Исключение", + "Failed At": "Ошибка в", + "Failed Jobs": "Неудачные задания", + "Retry All Jobs": "Повторить все задания", + "Clear All Jobs": "Очистить все вакансии", + "Attempts: :attempts": "Попытки: :attempts", + "Retry Job": "Повторить задание", + "Delete Job": "Удалить задание", "Create News": "Создать новость", "News Category": "Категория новостей", "General": "Общий", @@ -486,11 +534,11 @@ "Reset to Default Ranks": "Сбросить ранги по умолчанию", "Rank": "Ранг", "Delete Rank": "Удалить ранг", - "Create Recruitment Form": "Создать форму набора персонала", - "Title of this Recruitment": "Название этого набора", + "Create Application Form": "Создать форму заявки", + "Title of this Application": "Название этого приложения", "Eg: Apply to be a Staff Member": "Например: подать заявку на вступление в штат сотрудников", - "Recruitment Slug": "Рекрутинговый слизень", - "Recruitment Status": "Статус набора", + "Application Slug for URL": "Сланец приложения для URL-адреса", + "Application Status": "Статус приложения", "How many times a user can reapply after rejection. Leave empty for no limit.": "Сколько раз пользователь может повторно подать заявку после отклонения. Оставьте пустым, чтобы не было ограничений.", "Submission Cooldown in Seconds": "Время восстановления подачи в секундах", "After how many seconds user can reapply this application. Leave empty for no cooldown.": "Через сколько секунд пользователь сможет повторно применить это приложение. Оставьте пустым, чтобы не было времени восстановления.", @@ -499,20 +547,19 @@ "Leave empty to allow any staff with [vote recruitment_submissions] permission to vote on submissions.": "Оставьте пустым, чтобы позволить любому сотруднику с разрешением [vote набор_представлений] голосовать за представленные материалы.", "Min Staff Role Weight to Act on Submission": "Минимальная роль сотрудника, выполняющая действия по представлению", "Min staff role weight required to Approve\/Reject on submission. Leave empty to allow any staff with [acton recruitment_submissions] permission to act on submissions.": "Минимальный вес роли персонала, необходимый для утверждения\/отклонения подачи. Оставьте пустым, чтобы позволить любому персоналу с разрешением [acton Recruitment_submissions] действовать по представленным материалам.", - "If this recruitment is for hiring of a specific role, select the role here.": "Если этот набор предназначен для найма определенной должности, выберите роль здесь.", - "Create Recruitment": "Создать набор персонала", - "Edit Recruitment Form": "Редактировать форму набора персонала", - "Update Recruitment": "Обновление набора персонала", + "If this application is for hiring of a specific role, select the role here.": "Если это заявление предназначено для найма определенной роли, выберите роль здесь.", + "Edit Application Form": "Редактировать форму заявки", + "Update Application Form": "Обновить форму заявки", "Notify Staff": "Уведомить персонал", "Messaging": "Обмен сообщениями", "Open Requests": "Открытые запросы", "Closed Requests": "Закрытые запросы", - "Manage Recruitment Forms": "Управление формами набора персонала", - "Recruitment": "Набор персонала", - "Delete Recruitment": "Удалить набор персонала", - ":title Intel - Recruitments": ":title Intel — набор персонала", + "Manage Application Forms": "Управление формами заявок", + "Application Form": "Форма заявки", + "Delete Application Form": "Удалить форму заявки", + ":title Intel - Application Form": ":title Intel — Форма заявки", ":title - Intel": ":title - Интел", - "This recruitment hiring for": "Этот набор нанимает для", + "This application hiring for": "Это приложение нанимает для", "Submission Cooldown": "Время восстановления подачи", "Allow only Player Linked Users": "Разрешить только пользователям, связанным с игроком", "Allow only Verified Users": "Разрешить только проверенным пользователям", @@ -520,16 +567,19 @@ "Enable Messaging Feature": "Включить функцию обмена сообщениями", "Notify staff on Events": "Уведомлять персонал о мероприятиях", "Applicant": "Заявитель", + "Application": "Приложение", + "Last Actor": "Последний актер", + "Last Comment": "Последний комментарий", "Updated At": "Обновлено в", - "Closed Request - Recruitments": "Закрытый запрос – подбор персонала", - "Open Requests - Recruitments": "Открытые запросы - подбор персонала", - "Closed Recruitment Submissions:": "Закрытые заявки на набор:", - "Open Recruitment Submissions:": "Открытый набор заявок:", - "All Recruitments": "Весь набор персонала", - ":user application for :recruitmenttitle #:index - Recruitments": "Заявка :user на :recruitmenttitle #:index - Набор персонала", + "Closed Request - Applications": "Закрытый запрос - Заявки", + "Open Requests - Applications": "Открытые запросы – заявки", + "Closed Requests:": "Закрытые запросы:", + "Open Requests:": "Открытые запросы:", + "All Applications": "Все приложения", + ":user application for :recruitmenttitle #:index - Applications": "Приложение :user для :recruitmenttitle #:index - Приложения", ":user application for :recruitmenttitle #:index": "приложение :user для :recruitmenttitle #:index", "Last Updated At": "Последнее обновление:", - "Submission Status": "Статус отправки", + "Request Status": "Статус запроса", "Reason": "Причина", "Marked :status By": "Отмечено :status автором", "Mark In-Progress": "Отметить в процессе", @@ -580,8 +630,8 @@ "Go back to Server List": "Вернуться к списку серверов", "Add Bungee Server": "Добавить Bungee-сервер", "Edit Bungee Server: :name": "Редактировать Bungee-сервер: :name", - "Minetrax only support adding one bungee server. This server will be used to show online players and server status. All sensitive information will be encrypted.": "Minetrax поддерживает добавление только одного банджи-сервера. Этот сервер будет использоваться для отображения онлайн-игроков и статуса сервера. Вся конфиденциальная информация будет зашифрована.", - "Please note Proxy servers don't need Minetrax.jar plugin. Only install them on actual servers like spigot, bukkit etc.": "Обратите внимание, что для прокси-серверов не требуется плагин Minetrax.jar. Устанавливайте их только на реальные серверы, такие как spigot, bukkit и т. д.", + "Add Bungee\/Velocity Server": "Добавить сервер банджи\/скорости", + "Edit Bungee\/Velocity Server: :name": "Редактировать сервер Банджи\/Велосити: :name", "Server Name": "Имя сервера", "Eg: My Bungee Server": "Например: Мой банджи-сервер", "Hostname": "Имя хоста", @@ -593,27 +643,26 @@ "Query Port": "Порт запроса", "Eg: 25575": "Например: 25575", "Webquery Port": "Порт веб-запроса", - "Eg: 25585": "Например: 25585", + "WebQuery port is a new port which MineTrax plugin will open for secure connection between server and web. Enter a port value which is available and can be open. Eg: 25569": "Порт WebQuery — это новый порт, который плагин MineTrax откроет для безопасного соединения между сервером и сетью. Введите значение порта, который доступен и может быть открыт. Например: 25569", "Server Version": "Версия сервера", "Select version..": "Выберите версию..", - "Edit Bungee Server": "Редактировать банджи-сервер", - "Add New Server": "Добавить новый сервер", + "Enable Server Intel \/ Analytics": "Включить сервер Intel\/Analytics", + "If enabled, server analytics data (performance metric, join activity etc) will be captured for this server via plugin.": "Если этот параметр включен, данные аналитики сервера (показатели производительности, активность присоединения и т. д.) будут собираться для этого сервера через плагин.", + "Enable Skin Change via Web (SkinsRestorer)": "Включить смену скина через Интернет (SkinsRestorer)", + "Allow user to change their linked players skin via web for this server. This will require SkinsRestorer plugin to be installed on the server.": "Разрешить пользователю изменять скин связанного игрока через Интернет для этого сервера. Для этого на сервере должен быть установлен плагин SkinsRestorer.", "Add Server": "Добавить сервер", + "Edit Server": "Изменить сервер", + "Add New Server": "Добавить новый сервер", "This name will help to identify this server. Eg: Survival, Skyblock, etc.": "Это имя поможет идентифицировать этот сервер. Например: Выживание, Скайблок и т. д.", "Publicly visible join address of the server. Eg: play.example.com": "Общедоступный адрес подключения к серверу. Например: play.example.com.", "Higher the weight, higher the priority. Eg: 1,3,10 etc. Can be left empty.": "Чем выше вес, тем выше приоритет. Например: 1,3,10 и т. д. Можно оставить пустым.", - "WebQuery port is a new port which MineTrax plugin will open for secure connection between server and web. Enter a port value which is available and can be open. Eg: 25569": "Порт WebQuery — это новый порт, который плагин MineTrax откроет для безопасного соединения между сервером и сетью. Введите значение порта, который доступен и может быть открыт. Например: 25569", "Select server type": "Выберите тип сервера", "Server Type": "Тип сервера", "Version": "Версия", - "Enable Server Intel \/ Analytics": "Включить сервер Intel\/Analytics", - "If enabled, server analytics data (performance metric, join activity etc) will be captured for this server via plugin.": "Если этот параметр включен, данные аналитики сервера (показатели производительности, активность присоединения и т. д.) будут собираться для этого сервера через плагин.", "Enable Player Intel \/ Analytics": "Включить данные игрока\/аналитику", "If enabled, player intel & statistics data will be captured for this server via plugin.": "Если эта опция включена, информация об игроках и статистические данные будут собираться для этого сервера через плагин.", "Enable In-Game Chat": "Включить внутриигровой чат", "Enable in-game chat for this server, which allow users to view & chat to in-game players from website.": "Включите внутриигровой чат для этого сервера, который позволит пользователям просматривать и общаться с внутриигровыми игроками с веб-сайта.", - "Enable Skin Change via Web (SkinsRestorer)": "Включить смену скина через Интернет (SkinsRestorer)", - "Allow user to change their linked players skin via web for this server. This will require SkinsRestorer plugin to be installed on the server.": "Разрешить пользователю изменять скин связанного игрока через Интернет для этого сервера. Для этого на сервере должен быть установлен плагин SkinsRestorer.", "Edit Server: :name": "Изменить сервер: :name", "Update Server": "Сервер обновлений", "IP:Port": "IP:порт", @@ -623,17 +672,12 @@ "Servers": "Серверы", "Sync Player Statistics": "Синхронизировать статистику игрока", "Add": "Добавлять", - "Server": "Сервер", "Add Proxy Server": "Добавить прокси-сервер", "WebQuery: :webquery_port": "Веб-запрос: :webquery_port", "not set": "не установлен", - "Server Online": "Сервер онлайн", - "Server Offline": "Сервер отключен", "Loading": "Загрузка", - "WebQuery Online": "Веб-запрос онлайн", - "WebQuery Offline": "Веб-запрос в автономном режиме", + "WebQuery": "Веб-запрос", "View Server Intel": "Посмотреть сервер Intel", - "Edit Server": "Изменить сервер", "Delete Server": "Удалить сервер", "Statistics": "Статистика", "Performance": "Производительность", @@ -873,10 +917,23 @@ "Enable user to link their players to account": "Разрешить пользователю привязывать своих игроков к учетной записи", "Max Players Per Account": "Максимальное количество игроков на аккаунт", "Number of players that can be linked to one account in website.": "Количество игроков, которых можно привязать к одному аккаунту на сайте.", - "Account Link Success Command": "Команда успешной привязки учетной записи", - "Use this to reward players when they link account: Eg: give {PLAYER} diamond 1": "Используйте это, чтобы вознаграждать игроков, когда они связывают учетную запись: например: дайте {PLAYER} алмаз 1.", - "Account Link Success Broadcast": "Уведомление об успешной привязке аккаунта", - "If set then this will be broadcast to server when player link is successful: Eg: {PLAYER} has successfully linked his account and won a ultra key.": "Если установлено, это будет отправлено на сервер, когда связь игрока будет успешной: Например: {PLAYER} успешно связал свою учетную запись и выиграл ультра ключ.", + "Account Link Success Commands": "Команды успешной привязки учетной записи", + "(runs when a player is linked to account)": "(запускается, когда игрок привязан к аккаунту)", + "Username of the player which is linked.": "Имя пользователя игрока, на которого есть ссылка.", + "Unique Id of the player which is linked.": "Уникальный идентификатор игрока, к которому привязана ссылка.", + "Run on servers": "Запуск на серверах", + "Run on first link only": "Запускать только по первой ссылке", + "This command should only run if given player is getting linked for first time. (Eg: This wont run if player get unlinked and then linked again)": "Эту команду следует запускать только в том случае, если данный игрок подключается впервые. (Например: это не будет работать, если игрок будет отключен, а затем снова подключен)", + "No commands on account link.": "Нет команд по ссылке на аккаунт.", + "Add New Link Command": "Добавить новую команду связи", + "Account Unlink Success Commands": "Команды успешного отключения учетной записи", + "(runs when a player is unlinked from account)": "(запускается, когда игрок отвязан от аккаунта)", + "Username of the player which is unlinked.": "Имя пользователя игрока, который не привязан.", + "Unique Id of the player which is unlinked.": "Уникальный идентификатор игрока, который не привязан.", + "Run on first unlink only": "Запускать только при первом разрыве связи", + "This command should only run if given player is getting unlinked for first time. (Eg: This wont run if player was linked and unlinked before)": "Эту команду следует запускать только в том случае, если данный игрок отключается впервые. (Например: это не будет работать, если игрок был связан и отключен ранее)", + "No commands on account unlink.": "Нет команд для отключения аккаунта.", + "Add New Unlink Command": "Добавить новую команду отмены связи", "Enable Player Rank Sync": "Включить синхронизацию рангов игроков", "Enable this if you want to sync your player rank from server instead of website calculated rank. you must create a rank for each group you have in server making sure rank shortname matches the name of your player group in server.": "Включите это, если вы хотите синхронизировать свой рейтинг игрока с сервера, а не рейтинг, рассчитанный веб-сайтом. вы должны создать ранг для каждой группы, которая у вас есть на сервере, убедившись, что краткое имя ранга соответствует имени вашей группы игроков на сервере.", "Rank Sync From Server": "Синхронизация рангов с сервера", @@ -987,6 +1044,7 @@ "Joined": "Присоединился", "Flags": "Флаги", "Users Administration": "Управление пользователями", + "Discord ID": "Идентификатор Дискорда", "Muted": "Приглушен", "Banned": "Запрещено", "View Profile": "Просмотреть профиль", @@ -1188,10 +1246,10 @@ "Someone liked my Post": "Кому-то понравился мой пост", "I am muted by Staff": "Я заглушен персоналом", "I am banned by Staff": "Я забанен Персоналом", - "Recruitment submission status changed": "Статус приема на работу изменен", - "New message in recruitment submission": "Новое сообщение в заявлении о приеме на работу", + "Application request status changed": "Статус заявки изменился", + "New message in application request": "Новое сообщение в запросе заявки", "For staff members": "Для сотрудников", - "Recruitment submission received": "Заявление о приеме на работу получено", + "Application request received": "Запрос на заявку получен", "Custom form submission received": "Отправка специальной формы получена", "Someone commented on News": "Кто-то прокомментировал новость", "Saved.": "Сохранено.", @@ -1213,25 +1271,25 @@ "Mark all as read": "отметить все как прочитанное", "No notifications to show.": "Нет уведомлений для показа.", "Last Updated": "Последнее обновление", - "Recruitments": "Набор персонала", + "Application Forms": "Анкеты", "View My Applications": "Просмотреть мои заявки", "Only for Verified Users": "Только для проверенных пользователей", "Only for Linked Account Users (Player linked)": "Только для пользователей связанной учетной записи (плеер связан)", "Apply": "Применять", "Application Closed!": "Приложение закрыто!", "Login or Register to Apply!": "Войдите или зарегистрируйтесь, чтобы подать заявку!", - "You need to be logged in to apply to this recruitment.": "Вам необходимо войти в систему, чтобы подать заявку на этот набор персонала.", + "You need to be logged in to apply to this application.": "Вам необходимо войти в систему, чтобы подать заявку на это приложение.", "Max Submissions Reached!": "Достигнуто максимальное количество заявок!", "You are on a Cooldown!": "Вы находитесь на перезарядке!", "Account Verification Required!": "Требуется верификация аккаунта!", "Account Linking Required!": "Требуется привязка аккаунта!", "You have already applied!": "Вы уже подали заявку!", - "View Application": "Посмотреть заявку", + "View Request": "Посмотреть запрос", "Already approved in past! Wanna apply again?": "Уже одобрено в прошлом! Хотите подать заявку еще раз?", "You may wanna check that before applying again.": "Возможно, вы захотите проверить это, прежде чем подавать заявку снова.", - "View Approved Application": "Просмотр одобренной заявки", - "My Recruitment Applications": "Мои заявки на подбор персонала", - "Your application for :recruitmenttitle #:index - Recruitments": "Ваша заявка на :recruitmenttitle #:index - Набор персонала", + "View Approved Request": "Посмотреть одобренный запрос", + "My Application Requests": "Мои заявки на участие", + "Your application request for :recruitmenttitle #:index - Applications": "Ваш запрос приложения для :recruitmenttitle #:index - Приложения", "Application for :recruitmenttitle #:index": "Приложение для :recruitmenttitle #:index", "Success! A staff will soon review your application. Please be patience.": "Успех! Сотрудники скоро рассмотрят вашу заявку. Пожалуйста, будьте терпеливы.", "Withdraw": "Отзывать", @@ -1246,7 +1304,11 @@ "You can link upto :count :player to your account! ( :left available )": "Вы можете привязать до :count :player к вашему аккаунту! ( :left доступно)", "player": "игрок", "players": "игроки", - "Initiate the process by joining the server and typing \/account-link in chat. A link will be generated, click on that link and your player will added to your account.": "Начните процесс, присоединившись к серверу и набрав \/account-link в чате. Будет сгенерирована ссылка, нажмите на нее, и ваш игрок будет добавлен в вашу учетную запись.", + "To link a player to your account, join server and type '\/link :otp' in your chat.": "Чтобы привязать игрока к своей учетной записи, присоединитесь к серверу и введите в чате «\/link :otp».", + "Copied!": "Скопировано!", + "This OTP will expire in :seconds seconds.": "Срок действия этого OTP истечет через :seconds секунду.", + "This OTP has expired. Refresh the page to get a new OTP.": "Срок действия этого OTP истек. Обновите страницу, чтобы получить новый OTP.", + "Click here to refresh.": "Нажмите здесь, чтобы обновить.", "No players linked to your account right now.": "Нет игроков, привязанных к вашей учетной записи прямо сейчас.", "Change Skin of this player.": "Изменить скин этого игрока.", "Are you sure you want to unlink this player from your account?": "Вы уверены, что хотите отсоединить этого игрока от своей учетной записи?", @@ -1377,11 +1439,9 @@ "Used Memory (MB)": "Используемая память (МБ)", "Server Status": "Состояние сервера", "Join": "Присоединиться", - "Copied!": "Скопировано!", "SETTINGS": "НАСТРОЙКИ", "Theme": "Тема", "Plugin": "Плагин", - "Player": "Игрок", "Navigation": "Навигация", "Delete this shout permanently?": "Удалить это сообщение навсегда?", "No shouts yet.": "Криков пока нет.", @@ -1433,5 +1493,18 @@ "You are muted by": "Вы заглушены", "Role Weight to View Submission": "Вес роли для просмотра отправленных материалов", "Slug": "Слизень", - "via Email": "по электронной почте" + "Minetrax only support adding one bungee server. This server will be used to show online players and server status. All sensitive information will be encrypted.": "Minetrax поддерживает добавление только одного банджи-сервера. Этот сервер будет использоваться для отображения онлайн-игроков и статуса сервера. Вся конфиденциальная информация будет зашифрована.", + "Please note Proxy servers don't need Minetrax.jar plugin. Only install them on actual servers like spigot, bukkit etc.": "Обратите внимание, что для прокси-серверов не требуется плагин Minetrax.jar. Устанавливайте их только на реальные серверы, такие как spigot, bukkit и т. д.", + "Eg: 25585": "Например: 25585", + "Edit Bungee Server": "Редактировать банджи-сервер", + "Server Online": "Сервер онлайн", + "Server Offline": "Сервер отключен", + "WebQuery Online": "Веб-запрос онлайн", + "WebQuery Offline": "Веб-запрос в автономном режиме", + "Account Link Success Command": "Команда успешной привязки учетной записи", + "Use this to reward players when they link account: Eg: give {PLAYER} diamond 1": "Используйте это, чтобы вознаграждать игроков, когда они связывают учетную запись: например: дайте {PLAYER} алмаз 1.", + "Account Link Success Broadcast": "Уведомление об успешной привязке аккаунта", + "If set then this will be broadcast to server when player link is successful: Eg: {PLAYER} has successfully linked his account and won a ultra key.": "Если установлено, это будет отправлено на сервер, когда связь игрока будет успешной: Например: {PLAYER} успешно связал свою учетную запись и выиграл ультра ключ.", + "via Email": "по электронной почте", + "Initiate the process by joining the server and typing \/account-link in chat. A link will be generated, click on that link and your player will added to your account.": "Начните процесс, присоединившись к серверу и набрав \/account-link в чате. Будет сгенерирована ссылка, нажмите на нее, и ваш игрок будет добавлен в вашу учетную запись." } \ No newline at end of file diff --git a/lang/sk.json b/lang/sk.json index 15646c49d..a14946215 100644 --- a/lang/sk.json +++ b/lang/sk.json @@ -1,16 +1,8 @@ { "Email\/Password authentication is disabled.": "Overenie e-mailom\/heslom je vypnuté.", "The provided password does not match your current password.": "Zadané heslo sa nezhoduje s vaším aktuálnym heslom.", - "Link expired or invalid!": "Platnosť odkazu vypršala alebo je neplatný!", - "Please request a fresh link and try again.": "Požiadajte o nový odkaz a skúste to znova.", - "Player not found in database!": "Hráč sa nenašiel v databáze!", - "Please wait for sometime for server to update its player database.": "Počkajte nejaký čas, kým server aktualizuje databázu hráčov.", - "Player already linked to a user!": "Hráč je už prepojený s používateľom!", - "If you own this user please unlink it from your another account or contact administrator.": "Ak ste vlastníkom tohto používateľa, zrušte jeho prepojenie s iným účtom alebo kontaktujte správcu.", - "User already have max :max_slots players linked!": "Používateľ už má prepojených maximálne :max_slots hráčov!", - "If you want to link this player please unlink a player.": "Ak chcete prepojiť tento prehrávač, zrušte prepojenie prehrávača.", - "Played linked successfully!": "Prehrané úspešne prepojené!", - "This player is now linked to your account.": "Tento hráč je teraz prepojený s vaším účtom.", + "Player unlinking disabled!": "Odpojenie prehrávača je zakázané!", + "Player unlinking is disabled by the administrator.": "Odpojenie prehrávača je zakázané správcom.", "Player not found!": "Hráč sa nenašiel!", "No player with that ID found linked to your account.": "S vaším účtom sa nenašiel žiadny hráč s týmto ID.", "Played unlinked successfully!": "Úspešne prehrané bez prepojenia!", @@ -22,6 +14,11 @@ "Badge updated successfully": "Odznak bol úspešne aktualizovaný", "Deleted Successfully": "Úspešne odstránené", "Badge has been deleted permanently": "Odznak bol natrvalo odstránený", + ":count Commands Scheduled!": ":count príkazy naplánované!", + "Commands has been scheduled for execution. Check the status in Command History.": "Spustenie príkazov bolo naplánované. Skontrolujte stav v histórii príkazov.", + "Deleted!": "Vymazané!", + "Retried!": "Znova vyskúšané!", + "Command has been queued for retrying! Refresh the page after few seconds to check the status.": "Príkaz bol zaradený do poradia na opakovanie! Po niekoľkých sekundách stránku obnovte a skontrolujte stav.", "Custom Form is created successfully": "Vlastný formulár bol úspešne vytvorený", "Custom Form updated successfully": "Vlastný formulár bol úspešne aktualizovaný", "Custom Form has been deleted permanently": "Vlastný formulár bol natrvalo odstránený", @@ -38,6 +35,8 @@ "Download has been created successfully": "Sťahovanie bolo úspešne vytvorené", "Download has been updated successfully": "Sťahovanie bolo úspešne aktualizované", "Download has been deleted permanently": "Stiahnuté súbory boli natrvalo odstránené", + "Retry Queued!": "Opakovať vo fronte!", + "Job has been queued for retrying!": "Úloha bola zaradená do poradia na opätovný pokus!", "Online Players": "Online hráči", "TPS": "TPS", "CPU Load (%)": "Zaťaženie procesora (%)", @@ -63,12 +62,12 @@ "Rank updated successfully": "Hodnotenie bolo úspešne aktualizované", "Rank has been deleted permanently": "Hodnotenie bolo natrvalo odstránené", "Rank Reset Successful": "Reset hodnotenia bol úspešný", - "Recruitment Form is created successfully": "Náborový formulár bol úspešne vytvorený", - "Recruitment Form updated successfully": "Náborový formulár bol úspešne aktualizovaný", - "Recruitment Form has been deleted permanently": "Náborový formulár bol natrvalo odstránený", - "Recruitment Submission deleted successfully": "Náborový príspevok bol úspešne odstránený", + "Application Form is created successfully": "Formulár žiadosti je úspešne vytvorený", + "Application Form updated successfully": "Formulár žiadosti bol úspešne aktualizovaný", + "Application Form has been deleted permanently": "Formulár žiadosti bol natrvalo odstránený", + "Request deleted successfully": "Žiadosť bola úspešne odstránená", "Action Successful": "Akcia úspešná", - "Recruitment Submission action has been completed successfully": "Akcia odoslania náboru bola úspešne dokončená", + "Request action has been completed successfully": "Akcia žiadosti bola úspešne dokončená", "Message Successfully": "Správa úspešne", "Message has been deleted successfully": "Správa bola úspešne odstránená", "New Role is created successfully": "Nová rola bola úspešne vytvorená", @@ -78,8 +77,7 @@ ":role cannot be deleted because there are users on this role.!": ":role nie je možné odstrániť, pretože v tejto úlohe sú používatelia.!", "Role has been deleted!": "Rola bola odstránená!", "New server added successfully": "Nový server bol úspešne pridaný", - "Bungee server added successfully": "Bungee server bol úspešne pridaný", - "Bungee server updated successfully": "Bungee server úspešne aktualizovaný", + "Proxy server added successfully": "Proxy server bol úspešne pridaný", "Server updated successfully": "Server bol úspešne aktualizovaný", "Server has been deleted permanently": "Server bol natrvalo odstránený", "Rescan Queued!": "Znova skenovať vo fronte!", @@ -117,10 +115,16 @@ "User deleted successfully": "Používateľ bol úspešne odstránený", "Player not found": "Prehrávač sa nenašiel", "Player already linked to a user": "Prehrávač je už prepojený s používateľom", - "Failed to start player session.": "Nepodarilo sa spustiť reláciu hráča.", - "Failed reporting player pvp kill.": "Nepodarilo sa nahlásiť zabitie pvp hráča.", + "Provided OTP is invalid or expired. Please try again.": "Ak je jednorazové heslo neplatné alebo jeho platnosť vypršala. Prosím skúste znova.", + "You already have max :max_slots players linked!": "Už máte prepojených maximálne :max_slots hráčov!", + "Player linked successfully": "Prehrávač bol úspešne prepojený", + "Player intel is disabled for this server.": "Informácie o prehrávači sú pre tento server zakázané.", + "Failed to start player session. :message": "Nepodarilo sa spustiť reláciu hráča. :message", + "Failed reporting player pvp kill: :message": "Neúspešné nahlásenie zabitia pvp hráča: :message", + "Failed reporting player death: :message": "Neúspešné nahlásenie úmrtia hráča: :message", "PlayerIntel event for :username reported successfully.": "Udalosť PlayerIntel pre :username bola úspešne nahlásená.", - "Failed to report Event data.": "Nepodarilo sa nahlásiť údaje o udalosti.", + "Failed to report Event data: :message": "Nepodarilo sa nahlásiť údaje o udalosti: :message", + "Server Intel failed to report: :message": "Server Intel nedokázal hlásiť: :message", "Submit Successful!": "Odoslať úspešne!", "Form has been submitted successfully.": "Formulár bol úspešne odoslaný.", "Comments are not allowed for this news": "Komentáre k tejto novinke nie sú povolené", @@ -139,7 +143,7 @@ "Applied Successfully!": "Úspešne uplatnené!", "Application has been submitted successfully.": "Žiadosť bola úspešne odoslaná.", "Withdraw Successful": "Výber bol úspešný", - "Recruitment Submission withdrawn successfully": "Náborový príspevok bol úspešne stiahnutý", + "Application Request withdrawn successfully": "Žiadosť bola úspešne stiahnutá", "Failed to ping server": "Server ping zlyhal", "Failed to query server": "Dopyt na server zlyhal", "Web Query Failed": "Webový dotaz zlyhal", @@ -164,20 +168,20 @@ "[Notification] :user commented on your post": "[Upozornenie] :user komentoval váš príspevok", "[Notification] Someone liked your post": "[Upozornenie] Váš príspevok sa niekomu páčil", "[Notification] :user liked your post": "[Upozornenie] :user sa páči váš príspevok", - "[Notification] New message received on a recruitment application.": "[Oznámenie] Nová správa prijatá v žiadosti o prijatie do zamestnania.", - ":causer sent new message on his application for :recruitment:": ":causer poslal novú správu vo svojej aplikácii pre :recruitment:", - "[Notification] Your application has a new message.": "[Upozornenie] Vaša aplikácia má novú správu.", - ":causer sent you a message on your application for :recruitment:": ":causer vám poslal správu o vašej aplikácii pre :recruitment:", - "[Notification] New recruitment application received.": "[Oznámenie] Bola prijatá nová žiadosť o prijatie do zamestnania.", - "[Notification] An application withdrawn by user.": "[Upozornenie] Aplikácia stiahnutá používateľom.", - ":applicant has withdrawn his application for :recruitment.": ":applicant stiahol svoju žiadosť o :recruitment.", - "[Notification] Your Application status has changed.": "[Upozornenie] Stav vašej žiadosti sa zmenil.", - ":causer has started processing your application for :recruitment.": ":causer začal spracovávať vašu žiadosť pre :recruitment.", - ":causer has put on-hold your application for :recruitment.": ":causer pozastavil vašu žiadosť o :recruitment.", - "[Notification] Congratulations! Your Application has been Approved.": "[Upozornenie] Gratulujeme! Vaša žiadosť bola schválená.", - ":causer has approved your application for :recruitment.": ":causer schválil vašu žiadosť o :recruitment.", - "[Notification] Sorry! Your Application has been Rejected.": "[Upozornenie] Prepáčte! Vaša žiadosť bola zamietnutá.", - ":causer has rejected your application for :recruitment.": ":causer zamietla vašu žiadosť o :recruitment.", + "[Notification] New message received on a application request.": "[Upozornenie] Nová správa prijatá na žiadosť aplikácie.", + ":causer sent new message on his application request for :recruitment:": ":causer poslal novú správu o svojej žiadosti o :recruitment:", + "[Notification] Your application request has a new message.": "[Upozornenie] Vaša žiadosť o aplikáciu obsahuje novú správu.", + ":causer sent you a message on your application request for :recruitment:": ":causer vám poslal správu o vašej žiadosti o :recruitment:", + "[Notification] New application request received.": "[Upozornenie] Bola prijatá nová žiadosť o aplikáciu.", + "[Notification] An application request withdrawn by user.": "[Upozornenie] Žiadosť aplikácie stiahnutá používateľom.", + ":applicant has withdrawn his application request for :recruitment.": ":applicant stiahol svoju žiadosť o :recruitment.", + "[Notification] Your Application request status has changed.": "[Upozornenie] Stav vašej žiadosti o aplikáciu sa zmenil.", + ":causer has started processing your application request for :recruitment.": ":causer spustilo spracovanie vašej žiadosti o :recruitment.", + ":causer has put on-hold your application request for :recruitment.": ":causer pozastavil vašu žiadosť o aplikáciu :recruitment.", + "[Notification] Congratulations! Your Application request has been Approved.": "[Upozornenie] Gratulujeme! Vaša žiadosť o prihlášku bola schválená.", + ":causer has approved your application request for :recruitment.": ":causer schválil vašu žiadosť o aplikáciu :recruitment.", + "[Notification] Sorry! Your Application request has been Rejected.": "[Upozornenie] Prepáčte! Vaša žiadosť o aplikáciu bola zamietnutá.", + ":causer has rejected your application request for :recruitment.": ":causer zamietol vašu žiadosť o aplikáciu :recruitment.", "[Notification] You are Banned by :user": "[Upozornenie] Máte zakázaný prístup :user", "Oh no! You are banned by a staff member and can no longer access our website. If you think this was a mistake please create an appeal.": "Ale nie! Zamestnanec vám zakázal prístup a už nemáte prístup na našu webovú stránku. Ak si myslíte, že ide o omyl, vytvorte odvolanie.", "Banned by: :user": "Zakázané: :user", @@ -185,8 +189,9 @@ "Oh no! You are muted by a staff member and can no longer send messages or chat in our website. If you think this was a mistake please create an appeal.": "Ale nie! Zamestnanec vás stlmí a už nemôžete posielať správy ani chatovať na našej webovej stránke. Ak si myslíte, že ide o omyl, vytvorte odvolanie.", "Muted by: :user": "Stlmené: :user", "Failed to upload skin to MineSkin. Please try again later": "Nepodarilo sa odovzdať vzhľad do MineSkin. Skúste neskôr prosím", - "Oh Jeez! Something went wrong. Please try again later.": "Oh, Ježiš! Niečo sa pokazilo. Skúste neskôr prosím.", "Error setting player skin. Please make sure provided skin is valid.": "Chyba pri nastavovaní vzhľadu prehrávača. Uistite sa, že poskytnutý vzhľad je platný.", + "Provided UUID is not valid.": "Poskytnuté UUID nie je platné.", + "WebQuery failed for unknown reasons. Please check minecraft server logs.": "WebQuery zlyhal z neznámych dôvodov. Skontrolujte denníky servera minecraft.", "Minecraft Servers & Players Tracking": "Sledovanie serverov a hráčov Minecraft", "Use Light Theme": "Použite Svetlý motív", "Use Dark Theme": "Použite temnú tému", @@ -197,6 +202,8 @@ "We use cookies to enhance your browsing experience. By continuing, you consent to our cookie policy.": "Na zlepšenie vášho zážitku z prehliadania používame cookies. Pokračovaním súhlasíte s našimi zásadami používania súborov cookie.", "I Understand": "Rozumiem", "Reset": "Resetovať", + "Filter by :column": "Filtrovať podľa :column", + "Clear": "jasný", "No data found": "Neboli nájdené žiadne dáta", "Previous": "Predchádzajúce", "Next": "Ďalšie", @@ -218,15 +225,15 @@ "Logout": "Odhlásiť sa", "An anonymous user": "Anonymný používateľ", "submitted a custom form.": "odoslal vlastný formulár.", - "applied for a recruitment.": "požiadal o nábor.", + "created a new application request.": "vytvoril novú žiadosť o aplikáciu.", " has withdrawn his application.": "stiahol svoju žiadosť.", " rejected your application.": "zamietol vašu žiadosť.", " approved your application.": "schválil vašu žiadosť.", " has put your application on-hold.": "pozastavil vašu žiadosť.", " has started processing your application.": "začal spracovávať vašu žiadosť.", " has changed status of your application": "zmenil stav vašej aplikácie", - "New message received on a recruitment application.": "Nová správa prijatá v náborovej žiadosti.", - "Your application has a new message from @:username": "Vaša aplikácia má novú správu od @:username", + "New message received on an application request.": "Nová správa prijatá na žiadosť aplikácie.", + "Your application request received a new message from @:username": "Vaša žiadosť o aplikáciu dostala novú správu od @:username", "Poll starting": "Spustenie ankety", "Poll closing": "Uzavretie ankety", "Are you sure you want to delete this Post?": "Naozaj chcete odstrániť tento príspevok?", @@ -242,6 +249,7 @@ "Staff Member": "Zamestnanec", "Muted User": "Stlmený používateľ", "Password": "heslo", + "Continue with empty password if you have no password.": "Ak heslo nemáte, pokračujte s prázdnym heslom.", "Cancel": "Zrušiť", "Whoops! Something went wrong.": "Hops! Niečo sa pokazilo.", "Leave Impersonation": "Opustiť odcudzenie identity", @@ -281,6 +289,37 @@ "Badge": "Odznak", "Badge Image": "Obrázok odznaku", "Delete Badge": "Odstrániť odznak", + "Run Command": "Spustite príkaz", + "Scope": "Rozsah", + "Global": "globálne", + "Run generic command": "Spustite všeobecný príkaz", + "Player": "Hráč", + "Run against players": "Bežte proti hráčom", + "Available Placeholders": "Dostupné zástupné symboly", + "Username of the player the command is running on.": "Používateľské meno hráča, na ktorom je príkaz spustený.", + "Unique Id of the player the command is running on.": "Jedinečné ID prehrávača, na ktorom je spustený príkaz.", + "Enter command to run...": "Zadajte príkaz na spustenie...", + "Servers to run on": "Servery na spustenie", + "Leave empty to run on all servers": "Ak chcete spustiť na všetkých serveroch, nechajte prázdne", + "Players to run on": "Hráči, na ktorých bežať", + "Select players": "Vyberte hráčov", + "Select players to run command on": "Vyberte hráčov, na ktorých chcete spustiť príkaz", + "Require player to be online": "Vyžadovať, aby bol hráč online", + "This command should only run if player is online on running server. If not online it will be queued to run when player comes online.": "Tento príkaz by sa mal spustiť iba vtedy, ak je hráč online na spustenom serveri. Ak nie je online, zaradí sa do frontu na spustenie, keď sa hráč pripojí online.", + "Command": "Príkaz", + "Server": "Server", + "Status": "Postavenie", + "Last Attempted": "Posledný pokus", + "Execute At": "Vykonať o", + "Tags": "Tagy", + "For Player": "Pre hráča", + "Output": "Výkon", + "Command History": "História príkazov", + "Retry All Failed": "Opakovať všetko zlyhalo", + "Attempts: :attempts\/:max_attempts": "Pokusy: :attempts\/:max_pokusov", + "none": "žiadny", + "Retry Command": "Opakovať príkaz", + "Delete Command": "Odstrániť príkaz", "Create Custom Form": "Vytvoriť vlastný formulár", "Title of Custom Form": "Názov vlastného formulára", "Eg: Contact Us": "Napr.: Kontaktujte nás", @@ -303,7 +342,6 @@ "Edit Custom Form": "Upraviť vlastný formulár", "Update Custom Form": "Aktualizovať vlastný formulár", "Title": "Názov", - "Status": "Postavenie", "Can Submit": "Môže odoslať", "Notify Staff on Submit": "Upozorniť zamestnancov na odoslanie", "Visible in Listing": "Viditeľné v zozname", @@ -323,7 +361,6 @@ "Max submission per user": "Maximálny počet odoslaných údajov na používateľa", "not applicable": "nepoužiteľné", "Minimum staff role weight to view submissions": "Minimálna váha roly zamestnancov na zobrazenie príspevkov", - "none": "žiadny", "Notify staff on new submission": "Informujte zamestnancov o novom podaní", "Updated": "Aktualizované", "Country": "Krajina", @@ -410,6 +447,17 @@ "External URL is protected from end users.": "Externá adresa URL je chránená pred koncovými používateľmi.", "Minimum Role Weight Required to Download": "Minimálna váha roly potrebná na stiahnutie", "Delete Download": "Odstrániť stiahnutie", + "UUID": "UUID", + "Job": "Job", + "Connection\/Queue": "Pripojenie\/Poradie", + "Exception": "Výnimka", + "Failed At": "Nepodarilo sa o", + "Failed Jobs": "Neúspešné úlohy", + "Retry All Jobs": "Znova vyskúšať všetky úlohy", + "Clear All Jobs": "Vymazať všetky úlohy", + "Attempts: :attempts": "Pokusy: :attempts", + "Retry Job": "Opakovať prácu", + "Delete Job": "Odstrániť úlohu", "Create News": "Vytvoriť správy", "News Category": "Kategória správ", "General": "generál", @@ -486,11 +534,11 @@ "Reset to Default Ranks": "Obnoviť predvolené hodnotenia", "Rank": "Poradie", "Delete Rank": "Odstrániť hodnotenie", - "Create Recruitment Form": "Vytvorte náborový formulár", - "Title of this Recruitment": "Názov tohto náboru", + "Create Application Form": "Vytvorte formulár žiadosti", + "Title of this Application": "Názov tejto aplikácie", "Eg: Apply to be a Staff Member": "Napr.: Požiadajte o miesto zamestnanca", - "Recruitment Slug": "Recruitment Slug", - "Recruitment Status": "Stav náboru", + "Application Slug for URL": "Application Slug pre URL", + "Application Status": "Stav aplikácie", "How many times a user can reapply after rejection. Leave empty for no limit.": "Koľkokrát môže používateľ znova podať žiadosť po zamietnutí. Nechajte prázdne bez obmedzenia.", "Submission Cooldown in Seconds": "Vychladnutie odoslania za pár sekúnd", "After how many seconds user can reapply this application. Leave empty for no cooldown.": "Po koľkých sekundách môže používateľ znova použiť túto aplikáciu. Nechajte prázdne bez ochladzovania.", @@ -499,20 +547,19 @@ "Leave empty to allow any staff with [vote recruitment_submissions] permission to vote on submissions.": "Nechajte prázdne, ak chcete umožniť všetkým zamestnancom s povolením [vote recruitment_submissions] hlasovať o príspevkoch.", "Min Staff Role Weight to Act on Submission": "Minimálna váha úlohy zamestnancov konať o odovzdaní", "Min staff role weight required to Approve\/Reject on submission. Leave empty to allow any staff with [acton recruitment_submissions] permission to act on submissions.": "Minimálna váha úlohy zamestnanca potrebná na schválenie\/odmietnutie pri odoslaní. Nechajte prázdne, ak chcete, aby všetci zamestnanci s povolením [acton recruitment_submissions] mohli konať na základe príspevkov.", - "If this recruitment is for hiring of a specific role, select the role here.": "Ak ide o nábor na konkrétnu pozíciu, vyberte rolu tu.", - "Create Recruitment": "Vytvorte nábor", - "Edit Recruitment Form": "Upravte náborový formulár", - "Update Recruitment": "Aktualizovať nábor", + "If this application is for hiring of a specific role, select the role here.": "Ak je táto aplikácia určená na prenájom konkrétnej role, vyberte rolu tu.", + "Edit Application Form": "Upraviť formulár žiadosti", + "Update Application Form": "Aktualizovať formulár žiadosti", "Notify Staff": "Informujte personál", "Messaging": "Správy", "Open Requests": "Otvoriť Žiadosti", "Closed Requests": "Uzavreté žiadosti", - "Manage Recruitment Forms": "Spravujte náborové formuláre", - "Recruitment": "Nábor", - "Delete Recruitment": "Odstrániť nábor", - ":title Intel - Recruitments": ":title Intel - Nábor", + "Manage Application Forms": "Spravujte formuláre žiadostí", + "Application Form": "Prihlasovací formulár", + "Delete Application Form": "Odstrániť formulár žiadosti", + ":title Intel - Application Form": ":title Intel – Formulár žiadosti", ":title - Intel": ":title - Intel", - "This recruitment hiring for": "Tento nábor zamestnancov pre", + "This application hiring for": "Prenájom tejto aplikácie pre", "Submission Cooldown": "Podanie Cooldown", "Allow only Player Linked Users": "Povoliť iba používateľov prepojených s prehrávačom", "Allow only Verified Users": "Povoliť iba overených používateľov", @@ -520,16 +567,19 @@ "Enable Messaging Feature": "Povoliť funkciu správ", "Notify staff on Events": "Upozornite personál na udalosti", "Applicant": "Žiadateľ", + "Application": "Aplikácia", + "Last Actor": "Posledný herec", + "Last Comment": "Posledný komentár", "Updated At": "Aktualizované o", - "Closed Request - Recruitments": "Uzavretá požiadavka – nábor", - "Open Requests - Recruitments": "Otvorené požiadavky – nábor", - "Closed Recruitment Submissions:": "Uzavreté náborové príspevky:", - "Open Recruitment Submissions:": "Otvoriť náborové príspevky:", - "All Recruitments": "Všetok nábor", - ":user application for :recruitmenttitle #:index - Recruitments": ":user aplikácia pre :recruitmenttitle #:index - Nábory", + "Closed Request - Applications": "Uzavretá požiadavka - aplikácie", + "Open Requests - Applications": "Otvoriť Žiadosti - Aplikácie", + "Closed Requests:": "Uzavreté žiadosti:", + "Open Requests:": "Otvorené žiadosti:", + "All Applications": "Všetky aplikácie", + ":user application for :recruitmenttitle #:index - Applications": ":user aplikácia pre :recruitmenttitle #:index - Aplikácie", ":user application for :recruitmenttitle #:index": ":user aplikácia pre :recruitmenttitle #:index", "Last Updated At": "Naposledy aktualizované o", - "Submission Status": "Stav podania", + "Request Status": "Stav žiadosti", "Reason": "Dôvod", "Marked :status By": "Označené :status By", "Mark In-Progress": "Označiť prebiehajúce", @@ -580,8 +630,8 @@ "Go back to Server List": "Vráťte sa do zoznamu serverov", "Add Bungee Server": "Pridať Bungee Server", "Edit Bungee Server: :name": "Upraviť server Bungee: :name", - "Minetrax only support adding one bungee server. This server will be used to show online players and server status. All sensitive information will be encrypted.": "Minetrax podporuje len pridanie jedného bungee servera. Tento server bude slúžiť na zobrazenie online hráčov a stavu servera. Všetky citlivé informácie budú šifrované.", - "Please note Proxy servers don't need Minetrax.jar plugin. Only install them on actual servers like spigot, bukkit etc.": "Upozorňujeme, že proxy servery nepotrebujú doplnok Minetrax.jar. Nainštalujte ich iba na skutočné servery, ako je spigot, bukkit atď.", + "Add Bungee\/Velocity Server": "Pridať Bungee\/Velocity Server", + "Edit Bungee\/Velocity Server: :name": "Upraviť server Bungee\/Velocity: :name", "Server Name": "Názov servera", "Eg: My Bungee Server": "Napr.: Môj Bungee Server", "Hostname": "Meno hosťa", @@ -593,27 +643,26 @@ "Query Port": "Port dotazu", "Eg: 25575": "Napr.: 25575", "Webquery Port": "Port webového dopytu", - "Eg: 25585": "Napr.: 25585", + "WebQuery port is a new port which MineTrax plugin will open for secure connection between server and web. Enter a port value which is available and can be open. Eg: 25569": "Port WebQuery je nový port, ktorý otvorí doplnok MineTrax pre bezpečné spojenie medzi serverom a webom. Zadajte hodnotu portu, ktorá je dostupná a môže byť otvorená. Napr.: 25569", "Server Version": "Verzia servera", "Select version..": "Vyberte verziu..", - "Edit Bungee Server": "Upraviť server Bungee", - "Add New Server": "Pridať nový server", + "Enable Server Intel \/ Analytics": "Povoliť server Intel \/ Analytics", + "If enabled, server analytics data (performance metric, join activity etc) will be captured for this server via plugin.": "Ak je povolené, analytické údaje servera (metrika výkonu, aktivita pripojenia atď.) sa budú zaznamenávať pre tento server prostredníctvom doplnku.", + "Enable Skin Change via Web (SkinsRestorer)": "Povoliť zmenu vzhľadu cez web (SkinsRestorer)", + "Allow user to change their linked players skin via web for this server. This will require SkinsRestorer plugin to be installed on the server.": "Umožniť používateľovi zmeniť vzhľad prepojených hráčov prostredníctvom webu pre tento server. To bude vyžadovať, aby bol na serveri nainštalovaný doplnok SkinsRestorer.", "Add Server": "Pridať server", + "Edit Server": "Upraviť server", + "Add New Server": "Pridať nový server", "This name will help to identify this server. Eg: Survival, Skyblock, etc.": "Tento názov pomôže identifikovať tento server. Napr.: Survival, Skyblock atď.", "Publicly visible join address of the server. Eg: play.example.com": "Verejne viditeľná adresa pripojenia na server. Napr.: play.example.com", "Higher the weight, higher the priority. Eg: 1,3,10 etc. Can be left empty.": "Čím vyššia hmotnosť, tým vyššia priorita. Napr.: 1,3,10 atď. Môže zostať prázdne.", - "WebQuery port is a new port which MineTrax plugin will open for secure connection between server and web. Enter a port value which is available and can be open. Eg: 25569": "Port WebQuery je nový port, ktorý otvorí doplnok MineTrax pre bezpečné spojenie medzi serverom a webom. Zadajte hodnotu portu, ktorá je dostupná a môže byť otvorená. Napr.: 25569", "Select server type": "Vyberte typ servera", "Server Type": "Typ servera", "Version": "Verzia", - "Enable Server Intel \/ Analytics": "Povoliť server Intel \/ Analytics", - "If enabled, server analytics data (performance metric, join activity etc) will be captured for this server via plugin.": "Ak je povolené, analytické údaje servera (metrika výkonu, aktivita pripojenia atď.) sa budú zaznamenávať pre tento server prostredníctvom doplnku.", "Enable Player Intel \/ Analytics": "Povoliť Player Intel \/ Analytics", "If enabled, player intel & statistics data will be captured for this server via plugin.": "Ak je povolené, informácie o hráčovi a štatistické údaje sa budú zaznamenávať pre tento server prostredníctvom doplnku.", "Enable In-Game Chat": "Povoliť chat v hre", "Enable in-game chat for this server, which allow users to view & chat to in-game players from website.": "Povoliť pre tento server chat v hre, ktorý používateľom umožňuje prezerať si hru a chatovať s hráčmi v hre z webovej stránky.", - "Enable Skin Change via Web (SkinsRestorer)": "Povoliť zmenu vzhľadu cez web (SkinsRestorer)", - "Allow user to change their linked players skin via web for this server. This will require SkinsRestorer plugin to be installed on the server.": "Umožniť používateľovi zmeniť vzhľad prepojených hráčov prostredníctvom webu pre tento server. To bude vyžadovať, aby bol na serveri nainštalovaný doplnok SkinsRestorer.", "Edit Server: :name": "Upraviť server: :name", "Update Server": "Aktualizovať server", "IP:Port": "IP: Port", @@ -623,17 +672,12 @@ "Servers": "Servery", "Sync Player Statistics": "Synchronizovať štatistiku prehrávača", "Add": "Pridať", - "Server": "Server", "Add Proxy Server": "Pridať proxy server", "WebQuery: :webquery_port": "WebQuery: :webquery_port", "not set": "nie je nastavené", - "Server Online": "Server online", - "Server Offline": "Server je offline", "Loading": "Načítava", - "WebQuery Online": "WebQuery Online", - "WebQuery Offline": "WebQuery offline", + "WebQuery": "WebQuery", "View Server Intel": "Zobraziť Server Intel", - "Edit Server": "Upraviť server", "Delete Server": "Odstrániť server", "Statistics": "Štatistiky", "Performance": "Výkon", @@ -873,10 +917,23 @@ "Enable user to link their players to account": "Umožnite používateľovi prepojiť svojich hráčov s účtom", "Max Players Per Account": "Maximálny počet hráčov na účet", "Number of players that can be linked to one account in website.": "Počet hráčov, ktorí môžu byť prepojení s jedným účtom na webovej stránke.", - "Account Link Success Command": "Úspešný príkaz prepojenia účtu", - "Use this to reward players when they link account: Eg: give {PLAYER} diamond 1": "Použite toto na odmeňovanie hráčov, keď prepoja účet: Napr.: dajte {PLAYER} diamant 1", - "Account Link Success Broadcast": "Vysielanie úspešného prepojenia účtu", - "If set then this will be broadcast to server when player link is successful: Eg: {PLAYER} has successfully linked his account and won a ultra key.": "Ak je nastavené, potom sa to bude vysielať na server, keď bude prepojenie hráča úspešné: Napr.: {PLAYER} úspešne prepojil svoj účet a vyhral ultra kľúč.", + "Account Link Success Commands": "Úspešné príkazy prepojenia účtu", + "(runs when a player is linked to account)": "(spustí sa, keď je hráč prepojený s účtom)", + "Username of the player which is linked.": "Používateľské meno hráča, ktorý je prepojený.", + "Unique Id of the player which is linked.": "Jedinečné ID prehrávača, ktorý je prepojený.", + "Run on servers": "Spustiť na serveroch", + "Run on first link only": "Spustiť iba na prvom odkaze", + "This command should only run if given player is getting linked for first time. (Eg: This wont run if player get unlinked and then linked again)": "Tento príkaz by sa mal spustiť iba vtedy, ak sa daný hráč pripája prvýkrát. (Napr.: Toto sa nespustí, ak sa hráč odpojí a potom znova pripojí)", + "No commands on account link.": "Žiadne príkazy na prepojenie účtu.", + "Add New Link Command": "Príkaz Pridať nový odkaz", + "Account Unlink Success Commands": "Úspešné príkazy na odpojenie účtu", + "(runs when a player is unlinked from account)": "(spustí sa, keď je hráč odpojený od účtu)", + "Username of the player which is unlinked.": "Používateľské meno hráča, ktorý je odpojený.", + "Unique Id of the player which is unlinked.": "Jedinečné ID prehrávača, ktorý je odpojený.", + "Run on first unlink only": "Spustiť iba pri prvom odpojení", + "This command should only run if given player is getting unlinked for first time. (Eg: This wont run if player was linked and unlinked before)": "Tento príkaz by sa mal spustiť iba vtedy, ak sa daný prehrávač prvýkrát odpojí. (Napr.: Toto sa nespustí, ak bol prehrávač predtým pripojený a odpojený)", + "No commands on account unlink.": "Žiadne príkazy na odpojenie účtu.", + "Add New Unlink Command": "Pridať nový príkaz na odpojenie", "Enable Player Rank Sync": "Povoliť synchronizáciu hodnotenia hráčov", "Enable this if you want to sync your player rank from server instead of website calculated rank. you must create a rank for each group you have in server making sure rank shortname matches the name of your player group in server.": "Povoľte túto možnosť, ak chcete synchronizovať hodnotenie hráča zo servera namiesto hodnotenia vypočítaného na webovej stránke. musíte vytvoriť hodnosť pre každú skupinu, ktorú máte na serveri, pričom sa uistite, že skratka hodnosti zodpovedá názvu vašej hráčskej skupiny na serveri.", "Rank Sync From Server": "Hodnotenie synchronizácie zo servera", @@ -987,6 +1044,7 @@ "Joined": "Pripojené", "Flags": "Vlajky", "Users Administration": "Správa používateľov", + "Discord ID": "ID nezhody", "Muted": "Stlmené", "Banned": "Zakázané", "View Profile": "Prezrieť profil", @@ -1188,10 +1246,10 @@ "Someone liked my Post": "Môj príspevok sa niekomu páčil", "I am muted by Staff": "Stlmí ma personál", "I am banned by Staff": "Som zakázaný personálom", - "Recruitment submission status changed": "Stav odoslania náboru sa zmenil", - "New message in recruitment submission": "Nová správa v podaní náboru", + "Application request status changed": "Stav žiadosti o aplikáciu sa zmenil", + "New message in application request": "Nová správa v žiadosti aplikácie", "For staff members": "Pre zamestnancov", - "Recruitment submission received": "Podanie náboru bolo prijaté", + "Application request received": "Žiadosť o prihlášku bola prijatá", "Custom form submission received": "Odoslanie vlastného formulára bolo prijaté", "Someone commented on News": "Niekto komentoval Správy", "Saved.": "Uložené.", @@ -1213,25 +1271,25 @@ "Mark all as read": "označiť všetko ako prečítané", "No notifications to show.": "Žiadne upozornenia na zobrazenie.", "Last Updated": "Naposledy aktualizovaný", - "Recruitments": "Nábory", + "Application Forms": "Prihlasovacie formuláre", "View My Applications": "Zobraziť Moje aplikácie", "Only for Verified Users": "Len pre overených používateľov", "Only for Linked Account Users (Player linked)": "Len pre používateľov prepojeného účtu (prepojený s prehrávačom)", "Apply": "Použiť", "Application Closed!": "Aplikácia uzavretá!", "Login or Register to Apply!": "Prihláste sa alebo sa zaregistrujte a prihláste sa!", - "You need to be logged in to apply to this recruitment.": "Ak sa chcete prihlásiť do tohto náboru, musíte byť prihlásený.", + "You need to be logged in to apply to this application.": "Ak sa chcete prihlásiť do tejto aplikácie, musíte sa prihlásiť.", "Max Submissions Reached!": "Dosiahli ste maximálny počet odoslaných príspevkov!", "You are on a Cooldown!": "Ste na Cooldown!", "Account Verification Required!": "Vyžaduje sa overenie účtu!", "Account Linking Required!": "Vyžaduje sa prepojenie účtu!", "You have already applied!": "Už ste podali žiadosť!", - "View Application": "Zobraziť aplikáciu", + "View Request": "Zobraziť žiadosť", "Already approved in past! Wanna apply again?": "Už schválené v minulosti! Chcete sa znova prihlásiť?", "You may wanna check that before applying again.": "Možno to budete chcieť skontrolovať pred opätovným podaním žiadosti.", - "View Approved Application": "Zobraziť schválenú aplikáciu", - "My Recruitment Applications": "Moje náborové aplikácie", - "Your application for :recruitmenttitle #:index - Recruitments": "Vaša žiadosť o :recruitmenttitle #:index - Nábory", + "View Approved Request": "Zobraziť schválenú žiadosť", + "My Application Requests": "Moje žiadosti o aplikáciu", + "Your application request for :recruitmenttitle #:index - Applications": "Vaša žiadosť o aplikáciu :recruitmenttitle #:index - Aplikácie", "Application for :recruitmenttitle #:index": "Žiadosť o :recruitmenttitle #:index", "Success! A staff will soon review your application. Please be patience.": "Úspech! Personál čoskoro posúdi vašu žiadosť. Buďte trpezliví.", "Withdraw": "Odstúpiť", @@ -1246,7 +1304,11 @@ "You can link upto :count :player to your account! ( :left available )": "K svojmu účtu môžete pripojiť až :count :player! ( :left k dispozícii)", "player": "hráč", "players": "hráčov", - "Initiate the process by joining the server and typing \/account-link in chat. A link will be generated, click on that link and your player will added to your account.": "Začnite proces pripojením sa k serveru a zadaním \/account-link v chate. Vygeneruje sa odkaz, kliknite naň a váš hráč sa pridá do vášho účtu.", + "To link a player to your account, join server and type '\/link :otp' in your chat.": "Ak chcete prepojiť hráča s vaším účtom, pripojte sa k serveru a do chatu napíšte „\/link :otp“.", + "Copied!": "Skopírované!", + "This OTP will expire in :seconds seconds.": "Toto jednorazové heslo vyprší o 1 sekundu.", + "This OTP has expired. Refresh the page to get a new OTP.": "Platnosť tohto jednorazového hesla vypršala. Obnovením stránky získate nové jednorazové heslo.", + "Click here to refresh.": "Kliknutím sem obnovíte.", "No players linked to your account right now.": "K vášmu účtu sú momentálne pripojení žiadni hráči.", "Change Skin of this player.": "Zmeňte vzhľad tohto hráča.", "Are you sure you want to unlink this player from your account?": "Naozaj chcete odpojiť tohto hráča od svojho účtu?", @@ -1377,11 +1439,9 @@ "Used Memory (MB)": "Použitá pamäť (MB)", "Server Status": "Stav servera", "Join": "Pripojte sa", - "Copied!": "Skopírované!", "SETTINGS": "NASTAVENIE", "Theme": "Téma", "Plugin": "Zapojiť", - "Player": "Hráč", "Navigation": "Navigácia", "Delete this shout permanently?": "Chcete natrvalo odstrániť tento pokrik?", "No shouts yet.": "Zatiaľ žiadne výkriky.", @@ -1433,5 +1493,18 @@ "You are muted by": "Máte vypnutý zvuk od", "Role Weight to View Submission": "Váha role na zobrazenie odoslania", "Slug": "Slimák", - "via Email": "prostredníctvom e-mailu" + "Minetrax only support adding one bungee server. This server will be used to show online players and server status. All sensitive information will be encrypted.": "Minetrax podporuje len pridanie jedného bungee servera. Tento server bude slúžiť na zobrazenie online hráčov a stavu servera. Všetky citlivé informácie budú šifrované.", + "Please note Proxy servers don't need Minetrax.jar plugin. Only install them on actual servers like spigot, bukkit etc.": "Upozorňujeme, že proxy servery nepotrebujú doplnok Minetrax.jar. Nainštalujte ich iba na skutočné servery, ako je spigot, bukkit atď.", + "Eg: 25585": "Napr.: 25585", + "Edit Bungee Server": "Upraviť server Bungee", + "Server Online": "Server online", + "Server Offline": "Server je offline", + "WebQuery Online": "WebQuery Online", + "WebQuery Offline": "WebQuery offline", + "Account Link Success Command": "Úspešný príkaz prepojenia účtu", + "Use this to reward players when they link account: Eg: give {PLAYER} diamond 1": "Použite toto na odmeňovanie hráčov, keď prepoja účet: Napr.: dajte {PLAYER} diamant 1", + "Account Link Success Broadcast": "Vysielanie úspešného prepojenia účtu", + "If set then this will be broadcast to server when player link is successful: Eg: {PLAYER} has successfully linked his account and won a ultra key.": "Ak je nastavené, potom sa to bude vysielať na server, keď bude prepojenie hráča úspešné: Napr.: {PLAYER} úspešne prepojil svoj účet a vyhral ultra kľúč.", + "via Email": "prostredníctvom e-mailu", + "Initiate the process by joining the server and typing \/account-link in chat. A link will be generated, click on that link and your player will added to your account.": "Začnite proces pripojením sa k serveru a zadaním \/account-link v chate. Vygeneruje sa odkaz, kliknite naň a váš hráč sa pridá do vášho účtu." } \ No newline at end of file diff --git a/lang/uk.json b/lang/uk.json index 7de40e0e1..adb53e9d0 100644 --- a/lang/uk.json +++ b/lang/uk.json @@ -1,16 +1,8 @@ { "Email\/Password authentication is disabled.": "Автентифікація електронною поштою\/паролем вимкнена.", "The provided password does not match your current password.": "Наданий пароль не збігається з вашим поточним паролем.", - "Link expired or invalid!": "Посилання застаріле або недійсне!", - "Please request a fresh link and try again.": "Надішліть запит на нове посилання та повторіть спробу.", - "Player not found in database!": "Гравець не знайдений в базі!", - "Please wait for sometime for server to update its player database.": "Зачекайте деякий час, доки сервер оновить свою базу даних про гравців.", - "Player already linked to a user!": "Гравець уже прив\\'язаний до користувача!", - "If you own this user please unlink it from your another account or contact administrator.": "Якщо ви є власником цього користувача, від’єднайте його від іншого облікового запису або зверніться до адміністратора.", - "User already have max :max_slots players linked!": "У користувача вже є максимум :max_slots приєднаних гравців!", - "If you want to link this player please unlink a player.": "Якщо ви хочете пов’язати цього гравця, від’єднайте гравця.", - "Played linked successfully!": "Зіграно пов’язано успішно!", - "This player is now linked to your account.": "Тепер цей гравець прив’язаний до вашого облікового запису.", + "Player unlinking disabled!": "Від’єднання гравця вимкнено!", + "Player unlinking is disabled by the administrator.": "Відв\\'язування гравця відключено адміністратором.", "Player not found!": "Гравець не знайдений!", "No player with that ID found linked to your account.": "Не знайдено жодного гравця з таким ідентифікатором, пов’язаного з вашим обліковим записом.", "Played unlinked successfully!": "Успішно зіграно без зв’язку!", @@ -22,6 +14,11 @@ "Badge updated successfully": "Значок успішно оновлено", "Deleted Successfully": "Успішно видалено", "Badge has been deleted permanently": "Бейдж видалено остаточно", + ":count Commands Scheduled!": ":count Команди заплановано!", + "Commands has been scheduled for execution. Check the status in Command History.": "Команди заплановано для виконання. Перевірте статус в історії команд.", + "Deleted!": "Видалено!", + "Retried!": "Повторна спроба!", + "Command has been queued for retrying! Refresh the page after few seconds to check the status.": "Команда поставлена ​​в чергу для повторної спроби! Оновіть сторінку через кілька секунд, щоб перевірити статус.", "Custom Form is created successfully": "Спеціальну форму створено успішно", "Custom Form updated successfully": "Спеціальну форму успішно оновлено", "Custom Form has been deleted permanently": "Спеціальну форму видалено остаточно", @@ -38,6 +35,8 @@ "Download has been created successfully": "Завантаження успішно створено", "Download has been updated successfully": "Завантаження успішно оновлено", "Download has been deleted permanently": "Завантаження видалено назавжди", + "Retry Queued!": "Повторна спроба в черзі!", + "Job has been queued for retrying!": "Завдання поставлено в чергу для повторної спроби!", "Online Players": "Онлайн гравці", "TPS": "TPS", "CPU Load (%)": "Завантаження ЦП (%)", @@ -63,12 +62,12 @@ "Rank updated successfully": "Рейтинг успішно оновлено", "Rank has been deleted permanently": "Рейтинг видалено назавжди", "Rank Reset Successful": "Ранг скинуто успішно", - "Recruitment Form is created successfully": "Форма прийому на роботу створена успішно", - "Recruitment Form updated successfully": "Форму прийому на роботу успішно оновлено", - "Recruitment Form has been deleted permanently": "Форма прийому на роботу видалена назавжди", - "Recruitment Submission deleted successfully": "Подання на роботу успішно видалено", + "Application Form is created successfully": "Форма заявки створена успішно", + "Application Form updated successfully": "Форму заявки успішно оновлено", + "Application Form has been deleted permanently": "Форма заявки видалена назавжди", + "Request deleted successfully": "Запит успішно видалено", "Action Successful": "Дія успішна", - "Recruitment Submission action has been completed successfully": "Дія подання вербування успішно завершена", + "Request action has been completed successfully": "Дія запиту успішно виконана", "Message Successfully": "Повідомлення успішно", "Message has been deleted successfully": "Повідомлення успішно видалено", "New Role is created successfully": "Нову роль створено успішно", @@ -78,8 +77,7 @@ ":role cannot be deleted because there are users on this role.!": ":role неможливо видалити, оскільки є користувачі з цією роллю.!", "Role has been deleted!": "Роль видалено!", "New server added successfully": "Новий сервер успішно додано", - "Bungee server added successfully": "Сервер Bungee успішно додано", - "Bungee server updated successfully": "Сервер Bungee успішно оновлено", + "Proxy server added successfully": "Проксі-сервер успішно додано", "Server updated successfully": "Сервер успішно оновлено", "Server has been deleted permanently": "Сервер видалено назавжди", "Rescan Queued!": "Повторне сканування в черзі!", @@ -117,10 +115,16 @@ "User deleted successfully": "Користувача успішно видалено", "Player not found": "Гравець не знайдений", "Player already linked to a user": "Програвач уже пов\\'язаний з користувачем", - "Failed to start player session.": "Не вдалося розпочати сеанс гравця.", - "Failed reporting player pvp kill.": "Не вдалося повідомити про вбивство гравця в pvp.", + "Provided OTP is invalid or expired. Please try again.": "Наданий OTP недійсний або термін дії минув. Будь ласка спробуйте ще раз.", + "You already have max :max_slots players linked!": "У вас уже є максимум :max_slots пов’язаних гравців!", + "Player linked successfully": "Програвач підключено успішно", + "Player intel is disabled for this server.": "Інтелект програвача вимкнено для цього сервера.", + "Failed to start player session. :message": "Не вдалося розпочати сеанс гравця. :message", + "Failed reporting player pvp kill: :message": "Не вдалося повідомити про вбивство гравця pvp: :message", + "Failed reporting player death: :message": "Не вдалося повідомити про смерть гравця: :message", "PlayerIntel event for :username reported successfully.": "Про подію PlayerIntel для :username успішно повідомлено.", - "Failed to report Event data.": "Не вдалося повідомити дані про подію.", + "Failed to report Event data: :message": "Не вдалося повідомити дані про подію: :message", + "Server Intel failed to report: :message": "Сервер Intel не зміг повідомити: :message", "Submit Successful!": "Надіслано успішно!", "Form has been submitted successfully.": "Форму успішно надіслано.", "Comments are not allowed for this news": "Коментарі до цієї новини заборонені", @@ -139,7 +143,7 @@ "Applied Successfully!": "Успішно подали заявку!", "Application has been submitted successfully.": "Заявка успішно подана.", "Withdraw Successful": "Вилучено успішно", - "Recruitment Submission withdrawn successfully": "Подання на роботу успішно відкликано", + "Application Request withdrawn successfully": "Запит на заявку успішно відкликано", "Failed to ping server": "Не вдалося перевірити сервер", "Failed to query server": "Не вдалося зробити запит серверу", "Web Query Failed": "Помилка веб-запиту", @@ -164,20 +168,20 @@ "[Notification] :user commented on your post": "[Сповіщення] :user прокоментували вашу публікацію", "[Notification] Someone liked your post": "[Повідомлення] Комусь сподобався ваш допис", "[Notification] :user liked your post": "[Сповіщення] :user сподобався ваш допис", - "[Notification] New message received on a recruitment application.": "[Повідомлення] Отримано нове повідомлення щодо заявки на прийом на роботу.", - ":causer sent new message on his application for :recruitment:": ":causer надіслав нове повідомлення у своїй заявці на :recruitment:", - "[Notification] Your application has a new message.": "[Сповіщення] Ваша програма має нове повідомлення.", - ":causer sent you a message on your application for :recruitment:": ":causer надіслав вам повідомлення щодо вашої заявки на :recruitment:", - "[Notification] New recruitment application received.": "[Повідомлення] Отримано нову заявку на прийом на роботу.", - "[Notification] An application withdrawn by user.": "[Повідомлення] Користувач відкликав заявку.", - ":applicant has withdrawn his application for :recruitment.": ":applicant відкликав заявку на :recruitment.", - "[Notification] Your Application status has changed.": "[Повідомлення] Статус вашої заявки змінився.", - ":causer has started processing your application for :recruitment.": ":causer розпочав обробку вашої заявки на :recruitment.", - ":causer has put on-hold your application for :recruitment.": ":causer призупинив вашу заявку на :recruitment.", - "[Notification] Congratulations! Your Application has been Approved.": "[Повідомлення] Вітаємо! Вашу заявку схвалено.", - ":causer has approved your application for :recruitment.": ":causer схвалив вашу заявку на :recruitment.", - "[Notification] Sorry! Your Application has been Rejected.": "[Повідомлення] Вибачте! Вашу заявку відхилено.", - ":causer has rejected your application for :recruitment.": ":causer відхилив вашу заявку на :recruitment.", + "[Notification] New message received on a application request.": "[Сповіщення] Отримано нове повідомлення на запит програми.", + ":causer sent new message on his application request for :recruitment:": ":causer надіслав нове повідомлення щодо свого запиту програми для :recruitment:", + "[Notification] Your application request has a new message.": "[Сповіщення] Ваш запит заявки має нове повідомлення.", + ":causer sent you a message on your application request for :recruitment:": ":causer надіслав вам повідомлення щодо вашого запиту заявки на :recruitment:", + "[Notification] New application request received.": "[Повідомлення] Отримано запит на новий додаток.", + "[Notification] An application request withdrawn by user.": "[Сповіщення] Користувач відкликав запит програми.", + ":applicant has withdrawn his application request for :recruitment.": ":applicant відкликав заявку на :recruitment.", + "[Notification] Your Application request status has changed.": "[Сповіщення] Статус вашого запиту програми змінився.", + ":causer has started processing your application request for :recruitment.": ":causer розпочав обробку вашого запиту на заявку на :recruitment.", + ":causer has put on-hold your application request for :recruitment.": ":causer призупинив ваш запит на заявку на :recruitment.", + "[Notification] Congratulations! Your Application request has been Approved.": "[Повідомлення] Вітаємо! Ваш запит на заявку схвалено.", + ":causer has approved your application request for :recruitment.": ":causer схвалив вашу заявку на :recruitment.", + "[Notification] Sorry! Your Application request has been Rejected.": "[Повідомлення] Вибачте! Ваш запит на заявку відхилено.", + ":causer has rejected your application request for :recruitment.": ":causer відхилив ваш запит на заявку на :recruitment.", "[Notification] You are Banned by :user": "[Повідомлення] Ви забанені :user", "Oh no! You are banned by a staff member and can no longer access our website. If you think this was a mistake please create an appeal.": "О ні! Співробітник заблокував вас і більше не має доступу до нашого веб-сайту. Якщо ви вважаєте, що це була помилка, створіть апеляцію.", "Banned by: :user": "Забанений: :user", @@ -185,8 +189,9 @@ "Oh no! You are muted by a staff member and can no longer send messages or chat in our website. If you think this was a mistake please create an appeal.": "О ні! Співробітник вимкнув ваш звук, і ви більше не можете надсилати повідомлення чи спілкуватися в чаті на нашому веб-сайті. Якщо ви вважаєте, що це була помилка, створіть апеляцію.", "Muted by: :user": "Вимкнено: :user", "Failed to upload skin to MineSkin. Please try again later": "Не вдалося завантажити скін на MineSkin. Будь-ласка спробуйте пізніше", - "Oh Jeez! Something went wrong. Please try again later.": "Боже! Щось пішло не так. Будь-ласка спробуйте пізніше.", "Error setting player skin. Please make sure provided skin is valid.": "Помилка налаштування скіна гравця. Переконайтеся, що наданий скін дійсний.", + "Provided UUID is not valid.": "Наданий UUID недійсний.", + "WebQuery failed for unknown reasons. Please check minecraft server logs.": "Збій веб-запиту з невідомих причин. Будь ласка, перевірте журнали сервера Minecraft.", "Minecraft Servers & Players Tracking": "Відстеження серверів і гравців Minecraft", "Use Light Theme": "Використовуйте світлу тему", "Use Dark Theme": "Використовуйте темну тему", @@ -197,6 +202,8 @@ "We use cookies to enhance your browsing experience. By continuing, you consent to our cookie policy.": "Ми використовуємо файли cookie, щоб покращити ваш досвід перегляду. Продовжуючи, ви погоджуєтеся з нашою політикою використання файлів cookie.", "I Understand": "Я розумію", "Reset": "Скинути", + "Filter by :column": "Фільтрувати за :column", + "Clear": "ясно", "No data found": "Даних не знайдено", "Previous": "Попередній", "Next": "Далі", @@ -218,15 +225,15 @@ "Logout": "Вийти", "An anonymous user": "Анонімний користувач", "submitted a custom form.": "подав спеціальну форму.", - "applied for a recruitment.": "подав заяву на прийом на роботу.", + "created a new application request.": "створив новий запит програми.", " has withdrawn his application.": "відкликав свою заяву.", " rejected your application.": "відхилив вашу заявку.", " approved your application.": "схвалив вашу заявку.", " has put your application on-hold.": "призупинив вашу заявку.", " has started processing your application.": "розпочав обробку вашої заявки.", " has changed status of your application": "змінив статус вашої заявки", - "New message received on a recruitment application.": "Отримано нове повідомлення про прийом на роботу.", - "Your application has a new message from @:username": "Ваша програма має нове повідомлення від @:username", + "New message received on an application request.": "Отримано нове повідомлення на запит заявки.", + "Your application request received a new message from @:username": "На ваш запит програми надійшло нове повідомлення від @:username", "Poll starting": "Початок опитування", "Poll closing": "Закриття голосування", "Are you sure you want to delete this Post?": "Ви впевнені, що хочете видалити цю публікацію?", @@ -242,6 +249,7 @@ "Staff Member": "Штатний співробітник", "Muted User": "Вимкнений користувач", "Password": "Пароль", + "Continue with empty password if you have no password.": "Продовжуйте з порожнім паролем, якщо у вас немає пароля.", "Cancel": "Скасувати", "Whoops! Something went wrong.": "Ой! Щось пішло не так.", "Leave Impersonation": "Залишити імітацію", @@ -281,6 +289,37 @@ "Badge": "Бейдж", "Badge Image": "Зображення значка", "Delete Badge": "Видалити значок", + "Run Command": "Виконати команду", + "Scope": "Область застосування", + "Global": "Глобальний", + "Run generic command": "Виконайте загальну команду", + "Player": "гравець", + "Run against players": "Біг проти гравців", + "Available Placeholders": "Доступні заповнювачі", + "Username of the player the command is running on.": "Ім\\'я користувача гравця, на якому виконується команда.", + "Unique Id of the player the command is running on.": "Унікальний ідентифікатор гравця, на якому виконується команда.", + "Enter command to run...": "Введіть команду для запуску...", + "Servers to run on": "Сервери для роботи", + "Leave empty to run on all servers": "Залиште пустим, щоб запустити на всіх серверах", + "Players to run on": "Гравці для бігу", + "Select players": "Виберіть гравців", + "Select players to run command on": "Виберіть гравців для запуску команди", + "Require player to be online": "Вимагати, щоб гравець був онлайн", + "This command should only run if player is online on running server. If not online it will be queued to run when player comes online.": "Цю команду слід запускати, лише якщо гравець перебуває в мережі на запущеному сервері. Якщо гравець не в режимі онлайн, він буде поставлений у чергу для запуску, коли гравець підійде до мережі.", + "Command": "Команда", + "Server": "Сервер", + "Status": "Статус", + "Last Attempted": "Остання спроба", + "Execute At": "Виконати At", + "Tags": "Теги", + "For Player": "Для гравця", + "Output": "Вихід", + "Command History": "Історія команд", + "Retry All Failed": "Повторити всі помилки", + "Attempts: :attempts\/:max_attempts": "Спроби: :attempts\/:max_attempts", + "none": "немає", + "Retry Command": "Повторити команду", + "Delete Command": "Видалити команду", "Create Custom Form": "Створити спеціальну форму", "Title of Custom Form": "Назва спеціальної форми", "Eg: Contact Us": "Наприклад: Зв\\'яжіться з нами", @@ -303,7 +342,6 @@ "Edit Custom Form": "Редагувати спеціальну форму", "Update Custom Form": "Оновити спеціальну форму", "Title": "Назва", - "Status": "Статус", "Can Submit": "Можна подати", "Notify Staff on Submit": "Повідомити персонал про надсилання", "Visible in Listing": "Відображається в списку", @@ -323,7 +361,6 @@ "Max submission per user": "Максимальне подання на користувача", "not applicable": "не застосовується", "Minimum staff role weight to view submissions": "Мінімальна посадова вага персоналу для перегляду поданих матеріалів", - "none": "немає", "Notify staff on new submission": "Повідомте персонал про нове подання", "Updated": "Оновлено", "Country": "Країна", @@ -410,6 +447,17 @@ "External URL is protected from end users.": "Зовнішня URL-адреса захищена від кінцевих користувачів.", "Minimum Role Weight Required to Download": "Мінімальна вага ролі, необхідна для завантаження", "Delete Download": "Видалити завантаження", + "UUID": "UUID", + "Job": "Робота", + "Connection\/Queue": "Підключення\/черга", + "Exception": "Виняток", + "Failed At": "Не вдалося на", + "Failed Jobs": "Невдала робота", + "Retry All Jobs": "Повторити всі завдання", + "Clear All Jobs": "Очистити всі завдання", + "Attempts: :attempts": "Спроби: х1", + "Retry Job": "Повторити завдання", + "Delete Job": "Видалити роботу", "Create News": "Створення новин", "News Category": "Категорія новин", "General": "Загальний", @@ -486,11 +534,11 @@ "Reset to Default Ranks": "Відновити ранги за замовчуванням", "Rank": "ранг", "Delete Rank": "Видалити ранг", - "Create Recruitment Form": "Створити форму прийому на роботу", - "Title of this Recruitment": "Назва цього найму", + "Create Application Form": "Створити форму заявки", + "Title of this Application": "Назва цієї заявки", "Eg: Apply to be a Staff Member": "Наприклад: подайте заявку на посаду співробітника", - "Recruitment Slug": "Слизняк найму", - "Recruitment Status": "Статус прийому на роботу", + "Application Slug for URL": "Додаток Slug для URL", + "Application Status": "Статус програми", "How many times a user can reapply after rejection. Leave empty for no limit.": "Скільки разів користувач може повторно подати заявку після відмови. Залиште порожнім, щоб не було обмежень.", "Submission Cooldown in Seconds": "Перезарядка подання в секундах", "After how many seconds user can reapply this application. Leave empty for no cooldown.": "Через скільки секунд користувач може повторно застосувати цю програму. Залиште порожнім, щоб не відновлюватися.", @@ -499,20 +547,19 @@ "Leave empty to allow any staff with [vote recruitment_submissions] permission to vote on submissions.": "Залиште поле порожнім, щоб дозволити будь-якому персоналу з дозволом [vote recruitment_submissions] голосувати за подання.", "Min Staff Role Weight to Act on Submission": "Мінімальна вага посадового персоналу, щоб діяти за поданням", "Min staff role weight required to Approve\/Reject on submission. Leave empty to allow any staff with [acton recruitment_submissions] permission to act on submissions.": "Мінімальна вага ролі персоналу, необхідна для схвалення\/відхилення під час подання. Залиште поле порожнім, щоб дозволити будь-якому персоналу з дозволом [acton recruitment_submissions] діяти з поданими документами.", - "If this recruitment is for hiring of a specific role, select the role here.": "Якщо це наймання на певну посаду, виберіть цю посаду тут.", - "Create Recruitment": "Створіть рекрутинг", - "Edit Recruitment Form": "Редагувати форму прийому на роботу", - "Update Recruitment": "Оновлення рекрутингу", + "If this application is for hiring of a specific role, select the role here.": "Якщо ця заявка призначена для найму на певну посаду, виберіть її тут.", + "Edit Application Form": "Редагувати форму заявки", + "Update Application Form": "Оновити форму заявки", "Notify Staff": "Повідомте персонал", "Messaging": "Обмін повідомленнями", "Open Requests": "Відкрити запити", "Closed Requests": "Закриті запити", - "Manage Recruitment Forms": "Керуйте формами найму", - "Recruitment": "вербування", - "Delete Recruitment": "Видалити вербування", - ":title Intel - Recruitments": ":title Intel - Рекрутинг", + "Manage Application Forms": "Керуйте формами заявок", + "Application Form": "Заява", + "Delete Application Form": "Видалити форму заявки", + ":title Intel - Application Form": ":title Intel - Форма заявки", ":title - Intel": ":title - Intel", - "This recruitment hiring for": "Це наймання найму для", + "This application hiring for": "Ця програма найму для", "Submission Cooldown": "Перезарядка подання", "Allow only Player Linked Users": "Дозволити лише користувачів, пов’язаних із гравцем", "Allow only Verified Users": "Дозволити лише перевірених користувачів", @@ -520,16 +567,19 @@ "Enable Messaging Feature": "Увімкнути функцію обміну повідомленнями", "Notify staff on Events": "Повідомлення персоналу про події", "Applicant": "Заявник", + "Application": "застосування", + "Last Actor": "Останній актор", + "Last Comment": "Останній коментар", "Updated At": "Оновлено At", - "Closed Request - Recruitments": "Закритий запит - Набір персоналу", - "Open Requests - Recruitments": "Відкриті запити - Рекрутинг", - "Closed Recruitment Submissions:": "Закриті заявки на прийом на роботу:", - "Open Recruitment Submissions:": "Відкрити заявки на прийом на роботу:", - "All Recruitments": "Весь рекрутинг", - ":user application for :recruitmenttitle #:index - Recruitments": ":user додаток для :recruitmenttitle #:index - Рекрутинг", + "Closed Request - Applications": "Закритий запит - Заявки", + "Open Requests - Applications": "Відкрити Запити - Додатки", + "Closed Requests:": "Закриті запити:", + "Open Requests:": "Відкриті запити:", + "All Applications": "Усі додатки", + ":user application for :recruitmenttitle #:index - Applications": ":user додаток для :recruitmenttitle #:index - Програми", ":user application for :recruitmenttitle #:index": ":user додаток для :recruitmenttitle #:index", "Last Updated At": "Останнє оновлення в", - "Submission Status": "Статус подання", + "Request Status": "Статус запиту", "Reason": "Причина", "Marked :status By": "Позначено :status", "Mark In-Progress": "Позначити «Виконується».", @@ -580,8 +630,8 @@ "Go back to Server List": "Поверніться до списку серверів", "Add Bungee Server": "Додайте сервер Bungee", "Edit Bungee Server: :name": "Редагувати сервер Bungee: :name", - "Minetrax only support adding one bungee server. This server will be used to show online players and server status. All sensitive information will be encrypted.": "Minetrax підтримує лише додавання одного банджі-сервера. Цей сервер використовуватиметься для показу онлайн-гравців і статусу сервера. Уся конфіденційна інформація буде зашифрована.", - "Please note Proxy servers don't need Minetrax.jar plugin. Only install them on actual servers like spigot, bukkit etc.": "Зверніть увагу, що проксі-серверам не потрібен плагін Minetrax.jar. Встановлюйте їх лише на справжніх серверах, таких як spigot, bukkit тощо.", + "Add Bungee\/Velocity Server": "Додайте сервер Bungee\/Velocity", + "Edit Bungee\/Velocity Server: :name": "Редагувати сервер Bungee\/Velocity: :name", "Server Name": "Ім\\'я сервера", "Eg: My Bungee Server": "Наприклад: Мій сервер Bungee", "Hostname": "Ім\\'я хоста", @@ -593,27 +643,26 @@ "Query Port": "Порт запиту", "Eg: 25575": "Наприклад: 25575", "Webquery Port": "Порт веб-запиту", - "Eg: 25585": "Наприклад: 25585", + "WebQuery port is a new port which MineTrax plugin will open for secure connection between server and web. Enter a port value which is available and can be open. Eg: 25569": "Порт WebQuery — це новий порт, який відкриє плагін MineTrax для безпечного з’єднання між сервером і Інтернетом. Введіть значення порту, який доступний і може бути відкритим. Наприклад: 25569", "Server Version": "Версія сервера", "Select version..": "Виберіть версію..", - "Edit Bungee Server": "Редагувати сервер Bungee", - "Add New Server": "Додати новий сервер", + "Enable Server Intel \/ Analytics": "Увімкніть сервер Intel \/ Analytics", + "If enabled, server analytics data (performance metric, join activity etc) will be captured for this server via plugin.": "Якщо ввімкнути, аналітичні дані сервера (показник продуктивності, активність приєднання тощо) збиратимуться для цього сервера за допомогою плагіна.", + "Enable Skin Change via Web (SkinsRestorer)": "Увімкнути зміну оформлення через Інтернет (SkinsRestorer)", + "Allow user to change their linked players skin via web for this server. This will require SkinsRestorer plugin to be installed on the server.": "Дозволити користувачам змінювати оформлення зв’язаних гравців через Інтернет для цього сервера. Для цього на сервері буде потрібно встановити плагін SkinsRestorer.", "Add Server": "Додати сервер", + "Edit Server": "Редагувати сервер", + "Add New Server": "Додати новий сервер", "This name will help to identify this server. Eg: Survival, Skyblock, etc.": "Ця назва допоможе ідентифікувати цей сервер. Наприклад: Виживання, Skyblock тощо.", "Publicly visible join address of the server. Eg: play.example.com": "Загальнодоступна адреса приєднання до сервера. Наприклад: play.example.com", "Higher the weight, higher the priority. Eg: 1,3,10 etc. Can be left empty.": "Чим вища вага, тим вищий пріоритет. Наприклад: 1,3,10 тощо. Можна залишити порожнім.", - "WebQuery port is a new port which MineTrax plugin will open for secure connection between server and web. Enter a port value which is available and can be open. Eg: 25569": "Порт WebQuery — це новий порт, який відкриє плагін MineTrax для безпечного з’єднання між сервером і Інтернетом. Введіть значення порту, який доступний і може бути відкритим. Наприклад: 25569", "Select server type": "Виберіть тип сервера", "Server Type": "Тип сервера", "Version": "Версія", - "Enable Server Intel \/ Analytics": "Увімкніть сервер Intel \/ Analytics", - "If enabled, server analytics data (performance metric, join activity etc) will be captured for this server via plugin.": "Якщо ввімкнути, аналітичні дані сервера (показник продуктивності, активність приєднання тощо) збиратимуться для цього сервера за допомогою плагіна.", "Enable Player Intel \/ Analytics": "Увімкніть програвач Intel \/ Analytics", "If enabled, player intel & statistics data will be captured for this server via plugin.": "Якщо ввімкнути, інформація про гравців і статистичні дані будуть отримані для цього сервера через плагін.", "Enable In-Game Chat": "Увімкнути чат у грі", "Enable in-game chat for this server, which allow users to view & chat to in-game players from website.": "Увімкніть чат у грі для цього сервера, який дозволить користувачам переглядати та спілкуватися з гравцями в грі на веб-сайті.", - "Enable Skin Change via Web (SkinsRestorer)": "Увімкнути зміну оформлення через Інтернет (SkinsRestorer)", - "Allow user to change their linked players skin via web for this server. This will require SkinsRestorer plugin to be installed on the server.": "Дозволити користувачам змінювати оформлення зв’язаних гравців через Інтернет для цього сервера. Для цього на сервері буде потрібно встановити плагін SkinsRestorer.", "Edit Server: :name": "Сервер редагування: :name", "Update Server": "Сервер оновлення", "IP:Port": "IP:Порт", @@ -623,17 +672,12 @@ "Servers": "Сервери", "Sync Player Statistics": "Синхронізація статистики гравців", "Add": "додати", - "Server": "Сервер", "Add Proxy Server": "Додайте проксі-сервер", "WebQuery: :webquery_port": "WebQuery: :webquery_port", "not set": "не встановлено", - "Server Online": "Сервер онлайн", - "Server Offline": "Сервер офлайн", "Loading": "Завантаження", - "WebQuery Online": "WebQuery онлайн", - "WebQuery Offline": "WebQuery Offline", + "WebQuery": "WebQuery", "View Server Intel": "Переглянути сервер Intel", - "Edit Server": "Редагувати сервер", "Delete Server": "Видалити сервер", "Statistics": "Статистика", "Performance": "Продуктивність", @@ -873,10 +917,23 @@ "Enable user to link their players to account": "Дозволити користувачам прив’язувати своїх гравців до облікового запису", "Max Players Per Account": "Максимальна кількість гравців на обліковий запис", "Number of players that can be linked to one account in website.": "Кількість гравців, яких можна прив’язати до одного облікового запису на веб-сайті.", - "Account Link Success Command": "Команда успішного підключення облікового запису", - "Use this to reward players when they link account: Eg: give {PLAYER} diamond 1": "Використовуйте це, щоб винагороджувати гравців, коли вони пов’язують облікові записи: наприклад: дайте {PLAYER} діамант 1", - "Account Link Success Broadcast": "Трансляція успішного підключення облікового запису", - "If set then this will be broadcast to server when player link is successful: Eg: {PLAYER} has successfully linked his account and won a ultra key.": "Якщо встановлено, це буде передано на сервер, коли зв’язок гравця буде успішним: наприклад: {PLAYER} успішно пов’язав свій обліковий запис і виграв ультраключ.", + "Account Link Success Commands": "Команди успішного підключення облікового запису", + "(runs when a player is linked to account)": "(запускається, коли гравець прив\\'язаний до облікового запису)", + "Username of the player which is linked.": "Ім\\'я користувача гравця, який пов\\'язаний.", + "Unique Id of the player which is linked.": "Унікальний ідентифікатор гравця, який пов\\'язаний.", + "Run on servers": "Запуск на серверах", + "Run on first link only": "Запуск лише за першим посиланням", + "This command should only run if given player is getting linked for first time. (Eg: This wont run if player get unlinked and then linked again)": "Цю команду слід запускати, лише якщо даний гравець підключається вперше. (Наприклад: це не запускатиметься, якщо гравця буде від’єднано, а потім зв’язано знову)", + "No commands on account link.": "Немає команд для посилання на обліковий запис.", + "Add New Link Command": "Додати нову команду посилання", + "Account Unlink Success Commands": "Команди успішного від’єднання облікового запису", + "(runs when a player is unlinked from account)": "(запускається, коли гравець від’єднано від облікового запису)", + "Username of the player which is unlinked.": "Ім\\'я користувача від\\'єднаного гравця.", + "Unique Id of the player which is unlinked.": "Унікальний ідентифікатор гравця, який не зв\\'язаний.", + "Run on first unlink only": "Запускати лише під час першого від’єднання", + "This command should only run if given player is getting unlinked for first time. (Eg: This wont run if player was linked and unlinked before)": "Цю команду слід запускати, лише якщо даний гравець від’єднується вперше. (Наприклад: це не запускатиметься, якщо гравець був пов’язаний і від’єднаний раніше)", + "No commands on account unlink.": "Немає команд для від’єднання облікового запису.", + "Add New Unlink Command": "Додати нову команду для від’єднання", "Enable Player Rank Sync": "Увімкнути синхронізацію рангу гравця", "Enable this if you want to sync your player rank from server instead of website calculated rank. you must create a rank for each group you have in server making sure rank shortname matches the name of your player group in server.": "Увімкніть це, якщо ви хочете синхронізувати свій рейтинг гравця з сервера замість рейтингу, обчисленого веб-сайтом. ви повинні створити ранг для кожної групи, яку ви маєте на сервері, переконавшись, що коротка назва рангу збігається з назвою вашої групи гравців на сервері.", "Rank Sync From Server": "Синхронізація рангу з сервера", @@ -987,6 +1044,7 @@ "Joined": "Приєднався", "Flags": "Прапори", "Users Administration": "Адміністрування користувачів", + "Discord ID": "ID Discord", "Muted": "Вимкнено", "Banned": "заборонено", "View Profile": "Перегляд профілю", @@ -1188,10 +1246,10 @@ "Someone liked my Post": "Комусь сподобався мій пост", "I am muted by Staff": "Персонал вимкнув звук", "I am banned by Staff": "Мене забанив персонал", - "Recruitment submission status changed": "Змінено статус подання набору", - "New message in recruitment submission": "Нове повідомлення в заявці на прийом на роботу", + "Application request status changed": "Статус заявки змінено", + "New message in application request": "Нове повідомлення в запиті програми", "For staff members": "Для співробітників", - "Recruitment submission received": "Подання про прийом на роботу отримано", + "Application request received": "Отримано заявку", "Custom form submission received": "Отримано спеціальну форму", "Someone commented on News": "Хтось прокоментував Новини", "Saved.": "Збережено.", @@ -1213,25 +1271,25 @@ "Mark all as read": "Позначити все як прочитане", "No notifications to show.": "Немає сповіщень для показу.", "Last Updated": "Останнє оновлення", - "Recruitments": "вербування", + "Application Forms": "Форми заявок", "View My Applications": "Переглянути Мої програми", "Only for Verified Users": "Тільки для перевірених користувачів", "Only for Linked Account Users (Player linked)": "Лише для користувачів пов’язаного облікового запису (пов’язаний гравець)", "Apply": "Застосувати", "Application Closed!": "Заявку закрито!", "Login or Register to Apply!": "Увійдіть або зареєструйтеся, щоб подати заявку!", - "You need to be logged in to apply to this recruitment.": "Вам потрібно увійти, щоб подати заявку на цей набір.", + "You need to be logged in to apply to this application.": "Вам потрібно увійти, щоб подати заявку на цю програму.", "Max Submissions Reached!": "Досягнуто максимальної кількості заявок!", "You are on a Cooldown!": "Ви на відновленні!", "Account Verification Required!": "Потрібна перевірка облікового запису!", "Account Linking Required!": "Потрібне зв’язування облікового запису!", "You have already applied!": "Ви вже подали заявку!", - "View Application": "Перегляд програми", + "View Request": "Переглянути запит", "Already approved in past! Wanna apply again?": "Уже затверджено в минулому! Хочете подати заявку знову?", "You may wanna check that before applying again.": "Ви можете перевірити це, перш ніж знову подавати заявку.", - "View Approved Application": "Переглянути схвалену заявку", - "My Recruitment Applications": "Мої заявки на прийом на роботу", - "Your application for :recruitmenttitle #:index - Recruitments": "Ваша заявка на :recruitmenttitle #:index - Recruitments", + "View Approved Request": "Переглянути схвалений запит", + "My Application Requests": "Мої заявки", + "Your application request for :recruitmenttitle #:index - Applications": "Ваш запит на додаток для :recruitmenttitle #:index - Програми", "Application for :recruitmenttitle #:index": "Додаток для :recruitmenttitle #:index", "Success! A staff will soon review your application. Please be patience.": "Успіх! Співробітники незабаром розглянуть вашу заявку. Будь ласка, запасіться терпінням.", "Withdraw": "Вилучити", @@ -1246,7 +1304,11 @@ "You can link upto :count :player to your account! ( :left available )": "Ви можете прив’язати до свого облікового запису :count :player! (х3 доступні)", "player": "гравець", "players": "гравців", - "Initiate the process by joining the server and typing \/account-link in chat. A link will be generated, click on that link and your player will added to your account.": "Розпочніть процес, приєднавшись до сервера та ввівши \/account-link у чаті. Буде створено посилання, натисніть це посилання, і ваш гравець буде додано до вашого облікового запису.", + "To link a player to your account, join server and type '\/link :otp' in your chat.": "Щоб прив’язати гравця до свого облікового запису, приєднайтеся до сервера та введіть \\'\/link :otp\\' у своєму чаті.", + "Copied!": "Скопійовано!", + "This OTP will expire in :seconds seconds.": "Термін дії цього одноразового пароля закінчиться через 1 секунду.", + "This OTP has expired. Refresh the page to get a new OTP.": "Термін дії цього OTP минув. Оновіть сторінку, щоб отримати новий OTP.", + "Click here to refresh.": "Натисніть тут, щоб оновити.", "No players linked to your account right now.": "Зараз немає гравців, прив’язаних до вашого облікового запису.", "Change Skin of this player.": "Змінити скін цього гравця.", "Are you sure you want to unlink this player from your account?": "Ви впевнені, що хочете від’єднати цього гравця від свого облікового запису?", @@ -1377,11 +1439,9 @@ "Used Memory (MB)": "Використана пам\\'ять (Мб)", "Server Status": "Статус сервера", "Join": "Приєднуйтесь", - "Copied!": "Скопійовано!", "SETTINGS": "НАЛАШТУВАННЯ", "Theme": "Тема", "Plugin": "Підключати", - "Player": "гравець", "Navigation": "Навігація", "Delete this shout permanently?": "Видалити цей крик назавжди?", "No shouts yet.": "Ще немає криків.", @@ -1433,5 +1493,18 @@ "You are muted by": "Ви вимкнені", "Role Weight to View Submission": "Вага ролі для перегляду подання", "Slug": "Слимак", - "via Email": "електронною поштою" + "Minetrax only support adding one bungee server. This server will be used to show online players and server status. All sensitive information will be encrypted.": "Minetrax підтримує лише додавання одного банджі-сервера. Цей сервер використовуватиметься для показу онлайн-гравців і статусу сервера. Уся конфіденційна інформація буде зашифрована.", + "Please note Proxy servers don't need Minetrax.jar plugin. Only install them on actual servers like spigot, bukkit etc.": "Зверніть увагу, що проксі-серверам не потрібен плагін Minetrax.jar. Встановлюйте їх лише на справжніх серверах, таких як spigot, bukkit тощо.", + "Eg: 25585": "Наприклад: 25585", + "Edit Bungee Server": "Редагувати сервер Bungee", + "Server Online": "Сервер онлайн", + "Server Offline": "Сервер офлайн", + "WebQuery Online": "WebQuery онлайн", + "WebQuery Offline": "WebQuery Offline", + "Account Link Success Command": "Команда успішного підключення облікового запису", + "Use this to reward players when they link account: Eg: give {PLAYER} diamond 1": "Використовуйте це, щоб винагороджувати гравців, коли вони пов’язують облікові записи: наприклад: дайте {PLAYER} діамант 1", + "Account Link Success Broadcast": "Трансляція успішного підключення облікового запису", + "If set then this will be broadcast to server when player link is successful: Eg: {PLAYER} has successfully linked his account and won a ultra key.": "Якщо встановлено, це буде передано на сервер, коли зв’язок гравця буде успішним: наприклад: {PLAYER} успішно пов’язав свій обліковий запис і виграв ультраключ.", + "via Email": "електронною поштою", + "Initiate the process by joining the server and typing \/account-link in chat. A link will be generated, click on that link and your player will added to your account.": "Розпочніть процес, приєднавшись до сервера та ввівши \/account-link у чаті. Буде створено посилання, натисніть це посилання, і ваш гравець буде додано до вашого облікового запису." } \ No newline at end of file diff --git a/lang/zh-hk.json b/lang/zh-hk.json index 88eda4127..91924b2f9 100644 --- a/lang/zh-hk.json +++ b/lang/zh-hk.json @@ -1,16 +1,8 @@ { "Email\/Password authentication is disabled.": "電子郵件\/密碼身份驗證已停用。", "The provided password does not match your current password.": "提供的密碼與你當前的密碼不匹配。", - "Link expired or invalid!": "鏈接已過期或無效!", - "Please request a fresh link and try again.": "請申請新鏈接並重試。", - "Player not found in database!": "數據庫中找不到該玩家!", - "Please wait for sometime for server to update its player database.": "請等待伺服器更新其玩家數據庫。", - "Player already linked to a user!": "玩家已與用戶關聯!", - "If you own this user please unlink it from your another account or contact administrator.": "如果你擁有此用戶,請將其與你的其他帳戶取消關聯或聯繫管理員。", - "User already have max :max_slots players linked!": "用戶已經鏈接了 :max_slots 個玩家!", - "If you want to link this player please unlink a player.": "如果您想鏈接該玩家,請取消鏈接玩家。", - "Played linked successfully!": "Played linked successfully!", - "This player is now linked to your account.": "該玩家現在已鏈接到你的帳戶。", + "Player unlinking disabled!": "播放器取消連結已停用!", + "Player unlinking is disabled by the administrator.": "管理員禁用播放器取消連結。", "Player not found!": "找不到玩家!", "No player with that ID found linked to your account.": "沒有找到與你的帳戶相關聯的 ID 的玩家。", "Played unlinked successfully!": "遊戲解綁成功!", @@ -22,6 +14,11 @@ "Badge updated successfully": "徽章更新成功", "Deleted Successfully": "刪除成功", "Badge has been deleted permanently": "徽章已被永久刪除", + ":count Commands Scheduled!": ":count 指令已安排!", + "Commands has been scheduled for execution. Check the status in Command History.": "命令已安排執行。檢查命令歷史記錄中的狀態。", + "Deleted!": "已刪除!", + "Retried!": "重試了!", + "Command has been queued for retrying! Refresh the page after few seconds to check the status.": "指令已排隊等待重試!幾秒鐘後刷新頁面以檢查狀態。", "Custom Form is created successfully": "自訂表單建立成功", "Custom Form updated successfully": "自訂表單更新成功", "Custom Form has been deleted permanently": "自訂表單已永久刪除", @@ -38,6 +35,8 @@ "Download has been created successfully": "下載已建立成功", "Download has been updated successfully": "下載已更新成功", "Download has been deleted permanently": "下載已永久刪除", + "Retry Queued!": "重試已排隊!", + "Job has been queued for retrying!": "作業已排隊等待重試!", "Online Players": "線上玩家", "TPS": "TPS", "CPU Load (%)": "CPU 負載 (%)", @@ -63,12 +62,12 @@ "Rank updated successfully": "排名更新成功", "Rank has been deleted permanently": "排名已被永久刪除", "Rank Reset Successful": "排名重置成功", - "Recruitment Form is created successfully": "招聘表格創建成功", - "Recruitment Form updated successfully": "招募表格更新成功", - "Recruitment Form has been deleted permanently": "招聘表已永久刪除", - "Recruitment Submission deleted successfully": "招聘提交已成功刪除", + "Application Form is created successfully": "申請表創建成功", + "Application Form updated successfully": "申請表更新成功", + "Application Form has been deleted permanently": "申請表已永久刪除", + "Request deleted successfully": "請求刪除成功", "Action Successful": "行動成功", - "Recruitment Submission action has been completed successfully": "招聘提交操作已成功完成", + "Request action has been completed successfully": "請求操作已成功完成", "Message Successfully": "留言成功", "Message has been deleted successfully": "訊息已成功刪除", "New Role is created successfully": "新權限組創建成功", @@ -78,8 +77,7 @@ ":role cannot be deleted because there are users on this role.!": ":role 無法刪除,因為此權限組已有用戶。!", "Role has been deleted!": "權限組已被刪除!", "New server added successfully": "新伺服器添加成功", - "Bungee server added successfully": "Bungee 伺服器添加成功", - "Bungee server updated successfully": "Bungee 伺服器更新成功", + "Proxy server added successfully": "代理伺服器新增成功", "Server updated successfully": "伺服器更新成功", "Server has been deleted permanently": "伺服器已被永久刪除", "Rescan Queued!": "重新掃描排隊完成!", @@ -117,10 +115,16 @@ "User deleted successfully": "用戶刪除成功", "Player not found": "找不到玩家", "Player already linked to a user": "玩家已鏈接到用戶", - "Failed to start player session.": "無法啟動玩家會話。", - "Failed reporting player pvp kill.": "回報玩家 pvp 擊殺失敗。", + "Provided OTP is invalid or expired. Please try again.": "所提供的 OTP 無效或已過期。請再試一次。", + "You already have max :max_slots players linked!": "您已經關聯了最多 :max_slots 位玩家!", + "Player linked successfully": "玩家連結成功", + "Player intel is disabled for this server.": "該伺服器的玩家情報已被停用。", + "Failed to start player session. :message": "無法啟動玩家會話。 :message", + "Failed reporting player pvp kill: :message": "報告玩家 PVP 擊殺失敗: :message", + "Failed reporting player death: :message": "報告玩家死亡失敗: :message", "PlayerIntel event for :username reported successfully.": ":username 的 PlayerIntel 事件已成功報告。", - "Failed to report Event data.": "未能報告事件數據。", + "Failed to report Event data: :message": "事件資料上報失敗: :message", + "Server Intel failed to report: :message": "伺服器英特爾報告失敗: :message", "Submit Successful!": "提交成功!", "Form has been submitted successfully.": "表格已成功提交。", "Comments are not allowed for this news": "此新聞不允許評論", @@ -139,7 +143,7 @@ "Applied Successfully!": "申請成功!", "Application has been submitted successfully.": "申請已成功提交。", "Withdraw Successful": "提現成功", - "Recruitment Submission withdrawn successfully": "招聘提交成功撤回", + "Application Request withdrawn successfully": "申請請求已成功撤回", "Failed to ping server": "ping 伺服器失敗", "Failed to query server": "查詢伺服器失敗", "Web Query Failed": "網頁查詢失敗", @@ -164,20 +168,20 @@ "[Notification] :user commented on your post": "[通知] :user 評論了您的帖子", "[Notification] Someone liked your post": "[通知] 有人喜歡你的帖文", "[Notification] :user liked your post": "[通知] :user 喜歡你的帖子", - "[Notification] New message received on a recruitment application.": "[通知] 收到招聘申請的新消息。", - ":causer sent new message on his application for :recruitment:": ":causer 發送了有關 :recruitment 申請的新訊息:", - "[Notification] Your application has a new message.": "[通知]您的應用程式有一條新訊息。", - ":causer sent you a message on your application for :recruitment:": ":causer 向您發送了一條有關 :recruitment 申請的訊息:", - "[Notification] New recruitment application received.": "【通知】收到新的招募申請。", - "[Notification] An application withdrawn by user.": "[通知] 用戶撤回申請。", - ":applicant has withdrawn his application for :recruitment.": ":applicant 已撤回 :recruitment 的申請。", - "[Notification] Your Application status has changed.": "[通知]您的申請狀態已更改。", - ":causer has started processing your application for :recruitment.": ":causer 已開始處理您的 :recruitment 申請。", - ":causer has put on-hold your application for :recruitment.": ":causer 已暫停您對 :recruitment 的申請。", - "[Notification] Congratulations! Your Application has been Approved.": "【通知】恭喜您!您的申請已獲得批准。", - ":causer has approved your application for :recruitment.": ":causer 已批准您的 :recruitment 申請。", - "[Notification] Sorry! Your Application has been Rejected.": "[通知] 抱歉!您的申請已被拒絕。", - ":causer has rejected your application for :recruitment.": ":causer 已拒絕您的 :recruitment 申請。", + "[Notification] New message received on a application request.": "[通知] 根據應用程式要求收到新訊息。", + ":causer sent new message on his application request for :recruitment:": ":causer 就他對 :recruitment 的申請請求發送了新訊息:", + "[Notification] Your application request has a new message.": "[通知]您的申請請求有新訊息。", + ":causer sent you a message on your application request for :recruitment:": ":causer 向您發送了一條有關 :recruitment 申請請求的訊息:", + "[Notification] New application request received.": "[通知] 收到新的申請請求。", + "[Notification] An application request withdrawn by user.": "[通知] 用戶撤回申請請求。", + ":applicant has withdrawn his application request for :recruitment.": ":applicant 已撤回對 :recruitment 的申請請求。", + "[Notification] Your Application request status has changed.": "[通知] 您的申請請求狀態已變更。", + ":causer has started processing your application request for :recruitment.": ":causer 已開始處理您對 :recruitment 的申請請求。", + ":causer has put on-hold your application request for :recruitment.": ":causer 已暫停您對 :recruitment 的申請請求。", + "[Notification] Congratulations! Your Application request has been Approved.": "【通知】恭喜您!您的申請請求已被批准。", + ":causer has approved your application request for :recruitment.": ":causer 已批准您對 :recruitment 的申請請求。", + "[Notification] Sorry! Your Application request has been Rejected.": "[通知] 抱歉!您的申請請求已被拒絕。", + ":causer has rejected your application request for :recruitment.": ":causer 已拒絕您對 :recruitment 的申請請求。", "[Notification] You are Banned by :user": "[通知]您已被 :user封禁", "Oh no! You are banned by a staff member and can no longer access our website. If you think this was a mistake please create an appeal.": "不好了!您被工作人員禁止,無法再造訪我們的網站。如果您認為這是一個錯誤,請提出上訴。", "Banned by: :user": "禁止者: :user", @@ -185,8 +189,9 @@ "Oh no! You are muted by a staff member and can no longer send messages or chat in our website. If you think this was a mistake please create an appeal.": "不好了!您已被工作人員靜音,無法再在我們的網站上發送訊息或聊天。如果您認為這是一個錯誤,請提出上訴。", "Muted by: :user": "靜音者: :user", "Failed to upload skin to MineSkin. Please try again later": "無法將皮膚上傳到 MineSkin。請稍後再試", - "Oh Jeez! Something went wrong. Please try again later.": "天啊!出了些問題。請稍後再試。", "Error setting player skin. Please make sure provided skin is valid.": "設定玩家皮膚時出錯。請確保提供的皮膚有效。", + "Provided UUID is not valid.": "提供的 UUID 無效。", + "WebQuery failed for unknown reasons. Please check minecraft server logs.": "WebQuery 因未知原因失敗。請檢查我的世界伺服器日誌。", "Minecraft Servers & Players Tracking": "伺服器和玩家跟踪", "Use Light Theme": "使用白色主題", "Use Dark Theme": "使用暗色主題", @@ -197,6 +202,8 @@ "We use cookies to enhance your browsing experience. By continuing, you consent to our cookie policy.": "我們使用 cookie 來增強您的瀏覽體驗。繼續即表示您同意我們的 cookie 政策。", "I Understand": "我明白", "Reset": "重置", + "Filter by :column": "按 :column 過濾", + "Clear": "清除", "No data found": "沒有找到數據", "Previous": "以前的", "Next": "下一個", @@ -218,15 +225,15 @@ "Logout": "登出", "An anonymous user": "匿名用戶", "submitted a custom form.": "提交了自訂表格。", - "applied for a recruitment.": "申請招聘。", + "created a new application request.": "創建了一個新的應用程式請求。", " has withdrawn his application.": "已撤回他的申請。", " rejected your application.": "拒絕了你的申請。", " approved your application.": "批准您的申請。", " has put your application on-hold.": "已暫停您的申請。", " has started processing your application.": "已開始處理您的申請。", " has changed status of your application": "已更改您的申請狀態", - "New message received on a recruitment application.": "招聘申請中收到新消息。", - "Your application has a new message from @:username": "您的應用程式有一條來自 @:username 的新訊息", + "New message received on an application request.": "根據應用程式請求收到的新訊息。", + "Your application request received a new message from @:username": "您的申請請求收到了來自 @:username 的新訊息", "Poll starting": "問卷開始", "Poll closing": "問卷完結", "Are you sure you want to delete this Post?": "你確定要刪除這篇帖文?", @@ -242,6 +249,7 @@ "Staff Member": "工作人員 ", "Muted User": "禁言用戶", "Password": "密碼", + "Continue with empty password if you have no password.": "如果您沒有密碼,請使用空密碼繼續。", "Cancel": "取消", "Whoops! Something went wrong.": "哎呀! 出問題了。", "Leave Impersonation": "Leave Impersonation", @@ -281,6 +289,37 @@ "Badge": "徽章", "Badge Image": "徽章圖片", "Delete Badge": "刪除徽章", + "Run Command": "運行命令", + "Scope": "範圍", + "Global": "全球的", + "Run generic command": "運行通用命令", + "Player": "Player", + "Run against players": "與玩家對抗", + "Available Placeholders": "可用佔位符", + "Username of the player the command is running on.": "運行命令的玩家的使用者名稱。", + "Unique Id of the player the command is running on.": "運行命令的玩家的唯一 ID。", + "Enter command to run...": "輸入命令運行...", + "Servers to run on": "運行的伺服器", + "Leave empty to run on all servers": "留空以在所有伺服器上運行", + "Players to run on": "可供奔跑的玩家", + "Select players": "選擇球員", + "Select players to run command on": "選擇要運行指令的玩家", + "Require player to be online": "要求玩家在線", + "This command should only run if player is online on running server. If not online it will be queued to run when player comes online.": "僅當玩家在運行的伺服器上在線時才應運行此命令。如果不在線,它將在玩家上線時排隊運行。", + "Command": "命令", + "Server": "伺服器", + "Status": "狀態", + "Last Attempted": "最後一次嘗試", + "Execute At": "執行於", + "Tags": "標籤", + "For Player": "對於玩家", + "Output": "輸出", + "Command History": "命令歷史", + "Retry All Failed": "重試全部失敗", + "Attempts: :attempts\/:max_attempts": "嘗試次數: :attempts\/:max_attempts", + "none": "沒有", + "Retry Command": "重試命令", + "Delete Command": "刪除命令", "Create Custom Form": "建立自訂表單", "Title of Custom Form": "定製表格標題", "Eg: Contact Us": "例如:聯絡我們", @@ -303,7 +342,6 @@ "Edit Custom Form": "編輯自訂表格", "Update Custom Form": "更新自訂表格", "Title": "標題", - "Status": "狀態", "Can Submit": "可以提交", "Notify Staff on Submit": "通知工作人員提交", "Visible in Listing": "在列表中可見", @@ -323,7 +361,6 @@ "Max submission per user": "每個用戶的最大提交數", "not applicable": "不適用", "Minimum staff role weight to view submissions": "查看提交內容的最低員工角色權重", - "none": "沒有", "Notify staff on new submission": "通知工作人員新的提交", "Updated": "更新", "Country": "國家", @@ -410,6 +447,17 @@ "External URL is protected from end users.": "外部 URL 受到最終使用者的保護。", "Minimum Role Weight Required to Download": "下載所需的最低角色權重", "Delete Download": "刪除下載", + "UUID": "通用唯一識別符", + "Job": "工作", + "Connection\/Queue": "連接\/隊列", + "Exception": "例外", + "Failed At": "失敗於", + "Failed Jobs": "失敗的工作", + "Retry All Jobs": "重試所有作業", + "Clear All Jobs": "清除所有工作", + "Attempts: :attempts": "嘗試次數: :attempts", + "Retry Job": "重試作業", + "Delete Job": "刪除作業", "Create News": "創建消息", "News Category": "消息分類", "General": "常規", @@ -486,11 +534,11 @@ "Reset to Default Ranks": "重置為默認階級", "Rank": "階級", "Delete Rank": "刪除排名", - "Create Recruitment Form": "建立招聘表格", - "Title of this Recruitment": "本次招募的名稱", + "Create Application Form": "建立申請表", + "Title of this Application": "本申請的標題", "Eg: Apply to be a Staff Member": "例如:申請成為員工", - "Recruitment Slug": "招募蛞蝓", - "Recruitment Status": "招募狀況", + "Application Slug for URL": "URL 的應用程式 Slug", + "Application Status": "申請狀態", "How many times a user can reapply after rejection. Leave empty for no limit.": "用戶被拒絕後可以重新申請幾次。留空則無限制。", "Submission Cooldown in Seconds": "提交冷卻時間以秒為單位", "After how many seconds user can reapply this application. Leave empty for no cooldown.": "多少秒後用戶可以重新應用此應用程式。留空則沒有冷卻時間。", @@ -499,20 +547,19 @@ "Leave empty to allow any staff with [vote recruitment_submissions] permission to vote on submissions.": "留空以允許任何具有[投票recruitment_submissions]權限的員工對提交內容進行投票。", "Min Staff Role Weight to Act on Submission": "提交後採取行動的最低員工角色權重", "Min staff role weight required to Approve\/Reject on submission. Leave empty to allow any staff with [acton recruitment_submissions] permission to act on submissions.": "提交時批准\/拒絕所需的最小員工角色權重。留空以允許任何具有 [actonRecruitment_submissions] 權限的員工對提交的內容採取行動。", - "If this recruitment is for hiring of a specific role, select the role here.": "如果本次招募是為了招募特定角色,請在此處選擇該角色。", - "Create Recruitment": "創建招聘", - "Edit Recruitment Form": "編輯招募表格", - "Update Recruitment": "更新招聘", + "If this application is for hiring of a specific role, select the role here.": "如果此申請是為了僱用特定角色,請在此處選擇該角色。", + "Edit Application Form": "編輯申請表", + "Update Application Form": "更新申請表", "Notify Staff": "通知員工", "Messaging": "訊息傳遞", "Open Requests": "開放請求", "Closed Requests": "已關閉的請求", - "Manage Recruitment Forms": "管理招募表格", - "Recruitment": "招募", - "Delete Recruitment": "刪除招聘", - ":title Intel - Recruitments": ":title 英特爾 - 招聘", + "Manage Application Forms": "管理申請表", + "Application Form": "申請表", + "Delete Application Form": "刪除申請表", + ":title Intel - Application Form": ":title 英特爾 - 申請表", ":title - Intel": ":title - 英特爾", - "This recruitment hiring for": "本次招募招募的是", + "This application hiring for": "此應用程式招聘", "Submission Cooldown": "提交冷卻", "Allow only Player Linked Users": "僅允許玩家連結用戶", "Allow only Verified Users": "僅允許經過驗證的用戶", @@ -520,16 +567,19 @@ "Enable Messaging Feature": "啟用訊息功能", "Notify staff on Events": "通知工作人員有關活動的信息", "Applicant": "申請人", + "Application": "應用", + "Last Actor": "最後的演員", + "Last Comment": "最後評論", "Updated At": "更新於", - "Closed Request - Recruitments": "已關閉請求 - 招聘", - "Open Requests - Recruitments": "公開請求 - 招聘", - "Closed Recruitment Submissions:": "封閉式招募提交:", - "Open Recruitment Submissions:": "公開招聘提交資料:", - "All Recruitments": "全部招聘", - ":user application for :recruitmenttitle #:index - Recruitments": ":user 申請 :recruitmenttitle #:index - 招聘", + "Closed Request - Applications": "已關閉請求 - 申請", + "Open Requests - Applications": "開放請求 - 申請", + "Closed Requests:": "已關閉的請求:", + "Open Requests:": "開放請求:", + "All Applications": "所有應用程式", + ":user application for :recruitmenttitle #:index - Applications": ":user 應用程式用於 :recruitmenttitle #:index - 應用程式", ":user application for :recruitmenttitle #:index": ":user 申請 :recruitmenttitle #:index", "Last Updated At": "最後更新時間", - "Submission Status": "提交狀態", + "Request Status": "請求狀態", "Reason": "原因", "Marked :status By": "標記 :status 者", "Mark In-Progress": "標記為進行中", @@ -580,8 +630,8 @@ "Go back to Server List": "返回伺服器列表", "Add Bungee Server": "添加 Bungee 伺服器", "Edit Bungee Server: :name": "編輯 Bungee 伺服器::name", - "Minetrax only support adding one bungee server. This server will be used to show online players and server status. All sensitive information will be encrypted.": "Minetrax 僅支持添加一台 Bungee 伺服器。 該伺服器將用於顯示在線玩家和伺服器狀態。 所有敏感信息都將被加密。", - "Please note Proxy servers don't need Minetrax.jar plugin. Only install them on actual servers like spigot, bukkit etc.": "請注意代理伺服器不需要 Minetrax.jar 插件。 僅將它們安裝在實際伺服器上,例如 spigot、bukkit 等。", + "Add Bungee\/Velocity Server": "新增 Bungee\/Velocity 伺服器", + "Edit Bungee\/Velocity Server: :name": "編輯蹦極\/速度伺服器: :name", "Server Name": "伺服器名稱", "Eg: My Bungee Server": "例如:My Bungee Server", "Hostname": "Hostname", @@ -593,27 +643,26 @@ "Query Port": "Query 端口", "Eg: 25575": "例如:25575", "Webquery Port": "Webquery 端口", - "Eg: 25585": "例如:25585", + "WebQuery port is a new port which MineTrax plugin will open for secure connection between server and web. Enter a port value which is available and can be open. Eg: 25569": "WebQuery 連接埠是 MineTrax 外掛程式將開啟的一個新端口,用於伺服器和 Web 之間的安全連接。輸入可用且可開啟的連接埠值。例如:25569", "Server Version": "伺服器版本", "Select version..": "選擇版本..", - "Edit Bungee Server": "編輯 Bungee 伺服器", - "Add New Server": "添加新伺服器", + "Enable Server Intel \/ Analytics": "啟用伺服器英特爾\/分析", + "If enabled, server analytics data (performance metric, join activity etc) will be captured for this server via plugin.": "如果啟用,將透過外掛程式擷取該伺服器的伺服器分析資料(效能指標、加入活動等)。", + "Enable Skin Change via Web (SkinsRestorer)": "透過 Web 啟用皮膚變更 (SkinsRestorer)", + "Allow user to change their linked players skin via web for this server. This will require SkinsRestorer plugin to be installed on the server.": "允許用戶透過該伺服器的網路更改其連結的玩家皮膚。這需要在伺服器上安裝 SkinsRestorer 插件。", "Add Server": "添加伺服器", + "Edit Server": "編輯服務器", + "Add New Server": "添加新伺服器", "This name will help to identify this server. Eg: Survival, Skyblock, etc.": "該名稱將有助於識別該伺服器。例如:生存、Skyblock 等。", "Publicly visible join address of the server. Eg: play.example.com": "伺服器的公開可見加入位址。例如:play.example.com", "Higher the weight, higher the priority. Eg: 1,3,10 etc. Can be left empty.": "權重越高,優先權越高。例如:1、3、10 等。可以留空。", - "WebQuery port is a new port which MineTrax plugin will open for secure connection between server and web. Enter a port value which is available and can be open. Eg: 25569": "WebQuery 連接埠是 MineTrax 外掛程式將開啟的一個新端口,用於伺服器和 Web 之間的安全連接。輸入可用且可開啟的連接埠值。例如:25569", "Select server type": "選擇伺服器類型", "Server Type": "伺服器類型", "Version": "版本", - "Enable Server Intel \/ Analytics": "啟用伺服器英特爾\/分析", - "If enabled, server analytics data (performance metric, join activity etc) will be captured for this server via plugin.": "如果啟用,將透過外掛程式擷取該伺服器的伺服器分析資料(效能指標、加入活動等)。", "Enable Player Intel \/ Analytics": "啟用玩家情報\/分析", "If enabled, player intel & statistics data will be captured for this server via plugin.": "如果啟用,將透過插件捕獲該伺服器的玩家情報和統計資料。", "Enable In-Game Chat": "啟用遊戲內聊天", "Enable in-game chat for this server, which allow users to view & chat to in-game players from website.": "為此伺服器啟用遊戲內聊天,允許用戶從網站查看遊戲內玩家並與其聊天。", - "Enable Skin Change via Web (SkinsRestorer)": "透過 Web 啟用皮膚變更 (SkinsRestorer)", - "Allow user to change their linked players skin via web for this server. This will require SkinsRestorer plugin to be installed on the server.": "允許用戶透過該伺服器的網路更改其連結的玩家皮膚。這需要在伺服器上安裝 SkinsRestorer 插件。", "Edit Server: :name": "編輯伺服器::name", "Update Server": "更新伺服器", "IP:Port": "IP:Port", @@ -623,17 +672,12 @@ "Servers": "伺服器", "Sync Player Statistics": "同步玩家統計數據", "Add": "添加", - "Server": "伺服器", "Add Proxy Server": "新增代理伺服器", "WebQuery: :webquery_port": "網站 query::webquery_port", "not set": "沒有設置", - "Server Online": "伺服器在線", - "Server Offline": "伺服器離線", "Loading": "正在加載", - "WebQuery Online": "WebQuery", - "WebQuery Offline": "WebQuery 離線", + "WebQuery": "網頁查詢", "View Server Intel": "查看服務器英特爾", - "Edit Server": "編輯服務器", "Delete Server": "刪除伺服器", "Statistics": "統計數據", "Performance": "性能", @@ -873,10 +917,23 @@ "Enable user to link their players to account": "使用戶能夠將他們的遊戲帳戶鏈接到網頁", "Max Players Per Account": "每個帳戶的最大玩家數", "Number of players that can be linked to one account in website.": "網站上一個帳號可以綁定的玩家數量。", - "Account Link Success Command": "帳號鏈接成功指令", - "Use this to reward players when they link account: Eg: give {PLAYER} diamond 1": "當玩家鏈接帳號時,用這個來獎勵玩家。例如:give {PLAYER} diamond 1", - "Account Link Success Broadcast": "帳戶鏈接成功廣播", - "If set then this will be broadcast to server when player link is successful: Eg: {PLAYER} has successfully linked his account and won a ultra key.": "如果設置,則當玩家鏈接成功時,這將被廣播到伺服器。例如:{PLAYER} 已成功鏈接他的帳戶並獲得一個鑽石。", + "Account Link Success Commands": "帳戶連結成功命令", + "(runs when a player is linked to account)": "(當玩家連結到帳戶時運行)", + "Username of the player which is linked.": "所連結玩家的用戶名。", + "Unique Id of the player which is linked.": "所連結的玩家的唯一 ID。", + "Run on servers": "在伺服器上運行", + "Run on first link only": "僅在第一個連結上運行", + "This command should only run if given player is getting linked for first time. (Eg: This wont run if player get unlinked and then linked again)": "僅當給定玩家第一次連結時才應執行此命令。 (例如:如果玩家取消鏈接然後再次鏈接,這將不會運行)", + "No commands on account link.": "帳戶連結上沒有命令。", + "Add New Link Command": "新增連結命令", + "Account Unlink Success Commands": "帳戶解除關聯成功命令", + "(runs when a player is unlinked from account)": "(當玩家與帳戶取消連結時運行)", + "Username of the player which is unlinked.": "未連結的玩家的用戶名。", + "Unique Id of the player which is unlinked.": "未連結的玩家的唯一 ID。", + "Run on first unlink only": "僅在第一次取消連結時運行", + "This command should only run if given player is getting unlinked for first time. (Eg: This wont run if player was linked and unlinked before)": "僅當給定玩家第一次取消連結時才應執行此命令。 (例如:如果玩家之前已鏈接並取消鏈接,則不會運行)", + "No commands on account unlink.": "沒有關於帳戶取消連結的命令。", + "Add New Unlink Command": "新增的取消連結命令", "Enable Player Rank Sync": "啟用玩家等級同步", "Enable this if you want to sync your player rank from server instead of website calculated rank. you must create a rank for each group you have in server making sure rank shortname matches the name of your player group in server.": "如果你想從伺服器上同步你的玩家排名,而不是網站計算的排名的話,請啟用此選項。 你必須為伺服器中的每個組創建一個排名,確保排名短名稱與伺服器中玩家組的名稱匹配。", "Rank Sync From Server": "從伺服器排名同步", @@ -987,6 +1044,7 @@ "Joined": "加入", "Flags": "標誌", "Users Administration": "用戶管理", + "Discord ID": "不和諧 ID", "Muted": "被靜言", "Banned": "被封禁", "View Profile": "查看資料", @@ -1188,10 +1246,10 @@ "Someone liked my Post": "Someone liked my Post", "I am muted by Staff": "I am muted by Staff", "I am banned by Staff": "I am banned by Staff", - "Recruitment submission status changed": "招聘提交狀態已更改", - "New message in recruitment submission": "招聘提交中的新消息", + "Application request status changed": "申請請求狀態已更改", + "New message in application request": "應用程式請求中的新訊息", "For staff members": "對於工作人員", - "Recruitment submission received": "招聘資訊已收到", + "Application request received": "收到申請請求", "Custom form submission received": "收到自訂表單提交", "Someone commented on News": "有人評論新聞", "Saved.": "Saved.", @@ -1213,25 +1271,25 @@ "Mark all as read": "Mark all as read", "No notifications to show.": "No notifications to show.", "Last Updated": "最近更新時間", - "Recruitments": "人才招募", + "Application Forms": "申請表格", "View My Applications": "查看我的應用程式", "Only for Verified Users": "僅適用於經過驗證的用戶", "Only for Linked Account Users (Player linked)": "僅適用於關聯帳戶使用者(玩家關聯)", "Apply": "申請", "Application Closed!": "申請已關閉!", "Login or Register to Apply!": "登入或註冊即可申請!", - "You need to be logged in to apply to this recruitment.": "您需要登入才能申請本次招聘。", + "You need to be logged in to apply to this application.": "您需要登入才能申請此應用程式。", "Max Submissions Reached!": "已達到最大提交數!", "You are on a Cooldown!": "您正處於冷卻期!", "Account Verification Required!": "需要驗證帳戶!", "Account Linking Required!": "需要帳戶連結!", "You have already applied!": "您已經申請了!", - "View Application": "查看應用", + "View Request": "查看請求", "Already approved in past! Wanna apply again?": "過去已經批准了!還想再申請一次嗎?", "You may wanna check that before applying again.": "您可能想在再次申請之前檢查一下。", - "View Approved Application": "查看已核准的申請", - "My Recruitment Applications": "我的招聘申請", - "Your application for :recruitmenttitle #:index - Recruitments": "您的 :recruitmenttitle 申請 #:index - 招聘", + "View Approved Request": "查看已核准的請求", + "My Application Requests": "我的申請請求", + "Your application request for :recruitmenttitle #:index - Applications": "您對 :recruitmenttitle 的申請請求 #:index - 應用程序", "Application for :recruitmenttitle #:index": "申請 :recruitmenttitle #:index", "Success! A staff will soon review your application. Please be patience.": "成功!工作人員很快就會審核您的申請。請耐心。", "Withdraw": "提取", @@ -1246,7 +1304,11 @@ "You can link upto :count :player to your account! ( :left available )": "You can link upto :count :player to your account! ( :left available )", "player": "player", "players": "players", - "Initiate the process by joining the server and typing \/account-link in chat. A link will be generated, click on that link and your player will added to your account.": "通過加入服務器並在聊天中鍵入 \/account-link 來啟動該過程。 將生成一個鏈接,點擊該鏈接,你的遊戲帳號將添加到你的帳戶中。", + "To link a player to your account, join server and type '\/link :otp' in your chat.": "要將玩家連結到您的帳戶,請加入伺服器並在聊天中輸入「\/link :otp」。", + "Copied!": "已複製!", + "This OTP will expire in :seconds seconds.": "此 OTP 將在 :seconds 秒後過期。", + "This OTP has expired. Refresh the page to get a new OTP.": "此 OTP 已過期。刷新頁面即可取得新的 OTP。", + "Click here to refresh.": "按一下此處刷新。", "No players linked to your account right now.": "目前沒有玩家與你的帳戶相關聯。", "Change Skin of this player.": "更改該玩家的皮膚。", "Are you sure you want to unlink this player from your account?": "您確定要取消該玩家與您帳號的關聯嗎?", @@ -1377,11 +1439,9 @@ "Used Memory (MB)": "已用記憶體 (MB)", "Server Status": "伺服器狀態", "Join": "加入", - "Copied!": "已複製!", "SETTINGS": "設置", "Theme": "主題", "Plugin": "插件", - "Player": "Player", "Navigation": "導航", "Delete this shout permanently?": "永久刪除此呼聲?", "No shouts yet.": "還沒有喊叫。", @@ -1433,5 +1493,18 @@ "You are muted by": "你已被禁言,執行者:", "Role Weight to View Submission": "看提交的角色權重", "Slug": "蛞蝓", - "via Email": "via Email" + "Minetrax only support adding one bungee server. This server will be used to show online players and server status. All sensitive information will be encrypted.": "Minetrax 僅支持添加一台 Bungee 伺服器。 該伺服器將用於顯示在線玩家和伺服器狀態。 所有敏感信息都將被加密。", + "Please note Proxy servers don't need Minetrax.jar plugin. Only install them on actual servers like spigot, bukkit etc.": "請注意代理伺服器不需要 Minetrax.jar 插件。 僅將它們安裝在實際伺服器上,例如 spigot、bukkit 等。", + "Eg: 25585": "例如:25585", + "Edit Bungee Server": "編輯 Bungee 伺服器", + "Server Online": "伺服器在線", + "Server Offline": "伺服器離線", + "WebQuery Online": "WebQuery", + "WebQuery Offline": "WebQuery 離線", + "Account Link Success Command": "帳號鏈接成功指令", + "Use this to reward players when they link account: Eg: give {PLAYER} diamond 1": "當玩家鏈接帳號時,用這個來獎勵玩家。例如:give {PLAYER} diamond 1", + "Account Link Success Broadcast": "帳戶鏈接成功廣播", + "If set then this will be broadcast to server when player link is successful: Eg: {PLAYER} has successfully linked his account and won a ultra key.": "如果設置,則當玩家鏈接成功時,這將被廣播到伺服器。例如:{PLAYER} 已成功鏈接他的帳戶並獲得一個鑽石。", + "via Email": "via Email", + "Initiate the process by joining the server and typing \/account-link in chat. A link will be generated, click on that link and your player will added to your account.": "通過加入服務器並在聊天中鍵入 \/account-link 來啟動該過程。 將生成一個鏈接,點擊該鏈接,你的遊戲帳號將添加到你的帳戶中。" } \ No newline at end of file diff --git a/package-lock.json b/package-lock.json index e03db49f4..6f1fbdef7 100644 --- a/package-lock.json +++ b/package-lock.json @@ -13,6 +13,7 @@ "@inertiajs/vue3": "^1.0.11", "@tailwindcss/forms": "^0.5.3", "@tailwindcss/typography": "^0.5.7", + "@tsparticles/vue3": "^3.0.1", "@vitejs/plugin-vue": "^4.3.0", "@vue/server-renderer": "^3.3.0", "@vueuse/core": "^10.4.0", @@ -33,10 +34,10 @@ "millify": "^5.0.0", "postcss": "^8.4.18", "pusher-js": "^7.3.0", - "skinview3d": "^2.3.0-alpha.2", + "skinview3d": "^3.0.1", "sweetalert2": "github:MineTrax/sweetalert2", "tailwindcss": "^3.1.8", - "tsparticles": "^2.12.0", + "tsparticles": "^3.4.0", "v-calendar": "^3.0.0-alpha.8", "vform": "^2.1.2", "vite": "^4.4.9", @@ -46,7 +47,6 @@ "vue-echarts": "^6.5.5", "vue-multiselect": "^3.0.0-alpha.2", "vue-tippy": "^6.3", - "vue3-particles": "^2.12.0", "vuedraggable": "^4.1.0", "xterm": "^4.19.0", "xterm-addon-attach": "^0.6.0", @@ -68,9 +68,9 @@ } }, "node_modules/@babel/parser": { - "version": "7.22.16", - "resolved": "https://registry.npmjs.org/@babel/parser/-/parser-7.22.16.tgz", - "integrity": "sha512-+gPfKv8UWeKKeJTUxe59+OobVcrYHETCsORl61EmSkmgymguYk/X5bp7GuUIXaFsc6y++v8ZxPsLSSuujqDphA==", + "version": "7.24.6", + "resolved": "https://registry.npmjs.org/@babel/parser/-/parser-7.24.6.tgz", + "integrity": "sha512-eNZXdfU35nJC2h24RznROuOpO94h6x8sg9ju0tT9biNtLZ2vuP8SduLqqV+/8+cebSLV9SJEAN5Z3zQbJG/M+Q==", "dev": true, "bin": { "parser": "bin/babel-parser.js" @@ -1083,6 +1083,661 @@ "tailwindcss": ">=3.0.0 || insiders" } }, + "node_modules/@tsparticles/basic": { + "version": "3.4.0", + "resolved": "https://registry.npmjs.org/@tsparticles/basic/-/basic-3.4.0.tgz", + "integrity": "sha512-a0HxG0GOhXof7NDqcqdyu9XpmCAQ0M402YECz/jsH4CkBpz3ut0BrgnyjT6Xcqna3pR1Kv1m516/sV2fwNnnQw==", + "dev": true, + "funding": [ + { + "type": "github", + "url": "https://github.com/sponsors/matteobruni" + }, + { + "type": "github", + "url": "https://github.com/sponsors/tsparticles" + }, + { + "type": "buymeacoffee", + "url": "https://www.buymeacoffee.com/matteobruni" + } + ], + "dependencies": { + "@tsparticles/engine": "^3.4.0", + "@tsparticles/move-base": "^3.4.0", + "@tsparticles/shape-circle": "^3.4.0", + "@tsparticles/updater-color": "^3.4.0", + "@tsparticles/updater-opacity": "^3.4.0", + "@tsparticles/updater-out-modes": "^3.4.0", + "@tsparticles/updater-size": "^3.4.0" + } + }, + "node_modules/@tsparticles/engine": { + "version": "3.4.0", + "resolved": "https://registry.npmjs.org/@tsparticles/engine/-/engine-3.4.0.tgz", + "integrity": "sha512-OqoMZYJCoiihNnexnnSmInEMNXr0Z8CmE1HSiFVeifgK1qUlonTFe2G09KdvNT8ZdvmIC513yTpFJNDbnMZYRQ==", + "dev": true, + "funding": [ + { + "type": "github", + "url": "https://github.com/sponsors/matteobruni" + }, + { + "type": "github", + "url": "https://github.com/sponsors/tsparticles" + }, + { + "type": "buymeacoffee", + "url": "https://www.buymeacoffee.com/matteobruni" + } + ], + "hasInstallScript": true + }, + "node_modules/@tsparticles/interaction-external-attract": { + "version": "3.4.0", + "resolved": "https://registry.npmjs.org/@tsparticles/interaction-external-attract/-/interaction-external-attract-3.4.0.tgz", + "integrity": "sha512-6enSRkoXyK0JvW8bJuj2xAUuu9VzDiFvRCPaL+5dcLcDpjheh8nWpGzrgo8p9VxLL5VRYv7PxnYPMviBMQ7WzA==", + "dev": true, + "dependencies": { + "@tsparticles/engine": "^3.4.0" + } + }, + "node_modules/@tsparticles/interaction-external-bounce": { + "version": "3.4.0", + "resolved": "https://registry.npmjs.org/@tsparticles/interaction-external-bounce/-/interaction-external-bounce-3.4.0.tgz", + "integrity": "sha512-yiTJD8t+Uzpo9lyhHlaC+azu49dJtrFVhbVZdDaiTNm1L1stFQBrc+9NY63BfQDEkDmSz4uWvQXQMru2KY+40g==", + "dev": true, + "dependencies": { + "@tsparticles/engine": "^3.4.0" + } + }, + "node_modules/@tsparticles/interaction-external-bubble": { + "version": "3.4.0", + "resolved": "https://registry.npmjs.org/@tsparticles/interaction-external-bubble/-/interaction-external-bubble-3.4.0.tgz", + "integrity": "sha512-CQ1nC6Or8qAAkH7A2x3FkP473caM7UWQiiN4zR4JtSZu06+2Y0V09LXguQKx1RWDehgRvkylQ4Dgur4a5qNb8w==", + "dev": true, + "dependencies": { + "@tsparticles/engine": "^3.4.0" + } + }, + "node_modules/@tsparticles/interaction-external-connect": { + "version": "3.4.0", + "resolved": "https://registry.npmjs.org/@tsparticles/interaction-external-connect/-/interaction-external-connect-3.4.0.tgz", + "integrity": "sha512-UBzs0iV7wLbrL2VIuCT25asUjjXGCiVC/kCM5NtG7+gd6wDB8DbjZPjHviI7AnEnJdBPeZ2eeYIVuLiO1Xpd3A==", + "dev": true, + "dependencies": { + "@tsparticles/engine": "^3.4.0" + } + }, + "node_modules/@tsparticles/interaction-external-grab": { + "version": "3.4.0", + "resolved": "https://registry.npmjs.org/@tsparticles/interaction-external-grab/-/interaction-external-grab-3.4.0.tgz", + "integrity": "sha512-BsnwN1x+nYUCD7iSu/wLX//awAka1Vf5gnynBqgmz0odAlN3Wv2i9iR/JkzDQynmGLJPHffYgkXC8LWXgZZznQ==", + "dev": true, + "dependencies": { + "@tsparticles/engine": "^3.4.0" + } + }, + "node_modules/@tsparticles/interaction-external-pause": { + "version": "3.4.0", + "resolved": "https://registry.npmjs.org/@tsparticles/interaction-external-pause/-/interaction-external-pause-3.4.0.tgz", + "integrity": "sha512-B6xvHLLktN9BHPcIbAxc7F68aDOnieKAxPwqSuvRtQrEP0Q3xcvTkw1TBwzehr9mZH+0SVGzPfH8BMWI4EP1Xg==", + "dev": true, + "dependencies": { + "@tsparticles/engine": "^3.4.0" + } + }, + "node_modules/@tsparticles/interaction-external-push": { + "version": "3.4.0", + "resolved": "https://registry.npmjs.org/@tsparticles/interaction-external-push/-/interaction-external-push-3.4.0.tgz", + "integrity": "sha512-SriLK1X45CaLwzxjtDo5nCGtF8lwPwK5zYO6+UU+9djUzbh/dBlXQr63ovm/jYPE+yGPRxAhJLdiHpss6aaavQ==", + "dev": true, + "dependencies": { + "@tsparticles/engine": "^3.4.0" + } + }, + "node_modules/@tsparticles/interaction-external-remove": { + "version": "3.4.0", + "resolved": "https://registry.npmjs.org/@tsparticles/interaction-external-remove/-/interaction-external-remove-3.4.0.tgz", + "integrity": "sha512-9W4v8s3J+4l9AXpAvvAMbdG0G6y0HHA+/ZmP/9CtVc1fqVDDrMHL0ojXuVlGMxVjKgwuO28x8+jOAuM7PHiSsQ==", + "dev": true, + "dependencies": { + "@tsparticles/engine": "^3.4.0" + } + }, + "node_modules/@tsparticles/interaction-external-repulse": { + "version": "3.4.0", + "resolved": "https://registry.npmjs.org/@tsparticles/interaction-external-repulse/-/interaction-external-repulse-3.4.0.tgz", + "integrity": "sha512-5tM8uLGsKMUhZ2+Acy8XHrw1MN+apqNBhfVYoZ5UdH2soX1xAicSCrEpSObiS1xjCmkpRlkfls3Ygo4FHz3eSg==", + "dev": true, + "dependencies": { + "@tsparticles/engine": "^3.4.0" + } + }, + "node_modules/@tsparticles/interaction-external-slow": { + "version": "3.4.0", + "resolved": "https://registry.npmjs.org/@tsparticles/interaction-external-slow/-/interaction-external-slow-3.4.0.tgz", + "integrity": "sha512-bBlKG3VS8g64+HiDlu9RbWt/3bIepEu25w8G2zTB+GQMBqDpKsMioWWKNT66w/661U1BlvUZWHaJE/OdMCZTZw==", + "dev": true, + "dependencies": { + "@tsparticles/engine": "^3.4.0" + } + }, + "node_modules/@tsparticles/interaction-external-trail": { + "version": "3.4.0", + "resolved": "https://registry.npmjs.org/@tsparticles/interaction-external-trail/-/interaction-external-trail-3.4.0.tgz", + "integrity": "sha512-hpcfv04zto67kjG7X1nx+Bv9eolkUBNLHcy9gSgco83/ARNKLgcOA+xYz5OFzZ5ImKyGZQggzYOPSwBZx+9MQg==", + "dev": true, + "dependencies": { + "@tsparticles/engine": "^3.4.0" + } + }, + "node_modules/@tsparticles/interaction-particles-attract": { + "version": "3.4.0", + "resolved": "https://registry.npmjs.org/@tsparticles/interaction-particles-attract/-/interaction-particles-attract-3.4.0.tgz", + "integrity": "sha512-Ye6f37AZYaMExjsZSoOEMsTSFIPs3ZZCxiQmiCeH+gNK8yGXJDLkWwZUN0S7S4GJDf24Nt4S+gunKJxO8C3qGQ==", + "dev": true, + "dependencies": { + "@tsparticles/engine": "^3.4.0" + } + }, + "node_modules/@tsparticles/interaction-particles-collisions": { + "version": "3.4.0", + "resolved": "https://registry.npmjs.org/@tsparticles/interaction-particles-collisions/-/interaction-particles-collisions-3.4.0.tgz", + "integrity": "sha512-JmDyXlGS6vSrUxvgMf/t6hsnsAS4YRc9rZM3CcmfyUM9UG9/+vef/cekNDSVRzszk5KcFF70w2FLJ6EhYs0ecA==", + "dev": true, + "dependencies": { + "@tsparticles/engine": "^3.4.0" + } + }, + "node_modules/@tsparticles/interaction-particles-links": { + "version": "3.4.0", + "resolved": "https://registry.npmjs.org/@tsparticles/interaction-particles-links/-/interaction-particles-links-3.4.0.tgz", + "integrity": "sha512-2UhzNsZCSF69L0PGwlJARNx3qrMdSrl5p/TgO5Q5w7iwBU1x/W27O+TDQvNdMHsOLPPUomUI+jJfRXY2snqp3Q==", + "dev": true, + "dependencies": { + "@tsparticles/engine": "^3.4.0" + } + }, + "node_modules/@tsparticles/move-base": { + "version": "3.4.0", + "resolved": "https://registry.npmjs.org/@tsparticles/move-base/-/move-base-3.4.0.tgz", + "integrity": "sha512-4P9CzgVN7INogAvqkg/cEA+6WKeGUAtsgljJ2rUADgNBiScW1oJZAw/004AZiOlonLRiUZujUCNS4zlAg62ZvQ==", + "dev": true, + "dependencies": { + "@tsparticles/engine": "^3.4.0" + } + }, + "node_modules/@tsparticles/move-parallax": { + "version": "3.4.0", + "resolved": "https://registry.npmjs.org/@tsparticles/move-parallax/-/move-parallax-3.4.0.tgz", + "integrity": "sha512-5GdTxro5y3+GFNabaHPFuJl2zOpiyDZJ0D96QAY/sRnI5NNASj7n9QgUeViPdAsOOIgrHgIMl43MqJSUbuK4tw==", + "dev": true, + "dependencies": { + "@tsparticles/engine": "^3.4.0" + } + }, + "node_modules/@tsparticles/plugin-absorbers": { + "version": "3.4.0", + "resolved": "https://registry.npmjs.org/@tsparticles/plugin-absorbers/-/plugin-absorbers-3.4.0.tgz", + "integrity": "sha512-yFSqlTYWWjItTuVA9VPpGkzA1VqUFhTg/XrrwYRZnIPnfvFMnguwQIPvYkgubEJT9/EurWTyJ/AnCdbi+b7hSQ==", + "dev": true, + "dependencies": { + "@tsparticles/engine": "^3.4.0" + } + }, + "node_modules/@tsparticles/plugin-easing-quad": { + "version": "3.4.0", + "resolved": "https://registry.npmjs.org/@tsparticles/plugin-easing-quad/-/plugin-easing-quad-3.4.0.tgz", + "integrity": "sha512-JgZDeoES8ONrt+pKdDRrUkTKJRfjgRpTlLgr2KqqadI+lSOQIw/QJuXfCu25/47wJLcPUxP1melclp6X/IhNog==", + "dev": true, + "funding": [ + { + "type": "github", + "url": "https://github.com/sponsors/matteobruni" + }, + { + "type": "github", + "url": "https://github.com/sponsors/tsparticles" + }, + { + "type": "buymeacoffee", + "url": "https://www.buymeacoffee.com/matteobruni" + } + ], + "dependencies": { + "@tsparticles/engine": "^3.4.0" + } + }, + "node_modules/@tsparticles/plugin-emitters": { + "version": "3.4.0", + "resolved": "https://registry.npmjs.org/@tsparticles/plugin-emitters/-/plugin-emitters-3.4.0.tgz", + "integrity": "sha512-B3I12hcELE+MDi2jmSFHiC5x8/c4n412VZFOAJcimMfb919gaF1mC/Ac9yR8OCmIdEXYDjf/dyg8xUtSUVlV2g==", + "dev": true, + "dependencies": { + "@tsparticles/engine": "^3.4.0" + } + }, + "node_modules/@tsparticles/plugin-emitters-shape-circle": { + "version": "3.4.0", + "resolved": "https://registry.npmjs.org/@tsparticles/plugin-emitters-shape-circle/-/plugin-emitters-shape-circle-3.4.0.tgz", + "integrity": "sha512-bs8E1GL3n/YlWtDBuBFo8CgT7n5a193uno9EaHLiAwgdFcp5yrz9D+3tX4WtVlAiMnfTdWhanFPoiBYYdACB0w==", + "dev": true, + "funding": [ + { + "type": "github", + "url": "https://github.com/sponsors/matteobruni" + }, + { + "type": "github", + "url": "https://github.com/sponsors/tsparticles" + }, + { + "type": "buymeacoffee", + "url": "https://www.buymeacoffee.com/matteobruni" + } + ], + "dependencies": { + "@tsparticles/engine": "^3.4.0", + "@tsparticles/plugin-emitters": "^3.4.0" + } + }, + "node_modules/@tsparticles/plugin-emitters-shape-square": { + "version": "3.4.0", + "resolved": "https://registry.npmjs.org/@tsparticles/plugin-emitters-shape-square/-/plugin-emitters-shape-square-3.4.0.tgz", + "integrity": "sha512-ne4qKSNbc3fqLFClCUNd7g5qhuChxLVwj+MAe/+4ECYjDQBIrGcJrH2mgmdi5KpOPqKtnIQpC4etwJ084w1UMA==", + "dev": true, + "funding": [ + { + "type": "github", + "url": "https://github.com/sponsors/matteobruni" + }, + { + "type": "github", + "url": "https://github.com/sponsors/tsparticles" + }, + { + "type": "buymeacoffee", + "url": "https://www.buymeacoffee.com/matteobruni" + } + ], + "dependencies": { + "@tsparticles/engine": "^3.4.0", + "@tsparticles/plugin-emitters": "^3.4.0" + } + }, + "node_modules/@tsparticles/shape-circle": { + "version": "3.4.0", + "resolved": "https://registry.npmjs.org/@tsparticles/shape-circle/-/shape-circle-3.4.0.tgz", + "integrity": "sha512-X1ynt8h7bO+xep12Vkxeo2fImbKzLMEZr0qY3vKZzhHcy0/lxoo505pwyVL2+V98eZNOu9fmQM7vlIt/0FGTcg==", + "dev": true, + "dependencies": { + "@tsparticles/engine": "^3.4.0" + } + }, + "node_modules/@tsparticles/shape-emoji": { + "version": "3.4.0", + "resolved": "https://registry.npmjs.org/@tsparticles/shape-emoji/-/shape-emoji-3.4.0.tgz", + "integrity": "sha512-fzuRdwzikhiE7bgagNJVFccvipy7+bcG6PGvfGmJO3FQIwYSTRV2mJVsI/uPQkBUGJyzJPncp7FzEix/D3PDCA==", + "dev": true, + "dependencies": { + "@tsparticles/engine": "^3.4.0" + } + }, + "node_modules/@tsparticles/shape-image": { + "version": "3.4.0", + "resolved": "https://registry.npmjs.org/@tsparticles/shape-image/-/shape-image-3.4.0.tgz", + "integrity": "sha512-US7MYYFP0iMqWs9JiPNmqFSIxmsqkTF6gW6VvDDGtBEUxw3wubSEln3Gc3PQBpa/Tq0jwkUfd1/zkyahOrycUw==", + "dev": true, + "dependencies": { + "@tsparticles/engine": "^3.4.0" + } + }, + "node_modules/@tsparticles/shape-line": { + "version": "3.4.0", + "resolved": "https://registry.npmjs.org/@tsparticles/shape-line/-/shape-line-3.4.0.tgz", + "integrity": "sha512-pXItuUBtIatcQQLp+CS1HZjHtpGVqswFxDaFZv0b9Ulx+7I48i4T5r6LCF2ngo+3xcT+rDdAF/Ca/oCunztBBA==", + "dev": true, + "dependencies": { + "@tsparticles/engine": "^3.4.0" + } + }, + "node_modules/@tsparticles/shape-polygon": { + "version": "3.4.0", + "resolved": "https://registry.npmjs.org/@tsparticles/shape-polygon/-/shape-polygon-3.4.0.tgz", + "integrity": "sha512-qA7nXwWufVZLyS1CT9cFNqcjgLRQQnILc3w1gkH7B80uGYg4bLgQcOZiI7OwifOFkgyI6Mvb0XRntl+NQaDDRA==", + "dev": true, + "dependencies": { + "@tsparticles/engine": "^3.4.0" + } + }, + "node_modules/@tsparticles/shape-square": { + "version": "3.4.0", + "resolved": "https://registry.npmjs.org/@tsparticles/shape-square/-/shape-square-3.4.0.tgz", + "integrity": "sha512-pUXAbSnW5aTMFFjAP3GHMxqbah3ADibuQcEmIgts5tNUKY8Bl0Syx5pllpe81z2AMJCsQncC15/M19DU/H+YXw==", + "dev": true, + "dependencies": { + "@tsparticles/engine": "^3.4.0" + } + }, + "node_modules/@tsparticles/shape-star": { + "version": "3.4.0", + "resolved": "https://registry.npmjs.org/@tsparticles/shape-star/-/shape-star-3.4.0.tgz", + "integrity": "sha512-Gy4FLvVh0qBTVAZbBeV3MfsofYXycxO60/5HqNePsG3+sO/o5DKGZqf/Fw1Cacrb1QYg5A59P/122MZTMnLqEA==", + "dev": true, + "dependencies": { + "@tsparticles/engine": "^3.4.0" + } + }, + "node_modules/@tsparticles/shape-text": { + "version": "3.4.0", + "resolved": "https://registry.npmjs.org/@tsparticles/shape-text/-/shape-text-3.4.0.tgz", + "integrity": "sha512-5Ney+vAoEZ1uM6z1QkJG+za55SdrTn+91ChGnuixUg8dbu+jGro9wqrywigYe6RNNCMxVmmxr455c9ub0hTLqw==", + "dev": true, + "dependencies": { + "@tsparticles/engine": "^3.4.0" + } + }, + "node_modules/@tsparticles/slim": { + "version": "3.4.0", + "resolved": "https://registry.npmjs.org/@tsparticles/slim/-/slim-3.4.0.tgz", + "integrity": "sha512-ukQqSdTzBlZHnD6MwRCdJBWbfgWSRNa4BG+H8IVAU5ggdQ7AbnDsdMG/o49cvstguGsKSbjmHYFNkDYGeKasuw==", + "dev": true, + "funding": [ + { + "type": "github", + "url": "https://github.com/sponsors/matteobruni" + }, + { + "type": "github", + "url": "https://github.com/sponsors/tsparticles" + }, + { + "type": "buymeacoffee", + "url": "https://www.buymeacoffee.com/matteobruni" + } + ], + "dependencies": { + "@tsparticles/basic": "^3.4.0", + "@tsparticles/engine": "^3.4.0", + "@tsparticles/interaction-external-attract": "^3.4.0", + "@tsparticles/interaction-external-bounce": "^3.4.0", + "@tsparticles/interaction-external-bubble": "^3.4.0", + "@tsparticles/interaction-external-connect": "^3.4.0", + "@tsparticles/interaction-external-grab": "^3.4.0", + "@tsparticles/interaction-external-pause": "^3.4.0", + "@tsparticles/interaction-external-push": "^3.4.0", + "@tsparticles/interaction-external-remove": "^3.4.0", + "@tsparticles/interaction-external-repulse": "^3.4.0", + "@tsparticles/interaction-external-slow": "^3.4.0", + "@tsparticles/interaction-particles-attract": "^3.4.0", + "@tsparticles/interaction-particles-collisions": "^3.4.0", + "@tsparticles/interaction-particles-links": "^3.4.0", + "@tsparticles/move-parallax": "^3.4.0", + "@tsparticles/plugin-easing-quad": "^3.4.0", + "@tsparticles/shape-emoji": "^3.4.0", + "@tsparticles/shape-image": "^3.4.0", + "@tsparticles/shape-line": "^3.4.0", + "@tsparticles/shape-polygon": "^3.4.0", + "@tsparticles/shape-square": "^3.4.0", + "@tsparticles/shape-star": "^3.4.0", + "@tsparticles/updater-life": "^3.4.0", + "@tsparticles/updater-rotate": "^3.4.0", + "@tsparticles/updater-stroke-color": "^3.4.0" + } + }, + "node_modules/@tsparticles/updater-color": { + "version": "3.4.0", + "resolved": "https://registry.npmjs.org/@tsparticles/updater-color/-/updater-color-3.4.0.tgz", + "integrity": "sha512-joT5O/78p7n3jBq1aiFEp4wMevv8WtfjBJnODwEUO7aiHRozs9tA05djVLYZ7kjH0bLymJoPwxM46SEGSTsh+g==", + "dev": true, + "dependencies": { + "@tsparticles/engine": "^3.4.0" + } + }, + "node_modules/@tsparticles/updater-destroy": { + "version": "3.4.0", + "resolved": "https://registry.npmjs.org/@tsparticles/updater-destroy/-/updater-destroy-3.4.0.tgz", + "integrity": "sha512-XFyA2PpDAEuct2uACdMO/GE8LmQ54hJenF+tr9/FJKK18vcVJDkn0a36ShIG4zw36ds36mLqkNLcAAjnZ3pigw==", + "dev": true, + "dependencies": { + "@tsparticles/engine": "^3.4.0" + } + }, + "node_modules/@tsparticles/updater-life": { + "version": "3.4.0", + "resolved": "https://registry.npmjs.org/@tsparticles/updater-life/-/updater-life-3.4.0.tgz", + "integrity": "sha512-bFx/3TTNNnWVmHkrfwXVlLc7R8QfbeX+KQ6dy09n+i2Vs3HnQUF7/VITjt0erNzyHfnqh+q+80gCn6X4brvwEQ==", + "dev": true, + "dependencies": { + "@tsparticles/engine": "^3.4.0" + } + }, + "node_modules/@tsparticles/updater-opacity": { + "version": "3.4.0", + "resolved": "https://registry.npmjs.org/@tsparticles/updater-opacity/-/updater-opacity-3.4.0.tgz", + "integrity": "sha512-OCWbebZykDh8ZbTiTQX+pBRXHfTMMJpNXbFps4lTSHXHMDsbEMl5a3/TEFeUk3rd0wkiRSCjPUSGKupoU5B14w==", + "dev": true, + "dependencies": { + "@tsparticles/engine": "^3.4.0" + } + }, + "node_modules/@tsparticles/updater-out-modes": { + "version": "3.4.0", + "resolved": "https://registry.npmjs.org/@tsparticles/updater-out-modes/-/updater-out-modes-3.4.0.tgz", + "integrity": "sha512-i80MSXpnfivKlfA0FbAxk2CfZGNG3rPNtx5Pz/ZCDQ71j1YFjztdwfugp9oueu/sLfOSw4hIKfyR062zpgZp6Q==", + "dev": true, + "dependencies": { + "@tsparticles/engine": "^3.4.0" + } + }, + "node_modules/@tsparticles/updater-roll": { + "version": "3.4.0", + "resolved": "https://registry.npmjs.org/@tsparticles/updater-roll/-/updater-roll-3.4.0.tgz", + "integrity": "sha512-PhkZ7gJZTrAE3S2nYPmxXDCCxXcy7vfqosp4LnKyOLbZH1YwMy+2oltN6Ni22lMz794C2q+zURyZBu2oeH+rgA==", + "dev": true, + "dependencies": { + "@tsparticles/engine": "^3.4.0" + } + }, + "node_modules/@tsparticles/updater-rotate": { + "version": "3.4.0", + "resolved": "https://registry.npmjs.org/@tsparticles/updater-rotate/-/updater-rotate-3.4.0.tgz", + "integrity": "sha512-BKmzN8YLSUPe6OngmhmjPCBJ2RpBi88nfoNJekZnVJpbRses1pV632EaOIAEVT1xsUrwVhvsXYa9Sv5iZxfIRg==", + "dev": true, + "dependencies": { + "@tsparticles/engine": "^3.4.0" + } + }, + "node_modules/@tsparticles/updater-size": { + "version": "3.4.0", + "resolved": "https://registry.npmjs.org/@tsparticles/updater-size/-/updater-size-3.4.0.tgz", + "integrity": "sha512-3z7INo2E7HR+ps8V490mOiLcCaFmUJFgObXBO3lF6uZ1xe6SfvVsX2r1HpQLwIpq7Ph2ZqQ4tj8tBPyKtada7g==", + "dev": true, + "dependencies": { + "@tsparticles/engine": "^3.4.0" + } + }, + "node_modules/@tsparticles/updater-stroke-color": { + "version": "3.4.0", + "resolved": "https://registry.npmjs.org/@tsparticles/updater-stroke-color/-/updater-stroke-color-3.4.0.tgz", + "integrity": "sha512-5pe/777vPZgzlNBkh8GQ3fjT6273wcwlBeq4UkDA/q6bI867d8W+Fi8yUsqfdiS6B5tKSvVsI8rFrfwjEvW0pg==", + "dev": true, + "dependencies": { + "@tsparticles/engine": "^3.4.0" + } + }, + "node_modules/@tsparticles/updater-tilt": { + "version": "3.4.0", + "resolved": "https://registry.npmjs.org/@tsparticles/updater-tilt/-/updater-tilt-3.4.0.tgz", + "integrity": "sha512-thrQC37W2Psdr7arqxMeJ0iRM39y4JTRd9cQQVYCIhYkkQeSC6obujNZb+1BDjNM93HduSHKSK1aSXS0TCEWmg==", + "dev": true, + "dependencies": { + "@tsparticles/engine": "^3.4.0" + } + }, + "node_modules/@tsparticles/updater-twinkle": { + "version": "3.4.0", + "resolved": "https://registry.npmjs.org/@tsparticles/updater-twinkle/-/updater-twinkle-3.4.0.tgz", + "integrity": "sha512-EQlEO9YRPBXFBu6Yo9z4R0KZuJJc3hZrBYY5g9t/hWyxwiFY2RlDnRpK9h02SEa/qXwegm96Ka60zs+P2OFzzw==", + "dev": true, + "dependencies": { + "@tsparticles/engine": "^3.4.0" + } + }, + "node_modules/@tsparticles/updater-wobble": { + "version": "3.4.0", + "resolved": "https://registry.npmjs.org/@tsparticles/updater-wobble/-/updater-wobble-3.4.0.tgz", + "integrity": "sha512-/+u3ZuyFQW8yH3uY6qEa5zsQi41JSbgqltcrjAPCgcOEtfwXaTUI/XqjMlppkoyA58lfA8nJhWZWVNTjFY3x7g==", + "dev": true, + "dependencies": { + "@tsparticles/engine": "^3.4.0" + } + }, + "node_modules/@tsparticles/vue3": { + "version": "3.0.1", + "resolved": "https://registry.npmjs.org/@tsparticles/vue3/-/vue3-3.0.1.tgz", + "integrity": "sha512-BxaSZ0wtxq33SDsrqLkLWoV88Jd5BnBoYjyVhKSNzOLOesCiG8Z5WQC1QZGTez79l/gBe0xaCDF0ng1e2iKJvA==", + "dev": true, + "funding": [ + { + "type": "github", + "url": "https://github.com/sponsors/matteobruni" + }, + { + "type": "github", + "url": "https://github.com/sponsors/tsparticles" + }, + { + "type": "buymeacoffee", + "url": "https://www.buymeacoffee.com/matteobruni" + } + ], + "dependencies": { + "@tsparticles/engine": "^3.0.3", + "vue": "^3.3.13" + } + }, + "node_modules/@tsparticles/vue3/node_modules/@vue/compiler-core": { + "version": "3.4.27", + "resolved": "https://registry.npmjs.org/@vue/compiler-core/-/compiler-core-3.4.27.tgz", + "integrity": "sha512-E+RyqY24KnyDXsCuQrI+mlcdW3ALND6U7Gqa/+bVwbcpcR3BRRIckFoz7Qyd4TTlnugtwuI7YgjbvsLmxb+yvg==", + "dev": true, + "dependencies": { + "@babel/parser": "^7.24.4", + "@vue/shared": "3.4.27", + "entities": "^4.5.0", + "estree-walker": "^2.0.2", + "source-map-js": "^1.2.0" + } + }, + "node_modules/@tsparticles/vue3/node_modules/@vue/compiler-dom": { + "version": "3.4.27", + "resolved": "https://registry.npmjs.org/@vue/compiler-dom/-/compiler-dom-3.4.27.tgz", + "integrity": "sha512-kUTvochG/oVgE1w5ViSr3KUBh9X7CWirebA3bezTbB5ZKBQZwR2Mwj9uoSKRMFcz4gSMzzLXBPD6KpCLb9nvWw==", + "dev": true, + "dependencies": { + "@vue/compiler-core": "3.4.27", + "@vue/shared": "3.4.27" + } + }, + "node_modules/@tsparticles/vue3/node_modules/@vue/compiler-sfc": { + "version": "3.4.27", + "resolved": "https://registry.npmjs.org/@vue/compiler-sfc/-/compiler-sfc-3.4.27.tgz", + "integrity": "sha512-nDwntUEADssW8e0rrmE0+OrONwmRlegDA1pD6QhVeXxjIytV03yDqTey9SBDiALsvAd5U4ZrEKbMyVXhX6mCGA==", + "dev": true, + "dependencies": { + "@babel/parser": "^7.24.4", + "@vue/compiler-core": "3.4.27", + "@vue/compiler-dom": "3.4.27", + "@vue/compiler-ssr": "3.4.27", + "@vue/shared": "3.4.27", + "estree-walker": "^2.0.2", + "magic-string": "^0.30.10", + "postcss": "^8.4.38", + "source-map-js": "^1.2.0" + } + }, + "node_modules/@tsparticles/vue3/node_modules/@vue/compiler-ssr": { + "version": "3.4.27", + "resolved": "https://registry.npmjs.org/@vue/compiler-ssr/-/compiler-ssr-3.4.27.tgz", + "integrity": "sha512-CVRzSJIltzMG5FcidsW0jKNQnNRYC8bT21VegyMMtHmhW3UOI7knmUehzswXLrExDLE6lQCZdrhD4ogI7c+vuw==", + "dev": true, + "dependencies": { + "@vue/compiler-dom": "3.4.27", + "@vue/shared": "3.4.27" + } + }, + "node_modules/@tsparticles/vue3/node_modules/@vue/reactivity": { + "version": "3.4.27", + "resolved": "https://registry.npmjs.org/@vue/reactivity/-/reactivity-3.4.27.tgz", + "integrity": "sha512-kK0g4NknW6JX2yySLpsm2jlunZJl2/RJGZ0H9ddHdfBVHcNzxmQ0sS0b09ipmBoQpY8JM2KmUw+a6sO8Zo+zIA==", + "dev": true, + "dependencies": { + "@vue/shared": "3.4.27" + } + }, + "node_modules/@tsparticles/vue3/node_modules/@vue/runtime-core": { + "version": "3.4.27", + "resolved": "https://registry.npmjs.org/@vue/runtime-core/-/runtime-core-3.4.27.tgz", + "integrity": "sha512-7aYA9GEbOOdviqVvcuweTLe5Za4qBZkUY7SvET6vE8kyypxVgaT1ixHLg4urtOlrApdgcdgHoTZCUuTGap/5WA==", + "dev": true, + "dependencies": { + "@vue/reactivity": "3.4.27", + "@vue/shared": "3.4.27" + } + }, + "node_modules/@tsparticles/vue3/node_modules/@vue/runtime-dom": { + "version": "3.4.27", + "resolved": "https://registry.npmjs.org/@vue/runtime-dom/-/runtime-dom-3.4.27.tgz", + "integrity": "sha512-ScOmP70/3NPM+TW9hvVAz6VWWtZJqkbdf7w6ySsws+EsqtHvkhxaWLecrTorFxsawelM5Ys9FnDEMt6BPBDS0Q==", + "dev": true, + "dependencies": { + "@vue/runtime-core": "3.4.27", + "@vue/shared": "3.4.27", + "csstype": "^3.1.3" + } + }, + "node_modules/@tsparticles/vue3/node_modules/@vue/server-renderer": { + "version": "3.4.27", + "resolved": "https://registry.npmjs.org/@vue/server-renderer/-/server-renderer-3.4.27.tgz", + "integrity": "sha512-dlAMEuvmeA3rJsOMJ2J1kXU7o7pOxgsNHVr9K8hB3ImIkSuBrIdy0vF66h8gf8Tuinf1TK3mPAz2+2sqyf3KzA==", + "dev": true, + "dependencies": { + "@vue/compiler-ssr": "3.4.27", + "@vue/shared": "3.4.27" + }, + "peerDependencies": { + "vue": "3.4.27" + } + }, + "node_modules/@tsparticles/vue3/node_modules/@vue/shared": { + "version": "3.4.27", + "resolved": "https://registry.npmjs.org/@vue/shared/-/shared-3.4.27.tgz", + "integrity": "sha512-DL3NmY2OFlqmYYrzp39yi3LDkKxa5vZVwxWdQ3rG0ekuWscHraeIbnI8t+aZK7qhYqEqWKTUdijadunb9pnrgA==", + "dev": true + }, + "node_modules/@tsparticles/vue3/node_modules/vue": { + "version": "3.4.27", + "resolved": "https://registry.npmjs.org/vue/-/vue-3.4.27.tgz", + "integrity": "sha512-8s/56uK6r01r1icG/aEOHqyMVxd1bkYcSe9j8HcKtr/xTOFWvnzIVTehNW+5Yt89f+DLBe4A569pnZLS5HzAMA==", + "dev": true, + "dependencies": { + "@vue/compiler-dom": "3.4.27", + "@vue/compiler-sfc": "3.4.27", + "@vue/runtime-dom": "3.4.27", + "@vue/server-renderer": "3.4.27", + "@vue/shared": "3.4.27" + }, + "peerDependencies": { + "typescript": "*" + }, + "peerDependenciesMeta": { + "typescript": { + "optional": true + } + } + }, "node_modules/@types/codemirror": { "version": "5.60.5", "resolved": "https://registry.npmjs.org/@types/codemirror/-/codemirror-5.60.5.tgz", @@ -1110,10 +1765,10 @@ "integrity": "sha512-HnMWQkLJEf/PnxZIfbm0yGJRRZYYMhb++O9M36UCTA9z53uPvVoSlAwJr3XOpDEryb7Hwl1qAx/MV6YIW1RXxg==", "dev": true }, - "node_modules/@types/offscreencanvas": { - "version": "2019.7.0", - "resolved": "https://registry.npmjs.org/@types/offscreencanvas/-/offscreencanvas-2019.7.0.tgz", - "integrity": "sha512-PGcyveRIpL1XIqK8eBsmRBt76eFgtzuPiSTyKHZxnGemp2yzGzWpjYKAfK3wIMiU7eH+851yEpiuP8JZerTmWg==", + "node_modules/@types/stats.js": { + "version": "0.17.3", + "resolved": "https://registry.npmjs.org/@types/stats.js/-/stats.js-0.17.3.tgz", + "integrity": "sha512-pXNfAD3KHOdif9EQXZ9deK82HVNaXP5ZIF5RP2QG6OQFNTaY2YIetfrE9t528vEreGQvEPRDDc8muaoYeK0SxQ==", "dev": true }, "node_modules/@types/tern": { @@ -1126,12 +1781,15 @@ } }, "node_modules/@types/three": { - "version": "0.142.0", - "resolved": "https://registry.npmjs.org/@types/three/-/three-0.142.0.tgz", - "integrity": "sha512-YNVnlqthfgqsxKuSNbT/G2r+ha/6x+aJm7kvjT+sxa4jUROw/KOPm5xzGj33sk1+Librg6NwH/wJ6LCDX33UZg==", + "version": "0.156.0", + "resolved": "https://registry.npmjs.org/@types/three/-/three-0.156.0.tgz", + "integrity": "sha512-733bXDSRdlrxqOmQuOmfC1UBRuJ2pREPk8sWnx9MtIJEVDQMx8U0NQO5MVVaOrjzDPyLI+cFPim2X/ss9v0+LQ==", "dev": true, "dependencies": { - "@types/webxr": "*" + "@types/stats.js": "*", + "@types/webxr": "*", + "fflate": "~0.6.10", + "meshoptimizer": "~0.18.1" } }, "node_modules/@types/web-bluetooth": { @@ -1141,9 +1799,9 @@ "dev": true }, "node_modules/@types/webxr": { - "version": "0.5.0", - "resolved": "https://registry.npmjs.org/@types/webxr/-/webxr-0.5.0.tgz", - "integrity": "sha512-IUMDPSXnYIbEO2IereEFcgcqfDREOgmbGqtrMpVPpACTU6pltYLwHgVkrnYv0XhWEcjio9sYEfIEzgn3c7nDqA==", + "version": "0.5.15", + "resolved": "https://registry.npmjs.org/@types/webxr/-/webxr-0.5.15.tgz", + "integrity": "sha512-nC9116Gd4N+CqTxqo6gvCfhAMAzgRcfS8ZsciNodHq8uwW4JCVKwhagw8yN0XmC7mHrLnWqniJpoVEiR+72Drw==", "dev": true }, "node_modules/@vitejs/plugin-vue": { @@ -1750,9 +2408,9 @@ } }, "node_modules/caniuse-lite": { - "version": "1.0.30001566", - "resolved": "https://registry.npmjs.org/caniuse-lite/-/caniuse-lite-1.0.30001566.tgz", - "integrity": "sha512-ggIhCsTxmITBAMmK8yZjEhCO5/47jKXPu6Dha/wuCS4JePVL+3uiDEBuhu2aIoT+bqTOR8L76Ip1ARL9xYsEJA==", + "version": "1.0.30001620", + "resolved": "https://registry.npmjs.org/caniuse-lite/-/caniuse-lite-1.0.30001620.tgz", + "integrity": "sha512-WJvYsOjd1/BYUY6SNGUosK9DUidBPDTnOARHp3fSmFO1ekdxaY6nKRttEVrfMmYi80ctS0kz1wiWmm14fVc3ew==", "dev": true, "funding": [ { @@ -1937,9 +2595,9 @@ } }, "node_modules/csstype": { - "version": "3.1.2", - "resolved": "https://registry.npmjs.org/csstype/-/csstype-3.1.2.tgz", - "integrity": "sha512-I7K1Uu0MBPzaFKg4nI5Q7Vs2t+3gWWW648spaF+Rg7pI9ds18Ugn+lvg4SHczUdKlHI5LWBXyqfS8+DufyBsgQ==", + "version": "3.1.3", + "resolved": "https://registry.npmjs.org/csstype/-/csstype-3.1.3.tgz", + "integrity": "sha512-M1uQkMl8rQK/szD0LNhtqxIPLpimGm8sOBwU7lLnCpSbTyY3yeU1Vc7l4KT5zT4s/yOxHH5O7tIuuLOCnLADRw==", "dev": true }, "node_modules/date-fns": { @@ -2100,6 +2758,18 @@ "integrity": "sha512-MSjYzcWNOA0ewAHpz0MxpYFvwg6yjy1NG3xteoqz644VCo/RPgnr1/GGt+ic3iJTzQ8Eu3TdM14SawnVUmGE6A==", "dev": true }, + "node_modules/entities": { + "version": "4.5.0", + "resolved": "https://registry.npmjs.org/entities/-/entities-4.5.0.tgz", + "integrity": "sha512-V0hjH4dGPh9Ao5p0MoRY6BVqtwCjhz6vI5LT8AJ55H+4g9/4vbHx1I54fS0XuclLhDHArPQCiMjDxjaL8fPxhw==", + "dev": true, + "engines": { + "node": ">=0.12" + }, + "funding": { + "url": "https://github.com/fb55/entities?sponsor=1" + } + }, "node_modules/esbuild": { "version": "0.18.20", "resolved": "https://registry.npmjs.org/esbuild/-/esbuild-0.18.20.tgz", @@ -2415,6 +3085,12 @@ "reusify": "^1.0.4" } }, + "node_modules/fflate": { + "version": "0.6.10", + "resolved": "https://registry.npmjs.org/fflate/-/fflate-0.6.10.tgz", + "integrity": "sha512-IQrh3lEPM93wVCEczc9SaAOvkmcoQn/G8Bo1e8ZPlY3X3bnAxWaBdvTdvM1hP62iZp0BXWDy4vTAy4fF0+Dlpg==", + "dev": true + }, "node_modules/file-entry-cache": { "version": "6.0.1", "resolved": "https://registry.npmjs.org/file-entry-cache/-/file-entry-cache-6.0.1.tgz", @@ -3013,15 +3689,12 @@ } }, "node_modules/magic-string": { - "version": "0.30.3", - "resolved": "https://registry.npmjs.org/magic-string/-/magic-string-0.30.3.tgz", - "integrity": "sha512-B7xGbll2fG/VjP+SWg4sX3JynwIU0mjoTc6MPpKNuIvftk6u6vqhDnk1R80b8C2GBR6ywqy+1DcKBrevBg+bmw==", + "version": "0.30.10", + "resolved": "https://registry.npmjs.org/magic-string/-/magic-string-0.30.10.tgz", + "integrity": "sha512-iIRwTIf0QKV3UAnYK4PU8uiEc4SRh5jX0mwpIwETPpHdhVM4f53RSwS/vXvN1JhGX+Cs7B8qIq3d6AH49O5fAQ==", "dev": true, "dependencies": { "@jridgewell/sourcemap-codec": "^1.4.15" - }, - "engines": { - "node": ">=12" } }, "node_modules/marked": { @@ -3045,6 +3718,12 @@ "node": ">= 8" } }, + "node_modules/meshoptimizer": { + "version": "0.18.1", + "resolved": "https://registry.npmjs.org/meshoptimizer/-/meshoptimizer-0.18.1.tgz", + "integrity": "sha512-ZhoIoL7TNV4s5B6+rx5mC//fw8/POGyNxS/DZyCJeiZ12ScLfVwRE/GfsxwiTkMYYD5DmK2/JXnEVXqL4rF+Sw==", + "dev": true + }, "node_modules/micromatch": { "version": "4.0.5", "resolved": "https://registry.npmjs.org/micromatch/-/micromatch-4.0.5.tgz", @@ -3139,9 +3818,9 @@ } }, "node_modules/nanoid": { - "version": "3.3.6", - "resolved": "https://registry.npmjs.org/nanoid/-/nanoid-3.3.6.tgz", - "integrity": "sha512-BGcqMMJuToF7i1rt+2PWSNVnWIkGCU78jBG3RxO/bZlnZPK2Cmi2QaffxGO/2RvWi9sL+FAiRiXMgsyxQ1DIDA==", + "version": "3.3.7", + "resolved": "https://registry.npmjs.org/nanoid/-/nanoid-3.3.7.tgz", + "integrity": "sha512-eSRppjcPIatRIMC1U6UngP8XFcz8MQWGQdt1MTBQ7NaAmvXDfvNxbvWV3x2y6CdEUciCSsDHDQZbhYaB8QEo2g==", "dev": true, "funding": [ { @@ -3403,9 +4082,9 @@ } }, "node_modules/postcss": { - "version": "8.4.29", - "resolved": "https://registry.npmjs.org/postcss/-/postcss-8.4.29.tgz", - "integrity": "sha512-cbI+jaqIeu/VGqXEarWkRCCffhjgXc0qjBtXpqJhTBohMUjUQnbBr0xqX3vEKudc4iviTewcJo5ajcec5+wdJw==", + "version": "8.4.38", + "resolved": "https://registry.npmjs.org/postcss/-/postcss-8.4.38.tgz", + "integrity": "sha512-Wglpdk03BSfXkHoQa3b/oulrotAkwrlLDRSOb9D0bN86FdRyE9lppSp33aHNPgBa0JKCoB+drFLZkQoRRYae5A==", "dev": true, "funding": [ { @@ -3422,9 +4101,9 @@ } ], "dependencies": { - "nanoid": "^3.3.6", + "nanoid": "^3.3.7", "picocolors": "^1.0.0", - "source-map-js": "^1.0.2" + "source-map-js": "^1.2.0" }, "engines": { "node": "^10 || ^12 || >=14" @@ -3830,23 +4509,20 @@ } }, "node_modules/skinview-utils": { - "version": "0.7.0", - "resolved": "https://registry.npmjs.org/skinview-utils/-/skinview-utils-0.7.0.tgz", - "integrity": "sha512-ecbbUp0AuvZX5fCIOOwbNPxr/JIbrAGhCcdLcww0Ov9PbvAbeYjNDSIu1ebCJBe4CWc6ZYYn8MFNp68DDta0iQ==", - "dev": true, - "dependencies": { - "@types/offscreencanvas": "^2019.6.4" - } + "version": "0.7.1", + "resolved": "https://registry.npmjs.org/skinview-utils/-/skinview-utils-0.7.1.tgz", + "integrity": "sha512-4eLrMqR526ehlZbsd8SuZ/CHpS9GiH0xUMoV+PYlJVi95ZFz5HJu7Spt5XYa72DRS7wgt5qquvHZf0XZJgmu9Q==", + "dev": true }, "node_modules/skinview3d": { - "version": "2.3.0-alpha.2", - "resolved": "https://registry.npmjs.org/skinview3d/-/skinview3d-2.3.0-alpha.2.tgz", - "integrity": "sha512-xmMaL2Z2cM237q4itjtFxKNkPaDyuJAvp0j53vWKJCXfVGM1j1mZ1yTjfuaxKiYkhGR1rJ9/myZYF3jhCIklaQ==", + "version": "3.0.1", + "resolved": "https://registry.npmjs.org/skinview3d/-/skinview3d-3.0.1.tgz", + "integrity": "sha512-2LUSkzGxlZrTQelGT10jcW4TLiFTg5aZqXMEuqAFoWtk3qtaNu0qRFtwK5dN8zEXyKUJ3xlxah5eGtKY/NifQg==", "dev": true, "dependencies": { - "@types/three": "^0.142.0", - "skinview-utils": "^0.7.0", - "three": "^0.142.0" + "@types/three": "^0.156.0", + "skinview-utils": "^0.7.1", + "three": "^0.156.1" } }, "node_modules/slash": { @@ -3865,9 +4541,9 @@ "dev": true }, "node_modules/source-map-js": { - "version": "1.0.2", - "resolved": "https://registry.npmjs.org/source-map-js/-/source-map-js-1.0.2.tgz", - "integrity": "sha512-R0XvVJ9WusLiqTCEiGCmICCMplcCkIwwR11mOSD9CR5u+IXYdiseeEuXCVAjS54zqwkLcPNnmU4OeJ6tUrWhDw==", + "version": "1.2.0", + "resolved": "https://registry.npmjs.org/source-map-js/-/source-map-js-1.2.0.tgz", + "integrity": "sha512-itJW8lvSA0TXEphiRoawsCksnlf8SyvmFzIhltqAHluXd88pkCd+cXJVHTDwdCr0IzwptSm035IHQktUu1QUMg==", "dev": true, "engines": { "node": ">=0.10.0" @@ -4125,9 +4801,9 @@ } }, "node_modules/three": { - "version": "0.142.0", - "resolved": "https://registry.npmjs.org/three/-/three-0.142.0.tgz", - "integrity": "sha512-ESjPO+3geFr+ZUfVMpMnF/eVU2uJPOh0e2ZpMFqjNca1wApS9lJb7E4MjwGIczgt9iuKd8PEm6Pfgp2bJ92Xtg==", + "version": "0.156.1", + "resolved": "https://registry.npmjs.org/three/-/three-0.156.1.tgz", + "integrity": "sha512-kP7H0FK9d/k6t/XvQ9FO6i+QrePoDcNhwl0I02+wmUJRNSLCUIDMcfObnzQvxb37/0Uc9TDT0T1HgsRRrO6SYQ==", "dev": true }, "node_modules/tippy.js": { @@ -4174,362 +4850,9 @@ "dev": true }, "node_modules/tsparticles": { - "version": "2.12.0", - "resolved": "https://registry.npmjs.org/tsparticles/-/tsparticles-2.12.0.tgz", - "integrity": "sha512-aw77llkaEhcKYUHuRlggA6SB1Dpa814/nrStp9USGiDo5QwE1Ckq30QAgdXU6GRvnblUFsiO750ZuLQs5Y0tVw==", - "dev": true, - "funding": [ - { - "type": "github", - "url": "https://github.com/sponsors/matteobruni" - }, - { - "type": "github", - "url": "https://github.com/sponsors/tsparticles" - }, - { - "type": "buymeacoffee", - "url": "https://www.buymeacoffee.com/matteobruni" - } - ], - "dependencies": { - "tsparticles-engine": "^2.12.0", - "tsparticles-interaction-external-trail": "^2.12.0", - "tsparticles-plugin-absorbers": "^2.12.0", - "tsparticles-plugin-emitters": "^2.12.0", - "tsparticles-slim": "^2.12.0", - "tsparticles-updater-destroy": "^2.12.0", - "tsparticles-updater-roll": "^2.12.0", - "tsparticles-updater-tilt": "^2.12.0", - "tsparticles-updater-twinkle": "^2.12.0", - "tsparticles-updater-wobble": "^2.12.0" - } - }, - "node_modules/tsparticles-basic": { - "version": "2.12.0", - "resolved": "https://registry.npmjs.org/tsparticles-basic/-/tsparticles-basic-2.12.0.tgz", - "integrity": "sha512-pN6FBpL0UsIUXjYbiui5+IVsbIItbQGOlwyGV55g6IYJBgdTNXgFX0HRYZGE9ZZ9psEXqzqwLM37zvWnb5AG9g==", - "dev": true, - "funding": [ - { - "type": "github", - "url": "https://github.com/sponsors/matteobruni" - }, - { - "type": "github", - "url": "https://github.com/sponsors/tsparticles" - }, - { - "type": "buymeacoffee", - "url": "https://www.buymeacoffee.com/matteobruni" - } - ], - "dependencies": { - "tsparticles-engine": "^2.12.0", - "tsparticles-move-base": "^2.12.0", - "tsparticles-shape-circle": "^2.12.0", - "tsparticles-updater-color": "^2.12.0", - "tsparticles-updater-opacity": "^2.12.0", - "tsparticles-updater-out-modes": "^2.12.0", - "tsparticles-updater-size": "^2.12.0" - } - }, - "node_modules/tsparticles-engine": { - "version": "2.12.0", - "resolved": "https://registry.npmjs.org/tsparticles-engine/-/tsparticles-engine-2.12.0.tgz", - "integrity": "sha512-ZjDIYex6jBJ4iMc9+z0uPe7SgBnmb6l+EJm83MPIsOny9lPpetMsnw/8YJ3xdxn8hV+S3myTpTN1CkOVmFv0QQ==", - "dev": true, - "funding": [ - { - "type": "github", - "url": "https://github.com/sponsors/matteobruni" - }, - { - "type": "github", - "url": "https://github.com/sponsors/tsparticles" - }, - { - "type": "buymeacoffee", - "url": "https://www.buymeacoffee.com/matteobruni" - } - ], - "hasInstallScript": true - }, - "node_modules/tsparticles-interaction-external-attract": { - "version": "2.12.0", - "resolved": "https://registry.npmjs.org/tsparticles-interaction-external-attract/-/tsparticles-interaction-external-attract-2.12.0.tgz", - "integrity": "sha512-0roC6D1QkFqMVomcMlTaBrNVjVOpyNzxIUsjMfshk2wUZDAvTNTuWQdUpmsLS4EeSTDN3rzlGNnIuuUQqyBU5w==", - "dev": true, - "dependencies": { - "tsparticles-engine": "^2.12.0" - } - }, - "node_modules/tsparticles-interaction-external-bounce": { - "version": "2.12.0", - "resolved": "https://registry.npmjs.org/tsparticles-interaction-external-bounce/-/tsparticles-interaction-external-bounce-2.12.0.tgz", - "integrity": "sha512-MMcqKLnQMJ30hubORtdq+4QMldQ3+gJu0bBYsQr9BsThsh8/V0xHc1iokZobqHYVP5tV77mbFBD8Z7iSCf0TMQ==", - "dev": true, - "dependencies": { - "tsparticles-engine": "^2.12.0" - } - }, - "node_modules/tsparticles-interaction-external-bubble": { - "version": "2.12.0", - "resolved": "https://registry.npmjs.org/tsparticles-interaction-external-bubble/-/tsparticles-interaction-external-bubble-2.12.0.tgz", - "integrity": "sha512-5kImCSCZlLNccXOHPIi2Yn+rQWTX3sEa/xCHwXW19uHxtILVJlnAweayc8+Zgmb7mo0DscBtWVFXHPxrVPFDUA==", - "dev": true, - "dependencies": { - "tsparticles-engine": "^2.12.0" - } - }, - "node_modules/tsparticles-interaction-external-connect": { - "version": "2.12.0", - "resolved": "https://registry.npmjs.org/tsparticles-interaction-external-connect/-/tsparticles-interaction-external-connect-2.12.0.tgz", - "integrity": "sha512-ymzmFPXz6AaA1LAOL5Ihuy7YSQEW8MzuSJzbd0ES13U8XjiU3HlFqlH6WGT1KvXNw6WYoqrZt0T3fKxBW3/C3A==", - "dev": true, - "dependencies": { - "tsparticles-engine": "^2.12.0" - } - }, - "node_modules/tsparticles-interaction-external-grab": { - "version": "2.12.0", - "resolved": "https://registry.npmjs.org/tsparticles-interaction-external-grab/-/tsparticles-interaction-external-grab-2.12.0.tgz", - "integrity": "sha512-iQF/A947hSfDNqAjr49PRjyQaeRkYgTYpfNmAf+EfME8RsbapeP/BSyF6mTy0UAFC0hK2A2Hwgw72eT78yhXeQ==", - "dev": true, - "dependencies": { - "tsparticles-engine": "^2.12.0" - } - }, - "node_modules/tsparticles-interaction-external-pause": { - "version": "2.12.0", - "resolved": "https://registry.npmjs.org/tsparticles-interaction-external-pause/-/tsparticles-interaction-external-pause-2.12.0.tgz", - "integrity": "sha512-4SUikNpsFROHnRqniL+uX2E388YTtfRWqqqZxRhY0BrijH4z04Aii3YqaGhJxfrwDKkTQlIoM2GbFT552QZWjw==", - "dev": true, - "dependencies": { - "tsparticles-engine": "^2.12.0" - } - }, - "node_modules/tsparticles-interaction-external-push": { - "version": "2.12.0", - "resolved": "https://registry.npmjs.org/tsparticles-interaction-external-push/-/tsparticles-interaction-external-push-2.12.0.tgz", - "integrity": "sha512-kqs3V0dgDKgMoeqbdg+cKH2F+DTrvfCMrPF1MCCUpBCqBiH+TRQpJNNC86EZYHfNUeeLuIM3ttWwIkk2hllR/Q==", - "dev": true, - "dependencies": { - "tsparticles-engine": "^2.12.0" - } - }, - "node_modules/tsparticles-interaction-external-remove": { - "version": "2.12.0", - "resolved": "https://registry.npmjs.org/tsparticles-interaction-external-remove/-/tsparticles-interaction-external-remove-2.12.0.tgz", - "integrity": "sha512-2eNIrv4m1WB2VfSVj46V2L/J9hNEZnMgFc+A+qmy66C8KzDN1G8aJUAf1inW8JVc0lmo5+WKhzex4X0ZSMghBg==", - "dev": true, - "dependencies": { - "tsparticles-engine": "^2.12.0" - } - }, - "node_modules/tsparticles-interaction-external-repulse": { - "version": "2.12.0", - "resolved": "https://registry.npmjs.org/tsparticles-interaction-external-repulse/-/tsparticles-interaction-external-repulse-2.12.0.tgz", - "integrity": "sha512-rSzdnmgljeBCj5FPp4AtGxOG9TmTsK3AjQW0vlyd1aG2O5kSqFjR+FuT7rfdSk9LEJGH5SjPFE6cwbuy51uEWA==", - "dev": true, - "dependencies": { - "tsparticles-engine": "^2.12.0" - } - }, - "node_modules/tsparticles-interaction-external-slow": { - "version": "2.12.0", - "resolved": "https://registry.npmjs.org/tsparticles-interaction-external-slow/-/tsparticles-interaction-external-slow-2.12.0.tgz", - "integrity": "sha512-2IKdMC3om7DttqyroMtO//xNdF0NvJL/Lx7LDo08VpfTgJJozxU+JAUT8XVT7urxhaDzbxSSIROc79epESROtA==", - "dev": true, - "dependencies": { - "tsparticles-engine": "^2.12.0" - } - }, - "node_modules/tsparticles-interaction-external-trail": { - "version": "2.12.0", - "resolved": "https://registry.npmjs.org/tsparticles-interaction-external-trail/-/tsparticles-interaction-external-trail-2.12.0.tgz", - "integrity": "sha512-LKSapU5sPTaZqYx+y5VJClj0prlV7bswplSFQaIW1raXkvsk45qir2AVcpP5JUhZSFSG+SwsHr+qCgXhNeN1KA==", - "dev": true, - "dependencies": { - "tsparticles-engine": "^2.12.0" - } - }, - "node_modules/tsparticles-interaction-particles-attract": { - "version": "2.12.0", - "resolved": "https://registry.npmjs.org/tsparticles-interaction-particles-attract/-/tsparticles-interaction-particles-attract-2.12.0.tgz", - "integrity": "sha512-Hl8qwuwF9aLq3FOkAW+Zomu7Gb8IKs6Y3tFQUQScDmrrSCaeRt2EGklAiwgxwgntmqzL7hbMWNx06CHHcUQKdQ==", - "dev": true, - "dependencies": { - "tsparticles-engine": "^2.12.0" - } - }, - "node_modules/tsparticles-interaction-particles-collisions": { - "version": "2.12.0", - "resolved": "https://registry.npmjs.org/tsparticles-interaction-particles-collisions/-/tsparticles-interaction-particles-collisions-2.12.0.tgz", - "integrity": "sha512-Se9nPWlyPxdsnHgR6ap4YUImAu3W5MeGKJaQMiQpm1vW8lSMOUejI1n1ioIaQth9weKGKnD9rvcNn76sFlzGBA==", - "dev": true, - "dependencies": { - "tsparticles-engine": "^2.12.0" - } - }, - "node_modules/tsparticles-interaction-particles-links": { - "version": "2.12.0", - "resolved": "https://registry.npmjs.org/tsparticles-interaction-particles-links/-/tsparticles-interaction-particles-links-2.12.0.tgz", - "integrity": "sha512-e7I8gRs4rmKfcsHONXMkJnymRWpxHmeaJIo4g2NaDRjIgeb2AcJSWKWZvrsoLnm7zvaf/cMQlbN6vQwCixYq3A==", - "dev": true, - "dependencies": { - "tsparticles-engine": "^2.12.0" - } - }, - "node_modules/tsparticles-move-base": { - "version": "2.12.0", - "resolved": "https://registry.npmjs.org/tsparticles-move-base/-/tsparticles-move-base-2.12.0.tgz", - "integrity": "sha512-oSogCDougIImq+iRtIFJD0YFArlorSi8IW3HD2gO3USkH+aNn3ZqZNTqp321uB08K34HpS263DTbhLHa/D6BWw==", - "dev": true, - "dependencies": { - "tsparticles-engine": "^2.12.0" - } - }, - "node_modules/tsparticles-move-parallax": { - "version": "2.12.0", - "resolved": "https://registry.npmjs.org/tsparticles-move-parallax/-/tsparticles-move-parallax-2.12.0.tgz", - "integrity": "sha512-58CYXaX8Ih5rNtYhpnH0YwU4Ks7gVZMREGUJtmjhuYN+OFr9FVdF3oDIJ9N6gY5a5AnAKz8f5j5qpucoPRcYrQ==", - "dev": true, - "dependencies": { - "tsparticles-engine": "^2.12.0" - } - }, - "node_modules/tsparticles-particles.js": { - "version": "2.12.0", - "resolved": "https://registry.npmjs.org/tsparticles-particles.js/-/tsparticles-particles.js-2.12.0.tgz", - "integrity": "sha512-LyOuvYdhbUScmA4iDgV3LxA0HzY1DnOwQUy3NrPYO393S2YwdDjdwMod6Btq7EBUjg9FVIh+sZRizgV5elV2dg==", - "dev": true, - "funding": [ - { - "type": "github", - "url": "https://github.com/sponsors/matteobruni" - }, - { - "type": "github", - "url": "https://github.com/sponsors/tsparticles" - }, - { - "type": "buymeacoffee", - "url": "https://www.buymeacoffee.com/matteobruni" - } - ], - "dependencies": { - "tsparticles-engine": "^2.12.0" - } - }, - "node_modules/tsparticles-plugin-absorbers": { - "version": "2.12.0", - "resolved": "https://registry.npmjs.org/tsparticles-plugin-absorbers/-/tsparticles-plugin-absorbers-2.12.0.tgz", - "integrity": "sha512-2CkPreaXHrE5VzFlxUKLeRB5t66ff+3jwLJoDFgQcp+R4HOEITo0bBZv2DagGP0QZdYN4grpnQzRBVdB4d1rWA==", - "dev": true, - "dependencies": { - "tsparticles-engine": "^2.12.0" - } - }, - "node_modules/tsparticles-plugin-easing-quad": { - "version": "2.12.0", - "resolved": "https://registry.npmjs.org/tsparticles-plugin-easing-quad/-/tsparticles-plugin-easing-quad-2.12.0.tgz", - "integrity": "sha512-2mNqez5pydDewMIUWaUhY5cNQ80IUOYiujwG6qx9spTq1D6EEPLbRNAEL8/ecPdn2j1Um3iWSx6lo340rPkv4Q==", - "dev": true, - "funding": [ - { - "type": "github", - "url": "https://github.com/sponsors/matteobruni" - }, - { - "type": "github", - "url": "https://github.com/sponsors/tsparticles" - }, - { - "type": "buymeacoffee", - "url": "https://www.buymeacoffee.com/matteobruni" - } - ], - "dependencies": { - "tsparticles-engine": "^2.12.0" - } - }, - "node_modules/tsparticles-plugin-emitters": { - "version": "2.12.0", - "resolved": "https://registry.npmjs.org/tsparticles-plugin-emitters/-/tsparticles-plugin-emitters-2.12.0.tgz", - "integrity": "sha512-fbskYnaXWXivBh9KFReVCfqHdhbNQSK2T+fq2qcGEWpwtDdgujcaS1k2Q/xjZnWNMfVesik4IrqspcL51gNdSA==", - "dev": true, - "dependencies": { - "tsparticles-engine": "^2.12.0" - } - }, - "node_modules/tsparticles-shape-circle": { - "version": "2.12.0", - "resolved": "https://registry.npmjs.org/tsparticles-shape-circle/-/tsparticles-shape-circle-2.12.0.tgz", - "integrity": "sha512-L6OngbAlbadG7b783x16ns3+SZ7i0SSB66M8xGa5/k+YcY7zm8zG0uPt1Hd+xQDR2aNA3RngVM10O23/Lwk65Q==", - "dev": true, - "dependencies": { - "tsparticles-engine": "^2.12.0" - } - }, - "node_modules/tsparticles-shape-image": { - "version": "2.12.0", - "resolved": "https://registry.npmjs.org/tsparticles-shape-image/-/tsparticles-shape-image-2.12.0.tgz", - "integrity": "sha512-iCkSdUVa40DxhkkYjYuYHr9MJGVw+QnQuN5UC+e/yBgJQY+1tQL8UH0+YU/h0GHTzh5Sm+y+g51gOFxHt1dj7Q==", - "dev": true, - "dependencies": { - "tsparticles-engine": "^2.12.0" - } - }, - "node_modules/tsparticles-shape-line": { - "version": "2.12.0", - "resolved": "https://registry.npmjs.org/tsparticles-shape-line/-/tsparticles-shape-line-2.12.0.tgz", - "integrity": "sha512-RcpKmmpKlk+R8mM5wA2v64Lv1jvXtU4SrBDv3vbdRodKbKaWGGzymzav1Q0hYyDyUZgplEK/a5ZwrfrOwmgYGA==", - "dev": true, - "dependencies": { - "tsparticles-engine": "^2.12.0" - } - }, - "node_modules/tsparticles-shape-polygon": { - "version": "2.12.0", - "resolved": "https://registry.npmjs.org/tsparticles-shape-polygon/-/tsparticles-shape-polygon-2.12.0.tgz", - "integrity": "sha512-5YEy7HVMt1Obxd/jnlsjajchAlYMr9eRZWN+lSjcFSH6Ibra7h59YuJVnwxOxAobpijGxsNiBX0PuGQnB47pmA==", - "dev": true, - "dependencies": { - "tsparticles-engine": "^2.12.0" - } - }, - "node_modules/tsparticles-shape-square": { - "version": "2.12.0", - "resolved": "https://registry.npmjs.org/tsparticles-shape-square/-/tsparticles-shape-square-2.12.0.tgz", - "integrity": "sha512-33vfajHqmlODKaUzyPI/aVhnAOT09V7nfEPNl8DD0cfiNikEuPkbFqgJezJuE55ebtVo7BZPDA9o7GYbWxQNuw==", - "dev": true, - "dependencies": { - "tsparticles-engine": "^2.12.0" - } - }, - "node_modules/tsparticles-shape-star": { - "version": "2.12.0", - "resolved": "https://registry.npmjs.org/tsparticles-shape-star/-/tsparticles-shape-star-2.12.0.tgz", - "integrity": "sha512-4sfG/BBqm2qBnPLASl2L5aBfCx86cmZLXeh49Un+TIR1F5Qh4XUFsahgVOG0vkZQa+rOsZPEH04xY5feWmj90g==", - "dev": true, - "dependencies": { - "tsparticles-engine": "^2.12.0" - } - }, - "node_modules/tsparticles-shape-text": { - "version": "2.12.0", - "resolved": "https://registry.npmjs.org/tsparticles-shape-text/-/tsparticles-shape-text-2.12.0.tgz", - "integrity": "sha512-v2/FCA+hyTbDqp2ymFOe97h/NFb2eezECMrdirHWew3E3qlvj9S/xBibjbpZva2gnXcasBwxn0+LxKbgGdP0rA==", - "dev": true, - "dependencies": { - "tsparticles-engine": "^2.12.0" - } - }, - "node_modules/tsparticles-slim": { - "version": "2.12.0", - "resolved": "https://registry.npmjs.org/tsparticles-slim/-/tsparticles-slim-2.12.0.tgz", - "integrity": "sha512-27w9aGAAAPKHvP4LHzWFpyqu7wKyulayyaZ/L6Tuuejy4KP4BBEB4rY5GG91yvAPsLtr6rwWAn3yS+uxnBDpkA==", + "version": "3.4.0", + "resolved": "https://registry.npmjs.org/tsparticles/-/tsparticles-3.4.0.tgz", + "integrity": "sha512-dJV40INsemU8cav60JvWr3wvEcGitNsRpjepIMenQmew7qo4bk5ZpzY9n6XK5Lu72OwDIyFdF7DCDbE4KTnPsQ==", "dev": true, "funding": [ { @@ -4537,156 +4860,28 @@ "url": "https://github.com/sponsors/matteobruni" }, { - "type": "github", - "url": "https://github.com/sponsors/tsparticles" - }, - { - "type": "buymeacoffee", - "url": "https://www.buymeacoffee.com/matteobruni" - } - ], - "dependencies": { - "tsparticles-basic": "^2.12.0", - "tsparticles-engine": "^2.12.0", - "tsparticles-interaction-external-attract": "^2.12.0", - "tsparticles-interaction-external-bounce": "^2.12.0", - "tsparticles-interaction-external-bubble": "^2.12.0", - "tsparticles-interaction-external-connect": "^2.12.0", - "tsparticles-interaction-external-grab": "^2.12.0", - "tsparticles-interaction-external-pause": "^2.12.0", - "tsparticles-interaction-external-push": "^2.12.0", - "tsparticles-interaction-external-remove": "^2.12.0", - "tsparticles-interaction-external-repulse": "^2.12.0", - "tsparticles-interaction-external-slow": "^2.12.0", - "tsparticles-interaction-particles-attract": "^2.12.0", - "tsparticles-interaction-particles-collisions": "^2.12.0", - "tsparticles-interaction-particles-links": "^2.12.0", - "tsparticles-move-base": "^2.12.0", - "tsparticles-move-parallax": "^2.12.0", - "tsparticles-particles.js": "^2.12.0", - "tsparticles-plugin-easing-quad": "^2.12.0", - "tsparticles-shape-circle": "^2.12.0", - "tsparticles-shape-image": "^2.12.0", - "tsparticles-shape-line": "^2.12.0", - "tsparticles-shape-polygon": "^2.12.0", - "tsparticles-shape-square": "^2.12.0", - "tsparticles-shape-star": "^2.12.0", - "tsparticles-shape-text": "^2.12.0", - "tsparticles-updater-color": "^2.12.0", - "tsparticles-updater-life": "^2.12.0", - "tsparticles-updater-opacity": "^2.12.0", - "tsparticles-updater-out-modes": "^2.12.0", - "tsparticles-updater-rotate": "^2.12.0", - "tsparticles-updater-size": "^2.12.0", - "tsparticles-updater-stroke-color": "^2.12.0" - } - }, - "node_modules/tsparticles-updater-color": { - "version": "2.12.0", - "resolved": "https://registry.npmjs.org/tsparticles-updater-color/-/tsparticles-updater-color-2.12.0.tgz", - "integrity": "sha512-KcG3a8zd0f8CTiOrylXGChBrjhKcchvDJjx9sp5qpwQK61JlNojNCU35xoaSk2eEHeOvFjh0o3CXWUmYPUcBTQ==", - "dev": true, - "dependencies": { - "tsparticles-engine": "^2.12.0" - } - }, - "node_modules/tsparticles-updater-destroy": { - "version": "2.12.0", - "resolved": "https://registry.npmjs.org/tsparticles-updater-destroy/-/tsparticles-updater-destroy-2.12.0.tgz", - "integrity": "sha512-6NN3dJhxACvzbIGL4dADbYQSZJmdHfwjujj1uvnxdMbb2x8C/AZzGxiN33smo4jkrZ5VLEWZWCJPJ8aOKjQ2Sg==", - "dev": true, - "dependencies": { - "tsparticles-engine": "^2.12.0" - } - }, - "node_modules/tsparticles-updater-life": { - "version": "2.12.0", - "resolved": "https://registry.npmjs.org/tsparticles-updater-life/-/tsparticles-updater-life-2.12.0.tgz", - "integrity": "sha512-J7RWGHAZkowBHpcLpmjKsxwnZZJ94oGEL2w+wvW1/+ZLmAiFFF6UgU0rHMC5CbHJT4IPx9cbkYMEHsBkcRJ0Bw==", - "dev": true, - "dependencies": { - "tsparticles-engine": "^2.12.0" - } - }, - "node_modules/tsparticles-updater-opacity": { - "version": "2.12.0", - "resolved": "https://registry.npmjs.org/tsparticles-updater-opacity/-/tsparticles-updater-opacity-2.12.0.tgz", - "integrity": "sha512-YUjMsgHdaYi4HN89LLogboYcCi1o9VGo21upoqxq19yRy0hRCtx2NhH22iHF/i5WrX6jqshN0iuiiNefC53CsA==", - "dev": true, - "dependencies": { - "tsparticles-engine": "^2.12.0" - } - }, - "node_modules/tsparticles-updater-out-modes": { - "version": "2.12.0", - "resolved": "https://registry.npmjs.org/tsparticles-updater-out-modes/-/tsparticles-updater-out-modes-2.12.0.tgz", - "integrity": "sha512-owBp4Gk0JNlSrmp12XVEeBroDhLZU+Uq3szbWlHGSfcR88W4c/0bt0FiH5bHUqORIkw+m8O56hCjbqwj69kpOQ==", - "dev": true, - "dependencies": { - "tsparticles-engine": "^2.12.0" - } - }, - "node_modules/tsparticles-updater-roll": { - "version": "2.12.0", - "resolved": "https://registry.npmjs.org/tsparticles-updater-roll/-/tsparticles-updater-roll-2.12.0.tgz", - "integrity": "sha512-dxoxY5jP4C9x15BxlUv5/Q8OjUPBiE09ToXRyBxea9aEJ7/iMw6odvi1HuT0H1vTIfV7o1MYawjeCbMycvODKQ==", - "dev": true, - "dependencies": { - "tsparticles-engine": "^2.12.0" - } - }, - "node_modules/tsparticles-updater-rotate": { - "version": "2.12.0", - "resolved": "https://registry.npmjs.org/tsparticles-updater-rotate/-/tsparticles-updater-rotate-2.12.0.tgz", - "integrity": "sha512-waOFlGFmEZOzsQg4C4VSejNVXGf4dMf3fsnQrEROASGf1FCd8B6WcZau7JtXSTFw0OUGuk8UGz36ETWN72DkCw==", - "dev": true, - "dependencies": { - "tsparticles-engine": "^2.12.0" - } - }, - "node_modules/tsparticles-updater-size": { - "version": "2.12.0", - "resolved": "https://registry.npmjs.org/tsparticles-updater-size/-/tsparticles-updater-size-2.12.0.tgz", - "integrity": "sha512-B0yRdEDd/qZXCGDL/ussHfx5YJ9UhTqNvmS5X2rR2hiZhBAE2fmsXLeWkdtF2QusjPeEqFDxrkGiLOsh6poqRA==", - "dev": true, - "dependencies": { - "tsparticles-engine": "^2.12.0" - } - }, - "node_modules/tsparticles-updater-stroke-color": { - "version": "2.12.0", - "resolved": "https://registry.npmjs.org/tsparticles-updater-stroke-color/-/tsparticles-updater-stroke-color-2.12.0.tgz", - "integrity": "sha512-MPou1ZDxsuVq6SN1fbX+aI5yrs6FyP2iPCqqttpNbWyL+R6fik1rL0ab/x02B57liDXqGKYomIbBQVP3zUTW1A==", - "dev": true, - "dependencies": { - "tsparticles-engine": "^2.12.0" - } - }, - "node_modules/tsparticles-updater-tilt": { - "version": "2.12.0", - "resolved": "https://registry.npmjs.org/tsparticles-updater-tilt/-/tsparticles-updater-tilt-2.12.0.tgz", - "integrity": "sha512-HDEFLXazE+Zw+kkKKAiv0Fs9D9sRP61DoCR6jZ36ipea6OBgY7V1Tifz2TSR1zoQkk57ER9+EOQbkSQO+YIPGQ==", - "dev": true, - "dependencies": { - "tsparticles-engine": "^2.12.0" - } - }, - "node_modules/tsparticles-updater-twinkle": { - "version": "2.12.0", - "resolved": "https://registry.npmjs.org/tsparticles-updater-twinkle/-/tsparticles-updater-twinkle-2.12.0.tgz", - "integrity": "sha512-JhK/DO4kTx7IFwMBP2EQY9hBaVVvFnGBvX21SQWcjkymmN1hZ+NdcgUtR9jr4jUiiSNdSl7INaBuGloVjWvOgA==", - "dev": true, - "dependencies": { - "tsparticles-engine": "^2.12.0" - } - }, - "node_modules/tsparticles-updater-wobble": { - "version": "2.12.0", - "resolved": "https://registry.npmjs.org/tsparticles-updater-wobble/-/tsparticles-updater-wobble-2.12.0.tgz", - "integrity": "sha512-85FIRl95ipD3jfIsQdDzcUC5PRMWIrCYqBq69nIy9P8rsNzygn+JK2n+P1VQZowWsZvk0mYjqb9OVQB21Lhf6Q==", - "dev": true, + "type": "github", + "url": "https://github.com/sponsors/tsparticles" + }, + { + "type": "buymeacoffee", + "url": "https://www.buymeacoffee.com/matteobruni" + } + ], "dependencies": { - "tsparticles-engine": "^2.12.0" + "@tsparticles/engine": "^3.4.0", + "@tsparticles/interaction-external-trail": "^3.4.0", + "@tsparticles/plugin-absorbers": "^3.4.0", + "@tsparticles/plugin-emitters": "^3.4.0", + "@tsparticles/plugin-emitters-shape-circle": "^3.4.0", + "@tsparticles/plugin-emitters-shape-square": "^3.4.0", + "@tsparticles/shape-text": "^3.4.0", + "@tsparticles/slim": "^3.4.0", + "@tsparticles/updater-destroy": "^3.4.0", + "@tsparticles/updater-roll": "^3.4.0", + "@tsparticles/updater-tilt": "^3.4.0", + "@tsparticles/updater-twinkle": "^3.4.0", + "@tsparticles/updater-wobble": "^3.4.0" } }, "node_modules/tweetnacl": { @@ -4995,30 +5190,6 @@ "vue": "^3.2.0" } }, - "node_modules/vue3-particles": { - "version": "2.12.0", - "resolved": "https://registry.npmjs.org/vue3-particles/-/vue3-particles-2.12.0.tgz", - "integrity": "sha512-Vc8CSNoT/VWD4LTauYDR2EXN6mPU5qz35wqVPuhW0Wj9IbwGR9FMTSWktjSrKlpiUJgGzMJ003pqpfWYi4vnZw==", - "dev": true, - "funding": [ - { - "type": "github", - "url": "https://github.com/sponsors/matteobruni" - }, - { - "type": "github", - "url": "https://github.com/sponsors/tsparticles" - }, - { - "type": "buymeacoffee", - "url": "https://www.buymeacoffee.com/matteobruni" - } - ], - "dependencies": { - "tsparticles-engine": "^2.12.0", - "vue": "^3.3.4" - } - }, "node_modules/vuedraggable": { "version": "4.1.0", "resolved": "https://registry.npmjs.org/vuedraggable/-/vuedraggable-4.1.0.tgz", @@ -5231,9 +5402,9 @@ "dev": true }, "@babel/parser": { - "version": "7.22.16", - "resolved": "https://registry.npmjs.org/@babel/parser/-/parser-7.22.16.tgz", - "integrity": "sha512-+gPfKv8UWeKKeJTUxe59+OobVcrYHETCsORl61EmSkmgymguYk/X5bp7GuUIXaFsc6y++v8ZxPsLSSuujqDphA==", + "version": "7.24.6", + "resolved": "https://registry.npmjs.org/@babel/parser/-/parser-7.24.6.tgz", + "integrity": "sha512-eNZXdfU35nJC2h24RznROuOpO94h6x8sg9ju0tT9biNtLZ2vuP8SduLqqV+/8+cebSLV9SJEAN5Z3zQbJG/M+Q==", "dev": true }, "@codemirror/autocomplete": { @@ -5907,31 +6078,578 @@ "dev": true, "optional": true }, - "@popperjs/core": { - "version": "2.4.0", - "resolved": "https://registry.npmjs.org/@popperjs/core/-/core-2.4.0.tgz", - "integrity": "sha512-NMrDy6EWh9TPdSRiHmHH2ye1v5U0gBD7pRYwSwJvomx7Bm4GG04vu63dYiVzebLOx2obPpJugew06xVP0Nk7hA==", - "dev": true + "@popperjs/core": { + "version": "2.4.0", + "resolved": "https://registry.npmjs.org/@popperjs/core/-/core-2.4.0.tgz", + "integrity": "sha512-NMrDy6EWh9TPdSRiHmHH2ye1v5U0gBD7pRYwSwJvomx7Bm4GG04vu63dYiVzebLOx2obPpJugew06xVP0Nk7hA==", + "dev": true + }, + "@tailwindcss/forms": { + "version": "0.5.3", + "resolved": "https://registry.npmjs.org/@tailwindcss/forms/-/forms-0.5.3.tgz", + "integrity": "sha512-y5mb86JUoiUgBjY/o6FJSFZSEttfb3Q5gllE4xoKjAAD+vBrnIhE4dViwUuow3va8mpH4s9jyUbUbrRGoRdc2Q==", + "dev": true, + "requires": { + "mini-svg-data-uri": "^1.2.3" + } + }, + "@tailwindcss/typography": { + "version": "0.5.7", + "resolved": "https://registry.npmjs.org/@tailwindcss/typography/-/typography-0.5.7.tgz", + "integrity": "sha512-JTTSTrgZfp6Ki4svhPA4mkd9nmQ/j9EfE7SbHJ1cLtthKkpW2OxsFXzSmxbhYbEkfNIyAyhle5p4SYyKRbz/jg==", + "dev": true, + "requires": { + "lodash.castarray": "^4.4.0", + "lodash.isplainobject": "^4.0.6", + "lodash.merge": "^4.6.2", + "postcss-selector-parser": "6.0.10" + } + }, + "@tsparticles/basic": { + "version": "3.4.0", + "resolved": "https://registry.npmjs.org/@tsparticles/basic/-/basic-3.4.0.tgz", + "integrity": "sha512-a0HxG0GOhXof7NDqcqdyu9XpmCAQ0M402YECz/jsH4CkBpz3ut0BrgnyjT6Xcqna3pR1Kv1m516/sV2fwNnnQw==", + "dev": true, + "requires": { + "@tsparticles/engine": "^3.4.0", + "@tsparticles/move-base": "^3.4.0", + "@tsparticles/shape-circle": "^3.4.0", + "@tsparticles/updater-color": "^3.4.0", + "@tsparticles/updater-opacity": "^3.4.0", + "@tsparticles/updater-out-modes": "^3.4.0", + "@tsparticles/updater-size": "^3.4.0" + } + }, + "@tsparticles/engine": { + "version": "3.4.0", + "resolved": "https://registry.npmjs.org/@tsparticles/engine/-/engine-3.4.0.tgz", + "integrity": "sha512-OqoMZYJCoiihNnexnnSmInEMNXr0Z8CmE1HSiFVeifgK1qUlonTFe2G09KdvNT8ZdvmIC513yTpFJNDbnMZYRQ==", + "dev": true + }, + "@tsparticles/interaction-external-attract": { + "version": "3.4.0", + "resolved": "https://registry.npmjs.org/@tsparticles/interaction-external-attract/-/interaction-external-attract-3.4.0.tgz", + "integrity": "sha512-6enSRkoXyK0JvW8bJuj2xAUuu9VzDiFvRCPaL+5dcLcDpjheh8nWpGzrgo8p9VxLL5VRYv7PxnYPMviBMQ7WzA==", + "dev": true, + "requires": { + "@tsparticles/engine": "^3.4.0" + } + }, + "@tsparticles/interaction-external-bounce": { + "version": "3.4.0", + "resolved": "https://registry.npmjs.org/@tsparticles/interaction-external-bounce/-/interaction-external-bounce-3.4.0.tgz", + "integrity": "sha512-yiTJD8t+Uzpo9lyhHlaC+azu49dJtrFVhbVZdDaiTNm1L1stFQBrc+9NY63BfQDEkDmSz4uWvQXQMru2KY+40g==", + "dev": true, + "requires": { + "@tsparticles/engine": "^3.4.0" + } + }, + "@tsparticles/interaction-external-bubble": { + "version": "3.4.0", + "resolved": "https://registry.npmjs.org/@tsparticles/interaction-external-bubble/-/interaction-external-bubble-3.4.0.tgz", + "integrity": "sha512-CQ1nC6Or8qAAkH7A2x3FkP473caM7UWQiiN4zR4JtSZu06+2Y0V09LXguQKx1RWDehgRvkylQ4Dgur4a5qNb8w==", + "dev": true, + "requires": { + "@tsparticles/engine": "^3.4.0" + } + }, + "@tsparticles/interaction-external-connect": { + "version": "3.4.0", + "resolved": "https://registry.npmjs.org/@tsparticles/interaction-external-connect/-/interaction-external-connect-3.4.0.tgz", + "integrity": "sha512-UBzs0iV7wLbrL2VIuCT25asUjjXGCiVC/kCM5NtG7+gd6wDB8DbjZPjHviI7AnEnJdBPeZ2eeYIVuLiO1Xpd3A==", + "dev": true, + "requires": { + "@tsparticles/engine": "^3.4.0" + } + }, + "@tsparticles/interaction-external-grab": { + "version": "3.4.0", + "resolved": "https://registry.npmjs.org/@tsparticles/interaction-external-grab/-/interaction-external-grab-3.4.0.tgz", + "integrity": "sha512-BsnwN1x+nYUCD7iSu/wLX//awAka1Vf5gnynBqgmz0odAlN3Wv2i9iR/JkzDQynmGLJPHffYgkXC8LWXgZZznQ==", + "dev": true, + "requires": { + "@tsparticles/engine": "^3.4.0" + } + }, + "@tsparticles/interaction-external-pause": { + "version": "3.4.0", + "resolved": "https://registry.npmjs.org/@tsparticles/interaction-external-pause/-/interaction-external-pause-3.4.0.tgz", + "integrity": "sha512-B6xvHLLktN9BHPcIbAxc7F68aDOnieKAxPwqSuvRtQrEP0Q3xcvTkw1TBwzehr9mZH+0SVGzPfH8BMWI4EP1Xg==", + "dev": true, + "requires": { + "@tsparticles/engine": "^3.4.0" + } + }, + "@tsparticles/interaction-external-push": { + "version": "3.4.0", + "resolved": "https://registry.npmjs.org/@tsparticles/interaction-external-push/-/interaction-external-push-3.4.0.tgz", + "integrity": "sha512-SriLK1X45CaLwzxjtDo5nCGtF8lwPwK5zYO6+UU+9djUzbh/dBlXQr63ovm/jYPE+yGPRxAhJLdiHpss6aaavQ==", + "dev": true, + "requires": { + "@tsparticles/engine": "^3.4.0" + } + }, + "@tsparticles/interaction-external-remove": { + "version": "3.4.0", + "resolved": "https://registry.npmjs.org/@tsparticles/interaction-external-remove/-/interaction-external-remove-3.4.0.tgz", + "integrity": "sha512-9W4v8s3J+4l9AXpAvvAMbdG0G6y0HHA+/ZmP/9CtVc1fqVDDrMHL0ojXuVlGMxVjKgwuO28x8+jOAuM7PHiSsQ==", + "dev": true, + "requires": { + "@tsparticles/engine": "^3.4.0" + } + }, + "@tsparticles/interaction-external-repulse": { + "version": "3.4.0", + "resolved": "https://registry.npmjs.org/@tsparticles/interaction-external-repulse/-/interaction-external-repulse-3.4.0.tgz", + "integrity": "sha512-5tM8uLGsKMUhZ2+Acy8XHrw1MN+apqNBhfVYoZ5UdH2soX1xAicSCrEpSObiS1xjCmkpRlkfls3Ygo4FHz3eSg==", + "dev": true, + "requires": { + "@tsparticles/engine": "^3.4.0" + } + }, + "@tsparticles/interaction-external-slow": { + "version": "3.4.0", + "resolved": "https://registry.npmjs.org/@tsparticles/interaction-external-slow/-/interaction-external-slow-3.4.0.tgz", + "integrity": "sha512-bBlKG3VS8g64+HiDlu9RbWt/3bIepEu25w8G2zTB+GQMBqDpKsMioWWKNT66w/661U1BlvUZWHaJE/OdMCZTZw==", + "dev": true, + "requires": { + "@tsparticles/engine": "^3.4.0" + } + }, + "@tsparticles/interaction-external-trail": { + "version": "3.4.0", + "resolved": "https://registry.npmjs.org/@tsparticles/interaction-external-trail/-/interaction-external-trail-3.4.0.tgz", + "integrity": "sha512-hpcfv04zto67kjG7X1nx+Bv9eolkUBNLHcy9gSgco83/ARNKLgcOA+xYz5OFzZ5ImKyGZQggzYOPSwBZx+9MQg==", + "dev": true, + "requires": { + "@tsparticles/engine": "^3.4.0" + } + }, + "@tsparticles/interaction-particles-attract": { + "version": "3.4.0", + "resolved": "https://registry.npmjs.org/@tsparticles/interaction-particles-attract/-/interaction-particles-attract-3.4.0.tgz", + "integrity": "sha512-Ye6f37AZYaMExjsZSoOEMsTSFIPs3ZZCxiQmiCeH+gNK8yGXJDLkWwZUN0S7S4GJDf24Nt4S+gunKJxO8C3qGQ==", + "dev": true, + "requires": { + "@tsparticles/engine": "^3.4.0" + } + }, + "@tsparticles/interaction-particles-collisions": { + "version": "3.4.0", + "resolved": "https://registry.npmjs.org/@tsparticles/interaction-particles-collisions/-/interaction-particles-collisions-3.4.0.tgz", + "integrity": "sha512-JmDyXlGS6vSrUxvgMf/t6hsnsAS4YRc9rZM3CcmfyUM9UG9/+vef/cekNDSVRzszk5KcFF70w2FLJ6EhYs0ecA==", + "dev": true, + "requires": { + "@tsparticles/engine": "^3.4.0" + } + }, + "@tsparticles/interaction-particles-links": { + "version": "3.4.0", + "resolved": "https://registry.npmjs.org/@tsparticles/interaction-particles-links/-/interaction-particles-links-3.4.0.tgz", + "integrity": "sha512-2UhzNsZCSF69L0PGwlJARNx3qrMdSrl5p/TgO5Q5w7iwBU1x/W27O+TDQvNdMHsOLPPUomUI+jJfRXY2snqp3Q==", + "dev": true, + "requires": { + "@tsparticles/engine": "^3.4.0" + } + }, + "@tsparticles/move-base": { + "version": "3.4.0", + "resolved": "https://registry.npmjs.org/@tsparticles/move-base/-/move-base-3.4.0.tgz", + "integrity": "sha512-4P9CzgVN7INogAvqkg/cEA+6WKeGUAtsgljJ2rUADgNBiScW1oJZAw/004AZiOlonLRiUZujUCNS4zlAg62ZvQ==", + "dev": true, + "requires": { + "@tsparticles/engine": "^3.4.0" + } + }, + "@tsparticles/move-parallax": { + "version": "3.4.0", + "resolved": "https://registry.npmjs.org/@tsparticles/move-parallax/-/move-parallax-3.4.0.tgz", + "integrity": "sha512-5GdTxro5y3+GFNabaHPFuJl2zOpiyDZJ0D96QAY/sRnI5NNASj7n9QgUeViPdAsOOIgrHgIMl43MqJSUbuK4tw==", + "dev": true, + "requires": { + "@tsparticles/engine": "^3.4.0" + } + }, + "@tsparticles/plugin-absorbers": { + "version": "3.4.0", + "resolved": "https://registry.npmjs.org/@tsparticles/plugin-absorbers/-/plugin-absorbers-3.4.0.tgz", + "integrity": "sha512-yFSqlTYWWjItTuVA9VPpGkzA1VqUFhTg/XrrwYRZnIPnfvFMnguwQIPvYkgubEJT9/EurWTyJ/AnCdbi+b7hSQ==", + "dev": true, + "requires": { + "@tsparticles/engine": "^3.4.0" + } + }, + "@tsparticles/plugin-easing-quad": { + "version": "3.4.0", + "resolved": "https://registry.npmjs.org/@tsparticles/plugin-easing-quad/-/plugin-easing-quad-3.4.0.tgz", + "integrity": "sha512-JgZDeoES8ONrt+pKdDRrUkTKJRfjgRpTlLgr2KqqadI+lSOQIw/QJuXfCu25/47wJLcPUxP1melclp6X/IhNog==", + "dev": true, + "requires": { + "@tsparticles/engine": "^3.4.0" + } + }, + "@tsparticles/plugin-emitters": { + "version": "3.4.0", + "resolved": "https://registry.npmjs.org/@tsparticles/plugin-emitters/-/plugin-emitters-3.4.0.tgz", + "integrity": "sha512-B3I12hcELE+MDi2jmSFHiC5x8/c4n412VZFOAJcimMfb919gaF1mC/Ac9yR8OCmIdEXYDjf/dyg8xUtSUVlV2g==", + "dev": true, + "requires": { + "@tsparticles/engine": "^3.4.0" + } + }, + "@tsparticles/plugin-emitters-shape-circle": { + "version": "3.4.0", + "resolved": "https://registry.npmjs.org/@tsparticles/plugin-emitters-shape-circle/-/plugin-emitters-shape-circle-3.4.0.tgz", + "integrity": "sha512-bs8E1GL3n/YlWtDBuBFo8CgT7n5a193uno9EaHLiAwgdFcp5yrz9D+3tX4WtVlAiMnfTdWhanFPoiBYYdACB0w==", + "dev": true, + "requires": { + "@tsparticles/engine": "^3.4.0", + "@tsparticles/plugin-emitters": "^3.4.0" + } + }, + "@tsparticles/plugin-emitters-shape-square": { + "version": "3.4.0", + "resolved": "https://registry.npmjs.org/@tsparticles/plugin-emitters-shape-square/-/plugin-emitters-shape-square-3.4.0.tgz", + "integrity": "sha512-ne4qKSNbc3fqLFClCUNd7g5qhuChxLVwj+MAe/+4ECYjDQBIrGcJrH2mgmdi5KpOPqKtnIQpC4etwJ084w1UMA==", + "dev": true, + "requires": { + "@tsparticles/engine": "^3.4.0", + "@tsparticles/plugin-emitters": "^3.4.0" + } + }, + "@tsparticles/shape-circle": { + "version": "3.4.0", + "resolved": "https://registry.npmjs.org/@tsparticles/shape-circle/-/shape-circle-3.4.0.tgz", + "integrity": "sha512-X1ynt8h7bO+xep12Vkxeo2fImbKzLMEZr0qY3vKZzhHcy0/lxoo505pwyVL2+V98eZNOu9fmQM7vlIt/0FGTcg==", + "dev": true, + "requires": { + "@tsparticles/engine": "^3.4.0" + } + }, + "@tsparticles/shape-emoji": { + "version": "3.4.0", + "resolved": "https://registry.npmjs.org/@tsparticles/shape-emoji/-/shape-emoji-3.4.0.tgz", + "integrity": "sha512-fzuRdwzikhiE7bgagNJVFccvipy7+bcG6PGvfGmJO3FQIwYSTRV2mJVsI/uPQkBUGJyzJPncp7FzEix/D3PDCA==", + "dev": true, + "requires": { + "@tsparticles/engine": "^3.4.0" + } + }, + "@tsparticles/shape-image": { + "version": "3.4.0", + "resolved": "https://registry.npmjs.org/@tsparticles/shape-image/-/shape-image-3.4.0.tgz", + "integrity": "sha512-US7MYYFP0iMqWs9JiPNmqFSIxmsqkTF6gW6VvDDGtBEUxw3wubSEln3Gc3PQBpa/Tq0jwkUfd1/zkyahOrycUw==", + "dev": true, + "requires": { + "@tsparticles/engine": "^3.4.0" + } + }, + "@tsparticles/shape-line": { + "version": "3.4.0", + "resolved": "https://registry.npmjs.org/@tsparticles/shape-line/-/shape-line-3.4.0.tgz", + "integrity": "sha512-pXItuUBtIatcQQLp+CS1HZjHtpGVqswFxDaFZv0b9Ulx+7I48i4T5r6LCF2ngo+3xcT+rDdAF/Ca/oCunztBBA==", + "dev": true, + "requires": { + "@tsparticles/engine": "^3.4.0" + } + }, + "@tsparticles/shape-polygon": { + "version": "3.4.0", + "resolved": "https://registry.npmjs.org/@tsparticles/shape-polygon/-/shape-polygon-3.4.0.tgz", + "integrity": "sha512-qA7nXwWufVZLyS1CT9cFNqcjgLRQQnILc3w1gkH7B80uGYg4bLgQcOZiI7OwifOFkgyI6Mvb0XRntl+NQaDDRA==", + "dev": true, + "requires": { + "@tsparticles/engine": "^3.4.0" + } + }, + "@tsparticles/shape-square": { + "version": "3.4.0", + "resolved": "https://registry.npmjs.org/@tsparticles/shape-square/-/shape-square-3.4.0.tgz", + "integrity": "sha512-pUXAbSnW5aTMFFjAP3GHMxqbah3ADibuQcEmIgts5tNUKY8Bl0Syx5pllpe81z2AMJCsQncC15/M19DU/H+YXw==", + "dev": true, + "requires": { + "@tsparticles/engine": "^3.4.0" + } + }, + "@tsparticles/shape-star": { + "version": "3.4.0", + "resolved": "https://registry.npmjs.org/@tsparticles/shape-star/-/shape-star-3.4.0.tgz", + "integrity": "sha512-Gy4FLvVh0qBTVAZbBeV3MfsofYXycxO60/5HqNePsG3+sO/o5DKGZqf/Fw1Cacrb1QYg5A59P/122MZTMnLqEA==", + "dev": true, + "requires": { + "@tsparticles/engine": "^3.4.0" + } + }, + "@tsparticles/shape-text": { + "version": "3.4.0", + "resolved": "https://registry.npmjs.org/@tsparticles/shape-text/-/shape-text-3.4.0.tgz", + "integrity": "sha512-5Ney+vAoEZ1uM6z1QkJG+za55SdrTn+91ChGnuixUg8dbu+jGro9wqrywigYe6RNNCMxVmmxr455c9ub0hTLqw==", + "dev": true, + "requires": { + "@tsparticles/engine": "^3.4.0" + } + }, + "@tsparticles/slim": { + "version": "3.4.0", + "resolved": "https://registry.npmjs.org/@tsparticles/slim/-/slim-3.4.0.tgz", + "integrity": "sha512-ukQqSdTzBlZHnD6MwRCdJBWbfgWSRNa4BG+H8IVAU5ggdQ7AbnDsdMG/o49cvstguGsKSbjmHYFNkDYGeKasuw==", + "dev": true, + "requires": { + "@tsparticles/basic": "^3.4.0", + "@tsparticles/engine": "^3.4.0", + "@tsparticles/interaction-external-attract": "^3.4.0", + "@tsparticles/interaction-external-bounce": "^3.4.0", + "@tsparticles/interaction-external-bubble": "^3.4.0", + "@tsparticles/interaction-external-connect": "^3.4.0", + "@tsparticles/interaction-external-grab": "^3.4.0", + "@tsparticles/interaction-external-pause": "^3.4.0", + "@tsparticles/interaction-external-push": "^3.4.0", + "@tsparticles/interaction-external-remove": "^3.4.0", + "@tsparticles/interaction-external-repulse": "^3.4.0", + "@tsparticles/interaction-external-slow": "^3.4.0", + "@tsparticles/interaction-particles-attract": "^3.4.0", + "@tsparticles/interaction-particles-collisions": "^3.4.0", + "@tsparticles/interaction-particles-links": "^3.4.0", + "@tsparticles/move-parallax": "^3.4.0", + "@tsparticles/plugin-easing-quad": "^3.4.0", + "@tsparticles/shape-emoji": "^3.4.0", + "@tsparticles/shape-image": "^3.4.0", + "@tsparticles/shape-line": "^3.4.0", + "@tsparticles/shape-polygon": "^3.4.0", + "@tsparticles/shape-square": "^3.4.0", + "@tsparticles/shape-star": "^3.4.0", + "@tsparticles/updater-life": "^3.4.0", + "@tsparticles/updater-rotate": "^3.4.0", + "@tsparticles/updater-stroke-color": "^3.4.0" + } + }, + "@tsparticles/updater-color": { + "version": "3.4.0", + "resolved": "https://registry.npmjs.org/@tsparticles/updater-color/-/updater-color-3.4.0.tgz", + "integrity": "sha512-joT5O/78p7n3jBq1aiFEp4wMevv8WtfjBJnODwEUO7aiHRozs9tA05djVLYZ7kjH0bLymJoPwxM46SEGSTsh+g==", + "dev": true, + "requires": { + "@tsparticles/engine": "^3.4.0" + } + }, + "@tsparticles/updater-destroy": { + "version": "3.4.0", + "resolved": "https://registry.npmjs.org/@tsparticles/updater-destroy/-/updater-destroy-3.4.0.tgz", + "integrity": "sha512-XFyA2PpDAEuct2uACdMO/GE8LmQ54hJenF+tr9/FJKK18vcVJDkn0a36ShIG4zw36ds36mLqkNLcAAjnZ3pigw==", + "dev": true, + "requires": { + "@tsparticles/engine": "^3.4.0" + } + }, + "@tsparticles/updater-life": { + "version": "3.4.0", + "resolved": "https://registry.npmjs.org/@tsparticles/updater-life/-/updater-life-3.4.0.tgz", + "integrity": "sha512-bFx/3TTNNnWVmHkrfwXVlLc7R8QfbeX+KQ6dy09n+i2Vs3HnQUF7/VITjt0erNzyHfnqh+q+80gCn6X4brvwEQ==", + "dev": true, + "requires": { + "@tsparticles/engine": "^3.4.0" + } + }, + "@tsparticles/updater-opacity": { + "version": "3.4.0", + "resolved": "https://registry.npmjs.org/@tsparticles/updater-opacity/-/updater-opacity-3.4.0.tgz", + "integrity": "sha512-OCWbebZykDh8ZbTiTQX+pBRXHfTMMJpNXbFps4lTSHXHMDsbEMl5a3/TEFeUk3rd0wkiRSCjPUSGKupoU5B14w==", + "dev": true, + "requires": { + "@tsparticles/engine": "^3.4.0" + } + }, + "@tsparticles/updater-out-modes": { + "version": "3.4.0", + "resolved": "https://registry.npmjs.org/@tsparticles/updater-out-modes/-/updater-out-modes-3.4.0.tgz", + "integrity": "sha512-i80MSXpnfivKlfA0FbAxk2CfZGNG3rPNtx5Pz/ZCDQ71j1YFjztdwfugp9oueu/sLfOSw4hIKfyR062zpgZp6Q==", + "dev": true, + "requires": { + "@tsparticles/engine": "^3.4.0" + } + }, + "@tsparticles/updater-roll": { + "version": "3.4.0", + "resolved": "https://registry.npmjs.org/@tsparticles/updater-roll/-/updater-roll-3.4.0.tgz", + "integrity": "sha512-PhkZ7gJZTrAE3S2nYPmxXDCCxXcy7vfqosp4LnKyOLbZH1YwMy+2oltN6Ni22lMz794C2q+zURyZBu2oeH+rgA==", + "dev": true, + "requires": { + "@tsparticles/engine": "^3.4.0" + } + }, + "@tsparticles/updater-rotate": { + "version": "3.4.0", + "resolved": "https://registry.npmjs.org/@tsparticles/updater-rotate/-/updater-rotate-3.4.0.tgz", + "integrity": "sha512-BKmzN8YLSUPe6OngmhmjPCBJ2RpBi88nfoNJekZnVJpbRses1pV632EaOIAEVT1xsUrwVhvsXYa9Sv5iZxfIRg==", + "dev": true, + "requires": { + "@tsparticles/engine": "^3.4.0" + } + }, + "@tsparticles/updater-size": { + "version": "3.4.0", + "resolved": "https://registry.npmjs.org/@tsparticles/updater-size/-/updater-size-3.4.0.tgz", + "integrity": "sha512-3z7INo2E7HR+ps8V490mOiLcCaFmUJFgObXBO3lF6uZ1xe6SfvVsX2r1HpQLwIpq7Ph2ZqQ4tj8tBPyKtada7g==", + "dev": true, + "requires": { + "@tsparticles/engine": "^3.4.0" + } + }, + "@tsparticles/updater-stroke-color": { + "version": "3.4.0", + "resolved": "https://registry.npmjs.org/@tsparticles/updater-stroke-color/-/updater-stroke-color-3.4.0.tgz", + "integrity": "sha512-5pe/777vPZgzlNBkh8GQ3fjT6273wcwlBeq4UkDA/q6bI867d8W+Fi8yUsqfdiS6B5tKSvVsI8rFrfwjEvW0pg==", + "dev": true, + "requires": { + "@tsparticles/engine": "^3.4.0" + } + }, + "@tsparticles/updater-tilt": { + "version": "3.4.0", + "resolved": "https://registry.npmjs.org/@tsparticles/updater-tilt/-/updater-tilt-3.4.0.tgz", + "integrity": "sha512-thrQC37W2Psdr7arqxMeJ0iRM39y4JTRd9cQQVYCIhYkkQeSC6obujNZb+1BDjNM93HduSHKSK1aSXS0TCEWmg==", + "dev": true, + "requires": { + "@tsparticles/engine": "^3.4.0" + } + }, + "@tsparticles/updater-twinkle": { + "version": "3.4.0", + "resolved": "https://registry.npmjs.org/@tsparticles/updater-twinkle/-/updater-twinkle-3.4.0.tgz", + "integrity": "sha512-EQlEO9YRPBXFBu6Yo9z4R0KZuJJc3hZrBYY5g9t/hWyxwiFY2RlDnRpK9h02SEa/qXwegm96Ka60zs+P2OFzzw==", + "dev": true, + "requires": { + "@tsparticles/engine": "^3.4.0" + } }, - "@tailwindcss/forms": { - "version": "0.5.3", - "resolved": "https://registry.npmjs.org/@tailwindcss/forms/-/forms-0.5.3.tgz", - "integrity": "sha512-y5mb86JUoiUgBjY/o6FJSFZSEttfb3Q5gllE4xoKjAAD+vBrnIhE4dViwUuow3va8mpH4s9jyUbUbrRGoRdc2Q==", + "@tsparticles/updater-wobble": { + "version": "3.4.0", + "resolved": "https://registry.npmjs.org/@tsparticles/updater-wobble/-/updater-wobble-3.4.0.tgz", + "integrity": "sha512-/+u3ZuyFQW8yH3uY6qEa5zsQi41JSbgqltcrjAPCgcOEtfwXaTUI/XqjMlppkoyA58lfA8nJhWZWVNTjFY3x7g==", "dev": true, "requires": { - "mini-svg-data-uri": "^1.2.3" + "@tsparticles/engine": "^3.4.0" } }, - "@tailwindcss/typography": { - "version": "0.5.7", - "resolved": "https://registry.npmjs.org/@tailwindcss/typography/-/typography-0.5.7.tgz", - "integrity": "sha512-JTTSTrgZfp6Ki4svhPA4mkd9nmQ/j9EfE7SbHJ1cLtthKkpW2OxsFXzSmxbhYbEkfNIyAyhle5p4SYyKRbz/jg==", + "@tsparticles/vue3": { + "version": "3.0.1", + "resolved": "https://registry.npmjs.org/@tsparticles/vue3/-/vue3-3.0.1.tgz", + "integrity": "sha512-BxaSZ0wtxq33SDsrqLkLWoV88Jd5BnBoYjyVhKSNzOLOesCiG8Z5WQC1QZGTez79l/gBe0xaCDF0ng1e2iKJvA==", "dev": true, "requires": { - "lodash.castarray": "^4.4.0", - "lodash.isplainobject": "^4.0.6", - "lodash.merge": "^4.6.2", - "postcss-selector-parser": "6.0.10" + "@tsparticles/engine": "^3.0.3", + "vue": "^3.3.13" + }, + "dependencies": { + "@vue/compiler-core": { + "version": "3.4.27", + "resolved": "https://registry.npmjs.org/@vue/compiler-core/-/compiler-core-3.4.27.tgz", + "integrity": "sha512-E+RyqY24KnyDXsCuQrI+mlcdW3ALND6U7Gqa/+bVwbcpcR3BRRIckFoz7Qyd4TTlnugtwuI7YgjbvsLmxb+yvg==", + "dev": true, + "requires": { + "@babel/parser": "^7.24.4", + "@vue/shared": "3.4.27", + "entities": "^4.5.0", + "estree-walker": "^2.0.2", + "source-map-js": "^1.2.0" + } + }, + "@vue/compiler-dom": { + "version": "3.4.27", + "resolved": "https://registry.npmjs.org/@vue/compiler-dom/-/compiler-dom-3.4.27.tgz", + "integrity": "sha512-kUTvochG/oVgE1w5ViSr3KUBh9X7CWirebA3bezTbB5ZKBQZwR2Mwj9uoSKRMFcz4gSMzzLXBPD6KpCLb9nvWw==", + "dev": true, + "requires": { + "@vue/compiler-core": "3.4.27", + "@vue/shared": "3.4.27" + } + }, + "@vue/compiler-sfc": { + "version": "3.4.27", + "resolved": "https://registry.npmjs.org/@vue/compiler-sfc/-/compiler-sfc-3.4.27.tgz", + "integrity": "sha512-nDwntUEADssW8e0rrmE0+OrONwmRlegDA1pD6QhVeXxjIytV03yDqTey9SBDiALsvAd5U4ZrEKbMyVXhX6mCGA==", + "dev": true, + "requires": { + "@babel/parser": "^7.24.4", + "@vue/compiler-core": "3.4.27", + "@vue/compiler-dom": "3.4.27", + "@vue/compiler-ssr": "3.4.27", + "@vue/shared": "3.4.27", + "estree-walker": "^2.0.2", + "magic-string": "^0.30.10", + "postcss": "^8.4.38", + "source-map-js": "^1.2.0" + } + }, + "@vue/compiler-ssr": { + "version": "3.4.27", + "resolved": "https://registry.npmjs.org/@vue/compiler-ssr/-/compiler-ssr-3.4.27.tgz", + "integrity": "sha512-CVRzSJIltzMG5FcidsW0jKNQnNRYC8bT21VegyMMtHmhW3UOI7knmUehzswXLrExDLE6lQCZdrhD4ogI7c+vuw==", + "dev": true, + "requires": { + "@vue/compiler-dom": "3.4.27", + "@vue/shared": "3.4.27" + } + }, + "@vue/reactivity": { + "version": "3.4.27", + "resolved": "https://registry.npmjs.org/@vue/reactivity/-/reactivity-3.4.27.tgz", + "integrity": "sha512-kK0g4NknW6JX2yySLpsm2jlunZJl2/RJGZ0H9ddHdfBVHcNzxmQ0sS0b09ipmBoQpY8JM2KmUw+a6sO8Zo+zIA==", + "dev": true, + "requires": { + "@vue/shared": "3.4.27" + } + }, + "@vue/runtime-core": { + "version": "3.4.27", + "resolved": "https://registry.npmjs.org/@vue/runtime-core/-/runtime-core-3.4.27.tgz", + "integrity": "sha512-7aYA9GEbOOdviqVvcuweTLe5Za4qBZkUY7SvET6vE8kyypxVgaT1ixHLg4urtOlrApdgcdgHoTZCUuTGap/5WA==", + "dev": true, + "requires": { + "@vue/reactivity": "3.4.27", + "@vue/shared": "3.4.27" + } + }, + "@vue/runtime-dom": { + "version": "3.4.27", + "resolved": "https://registry.npmjs.org/@vue/runtime-dom/-/runtime-dom-3.4.27.tgz", + "integrity": "sha512-ScOmP70/3NPM+TW9hvVAz6VWWtZJqkbdf7w6ySsws+EsqtHvkhxaWLecrTorFxsawelM5Ys9FnDEMt6BPBDS0Q==", + "dev": true, + "requires": { + "@vue/runtime-core": "3.4.27", + "@vue/shared": "3.4.27", + "csstype": "^3.1.3" + } + }, + "@vue/server-renderer": { + "version": "3.4.27", + "resolved": "https://registry.npmjs.org/@vue/server-renderer/-/server-renderer-3.4.27.tgz", + "integrity": "sha512-dlAMEuvmeA3rJsOMJ2J1kXU7o7pOxgsNHVr9K8hB3ImIkSuBrIdy0vF66h8gf8Tuinf1TK3mPAz2+2sqyf3KzA==", + "dev": true, + "requires": { + "@vue/compiler-ssr": "3.4.27", + "@vue/shared": "3.4.27" + } + }, + "@vue/shared": { + "version": "3.4.27", + "resolved": "https://registry.npmjs.org/@vue/shared/-/shared-3.4.27.tgz", + "integrity": "sha512-DL3NmY2OFlqmYYrzp39yi3LDkKxa5vZVwxWdQ3rG0ekuWscHraeIbnI8t+aZK7qhYqEqWKTUdijadunb9pnrgA==", + "dev": true + }, + "vue": { + "version": "3.4.27", + "resolved": "https://registry.npmjs.org/vue/-/vue-3.4.27.tgz", + "integrity": "sha512-8s/56uK6r01r1icG/aEOHqyMVxd1bkYcSe9j8HcKtr/xTOFWvnzIVTehNW+5Yt89f+DLBe4A569pnZLS5HzAMA==", + "dev": true, + "requires": { + "@vue/compiler-dom": "3.4.27", + "@vue/compiler-sfc": "3.4.27", + "@vue/runtime-dom": "3.4.27", + "@vue/server-renderer": "3.4.27", + "@vue/shared": "3.4.27" + } + } } }, "@types/codemirror": { @@ -5961,10 +6679,10 @@ "integrity": "sha512-HnMWQkLJEf/PnxZIfbm0yGJRRZYYMhb++O9M36UCTA9z53uPvVoSlAwJr3XOpDEryb7Hwl1qAx/MV6YIW1RXxg==", "dev": true }, - "@types/offscreencanvas": { - "version": "2019.7.0", - "resolved": "https://registry.npmjs.org/@types/offscreencanvas/-/offscreencanvas-2019.7.0.tgz", - "integrity": "sha512-PGcyveRIpL1XIqK8eBsmRBt76eFgtzuPiSTyKHZxnGemp2yzGzWpjYKAfK3wIMiU7eH+851yEpiuP8JZerTmWg==", + "@types/stats.js": { + "version": "0.17.3", + "resolved": "https://registry.npmjs.org/@types/stats.js/-/stats.js-0.17.3.tgz", + "integrity": "sha512-pXNfAD3KHOdif9EQXZ9deK82HVNaXP5ZIF5RP2QG6OQFNTaY2YIetfrE9t528vEreGQvEPRDDc8muaoYeK0SxQ==", "dev": true }, "@types/tern": { @@ -5977,12 +6695,15 @@ } }, "@types/three": { - "version": "0.142.0", - "resolved": "https://registry.npmjs.org/@types/three/-/three-0.142.0.tgz", - "integrity": "sha512-YNVnlqthfgqsxKuSNbT/G2r+ha/6x+aJm7kvjT+sxa4jUROw/KOPm5xzGj33sk1+Librg6NwH/wJ6LCDX33UZg==", + "version": "0.156.0", + "resolved": "https://registry.npmjs.org/@types/three/-/three-0.156.0.tgz", + "integrity": "sha512-733bXDSRdlrxqOmQuOmfC1UBRuJ2pREPk8sWnx9MtIJEVDQMx8U0NQO5MVVaOrjzDPyLI+cFPim2X/ss9v0+LQ==", "dev": true, "requires": { - "@types/webxr": "*" + "@types/stats.js": "*", + "@types/webxr": "*", + "fflate": "~0.6.10", + "meshoptimizer": "~0.18.1" } }, "@types/web-bluetooth": { @@ -5992,9 +6713,9 @@ "dev": true }, "@types/webxr": { - "version": "0.5.0", - "resolved": "https://registry.npmjs.org/@types/webxr/-/webxr-0.5.0.tgz", - "integrity": "sha512-IUMDPSXnYIbEO2IereEFcgcqfDREOgmbGqtrMpVPpACTU6pltYLwHgVkrnYv0XhWEcjio9sYEfIEzgn3c7nDqA==", + "version": "0.5.15", + "resolved": "https://registry.npmjs.org/@types/webxr/-/webxr-0.5.15.tgz", + "integrity": "sha512-nC9116Gd4N+CqTxqo6gvCfhAMAzgRcfS8ZsciNodHq8uwW4JCVKwhagw8yN0XmC7mHrLnWqniJpoVEiR+72Drw==", "dev": true }, "@vitejs/plugin-vue": { @@ -6391,9 +7112,9 @@ "dev": true }, "caniuse-lite": { - "version": "1.0.30001566", - "resolved": "https://registry.npmjs.org/caniuse-lite/-/caniuse-lite-1.0.30001566.tgz", - "integrity": "sha512-ggIhCsTxmITBAMmK8yZjEhCO5/47jKXPu6Dha/wuCS4JePVL+3uiDEBuhu2aIoT+bqTOR8L76Ip1ARL9xYsEJA==", + "version": "1.0.30001620", + "resolved": "https://registry.npmjs.org/caniuse-lite/-/caniuse-lite-1.0.30001620.tgz", + "integrity": "sha512-WJvYsOjd1/BYUY6SNGUosK9DUidBPDTnOARHp3fSmFO1ekdxaY6nKRttEVrfMmYi80ctS0kz1wiWmm14fVc3ew==", "dev": true }, "chalk": { @@ -6528,9 +7249,9 @@ "dev": true }, "csstype": { - "version": "3.1.2", - "resolved": "https://registry.npmjs.org/csstype/-/csstype-3.1.2.tgz", - "integrity": "sha512-I7K1Uu0MBPzaFKg4nI5Q7Vs2t+3gWWW648spaF+Rg7pI9ds18Ugn+lvg4SHczUdKlHI5LWBXyqfS8+DufyBsgQ==", + "version": "3.1.3", + "resolved": "https://registry.npmjs.org/csstype/-/csstype-3.1.3.tgz", + "integrity": "sha512-M1uQkMl8rQK/szD0LNhtqxIPLpimGm8sOBwU7lLnCpSbTyY3yeU1Vc7l4KT5zT4s/yOxHH5O7tIuuLOCnLADRw==", "dev": true }, "date-fns": { @@ -6664,6 +7385,12 @@ "integrity": "sha512-MSjYzcWNOA0ewAHpz0MxpYFvwg6yjy1NG3xteoqz644VCo/RPgnr1/GGt+ic3iJTzQ8Eu3TdM14SawnVUmGE6A==", "dev": true }, + "entities": { + "version": "4.5.0", + "resolved": "https://registry.npmjs.org/entities/-/entities-4.5.0.tgz", + "integrity": "sha512-V0hjH4dGPh9Ao5p0MoRY6BVqtwCjhz6vI5LT8AJ55H+4g9/4vbHx1I54fS0XuclLhDHArPQCiMjDxjaL8fPxhw==", + "dev": true + }, "esbuild": { "version": "0.18.20", "resolved": "https://registry.npmjs.org/esbuild/-/esbuild-0.18.20.tgz", @@ -6906,6 +7633,12 @@ "reusify": "^1.0.4" } }, + "fflate": { + "version": "0.6.10", + "resolved": "https://registry.npmjs.org/fflate/-/fflate-0.6.10.tgz", + "integrity": "sha512-IQrh3lEPM93wVCEczc9SaAOvkmcoQn/G8Bo1e8ZPlY3X3bnAxWaBdvTdvM1hP62iZp0BXWDy4vTAy4fF0+Dlpg==", + "dev": true + }, "file-entry-cache": { "version": "6.0.1", "resolved": "https://registry.npmjs.org/file-entry-cache/-/file-entry-cache-6.0.1.tgz", @@ -7333,9 +8066,9 @@ } }, "magic-string": { - "version": "0.30.3", - "resolved": "https://registry.npmjs.org/magic-string/-/magic-string-0.30.3.tgz", - "integrity": "sha512-B7xGbll2fG/VjP+SWg4sX3JynwIU0mjoTc6MPpKNuIvftk6u6vqhDnk1R80b8C2GBR6ywqy+1DcKBrevBg+bmw==", + "version": "0.30.10", + "resolved": "https://registry.npmjs.org/magic-string/-/magic-string-0.30.10.tgz", + "integrity": "sha512-iIRwTIf0QKV3UAnYK4PU8uiEc4SRh5jX0mwpIwETPpHdhVM4f53RSwS/vXvN1JhGX+Cs7B8qIq3d6AH49O5fAQ==", "dev": true, "requires": { "@jridgewell/sourcemap-codec": "^1.4.15" @@ -7353,6 +8086,12 @@ "integrity": "sha512-8q7VEgMJW4J8tcfVPy8g09NcQwZdbwFEqhe/WZkoIzjn/3TGDwtOCYtXGxA3O8tPzpczCCDgv+P2P5y00ZJOOg==", "dev": true }, + "meshoptimizer": { + "version": "0.18.1", + "resolved": "https://registry.npmjs.org/meshoptimizer/-/meshoptimizer-0.18.1.tgz", + "integrity": "sha512-ZhoIoL7TNV4s5B6+rx5mC//fw8/POGyNxS/DZyCJeiZ12ScLfVwRE/GfsxwiTkMYYD5DmK2/JXnEVXqL4rF+Sw==", + "dev": true + }, "micromatch": { "version": "4.0.5", "resolved": "https://registry.npmjs.org/micromatch/-/micromatch-4.0.5.tgz", @@ -7426,9 +8165,9 @@ } }, "nanoid": { - "version": "3.3.6", - "resolved": "https://registry.npmjs.org/nanoid/-/nanoid-3.3.6.tgz", - "integrity": "sha512-BGcqMMJuToF7i1rt+2PWSNVnWIkGCU78jBG3RxO/bZlnZPK2Cmi2QaffxGO/2RvWi9sL+FAiRiXMgsyxQ1DIDA==", + "version": "3.3.7", + "resolved": "https://registry.npmjs.org/nanoid/-/nanoid-3.3.7.tgz", + "integrity": "sha512-eSRppjcPIatRIMC1U6UngP8XFcz8MQWGQdt1MTBQ7NaAmvXDfvNxbvWV3x2y6CdEUciCSsDHDQZbhYaB8QEo2g==", "dev": true }, "natural-compare": { @@ -7611,14 +8350,14 @@ "dev": true }, "postcss": { - "version": "8.4.29", - "resolved": "https://registry.npmjs.org/postcss/-/postcss-8.4.29.tgz", - "integrity": "sha512-cbI+jaqIeu/VGqXEarWkRCCffhjgXc0qjBtXpqJhTBohMUjUQnbBr0xqX3vEKudc4iviTewcJo5ajcec5+wdJw==", + "version": "8.4.38", + "resolved": "https://registry.npmjs.org/postcss/-/postcss-8.4.38.tgz", + "integrity": "sha512-Wglpdk03BSfXkHoQa3b/oulrotAkwrlLDRSOb9D0bN86FdRyE9lppSp33aHNPgBa0JKCoB+drFLZkQoRRYae5A==", "dev": true, "requires": { - "nanoid": "^3.3.6", + "nanoid": "^3.3.7", "picocolors": "^1.0.0", - "source-map-js": "^1.0.2" + "source-map-js": "^1.2.0" } }, "postcss-import": { @@ -7866,23 +8605,20 @@ "dev": true }, "skinview-utils": { - "version": "0.7.0", - "resolved": "https://registry.npmjs.org/skinview-utils/-/skinview-utils-0.7.0.tgz", - "integrity": "sha512-ecbbUp0AuvZX5fCIOOwbNPxr/JIbrAGhCcdLcww0Ov9PbvAbeYjNDSIu1ebCJBe4CWc6ZYYn8MFNp68DDta0iQ==", - "dev": true, - "requires": { - "@types/offscreencanvas": "^2019.6.4" - } + "version": "0.7.1", + "resolved": "https://registry.npmjs.org/skinview-utils/-/skinview-utils-0.7.1.tgz", + "integrity": "sha512-4eLrMqR526ehlZbsd8SuZ/CHpS9GiH0xUMoV+PYlJVi95ZFz5HJu7Spt5XYa72DRS7wgt5qquvHZf0XZJgmu9Q==", + "dev": true }, "skinview3d": { - "version": "2.3.0-alpha.2", - "resolved": "https://registry.npmjs.org/skinview3d/-/skinview3d-2.3.0-alpha.2.tgz", - "integrity": "sha512-xmMaL2Z2cM237q4itjtFxKNkPaDyuJAvp0j53vWKJCXfVGM1j1mZ1yTjfuaxKiYkhGR1rJ9/myZYF3jhCIklaQ==", + "version": "3.0.1", + "resolved": "https://registry.npmjs.org/skinview3d/-/skinview3d-3.0.1.tgz", + "integrity": "sha512-2LUSkzGxlZrTQelGT10jcW4TLiFTg5aZqXMEuqAFoWtk3qtaNu0qRFtwK5dN8zEXyKUJ3xlxah5eGtKY/NifQg==", "dev": true, "requires": { - "@types/three": "^0.142.0", - "skinview-utils": "^0.7.0", - "three": "^0.142.0" + "@types/three": "^0.156.0", + "skinview-utils": "^0.7.1", + "three": "^0.156.1" } }, "slash": { @@ -7898,9 +8634,9 @@ "dev": true }, "source-map-js": { - "version": "1.0.2", - "resolved": "https://registry.npmjs.org/source-map-js/-/source-map-js-1.0.2.tgz", - "integrity": "sha512-R0XvVJ9WusLiqTCEiGCmICCMplcCkIwwR11mOSD9CR5u+IXYdiseeEuXCVAjS54zqwkLcPNnmU4OeJ6tUrWhDw==", + "version": "1.2.0", + "resolved": "https://registry.npmjs.org/source-map-js/-/source-map-js-1.2.0.tgz", + "integrity": "sha512-itJW8lvSA0TXEphiRoawsCksnlf8SyvmFzIhltqAHluXd88pkCd+cXJVHTDwdCr0IzwptSm035IHQktUu1QUMg==", "dev": true }, "string-width": { @@ -8090,9 +8826,9 @@ } }, "three": { - "version": "0.142.0", - "resolved": "https://registry.npmjs.org/three/-/three-0.142.0.tgz", - "integrity": "sha512-ESjPO+3geFr+ZUfVMpMnF/eVU2uJPOh0e2ZpMFqjNca1wApS9lJb7E4MjwGIczgt9iuKd8PEm6Pfgp2bJ92Xtg==", + "version": "0.156.1", + "resolved": "https://registry.npmjs.org/three/-/three-0.156.1.tgz", + "integrity": "sha512-kP7H0FK9d/k6t/XvQ9FO6i+QrePoDcNhwl0I02+wmUJRNSLCUIDMcfObnzQvxb37/0Uc9TDT0T1HgsRRrO6SYQ==", "dev": true }, "tippy.js": { @@ -8134,434 +8870,24 @@ "dev": true }, "tsparticles": { - "version": "2.12.0", - "resolved": "https://registry.npmjs.org/tsparticles/-/tsparticles-2.12.0.tgz", - "integrity": "sha512-aw77llkaEhcKYUHuRlggA6SB1Dpa814/nrStp9USGiDo5QwE1Ckq30QAgdXU6GRvnblUFsiO750ZuLQs5Y0tVw==", - "dev": true, - "requires": { - "tsparticles-engine": "^2.12.0", - "tsparticles-interaction-external-trail": "^2.12.0", - "tsparticles-plugin-absorbers": "^2.12.0", - "tsparticles-plugin-emitters": "^2.12.0", - "tsparticles-slim": "^2.12.0", - "tsparticles-updater-destroy": "^2.12.0", - "tsparticles-updater-roll": "^2.12.0", - "tsparticles-updater-tilt": "^2.12.0", - "tsparticles-updater-twinkle": "^2.12.0", - "tsparticles-updater-wobble": "^2.12.0" - } - }, - "tsparticles-basic": { - "version": "2.12.0", - "resolved": "https://registry.npmjs.org/tsparticles-basic/-/tsparticles-basic-2.12.0.tgz", - "integrity": "sha512-pN6FBpL0UsIUXjYbiui5+IVsbIItbQGOlwyGV55g6IYJBgdTNXgFX0HRYZGE9ZZ9psEXqzqwLM37zvWnb5AG9g==", - "dev": true, - "requires": { - "tsparticles-engine": "^2.12.0", - "tsparticles-move-base": "^2.12.0", - "tsparticles-shape-circle": "^2.12.0", - "tsparticles-updater-color": "^2.12.0", - "tsparticles-updater-opacity": "^2.12.0", - "tsparticles-updater-out-modes": "^2.12.0", - "tsparticles-updater-size": "^2.12.0" - } - }, - "tsparticles-engine": { - "version": "2.12.0", - "resolved": "https://registry.npmjs.org/tsparticles-engine/-/tsparticles-engine-2.12.0.tgz", - "integrity": "sha512-ZjDIYex6jBJ4iMc9+z0uPe7SgBnmb6l+EJm83MPIsOny9lPpetMsnw/8YJ3xdxn8hV+S3myTpTN1CkOVmFv0QQ==", - "dev": true - }, - "tsparticles-interaction-external-attract": { - "version": "2.12.0", - "resolved": "https://registry.npmjs.org/tsparticles-interaction-external-attract/-/tsparticles-interaction-external-attract-2.12.0.tgz", - "integrity": "sha512-0roC6D1QkFqMVomcMlTaBrNVjVOpyNzxIUsjMfshk2wUZDAvTNTuWQdUpmsLS4EeSTDN3rzlGNnIuuUQqyBU5w==", - "dev": true, - "requires": { - "tsparticles-engine": "^2.12.0" - } - }, - "tsparticles-interaction-external-bounce": { - "version": "2.12.0", - "resolved": "https://registry.npmjs.org/tsparticles-interaction-external-bounce/-/tsparticles-interaction-external-bounce-2.12.0.tgz", - "integrity": "sha512-MMcqKLnQMJ30hubORtdq+4QMldQ3+gJu0bBYsQr9BsThsh8/V0xHc1iokZobqHYVP5tV77mbFBD8Z7iSCf0TMQ==", - "dev": true, - "requires": { - "tsparticles-engine": "^2.12.0" - } - }, - "tsparticles-interaction-external-bubble": { - "version": "2.12.0", - "resolved": "https://registry.npmjs.org/tsparticles-interaction-external-bubble/-/tsparticles-interaction-external-bubble-2.12.0.tgz", - "integrity": "sha512-5kImCSCZlLNccXOHPIi2Yn+rQWTX3sEa/xCHwXW19uHxtILVJlnAweayc8+Zgmb7mo0DscBtWVFXHPxrVPFDUA==", - "dev": true, - "requires": { - "tsparticles-engine": "^2.12.0" - } - }, - "tsparticles-interaction-external-connect": { - "version": "2.12.0", - "resolved": "https://registry.npmjs.org/tsparticles-interaction-external-connect/-/tsparticles-interaction-external-connect-2.12.0.tgz", - "integrity": "sha512-ymzmFPXz6AaA1LAOL5Ihuy7YSQEW8MzuSJzbd0ES13U8XjiU3HlFqlH6WGT1KvXNw6WYoqrZt0T3fKxBW3/C3A==", - "dev": true, - "requires": { - "tsparticles-engine": "^2.12.0" - } - }, - "tsparticles-interaction-external-grab": { - "version": "2.12.0", - "resolved": "https://registry.npmjs.org/tsparticles-interaction-external-grab/-/tsparticles-interaction-external-grab-2.12.0.tgz", - "integrity": "sha512-iQF/A947hSfDNqAjr49PRjyQaeRkYgTYpfNmAf+EfME8RsbapeP/BSyF6mTy0UAFC0hK2A2Hwgw72eT78yhXeQ==", - "dev": true, - "requires": { - "tsparticles-engine": "^2.12.0" - } - }, - "tsparticles-interaction-external-pause": { - "version": "2.12.0", - "resolved": "https://registry.npmjs.org/tsparticles-interaction-external-pause/-/tsparticles-interaction-external-pause-2.12.0.tgz", - "integrity": "sha512-4SUikNpsFROHnRqniL+uX2E388YTtfRWqqqZxRhY0BrijH4z04Aii3YqaGhJxfrwDKkTQlIoM2GbFT552QZWjw==", - "dev": true, - "requires": { - "tsparticles-engine": "^2.12.0" - } - }, - "tsparticles-interaction-external-push": { - "version": "2.12.0", - "resolved": "https://registry.npmjs.org/tsparticles-interaction-external-push/-/tsparticles-interaction-external-push-2.12.0.tgz", - "integrity": "sha512-kqs3V0dgDKgMoeqbdg+cKH2F+DTrvfCMrPF1MCCUpBCqBiH+TRQpJNNC86EZYHfNUeeLuIM3ttWwIkk2hllR/Q==", - "dev": true, - "requires": { - "tsparticles-engine": "^2.12.0" - } - }, - "tsparticles-interaction-external-remove": { - "version": "2.12.0", - "resolved": "https://registry.npmjs.org/tsparticles-interaction-external-remove/-/tsparticles-interaction-external-remove-2.12.0.tgz", - "integrity": "sha512-2eNIrv4m1WB2VfSVj46V2L/J9hNEZnMgFc+A+qmy66C8KzDN1G8aJUAf1inW8JVc0lmo5+WKhzex4X0ZSMghBg==", - "dev": true, - "requires": { - "tsparticles-engine": "^2.12.0" - } - }, - "tsparticles-interaction-external-repulse": { - "version": "2.12.0", - "resolved": "https://registry.npmjs.org/tsparticles-interaction-external-repulse/-/tsparticles-interaction-external-repulse-2.12.0.tgz", - "integrity": "sha512-rSzdnmgljeBCj5FPp4AtGxOG9TmTsK3AjQW0vlyd1aG2O5kSqFjR+FuT7rfdSk9LEJGH5SjPFE6cwbuy51uEWA==", - "dev": true, - "requires": { - "tsparticles-engine": "^2.12.0" - } - }, - "tsparticles-interaction-external-slow": { - "version": "2.12.0", - "resolved": "https://registry.npmjs.org/tsparticles-interaction-external-slow/-/tsparticles-interaction-external-slow-2.12.0.tgz", - "integrity": "sha512-2IKdMC3om7DttqyroMtO//xNdF0NvJL/Lx7LDo08VpfTgJJozxU+JAUT8XVT7urxhaDzbxSSIROc79epESROtA==", - "dev": true, - "requires": { - "tsparticles-engine": "^2.12.0" - } - }, - "tsparticles-interaction-external-trail": { - "version": "2.12.0", - "resolved": "https://registry.npmjs.org/tsparticles-interaction-external-trail/-/tsparticles-interaction-external-trail-2.12.0.tgz", - "integrity": "sha512-LKSapU5sPTaZqYx+y5VJClj0prlV7bswplSFQaIW1raXkvsk45qir2AVcpP5JUhZSFSG+SwsHr+qCgXhNeN1KA==", - "dev": true, - "requires": { - "tsparticles-engine": "^2.12.0" - } - }, - "tsparticles-interaction-particles-attract": { - "version": "2.12.0", - "resolved": "https://registry.npmjs.org/tsparticles-interaction-particles-attract/-/tsparticles-interaction-particles-attract-2.12.0.tgz", - "integrity": "sha512-Hl8qwuwF9aLq3FOkAW+Zomu7Gb8IKs6Y3tFQUQScDmrrSCaeRt2EGklAiwgxwgntmqzL7hbMWNx06CHHcUQKdQ==", - "dev": true, - "requires": { - "tsparticles-engine": "^2.12.0" - } - }, - "tsparticles-interaction-particles-collisions": { - "version": "2.12.0", - "resolved": "https://registry.npmjs.org/tsparticles-interaction-particles-collisions/-/tsparticles-interaction-particles-collisions-2.12.0.tgz", - "integrity": "sha512-Se9nPWlyPxdsnHgR6ap4YUImAu3W5MeGKJaQMiQpm1vW8lSMOUejI1n1ioIaQth9weKGKnD9rvcNn76sFlzGBA==", - "dev": true, - "requires": { - "tsparticles-engine": "^2.12.0" - } - }, - "tsparticles-interaction-particles-links": { - "version": "2.12.0", - "resolved": "https://registry.npmjs.org/tsparticles-interaction-particles-links/-/tsparticles-interaction-particles-links-2.12.0.tgz", - "integrity": "sha512-e7I8gRs4rmKfcsHONXMkJnymRWpxHmeaJIo4g2NaDRjIgeb2AcJSWKWZvrsoLnm7zvaf/cMQlbN6vQwCixYq3A==", - "dev": true, - "requires": { - "tsparticles-engine": "^2.12.0" - } - }, - "tsparticles-move-base": { - "version": "2.12.0", - "resolved": "https://registry.npmjs.org/tsparticles-move-base/-/tsparticles-move-base-2.12.0.tgz", - "integrity": "sha512-oSogCDougIImq+iRtIFJD0YFArlorSi8IW3HD2gO3USkH+aNn3ZqZNTqp321uB08K34HpS263DTbhLHa/D6BWw==", - "dev": true, - "requires": { - "tsparticles-engine": "^2.12.0" - } - }, - "tsparticles-move-parallax": { - "version": "2.12.0", - "resolved": "https://registry.npmjs.org/tsparticles-move-parallax/-/tsparticles-move-parallax-2.12.0.tgz", - "integrity": "sha512-58CYXaX8Ih5rNtYhpnH0YwU4Ks7gVZMREGUJtmjhuYN+OFr9FVdF3oDIJ9N6gY5a5AnAKz8f5j5qpucoPRcYrQ==", - "dev": true, - "requires": { - "tsparticles-engine": "^2.12.0" - } - }, - "tsparticles-particles.js": { - "version": "2.12.0", - "resolved": "https://registry.npmjs.org/tsparticles-particles.js/-/tsparticles-particles.js-2.12.0.tgz", - "integrity": "sha512-LyOuvYdhbUScmA4iDgV3LxA0HzY1DnOwQUy3NrPYO393S2YwdDjdwMod6Btq7EBUjg9FVIh+sZRizgV5elV2dg==", - "dev": true, - "requires": { - "tsparticles-engine": "^2.12.0" - } - }, - "tsparticles-plugin-absorbers": { - "version": "2.12.0", - "resolved": "https://registry.npmjs.org/tsparticles-plugin-absorbers/-/tsparticles-plugin-absorbers-2.12.0.tgz", - "integrity": "sha512-2CkPreaXHrE5VzFlxUKLeRB5t66ff+3jwLJoDFgQcp+R4HOEITo0bBZv2DagGP0QZdYN4grpnQzRBVdB4d1rWA==", - "dev": true, - "requires": { - "tsparticles-engine": "^2.12.0" - } - }, - "tsparticles-plugin-easing-quad": { - "version": "2.12.0", - "resolved": "https://registry.npmjs.org/tsparticles-plugin-easing-quad/-/tsparticles-plugin-easing-quad-2.12.0.tgz", - "integrity": "sha512-2mNqez5pydDewMIUWaUhY5cNQ80IUOYiujwG6qx9spTq1D6EEPLbRNAEL8/ecPdn2j1Um3iWSx6lo340rPkv4Q==", - "dev": true, - "requires": { - "tsparticles-engine": "^2.12.0" - } - }, - "tsparticles-plugin-emitters": { - "version": "2.12.0", - "resolved": "https://registry.npmjs.org/tsparticles-plugin-emitters/-/tsparticles-plugin-emitters-2.12.0.tgz", - "integrity": "sha512-fbskYnaXWXivBh9KFReVCfqHdhbNQSK2T+fq2qcGEWpwtDdgujcaS1k2Q/xjZnWNMfVesik4IrqspcL51gNdSA==", - "dev": true, - "requires": { - "tsparticles-engine": "^2.12.0" - } - }, - "tsparticles-shape-circle": { - "version": "2.12.0", - "resolved": "https://registry.npmjs.org/tsparticles-shape-circle/-/tsparticles-shape-circle-2.12.0.tgz", - "integrity": "sha512-L6OngbAlbadG7b783x16ns3+SZ7i0SSB66M8xGa5/k+YcY7zm8zG0uPt1Hd+xQDR2aNA3RngVM10O23/Lwk65Q==", - "dev": true, - "requires": { - "tsparticles-engine": "^2.12.0" - } - }, - "tsparticles-shape-image": { - "version": "2.12.0", - "resolved": "https://registry.npmjs.org/tsparticles-shape-image/-/tsparticles-shape-image-2.12.0.tgz", - "integrity": "sha512-iCkSdUVa40DxhkkYjYuYHr9MJGVw+QnQuN5UC+e/yBgJQY+1tQL8UH0+YU/h0GHTzh5Sm+y+g51gOFxHt1dj7Q==", - "dev": true, - "requires": { - "tsparticles-engine": "^2.12.0" - } - }, - "tsparticles-shape-line": { - "version": "2.12.0", - "resolved": "https://registry.npmjs.org/tsparticles-shape-line/-/tsparticles-shape-line-2.12.0.tgz", - "integrity": "sha512-RcpKmmpKlk+R8mM5wA2v64Lv1jvXtU4SrBDv3vbdRodKbKaWGGzymzav1Q0hYyDyUZgplEK/a5ZwrfrOwmgYGA==", - "dev": true, - "requires": { - "tsparticles-engine": "^2.12.0" - } - }, - "tsparticles-shape-polygon": { - "version": "2.12.0", - "resolved": "https://registry.npmjs.org/tsparticles-shape-polygon/-/tsparticles-shape-polygon-2.12.0.tgz", - "integrity": "sha512-5YEy7HVMt1Obxd/jnlsjajchAlYMr9eRZWN+lSjcFSH6Ibra7h59YuJVnwxOxAobpijGxsNiBX0PuGQnB47pmA==", - "dev": true, - "requires": { - "tsparticles-engine": "^2.12.0" - } - }, - "tsparticles-shape-square": { - "version": "2.12.0", - "resolved": "https://registry.npmjs.org/tsparticles-shape-square/-/tsparticles-shape-square-2.12.0.tgz", - "integrity": "sha512-33vfajHqmlODKaUzyPI/aVhnAOT09V7nfEPNl8DD0cfiNikEuPkbFqgJezJuE55ebtVo7BZPDA9o7GYbWxQNuw==", - "dev": true, - "requires": { - "tsparticles-engine": "^2.12.0" - } - }, - "tsparticles-shape-star": { - "version": "2.12.0", - "resolved": "https://registry.npmjs.org/tsparticles-shape-star/-/tsparticles-shape-star-2.12.0.tgz", - "integrity": "sha512-4sfG/BBqm2qBnPLASl2L5aBfCx86cmZLXeh49Un+TIR1F5Qh4XUFsahgVOG0vkZQa+rOsZPEH04xY5feWmj90g==", - "dev": true, - "requires": { - "tsparticles-engine": "^2.12.0" - } - }, - "tsparticles-shape-text": { - "version": "2.12.0", - "resolved": "https://registry.npmjs.org/tsparticles-shape-text/-/tsparticles-shape-text-2.12.0.tgz", - "integrity": "sha512-v2/FCA+hyTbDqp2ymFOe97h/NFb2eezECMrdirHWew3E3qlvj9S/xBibjbpZva2gnXcasBwxn0+LxKbgGdP0rA==", - "dev": true, - "requires": { - "tsparticles-engine": "^2.12.0" - } - }, - "tsparticles-slim": { - "version": "2.12.0", - "resolved": "https://registry.npmjs.org/tsparticles-slim/-/tsparticles-slim-2.12.0.tgz", - "integrity": "sha512-27w9aGAAAPKHvP4LHzWFpyqu7wKyulayyaZ/L6Tuuejy4KP4BBEB4rY5GG91yvAPsLtr6rwWAn3yS+uxnBDpkA==", - "dev": true, - "requires": { - "tsparticles-basic": "^2.12.0", - "tsparticles-engine": "^2.12.0", - "tsparticles-interaction-external-attract": "^2.12.0", - "tsparticles-interaction-external-bounce": "^2.12.0", - "tsparticles-interaction-external-bubble": "^2.12.0", - "tsparticles-interaction-external-connect": "^2.12.0", - "tsparticles-interaction-external-grab": "^2.12.0", - "tsparticles-interaction-external-pause": "^2.12.0", - "tsparticles-interaction-external-push": "^2.12.0", - "tsparticles-interaction-external-remove": "^2.12.0", - "tsparticles-interaction-external-repulse": "^2.12.0", - "tsparticles-interaction-external-slow": "^2.12.0", - "tsparticles-interaction-particles-attract": "^2.12.0", - "tsparticles-interaction-particles-collisions": "^2.12.0", - "tsparticles-interaction-particles-links": "^2.12.0", - "tsparticles-move-base": "^2.12.0", - "tsparticles-move-parallax": "^2.12.0", - "tsparticles-particles.js": "^2.12.0", - "tsparticles-plugin-easing-quad": "^2.12.0", - "tsparticles-shape-circle": "^2.12.0", - "tsparticles-shape-image": "^2.12.0", - "tsparticles-shape-line": "^2.12.0", - "tsparticles-shape-polygon": "^2.12.0", - "tsparticles-shape-square": "^2.12.0", - "tsparticles-shape-star": "^2.12.0", - "tsparticles-shape-text": "^2.12.0", - "tsparticles-updater-color": "^2.12.0", - "tsparticles-updater-life": "^2.12.0", - "tsparticles-updater-opacity": "^2.12.0", - "tsparticles-updater-out-modes": "^2.12.0", - "tsparticles-updater-rotate": "^2.12.0", - "tsparticles-updater-size": "^2.12.0", - "tsparticles-updater-stroke-color": "^2.12.0" - } - }, - "tsparticles-updater-color": { - "version": "2.12.0", - "resolved": "https://registry.npmjs.org/tsparticles-updater-color/-/tsparticles-updater-color-2.12.0.tgz", - "integrity": "sha512-KcG3a8zd0f8CTiOrylXGChBrjhKcchvDJjx9sp5qpwQK61JlNojNCU35xoaSk2eEHeOvFjh0o3CXWUmYPUcBTQ==", - "dev": true, - "requires": { - "tsparticles-engine": "^2.12.0" - } - }, - "tsparticles-updater-destroy": { - "version": "2.12.0", - "resolved": "https://registry.npmjs.org/tsparticles-updater-destroy/-/tsparticles-updater-destroy-2.12.0.tgz", - "integrity": "sha512-6NN3dJhxACvzbIGL4dADbYQSZJmdHfwjujj1uvnxdMbb2x8C/AZzGxiN33smo4jkrZ5VLEWZWCJPJ8aOKjQ2Sg==", - "dev": true, - "requires": { - "tsparticles-engine": "^2.12.0" - } - }, - "tsparticles-updater-life": { - "version": "2.12.0", - "resolved": "https://registry.npmjs.org/tsparticles-updater-life/-/tsparticles-updater-life-2.12.0.tgz", - "integrity": "sha512-J7RWGHAZkowBHpcLpmjKsxwnZZJ94oGEL2w+wvW1/+ZLmAiFFF6UgU0rHMC5CbHJT4IPx9cbkYMEHsBkcRJ0Bw==", - "dev": true, - "requires": { - "tsparticles-engine": "^2.12.0" - } - }, - "tsparticles-updater-opacity": { - "version": "2.12.0", - "resolved": "https://registry.npmjs.org/tsparticles-updater-opacity/-/tsparticles-updater-opacity-2.12.0.tgz", - "integrity": "sha512-YUjMsgHdaYi4HN89LLogboYcCi1o9VGo21upoqxq19yRy0hRCtx2NhH22iHF/i5WrX6jqshN0iuiiNefC53CsA==", - "dev": true, - "requires": { - "tsparticles-engine": "^2.12.0" - } - }, - "tsparticles-updater-out-modes": { - "version": "2.12.0", - "resolved": "https://registry.npmjs.org/tsparticles-updater-out-modes/-/tsparticles-updater-out-modes-2.12.0.tgz", - "integrity": "sha512-owBp4Gk0JNlSrmp12XVEeBroDhLZU+Uq3szbWlHGSfcR88W4c/0bt0FiH5bHUqORIkw+m8O56hCjbqwj69kpOQ==", - "dev": true, - "requires": { - "tsparticles-engine": "^2.12.0" - } - }, - "tsparticles-updater-roll": { - "version": "2.12.0", - "resolved": "https://registry.npmjs.org/tsparticles-updater-roll/-/tsparticles-updater-roll-2.12.0.tgz", - "integrity": "sha512-dxoxY5jP4C9x15BxlUv5/Q8OjUPBiE09ToXRyBxea9aEJ7/iMw6odvi1HuT0H1vTIfV7o1MYawjeCbMycvODKQ==", - "dev": true, - "requires": { - "tsparticles-engine": "^2.12.0" - } - }, - "tsparticles-updater-rotate": { - "version": "2.12.0", - "resolved": "https://registry.npmjs.org/tsparticles-updater-rotate/-/tsparticles-updater-rotate-2.12.0.tgz", - "integrity": "sha512-waOFlGFmEZOzsQg4C4VSejNVXGf4dMf3fsnQrEROASGf1FCd8B6WcZau7JtXSTFw0OUGuk8UGz36ETWN72DkCw==", - "dev": true, - "requires": { - "tsparticles-engine": "^2.12.0" - } - }, - "tsparticles-updater-size": { - "version": "2.12.0", - "resolved": "https://registry.npmjs.org/tsparticles-updater-size/-/tsparticles-updater-size-2.12.0.tgz", - "integrity": "sha512-B0yRdEDd/qZXCGDL/ussHfx5YJ9UhTqNvmS5X2rR2hiZhBAE2fmsXLeWkdtF2QusjPeEqFDxrkGiLOsh6poqRA==", - "dev": true, - "requires": { - "tsparticles-engine": "^2.12.0" - } - }, - "tsparticles-updater-stroke-color": { - "version": "2.12.0", - "resolved": "https://registry.npmjs.org/tsparticles-updater-stroke-color/-/tsparticles-updater-stroke-color-2.12.0.tgz", - "integrity": "sha512-MPou1ZDxsuVq6SN1fbX+aI5yrs6FyP2iPCqqttpNbWyL+R6fik1rL0ab/x02B57liDXqGKYomIbBQVP3zUTW1A==", - "dev": true, - "requires": { - "tsparticles-engine": "^2.12.0" - } - }, - "tsparticles-updater-tilt": { - "version": "2.12.0", - "resolved": "https://registry.npmjs.org/tsparticles-updater-tilt/-/tsparticles-updater-tilt-2.12.0.tgz", - "integrity": "sha512-HDEFLXazE+Zw+kkKKAiv0Fs9D9sRP61DoCR6jZ36ipea6OBgY7V1Tifz2TSR1zoQkk57ER9+EOQbkSQO+YIPGQ==", - "dev": true, - "requires": { - "tsparticles-engine": "^2.12.0" - } - }, - "tsparticles-updater-twinkle": { - "version": "2.12.0", - "resolved": "https://registry.npmjs.org/tsparticles-updater-twinkle/-/tsparticles-updater-twinkle-2.12.0.tgz", - "integrity": "sha512-JhK/DO4kTx7IFwMBP2EQY9hBaVVvFnGBvX21SQWcjkymmN1hZ+NdcgUtR9jr4jUiiSNdSl7INaBuGloVjWvOgA==", - "dev": true, - "requires": { - "tsparticles-engine": "^2.12.0" - } - }, - "tsparticles-updater-wobble": { - "version": "2.12.0", - "resolved": "https://registry.npmjs.org/tsparticles-updater-wobble/-/tsparticles-updater-wobble-2.12.0.tgz", - "integrity": "sha512-85FIRl95ipD3jfIsQdDzcUC5PRMWIrCYqBq69nIy9P8rsNzygn+JK2n+P1VQZowWsZvk0mYjqb9OVQB21Lhf6Q==", + "version": "3.4.0", + "resolved": "https://registry.npmjs.org/tsparticles/-/tsparticles-3.4.0.tgz", + "integrity": "sha512-dJV40INsemU8cav60JvWr3wvEcGitNsRpjepIMenQmew7qo4bk5ZpzY9n6XK5Lu72OwDIyFdF7DCDbE4KTnPsQ==", "dev": true, "requires": { - "tsparticles-engine": "^2.12.0" + "@tsparticles/engine": "^3.4.0", + "@tsparticles/interaction-external-trail": "^3.4.0", + "@tsparticles/plugin-absorbers": "^3.4.0", + "@tsparticles/plugin-emitters": "^3.4.0", + "@tsparticles/plugin-emitters-shape-circle": "^3.4.0", + "@tsparticles/plugin-emitters-shape-square": "^3.4.0", + "@tsparticles/shape-text": "^3.4.0", + "@tsparticles/slim": "^3.4.0", + "@tsparticles/updater-destroy": "^3.4.0", + "@tsparticles/updater-roll": "^3.4.0", + "@tsparticles/updater-tilt": "^3.4.0", + "@tsparticles/updater-twinkle": "^3.4.0", + "@tsparticles/updater-wobble": "^3.4.0" } }, "tweetnacl": { @@ -8740,16 +9066,6 @@ "tippy.js": "^6.3.7" } }, - "vue3-particles": { - "version": "2.12.0", - "resolved": "https://registry.npmjs.org/vue3-particles/-/vue3-particles-2.12.0.tgz", - "integrity": "sha512-Vc8CSNoT/VWD4LTauYDR2EXN6mPU5qz35wqVPuhW0Wj9IbwGR9FMTSWktjSrKlpiUJgGzMJ003pqpfWYi4vnZw==", - "dev": true, - "requires": { - "tsparticles-engine": "^2.12.0", - "vue": "^3.3.4" - } - }, "vuedraggable": { "version": "4.1.0", "resolved": "https://registry.npmjs.org/vuedraggable/-/vuedraggable-4.1.0.tgz", diff --git a/package.json b/package.json index 8d05a6be7..bcd3fff44 100644 --- a/package.json +++ b/package.json @@ -14,6 +14,7 @@ "@inertiajs/vue3": "^1.0.11", "@tailwindcss/forms": "^0.5.3", "@tailwindcss/typography": "^0.5.7", + "@tsparticles/vue3": "^3.0.1", "@vitejs/plugin-vue": "^4.3.0", "@vue/server-renderer": "^3.3.0", "@vueuse/core": "^10.4.0", @@ -34,10 +35,10 @@ "millify": "^5.0.0", "postcss": "^8.4.18", "pusher-js": "^7.3.0", - "skinview3d": "^2.3.0-alpha.2", + "skinview3d": "^3.0.1", "sweetalert2": "github:MineTrax/sweetalert2", "tailwindcss": "^3.1.8", - "tsparticles": "^2.12.0", + "tsparticles": "^3.4.0", "v-calendar": "^3.0.0-alpha.8", "vform": "^2.1.2", "vite": "^4.4.9", @@ -47,7 +48,6 @@ "vue-echarts": "^6.5.5", "vue-multiselect": "^3.0.0-alpha.2", "vue-tippy": "^6.3", - "vue3-particles": "^2.12.0", "vuedraggable": "^4.1.0", "xterm": "^4.19.0", "xterm-addon-attach": "^0.6.0", diff --git a/public/build/default/assets/ActionMessage-d66d744a.js b/public/build/default/assets/ActionMessage-d75e1dd9.js similarity index 71% rename from public/build/default/assets/ActionMessage-d66d744a.js rename to public/build/default/assets/ActionMessage-d75e1dd9.js index c0e7aa542..d7a35681d 100644 --- a/public/build/default/assets/ActionMessage-d66d744a.js +++ b/public/build/default/assets/ActionMessage-d75e1dd9.js @@ -1 +1 @@ -import{o as s,d as t,b as o,w as n,j as c,m as i,a as r,N as l,S as d}from"./app-0b9725b5.js";const _={class:"text-sm text-gray-600"},v={__name:"ActionMessage",props:{on:Boolean},setup(e){return(a,m)=>(s(),t("div",null,[o(d,{"leave-active-class":"transition duration-1000 ease-in","leave-from-class":"opacity-100","leave-to-class":"opacity-0"},{default:n(()=>[c(r("div",_,[l(a.$slots,"default")],512),[[i,e.on]])]),_:3})]))}};export{v as _}; +import{o as s,d as t,b as o,w as n,j as c,m as i,a as r,R as l,V as d}from"./app-f1704ce4.js";const _={class:"text-sm text-gray-600"},v={__name:"ActionMessage",props:{on:Boolean},setup(e){return(a,m)=>(s(),t("div",null,[o(d,{"leave-active-class":"transition duration-1000 ease-in","leave-from-class":"opacity-100","leave-to-class":"opacity-0"},{default:n(()=>[c(r("div",_,[l(a.$slots,"default")],512),[[i,e.on]])]),_:3})]))}};export{v as _}; diff --git a/public/build/default/assets/ActionSection-b6ab9220.js b/public/build/default/assets/ActionSection-d56e0acb.js similarity index 75% rename from public/build/default/assets/ActionSection-b6ab9220.js rename to public/build/default/assets/ActionSection-d56e0acb.js index d278a87fb..404cd2fd1 100644 --- a/public/build/default/assets/ActionSection-b6ab9220.js +++ b/public/build/default/assets/ActionSection-d56e0acb.js @@ -1 +1 @@ -import{J as a}from"./SectionTitle-c29be856.js";import{o as d,d as i,b as c,w as o,N as t,a as e}from"./app-0b9725b5.js";const r={class:"md:grid md:grid-cols-3 md:gap-6"},n={class:"mt-5 md:mt-0 md:col-span-2"},l={class:"px-4 py-5 sm:p-6 bg-white dark:bg-cool-gray-800 shadow sm:rounded-lg"},h={__name:"ActionSection",setup(m){return(s,p)=>(d(),i("div",r,[c(a,null,{title:o(()=>[t(s.$slots,"title")]),description:o(()=>[t(s.$slots,"description")]),_:3}),e("div",n,[e("div",l,[t(s.$slots,"content")])])]))}};export{h as _}; +import{J as a}from"./SectionTitle-8e514380.js";import{o as d,d as i,b as c,w as o,R as t,a as e}from"./app-f1704ce4.js";const r={class:"md:grid md:grid-cols-3 md:gap-6"},n={class:"mt-5 md:mt-0 md:col-span-2"},l={class:"px-4 py-5 sm:p-6 bg-white dark:bg-cool-gray-800 shadow sm:rounded-lg"},h={__name:"ActionSection",setup(m){return(s,p)=>(d(),i("div",r,[c(a,null,{title:o(()=>[t(s.$slots,"title")]),description:o(()=>[t(s.$slots,"description")]),_:3}),e("div",n,[e("div",l,[t(s.$slots,"content")])])]))}};export{h as _}; diff --git a/public/build/default/assets/AdminLayout-22bfd88d.js b/public/build/default/assets/AdminLayout-22bfd88d.js deleted file mode 100644 index b8442e925..000000000 --- a/public/build/default/assets/AdminLayout-22bfd88d.js +++ /dev/null @@ -1 +0,0 @@ -import{A as X}from"./AppLayout-71437c13.js";import{o as n,d as s,a,E as A,X as V,D as j,r as b,x as y,s as L,R as E,Y,l as G,c as v,w as k,J as $,n as h,e as g,t as _,u as p,Z as J,b as D,F as N,g as R,i as Z,N as Q}from"./app-0b9725b5.js";import{t as O,u as H,o as w,H as z,b as ee,N as I,a as x}from"./use-resolve-button-type-7b74f3df.js";import{u as te}from"./useAuthorizable-663b53e2.js";import{r as re}from"./CloudArrowDownIcon-98e13329.js";import{u as ne}from"./index-970c465b.js";function le(e,t){return n(),s("svg",{xmlns:"http://www.w3.org/2000/svg",fill:"none",viewBox:"0 0 24 24","stroke-width":"1.5",stroke:"currentColor","aria-hidden":"true"},[a("path",{"stroke-linecap":"round","stroke-linejoin":"round",d:"M4.26 10.147a60.436 60.436 0 00-.491 6.347A48.627 48.627 0 0112 20.904a48.627 48.627 0 018.232-4.41 60.46 60.46 0 00-.491-6.347m-15.482 0a50.57 50.57 0 00-2.658-.813A59.905 59.905 0 0112 3.493a59.902 59.902 0 0110.399 5.84c-.896.248-1.783.52-2.658.814m-15.482 0A50.697 50.697 0 0112 13.489a50.702 50.702 0 017.74-3.342M6.75 15a.75.75 0 100-1.5.75.75 0 000 1.5zm0 0v-3.675A55.378 55.378 0 0112 8.443m-7.007 11.55A5.981 5.981 0 006.75 15.75v-1.5"})])}function ie(e,t){return n(),s("svg",{xmlns:"http://www.w3.org/2000/svg",fill:"none",viewBox:"0 0 24 24","stroke-width":"1.5",stroke:"currentColor","aria-hidden":"true"},[a("path",{"stroke-linecap":"round","stroke-linejoin":"round",d:"M12 12.75c1.148 0 2.278.08 3.383.237 1.037.146 1.866.966 1.866 2.013 0 3.728-2.35 6.75-5.25 6.75S6.75 18.728 6.75 15c0-1.046.83-1.867 1.866-2.013A24.204 24.204 0 0112 12.75zm0 0c2.883 0 5.647.508 8.207 1.44a23.91 23.91 0 01-1.152 6.06M12 12.75c-2.883 0-5.647.508-8.208 1.44.125 2.104.52 4.136 1.153 6.06M12 12.75a2.25 2.25 0 002.248-2.354M12 12.75a2.25 2.25 0 01-2.248-2.354M12 8.25c.995 0 1.971-.08 2.922-.236.403-.066.74-.358.795-.762a3.778 3.778 0 00-.399-2.25M12 8.25c-.995 0-1.97-.08-2.922-.236-.402-.066-.74-.358-.795-.762a3.734 3.734 0 01.4-2.253M12 8.25a2.25 2.25 0 00-2.248 2.146M12 8.25a2.25 2.25 0 012.248 2.146M8.683 5a6.032 6.032 0 01-1.155-1.002c.07-.63.27-1.222.574-1.747m.581 2.749A3.75 3.75 0 0115.318 5m0 0c.427-.283.815-.62 1.155-.999a4.471 4.471 0 00-.575-1.752M4.921 6a24.048 24.048 0 00-.392 3.314c1.668.546 3.416.914 5.223 1.082M19.08 6c.205 1.08.337 2.187.392 3.314a23.882 23.882 0 01-5.223 1.082"})])}function ae(e,t){return n(),s("svg",{xmlns:"http://www.w3.org/2000/svg",fill:"none",viewBox:"0 0 24 24","stroke-width":"1.5",stroke:"currentColor","aria-hidden":"true"},[a("path",{"stroke-linecap":"round","stroke-linejoin":"round",d:"M10.5 6a7.5 7.5 0 107.5 7.5h-7.5V6z"}),a("path",{"stroke-linecap":"round","stroke-linejoin":"round",d:"M13.5 10.5H21A7.5 7.5 0 0013.5 3v7.5z"})])}function oe(e,t){return n(),s("svg",{xmlns:"http://www.w3.org/2000/svg",fill:"none",viewBox:"0 0 24 24","stroke-width":"1.5",stroke:"currentColor","aria-hidden":"true"},[a("path",{"stroke-linecap":"round","stroke-linejoin":"round",d:"M18.75 19.5l-7.5-7.5 7.5-7.5m-6 15L5.25 12l7.5-7.5"})])}function se(e,t){return n(),s("svg",{xmlns:"http://www.w3.org/2000/svg",fill:"none",viewBox:"0 0 24 24","stroke-width":"1.5",stroke:"currentColor","aria-hidden":"true"},[a("path",{"stroke-linecap":"round","stroke-linejoin":"round",d:"M20.25 6.375c0 2.278-3.694 4.125-8.25 4.125S3.75 8.653 3.75 6.375m16.5 0c0-2.278-3.694-4.125-8.25-4.125S3.75 4.097 3.75 6.375m16.5 0v11.25c0 2.278-3.694 4.125-8.25 4.125s-8.25-1.847-8.25-4.125V6.375m16.5 0v3.75m-16.5-3.75v3.75m16.5 0v3.75C20.25 16.153 16.556 18 12 18s-8.25-1.847-8.25-4.125v-3.75m16.5 0c0 2.278-3.694 4.125-8.25 4.125s-8.25-1.847-8.25-4.125"})])}function ce(e,t){return n(),s("svg",{xmlns:"http://www.w3.org/2000/svg",fill:"none",viewBox:"0 0 24 24","stroke-width":"1.5",stroke:"currentColor","aria-hidden":"true"},[a("path",{"stroke-linecap":"round","stroke-linejoin":"round",d:"M9 12h3.75M9 15h3.75M9 18h3.75m3 .75H18a2.25 2.25 0 002.25-2.25V6.108c0-1.135-.845-2.098-1.976-2.192a48.424 48.424 0 00-1.123-.08m-5.801 0c-.065.21-.1.433-.1.664 0 .414.336.75.75.75h4.5a.75.75 0 00.75-.75 2.25 2.25 0 00-.1-.664m-5.8 0A2.251 2.251 0 0113.5 2.25H15c1.012 0 1.867.668 2.15 1.586m-5.8 0c-.376.023-.75.05-1.124.08C9.095 4.01 8.25 4.973 8.25 6.108V8.25m0 0H4.875c-.621 0-1.125.504-1.125 1.125v11.25c0 .621.504 1.125 1.125 1.125h9.75c.621 0 1.125-.504 1.125-1.125V9.375c0-.621-.504-1.125-1.125-1.125H8.25zM6.75 12h.008v.008H6.75V12zm0 3h.008v.008H6.75V15zm0 3h.008v.008H6.75V18z"})])}function ue(e,t){return n(),s("svg",{xmlns:"http://www.w3.org/2000/svg",fill:"none",viewBox:"0 0 24 24","stroke-width":"1.5",stroke:"currentColor","aria-hidden":"true"},[a("path",{"stroke-linecap":"round","stroke-linejoin":"round",d:"M10.343 3.94c.09-.542.56-.94 1.11-.94h1.093c.55 0 1.02.398 1.11.94l.149.894c.07.424.384.764.78.93.398.164.855.142 1.205-.108l.737-.527a1.125 1.125 0 011.45.12l.773.774c.39.389.44 1.002.12 1.45l-.527.737c-.25.35-.272.806-.107 1.204.165.397.505.71.93.78l.893.15c.543.09.94.56.94 1.109v1.094c0 .55-.397 1.02-.94 1.11l-.893.149c-.425.07-.765.383-.93.78-.165.398-.143.854.107 1.204l.527.738c.32.447.269 1.06-.12 1.45l-.774.773a1.125 1.125 0 01-1.449.12l-.738-.527c-.35-.25-.806-.272-1.203-.107-.397.165-.71.505-.781.929l-.149.894c-.09.542-.56.94-1.11.94h-1.094c-.55 0-1.019-.398-1.11-.94l-.148-.894c-.071-.424-.384-.764-.781-.93-.398-.164-.854-.142-1.204.108l-.738.527c-.447.32-1.06.269-1.45-.12l-.773-.774a1.125 1.125 0 01-.12-1.45l.527-.737c.25-.35.273-.806.108-1.204-.165-.397-.505-.71-.93-.78l-.894-.15c-.542-.09-.94-.56-.94-1.109v-1.094c0-.55.398-1.02.94-1.11l.894-.149c.424-.07.765-.383.93-.78.165-.398.143-.854-.107-1.204l-.527-.738a1.125 1.125 0 01.12-1.45l.773-.773a1.125 1.125 0 011.45-.12l.737.527c.35.25.807.272 1.204.107.397-.165.71-.505.78-.929l.15-.894z"}),a("path",{"stroke-linecap":"round","stroke-linejoin":"round",d:"M15 12a3 3 0 11-6 0 3 3 0 016 0z"})])}function de(e,t){return n(),s("svg",{xmlns:"http://www.w3.org/2000/svg",fill:"none",viewBox:"0 0 24 24","stroke-width":"1.5",stroke:"currentColor","aria-hidden":"true"},[a("path",{"stroke-linecap":"round","stroke-linejoin":"round",d:"M19.5 14.25v-2.625a3.375 3.375 0 00-3.375-3.375h-1.5A1.125 1.125 0 0113.5 7.125v-1.5a3.375 3.375 0 00-3.375-3.375H8.25m0 12.75h7.5m-7.5 3H12M10.5 2.25H5.625c-.621 0-1.125.504-1.125 1.125v17.25c0 .621.504 1.125 1.125 1.125h12.75c.621 0 1.125-.504 1.125-1.125V11.25a9 9 0 00-9-9z"})])}function me(e,t){return n(),s("svg",{xmlns:"http://www.w3.org/2000/svg",fill:"none",viewBox:"0 0 24 24","stroke-width":"1.5",stroke:"currentColor","aria-hidden":"true"},[a("path",{"stroke-linecap":"round","stroke-linejoin":"round",d:"M2.25 12l8.954-8.955c.44-.439 1.152-.439 1.591 0L21.75 12M4.5 9.75v10.125c0 .621.504 1.125 1.125 1.125H9.75v-4.875c0-.621.504-1.125 1.125-1.125h2.25c.621 0 1.125.504 1.125 1.125V21h4.125c.621 0 1.125-.504 1.125-1.125V9.75M8.25 21h8.25"})])}function he(e,t){return n(),s("svg",{xmlns:"http://www.w3.org/2000/svg",fill:"none",viewBox:"0 0 24 24","stroke-width":"1.5",stroke:"currentColor","aria-hidden":"true"},[a("path",{"stroke-linecap":"round","stroke-linejoin":"round",d:"M12 7.5h1.5m-1.5 3h1.5m-7.5 3h7.5m-7.5 3h7.5m3-9h3.375c.621 0 1.125.504 1.125 1.125V18a2.25 2.25 0 01-2.25 2.25M16.5 7.5V18a2.25 2.25 0 002.25 2.25M16.5 7.5V4.875c0-.621-.504-1.125-1.125-1.125H4.125C3.504 3.75 3 4.254 3 4.875V18a2.25 2.25 0 002.25 2.25h13.5M6 7.5h3v3H6v-3z"})])}function ve(e,t){return n(),s("svg",{xmlns:"http://www.w3.org/2000/svg",fill:"none",viewBox:"0 0 24 24","stroke-width":"1.5",stroke:"currentColor","aria-hidden":"true"},[a("path",{"stroke-linecap":"round","stroke-linejoin":"round",d:"M3.75 3v11.25A2.25 2.25 0 006 16.5h2.25M3.75 3h-1.5m1.5 0h16.5m0 0h1.5m-1.5 0v11.25A2.25 2.25 0 0118 16.5h-2.25m-7.5 0h7.5m-7.5 0l-1 3m8.5-3l1 3m0 0l.5 1.5m-.5-1.5h-9.5m0 0l-.5 1.5m.75-9l3-3 2.148 2.148A12.061 12.061 0 0116.5 7.605"})])}function ge(e,t){return n(),s("svg",{xmlns:"http://www.w3.org/2000/svg",fill:"none",viewBox:"0 0 24 24","stroke-width":"1.5",stroke:"currentColor","aria-hidden":"true"},[a("path",{"stroke-linecap":"round","stroke-linejoin":"round",d:"M5.25 14.25h13.5m-13.5 0a3 3 0 01-3-3m3 3a3 3 0 100 6h13.5a3 3 0 100-6m-16.5-3a3 3 0 013-3h13.5a3 3 0 013 3m-19.5 0a4.5 4.5 0 01.9-2.7L5.737 5.1a3.375 3.375 0 012.7-1.35h7.126c1.062 0 2.062.5 2.7 1.35l2.587 3.45a4.5 4.5 0 01.9 2.7m0 0a3 3 0 01-3 3m0 3h.008v.008h-.008v-.008zm0-6h.008v.008h-.008v-.008zm-3 6h.008v.008h-.008v-.008zm0-6h.008v.008h-.008v-.008z"})])}function pe(e,t){return n(),s("svg",{xmlns:"http://www.w3.org/2000/svg",fill:"none",viewBox:"0 0 24 24","stroke-width":"1.5",stroke:"currentColor","aria-hidden":"true"},[a("path",{"stroke-linecap":"round","stroke-linejoin":"round",d:"M16.5 18.75h-9m9 0a3 3 0 013 3h-15a3 3 0 013-3m9 0v-3.375c0-.621-.503-1.125-1.125-1.125h-.871M7.5 18.75v-3.375c0-.621.504-1.125 1.125-1.125h.872m5.007 0H9.497m5.007 0a7.454 7.454 0 01-.982-3.172M9.497 14.25a7.454 7.454 0 00.981-3.172M5.25 4.236c-.982.143-1.954.317-2.916.52A6.003 6.003 0 007.73 9.728M5.25 4.236V4.5c0 2.108.966 3.99 2.48 5.228M5.25 4.236V2.721C7.456 2.41 9.71 2.25 12 2.25c2.291 0 4.545.16 6.75.47v1.516M7.73 9.728a6.726 6.726 0 002.748 1.35m8.272-6.842V4.5c0 2.108-.966 3.99-2.48 5.228m2.48-5.492a46.32 46.32 0 012.916.52 6.003 6.003 0 01-5.395 4.972m0 0a6.726 6.726 0 01-2.749 1.35m0 0a6.772 6.772 0 01-3.044 0"})])}function fe(e,t){return n(),s("svg",{xmlns:"http://www.w3.org/2000/svg",fill:"none",viewBox:"0 0 24 24","stroke-width":"1.5",stroke:"currentColor","aria-hidden":"true"},[a("path",{"stroke-linecap":"round","stroke-linejoin":"round",d:"M15 19.128a9.38 9.38 0 002.625.372 9.337 9.337 0 004.121-.952 4.125 4.125 0 00-7.533-2.493M15 19.128v-.003c0-1.113-.285-2.16-.786-3.07M15 19.128v.106A12.318 12.318 0 018.624 21c-2.331 0-4.512-.645-6.374-1.766l-.001-.109a6.375 6.375 0 0111.964-3.07M12 6.375a3.375 3.375 0 11-6.75 0 3.375 3.375 0 016.75 0zm8.25 2.25a2.625 2.625 0 11-5.25 0 2.625 2.625 0 015.25 0z"})])}let T=Symbol("Context");var M=(e=>(e[e.Open=1]="Open",e[e.Closed=2]="Closed",e[e.Closing=4]="Closing",e[e.Opening=8]="Opening",e))(M||{});function be(){return A(T,null)}function we(e){V(T,e)}var xe=(e=>(e[e.Open=0]="Open",e[e.Closed=1]="Closed",e))(xe||{});let U=Symbol("DisclosureContext");function P(e){let t=A(U,null);if(t===null){let u=new Error(`<${e} /> is missing a parent component.`);throw Error.captureStackTrace&&Error.captureStackTrace(u,P),u}return t}let F=Symbol("DisclosurePanelContext");function ke(){return A(F,null)}let ye=j({name:"Disclosure",props:{as:{type:[Object,String],default:"template"},defaultOpen:{type:[Boolean],default:!1}},setup(e,{slots:t,attrs:u}){let l=b(e.defaultOpen?0:1),r=b(null),c=b(null),o={buttonId:b(`headlessui-disclosure-button-${O()}`),panelId:b(`headlessui-disclosure-panel-${O()}`),disclosureState:l,panel:r,button:c,toggleDisclosure(){l.value=H(l.value,{0:1,1:0})},closeDisclosure(){l.value!==1&&(l.value=1)},close(i){o.closeDisclosure();let m=(()=>i?i instanceof HTMLElement?i:i.value instanceof HTMLElement?w(i):w(o.button):w(o.button))();m==null||m.focus()}};return V(U,o),we(y(()=>H(l.value,{0:M.Open,1:M.Closed}))),()=>{let{defaultOpen:i,...m}=e,f={open:l.value===0,close:o.close};return z({theirProps:m,ourProps:{},slot:f,slots:t,attrs:u,name:"Disclosure"})}}}),Me=j({name:"DisclosureButton",props:{as:{type:[Object,String],default:"button"},disabled:{type:[Boolean],default:!1},id:{type:String,default:null}},setup(e,{attrs:t,slots:u,expose:l}){let r=P("DisclosureButton"),c=ke(),o=y(()=>c===null?!1:c.value===r.panelId.value);L(()=>{o.value||e.id!==null&&(r.buttonId.value=e.id)}),E(()=>{o.value||(r.buttonId.value=null)});let i=b(null);l({el:i,$el:i}),o.value||Y(()=>{r.button.value=i.value});let m=ee(y(()=>({as:e.as,type:t.type})),i);function f(){var d;e.disabled||(o.value?(r.toggleDisclosure(),(d=w(r.button))==null||d.focus()):r.toggleDisclosure())}function C(d){var S;if(!e.disabled)if(o.value)switch(d.key){case x.Space:case x.Enter:d.preventDefault(),d.stopPropagation(),r.toggleDisclosure(),(S=w(r.button))==null||S.focus();break}else switch(d.key){case x.Space:case x.Enter:d.preventDefault(),d.stopPropagation(),r.toggleDisclosure();break}}function B(d){switch(d.key){case x.Space:d.preventDefault();break}}return()=>{var d;let S={open:r.disclosureState.value===0},{id:K,...q}=e,W=o.value?{ref:i,type:m.value,onClick:f,onKeydown:C}:{id:(d=r.buttonId.value)!=null?d:K,ref:i,type:m.value,"aria-expanded":r.disclosureState.value===0,"aria-controls":r.disclosureState.value===0||w(r.panel)?r.panelId.value:void 0,disabled:e.disabled?!0:void 0,onClick:f,onKeydown:C,onKeyup:B};return z({ourProps:W,theirProps:q,slot:S,attrs:t,slots:u,name:"DisclosureButton"})}}}),Ce=j({name:"DisclosurePanel",props:{as:{type:[Object,String],default:"div"},static:{type:Boolean,default:!1},unmount:{type:Boolean,default:!0},id:{type:String,default:null}},setup(e,{attrs:t,slots:u,expose:l}){let r=P("DisclosurePanel");L(()=>{e.id!==null&&(r.panelId.value=e.id)}),E(()=>{r.panelId.value=null}),l({el:r.panel,$el:r.panel}),V(F,r.panelId);let c=be(),o=y(()=>c!==null?(c.value&M.Open)===M.Open:r.disclosureState.value===0);return()=>{var i;let m={open:r.disclosureState.value===0,close:r.close},{id:f,...C}=e,B={id:(i=r.panelId.value)!=null?i:f,ref:r.panel};return z({ourProps:B,theirProps:C,slot:m,attrs:t,slots:u,features:I.RenderStrategy|I.Static,visible:o.value,name:"DisclosurePanel"})}}});function Se(e,t){return n(),s("svg",{xmlns:"http://www.w3.org/2000/svg",viewBox:"0 0 20 20",fill:"currentColor","aria-hidden":"true"},[a("path",{"fill-rule":"evenodd",d:"M5.23 7.21a.75.75 0 011.06.02L10 11.168l3.71-3.938a.75.75 0 111.08 1.04l-4.25 4.5a.75.75 0 01-1.08 0l-4.25-4.5a.75.75 0 01.02-1.06z","clip-rule":"evenodd"})])}const _e={key:1},De={key:1,class:"flex-1"},Be={__name:"SideNavItem",props:{item:Object,collapsed:Boolean},setup(e){const t=e,u=y(()=>{function l(r){return r.some(c=>c.active||l(c.children))}return l(t.item.children)});return(l,r)=>{const c=G("SideNavItem",!0);return!e.item.children.length&&e.item.visible?(n(),v($(e.item.newtab?"a":p(J)),{key:0,class:h(["group flex w-full items-center rounded-md py-2 px-3 text-sm font-medium","hover:bg-gray-100 dark:hover:bg-gray-900",e.item.active?"text-gray-800 font-semibold dark:text-gray-200":"text-gray-600 dark:text-gray-400 font-medium"]),href:e.item.href,target:e.item.newtab?"_blank":null},{default:k(()=>[e.item.icon?(n(),v($(e.item.icon),{key:0,class:h(["w-6 h-6 shrink-0 mr-2 group-hover:text-gray-600 dark:group-hover:text-gray-400",e.item.active?"text-gray-600 dark:text-gray-400":"text-gray-400 dark:text-gray-600"])},null,8,["class"])):g("",!0),e.collapsed?g("",!0):(n(),s("span",_e,_(l.__(e.item.label)),1))]),_:1},8,["class","href","target"])):e.item.children.length&&e.item.visible?(n(),v(p(ye),{key:1,"default-open":u.value},{default:k(({open:o})=>[D(p(Me),{class:h(["group text-left flex w-full items-center rounded-md py-2 px-3 text-sm","hover:bg-gray-100 dark:hover:bg-gray-900",o?"font-semibold text-gray-800 dark:text-gray-200":"text-gray-600 dark:text-gray-400 font-medium"])},{default:k(()=>[e.item.icon?(n(),v($(e.item.icon),{key:0,class:h(["w-6 h-6 shrink-0 mr-2 group-hover:text-gray-600 dark:group-hover:text-gray-400",o?"text-gray-600 dark:text-gray-400":"text-gray-400 dark:text-gray-600"])},null,8,["class"])):g("",!0),e.collapsed?g("",!0):(n(),s("span",De,_(l.__(e.item.label)),1)),e.collapsed?g("",!0):(n(),v(p(Se),{key:2,class:h(["w-6 h-6 shrink-0",o?"-rotate-180 text-gray-600 dark:text-gray-400":"text-gray-400 dark:text-gray-600"])},null,8,["class"]))]),_:2},1032,["class"]),e.collapsed?g("",!0):(n(),v(p(Ce),{key:0,class:"ml-4"},{default:k(()=>[(n(!0),s(N,null,R(e.item.children,i=>(n(),v(c,{key:i.label,item:i},null,8,["item"]))),128))]),_:1}))]),_:1},8,["default-open"])):g("",!0)}}},$e={class:"h-screen overflow-y-auto"},Ae={class:"mt-2 px-2"},Ve={key:0,class:"mt-10 text-xs text-center text-gray-600 dark:text-gray-500"},je={__name:"AdminSideMenu",props:{collapsed:Boolean},emits:["toggleCollapse"],setup(e){const{canWild:t,hasRole:u,can:l}=te(),r=[{label:"Dashboard",href:route("admin.dashboard"),active:route().current("admin.dashboard"),children:[],icon:me,visible:!0},{label:"Servers",href:route("admin.server.index"),active:route().current("admin.server.*"),children:[],icon:ge,visible:t("servers")},{label:"Server Analytics",href:"#",active:route().current("admin.intel.server.*"),children:[{label:"Overview",href:route("admin.intel.server.index"),active:route().current("admin.intel.server.index"),children:[],icon:null,visible:t("server_intel")},{label:"Performance",href:route("admin.intel.server.performance"),active:route().current("admin.intel.server.performance"),children:[],icon:null,visible:t("server_intel")},{label:"Playerbase",href:route("admin.intel.server.playerbase"),active:route().current("admin.intel.server.playerbase"),children:[],icon:null,visible:t("server_intel")},{label:"Chatlog",href:route("admin.intel.server.chatlog"),active:route().current("admin.intel.server.chatlog"),children:[],icon:null,visible:t("server_intel")},{label:"Consolelog",href:route("admin.intel.server.consolelog"),active:route().current("admin.intel.server.consolelog"),children:[],icon:null,visible:t("server_intel")}],icon:ve,visible:t("server_intel")},{label:"Players",href:"#",active:route().current("admin.intel.player.*")||route().current("admin.rank.*"),children:[{label:"List Players",href:route("admin.intel.player.list"),active:route().current("admin.intel.player.list"),children:[],icon:null,visible:t("player_intel_critical")},{label:"Player Ranks",href:route("admin.rank.index"),active:route().current("admin.rank.*"),children:[],icon:null,visible:t("ranks")}],icon:pe,visible:t("player_intel_critical")||t("ranks")},{label:"Users",href:"#",active:!1,children:[{label:"List Users",href:route("admin.user.index"),active:route().current("admin.user.*"),children:[],icon:null,visible:t("users")},{label:"Roles & Permissions",href:route("admin.role.index"),active:route().current("admin.role.*"),children:[],icon:null,visible:t("roles")},{label:"User Badges",href:route("admin.badge.index"),active:route().current("admin.badge.*"),children:[],icon:null,visible:t("badges")},{label:"Online Users",href:route("admin.session.index"),active:route().current("admin.session.*"),children:[],icon:null,visible:t("sessions")}],icon:fe,visible:!0},{label:"News",href:route("admin.news.index"),active:route().current("admin.news.*"),children:[],icon:he,visible:t("news")},{label:"Polls",href:route("admin.poll.index"),active:route().current("admin.poll.*"),children:[],icon:ae,visible:t("polls")},{label:"Downloads",href:route("admin.download.index"),active:route().current("admin.download.*"),children:[],icon:re,visible:t("downloads")},{label:"Custom Pages",href:route("admin.custom-page.index"),active:route().current("admin.custom-page.*"),children:[],icon:de,visible:t("custom_pages")},{label:"Ask DB",href:route("admin.ask-db.index"),active:route().current("admin.ask-db.*"),children:[],icon:se,visible:t("ask_db")},{label:"Recruitments",active:!1,children:[{label:"List Recruitment Forms",href:route("admin.recruitment.index"),active:route().current("admin.recruitment.index"),children:[],icon:null,visible:l("read recruitments")},{label:"Open Requests",href:route("admin.recruitment-submission.index-open"),active:route().current("admin.recruitment-submission.index-open"),children:[],icon:null,visible:l("read recruitment_submissions")},{label:"Closed Requests",href:route("admin.recruitment-submission.index-closed"),active:route().current("admin.recruitment-submission.index-closed"),children:[],icon:null,visible:l("read recruitment_submissions")}],icon:le,visible:t("recruitments")},{label:"Custom Forms",active:!1,children:[{label:"List Forms",href:route("admin.custom-form.index"),active:route().current("admin.custom-form.index"),children:[],icon:null,visible:l("read custom_forms")},{label:"Submissions",href:route("admin.custom-form-submission.index"),active:route().current("admin.custom-form-submission.index"),children:[],icon:null,visible:l("read custom_form_submissions")},{label:"Archived Submissions",href:route("admin.custom-form-submission.index-archived"),active:route().current("admin.custom-form-submission.index-archived"),children:[],icon:null,visible:l("read custom_form_submissions")}],icon:ce,visible:t("custom_forms")},{label:"Settings",href:"#",active:!1,children:[{label:"General",href:route("admin.setting.general.show"),active:route().current("admin.setting.general.show"),children:[],icon:null,visible:!0},{label:"Theme",href:route("admin.setting.theme.show"),active:route().current("admin.setting.theme.show"),children:[],icon:null,visible:!0},{label:"Plugin",href:route("admin.setting.plugin.show"),active:route().current("admin.setting.plugin.show"),children:[],icon:null,visible:!0},{label:"Player",href:route("admin.setting.player.show"),active:route().current("admin.setting.player.show"),children:[],icon:null,visible:!0},{label:"Navigation",href:route("admin.setting.navigation.show"),active:route().current("admin.setting.navigation.show"),children:[],icon:null,visible:!0},{label:"SEO",href:route("admin.setting.seo.show"),active:route().current("admin.setting.seo.show"),children:[],icon:null,visible:!0},{label:"Dangerzone",href:route("admin.setting.danger.show"),active:route().current("admin.setting.danger.show"),children:[],icon:null,visible:u("superadmin")}],icon:ue,visible:t("settings")},{label:"Debug",href:"#",active:!1,children:[{label:"Pulse",href:"/admin/pulse",active:!1,children:[],icon:null,visible:!0,newtab:!0},{label:"Telescope",href:"/telescope",active:!1,children:[],icon:null,visible:!0,newtab:!0}],icon:ie,visible:u("superadmin")}];return(c,o)=>(n(),s("div",{class:h(["min-h-screen fixed bg-white shadow dark:bg-cool-gray-800 z-10 duration-300",e.collapsed?"w-16":"w-64"])},[a("div",$e,[a("div",{class:h(["px-4 mt-2 flex",e.collapsed?"justify-center":"justify-end"])},[a("button",{onClick:o[0]||(o[0]=Z(i=>c.$emit("toggleCollapse"),["prevent"]))},[D(p(oe),{class:h(["h-6 w-6 p-0.5 text-gray-400 hover:text-gray-600 dark:text-gray-600 dark:hover:text-gray-400",e.collapsed?"-rotate-180":""])},null,8,["class"])])],2),a("nav",Ae,[(n(),s(N,null,R(r,i=>D(Be,{key:i.label,item:i,collapsed:e.collapsed},null,8,["item","collapsed"])),64))]),e.collapsed?g("",!0):(n(),s("div",Ve,_(c.__("Web Version:"))+" "+_(c.$page.props.webVersion||"unknown"),1))])],2))}},Ee={__name:"AdminLayout",setup(e){let t=ne("is-admin-sidebar-menu-collapsed",!1);function u(){t.value=!t.value}return(l,r)=>(n(),v(X,null,{default:k(()=>[D(je,{collapsed:p(t),onToggleCollapse:u},null,8,["collapsed"]),a("main",{class:h([p(t)?"ml-16":"ml-64"])},[Q(l.$slots,"default")],2)]),_:3}))}};export{Ee as _,ge as a,fe as r}; diff --git a/public/build/default/assets/AdminLayout-cf9c4a02.js b/public/build/default/assets/AdminLayout-cf9c4a02.js new file mode 100644 index 000000000..a745a3690 --- /dev/null +++ b/public/build/default/assets/AdminLayout-cf9c4a02.js @@ -0,0 +1 @@ +import{A as W}from"./AppLayout-5f3e8958.js";import{o as n,d as o,a,z as $,r as b,y as O,x as y,A as I,B as L,s as G,C as E,l as J,c as v,w as k,M as D,n as h,e as f,t as _,u as p,Z as X,b as S,F as q,g as N,i as Y,R as Z}from"./app-f1704ce4.js";import{t as V,u as P,o as w,H as j,b as Q,N as H,a as x}from"./use-resolve-button-type-18f071c1.js";import{c as ee,l as B,p as re}from"./open-closed-113ca95c.js";import{u as te}from"./useAuthorizable-18c71ef1.js";import{r as ne}from"./CloudArrowDownIcon-6c974300.js";import{u as le}from"./index-638ebb4e.js";function ie(e,r){return n(),o("svg",{xmlns:"http://www.w3.org/2000/svg",fill:"none",viewBox:"0 0 24 24","stroke-width":"1.5",stroke:"currentColor","aria-hidden":"true"},[a("path",{"stroke-linecap":"round","stroke-linejoin":"round",d:"M4.26 10.147a60.436 60.436 0 00-.491 6.347A48.627 48.627 0 0112 20.904a48.627 48.627 0 018.232-4.41 60.46 60.46 0 00-.491-6.347m-15.482 0a50.57 50.57 0 00-2.658-.813A59.905 59.905 0 0112 3.493a59.902 59.902 0 0110.399 5.84c-.896.248-1.783.52-2.658.814m-15.482 0A50.697 50.697 0 0112 13.489a50.702 50.702 0 017.74-3.342M6.75 15a.75.75 0 100-1.5.75.75 0 000 1.5zm0 0v-3.675A55.378 55.378 0 0112 8.443m-7.007 11.55A5.981 5.981 0 006.75 15.75v-1.5"})])}function ae(e,r){return n(),o("svg",{xmlns:"http://www.w3.org/2000/svg",fill:"none",viewBox:"0 0 24 24","stroke-width":"1.5",stroke:"currentColor","aria-hidden":"true"},[a("path",{"stroke-linecap":"round","stroke-linejoin":"round",d:"M12 12.75c1.148 0 2.278.08 3.383.237 1.037.146 1.866.966 1.866 2.013 0 3.728-2.35 6.75-5.25 6.75S6.75 18.728 6.75 15c0-1.046.83-1.867 1.866-2.013A24.204 24.204 0 0112 12.75zm0 0c2.883 0 5.647.508 8.207 1.44a23.91 23.91 0 01-1.152 6.06M12 12.75c-2.883 0-5.647.508-8.208 1.44.125 2.104.52 4.136 1.153 6.06M12 12.75a2.25 2.25 0 002.248-2.354M12 12.75a2.25 2.25 0 01-2.248-2.354M12 8.25c.995 0 1.971-.08 2.922-.236.403-.066.74-.358.795-.762a3.778 3.778 0 00-.399-2.25M12 8.25c-.995 0-1.97-.08-2.922-.236-.402-.066-.74-.358-.795-.762a3.734 3.734 0 01.4-2.253M12 8.25a2.25 2.25 0 00-2.248 2.146M12 8.25a2.25 2.25 0 012.248 2.146M8.683 5a6.032 6.032 0 01-1.155-1.002c.07-.63.27-1.222.574-1.747m.581 2.749A3.75 3.75 0 0115.318 5m0 0c.427-.283.815-.62 1.155-.999a4.471 4.471 0 00-.575-1.752M4.921 6a24.048 24.048 0 00-.392 3.314c1.668.546 3.416.914 5.223 1.082M19.08 6c.205 1.08.337 2.187.392 3.314a23.882 23.882 0 01-5.223 1.082"})])}function oe(e,r){return n(),o("svg",{xmlns:"http://www.w3.org/2000/svg",fill:"none",viewBox:"0 0 24 24","stroke-width":"1.5",stroke:"currentColor","aria-hidden":"true"},[a("path",{"stroke-linecap":"round","stroke-linejoin":"round",d:"M10.5 6a7.5 7.5 0 107.5 7.5h-7.5V6z"}),a("path",{"stroke-linecap":"round","stroke-linejoin":"round",d:"M13.5 10.5H21A7.5 7.5 0 0013.5 3v7.5z"})])}function se(e,r){return n(),o("svg",{xmlns:"http://www.w3.org/2000/svg",fill:"none",viewBox:"0 0 24 24","stroke-width":"1.5",stroke:"currentColor","aria-hidden":"true"},[a("path",{"stroke-linecap":"round","stroke-linejoin":"round",d:"M18.75 19.5l-7.5-7.5 7.5-7.5m-6 15L5.25 12l7.5-7.5"})])}function ce(e,r){return n(),o("svg",{xmlns:"http://www.w3.org/2000/svg",fill:"none",viewBox:"0 0 24 24","stroke-width":"1.5",stroke:"currentColor","aria-hidden":"true"},[a("path",{"stroke-linecap":"round","stroke-linejoin":"round",d:"M20.25 6.375c0 2.278-3.694 4.125-8.25 4.125S3.75 8.653 3.75 6.375m16.5 0c0-2.278-3.694-4.125-8.25-4.125S3.75 4.097 3.75 6.375m16.5 0v11.25c0 2.278-3.694 4.125-8.25 4.125s-8.25-1.847-8.25-4.125V6.375m16.5 0v3.75m-16.5-3.75v3.75m16.5 0v3.75C20.25 16.153 16.556 18 12 18s-8.25-1.847-8.25-4.125v-3.75m16.5 0c0 2.278-3.694 4.125-8.25 4.125s-8.25-1.847-8.25-4.125"})])}function ue(e,r){return n(),o("svg",{xmlns:"http://www.w3.org/2000/svg",fill:"none",viewBox:"0 0 24 24","stroke-width":"1.5",stroke:"currentColor","aria-hidden":"true"},[a("path",{"stroke-linecap":"round","stroke-linejoin":"round",d:"M9 12h3.75M9 15h3.75M9 18h3.75m3 .75H18a2.25 2.25 0 002.25-2.25V6.108c0-1.135-.845-2.098-1.976-2.192a48.424 48.424 0 00-1.123-.08m-5.801 0c-.065.21-.1.433-.1.664 0 .414.336.75.75.75h4.5a.75.75 0 00.75-.75 2.25 2.25 0 00-.1-.664m-5.8 0A2.251 2.251 0 0113.5 2.25H15c1.012 0 1.867.668 2.15 1.586m-5.8 0c-.376.023-.75.05-1.124.08C9.095 4.01 8.25 4.973 8.25 6.108V8.25m0 0H4.875c-.621 0-1.125.504-1.125 1.125v11.25c0 .621.504 1.125 1.125 1.125h9.75c.621 0 1.125-.504 1.125-1.125V9.375c0-.621-.504-1.125-1.125-1.125H8.25zM6.75 12h.008v.008H6.75V12zm0 3h.008v.008H6.75V15zm0 3h.008v.008H6.75V18z"})])}function de(e,r){return n(),o("svg",{xmlns:"http://www.w3.org/2000/svg",fill:"none",viewBox:"0 0 24 24","stroke-width":"1.5",stroke:"currentColor","aria-hidden":"true"},[a("path",{"stroke-linecap":"round","stroke-linejoin":"round",d:"M10.343 3.94c.09-.542.56-.94 1.11-.94h1.093c.55 0 1.02.398 1.11.94l.149.894c.07.424.384.764.78.93.398.164.855.142 1.205-.108l.737-.527a1.125 1.125 0 011.45.12l.773.774c.39.389.44 1.002.12 1.45l-.527.737c-.25.35-.272.806-.107 1.204.165.397.505.71.93.78l.893.15c.543.09.94.56.94 1.109v1.094c0 .55-.397 1.02-.94 1.11l-.893.149c-.425.07-.765.383-.93.78-.165.398-.143.854.107 1.204l.527.738c.32.447.269 1.06-.12 1.45l-.774.773a1.125 1.125 0 01-1.449.12l-.738-.527c-.35-.25-.806-.272-1.203-.107-.397.165-.71.505-.781.929l-.149.894c-.09.542-.56.94-1.11.94h-1.094c-.55 0-1.019-.398-1.11-.94l-.148-.894c-.071-.424-.384-.764-.781-.93-.398-.164-.854-.142-1.204.108l-.738.527c-.447.32-1.06.269-1.45-.12l-.773-.774a1.125 1.125 0 01-.12-1.45l.527-.737c.25-.35.273-.806.108-1.204-.165-.397-.505-.71-.93-.78l-.894-.15c-.542-.09-.94-.56-.94-1.109v-1.094c0-.55.398-1.02.94-1.11l.894-.149c.424-.07.765-.383.93-.78.165-.398.143-.854-.107-1.204l-.527-.738a1.125 1.125 0 01.12-1.45l.773-.773a1.125 1.125 0 011.45-.12l.737.527c.35.25.807.272 1.204.107.397-.165.71-.505.78-.929l.15-.894z"}),a("path",{"stroke-linecap":"round","stroke-linejoin":"round",d:"M15 12a3 3 0 11-6 0 3 3 0 016 0z"})])}function me(e,r){return n(),o("svg",{xmlns:"http://www.w3.org/2000/svg",fill:"none",viewBox:"0 0 24 24","stroke-width":"1.5",stroke:"currentColor","aria-hidden":"true"},[a("path",{"stroke-linecap":"round","stroke-linejoin":"round",d:"M6.75 7.5l3 2.25-3 2.25m4.5 0h3m-9 8.25h13.5A2.25 2.25 0 0021 18V6a2.25 2.25 0 00-2.25-2.25H5.25A2.25 2.25 0 003 6v12a2.25 2.25 0 002.25 2.25z"})])}function he(e,r){return n(),o("svg",{xmlns:"http://www.w3.org/2000/svg",fill:"none",viewBox:"0 0 24 24","stroke-width":"1.5",stroke:"currentColor","aria-hidden":"true"},[a("path",{"stroke-linecap":"round","stroke-linejoin":"round",d:"M19.5 14.25v-2.625a3.375 3.375 0 00-3.375-3.375h-1.5A1.125 1.125 0 0113.5 7.125v-1.5a3.375 3.375 0 00-3.375-3.375H8.25m0 12.75h7.5m-7.5 3H12M10.5 2.25H5.625c-.621 0-1.125.504-1.125 1.125v17.25c0 .621.504 1.125 1.125 1.125h12.75c.621 0 1.125-.504 1.125-1.125V11.25a9 9 0 00-9-9z"})])}function ve(e,r){return n(),o("svg",{xmlns:"http://www.w3.org/2000/svg",fill:"none",viewBox:"0 0 24 24","stroke-width":"1.5",stroke:"currentColor","aria-hidden":"true"},[a("path",{"stroke-linecap":"round","stroke-linejoin":"round",d:"M2.25 12l8.954-8.955c.44-.439 1.152-.439 1.591 0L21.75 12M4.5 9.75v10.125c0 .621.504 1.125 1.125 1.125H9.75v-4.875c0-.621.504-1.125 1.125-1.125h2.25c.621 0 1.125.504 1.125 1.125V21h4.125c.621 0 1.125-.504 1.125-1.125V9.75M8.25 21h8.25"})])}function fe(e,r){return n(),o("svg",{xmlns:"http://www.w3.org/2000/svg",fill:"none",viewBox:"0 0 24 24","stroke-width":"1.5",stroke:"currentColor","aria-hidden":"true"},[a("path",{"stroke-linecap":"round","stroke-linejoin":"round",d:"M12 7.5h1.5m-1.5 3h1.5m-7.5 3h7.5m-7.5 3h7.5m3-9h3.375c.621 0 1.125.504 1.125 1.125V18a2.25 2.25 0 01-2.25 2.25M16.5 7.5V18a2.25 2.25 0 002.25 2.25M16.5 7.5V4.875c0-.621-.504-1.125-1.125-1.125H4.125C3.504 3.75 3 4.254 3 4.875V18a2.25 2.25 0 002.25 2.25h13.5M6 7.5h3v3H6v-3z"})])}function pe(e,r){return n(),o("svg",{xmlns:"http://www.w3.org/2000/svg",fill:"none",viewBox:"0 0 24 24","stroke-width":"1.5",stroke:"currentColor","aria-hidden":"true"},[a("path",{"stroke-linecap":"round","stroke-linejoin":"round",d:"M3.75 3v11.25A2.25 2.25 0 006 16.5h2.25M3.75 3h-1.5m1.5 0h16.5m0 0h1.5m-1.5 0v11.25A2.25 2.25 0 0118 16.5h-2.25m-7.5 0h7.5m-7.5 0l-1 3m8.5-3l1 3m0 0l.5 1.5m-.5-1.5h-9.5m0 0l-.5 1.5m.75-9l3-3 2.148 2.148A12.061 12.061 0 0116.5 7.605"})])}function ge(e,r){return n(),o("svg",{xmlns:"http://www.w3.org/2000/svg",fill:"none",viewBox:"0 0 24 24","stroke-width":"1.5",stroke:"currentColor","aria-hidden":"true"},[a("path",{"stroke-linecap":"round","stroke-linejoin":"round",d:"M5.25 14.25h13.5m-13.5 0a3 3 0 01-3-3m3 3a3 3 0 100 6h13.5a3 3 0 100-6m-16.5-3a3 3 0 013-3h13.5a3 3 0 013 3m-19.5 0a4.5 4.5 0 01.9-2.7L5.737 5.1a3.375 3.375 0 012.7-1.35h7.126c1.062 0 2.062.5 2.7 1.35l2.587 3.45a4.5 4.5 0 01.9 2.7m0 0a3 3 0 01-3 3m0 3h.008v.008h-.008v-.008zm0-6h.008v.008h-.008v-.008zm-3 6h.008v.008h-.008v-.008zm0-6h.008v.008h-.008v-.008z"})])}function be(e,r){return n(),o("svg",{xmlns:"http://www.w3.org/2000/svg",fill:"none",viewBox:"0 0 24 24","stroke-width":"1.5",stroke:"currentColor","aria-hidden":"true"},[a("path",{"stroke-linecap":"round","stroke-linejoin":"round",d:"M16.5 18.75h-9m9 0a3 3 0 013 3h-15a3 3 0 013-3m9 0v-3.375c0-.621-.503-1.125-1.125-1.125h-.871M7.5 18.75v-3.375c0-.621.504-1.125 1.125-1.125h.872m5.007 0H9.497m5.007 0a7.454 7.454 0 01-.982-3.172M9.497 14.25a7.454 7.454 0 00.981-3.172M5.25 4.236c-.982.143-1.954.317-2.916.52A6.003 6.003 0 007.73 9.728M5.25 4.236V4.5c0 2.108.966 3.99 2.48 5.228M5.25 4.236V2.721C7.456 2.41 9.71 2.25 12 2.25c2.291 0 4.545.16 6.75.47v1.516M7.73 9.728a6.726 6.726 0 002.748 1.35m8.272-6.842V4.5c0 2.108-.966 3.99-2.48 5.228m2.48-5.492a46.32 46.32 0 012.916.52 6.003 6.003 0 01-5.395 4.972m0 0a6.726 6.726 0 01-2.749 1.35m0 0a6.772 6.772 0 01-3.044 0"})])}function we(e,r){return n(),o("svg",{xmlns:"http://www.w3.org/2000/svg",fill:"none",viewBox:"0 0 24 24","stroke-width":"1.5",stroke:"currentColor","aria-hidden":"true"},[a("path",{"stroke-linecap":"round","stroke-linejoin":"round",d:"M15 19.128a9.38 9.38 0 002.625.372 9.337 9.337 0 004.121-.952 4.125 4.125 0 00-7.533-2.493M15 19.128v-.003c0-1.113-.285-2.16-.786-3.07M15 19.128v.106A12.318 12.318 0 018.624 21c-2.331 0-4.512-.645-6.374-1.766l-.001-.109a6.375 6.375 0 0111.964-3.07M12 6.375a3.375 3.375 0 11-6.75 0 3.375 3.375 0 016.75 0zm8.25 2.25a2.625 2.625 0 11-5.25 0 2.625 2.625 0 015.25 0z"})])}var xe=(e=>(e[e.Open=0]="Open",e[e.Closed=1]="Closed",e))(xe||{});let R=Symbol("DisclosureContext");function z(e){let r=E(R,null);if(r===null){let u=new Error(`<${e} /> is missing a parent component.`);throw Error.captureStackTrace&&Error.captureStackTrace(u,z),u}return r}let T=Symbol("DisclosurePanelContext");function ke(){return E(T,null)}let ye=$({name:"Disclosure",props:{as:{type:[Object,String],default:"template"},defaultOpen:{type:[Boolean],default:!1}},setup(e,{slots:r,attrs:u}){let l=b(e.defaultOpen?0:1),t=b(null),c=b(null),s={buttonId:b(`headlessui-disclosure-button-${V()}`),panelId:b(`headlessui-disclosure-panel-${V()}`),disclosureState:l,panel:t,button:c,toggleDisclosure(){l.value=P(l.value,{0:1,1:0})},closeDisclosure(){l.value!==1&&(l.value=1)},close(i){s.closeDisclosure();let m=(()=>i?i instanceof HTMLElement?i:i.value instanceof HTMLElement?w(i):w(s.button):w(s.button))();m==null||m.focus()}};return O(R,s),ee(y(()=>P(l.value,{0:B.Open,1:B.Closed}))),()=>{let{defaultOpen:i,...m}=e,g={open:l.value===0,close:s.close};return j({theirProps:m,ourProps:{},slot:g,slots:r,attrs:u,name:"Disclosure"})}}}),Me=$({name:"DisclosureButton",props:{as:{type:[Object,String],default:"button"},disabled:{type:[Boolean],default:!1},id:{type:String,default:null}},setup(e,{attrs:r,slots:u,expose:l}){let t=z("DisclosureButton"),c=ke(),s=y(()=>c===null?!1:c.value===t.panelId.value);I(()=>{s.value||e.id!==null&&(t.buttonId.value=e.id)}),L(()=>{s.value||(t.buttonId.value=null)});let i=b(null);l({el:i,$el:i}),s.value||G(()=>{t.button.value=i.value});let m=Q(y(()=>({as:e.as,type:r.type})),i);function g(){var d;e.disabled||(s.value?(t.toggleDisclosure(),(d=w(t.button))==null||d.focus()):t.toggleDisclosure())}function M(d){var C;if(!e.disabled)if(s.value)switch(d.key){case x.Space:case x.Enter:d.preventDefault(),d.stopPropagation(),t.toggleDisclosure(),(C=w(t.button))==null||C.focus();break}else switch(d.key){case x.Space:case x.Enter:d.preventDefault(),d.stopPropagation(),t.toggleDisclosure();break}}function A(d){switch(d.key){case x.Space:d.preventDefault();break}}return()=>{var d;let C={open:t.disclosureState.value===0},{id:F,...U}=e,K=s.value?{ref:i,type:m.value,onClick:g,onKeydown:M}:{id:(d=t.buttonId.value)!=null?d:F,ref:i,type:m.value,"aria-expanded":t.disclosureState.value===0,"aria-controls":t.disclosureState.value===0||w(t.panel)?t.panelId.value:void 0,disabled:e.disabled?!0:void 0,onClick:g,onKeydown:M,onKeyup:A};return j({ourProps:K,theirProps:U,slot:C,attrs:r,slots:u,name:"DisclosureButton"})}}}),Ce=$({name:"DisclosurePanel",props:{as:{type:[Object,String],default:"div"},static:{type:Boolean,default:!1},unmount:{type:Boolean,default:!0},id:{type:String,default:null}},setup(e,{attrs:r,slots:u,expose:l}){let t=z("DisclosurePanel");I(()=>{e.id!==null&&(t.panelId.value=e.id)}),L(()=>{t.panelId.value=null}),l({el:t.panel,$el:t.panel}),O(T,t.panelId);let c=re(),s=y(()=>c!==null?(c.value&B.Open)===B.Open:t.disclosureState.value===0);return()=>{var i;let m={open:t.disclosureState.value===0,close:t.close},{id:g,...M}=e,A={id:(i=t.panelId.value)!=null?i:g,ref:t.panel};return j({ourProps:A,theirProps:M,slot:m,attrs:r,slots:u,features:H.RenderStrategy|H.Static,visible:s.value,name:"DisclosurePanel"})}}});function _e(e,r){return n(),o("svg",{xmlns:"http://www.w3.org/2000/svg",viewBox:"0 0 20 20",fill:"currentColor","aria-hidden":"true"},[a("path",{"fill-rule":"evenodd",d:"M5.23 7.21a.75.75 0 011.06.02L10 11.168l3.71-3.938a.75.75 0 111.08 1.04l-4.25 4.5a.75.75 0 01-1.08 0l-4.25-4.5a.75.75 0 01.02-1.06z","clip-rule":"evenodd"})])}const Se={key:1},Be={key:1,class:"flex-1"},Ae={__name:"SideNavItem",props:{item:Object,collapsed:Boolean},setup(e){const r=e,u=y(()=>{function l(t){return t.some(c=>c.active||l(c.children))}return l(r.item.children)});return(l,t)=>{const c=J("SideNavItem",!0);return!e.item.children.length&&e.item.visible?(n(),v(D(e.item.newtab?"a":p(X)),{key:0,class:h(["group flex w-full items-center rounded-md py-2 px-3 text-sm font-medium","hover:bg-gray-100 dark:hover:bg-gray-900",e.item.active?"text-gray-800 font-semibold dark:text-gray-200":"text-gray-600 dark:text-gray-400 font-medium"]),href:e.item.href,target:e.item.newtab?"_blank":null},{default:k(()=>[e.item.icon?(n(),v(D(e.item.icon),{key:0,class:h(["w-6 h-6 shrink-0 mr-2 group-hover:text-gray-600 dark:group-hover:text-gray-400",e.item.active?"text-gray-600 dark:text-gray-400":"text-gray-400 dark:text-gray-600"])},null,8,["class"])):f("",!0),e.collapsed?f("",!0):(n(),o("span",Se,_(l.__(e.item.label)),1))]),_:1},8,["class","href","target"])):e.item.children.length&&e.item.visible?(n(),v(p(ye),{key:1,"default-open":u.value},{default:k(({open:s})=>[S(p(Me),{class:h(["group text-left flex w-full items-center rounded-md py-2 px-3 text-sm","hover:bg-gray-100 dark:hover:bg-gray-900",s?"font-semibold text-gray-800 dark:text-gray-200":"text-gray-600 dark:text-gray-400 font-medium"])},{default:k(()=>[e.item.icon?(n(),v(D(e.item.icon),{key:0,class:h(["w-6 h-6 shrink-0 mr-2 group-hover:text-gray-600 dark:group-hover:text-gray-400",s?"text-gray-600 dark:text-gray-400":"text-gray-400 dark:text-gray-600"])},null,8,["class"])):f("",!0),e.collapsed?f("",!0):(n(),o("span",Be,_(l.__(e.item.label)),1)),e.collapsed?f("",!0):(n(),v(p(_e),{key:2,class:h(["w-6 h-6 shrink-0",s?"-rotate-180 text-gray-600 dark:text-gray-400":"text-gray-400 dark:text-gray-600"])},null,8,["class"]))]),_:2},1032,["class"]),e.collapsed?f("",!0):(n(),v(p(Ce),{key:0,class:"ml-4"},{default:k(()=>[(n(!0),o(q,null,N(e.item.children,i=>(n(),v(c,{key:i.label,item:i},null,8,["item"]))),128))]),_:1}))]),_:1},8,["default-open"])):f("",!0)}}},De={class:"h-screen overflow-y-auto"},$e={class:"mt-2 px-2"},je={key:0,class:"mt-10 text-xs text-center text-gray-600 dark:text-gray-500"},ze={__name:"AdminSideMenu",props:{collapsed:Boolean},emits:["toggleCollapse"],setup(e){const{canWild:r,hasRole:u,can:l}=te(),t=[{label:"Dashboard",href:route("admin.dashboard"),active:route().current("admin.dashboard"),children:[],icon:ve,visible:!0},{label:"Servers",href:route("admin.server.index"),active:route().current("admin.server.*"),children:[],icon:ge,visible:r("servers")},{label:"Server Analytics",href:"#",active:route().current("admin.intel.server.*"),children:[{label:"Overview",href:route("admin.intel.server.index"),active:route().current("admin.intel.server.index"),children:[],icon:null,visible:r("server_intel")},{label:"Performance",href:route("admin.intel.server.performance"),active:route().current("admin.intel.server.performance"),children:[],icon:null,visible:r("server_intel")},{label:"Playerbase",href:route("admin.intel.server.playerbase"),active:route().current("admin.intel.server.playerbase"),children:[],icon:null,visible:r("server_intel")},{label:"Chatlog",href:route("admin.intel.server.chatlog"),active:route().current("admin.intel.server.chatlog"),children:[],icon:null,visible:r("server_intel")},{label:"Consolelog",href:route("admin.intel.server.consolelog"),active:route().current("admin.intel.server.consolelog"),children:[],icon:null,visible:r("server_intel")}],icon:pe,visible:r("server_intel")},{label:"Players",href:"#",active:route().current("admin.intel.player.*")||route().current("admin.rank.*"),children:[{label:"List Players",href:route("admin.intel.player.list"),active:route().current("admin.intel.player.list"),children:[],icon:null,visible:r("player_intel_critical")},{label:"Player Ranks",href:route("admin.rank.index"),active:route().current("admin.rank.*"),children:[],icon:null,visible:r("ranks")}],icon:be,visible:r("player_intel_critical")||r("ranks")},{label:"Users",href:"#",active:!1,children:[{label:"List Users",href:route("admin.user.index"),active:route().current("admin.user.*"),children:[],icon:null,visible:r("users")},{label:"Roles & Permissions",href:route("admin.role.index"),active:route().current("admin.role.*"),children:[],icon:null,visible:r("roles")},{label:"User Badges",href:route("admin.badge.index"),active:route().current("admin.badge.*"),children:[],icon:null,visible:r("badges")},{label:"Online Users",href:route("admin.session.index"),active:route().current("admin.session.*"),children:[],icon:null,visible:r("sessions")}],icon:we,visible:!0},{label:"News",href:route("admin.news.index"),active:route().current("admin.news.*"),children:[],icon:fe,visible:r("news")},{label:"Polls",href:route("admin.poll.index"),active:route().current("admin.poll.*"),children:[],icon:oe,visible:r("polls")},{label:"Downloads",href:route("admin.download.index"),active:route().current("admin.download.*"),children:[],icon:ne,visible:r("downloads")},{label:"Custom Pages",href:route("admin.custom-page.index"),active:route().current("admin.custom-page.*"),children:[],icon:he,visible:r("custom_pages")},{label:"Ask DB",href:route("admin.ask-db.index"),active:route().current("admin.ask-db.*"),children:[],icon:ce,visible:r("ask_db")},{label:"Applicatons",active:!1,children:[{label:"List Application Forms",href:route("admin.recruitment.index"),active:route().current("admin.recruitment.index"),children:[],icon:null,visible:l("read recruitments")},{label:"Open Requests",href:route("admin.recruitment-submission.index-open"),active:route().current("admin.recruitment-submission.index-open"),children:[],icon:null,visible:l("read recruitment_submissions")},{label:"Closed Requests",href:route("admin.recruitment-submission.index-closed"),active:route().current("admin.recruitment-submission.index-closed"),children:[],icon:null,visible:l("read recruitment_submissions")}],icon:ie,visible:r("recruitments")},{label:"Custom Forms",active:!1,children:[{label:"List Forms",href:route("admin.custom-form.index"),active:route().current("admin.custom-form.index"),children:[],icon:null,visible:l("read custom_forms")},{label:"Submissions",href:route("admin.custom-form-submission.index"),active:route().current("admin.custom-form-submission.index"),children:[],icon:null,visible:l("read custom_form_submissions")},{label:"Archived Submissions",href:route("admin.custom-form-submission.index-archived"),active:route().current("admin.custom-form-submission.index-archived"),children:[],icon:null,visible:l("read custom_form_submissions")}],icon:ue,visible:r("custom_forms")},{label:"Commands",active:!1,children:[{label:"Run Command",href:route("admin.command-queue.create"),active:route().current("admin.command-queue.create"),children:[],icon:null,visible:l("create command_queues")},{label:"Command History",href:route("admin.command-queue.index"),active:route().current("admin.command-queue.index"),children:[],icon:null,visible:l("read command_queues")}],icon:me,visible:r("command_queues")},{label:"Settings",href:"#",active:!1,children:[{label:"General",href:route("admin.setting.general.show"),active:route().current("admin.setting.general.show"),children:[],icon:null,visible:!0},{label:"Theme",href:route("admin.setting.theme.show"),active:route().current("admin.setting.theme.show"),children:[],icon:null,visible:!0},{label:"Plugin",href:route("admin.setting.plugin.show"),active:route().current("admin.setting.plugin.show"),children:[],icon:null,visible:!0},{label:"Player",href:route("admin.setting.player.show"),active:route().current("admin.setting.player.show"),children:[],icon:null,visible:!0},{label:"Navigation",href:route("admin.setting.navigation.show"),active:route().current("admin.setting.navigation.show"),children:[],icon:null,visible:!0},{label:"SEO",href:route("admin.setting.seo.show"),active:route().current("admin.setting.seo.show"),children:[],icon:null,visible:!0},{label:"Dangerzone",href:route("admin.setting.danger.show"),active:route().current("admin.setting.danger.show"),children:[],icon:null,visible:u("superadmin")}],icon:de,visible:r("settings")},{label:"Debug",href:"#",active:!1,children:[{label:"Failed Jobs",href:route("admin.failed-job.index"),active:route().current("admin.failed-job.index"),children:[],icon:null,visible:l("read failed_jobs")},{label:"Pulse",href:"/admin/pulse",active:!1,children:[],icon:null,visible:!0,newtab:!0},{label:"Telescope",href:"/telescope",active:!1,children:[],icon:null,visible:!0,newtab:!0}],icon:ae,visible:u("superadmin")}];return(c,s)=>(n(),o("div",{class:h(["min-h-screen fixed bg-white shadow dark:bg-cool-gray-800 z-10 duration-300",e.collapsed?"w-16":"w-64"])},[a("div",De,[a("div",{class:h(["px-4 mt-2 flex",e.collapsed?"justify-center":"justify-end"])},[a("button",{onClick:s[0]||(s[0]=Y(i=>c.$emit("toggleCollapse"),["prevent"]))},[S(p(se),{class:h(["h-6 w-6 p-0.5 text-gray-400 hover:text-gray-600 dark:text-gray-600 dark:hover:text-gray-400",e.collapsed?"-rotate-180":""])},null,8,["class"])])],2),a("nav",$e,[(n(),o(q,null,N(t,i=>S(Ae,{key:i.label,item:i,collapsed:e.collapsed},null,8,["item","collapsed"])),64))]),e.collapsed?f("",!0):(n(),o("div",je,_(c.__("Web Version:"))+" "+_(c.$page.props.webVersion||"unknown"),1))])],2))}},qe={__name:"AdminLayout",setup(e){let r=le("is-admin-sidebar-menu-collapsed",!1);function u(){r.value=!r.value}return(l,t)=>(n(),v(W,null,{default:k(()=>[S(ze,{collapsed:p(r),onToggleCollapse:u},null,8,["collapsed"]),a("main",{class:h([p(r)?"ml-16":"ml-64"])},[Z(l.$slots,"default")],2)]),_:3}))}};export{qe as _,ge as a,we as r}; diff --git a/public/build/default/assets/AfterCreateSteps-0e8a355d.js b/public/build/default/assets/AfterCreateSteps-0e8a355d.js new file mode 100644 index 000000000..0dee74194 --- /dev/null +++ b/public/build/default/assets/AfterCreateSteps-0e8a355d.js @@ -0,0 +1,7 @@ +import{_ as p}from"./AdminLayout-cf9c4a02.js";import{o as l,d as c,a as e,l as n,c as h,w as i,b as a,u as _,t,f as s}from"./app-f1704ce4.js";import"./AppLayout-5f3e8958.js";import"./_plugin-vue_export-helper-c27b6911.js";import"./Icon-4144b1c7.js";import"./useAuthorizable-18c71ef1.js";import"./use-resolve-button-type-18f071c1.js";import"./open-closed-113ca95c.js";import"./CloudArrowDownIcon-6c974300.js";import"./index-638ebb4e.js";function f(o,r){return l(),c("svg",{xmlns:"http://www.w3.org/2000/svg",fill:"none",viewBox:"0 0 24 24","stroke-width":"1.5",stroke:"currentColor","aria-hidden":"true"},[e("path",{"stroke-linecap":"round","stroke-linejoin":"round",d:"M9 12.75L11.25 15 15 9.75M21 12a9 9 0 11-18 0 9 9 0 0118 0z"})])}const g={class:"py-12 px-10 max-w-4xl mx-auto"},m={class:"bg-white shadow rounded p-6 dark:bg-gray-800"},y={class:"flex flex-col items-center justify-center"},v={class:"text-2xl font-bold text-green-500"},w={class:"uppercase font-bold mt-3 dark:text-gray-200 text-gray-800"},b={class:"flex flex-col space-y-4 mt-6 prose-lg prose dark:prose-dark"},x={target:"_blank",class:"text-light-blue-400 hover:text-light-blue-600 whitespace-nowrap",href:"https://github.com/MineTrax/plugin/releases/latest"},k=e("kbd",null,"plugins/Minetrax/config.yml",-1),S=e("br",null,null,-1),q={class:"dark:bg-gray-900"},C={class:"flex justify-end mt-4"},K={__name:"AfterCreateSteps",props:{server:{type:Object,required:!0},apiKey:{type:String,required:!0},apiSecret:{type:String,required:!0},apiHost:{type:String,required:!0}},setup(o){return(r,j)=>{const d=n("app-head"),u=n("InertiaLink");return l(),h(p,null,{default:i(()=>[a(d,{title:r.__("Server Created Successfully!")},null,8,["title"]),e("div",g,[e("div",m,[e("div",y,[a(_(f),{class:"h-32 text-green-500","aria-hidden":"true"}),e("h1",v,t(r.__("Server Added Successfully!")),1),e("h1",w,t(r.__("Follow below steps to add the Plugin!")),1)]),e("div",b,[e("p",null,[s(t(r.__("Download latest version of the MineTrax.jar Plugin and upload it into 'plugins' folder of your server."))+" ",1),e("a",x,t(r.__("Click here to Download")),1)]),e("p",null,[s(t(r.__("Restart your server once so that the plugin can generate the config file inside"))+" ",1),k,s(". ")]),S,e("p",null,[s(t(r.__("Open the config file and update the following details in it as provided below"))+": ",1),e("pre",q,`enabled: true +api-host: `+t(o.apiHost)+` +api-key: `+t(o.apiKey)+` +api-secret: `+t(o.apiSecret)+` +server-id: `+t(o.server.id)+` +webquery-host: 0.0.0.0 +webquery-port: `+t(o.server.webquery_port),1)]),e("p",null,t(r.__("Restart your server again and you are all set!")),1)]),e("div",C,[a(u,{as:"a",class:"text-light-blue-400 hover:text-light-blue-600 whitespace-nowrap",href:r.route("admin.server.index")},{default:i(()=>[s(t(r.__("Go back to Server List")),1)]),_:1},8,["href"])])])])]),_:1})}}};export{K as default}; diff --git a/public/build/default/assets/AfterCreateSteps-75d5383d.js b/public/build/default/assets/AfterCreateSteps-75d5383d.js deleted file mode 100644 index 5073b3e85..000000000 --- a/public/build/default/assets/AfterCreateSteps-75d5383d.js +++ /dev/null @@ -1,7 +0,0 @@ -import{_ as c}from"./AdminLayout-22bfd88d.js";import{o as l,d as p,a as e,l as n,c as h,w as i,b as a,u as _,t,f as s}from"./app-0b9725b5.js";import"./AppLayout-71437c13.js";import"./_plugin-vue_export-helper-c27b6911.js";import"./Icon-b9bd5b83.js";import"./useAuthorizable-663b53e2.js";import"./use-resolve-button-type-7b74f3df.js";import"./CloudArrowDownIcon-98e13329.js";import"./index-970c465b.js";function f(o,r){return l(),p("svg",{xmlns:"http://www.w3.org/2000/svg",fill:"none",viewBox:"0 0 24 24","stroke-width":"1.5",stroke:"currentColor","aria-hidden":"true"},[e("path",{"stroke-linecap":"round","stroke-linejoin":"round",d:"M9 12.75L11.25 15 15 9.75M21 12a9 9 0 11-18 0 9 9 0 0118 0z"})])}const g={class:"py-12 px-10 max-w-4xl mx-auto"},m={class:"bg-white shadow rounded p-6 dark:bg-gray-800"},y={class:"flex flex-col items-center justify-center"},v={class:"text-2xl font-bold text-green-500"},w={class:"uppercase font-bold mt-3 dark:text-gray-200 text-gray-800"},b={class:"flex flex-col space-y-4 mt-6 prose-lg prose dark:prose-dark"},x={target:"_blank",class:"text-light-blue-400 hover:text-light-blue-600 whitespace-nowrap",href:"https://github.com/MineTrax/plugin/releases/latest"},k=e("kbd",null,"plugins/Minetrax/config.yml",-1),S=e("br",null,null,-1),q={class:"dark:bg-gray-900"},C={class:"flex justify-end mt-4"},I={__name:"AfterCreateSteps",props:{server:{type:Object,required:!0},apiKey:{type:String,required:!0},apiSecret:{type:String,required:!0},apiHost:{type:String,required:!0}},setup(o){return(r,j)=>{const d=n("app-head"),u=n("InertiaLink");return l(),h(c,null,{default:i(()=>[a(d,{title:r.__("Server Created Successfully!")},null,8,["title"]),e("div",g,[e("div",m,[e("div",y,[a(_(f),{class:"h-32 text-green-500","aria-hidden":"true"}),e("h1",v,t(r.__("Server Added Successfully!")),1),e("h1",w,t(r.__("Follow below steps to add the Plugin!")),1)]),e("div",b,[e("p",null,[s(t(r.__("Download latest version of the MineTrax.jar Plugin and upload it into 'plugins' folder of your server."))+" ",1),e("a",x,t(r.__("Click here to Download")),1)]),e("p",null,[s(t(r.__("Restart your server once so that the plugin can generate the config file inside"))+" ",1),k,s(". ")]),S,e("p",null,[s(t(r.__("Open the config file and update the following details in it as provided below"))+": ",1),e("pre",q,`enabled: true -api-host: `+t(o.apiHost)+` -api-key: `+t(o.apiKey)+` -api-secret: `+t(o.apiSecret)+` -server-id: `+t(o.server.id)+` -webquery-host: 0.0.0.0 -webquery-port: `+t(o.server.webquery_port),1)]),e("p",null,t(r.__("Restart your server again and you are all set!")),1)]),e("div",C,[a(u,{as:"a",class:"text-light-blue-400 hover:text-light-blue-600 whitespace-nowrap",href:r.route("admin.server.index")},{default:i(()=>[s(t(r.__("Go back to Server List")),1)]),_:1},8,["href"])])])])]),_:1})}}};export{I as default}; diff --git a/public/build/default/assets/AlertCard-af04d44c.js b/public/build/default/assets/AlertCard-2fc700d1.js similarity index 90% rename from public/build/default/assets/AlertCard-af04d44c.js rename to public/build/default/assets/AlertCard-2fc700d1.js index 144078fee..e5346303b 100644 --- a/public/build/default/assets/AlertCard-af04d44c.js +++ b/public/build/default/assets/AlertCard-2fc700d1.js @@ -1 +1 @@ -import{r as n}from"./XMarkIcon-b1850349.js";import{o as s,d as r,a as e,N as l,n as a,b as i,u as c,e as g}from"./app-0b9725b5.js";const u={class:"flex"},b={class:"py-1"},m=e("path",{d:"M2.93 17.07A10 10 0 1 1 17.07 2.93 10 10 0 0 1 2.93 17.07zm12.73-1.41A8 8 0 1 0 4.34 4.34a8 8 0 0 0 11.32 11.32zM9 11V9h2v6H9v-4zm0-6h2v2H9V5z"},null,-1),h=[m],v={class:"font-bold"},f={class:"text-sm"},w={__name:"AlertCard",props:{borderColor:{type:String,default:"border-green-500"},textColor:{type:String,default:"text-green-500"},titleClass:{type:String,default:""},closeButton:{type:Boolean,default:!1}},emits:["close"],setup(t){return(o,d)=>(s(),r("div",{class:a(`mb-4 bg-white dark:bg-cool-gray-800 border-t-4 ${t.borderColor} rounded-b ${t.textColor} px-4 py-3 shadow relative`),role:"alert"},[e("div",u,[e("div",b,[l(o.$slots,"icon",{},()=>[(s(),r("svg",{class:a(`fill-current h-6 w-6 ${t.textColor} mr-4`),xmlns:"http://www.w3.org/2000/svg",viewBox:"0 0 20 20"},h,2))])]),e("div",{class:a(t.titleClass)},[e("div",v,[l(o.$slots,"default")]),e("div",f,[l(o.$slots,"body")])],2)]),t.closeButton?(s(),r("button",{key:0,class:"absolute rounded-full bg-white dark:bg-gray-800 border dark:border-gray-900 dark:hover:bg-gray-700 hover:bg-gray-100 p-1 -top-5 -right-3",onClick:d[0]||(d[0]=y=>o.$emit("close"))},[i(c(n),{class:"h-5 w-5"})])):g("",!0)],2))}};export{w as _}; +import{r as n}from"./XMarkIcon-2c5e91bb.js";import{o as s,d as r,a as e,R as l,n as a,b as i,u as c,e as g}from"./app-f1704ce4.js";const u={class:"flex"},b={class:"py-1"},m=e("path",{d:"M2.93 17.07A10 10 0 1 1 17.07 2.93 10 10 0 0 1 2.93 17.07zm12.73-1.41A8 8 0 1 0 4.34 4.34a8 8 0 0 0 11.32 11.32zM9 11V9h2v6H9v-4zm0-6h2v2H9V5z"},null,-1),h=[m],v={class:"font-bold"},f={class:"text-sm"},w={__name:"AlertCard",props:{borderColor:{type:String,default:"border-green-500"},textColor:{type:String,default:"text-green-500"},titleClass:{type:String,default:""},closeButton:{type:Boolean,default:!1}},emits:["close"],setup(t){return(o,d)=>(s(),r("div",{class:a(`mb-4 bg-white dark:bg-cool-gray-800 border-t-4 ${t.borderColor} rounded-b ${t.textColor} px-4 py-3 shadow relative`),role:"alert"},[e("div",u,[e("div",b,[l(o.$slots,"icon",{},()=>[(s(),r("svg",{class:a(`fill-current h-6 w-6 ${t.textColor} mr-4`),xmlns:"http://www.w3.org/2000/svg",viewBox:"0 0 20 20"},h,2))])]),e("div",{class:a(t.titleClass)},[e("div",v,[l(o.$slots,"default")]),e("div",f,[l(o.$slots,"body")])],2)]),t.closeButton?(s(),r("button",{key:0,class:"absolute rounded-full bg-white dark:bg-gray-800 border dark:border-gray-900 dark:hover:bg-gray-700 hover:bg-gray-100 p-1 -top-5 -right-3",onClick:d[0]||(d[0]=y=>o.$emit("close"))},[i(c(n),{class:"h-5 w-5"})])):g("",!0)],2))}};export{w as _}; diff --git a/public/build/default/assets/ApiTokenManager-fbe71190.js b/public/build/default/assets/ApiTokenManager-15d98819.js similarity index 85% rename from public/build/default/assets/ApiTokenManager-fbe71190.js rename to public/build/default/assets/ApiTokenManager-15d98819.js index 1c55d3ffb..dc27e3fdc 100644 --- a/public/build/default/assets/ApiTokenManager-fbe71190.js +++ b/public/build/default/assets/ApiTokenManager-15d98819.js @@ -1 +1 @@ -import{T as h,r as b,o as i,d as r,b as t,w as e,a,e as v,f as n,u as l,F as $,g as x,n as A,t as k}from"./app-0b9725b5.js";import{_ as N}from"./ActionMessage-d66d744a.js";import{_ as j}from"./ActionSection-b6ab9220.js";import{_ as P}from"./Button-f8f7e4df.js";import{_ as U}from"./ConfirmationModal-d14dee0b.js";import{_ as J}from"./DangerButton-da324955.js";import{_ as T}from"./DialogModal-bfb53ba9.js";import{_ as L}from"./FormSection-bcdc4d29.js";import{_ as M}from"./Input-eaff5f73.js";import{_ as w}from"./Checkbox-5c9821e8.js";import{_ as z}from"./InputError-3f7a3d98.js";import{_ as S}from"./Label-9f3498c1.js";import{_ as C}from"./SecondaryButton-895a9fac.js";import{J as E}from"./SectionBorder-524dae48.js";import"./SectionTitle-c29be856.js";import"./_plugin-vue_export-helper-c27b6911.js";import"./Modal-b118c061.js";const Y={class:"col-span-6 sm:col-span-4"},q={key:0,class:"col-span-6"},G={class:"mt-2 grid grid-cols-1 md:grid-cols-2 gap-4"},H={class:"flex items-center"},K={class:"ml-2 text-sm text-gray-600"},O={key:0},Q={class:"mt-10 sm:mt-0"},R={class:"space-y-6"},W={class:"flex items-center"},X={key:0,class:"text-sm text-gray-400"},Z=["onClick"],ee=["onClick"],se=a("div",null," Please copy your new API token. For your security, it won't be shown again. ",-1),te={key:0,class:"mt-4 bg-gray-100 px-4 py-2 rounded font-mono text-sm text-gray-500"},oe={class:"grid grid-cols-1 md:grid-cols-2 gap-4"},ne={class:"flex items-center"},le={class:"ml-2 text-sm text-gray-600"},Ae={__name:"ApiTokenManager",props:{tokens:Array,availablePermissions:Array,defaultPermissions:Array},setup(c){const m=h({name:"",permissions:c.defaultPermissions}),d=h({permissions:[]}),y=h({}),g=b(!1),p=b(null),f=b(null),I=()=>{m.post(route("api-tokens.store"),{preserveScroll:!0,onSuccess:()=>{g.value=!0,m.reset()}})},F=u=>{d.permissions=u.abilities,p.value=u},V=()=>{d.put(route("api-tokens.update",p.value),{preserveScroll:!0,preserveState:!0,onSuccess:()=>p.value=null})},D=u=>{f.value=u},B=()=>{y.delete(route("api-tokens.destroy",f.value),{preserveScroll:!0,preserveState:!0,onSuccess:()=>f.value=null})};return(u,o)=>(i(),r("div",null,[t(L,{onSubmitted:I},{title:e(()=>[n(" Create API Token ")]),description:e(()=>[n(" API tokens allow third-party services to authenticate with our application on your behalf. ")]),form:e(()=>[a("div",Y,[t(S,{for:"name",value:"Name"}),t(M,{id:"name",modelValue:l(m).name,"onUpdate:modelValue":o[0]||(o[0]=s=>l(m).name=s),type:"text",class:"mt-1 block w-full",autofocus:""},null,8,["modelValue"]),t(z,{message:l(m).errors.name,class:"mt-2"},null,8,["message"])]),c.availablePermissions.length>0?(i(),r("div",q,[t(S,{for:"permissions",value:"Permissions"}),a("div",G,[(i(!0),r($,null,x(c.availablePermissions,s=>(i(),r("div",{key:s},[a("label",H,[t(w,{checked:l(m).permissions,"onUpdate:checked":o[1]||(o[1]=_=>l(m).permissions=_),value:s},null,8,["checked","value"]),a("span",K,k(s),1)])]))),128))])])):v("",!0)]),actions:e(()=>[t(N,{on:l(m).recentlySuccessful,class:"mr-3"},{default:e(()=>[n(" Created. ")]),_:1},8,["on"]),t(P,{class:A({"opacity-25":l(m).processing}),disabled:l(m).processing},{default:e(()=>[n(" Create ")]),_:1},8,["class","disabled"])]),_:1}),c.tokens.length>0?(i(),r("div",O,[t(E),a("div",Q,[t(j,null,{title:e(()=>[n(" Manage API Tokens ")]),description:e(()=>[n(" You may delete any of your existing tokens if they are no longer needed. ")]),content:e(()=>[a("div",R,[(i(!0),r($,null,x(c.tokens,s=>(i(),r("div",{key:s.id,class:"flex items-center justify-between"},[a("div",null,k(s.name),1),a("div",W,[s.last_used_ago?(i(),r("div",X," Last used "+k(s.last_used_ago),1)):v("",!0),c.availablePermissions.length>0?(i(),r("button",{key:1,class:"cursor-pointer ml-6 text-sm text-gray-400 underline",onClick:_=>F(s)}," Permissions ",8,Z)):v("",!0),a("button",{class:"cursor-pointer ml-6 text-sm text-red-500",onClick:_=>D(s)}," Delete ",8,ee)])]))),128))])]),_:1})])])):v("",!0),t(T,{show:g.value,onClose:o[3]||(o[3]=s=>g.value=!1)},{title:e(()=>[n(" API Token ")]),content:e(()=>[se,u.$page.props.jetstream.flash.token?(i(),r("div",te,k(u.$page.props.jetstream.flash.token),1)):v("",!0)]),footer:e(()=>[t(C,{onClick:o[2]||(o[2]=s=>g.value=!1)},{default:e(()=>[n(" Close ")]),_:1})]),_:1},8,["show"]),t(T,{show:p.value!=null,onClose:o[6]||(o[6]=s=>p.value=null)},{title:e(()=>[n(" API Token Permissions ")]),content:e(()=>[a("div",oe,[(i(!0),r($,null,x(c.availablePermissions,s=>(i(),r("div",{key:s},[a("label",ne,[t(w,{checked:l(d).permissions,"onUpdate:checked":o[4]||(o[4]=_=>l(d).permissions=_),value:s},null,8,["checked","value"]),a("span",le,k(s),1)])]))),128))])]),footer:e(()=>[t(C,{onClick:o[5]||(o[5]=s=>p.value=null)},{default:e(()=>[n(" Cancel ")]),_:1}),t(P,{class:A(["ml-3",{"opacity-25":l(d).processing}]),disabled:l(d).processing,onClick:V},{default:e(()=>[n(" Save ")]),_:1},8,["class","disabled"])]),_:1},8,["show"]),t(U,{show:f.value!=null,onClose:o[8]||(o[8]=s=>f.value=null)},{title:e(()=>[n(" Delete API Token ")]),content:e(()=>[n(" Are you sure you would like to delete this API token? ")]),footer:e(()=>[t(C,{onClick:o[7]||(o[7]=s=>f.value=null)},{default:e(()=>[n(" Cancel ")]),_:1}),t(J,{class:A(["ml-3",{"opacity-25":l(y).processing}]),disabled:l(y).processing,onClick:B},{default:e(()=>[n(" Delete ")]),_:1},8,["class","disabled"])]),_:1},8,["show"])]))}};export{Ae as default}; +import{T as h,r as b,o as i,d as r,b as t,w as e,a,e as v,f as n,u as l,F as $,g as x,n as A,t as k}from"./app-f1704ce4.js";import{_ as N}from"./ActionMessage-d75e1dd9.js";import{_ as j}from"./ActionSection-d56e0acb.js";import{_ as P}from"./Button-0fddd99a.js";import{_ as U}from"./ConfirmationModal-8bbf04ad.js";import{_ as J}from"./DangerButton-eebd22fb.js";import{_ as T}from"./DialogModal-9816ba23.js";import{_ as L}from"./FormSection-c89a1bf5.js";import{_ as M}from"./Input-3c640f45.js";import{_ as w}from"./Checkbox-b6951cba.js";import{_ as z}from"./InputError-99d060cb.js";import{_ as S}from"./Label-54d8da87.js";import{_ as C}from"./SecondaryButton-c6d8a330.js";import{J as E}from"./SectionBorder-d89d62c7.js";import"./SectionTitle-8e514380.js";import"./_plugin-vue_export-helper-c27b6911.js";import"./Modal-1a38c55d.js";const Y={class:"col-span-6 sm:col-span-4"},q={key:0,class:"col-span-6"},G={class:"mt-2 grid grid-cols-1 md:grid-cols-2 gap-4"},H={class:"flex items-center"},K={class:"ml-2 text-sm text-gray-600"},O={key:0},Q={class:"mt-10 sm:mt-0"},R={class:"space-y-6"},W={class:"flex items-center"},X={key:0,class:"text-sm text-gray-400"},Z=["onClick"],ee=["onClick"],se=a("div",null," Please copy your new API token. For your security, it won't be shown again. ",-1),te={key:0,class:"mt-4 bg-gray-100 px-4 py-2 rounded font-mono text-sm text-gray-500"},oe={class:"grid grid-cols-1 md:grid-cols-2 gap-4"},ne={class:"flex items-center"},le={class:"ml-2 text-sm text-gray-600"},Ae={__name:"ApiTokenManager",props:{tokens:Array,availablePermissions:Array,defaultPermissions:Array},setup(c){const m=h({name:"",permissions:c.defaultPermissions}),d=h({permissions:[]}),y=h({}),g=b(!1),p=b(null),f=b(null),I=()=>{m.post(route("api-tokens.store"),{preserveScroll:!0,onSuccess:()=>{g.value=!0,m.reset()}})},F=u=>{d.permissions=u.abilities,p.value=u},V=()=>{d.put(route("api-tokens.update",p.value),{preserveScroll:!0,preserveState:!0,onSuccess:()=>p.value=null})},D=u=>{f.value=u},B=()=>{y.delete(route("api-tokens.destroy",f.value),{preserveScroll:!0,preserveState:!0,onSuccess:()=>f.value=null})};return(u,o)=>(i(),r("div",null,[t(L,{onSubmitted:I},{title:e(()=>[n(" Create API Token ")]),description:e(()=>[n(" API tokens allow third-party services to authenticate with our application on your behalf. ")]),form:e(()=>[a("div",Y,[t(S,{for:"name",value:"Name"}),t(M,{id:"name",modelValue:l(m).name,"onUpdate:modelValue":o[0]||(o[0]=s=>l(m).name=s),type:"text",class:"mt-1 block w-full",autofocus:""},null,8,["modelValue"]),t(z,{message:l(m).errors.name,class:"mt-2"},null,8,["message"])]),c.availablePermissions.length>0?(i(),r("div",q,[t(S,{for:"permissions",value:"Permissions"}),a("div",G,[(i(!0),r($,null,x(c.availablePermissions,s=>(i(),r("div",{key:s},[a("label",H,[t(w,{checked:l(m).permissions,"onUpdate:checked":o[1]||(o[1]=_=>l(m).permissions=_),value:s},null,8,["checked","value"]),a("span",K,k(s),1)])]))),128))])])):v("",!0)]),actions:e(()=>[t(N,{on:l(m).recentlySuccessful,class:"mr-3"},{default:e(()=>[n(" Created. ")]),_:1},8,["on"]),t(P,{class:A({"opacity-25":l(m).processing}),disabled:l(m).processing},{default:e(()=>[n(" Create ")]),_:1},8,["class","disabled"])]),_:1}),c.tokens.length>0?(i(),r("div",O,[t(E),a("div",Q,[t(j,null,{title:e(()=>[n(" Manage API Tokens ")]),description:e(()=>[n(" You may delete any of your existing tokens if they are no longer needed. ")]),content:e(()=>[a("div",R,[(i(!0),r($,null,x(c.tokens,s=>(i(),r("div",{key:s.id,class:"flex items-center justify-between"},[a("div",null,k(s.name),1),a("div",W,[s.last_used_ago?(i(),r("div",X," Last used "+k(s.last_used_ago),1)):v("",!0),c.availablePermissions.length>0?(i(),r("button",{key:1,class:"cursor-pointer ml-6 text-sm text-gray-400 underline",onClick:_=>F(s)}," Permissions ",8,Z)):v("",!0),a("button",{class:"cursor-pointer ml-6 text-sm text-red-500",onClick:_=>D(s)}," Delete ",8,ee)])]))),128))])]),_:1})])])):v("",!0),t(T,{show:g.value,onClose:o[3]||(o[3]=s=>g.value=!1)},{title:e(()=>[n(" API Token ")]),content:e(()=>[se,u.$page.props.jetstream.flash.token?(i(),r("div",te,k(u.$page.props.jetstream.flash.token),1)):v("",!0)]),footer:e(()=>[t(C,{onClick:o[2]||(o[2]=s=>g.value=!1)},{default:e(()=>[n(" Close ")]),_:1})]),_:1},8,["show"]),t(T,{show:p.value!=null,onClose:o[6]||(o[6]=s=>p.value=null)},{title:e(()=>[n(" API Token Permissions ")]),content:e(()=>[a("div",oe,[(i(!0),r($,null,x(c.availablePermissions,s=>(i(),r("div",{key:s},[a("label",ne,[t(w,{checked:l(d).permissions,"onUpdate:checked":o[4]||(o[4]=_=>l(d).permissions=_),value:s},null,8,["checked","value"]),a("span",le,k(s),1)])]))),128))])]),footer:e(()=>[t(C,{onClick:o[5]||(o[5]=s=>p.value=null)},{default:e(()=>[n(" Cancel ")]),_:1}),t(P,{class:A(["ml-3",{"opacity-25":l(d).processing}]),disabled:l(d).processing,onClick:V},{default:e(()=>[n(" Save ")]),_:1},8,["class","disabled"])]),_:1},8,["show"]),t(U,{show:f.value!=null,onClose:o[8]||(o[8]=s=>f.value=null)},{title:e(()=>[n(" Delete API Token ")]),content:e(()=>[n(" Are you sure you would like to delete this API token? ")]),footer:e(()=>[t(C,{onClick:o[7]||(o[7]=s=>f.value=null)},{default:e(()=>[n(" Cancel ")]),_:1}),t(J,{class:A(["ml-3",{"opacity-25":l(y).processing}]),disabled:l(y).processing,onClick:B},{default:e(()=>[n(" Delete ")]),_:1},8,["class","disabled"])]),_:1},8,["show"])]))}};export{Ae as default}; diff --git a/public/build/default/assets/AppLayout-71437c13.js b/public/build/default/assets/AppLayout-5f3e8958.js similarity index 95% rename from public/build/default/assets/AppLayout-71437c13.js rename to public/build/default/assets/AppLayout-5f3e8958.js index 6f788e0ed..8e128977c 100644 --- a/public/build/default/assets/AppLayout-71437c13.js +++ b/public/build/default/assets/AppLayout-5f3e8958.js @@ -1,4 +1,4 @@ -import{r as jr,x as je,P as Xe,y as uu,o as p,d as y,n as te,a as f,e as W,t as k,i as Xa,l as X,N as Ce,c as B,w as F,Q as it,q as Ba,j as De,v as du,b as x,F as ue,g as we,m as pt,s as _o,R as lu,B as Dn,u as _,S as mu,f as I,T as cu,_ as hu}from"./app-0b9725b5.js";import{_ as Se}from"./_plugin-vue_export-helper-c27b6911.js";import{I as q}from"./Icon-b9bd5b83.js";import{u as fu}from"./useAuthorizable-663b53e2.js";const vu={class:"max-w-screen-xl mx-auto py-2 px-3 sm:px-6 lg:px-8"},gu={class:"flex items-center justify-between flex-wrap"},pu={class:"w-0 flex-1 flex items-center min-w-0"},bu={key:0,class:"h-5 w-5 text-white",xmlns:"http://www.w3.org/2000/svg",fill:"none",viewBox:"0 0 24 24",stroke:"currentColor"},yu=f("path",{"stroke-linecap":"round","stroke-linejoin":"round","stroke-width":"2",d:"M9 12l2 2 4-4m6 2a9 9 0 11-18 0 9 9 0 0118 0z"},null,-1),wu=[yu],$u={key:1,class:"h-5 w-5 text-white",xmlns:"http://www.w3.org/2000/svg",fill:"none",viewBox:"0 0 24 24",stroke:"currentColor"},Pu=f("path",{"stroke-linecap":"round","stroke-linejoin":"round","stroke-width":"2",d:"M12 9v2m0 4h.01m-6.938 4h13.856c1.54 0 2.502-1.667 1.732-3L13.732 4c-.77-1.333-2.694-1.333-3.464 0L3.34 16c-.77 1.333.192 3 1.732 3z"},null,-1),ku=[Pu],Mu={class:"ml-3 font-medium text-sm text-white truncate"},Wu={class:"shrink-0 sm:ml-3"},xu=f("svg",{class:"h-5 w-5 text-white",xmlns:"http://www.w3.org/2000/svg",fill:"none",viewBox:"0 0 24 24",stroke:"currentColor"},[f("path",{"stroke-linecap":"round","stroke-linejoin":"round","stroke-width":"2",d:"M6 18L18 6M6 6l12 12"})],-1),_u=[xu],Du={__name:"Banner",setup(a){const e=jr(!0),t=je(()=>{var n;return((n=Xe().props.jetstream.flash)==null?void 0:n.bannerStyle)||"success"}),r=je(()=>{var n;return((n=Xe().props.jetstream.flash)==null?void 0:n.banner)||""});return uu(r,async()=>{e.value=!0}),(n,i)=>(p(),y("div",null,[e.value&&r.value?(p(),y("div",{key:0,class:te({"bg-indigo-500":t.value=="success","bg-red-700":t.value=="danger"})},[f("div",vu,[f("div",gu,[f("div",pu,[f("span",{class:te(["flex p-2 rounded-lg",{"bg-indigo-600":t.value=="success","bg-red-600":t.value=="danger"}])},[t.value=="success"?(p(),y("svg",bu,wu)):W("",!0),t.value=="danger"?(p(),y("svg",$u,ku)):W("",!0)],2),f("p",Mu,k(r.value),1)]),f("div",Wu,[f("button",{type:"button",class:te(["-mr-1 flex p-2 rounded-md focus:outline-none sm:-mr-2 transition",{"hover:bg-indigo-600 focus:bg-indigo-600":t.value=="success","hover:bg-red-600 focus:bg-red-600":t.value=="danger"}]),"aria-label":"Dismiss",onClick:i[0]||(i[0]=Xa(u=>e.value=!1,["prevent"]))},_u,2)])])])],2)):W("",!0)]))}},Cu={props:{toast:Object,popstate:String},data(){return{milliseconds:this.toast&&this.toast.milliseconds?this.toast.milliseconds:3e3,id:null}},watch:{toast:{deep:!0,handler(a,e){this.fireToast()}}},mounted(){this.fireToast()},methods:{fireToast(){if(!this.toast||sessionStorage.getItem("toast-"+this.popstate))return;this.milliseconds=this.toast.milliseconds??3e3;const a=this.toast.type==="danger"?"error":this.toast.type;Toast.fire({icon:a,title:this.toast.title,text:this.toast.body,timer:this.milliseconds}),sessionStorage.setItem("toast-"+this.popstate,"1")}}};function Tu(a,e,t,r,n,i){return null}const ju=Se(Cu,[["render",Tu]]),Au=["href"],Do={__name:"ResponsiveNavLink",props:{active:Boolean,href:String,as:String,openInNewTab:{type:Boolean,default:!1}},setup(a){const e=a,t=je(()=>e.active?"block pl-3 pr-4 py-2 border-l-4 border-light-blue-400 text-base font-medium text-light-blue-700 bg-light-blue-50 dark:bg-cool-gray-900 focus:outline-none focus:text-light-blue-800 focus:bg-light-blue-100 dark:focus:bg-cool-gray-900 focus:border-light-blue-700 transition duration-150 ease-in-out":"block pl-3 pr-4 py-2 border-l-4 border-transparent text-base font-medium text-gray-600 dark:text-gray-400 hover:text-gray-800 dark:hover:text-gray-200 hover:bg-gray-50 dark:hover:bg-cool-gray-700 hover:border-gray-300 focus:outline-none focus:text-gray-800 dark:focus:text-gray-200 focus:bg-gray-50 dark:focus:bg-cool-gray-900 focus:border-gray-300 transition duration-150 ease-in-out");return(r,n)=>{const i=X("InertiaLink");return p(),y("div",null,[a.as=="button"?(p(),y("button",{key:0,class:te([t.value,"w-full text-left"])},[Ce(r.$slots,"default")],2)):a.as!="button"&&!a.openInNewTab?(p(),B(i,{key:1,href:a.href,class:te(t.value)},{default:F(()=>[Ce(r.$slots,"default")]),_:3},8,["href","class"])):(p(),y("a",{key:2,target:"_blank",href:a.href,class:te(t.value)},[Ce(r.$slots,"default")],10,Au))])}}};var Su=/\s/;function zu(a){for(var e=a.length;e--&&Su.test(a.charAt(e)););return e}var Eu=zu,Nu=Eu,Fu=/^\s+/;function Ru(a){return a&&a.slice(0,Nu(a)+1).replace(Fu,"")}var Lu=Ru;function Hu(a){var e=typeof a;return a!=null&&(e=="object"||e=="function")}var Ze=Hu,Ou=typeof it=="object"&&it&&it.Object===Object&&it,Co=Ou,Vu=Co,Iu=typeof self=="object"&&self&&self.Object===Object&&self,Xu=Vu||Iu||Function("return this")(),xe=Xu,Bu=xe,Gu=Bu.Symbol,Ga=Gu,Cn=Ga,To=Object.prototype,qu=To.hasOwnProperty,Yu=To.toString,za=Cn?Cn.toStringTag:void 0;function Uu(a){var e=qu.call(a,za),t=a[za];try{a[za]=void 0;var r=!0}catch{}var n=Yu.call(a);return r&&(e?a[za]=t:delete a[za]),n}var Qu=Uu,Ku=Object.prototype,Ju=Ku.toString;function Zu(a){return Ju.call(a)}var ed=Zu,Tn=Ga,ad=Qu,td=ed,rd="[object Null]",nd="[object Undefined]",jn=Tn?Tn.toStringTag:void 0;function id(a){return a==null?a===void 0?nd:rd:jn&&jn in Object(a)?ad(a):td(a)}var qa=id;function od(a){return a!=null&&typeof a=="object"}var Pa=od,sd=qa,ud=Pa,dd="[object Symbol]";function ld(a){return typeof a=="symbol"||ud(a)&&sd(a)==dd}var Dt=ld,md=Lu,An=Ze,cd=Dt,Sn=0/0,hd=/^[-+]0x[0-9a-f]+$/i,fd=/^0b[01]+$/i,vd=/^0o[0-7]+$/i,gd=parseInt;function pd(a){if(typeof a=="number")return a;if(cd(a))return Sn;if(An(a)){var e=typeof a.valueOf=="function"?a.valueOf():a;a=An(e)?e+"":e}if(typeof a!="string")return a===0?a:+a;a=md(a);var t=fd.test(a);return t||vd.test(a)?gd(a.slice(2),t?2:8):hd.test(a)?Sn:+a}var Ar=pd,bd=Ar,zn=1/0,yd=17976931348623157e292;function wd(a){if(!a)return a===0?a:0;if(a=bd(a),a===zn||a===-zn){var e=a<0?-1:1;return e*yd}return a===a?a:0}var $d=wd,Pd=$d;function kd(a){var e=Pd(a),t=e%1;return e===e?t?e-t:e:0}var Ya=kd,Md=Ya,Wd="Expected a function";function xd(a,e){if(typeof e!="function")throw new TypeError(Wd);return a=Md(a),function(){if(--a<1)return e.apply(this,arguments)}}var _d=xd;function Dd(a){return a}var Ua=Dd,Cd=qa,Td=Ze,jd="[object AsyncFunction]",Ad="[object Function]",Sd="[object GeneratorFunction]",zd="[object Proxy]";function Ed(a){if(!Td(a))return!1;var e=Cd(a);return e==Ad||e==Sd||e==jd||e==zd}var jo=Ed,Nd=xe,Fd=Nd["__core-js_shared__"],Rd=Fd,Ut=Rd,En=function(){var a=/[^.]+$/.exec(Ut&&Ut.keys&&Ut.keys.IE_PROTO||"");return a?"Symbol(src)_1."+a:""}();function Ld(a){return!!En&&En in a}var Hd=Ld,Od=Function.prototype,Vd=Od.toString;function Id(a){if(a!=null){try{return Vd.call(a)}catch{}try{return a+""}catch{}}return""}var Ao=Id,Xd=jo,Bd=Hd,Gd=Ze,qd=Ao,Yd=/[\\^$.*+?()[\]{}|]/g,Ud=/^\[object .+?Constructor\]$/,Qd=Function.prototype,Kd=Object.prototype,Jd=Qd.toString,Zd=Kd.hasOwnProperty,el=RegExp("^"+Jd.call(Zd).replace(Yd,"\\$&").replace(/hasOwnProperty|(function).*?(?=\\\()| for .+?(?=\\\])/g,"$1.*?")+"$");function al(a){if(!Gd(a)||Bd(a))return!1;var e=Xd(a)?el:Ud;return e.test(qd(a))}var tl=al;function rl(a,e){return a==null?void 0:a[e]}var nl=rl,il=tl,ol=nl;function sl(a,e){var t=ol(a,e);return il(t)?t:void 0}var ma=sl,ul=ma,dl=xe,ll=ul(dl,"WeakMap"),So=ll,Nn=So,ml=Nn&&new Nn,zo=ml,cl=Ua,Fn=zo,hl=Fn?function(a,e){return Fn.set(a,e),a}:cl,Eo=hl,fl=Ze,Rn=Object.create,vl=function(){function a(){}return function(e){if(!fl(e))return{};if(Rn)return Rn(e);a.prototype=e;var t=new a;return a.prototype=void 0,t}}(),Sr=vl,gl=Sr,pl=Ze;function bl(a){return function(){var e=arguments;switch(e.length){case 0:return new a;case 1:return new a(e[0]);case 2:return new a(e[0],e[1]);case 3:return new a(e[0],e[1],e[2]);case 4:return new a(e[0],e[1],e[2],e[3]);case 5:return new a(e[0],e[1],e[2],e[3],e[4]);case 6:return new a(e[0],e[1],e[2],e[3],e[4],e[5]);case 7:return new a(e[0],e[1],e[2],e[3],e[4],e[5],e[6])}var t=gl(a.prototype),r=a.apply(t,e);return pl(r)?r:t}}var Ct=bl,yl=Ct,wl=xe,$l=1;function Pl(a,e,t){var r=e&$l,n=yl(a);function i(){var u=this&&this!==wl&&this instanceof i?n:a;return u.apply(r?t:this,arguments)}return i}var kl=Pl;function Ml(a,e,t){switch(t.length){case 0:return a.call(e);case 1:return a.call(e,t[0]);case 2:return a.call(e,t[0],t[1]);case 3:return a.call(e,t[0],t[1],t[2])}return a.apply(e,t)}var Qa=Ml,Wl=Math.max;function xl(a,e,t,r){for(var n=-1,i=a.length,u=t.length,l=-1,m=e.length,c=Wl(i-u,0),h=Array(m+c),b=!r;++l0){if(++e>=fm)return arguments[0]}else e=0;return a.apply(void 0,arguments)}}var Oo=pm,bm=Eo,ym=Oo,wm=ym(bm),Vo=wm,$m=/\{\n\/\* \[wrapped with (.+)\] \*/,Pm=/,? & /;function km(a){var e=a.match($m);return e?e[1].split(Pm):[]}var Mm=km,Wm=/\{(?:\n\/\* \[wrapped with .+\] \*\/)?\n?/;function xm(a,e){var t=e.length;if(!t)return a;var r=t-1;return e[r]=(t>1?"& ":"")+e[r],e=e.join(t>2?", ":" "),a.replace(Wm,`{ +import{r as jr,x as je,S as Xe,E as uu,o as p,d as y,n as te,a as f,e as W,t as k,i as Xa,l as X,R as Ce,c as B,w as F,U as it,q as Ba,j as De,v as du,b as x,F as ue,g as we,m as pt,A as _o,B as lu,J as Dn,u as _,V as mu,f as I,T as cu,_ as hu}from"./app-f1704ce4.js";import{_ as Se}from"./_plugin-vue_export-helper-c27b6911.js";import{I as q}from"./Icon-4144b1c7.js";import{u as fu}from"./useAuthorizable-18c71ef1.js";const vu={class:"max-w-screen-xl mx-auto py-2 px-3 sm:px-6 lg:px-8"},gu={class:"flex items-center justify-between flex-wrap"},pu={class:"w-0 flex-1 flex items-center min-w-0"},bu={key:0,class:"h-5 w-5 text-white",xmlns:"http://www.w3.org/2000/svg",fill:"none",viewBox:"0 0 24 24",stroke:"currentColor"},yu=f("path",{"stroke-linecap":"round","stroke-linejoin":"round","stroke-width":"2",d:"M9 12l2 2 4-4m6 2a9 9 0 11-18 0 9 9 0 0118 0z"},null,-1),wu=[yu],$u={key:1,class:"h-5 w-5 text-white",xmlns:"http://www.w3.org/2000/svg",fill:"none",viewBox:"0 0 24 24",stroke:"currentColor"},Pu=f("path",{"stroke-linecap":"round","stroke-linejoin":"round","stroke-width":"2",d:"M12 9v2m0 4h.01m-6.938 4h13.856c1.54 0 2.502-1.667 1.732-3L13.732 4c-.77-1.333-2.694-1.333-3.464 0L3.34 16c-.77 1.333.192 3 1.732 3z"},null,-1),ku=[Pu],Mu={class:"ml-3 font-medium text-sm text-white truncate"},Wu={class:"shrink-0 sm:ml-3"},xu=f("svg",{class:"h-5 w-5 text-white",xmlns:"http://www.w3.org/2000/svg",fill:"none",viewBox:"0 0 24 24",stroke:"currentColor"},[f("path",{"stroke-linecap":"round","stroke-linejoin":"round","stroke-width":"2",d:"M6 18L18 6M6 6l12 12"})],-1),_u=[xu],Du={__name:"Banner",setup(a){const e=jr(!0),t=je(()=>{var n;return((n=Xe().props.jetstream.flash)==null?void 0:n.bannerStyle)||"success"}),r=je(()=>{var n;return((n=Xe().props.jetstream.flash)==null?void 0:n.banner)||""});return uu(r,async()=>{e.value=!0}),(n,i)=>(p(),y("div",null,[e.value&&r.value?(p(),y("div",{key:0,class:te({"bg-indigo-500":t.value=="success","bg-red-700":t.value=="danger"})},[f("div",vu,[f("div",gu,[f("div",pu,[f("span",{class:te(["flex p-2 rounded-lg",{"bg-indigo-600":t.value=="success","bg-red-600":t.value=="danger"}])},[t.value=="success"?(p(),y("svg",bu,wu)):W("",!0),t.value=="danger"?(p(),y("svg",$u,ku)):W("",!0)],2),f("p",Mu,k(r.value),1)]),f("div",Wu,[f("button",{type:"button",class:te(["-mr-1 flex p-2 rounded-md focus:outline-none sm:-mr-2 transition",{"hover:bg-indigo-600 focus:bg-indigo-600":t.value=="success","hover:bg-red-600 focus:bg-red-600":t.value=="danger"}]),"aria-label":"Dismiss",onClick:i[0]||(i[0]=Xa(u=>e.value=!1,["prevent"]))},_u,2)])])])],2)):W("",!0)]))}},Cu={props:{toast:Object,popstate:String},data(){return{milliseconds:this.toast&&this.toast.milliseconds?this.toast.milliseconds:3e3,id:null}},watch:{toast:{deep:!0,handler(a,e){this.fireToast()}}},mounted(){this.fireToast()},methods:{fireToast(){if(!this.toast||sessionStorage.getItem("toast-"+this.popstate))return;this.milliseconds=this.toast.milliseconds??3e3;const a=this.toast.type==="danger"?"error":this.toast.type;Toast.fire({icon:a,title:this.toast.title,text:this.toast.body,timer:this.milliseconds}),sessionStorage.setItem("toast-"+this.popstate,"1")}}};function Tu(a,e,t,r,n,i){return null}const ju=Se(Cu,[["render",Tu]]),Au=["href"],Do={__name:"ResponsiveNavLink",props:{active:Boolean,href:String,as:String,openInNewTab:{type:Boolean,default:!1}},setup(a){const e=a,t=je(()=>e.active?"block pl-3 pr-4 py-2 border-l-4 border-light-blue-400 text-base font-medium text-light-blue-700 bg-light-blue-50 dark:bg-cool-gray-900 focus:outline-none focus:text-light-blue-800 focus:bg-light-blue-100 dark:focus:bg-cool-gray-900 focus:border-light-blue-700 transition duration-150 ease-in-out":"block pl-3 pr-4 py-2 border-l-4 border-transparent text-base font-medium text-gray-600 dark:text-gray-400 hover:text-gray-800 dark:hover:text-gray-200 hover:bg-gray-50 dark:hover:bg-cool-gray-700 hover:border-gray-300 focus:outline-none focus:text-gray-800 dark:focus:text-gray-200 focus:bg-gray-50 dark:focus:bg-cool-gray-900 focus:border-gray-300 transition duration-150 ease-in-out");return(r,n)=>{const i=X("InertiaLink");return p(),y("div",null,[a.as=="button"?(p(),y("button",{key:0,class:te([t.value,"w-full text-left"])},[Ce(r.$slots,"default")],2)):a.as!="button"&&!a.openInNewTab?(p(),B(i,{key:1,href:a.href,class:te(t.value)},{default:F(()=>[Ce(r.$slots,"default")]),_:3},8,["href","class"])):(p(),y("a",{key:2,target:"_blank",href:a.href,class:te(t.value)},[Ce(r.$slots,"default")],10,Au))])}}};var Su=/\s/;function zu(a){for(var e=a.length;e--&&Su.test(a.charAt(e)););return e}var Eu=zu,Nu=Eu,Fu=/^\s+/;function Ru(a){return a&&a.slice(0,Nu(a)+1).replace(Fu,"")}var Lu=Ru;function Hu(a){var e=typeof a;return a!=null&&(e=="object"||e=="function")}var Ze=Hu,Ou=typeof it=="object"&&it&&it.Object===Object&&it,Co=Ou,Vu=Co,Iu=typeof self=="object"&&self&&self.Object===Object&&self,Xu=Vu||Iu||Function("return this")(),xe=Xu,Bu=xe,Gu=Bu.Symbol,Ga=Gu,Cn=Ga,To=Object.prototype,qu=To.hasOwnProperty,Yu=To.toString,za=Cn?Cn.toStringTag:void 0;function Uu(a){var e=qu.call(a,za),t=a[za];try{a[za]=void 0;var r=!0}catch{}var n=Yu.call(a);return r&&(e?a[za]=t:delete a[za]),n}var Qu=Uu,Ku=Object.prototype,Ju=Ku.toString;function Zu(a){return Ju.call(a)}var ed=Zu,Tn=Ga,ad=Qu,td=ed,rd="[object Null]",nd="[object Undefined]",jn=Tn?Tn.toStringTag:void 0;function id(a){return a==null?a===void 0?nd:rd:jn&&jn in Object(a)?ad(a):td(a)}var qa=id;function od(a){return a!=null&&typeof a=="object"}var Pa=od,sd=qa,ud=Pa,dd="[object Symbol]";function ld(a){return typeof a=="symbol"||ud(a)&&sd(a)==dd}var Dt=ld,md=Lu,An=Ze,cd=Dt,Sn=0/0,hd=/^[-+]0x[0-9a-f]+$/i,fd=/^0b[01]+$/i,vd=/^0o[0-7]+$/i,gd=parseInt;function pd(a){if(typeof a=="number")return a;if(cd(a))return Sn;if(An(a)){var e=typeof a.valueOf=="function"?a.valueOf():a;a=An(e)?e+"":e}if(typeof a!="string")return a===0?a:+a;a=md(a);var t=fd.test(a);return t||vd.test(a)?gd(a.slice(2),t?2:8):hd.test(a)?Sn:+a}var Ar=pd,bd=Ar,zn=1/0,yd=17976931348623157e292;function wd(a){if(!a)return a===0?a:0;if(a=bd(a),a===zn||a===-zn){var e=a<0?-1:1;return e*yd}return a===a?a:0}var $d=wd,Pd=$d;function kd(a){var e=Pd(a),t=e%1;return e===e?t?e-t:e:0}var Ya=kd,Md=Ya,Wd="Expected a function";function xd(a,e){if(typeof e!="function")throw new TypeError(Wd);return a=Md(a),function(){if(--a<1)return e.apply(this,arguments)}}var _d=xd;function Dd(a){return a}var Ua=Dd,Cd=qa,Td=Ze,jd="[object AsyncFunction]",Ad="[object Function]",Sd="[object GeneratorFunction]",zd="[object Proxy]";function Ed(a){if(!Td(a))return!1;var e=Cd(a);return e==Ad||e==Sd||e==jd||e==zd}var jo=Ed,Nd=xe,Fd=Nd["__core-js_shared__"],Rd=Fd,Ut=Rd,En=function(){var a=/[^.]+$/.exec(Ut&&Ut.keys&&Ut.keys.IE_PROTO||"");return a?"Symbol(src)_1."+a:""}();function Ld(a){return!!En&&En in a}var Hd=Ld,Od=Function.prototype,Vd=Od.toString;function Id(a){if(a!=null){try{return Vd.call(a)}catch{}try{return a+""}catch{}}return""}var Ao=Id,Xd=jo,Bd=Hd,Gd=Ze,qd=Ao,Yd=/[\\^$.*+?()[\]{}|]/g,Ud=/^\[object .+?Constructor\]$/,Qd=Function.prototype,Kd=Object.prototype,Jd=Qd.toString,Zd=Kd.hasOwnProperty,el=RegExp("^"+Jd.call(Zd).replace(Yd,"\\$&").replace(/hasOwnProperty|(function).*?(?=\\\()| for .+?(?=\\\])/g,"$1.*?")+"$");function al(a){if(!Gd(a)||Bd(a))return!1;var e=Xd(a)?el:Ud;return e.test(qd(a))}var tl=al;function rl(a,e){return a==null?void 0:a[e]}var nl=rl,il=tl,ol=nl;function sl(a,e){var t=ol(a,e);return il(t)?t:void 0}var ma=sl,ul=ma,dl=xe,ll=ul(dl,"WeakMap"),So=ll,Nn=So,ml=Nn&&new Nn,zo=ml,cl=Ua,Fn=zo,hl=Fn?function(a,e){return Fn.set(a,e),a}:cl,Eo=hl,fl=Ze,Rn=Object.create,vl=function(){function a(){}return function(e){if(!fl(e))return{};if(Rn)return Rn(e);a.prototype=e;var t=new a;return a.prototype=void 0,t}}(),Sr=vl,gl=Sr,pl=Ze;function bl(a){return function(){var e=arguments;switch(e.length){case 0:return new a;case 1:return new a(e[0]);case 2:return new a(e[0],e[1]);case 3:return new a(e[0],e[1],e[2]);case 4:return new a(e[0],e[1],e[2],e[3]);case 5:return new a(e[0],e[1],e[2],e[3],e[4]);case 6:return new a(e[0],e[1],e[2],e[3],e[4],e[5]);case 7:return new a(e[0],e[1],e[2],e[3],e[4],e[5],e[6])}var t=gl(a.prototype),r=a.apply(t,e);return pl(r)?r:t}}var Ct=bl,yl=Ct,wl=xe,$l=1;function Pl(a,e,t){var r=e&$l,n=yl(a);function i(){var u=this&&this!==wl&&this instanceof i?n:a;return u.apply(r?t:this,arguments)}return i}var kl=Pl;function Ml(a,e,t){switch(t.length){case 0:return a.call(e);case 1:return a.call(e,t[0]);case 2:return a.call(e,t[0],t[1]);case 3:return a.call(e,t[0],t[1],t[2])}return a.apply(e,t)}var Qa=Ml,Wl=Math.max;function xl(a,e,t,r){for(var n=-1,i=a.length,u=t.length,l=-1,m=e.length,c=Wl(i-u,0),h=Array(m+c),b=!r;++l0){if(++e>=fm)return arguments[0]}else e=0;return a.apply(void 0,arguments)}}var Oo=pm,bm=Eo,ym=Oo,wm=ym(bm),Vo=wm,$m=/\{\n\/\* \[wrapped with (.+)\] \*/,Pm=/,? & /;function km(a){var e=a.match($m);return e?e[1].split(Pm):[]}var Mm=km,Wm=/\{(?:\n\/\* \[wrapped with .+\] \*\/)?\n?/;function xm(a,e){var t=e.length;if(!t)return a;var r=t-1;return e[r]=(t>1?"& ":"")+e[r],e=e.join(t>2?", ":" "),a.replace(Wm,`{ /* [wrapped with `+e+`] */ `)}var _m=xm;function Dm(a){return function(){return a}}var Cm=Dm,Tm=ma,jm=function(){try{var a=Tm(Object,"defineProperty");return a({},"",{}),a}catch{}}(),Am=jm,Sm=Cm,Vn=Am,zm=Ua,Em=Vn?function(a,e){return Vn(a,"toString",{configurable:!0,enumerable:!1,value:Sm(e),writable:!0})}:zm,Nm=Em,Fm=Nm,Rm=Oo,Lm=Rm(Fm),Nr=Lm;function Hm(a,e){for(var t=-1,r=a==null?0:a.length;++t-1}var ac=ec,tc=Om,rc=ac,nc=1,ic=2,oc=8,sc=16,uc=32,dc=64,lc=128,mc=256,cc=512,hc=[["ary",lc],["bind",nc],["bindKey",ic],["curry",oc],["curryRight",sc],["flip",cc],["partial",uc],["partialRight",dc],["rearg",mc]];function fc(a,e){return tc(hc,function(t){var r="_."+t[0];e&t[1]&&!rc(a,r)&&a.push(r)}),a.sort()}var vc=fc,gc=Mm,pc=_m,bc=Nr,yc=vc;function wc(a,e,t){var r=e+"";return bc(a,pc(r,yc(gc(r),t)))}var Io=wc,$c=hm,Pc=Vo,kc=Io,Mc=1,Wc=2,xc=4,_c=8,In=32,Xn=64;function Dc(a,e,t,r,n,i,u,l,m,c){var h=e&_c,b=h?u:void 0,g=h?void 0:u,w=h?i:void 0,T=h?void 0:i;e|=h?In:Xn,e&=~(h?Xn:In),e&xc||(e&=~(Mc|Wc));var R=[a,e,n,w,b,T,g,l,m,c],H=t.apply(void 0,R);return $c(a)&&Pc(H,R),H.placeholder=r,kc(H,a,e)}var Xo=Dc;function Cc(a){var e=a;return e.placeholder}var ka=Cc,Tc=9007199254740991,jc=/^(?:0|[1-9]\d*)$/;function Ac(a,e){var t=typeof a;return e=e??Tc,!!e&&(t=="number"||t!="symbol"&&jc.test(a))&&a>-1&&a%1==0&&a1&&C.reverse(),h&&m0&&(t=e.apply(this,arguments)),a<=1&&(e=void 0),t}}var Yo=Rh,Lh=Qa,ai=Math.max;function Hh(a,e,t){return e=ai(e===void 0?a.length-1:e,0),function(){for(var r=arguments,n=-1,i=ai(r.length-e,0),u=Array(i);++n=e||O<0||b&&G>=i}function E(){var j=er();if(H(j))return C(j);l=setTimeout(E,R(j))}function C(j){return l=void 0,g&&r?w(j):(r=n=void 0,u)}function S(){l!==void 0&&clearTimeout(l),c=0,r=m=n=l=void 0}function N(){return l===void 0?u:C(er())}function L(){var j=er(),O=H(j);if(r=arguments,n=this,m=j,O){if(l===void 0)return T(m);if(b)return clearTimeout(l),l=setTimeout(E,e),w(m)}return l===void 0&&(l=setTimeout(E,e)),u}return L.cancel=S,L.flush=N,L}var Qo=wf,$f="Expected a function";function Pf(a,e,t){if(typeof a!="function")throw new TypeError($f);return setTimeout(function(){a.apply(void 0,t)},e)}var Ko=Pf,kf=Ko,Mf=Le,Wf=Mf(function(a,e){return kf(a,1,e)}),xf=Wf,_f=Ko,Df=Le,Cf=Ar,Tf=Df(function(a,e,t){return _f(a,Cf(e)||0,t)}),jf=Tf,Af=Be,Sf=512;function zf(a){return Af(a,Sf)}var Ef=zf,Nf=ma,Ff=Nf(Object,"create"),Tt=Ff,ri=Tt;function Rf(){this.__data__=ri?ri(null):{},this.size=0}var Lf=Rf;function Hf(a){var e=this.has(a)&&delete this.__data__[a];return this.size-=e?1:0,e}var Of=Hf,Vf=Tt,If="__lodash_hash_undefined__",Xf=Object.prototype,Bf=Xf.hasOwnProperty;function Gf(a){var e=this.__data__;if(Vf){var t=e[a];return t===If?void 0:t}return Bf.call(e,a)?e[a]:void 0}var qf=Gf,Yf=Tt,Uf=Object.prototype,Qf=Uf.hasOwnProperty;function Kf(a){var e=this.__data__;return Yf?e[a]!==void 0:Qf.call(e,a)}var Jf=Kf,Zf=Tt,ev="__lodash_hash_undefined__";function av(a,e){var t=this.__data__;return this.size+=this.has(a)?0:1,t[a]=Zf&&e===void 0?ev:e,this}var tv=av,rv=Lf,nv=Of,iv=qf,ov=Jf,sv=tv;function Ma(a){var e=-1,t=a==null?0:a.length;for(this.clear();++e-1}var Mv=kv,Wv=jt;function xv(a,e){var t=this.__data__,r=Wv(t,a);return r<0?(++this.size,t.push([a,e])):t[r][1]=e,this}var _v=xv,Dv=lv,Cv=bv,Tv=$v,jv=Mv,Av=_v;function Wa(a){var e=-1,t=a==null?0:a.length;for(this.clear();++e0&&t(l)?e>1?rs(l,e-1,t,r,n):Cg(n,l):r||(n[n.length]=l)}return n}var ns=rs,jg=At;function Ag(){this.__data__=new jg,this.size=0}var Sg=Ag;function zg(a){var e=this.__data__,t=e.delete(a);return this.size=e.size,t}var Eg=zg;function Ng(a){return this.__data__.get(a)}var Fg=Ng;function Rg(a){return this.__data__.has(a)}var Lg=Rg,Hg=At,Og=Vr,Vg=Ir,Ig=200;function Xg(a,e){var t=this.__data__;if(t instanceof Hg){var r=t.__data__;if(!Og||r.lengthl))return!1;var c=i.get(a),h=i.get(e);if(c&&h)return c==e&&h==a;var b=-1,g=!0,w=t&vp?new mp:void 0;for(i.set(a,e),i.set(e,a);++b-1&&a%1==0&&a<=sb}var qr=ub,db=qa,lb=qr,mb=Pa,cb="[object Arguments]",hb="[object Array]",fb="[object Boolean]",vb="[object Date]",gb="[object Error]",pb="[object Function]",bb="[object Map]",yb="[object Number]",wb="[object Object]",$b="[object RegExp]",Pb="[object Set]",kb="[object String]",Mb="[object WeakMap]",Wb="[object ArrayBuffer]",xb="[object DataView]",_b="[object Float32Array]",Db="[object Float64Array]",Cb="[object Int8Array]",Tb="[object Int16Array]",jb="[object Int32Array]",Ab="[object Uint8Array]",Sb="[object Uint8ClampedArray]",zb="[object Uint16Array]",Eb="[object Uint32Array]",K={};K[_b]=K[Db]=K[Cb]=K[Tb]=K[jb]=K[Ab]=K[Sb]=K[zb]=K[Eb]=!0;K[cb]=K[hb]=K[Wb]=K[fb]=K[xb]=K[vb]=K[gb]=K[pb]=K[bb]=K[yb]=K[wb]=K[$b]=K[Pb]=K[kb]=K[Mb]=!1;function Nb(a){return mb(a)&&lb(a.length)&&!!K[db(a)]}var Fb=Nb;function Rb(a){return function(e){return a(e)}}var us=Rb,kt={exports:{}};kt.exports;(function(a,e){var t=Co,r=e&&!e.nodeType&&e,n=r&&!0&&a&&!a.nodeType&&a,i=n&&n.exports===r,u=i&&t.process,l=function(){try{var m=n&&n.require&&n.require("util").types;return m||u&&u.binding&&u.binding("util")}catch{}}();a.exports=l})(kt,kt.exports);var Lb=kt.exports,Hb=Fb,Ob=us,ci=Lb,hi=ci&&ci.isTypedArray,Vb=hi?Ob(hi):Hb,ds=Vb,Ib=nb,Xb=Gr,Bb=ze,Gb=ss,qb=Fr,Yb=ds,Ub=Object.prototype,Qb=Ub.hasOwnProperty;function Kb(a,e){var t=Bb(a),r=!t&&Xb(a),n=!t&&!r&&Gb(a),i=!t&&!r&&!n&&Yb(a),u=t||r||n||i,l=u?Ib(a.length,String):[],m=l.length;for(var c in a)(e||Qb.call(a,c))&&!(u&&(c=="length"||n&&(c=="offset"||c=="parent")||i&&(c=="buffer"||c=="byteLength"||c=="byteOffset")||qb(c,m)))&&l.push(c);return l}var Jb=Kb,Zb=Object.prototype;function ey(a){var e=a&&a.constructor,t=typeof e=="function"&&e.prototype||Zb;return a===t}var ay=ey;function ty(a,e){return function(t){return a(e(t))}}var ry=ty,ny=ry,iy=ny(Object.keys,Object),oy=iy,sy=ay,uy=oy,dy=Object.prototype,ly=dy.hasOwnProperty;function my(a){if(!sy(a))return uy(a);var e=[];for(var t in Object(a))ly.call(a,t)&&t!="constructor"&&e.push(t);return e}var cy=my,hy=jo,fy=qr;function vy(a){return a!=null&&fy(a.length)&&!hy(a)}var gy=vy,py=Jb,by=cy,yy=gy;function wy(a){return yy(a)?py(a):by(a)}var ls=wy,$y=Gp,Py=tb,ky=ls;function My(a){return $y(a,ky,Py)}var Wy=My,fi=Wy,xy=1,_y=Object.prototype,Dy=_y.hasOwnProperty;function Cy(a,e,t,r,n,i){var u=t&xy,l=fi(a),m=l.length,c=fi(e),h=c.length;if(m!=h&&!u)return!1;for(var b=m;b--;){var g=l[b];if(!(u?g in e:Dy.call(e,g)))return!1}var w=i.get(a),T=i.get(e);if(w&&T)return w==e&&T==a;var R=!0;i.set(a,e),i.set(e,a);for(var H=u;++bn?0:n+e),t=t>n?n:t,t<0&&(t+=n),n=e>t?0:t-e>>>0,e>>>=0;for(var i=Array(n);++r=r?a:N$(a,e,t)}var R$=F$,L$=Qa,H$=Br,O$=Le,V$=R$,I$=Ya,X$="Expected a function",B$=Math.max;function G$(a,e){if(typeof a!="function")throw new TypeError(X$);return e=e==null?0:B$(I$(e),0),O$(function(t){var r=t[e],n=V$(t,0,e);return r&&H$(n,r),L$(a,this,n)})}var q$=G$,Y$=Qo,U$=Ze,Q$="Expected a function";function K$(a,e,t){var r=!0,n=!0;if(typeof a!="function")throw new TypeError(Q$);return U$(t)&&(r="leading"in t?!!t.leading:r,n="trailing"in t?!!t.trailing:n),Y$(a,e,{leading:r,maxWait:e,trailing:n})}var J$=K$,Z$=qo;function eP(a){return Z$(a,1)}var aP=eP,tP=Ua;function rP(a){return typeof a=="function"?a:tP}var nP=rP,iP=nP,oP=ys;function sP(a,e){return oP(iP(e),a)}var uP=sP,dP={after:_d,ary:qo,before:Yo,bind:Kh,bindKey:of,curry:df,curryRight:cf,debounce:Qo,defer:xf,delay:jf,flip:Ef,memoize:es,negate:lg,once:hg,overArgs:n$,partial:ys,partialRight:v$,rearg:D$,rest:S$,spread:q$,throttle:J$,unary:aP,wrap:uP};function lP(a,e){return p(),y("svg",{xmlns:"http://www.w3.org/2000/svg",fill:"none",viewBox:"0 0 24 24","stroke-width":"1.5",stroke:"currentColor","aria-hidden":"true"},[f("path",{"stroke-linecap":"round","stroke-linejoin":"round",d:"M14.857 17.082a23.848 23.848 0 005.454-1.31A8.967 8.967 0 0118 9.75v-.7V9A6 6 0 006 9v.75a8.967 8.967 0 01-2.312 6.022c1.733.64 3.56 1.085 5.455 1.31m5.714 0a24.255 24.255 0 01-5.714 0m5.714 0a3 3 0 11-5.714 0"})])}function mP(a,e){return p(),y("svg",{xmlns:"http://www.w3.org/2000/svg",fill:"none",viewBox:"0 0 24 24","stroke-width":"1.5",stroke:"currentColor","aria-hidden":"true"},[f("path",{"stroke-linecap":"round","stroke-linejoin":"round",d:"M21 21l-5.197-5.197m0 0A7.5 7.5 0 105.196 5.196a7.5 7.5 0 0010.607 10.607z"})])}function cP(a,e){return p(),y("svg",{xmlns:"http://www.w3.org/2000/svg",fill:"none",viewBox:"0 0 24 24","stroke-width":"1.5",stroke:"currentColor","aria-hidden":"true"},[f("path",{"stroke-linecap":"round","stroke-linejoin":"round",d:"M21.752 15.002A9.718 9.718 0 0118 15.75c-5.385 0-9.75-4.365-9.75-9.75 0-1.33.266-2.597.748-3.752A9.753 9.753 0 003 11.25C3 16.635 7.365 21 12.75 21a9.753 9.753 0 009.002-5.998z"})])}function hP(a,e){return p(),y("svg",{xmlns:"http://www.w3.org/2000/svg",fill:"none",viewBox:"0 0 24 24","stroke-width":"1.5",stroke:"currentColor","aria-hidden":"true"},[f("path",{"stroke-linecap":"round","stroke-linejoin":"round",d:"M12 3v2.25m6.364.386l-1.591 1.591M21 12h-2.25m-.386 6.364l-1.591-1.591M12 18.75V21m-4.773-4.227l-1.591 1.591M5.25 12H3m4.227-4.773L5.636 5.636M15.75 12a3.75 3.75 0 11-7.5 0 3.75 3.75 0 017.5 0z"})])}const fP={name:"Search",components:{Icon:q,MagnifyingGlassIcon:mP},data(){return{showResults:!1,loading:!1,searchString:"",usersList:[],playersList:[]}},created:function(){window.addEventListener("click",a=>{this.$el.contains(a.target)||(this.showResults=!1,this.searchString="")})},methods:{performSearch:dP.debounce(function(){this.searchString&&(this.showResults=!0,this.loading=!0,axios.get(route("search",{q:this.searchString})).then(a=>{this.usersList=a.data.users,this.playersList=a.data.players}).finally(()=>{this.loading=!1}))},200)}},vP={class:"relative mx-auto text-gray-600 dark:text-gray-400"},gP=["placeholder"],pP={type:"submit",class:"absolute right-0 top-0 mt-3 mr-4"},bP={key:0,id:"results",class:"absolute bg-white dark:bg-cool-gray-800 px-3 py-1 w-full rounded-md shadow-lg z-50"},yP={key:0,id:"loading",class:"text-center p-2"},wP={key:1,id:"users"},$P={class:"text-xs text-gray-400 dark:text-gray-300 font-extrabold"},PP={class:"flex flex-col"},kP={class:"flex"},MP=["src"],WP={class:"text-sm"},xP={class:"text-gray-700 dark:text-gray-300 font-bold"},_P={class:"text-gray-500 dark:text-gray-500"},DP={class:"flex"},CP=["title","src"],TP={key:0,id:"emptyusers",class:"italic"},jP={key:2,id:"players",class:"mt-5 pb-4"},AP={class:"text-xs text-gray-400 dark:text-gray-300 font-extrabold"},SP={class:"flex flex-col"},zP={class:"flex items-center"},EP=["src"],NP={class:"text-sm"},FP={class:"text-gray-700 dark:text-gray-300 font-bold"},RP={class:"flex space-x-2"},LP=["src","alt","title"],HP=["title","src"],OP={key:0,id:"emptyplayers",class:"italic"};function VP(a,e,t,r,n,i){const u=X("MagnifyingGlassIcon"),l=X("inertia-link"),m=X("icon"),c=Ba("tippy");return p(),y("div",vP,[f("form",{onSubmit:e[2]||(e[2]=Xa((...h)=>i.performSearch&&i.performSearch(...h),["prevent"]))},[De(f("input",{"onUpdate:modelValue":e[0]||(e[0]=h=>n.searchString=h),"aria-label":"search",class:te(["border-none bg-gray-200 dark:bg-cool-gray-900 h-10 px-5 pr-10 focus:w-80 rounded-full text-sm focus:outline-none focus:ring-0",{"w-80":n.showResults}]),type:"search",name:"search",placeholder:a.__("Search")+"..",autocomplete:"off",onInput:e[1]||(e[1]=(...h)=>i.performSearch&&i.performSearch(...h))},null,42,gP),[[du,n.searchString]]),f("button",pP,[x(u,{class:"text-gray-400 dark:text-gray-600 h-4 w-4 stroke-2"})])],32),n.showResults&&n.searchString?(p(),y("div",bP,[n.loading?(p(),y("div",yP,k(a.__("Loading"))+"... ",1)):W("",!0),n.loading?W("",!0):(p(),y("div",wP,[f("span",$P,k(a.__("USERS")),1),f("div",PP,[(p(!0),y(ue,null,we(n.usersList,h=>(p(),B(l,{id:"user",key:h.username,as:"div",href:a.route("user.public.get",h.username),class:"flex px-2 py-1 justify-between hover:bg-light-blue-100 dark:hover:bg-cool-gray-900 rounded cursor-pointer"},{default:F(()=>[f("div",kP,[f("img",{class:"mr-3 w-10 h-10 rounded-full",src:h.profile_photo_url,alt:"Image"},null,8,MP),f("div",WP,[f("p",xP,k(h.title),1),f("p",_P," @"+k(h.username),1)])]),f("div",DP,[De(f("img",{title:h.country.name,src:h.country.photo_path,alt:"",class:"h-8 w-8 -mt-0.5 focus:outline-none"},null,8,CP),[[c]])])]),_:2},1032,["href"]))),128))]),!n.usersList||n.usersList.length<=0?(p(),y("div",TP,k(a.__("No users found.")),1)):W("",!0)])),n.loading?W("",!0):(p(),y("div",jP,[f("span",AP,k(a.__("PLAYERS")),1),f("div",SP,[(p(!0),y(ue,null,we(n.playersList,h=>(p(),B(l,{id:"player",key:h.uuid,as:"div",href:a.route("player.show",h.uuid),class:"flex justify-between px-2 py-1 hover:bg-light-blue-100 dark:hover:bg-cool-gray-900 rounded cursor-pointer"},{default:F(()=>[f("div",zP,[f("img",{class:"mr-3 w-8 h-8",src:h.avatar_url,alt:"Avatar"},null,8,EP),f("div",NP,[f("p",FP,k(h.title),1)])]),f("div",RP,[De(x(m,{class:"w-8 h-8 focus:outline-none",name:`rating-${h.rating}`,content:h.rating},null,8,["name","content"]),[[pt,h.rating!=null],[c]]),De(f("img",{src:h.rank.photo_path,alt:h.rank.name,title:h.rank.name,class:"h-8 w-8 focus:outline-none"},null,8,LP),[[pt,h.rank.photo_path],[c]]),De(f("img",{title:h.country.name,src:h.country.photo_path,alt:"",class:"h-8 w-8 -mt-0.5 focus:outline-none"},null,8,HP),[[c]])])]),_:2},1032,["href"]))),128))]),!n.playersList||n.playersList.length<=0?(p(),y("div",OP,k(a.__("No players found.")),1)):W("",!0)]))])):W("",!0)])}const ws=Se(fP,[["render",VP]]),IP={name:"ColorThemeToggle",components:{MoonIcon:cP,SunIcon:hP},data(){return{colorMode:window.colorMode}},methods:{toggleTheme(){this.colorMode==="dark"?(this.colorMode="light",window.colorMode="light",localStorage.theme="light",document.documentElement.classList.add("light"),document.documentElement.classList.remove("dark")):(this.colorMode="dark",window.colorMode="dark",localStorage.theme="dark",document.documentElement.classList.add("dark"),document.documentElement.classList.remove("light")),window.location.reload()}}},XP=["title"],BP=["title"];function GP(a,e,t,r,n,i){const u=X("MoonIcon"),l=X("SunIcon"),m=Ba("tippy");return p(),y("div",null,[f("button",{onClick:e[0]||(e[0]=(...c)=>i.toggleTheme&&i.toggleTheme(...c))},[n.colorMode==="dark"?De((p(),y("span",{key:0,title:a.__("Use Light Theme")},[x(u,{class:"w-5 h-5 text-gray-400 focus:outline-none stroke-2"})],8,XP)),[[m]]):De((p(),y("span",{key:1,title:a.__("Use Dark Theme")},[x(l,{class:"w-6 h-6 text-gray-400 focus:outline-none stroke-2"})],8,BP)),[[m]])])])}const $s=Se(IP,[["render",GP]]),qP={computed:{logo(){return window.colorMode==="light"?this.$page.props.generalSettings.site_header_logo_path_light:this.$page.props.generalSettings.site_header_logo_path_dark}}},YP=["src"];function UP(a,e,t,r,n,i){return p(),y("img",{src:i.logo,alt:"Site Header Logo",class:"logo"},null,8,YP)}const $r=Se(qP,[["render",UP]]),QP={class:"flex items-center flex-shrink-0"},KP={__name:"AppLogoMark",props:{canShowAdminSidebar:{type:Boolean,default:!1}},setup(a){return(e,t)=>{const r=X("InertiaLink"),n=Ba("tippy");return p(),y("div",QP,[x(r,{href:e.route("home")},{default:F(()=>[x($r,{class:"block w-auto h-9"})]),_:1},8,["href"]),a.canShowAdminSidebar&&!e.route().current("admin.*")?De((p(),B(r,{key:0,title:e.__("Administration Section"),"aria-label":"Open Menu",class:"ml-2 focus:outline-none",href:e.route("admin.dashboard")},{default:F(()=>[x(q,{name:"cog",class:"w-6 h-6 text-gray-400 dark:text-gray-500 hover:animate-spin"})]),_:1},8,["title","href"])),[[n]]):W("",!0)])}}},JP=["href"],Si={__name:"NavLink",props:{href:String,active:Boolean,openInNewTab:{type:Boolean,default:!1}},setup(a){const e=a,t=je(()=>e.active?"inline-flex items-center px-1 pt-1 border-b-2 border-light-blue-400 text-sm leading-5 text-gray-900 dark:text-gray-200 focus:outline-none focus:border-light-blue-700 transition duration-150 ease-in-out":"inline-flex items-center px-1 pt-1 border-b-2 border-transparent text-sm leading-5 text-gray-500 dark:text-gray-400 hover:text-gray-700 dark:hover:text-gray-200 hover:border-gray-300 focus:outline-none focus:text-gray-700 dark:focus:text-gray-300 focus:border-gray-300 transition duration-150 ease-in-out");return(r,n)=>{const i=X("InertiaLink");return a.openInNewTab?(p(),y("a",{key:1,target:"_blank",href:a.href,class:te(t.value)},[Ce(r.$slots,"default")],10,JP)):(p(),B(i,{key:0,href:a.href,class:te(t.value)},{default:F(()=>[Ce(r.$slots,"default")]),_:3},8,["href","class"]))}}},ZP={class:"relative"},Et={__name:"Dropdown",props:{align:{type:String,default:"right"},width:{type:String,default:"48"},contentClasses:{type:Array,default:()=>["py-1","bg-white"]}},setup(a){const e=a;let t=jr(!1);const r=u=>{t.value&&u.key==="Escape"&&(t.value=!1)};_o(()=>document.addEventListener("keydown",r)),lu(()=>document.removeEventListener("keydown",r));const n=je(()=>({48:"w-48"})[e.width.toString()]),i=je(()=>e.align==="left"?"origin-top-left left-0":e.align==="right"?"origin-top-right right-0":"origin-top");return(u,l)=>(p(),y("div",ZP,[f("div",{onClick:l[0]||(l[0]=m=>Dn(t)?t.value=!_(t):t=!_(t))},[Ce(u.$slots,"trigger")]),De(f("div",{class:"fixed inset-0 z-40",onClick:l[1]||(l[1]=m=>Dn(t)?t.value=!1:t=!1)},null,512),[[pt,_(t)]]),x(mu,{"enter-active-class":"transition ease-out duration-200","enter-from-class":"transform opacity-0 scale-95","enter-to-class":"transform opacity-100 scale-100","leave-active-class":"transition ease-in duration-75","leave-from-class":"transform opacity-100 scale-100","leave-to-class":"transform opacity-0 scale-95"},{default:F(()=>[De(f("div",{class:te(["absolute z-50 mt-2 rounded-md shadow-lg",[n.value,i.value]]),style:{display:"none"}},[f("div",{class:te(["rounded-md ring-1 ring-black ring-opacity-5 dark:bg-gray-800",a.contentClasses])},[Ce(u.$slots,"content")],2)],2),[[pt,_(t)]])]),_:3})]))}},ek=["href"],Qe={__name:"DropdownLink",props:{href:String,as:String,btnClass:String,openInNewTab:{type:Boolean,default:!1}},setup(a){return(e,t)=>{const r=X("InertiaLink");return p(),y("div",null,[a.as=="button"?(p(),y("button",{key:0,type:"submit",class:te(["block w-full px-4 py-2 text-sm leading-5 text-gray-700 dark:text-gray-400 text-left hover:bg-cool-gray-100 dark:hover:bg-cool-gray-900 focus:outline-none focus:bg-cool-gray-100 dark:focus:bg-cool-gray-900 transition duration-150 ease-in-out",a.btnClass])},[Ce(e.$slots,"default")],2)):a.as!="button"&&!a.openInNewTab?(p(),B(r,{key:1,href:a.href,class:te(["block px-4 py-2 text-sm leading-5 text-gray-700 dark:text-gray-400 hover:bg-cool-gray-100 dark:hover:bg-cool-gray-900 focus:outline-none focus:bg-cool-gray-100 dark:focus:bg-cool-gray-900 transition duration-150 ease-in-out",a.btnClass])},{default:F(()=>[Ce(e.$slots,"default")]),_:3},8,["href","class"])):(p(),y("a",{key:2,target:"_blank",href:a.href,class:te(["block px-4 py-2 text-sm leading-5 text-gray-700 dark:text-gray-400 hover:bg-cool-gray-100 dark:hover:bg-cool-gray-900 focus:outline-none focus:bg-cool-gray-100 dark:focus:bg-cool-gray-900 transition duration-150 ease-in-out",a.btnClass])},[Ce(e.$slots,"default")],10,ek))])}}},ak={components:{JetDropdown:Et,JetDropdownLink:Qe},props:{title:{type:String,required:!0},items:{type:Array,required:!0}}},tk={class:"inline-flex items-center px-1 pt-1 text-sm leading-5 text-gray-500 transition duration-150 ease-in-out border-b-2 border-transparent hover:border-gray-300 focus:outline-none focus:text-gray-700 focus:border-gray-300"},rk={class:"inline-flex rounded-md"},nk={type:"button",class:"inline-flex items-center py-2 text-sm font-semibold leading-4 text-gray-500 transition duration-150 ease-in-out border border-transparent rounded-md dark:text-gray-400 hover:text-gray-700 dark:hover:text-gray-200 focus:outline-none"},ik=f("svg",{class:"ml-2 -mr-0.5 h-4 w-4",xmlns:"http://www.w3.org/2000/svg",viewBox:"0 0 20 20",fill:"currentColor"},[f("path",{"fill-rule":"evenodd",d:"M5.293 7.293a1 1 0 011.414 0L10 10.586l3.293-3.293a1 1 0 111.414 1.414l-4 4a1 1 0 01-1.414 0l-4-4a1 1 0 010-1.414z","clip-rule":"evenodd"})],-1);function ok(a,e,t,r,n,i){const u=X("jet-dropdown-link"),l=X("jet-dropdown");return p(),y("div",tk,[x(l,{align:"right",width:"48"},{trigger:F(()=>[f("span",rk,[f("button",nk,[I(k(a.__(t.title))+" ",1),ik])])]),content:F(()=>[(p(!0),y(ue,null,we(t.items,m=>(p(),B(u,{key:m.key,class:"text-sm",href:a.route(m.route,m.route_params??null),"open-in-new-tab":m.is_open_in_new_tab},{default:F(()=>[I(k(a.__(m.title)),1)]),_:2},1032,["href","open-in-new-tab"]))),128))]),_:1})])}const sk=Se(ak,[["render",ok]]);function uk(a,e){for(var t in e)e.hasOwnProperty(t)&&a[t]===void 0&&(a[t]=e[t]);return a}function dk(a,e,t){var r;return a.length>e&&(t==null?(t="…",r=3):r=t.length,a=a.substring(0,e-r)+t),a}function zi(a,e){if(Array.prototype.indexOf)return a.indexOf(e);for(var t=0,r=a.length;t=0;t--)e(a[t])===!0&&a.splice(t,1)}function lk(a,e){if(!e.global)throw new Error("`splitRegex` must have the 'g' flag set");for(var t=[],r=0,n;n=e.exec(a);)t.push(a.substring(r,n.index)),t.push(n[0]),r=n.index+n[0].length;return t.push(a.substring(r)),t}function Ps(a){throw new Error("Unhandled case for value: '".concat(a,"'"))}var Pr=function(){function a(e){e===void 0&&(e={}),this.tagName="",this.attrs={},this.innerHTML="",this.whitespaceRegex=/\s+/,this.tagName=e.tagName||"",this.attrs=e.attrs||{},this.innerHTML=e.innerHtml||e.innerHTML||""}return a.prototype.setTagName=function(e){return this.tagName=e,this},a.prototype.getTagName=function(){return this.tagName||""},a.prototype.setAttr=function(e,t){var r=this.getAttrs();return r[e]=t,this},a.prototype.getAttr=function(e){return this.getAttrs()[e]},a.prototype.setAttrs=function(e){return Object.assign(this.getAttrs(),e),this},a.prototype.getAttrs=function(){return this.attrs||(this.attrs={})},a.prototype.setClass=function(e){return this.setAttr("class",e)},a.prototype.addClass=function(e){for(var t=this.getClass(),r=this.whitespaceRegex,n=t?t.split(r):[],i=e.split(r),u;u=i.shift();)zi(n,u)===-1&&n.push(u);return this.getAttrs().class=n.join(" "),this},a.prototype.removeClass=function(e){for(var t=this.getClass(),r=this.whitespaceRegex,n=t?t.split(r):[],i=e.split(r),u;n.length&&(u=i.shift());){var l=zi(n,u);l!==-1&&n.splice(l,1)}return this.getAttrs().class=n.join(" "),this},a.prototype.getClass=function(){return this.getAttrs().class||""},a.prototype.hasClass=function(e){return(" "+this.getClass()+" ").indexOf(" "+e+" ")!==-1},a.prototype.setInnerHTML=function(e){return this.innerHTML=e,this},a.prototype.setInnerHtml=function(e){return this.setInnerHTML(e)},a.prototype.getInnerHTML=function(){return this.innerHTML||""},a.prototype.getInnerHtml=function(){return this.getInnerHTML()},a.prototype.toAnchorString=function(){var e=this.getTagName(),t=this.buildAttrsStr();return t=t?" "+t:"",["<",e,t,">",this.getInnerHtml(),""].join("")},a.prototype.buildAttrsStr=function(){if(!this.attrs)return"";var e=this.getAttrs(),t=[];for(var r in e)e.hasOwnProperty(r)&&t.push(r+'="'+e[r]+'"');return t.join(" ")},a}();function mk(a,e,t){var r,n;t==null?(t="…",n=3,r=8):(n=t.length,r=t.length);var i=function(C){var S={},N=C,L=N.match(/^([a-z]+):\/\//i);return L&&(S.scheme=L[1],N=N.substr(L[0].length)),L=N.match(/^(.*?)(?=(\?|#|\/|$))/i),L&&(S.host=L[1],N=N.substr(L[0].length)),L=N.match(/^\/(.*?)(?=(\?|#|$))/i),L&&(S.path=L[1],N=N.substr(L[0].length)),L=N.match(/^\?(.*?)(?=(#|$))/i),L&&(S.query=L[1],N=N.substr(L[0].length)),L=N.match(/^#(.*?)$/i),L&&(S.fragment=L[1]),S},u=function(C){var S="";return C.scheme&&C.host&&(S+=C.scheme+"://"),C.host&&(S+=C.host),C.path&&(S+="/"+C.path),C.query&&(S+="?"+C.query),C.fragment&&(S+="#"+C.fragment),S},l=function(C,S){var N=S/2,L=Math.ceil(N),j=-1*Math.floor(N),O="";return j<0&&(O=C.substr(j)),C.substr(0,L)+t+O};if(a.length<=e)return a;var m=e-n,c=i(a);if(c.query){var h=c.query.match(/^(.*?)(?=(\?|\#))(.*?)$/i);h&&(c.query=c.query.substr(0,h[1].length),a=u(c))}if(a.length<=e||(c.host&&(c.host=c.host.replace(/^www\./,""),a=u(c)),a.length<=e))return a;var b="";if(c.host&&(b+=c.host),b.length>=m)return c.host.length==e?(c.host.substr(0,e-n)+t).substr(0,m+r):l(b,m).substr(0,m+r);var g="";if(c.path&&(g+="/"+c.path),c.query&&(g+="?"+c.query),g)if((b+g).length>=m){if((b+g).length==e)return(b+g).substr(0,e);var w=m-b.length;return(b+l(g,w)).substr(0,m+r)}else b+=g;if(c.fragment){var T="#"+c.fragment;if((b+T).length>=m){if((b+T).length==e)return(b+T).substr(0,e);var R=m-b.length;return(b+l(T,R)).substr(0,m+r)}else b+=T}if(c.scheme&&c.host){var H=c.scheme+"://";if((b+H).length0&&(E=b.substr(-1*Math.floor(m/2))),(b.substr(0,Math.ceil(m/2))+t+E).substr(0,m+r)}function ck(a,e,t){if(a.length<=e)return a;var r,n;t==null?(t="…",r=8,n=3):(r=t.length,n=t.length);var i=e-n,u="";return i>0&&(u=a.substr(-1*Math.floor(i/2))),(a.substr(0,Math.ceil(i/2))+t+u).substr(0,i+r)}function hk(a,e,t){return dk(a,e,t)}var Ei=function(){function a(e){e===void 0&&(e={}),this.newWindow=!1,this.truncate={},this.className="",this.newWindow=e.newWindow||!1,this.truncate=e.truncate||{},this.className=e.className||""}return a.prototype.build=function(e){return new Pr({tagName:"a",attrs:this.createAttrs(e),innerHtml:this.processAnchorText(e.getAnchorText())})},a.prototype.createAttrs=function(e){var t={href:e.getAnchorHref()},r=this.createCssClass(e);return r&&(t.class=r),this.newWindow&&(t.target="_blank",t.rel="noopener noreferrer"),this.truncate&&this.truncate.length&&this.truncate.length-1},a.isValidUriScheme=function(e){var t=e.match(this.uriSchemeRegex),r=t&&t[0].toLowerCase();return r!=="javascript:"&&r!=="vbscript:"},a.urlMatchDoesNotHaveProtocolOrDot=function(e,t){return!!e&&(!t||!this.hasFullProtocolRegex.test(t))&&e.indexOf(".")===-1},a.urlMatchDoesNotHaveAtLeastOneWordChar=function(e,t){return e&&t?!this.hasFullProtocolRegex.test(t)&&!this.hasWordCharAfterProtocolRegex.test(e):!1},a.hasFullProtocolRegex=/^[A-Za-z][-.+A-Za-z0-9]*:\/\//,a.uriSchemeRegex=/^[A-Za-z][-.+A-Za-z0-9]*:/,a.hasWordCharAfterProtocolRegex=new RegExp(":[^\\s]*?["+Ds+"]"),a.ipRegex=/[0-9][0-9]?[0-9]?\.[0-9][0-9]?[0-9]?\.[0-9][0-9]?[0-9]?\.[0-9][0-9]?[0-9]?(:[0-9]*)?\/?$/,a}(),Wk=function(){var a=/(?:[A-Za-z][-.+A-Za-z0-9]{0,63}:(?![A-Za-z][-.+A-Za-z0-9]{0,63}:\/\/)(?!\d+\/?)(?:\/\/)?)/,e=/(?:www\.)/,t=new RegExp("[/?#](?:["+Z+"\\-+&@#/%=~_()|'$*\\[\\]{}?!:,.;^✓]*["+Z+"\\-+&@#/%=~_()|'$*\\[\\]{}✓])?");return new RegExp(["(?:","(",a.source,ir(2),")","|","(","(//)?",e.source,ir(6),")","|","(","(//)?",ir(10)+"\\.",Ts.source,"(?![-"+yk+"])",")",")","(?::[0-9]+)?","(?:"+t.source+")?"].join(""),"gi")}(),xk=new RegExp("["+Z+"]"),Ri=function(a){He(e,a);function e(t){var r=a.call(this,t)||this;return r.stripPrefix={scheme:!0,www:!0},r.stripTrailingSlash=!0,r.decodePercentEncoding=!0,r.matcherRegex=Wk,r.wordCharRegExp=xk,r.stripPrefix=t.stripPrefix,r.stripTrailingSlash=t.stripTrailingSlash,r.decodePercentEncoding=t.decodePercentEncoding,r}return e.prototype.parseMatches=function(t){for(var r=this.matcherRegex,n=this.stripPrefix,i=this.stripTrailingSlash,u=this.decodePercentEncoding,l=this.tagBuilder,m=[],c,h=function(){var g=c[0],w=c[1],T=c[4],R=c[5],H=c[9],E=c.index,C=R||H,S=t.charAt(E-1);if(!Mk.isValid(g,w)||E>0&&S==="@"||E>0&&C&&b.wordCharRegExp.test(S))return"continue";if(/\?$/.test(g)&&(g=g.substr(0,g.length-1)),b.matchHasUnbalancedClosingParen(g))g=g.substr(0,g.length-1);else{var N=b.matchHasInvalidCharAfterTld(g,w);N>-1&&(g=g.substr(0,N))}var L=["http://","https://"].find(function(A){return!!w&&w.indexOf(A)!==-1});if(L){var j=g.indexOf(L);g=g.substr(j),w=w.substr(j),E=E+j}var O=w?"scheme":T?"www":"tld",G=!!w;m.push(new _s({tagBuilder:l,matchedText:g,offset:E,urlMatchType:O,url:g,protocolUrlMatch:G,protocolRelativeMatch:!!C,stripPrefix:n,stripTrailingSlash:i,decodePercentEncoding:u}))},b=this;(c=r.exec(t))!==null;)h();return m},e.prototype.matchHasUnbalancedClosingParen=function(t){var r=t.charAt(t.length-1),n;if(r===")")n="(";else if(r==="]")n="[";else if(r==="}")n="{";else return!1;for(var i=0,u=0,l=t.length-1;u"?(g=new Fe(ae(ae({},g),{name:ie()})),Y()):!rr.test($)&&!fk.test($)&&$!==":"&&Pe()}function E($){$===">"?Pe():rr.test($)?h=3:Pe()}function C($){ia.test($)||($==="/"?h=12:$===">"?Y():$==="<"?ke():$==="="||nr.test($)||gk.test($)?Pe():h=5)}function S($){ia.test($)?h=6:$==="/"?h=12:$==="="?h=7:$===">"?Y():$==="<"?ke():nr.test($)&&Pe()}function N($){ia.test($)||($==="/"?h=12:$==="="?h=7:$===">"?Y():$==="<"?ke():nr.test($)?Pe():h=5)}function L($){ia.test($)||($==='"'?h=8:$==="'"?h=9:/[>=`]/.test($)?Pe():$==="<"?ke():h=10)}function j($){$==='"'&&(h=11)}function O($){$==="'"&&(h=11)}function G($){ia.test($)?h=4:$===">"?Y():$==="<"&&ke()}function A($){ia.test($)?h=4:$==="/"?h=12:$===">"?Y():$==="<"?ke():(h=4,Za())}function ee($){$===">"?(g=new Fe(ae(ae({},g),{isClosing:!0})),Y()):h=4}function Ee($){a.substr(m,2)==="--"?(m+=2,g=new Fe(ae(ae({},g),{type:"comment"})),h=14):a.substr(m,7).toUpperCase()==="DOCTYPE"?(m+=7,g=new Fe(ae(ae({},g),{type:"doctype"})),h=20):Pe()}function Ne($){$==="-"?h=15:$===">"?Pe():h=16}function le($){$==="-"?h=18:$===">"?Pe():h=16}function Oe($){$==="-"&&(h=17)}function ne($){$==="-"?h=18:h=16}function _e($){$===">"?Y():$==="!"?h=19:$==="-"||(h=16)}function Ge($){$==="-"?h=17:$===">"?Y():h=16}function Nt($){$===">"?Y():$==="<"&&ke()}function Pe(){h=0,g=l}function ke(){h=1,g=new Fe({idx:m})}function Y(){var $=a.slice(b,g.idx);$&&n($,b),g.type==="comment"?i(g.idx):g.type==="doctype"?u(g.idx):(g.isOpening&&t(g.name,g.idx),g.isClosing&&r(g.name,g.idx)),Pe(),b=m+1}function Ja(){var $=a.slice(b,m);n($,b),b=m+1}function ie(){var $=g.idx+(g.isClosing?2:1);return a.slice($,m).toLowerCase()}function Za(){m--}}var Fe=function(){function a(e){e===void 0&&(e={}),this.idx=e.idx!==void 0?e.idx:-1,this.type=e.type||"tag",this.name=e.name||"",this.isOpening=!!e.isOpening,this.isClosing=!!e.isClosing}return a}(),Rk=function(){function a(e){e===void 0&&(e={}),this.version=a.version,this.urls={},this.email=!0,this.phone=!0,this.hashtag=!1,this.mention=!1,this.newWindow=!0,this.stripPrefix={scheme:!0,www:!0},this.stripTrailingSlash=!0,this.decodePercentEncoding=!0,this.truncate={length:0,location:"end"},this.className="",this.replaceFn=null,this.context=void 0,this.sanitizeHtml=!1,this.matchers=null,this.tagBuilder=null,this.urls=this.normalizeUrlsCfg(e.urls),this.email=typeof e.email=="boolean"?e.email:this.email,this.phone=typeof e.phone=="boolean"?e.phone:this.phone,this.hashtag=e.hashtag||this.hashtag,this.mention=e.mention||this.mention,this.newWindow=typeof e.newWindow=="boolean"?e.newWindow:this.newWindow,this.stripPrefix=this.normalizeStripPrefixCfg(e.stripPrefix),this.stripTrailingSlash=typeof e.stripTrailingSlash=="boolean"?e.stripTrailingSlash:this.stripTrailingSlash,this.decodePercentEncoding=typeof e.decodePercentEncoding=="boolean"?e.decodePercentEncoding:this.decodePercentEncoding,this.sanitizeHtml=e.sanitizeHtml||!1;var t=this.mention;if(t!==!1&&["twitter","instagram","soundcloud","tiktok"].indexOf(t)===-1)throw new Error("invalid `mention` cfg '".concat(t,"' - see docs"));var r=this.hashtag;if(r!==!1&&["twitter","facebook","instagram","tiktok"].indexOf(r)===-1)throw new Error("invalid `hashtag` cfg '".concat(r,"' - see docs"));this.truncate=this.normalizeTruncateCfg(e.truncate),this.className=e.className||this.className,this.replaceFn=e.replaceFn||this.replaceFn,this.context=e.context||this}return a.link=function(e,t){var r=new a(t);return r.link(e)},a.parse=function(e,t){var r=new a(t);return r.parse(e)},a.prototype.normalizeUrlsCfg=function(e){return e==null&&(e=!0),typeof e=="boolean"?{schemeMatches:e,wwwMatches:e,tldMatches:e}:{schemeMatches:typeof e.schemeMatches=="boolean"?e.schemeMatches:!0,wwwMatches:typeof e.wwwMatches=="boolean"?e.wwwMatches:!0,tldMatches:typeof e.tldMatches=="boolean"?e.tldMatches:!0}},a.prototype.normalizeStripPrefixCfg=function(e){return e==null&&(e=!0),typeof e=="boolean"?{scheme:e,www:e}:{scheme:typeof e.scheme=="boolean"?e.scheme:!0,www:typeof e.www=="boolean"?e.www:!0}},a.prototype.normalizeTruncateCfg=function(e){return typeof e=="number"?{length:e,location:"end"}:uk(e||{},{length:Number.POSITIVE_INFINITY,location:"end"})},a.prototype.parse=function(e){var t=this,r=["a","style","script"],n=0,i=[];return Fk(e,{onOpenTag:function(u){r.indexOf(u)>=0&&n++},onText:function(u,l){if(n===0){var m=/( | |<|<|>|>|"|"|')/gi,c=lk(u,m),h=l;c.forEach(function(b,g){if(g%2===0){var w=t.parseText(b,h);i.push.apply(i,w)}h+=b.length})}},onCloseTag:function(u){r.indexOf(u)>=0&&(n=Math.max(n-1,0))},onComment:function(u){},onDoctype:function(u){}}),i=this.compactMatches(i),i=this.removeUnwantedMatches(i),i},a.prototype.compactMatches=function(e){e.sort(function(m,c){return m.getOffset()-c.getOffset()});for(var t=0;ti?t:t+1;e.splice(l,1);continue}if(e[t+1].getOffset()/g,">"));for(var t=this.parse(e),r=[],n=0,i=0,u=t.length;i"u"||!Reflect.construct||Reflect.construct.sham)return!1;if(typeof Proxy=="function")return!0;try{return Boolean.prototype.valueOf.call(Reflect.construct(Boolean,[],function(){})),!0}catch{return!1}}function ct(a,e,t){return Lk()?ct=Reflect.construct:ct=function(n,i,u){var l=[null];l.push.apply(l,i);var m=Function.bind.apply(n,l),c=new m;return u&&Mr(c,u.prototype),c},ct.apply(null,arguments)}function Te(a){return Hk(a)||Ok(a)||Vk(a)||Ik()}function Hk(a){if(Array.isArray(a))return Wr(a)}function Ok(a){if(typeof Symbol<"u"&&a[Symbol.iterator]!=null||a["@@iterator"]!=null)return Array.from(a)}function Vk(a,e){if(a){if(typeof a=="string")return Wr(a,e);var t=Object.prototype.toString.call(a).slice(8,-1);if(t==="Object"&&a.constructor&&(t=a.constructor.name),t==="Map"||t==="Set")return Array.from(a);if(t==="Arguments"||/^(?:Ui|I)nt(?:8|16|32)(?:Clamped)?Array$/.test(t))return Wr(a,e)}}function Wr(a,e){(e==null||e>a.length)&&(e=a.length);for(var t=0,r=new Array(e);t1?t-1:0),n=1;n/gm),nM=Re(/^data-[\-\w.\u00B7-\uFFFF]/),iM=Re(/^aria-[\-\w]+$/),oM=Re(/^(?:(?:(?:f|ht)tps?|mailto|tel|callto|cid|xmpp):|[^a-z]|[a-z+.\-]+(?:[^a-z+.\-:]|$))/i),sM=Re(/^(?:\w+script|data):/i),uM=Re(/[\u0000-\u0020\u00A0\u1680\u180E\u2000-\u2029\u205F\u3000]/g),dM=Re(/^html$/i),lM=function(){return typeof window>"u"?null:window},mM=function(e,t){if(Ke(e)!=="object"||typeof e.createPolicy!="function")return null;var r=null,n="data-tt-policy-suffix";t.currentScript&&t.currentScript.hasAttribute(n)&&(r=t.currentScript.getAttribute(n));var i="dompurify"+(r?"#"+r:"");try{return e.createPolicy(i,{createHTML:function(l){return l},createScriptURL:function(l){return l}})}catch{return console.warn("TrustedTypes policy "+i+" could not be created."),null}};function As(){var a=arguments.length>0&&arguments[0]!==void 0?arguments[0]:lM(),e=function(v){return As(v)};if(e.version="2.3.10",e.removed=[],!a||!a.document||a.document.nodeType!==9)return e.isSupported=!1,e;var t=a.document,r=a.document,n=a.DocumentFragment,i=a.HTMLTemplateElement,u=a.Node,l=a.Element,m=a.NodeFilter,c=a.NamedNodeMap,h=c===void 0?a.NamedNodeMap||a.MozNamedAttrMap:c,b=a.HTMLFormElement,g=a.DOMParser,w=a.trustedTypes,T=l.prototype,R=dt(T,"cloneNode"),H=dt(T,"nextSibling"),E=dt(T,"childNodes"),C=dt(T,"parentNode");if(typeof i=="function"){var S=r.createElement("template");S.content&&S.content.ownerDocument&&(r=S.content.ownerDocument)}var N=mM(w,t),L=N?N.createHTML(""):"",j=r,O=j.implementation,G=j.createNodeIterator,A=j.createDocumentFragment,ee=j.getElementsByTagName,Ee=t.importNode,Ne={};try{Ne=oa(r).documentMode?r.documentMode:{}}catch{}var le={};e.isSupported=typeof C=="function"&&O&&typeof O.createHTMLDocument<"u"&&Ne!==9;var Oe=tM,ne=rM,_e=nM,Ge=iM,Nt=sM,Pe=uM,ke=oM,Y=null,Ja=V({},[].concat(Te(Xi),Te(sr),Te(ur),Te(dr),Te(Bi))),ie=null,Za=V({},[].concat(Te(Gi),Te(lr),Te(qi),Te(lt))),$=Object.seal(Object.create(null,{tagNameCheck:{writable:!0,configurable:!1,enumerable:!0,value:null},attributeNameCheck:{writable:!0,configurable:!1,enumerable:!0,value:null},allowCustomizedBuiltInElements:{writable:!0,configurable:!1,enumerable:!0,value:!1}})),ja=null,Ft=null,ln=!0,Rt=!0,mn=!1,fa=!1,ra=!1,Lt=!1,Ht=!1,va=!1,et=!1,at=!1,cn=!0,Ot=!0,Aa=!1,ga={},pa=null,hn=V({},["annotation-xml","audio","colgroup","desc","foreignobject","head","iframe","math","mi","mn","mo","ms","mtext","noembed","noframes","noscript","plaintext","script","style","svg","template","thead","title","video","xmp"]),fn=null,vn=V({},["audio","video","img","source","image","track"]),Vt=null,gn=V({},["alt","class","for","id","label","name","pattern","placeholder","role","summary","title","value","style","xmlns"]),It="http://www.w3.org/1998/Math/MathML",Xt="http://www.w3.org/2000/svg",qe="http://www.w3.org/1999/xhtml",tt=qe,Bt=!1,ba,au=["application/xhtml+xml","text/html"],tu="text/html",se,ya=null,ru=r.createElement("form"),pn=function(v){return v instanceof RegExp||v instanceof Function},Gt=function(v){ya&&ya===v||((!v||Ke(v)!=="object")&&(v={}),v=oa(v),ba=au.indexOf(v.PARSER_MEDIA_TYPE)===-1?ba=tu:ba=v.PARSER_MEDIA_TYPE,se=ba==="application/xhtml+xml"?function(P){return P}:ht,Y="ALLOWED_TAGS"in v?V({},v.ALLOWED_TAGS,se):Ja,ie="ALLOWED_ATTR"in v?V({},v.ALLOWED_ATTR,se):Za,Vt="ADD_URI_SAFE_ATTR"in v?V(oa(gn),v.ADD_URI_SAFE_ATTR,se):gn,fn="ADD_DATA_URI_TAGS"in v?V(oa(vn),v.ADD_DATA_URI_TAGS,se):vn,pa="FORBID_CONTENTS"in v?V({},v.FORBID_CONTENTS,se):hn,ja="FORBID_TAGS"in v?V({},v.FORBID_TAGS,se):{},Ft="FORBID_ATTR"in v?V({},v.FORBID_ATTR,se):{},ga="USE_PROFILES"in v?v.USE_PROFILES:!1,ln=v.ALLOW_ARIA_ATTR!==!1,Rt=v.ALLOW_DATA_ATTR!==!1,mn=v.ALLOW_UNKNOWN_PROTOCOLS||!1,fa=v.SAFE_FOR_TEMPLATES||!1,ra=v.WHOLE_DOCUMENT||!1,va=v.RETURN_DOM||!1,et=v.RETURN_DOM_FRAGMENT||!1,at=v.RETURN_TRUSTED_TYPE||!1,Ht=v.FORCE_BODY||!1,cn=v.SANITIZE_DOM!==!1,Ot=v.KEEP_CONTENT!==!1,Aa=v.IN_PLACE||!1,ke=v.ALLOWED_URI_REGEXP||ke,tt=v.NAMESPACE||qe,v.CUSTOM_ELEMENT_HANDLING&&pn(v.CUSTOM_ELEMENT_HANDLING.tagNameCheck)&&($.tagNameCheck=v.CUSTOM_ELEMENT_HANDLING.tagNameCheck),v.CUSTOM_ELEMENT_HANDLING&&pn(v.CUSTOM_ELEMENT_HANDLING.attributeNameCheck)&&($.attributeNameCheck=v.CUSTOM_ELEMENT_HANDLING.attributeNameCheck),v.CUSTOM_ELEMENT_HANDLING&&typeof v.CUSTOM_ELEMENT_HANDLING.allowCustomizedBuiltInElements=="boolean"&&($.allowCustomizedBuiltInElements=v.CUSTOM_ELEMENT_HANDLING.allowCustomizedBuiltInElements),fa&&(Rt=!1),et&&(va=!0),ga&&(Y=V({},Te(Bi)),ie=[],ga.html===!0&&(V(Y,Xi),V(ie,Gi)),ga.svg===!0&&(V(Y,sr),V(ie,lr),V(ie,lt)),ga.svgFilters===!0&&(V(Y,ur),V(ie,lr),V(ie,lt)),ga.mathMl===!0&&(V(Y,dr),V(ie,qi),V(ie,lt))),v.ADD_TAGS&&(Y===Ja&&(Y=oa(Y)),V(Y,v.ADD_TAGS,se)),v.ADD_ATTR&&(ie===Za&&(ie=oa(ie)),V(ie,v.ADD_ATTR,se)),v.ADD_URI_SAFE_ATTR&&V(Vt,v.ADD_URI_SAFE_ATTR,se),v.FORBID_CONTENTS&&(pa===hn&&(pa=oa(pa)),V(pa,v.FORBID_CONTENTS,se)),Ot&&(Y["#text"]=!0),ra&&V(Y,["html","head","body"]),Y.table&&(V(Y,["tbody"]),delete ja.tbody),$e&&$e(v),ya=v)},bn=V({},["mi","mo","mn","ms","mtext"]),yn=V({},["foreignobject","desc","title","annotation-xml"]),nu=V({},["title","style","font","a","script"]),rt=V({},sr);V(rt,ur),V(rt,eM);var qt=V({},dr);V(qt,aM);var iu=function(v){var P=C(v);(!P||!P.tagName)&&(P={namespaceURI:qe,tagName:"template"});var D=ht(v.tagName),U=ht(P.tagName);return v.namespaceURI===Xt?P.namespaceURI===qe?D==="svg":P.namespaceURI===It?D==="svg"&&(U==="annotation-xml"||bn[U]):!!rt[D]:v.namespaceURI===It?P.namespaceURI===qe?D==="math":P.namespaceURI===Xt?D==="math"&&yn[U]:!!qt[D]:v.namespaceURI===qe?P.namespaceURI===Xt&&!yn[U]||P.namespaceURI===It&&!bn[U]?!1:!qt[D]&&(nu[D]||!rt[D]):!1},Ve=function(v){Na(e.removed,{element:v});try{v.parentNode.removeChild(v)}catch{try{v.outerHTML=L}catch{v.remove()}}},wn=function(v,P){try{Na(e.removed,{attribute:P.getAttributeNode(v),from:P})}catch{Na(e.removed,{attribute:null,from:P})}if(P.removeAttribute(v),v==="is"&&!ie[v])if(va||et)try{Ve(P)}catch{}else try{P.setAttribute(v,"")}catch{}},$n=function(v){var P,D;if(Ht)v=""+v;else{var U=Qk(v,/^[\r\n\t ]+/);D=U&&U[0]}ba==="application/xhtml+xml"&&(v=''+v+"");var Me=N?N.createHTML(v):v;if(tt===qe)try{P=new g().parseFromString(Me,ba)}catch{}if(!P||!P.documentElement){P=O.createDocument(tt,"template",null);try{P.documentElement.innerHTML=Bt?"":Me}catch{}}var me=P.body||P.documentElement;return v&&D&&me.insertBefore(r.createTextNode(D),me.childNodes[0]||null),tt===qe?ee.call(P,ra?"html":"body")[0]:ra?P.documentElement:me},Pn=function(v){return G.call(v.ownerDocument||v,v,m.SHOW_ELEMENT|m.SHOW_COMMENT|m.SHOW_TEXT,null,!1)},ou=function(v){return v instanceof b&&(typeof v.nodeName!="string"||typeof v.textContent!="string"||typeof v.removeChild!="function"||!(v.attributes instanceof h)||typeof v.removeAttribute!="function"||typeof v.setAttribute!="function"||typeof v.namespaceURI!="string"||typeof v.insertBefore!="function")},Sa=function(v){return Ke(u)==="object"?v instanceof u:v&&Ke(v)==="object"&&typeof v.nodeType=="number"&&typeof v.nodeName=="string"},Ie=function(v,P,D){le[v]&&Uk(le[v],function(U){U.call(e,P,D,ya)})},kn=function(v){var P;if(Ie("beforeSanitizeElements",v,null),ou(v)||he(/[\u0080-\uFFFF]/,v.nodeName))return Ve(v),!0;var D=se(v.nodeName);if(Ie("uponSanitizeElement",v,{tagName:D,allowedTags:Y}),v.hasChildNodes()&&!Sa(v.firstElementChild)&&(!Sa(v.content)||!Sa(v.content.firstElementChild))&&he(/<[/\w]/g,v.innerHTML)&&he(/<[/\w]/g,v.textContent)||D==="select"&&he(/