import { fetchActiveServers, fetchOnlinePlayers, Server } from '../api'; /** * Проверяет, находится ли указанный игрок онлайн на любом из серверов * @param username Имя игрока для проверки * @returns {Promise} true, если игрок онлайн хотя бы на одном сервере */ export async function isPlayerOnline(username: string): Promise { try { console.log('Начинаем проверку статуса для:', username); // Получаем список активных серверов (теперь это массив) const servers = await fetchActiveServers(); console.log('Ответ API активных серверов:', servers); // Фильтруем серверы с игроками const serversWithPlayers = servers.filter( (server) => server.online_players > 0, ); // Если нет серверов с игроками, игрок точно не онлайн if (serversWithPlayers.length === 0) { return false; } // Проверяем каждый сервер на наличие игрока const checkPromises = serversWithPlayers.map(async (server) => { try { const onlinePlayers = await fetchOnlinePlayers(server.id); // Проверяем, есть ли игрок с указанным именем в списке // Предполагая, что онлайн игроки хранятся в массиве online_players return ( Array.isArray(onlinePlayers.online_players) && onlinePlayers.online_players.some( (player) => player.username === username, ) ); } catch (error) { console.error(`Ошибка при проверке сервера ${server.id}:`, error); return false; } }); // Ожидаем результаты всех проверок const results = await Promise.all(checkPromises); // Игрок онлайн, если хотя бы одна проверка вернула true return results.some((result) => result); } catch (error) { console.error('Ошибка при проверке онлайн-статуса игрока:', error); return false; // В случае ошибки считаем, что игрок не онлайн } } /** * Проверяет, находится ли указанный игрок онлайн на конкретном сервере * @param username Имя игрока для проверки * @param serverId ID сервера для проверки * @returns {Promise} true, если игрок онлайн на указанном сервере */ export async function isPlayerOnlineOnServer( username: string, serverId: string, ): Promise { try { const onlinePlayers = await fetchOnlinePlayers(serverId); return ( Array.isArray(onlinePlayers.online_players) && onlinePlayers.online_players.some( (player) => player.username === username, ) ); } catch (error) { console.error(`Ошибка при проверке игрока на сервере ${serverId}:`, error); 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 }; } }