[TS3 PHP Framework] Pobieranie listy klientów, działamy!

Poradniki
ts3
Jebanany
Jebanany

Pobieranie listy klientów

W tym poradniku zobaczycie w jaki sposób pobierać listę klientów, czym ona jest i dlaczego nie zawsze nam ona zadziała...

// Pobieramy klientów z serwera
$clients = $ts->clientList();

W poprzednim poradniku była mowa o błędach w php. Warto już teraz nauczyć się korzystać z bloków try/catch. Kod po pewnej modyfikacji wyglądałby tak:

// Pobieramy klientów z serwera
try{
	$clients = $ts->clientList();
}
catch(Exception $e){
	// Przypiszmy błąd do $e 
	// Wyświetlmy kod błędu oraz jego treść
	echo 'Nie udało pobrać się listy klientów | Kod błędu: '.$e->getCode().' oraz treść błędu: '.$e->getMessage().'';
}

Teraz, gdy nie uda nam się pobrać listy klientów, skrypt nie zatrzyma się, ale wyświetli błąd, który wystąpił. Przy pobieranie klientów, kanałów - takie błędy (jeśli będą się w ogóle zdarzać) będą zazwyczaj spowodowane utratą połączenia z serwerem.

Mam listę klientów, ale jak to?

Każdy klient jest obiektem, możemy wykonywać na nim odpowiednie funkcje, a dzięki złożoności funkcjonalności tego frameworka mamy do dyspozycji na prawdę potężne narzędzia.

Od teraz $clients jest tablicą z obiektami, którymi są użytkownicy, co oznacza, że możemy wykonać funkcję foreach().

// Wyświetlanie listy klientów.
foreach($clients as $client){
	echo $client['client_nickname']."\n";
}

Powyższy skrypt wyświetli nam listę klientów posortowanych client_id.

Do czego mam dostęp? Co mogę wyświetlić?

Zastanawiacie się zapewne, skąd mamy mieć pojęcie jakich możemy użyć danych? Co takiego możemy wykorzystać? Możemy to sprawdzić za pomocą funkcji getInfo(). Pozwala ona na wyświetlenie wszystkich dostępnych informacji o danym obiekcie. Np:

// Pobieramy pierwszego klienta z brzegu
reset($clients);
$user = current($clients);
 
// Wyświetlamy o nim informacje
var_dump(array_keys($user->getInfo()));

Skrypt zwróci:

    [0] => clid
    [1] => cid
    [2] => client_database_id
    [3] => client_nickname
    [4] => client_type
    [5] => client_away
    [6] => client_away_message
    [7] => client_flag_talking
    [8] => client_input_muted
    [9] => client_output_muted
    [10] => client_input_hardware
    [11] => client_output_hardware
    [12] => client_talk_power
    [13] => client_is_talker
    [14] => client_is_priority_speaker
    [15] => client_is_recording
    [16] => client_is_channel_commander
    [17] => client_unique_identifier
    [18] => client_servergroups
    [19] => client_channel_group_id
    [20] => client_channel_group_inherited_channel_id
    [21] => client_version
    [22] => client_platform
    [23] => client_idle_time
    [24] => client_created
    [25] => client_lastconnected
    [26] => client_icon_id
    [27] => client_country
    [28] => connection_client_ip
    [29] => client_badges
    [30] => client_outputonly_muted
    [31] => client_default_channel
    [32] => client_meta_data
    [33] => client_version_sign
    [34] => client_security_hash
    [35] => client_login_name
    [36] => client_totalconnections
    [37] => client_flag_avatar
    [38] => client_talk_request
    [39] => client_talk_request_msg
    [40] => client_description
    [41] => client_month_bytes_uploaded
    [42] => client_month_bytes_downloaded
    [43] => client_total_bytes_uploaded
    [44] => client_total_bytes_downloaded
    [45] => client_nickname_phonetic
    [46] => client_needed_serverquery_view_power
    [47] => client_default_token
    [48] => client_base64HashClientUID
    [49] => connection_filetransfer_bandwidth_sent
    [50] => connection_filetransfer_bandwidth_received
    [51] => connection_packets_sent_total
    [52] => connection_bytes_sent_total
    [53] => connection_packets_received_total
    [54] => connection_bytes_received_total
    [55] => connection_bandwidth_sent_last_second_total
    [56] => connection_bandwidth_sent_last_minute_total
    [57] => connection_bandwidth_received_last_second_total
    [58] => connection_bandwidth_received_last_minute_total
    [59] => connection_connected_time

Dzięki temu poleceniu wyświetlą nam się wszystkie dostępne klucze, do których mamy dostęp traktując obiekt jako tablicę z danymi. Oznacza to, że do każdej danej dostajemy się, jak do zwykłej tablicy, tj. $user['client_database_id'] zwróci nam ID użytkownika w bazie danych serwera.

Za pomocą funkcji getInfo() dostaniesz się również do informacji na temat obiektu, którym będzie w przyszłych poradnikach np. kanał, ranga serwerowa lub ranga kanałowa.

Zastosowanie?

// Przykład
echo $client['client_nickname']." aktualnie przebywa na kanale od ID: ".$client['cid'];
  • wyświetlanie użytkowników online
  • na serwerze
  • na kanale
  • o konkretnym nicku itp.
  • wyszukiwanie klientów
  • przenoszenie AFK
  • sprawdzanie starych wersji klientów i ostrzeganie przed możliwością crashowania
  • wiele innych

W przyszłych poradnikach dowiecie się jak utworzyć skrypty do automatyzacji serwera, w oparciu o funkcje przedstawione powyżej. #Chcesz dowiedzieć się czegoś więcej? Pytaj w komentarzu.

Więcej na temat całego frameworku dowiecie się z oficjalnej strony dokumentacji: https://docs.planetteamspeak.com/ts3/php/framework/