add: marketplace

This commit is contained in:
2025-07-19 04:40:46 +05:00
parent c39a8bc43c
commit 6ee1b67315
6 changed files with 1081 additions and 39 deletions

View File

@ -1,4 +1,4 @@
import { fetchActiveServers, fetchOnlinePlayers } from '../api';
import { fetchActiveServers, fetchOnlinePlayers, Server } from '../api';
/**
* Проверяет, находится ли указанный игрок онлайн на любом из серверов
@ -77,3 +77,52 @@ export async function isPlayerOnlineOnServer(
return false;
}
}
/**
* Проверяет, на каком сервере находится игрок
* @param username Имя игрока для проверки
* @returns Объект с информацией: онлайн ли игрок и на каком сервере
*/
export async function getPlayerServer(
username: string,
): Promise<{ online: boolean; server: Server | null }> {
try {
// Получаем список активных серверов
const servers = await fetchActiveServers();
// Фильтруем серверы с игроками
const serversWithPlayers = servers.filter(
(server) => server.online_players > 0,
);
// Если нет серверов с игроками, игрок точно не онлайн
if (serversWithPlayers.length === 0) {
return { online: false, server: null };
}
// Проверяем каждый сервер на наличие игрока
for (const server of serversWithPlayers) {
try {
const onlinePlayers = await fetchOnlinePlayers(server.id);
if (
Array.isArray(onlinePlayers.online_players) &&
onlinePlayers.online_players.some(
(player) => player.username === username,
)
) {
// Игрок найден на этом сервере
return { online: true, server };
}
} catch (error) {
console.error(`Ошибка при проверке сервера ${server.id}:`, error);
}
}
// Игрок не найден ни на одном сервере
return { online: false, server: null };
} catch (error) {
console.error('Ошибка при проверке сервера игрока:', error);
return { online: false, server: null };
}
}