Jump to content
Existing user? Sign In

Sign In



Or sign in with one of these services

Sign Up
Search In
  • More options...
Find results that contain...
Find results in...

[Rozwiązany] ts3admin.class - pobranie listy wszystkich użytkowników


zmechu
 Share

Recommended Posts

Witajcie!

Sprawa niby prosta, o ile zna się php i ts3admin.class 🙂 Chciałbym wyciągnąć z serwera TS3 listę WSZYSTKICH użytkowników. Mam nawet gotowca:

require("../lib/ts3admin.class.php");
$tsAdmin = new ts3admin($ts3_ip, $ts3_queryport);

if($tsAdmin->getElement('success', $tsAdmin->connect())) {
	$tsAdmin->login($ts3_user, $ts3_pass);
	$tsAdmin->selectServer($ts3_port);
	$clients = $tsAdmin->clientList();
	
	echo count($clients['data']) . ' clients on selected server';
	
	foreach($clients['data'] as $client) {
		echo $client['client_nickname'];	
	}
}

z tym tylko że ten kod wyciąga tylko listę klientów będących on-line, a nie wszystkich. Znalazłem funkcję clientDbList() która powinna zrobić to co potrzebuję ale kod:

$clientsdb = $tsAdmin->clientDbList($start = 0, $duration = 100, $count = true);

                $DBClientEntriescount = $tsAdmin->clientDbList();
                foreach ($DBClientEntriescount['data'] as $clientindb) {
                    $DBClientEntries = $clientindb['count'];
                }
echo $DBClientEntries;

coś nie chce zaskoczyć pokroju "Error in clientDbList() " lub "Message: convert error" czy innymi wszystkomówiącymi 🙂

 

Co robię źle?

 

Pozdrawiam!

ts.virtual-gaming.eu - nie polecam, 2/10 :-)

Link to post
Share on other sites

Funkcja czasem nie nazywa się clientDBList w ts3admin.class?

 

Jeżeli chcesz zobaczyć całą listę, to musisz zobaczyć jaki jest ['count'] i pózniej podzielić to na 200, bo tyle maksymalnie Ci clientDBList zwraca.

 

$entireClientDBList = [];
$count = $ts->getElement('data', $ts->clientDBList(0, 1, $count = true)); // pierw bierzesz sobię count ile masz użytkowników
$countAll = ceil($count[0]['count']/200); // dzielisz sobię count na 200 bo tyle maksymalnie ci może każda lista zwrócić
$i = 1;
$min = 0;

echo "Start: ".date("H:i:s", time()).PHP_EOL;
		
do{
	$max = $i * 200;
	$data = $ts->getElement('data', $ts->clientDbList($min, $max, $count = false));		
	$entireClientDBList = array_merge_recursive($entireClientDBList, $data);

	$min = $max + 1;
	$i++;
}while($i <= $countAll);
                               
echo "Stop: ".date("H:i:s", time()).PHP_EOL;	
echo count($entireClientDBList);	                      

Na ok. 39k użytkowników w bazie, zajmuje ta pętla ok. 10sekund :v

 

Start: 19:27:26
Stop: 19:27:36
38905

 

Być może jest lepszy sposób ale nie chciało mi się testować.

Edited by Lolek
  • Lubię to! 1
  • Kocham to! 2

Rp0vZ8K.png.d0eb521465c3c31d0b673d770e12ded9.png

Link to post
Share on other sites

Bingo, działa świetnie! Dzięki!

ts.virtual-gaming.eu - nie polecam, 2/10 :-)

Link to post
Share on other sites
Guest
This topic is now closed to further replies.
×
×
  • Create New...

Important Information