Skocz do zawartości
  • 👋 Witaj na MPCForum!

    Przeglądasz forum jako gość, co oznacza, że wiele świetnych funkcji jest jeszcze przed Tobą! 😎

    • Pełny dostęp do działów i ukrytych treści
    • Możliwość pisania i odpowiadania w tematach
    • System prywatnych wiadomości
    • Zbieranie reputacji i rozwijanie swojego profilu
    • Członkostwo w jednej z największych społeczności graczy

    👉 Dołączenie zajmie Ci mniej niż minutę – a zyskasz znacznie więcej!

    Zarejestruj się teraz

Teamspeak 3 PHP Framework Cz.2. Pobieranie informacji o użytkownikach


MrSanten

Rekomendowane odpowiedzi

Opublikowano

Witam w drugim z serii poradniku o pisaniu botów i skryptów opartych na Framework'u Teamspeak 3 PHP.

 

Wcześniejszy poradnik:

Będziemy pracować na kodzie który napisaliśmy wcześniej.

Skoro umiemy już łączyć się z serwerem pora spersonalizować naszego bota nadając mu odpowiedni nick. 

Aby to zrobić dodajemy do array config:

$config['NazwaBota'] = 'Poradnik';

Oraz zmieniamy zmienną łączącą z serwerem na:

$ts3_VirtualServer = TeamSpeak3::factory("serverquery://".$config['QueryName'].":".$config['QueryPass']."@".$config['teamspeakip'].":".$config['QueryPort']."/?server_port=".$config['PortServer']."&nickname=". urlencode($config['NazwaBota']) ."");

To daje nam taki efekt:

9IcCpVg.jpg

 

Po połączeniu się z serwerem nasze możliwości ogranicza tylko nasza wyobraźnia i znajomość poleceń.

Teraz zajmiemy się wypisaniem listy użytkowników i zdobyciem o nich informacji. Do tego posłuży nam polecenie:

clientList()

Wpisuje ono w tablice masę informacji o klientach połączonych z serwerem.

 

Ale jak sprawić żeby nasz bot czyli $ts3_VirtualServer wykonał to polecenie?

 

Wystarczy napisać taką linijkę:

$Lista = $ts3_VirtualServer->clientList();

Co spowoduje zapisanie informacji pobranych przez polecenie clientList() do zmiennej $Lista

Jeżeli chcesz zobaczyć jak wiele informacji przechowuje teraz zmienna wystarczy że napiszesz:

print_r($Lista);

Co wyświetli ci całą zawartość tablicy na stronie. Może cie to trochę przytłoczyć ale nie martw się po przerobieniu tego poradnika nie będzie to już taki bełkot.

 

Dobrze zajmijmy się teraz wypisaniem osób online.

Aby to zrobić trzeba podzielić zmienną $Lista na poszczególnych użytkowników:

foreach($Lista as $ts3_Client)
{

}

Teraz między znacznikami { } wpiszemy kod wyświetlający nick użytkownika i oddzielenie nową linia i pozomą kreską. Powinno to wyglądać tak:

foreach($Lista as $ts3_Client)
{
 echo $ts3_Client."<br>";
 echo "<hr>";
}

Efekt na stronie będzie mniej więcej taki:

6EI6tDB.jpg

 

Ok wiemy już jak pokazać nicki osób online. Ale po co nam same nazwy? Wyciągnijmy teraz kilka dodatkowych informacji takich jak: 

 

  • dbid
$ts3_Client['client_database_id']
  • Status oddalenia
$ts3_Client['client_away']
  • Wyciszenie mikrofonu
$ts3_Client['client_input_muted']
  • Wyciszenie dźwięku
$ts3_Client['client_output_muted']
  • UUID
$ts3_Client['client_unique_identifier']
  • Grupy serwera
$ts3_Client['client_servergroups'] 

Całość wygląda tak:

foreach($Lista as $ts3_Client)
{
 echo "<b>".$ts3_Client."</b><br><br>";
 echo "<b>DBID:</b> ".$ts3_Client['client_database_id']." <b>Away:</b> ".$ts3_Client['client_away']." <b>Mikrofon:</b> ".$ts3_Client['client_input_muted']." <b>Głośnik:</b> ".$ts3_Client['client_output_muted']." <b>UUID:</b> ".$ts3_Client['client_unique_identifier']."<br>";
 echo "<b>Grupy:</b> ".$ts3_Client['client_servergroups'];
 echo "<hr>";
}

Poukładałem wszystko aby było to lepiej widoczne na stronie i "milsze" dla oka.

 

Nasza strona prezentuje się teraz tak:

XmKE6y0.jpg

 

Celowo ukryłem UUID. U ciebie w miejscu - będzie ciąg znaków.

 

Co oznaczają te zera przy Away, Mikrofon i Głośnik?

Są to ich statusy. 0 oznacza włączony mikrofon/głośnik a w przypadku Away brak oddalenia. 1 natomiast oznacza status away, wyciszony mikrofon/głośnik.

 

Cyfry przy napisie "Grupy:" to, jak się pewnie domyśliłeś, id grup serwera.

 

To by było na tyle w tej części poradnika. Przeanalizuj sobie teraz cały kod i przygotuj się na następną część w której zajmiemy się nadawaniem i odbieraniem grup przez stronę. 

 

Musisz jednak pamiętać że takiego kodu nie można umieścić na stronie dostępnej dla użytkowników. Powodowałoby to że za każdym razem gdy ktoś wejdzie lub odświeży stronę bot wejdzie na serwer i pobierze z niego dane. Może to doprowadzić do błędów i zablokowania bota przez serwer. Aby używać tego kodu należałoby zapisać odpowiednie dane do bazy danych a następnie z niej wyciągnąć na stronie. Zajmiemy się tym w kolejnych częściach poradnika.

 

Cały kod:

<?php
require_once("inc/libraries/TeamSpeak3/TeamSpeak3.php");


 $config = array();
	  $config['teamspeakip'] = 'localhost';
	  $config['QueryName'] = 'serveradmin';
	  $config['QueryPass'] = 'haslo';
	  $config['QueryPort'] = 'portquerry';
	  $config['PortServer'] = '9987';
	  $config['NazwaBota'] = 'Poradnik';
	  
$ts3_VirtualServer = TeamSpeak3::factory("serverquery://".$config['QueryName'].":".$config['QueryPass']."@".$config['teamspeakip'].":".$config['QueryPort']."/?server_port=".$config['PortServer']."&nickname=". urlencode($config['NazwaBota']) ."");


$Lista = $ts3_VirtualServer->clientList();

foreach($Lista as $ts3_Client)
{
 echo "<b>".$ts3_Client."</b><br><br>";
 echo "<b>DBID:</b> ".$ts3_Client['client_database_id']." <b>Away:</b> ".$ts3_Client['client_away']." <b>Mikrofon:</b> ".$ts3_Client['client_input_muted']." <b>Głośnik:</b> ".$ts3_Client['client_output_muted']." <b>UUID:</b> ".$ts3_Client['client_unique_identifier']."<br>";
 echo "<b>Grupy:</b> ".$ts3_Client['client_servergroups'];
 echo "<hr>";
}

?>

Linki do innych części:

(')(.)(;)

Opublikowano

Poradniki wydają się chaotyczne, nieprzemyślane.

 

Ogólnie fajnie że próbujesz pomóc innym, ale nie robi się tego w taki sposób.

 

Przedewszystkim, proponowałbym albo githuba, albo jakieś pastebiny albo coś bo szczerze to czytając owy poradnik odechciało mi się po pierwszym zdaniu.

 

mówię - pomysł dobry, lecz przemyślał bym formę prezentacji i przekazywania informacji

Desktop - Procesor: Intel i7-7700k 4.20Ghz  | Karta Graficzna: EVGA Geforce GTX 1070 | RAM: 16GB 

Laptop - Procesor: Intel i5-8250U 2.5Ghz | Karta Graficzna: Radeon 530 | RAM: 8GB

 

 

 

 

 

 

Opublikowano

@Wolen @Pantoflarzek 

 

Pytanie do was. Jak widzicie te poradniki na Github'ie? Miałoby to wyglądać tak że znajduje się tam tylko końcowy kod z poradnika a rozpisany poradnik jest nadal na forum? Czy cały poradnik znajduje się na github'ie a w temacie znajdują się linki do odpowiednich części?

 

Jak poukładać treść na github'ie aby była ona przejrzysta i dostępna dla czytelnika?

(')(.)(;)

Opublikowano

@Wolen @Pantoflarzek 

 

Pytanie do was. Jak widzicie te poradniki na Github'ie? Miałoby to wyglądać tak że znajduje się tam tylko końcowy kod z poradnika a rozpisany poradnik jest nadal na forum? Czy cały poradnik znajduje się na github'ie a w temacie znajdują się linki do odpowiednich części?

 

Jak poukładać treść na github'ie aby była ona przejrzysta i dostępna dla czytelnika?

 

Generalnie, po to jest GitHub aby robić tzw. branch  ( spolszczone "branche" choć to strasznie dziwnie wygląda xD )

 

Pozatym, proponowałbym zrobienie ewentualnie jakiegoś PDF'a czy coś w stylu pliku readme.txt aby dołączać do danego kodu gdzie możesz bardziej wyjaśniać swoje zamierzenia itp. itd.

 

Ogólnie gdybym się za to brał sam, zrobiłbym se własnego paste'bina czy CMS'a i tak to wstawiał lecz wiem że to nie takiego rozmiaru projekt :P

Desktop - Procesor: Intel i7-7700k 4.20Ghz  | Karta Graficzna: EVGA Geforce GTX 1070 | RAM: 16GB 

Laptop - Procesor: Intel i5-8250U 2.5Ghz | Karta Graficzna: Radeon 530 | RAM: 8GB

 

 

 

 

 

 

Opublikowano

Jak GH to już lepiej pliki .md

 

...

 

jeśli nie jest zaprzyjazniony z Git'em, zawsze może sie pobawić w zwykłym wordzie zrobić se plik pdf i to dołączać nie tyle do gita ale również do prezentacji tutaj na MPC.

 

Dodatkowo, polecałbym nad przejrzystością rozwiązań - czyli - 

 

Nie musisz dużo gadac i pisać. Czasami wystarczy powiedzieć robię tak bo robię i tyle.

Tłumaczenie pewnych decyzji ma sens tylko w przypadku w którym wiemy że gusta co do rozwiazań itp mogą być różne.

 

Zbyt duża dyskusja ze samym sobą w takim temacie może spowodować poczucie że nie wiesz o czym gadasz, w zamian dużo gadając próbujesz nadrobić braki wiedzy. Wiesz, nie mówię że tak jest, ale takie odczucie może powstać, szczególnie u osoby nowej, niedoświadczonej.

Postaw się nie miejscu tej osoby - chciałbyś się uczyć z czegoś co wydaje się troche chaotyczne?

Desktop - Procesor: Intel i7-7700k 4.20Ghz  | Karta Graficzna: EVGA Geforce GTX 1070 | RAM: 16GB 

Laptop - Procesor: Intel i5-8250U 2.5Ghz | Karta Graficzna: Radeon 530 | RAM: 8GB

 

 

 

 

 

 

Opublikowano

Ok. Wypracowałem sobie w głowie pewien pomysł który jutro zamierzam pokazać. Ograniczę się do jednego tematu na forum i branch'y na github.

Opisy będą jako komentarze w kodzie a dodatkowe informacje w plikach pdf. 

(')(.)(;)

Zarchiwizowany

Ten temat przebywa obecnie w archiwum. Dodawanie nowych odpowiedzi zostało zablokowane.

×
×
  • Dodaj nową pozycję...