Frage von Assassins89, 255

TeamSpeak 3 / PHP Script ist User online?

Hey,

folgendes Problem:

Ich versuche nun seit geraumer Zeit ein kleines PHP Scribt zu schreiben, was prüft ob ein User auf dem TS online ist oder nicht. Sobald er online ist, soll es einen passend gefärbten Text ausgeben. Zum Beispiel: Ist online in Farbe Grün.

Ist er offline, dann das Gegenteil in Farbe Rot.

Die Verbindung zum TS selber bekomme ich hin aber ich hab keinen Dunst, wie ich nun abfragen kann ob spezieller User gerade auf dem TS ist oder nicht.

Ich benutze das TeamSpeak 3 PHP Framework aber es wäre nicht das Problem, auf was anderes um zu steigen.

Danke schon mal für eure Hilfe.

Hilfreichste Antwort - ausgezeichnet vom Fragesteller
von dannyotti, 198

https://docs.planetteamspeak.com/ts3/php/framework/class_team_speak3___node___se...

schau dir das mal an. Du kannst ohne Probleme einen Clienten finden. Wenn keiner online ist, bekommst du eine leere Liste zurück und weist, er ist nicht online.

Die Dokumentation ist wirklich gut und kann dir weiterhelfen:) Wo genau ist das Problem?

Kommentar von Assassins89 ,

Ah genau sowas hab  ich in der Doku gesucht. Mal direkt austesten.

Sollte ich noch Probleme haben, melde ich mich.

Ganz einfach. Ich bin des Englischen nicht ganz so mächtig und tue mich ein bisschen schwer, das zu verstehen.

Kommentar von Assassins89 ,

Nee, ich versteh die Doku nicht. Ich hab keine Ahnung, wie ich es schreiben muss. Bin aber auch in meinen PHP Kenntnissen eingeschränkt. 

Kommentar von dannyotti ,

schreib pn am besten mit code, damit ich helfen kann. oder schreib hier den code

Kommentar von Assassins89 ,

Naja, ich hab nicht mal ne Ahnung wie ich anfangen muss. Das erschließt sich mir leider nicht aus der Doku.

Soweit bin ich:

<?php
require_once('lib/libraries/TeamSpeak3/TeamSpeak3.php');
$server = array(
"tsip" => "localhost",
"tsport" => "9987",
"ts_query_admin" => "serveradmin",
"ts_query_password" => "",
"ts_query_port" => "10011",
"ts_query_user_nick" => "UCP_Administrator"
);

try {
TeamSpeak3::init();
$ts3_VirtualServer = TeamSpeak3::factory("serverquery://".$server["ts_query_admin"].":".$server["ts_query_password"]."@".$server["tsip"].":".$server["ts_query_port"]."/?server_port=".$server["tsport"]."&nickname=".$server[ "ts_query_user_nick"]."");

Was soll hier hin?


Etwa so:

$clientFind = TeamSpeak3_Node_Server::clientFind("Uid vom Clienten oder der Name?");

Dann weiter mit if oder doch anders?



} catch(Exception $e) {
echo "Fehler!
ErrorID: ". $e->getCode() ."; Error Message: ". $e->getMessage() .";";
}
?>

Das ist aber nur das Grundgerüst. Also Verbindung zum TS und das wars. Weiter weiß ich nicht.

Kommentar von dannyotti ,
$ts3_ServerInstance = TeamSpeak3::factory("serverquery://serveradmin:pw@host:10011/");

$ts3_Server = $ts3_ServerInstance->serverGetById(sid);
$cient = ts3_Server->clientFIND("Name");
Kommentar von Assassins89 ,

Danke aber leider zickt jetzt der Webserver mit nem HTTP 500 error rum:

[Wed Apr 20 20:41:12.247705 2016] [:error] [pid 20762] [client 2003:5f:2806:6206:d8c8:3212:96cf:d8d0:58161] PHP Parse error: syntax error, unexpected '->' (T_OBJECT_OPERATOR) in /var/www/html/vhosts/ts3for.eu/test.php on line 17

Kommentar von dannyotti ,

schick mal den code, den du jetzt hast. die sid hast du mit der serverid schon ersetzt?

Kommentar von Assassins89 ,

So, jetzt kommt als Ausgabe Array.

Hab es erstmal so geschrieben:

<?php
require_once('lib/libraries/TeamSpeak3/TeamSpeak3.php');

try {

$ts3_ServerInstance = TeamSpeak3::factory("serverquery://serveradmin:PW@localhost:10011/");

$ts3_Server = $ts3_ServerInstance->serverGetById(1);
$client = $ts3_Server->clientFIND("Blacky");

echo $client;

} catch(Exception $e) {
echo "Fehler!
ErrorID: ". $e->getCode() ."; Error Message: ". $e->getMessage() .";";
}
?>

Kommentar von Assassins89 ,

Gut, dass funzt jetzt. Bin ich online, kommt ein Array zurück. Bin ich offline, ein Fehler. Nun steht ich aber vor dem Problem, dass ich nicht weiß, wie ich das nun abfragen soll. Ich vermute mal, mit "if" oder?

Srry aber ich kann auch nicht wirklich nen klaren Gedanken fassen, da Sehnenscheidenentzündung im Handgelenk (macht aua) und dazu noch, dass rumgenerve meines Hundes.

Kommentar von dannyotti ,

kein ding, aber ich kann auch nicht direkt antworten, sorry:)

wenn ein array zurück kommt, dann ist es eignetlich ganz leicht.

if(count($client)>0){
echo "is online";
echo "<br><br>$client[0]["clid"]; //laut doku dürfte das so stimmen
}
else{
echo "ist nicht online";
}
Kommentar von Assassins89 ,

Macht nix. Alles gut. Find ich sowieso schon verdammt nett von dir, dass du mir so geduldig hilfst. :) 

Bin gerade mit dem Handy hier aber sobald ich am Rechner bin, werde ich es ausprobieren. 

Kommentar von Assassins89 ,

So, habs getestet. So funktioniert es:

<?php
require_once('lib/libraries/TeamSpeak3/TeamSpeak3.php');

try{

$ts3_ServerInstance = TeamSpeak3::factory("serverquery://serveradmin:PW@localhost:10011/");

$ts3_Server = $ts3_ServerInstance->serverGetById(1);
$client = $ts3_Server->clientFIND("Möpchi");

if(count($client)>0){
echo "is online";
}
} catch(Exception $e) {
echo "ist nicht online";
}
?>

So, dass muss ich jetzt noch hübsch verpacken und dann hat sich die Sache. Hätte nicht gedacht, dass das so schwer ist...

Kommentar von Assassins89 ,

So, funzt jetzt alles und ist der Seite entsprechend verpackt (für das Design kann ich nix)

Hier das Ergebnis:
http://ts3for.eu/?page_id=486

Kommentar von dannyotti ,

Dann ist ja gut!

Sieht nicht schlecht aus.

Antwort
von Malemeister, 126

Hallo,

"Das Teamspeak 3 PHP Framework"

Ich kann mir zwar schon denken welches, aber 100% weis ich es nicht. Hier gibt es schon ein paar verschiedene die alle für Teamspeak sind und in PHP geschrieben wurden...

Pirnzipiell läuft es so, dass du einen Socket (Telnet) zum Teamspeak Server aufbaust und dann dort ganz einfach Query Commands ausführst. Diese Arbeit nimmt dir das Framework natürlich ab.

Das Framework stellt dir nun also Funktionen zur Verfügung, womit du arbeiten kannst. Du hast bei deinem vorhaben 2 Möglichkeiten:

1. Einfach mit der Suchfunktion von Teamspeak nach einer ID (am besten UID) suchen und schauen ob ein User gefunden wird. Wenn ja ist er online, wenn nicht ist er offline.

2. Die Userliste von dem Server abfragen. Diese gibt dir dann die Clients zurück welche gerade Online sind. Nun einfach diese mit deinem Clienten vergleichen und fertig. Wenn der Name in der Liste auftaucht ist der User online, sonst offline.

Welche Möglichkeit du nimmst ist dir überlassen. Sobald du aber mehr als 3/4 User prüfen möchtest, würde ich Möglichkeit 2 nehmen da du hier nur eine Abfrage machen musst und dann mit der Liste arbeiten kannst.

Wenn du mir jetzt noch sagst welches Framework du benutzt, kann ich dir sicherlich noch die Funktionen nennen welche du nutzen musst. Andernfalls solltest du dir auch mal die Doku durchlesen (was jedes gute Framework besitzt).

Grüße

Kommentar von Assassins89 ,

Das Frameworkt heißt direkt so. Hier der Link:

http://forum.teamspeak.com/threads/54132-API-TS3-PHP-Framework

Kommentar von Malemeister ,

Dann sind das folgende Funktionsnamen

Möglichkeit 1: clientFind

Möglichkeit 2: clientList

Wie gesagt, bei über 4 Usern würde ich Möglichkeit 2 benutzen da es sonst sein kann das dein Query gebannt wird (Wenn du die Flood nicht hochgestellt hast).

Kommentar von Assassins89 ,

Sollte nicht das Problem sein, da er Lokal drauf zugreift und die Lokale Adresse in der Whitelist steht.

Leider bin ich zu doof oder stell mich gerade zu doof an. Ich versteh die Doku keinen Meter.

Bin aber auch mit meinen PHP Kenntnissen eingeschränkt.

Kommentar von Malemeister ,

Ohne Code können wir dir leider auch nicht helfen.

Wenn du den Code postest, denk dran wenigstens das Passwort zu löschen.

Kommentar von Assassins89 ,

So, jetzt kommt als Ausgabe Array.

Hab es erstmal so geschrieben:

<?php 
require_once('lib/libraries/TeamSpeak3/TeamSpeak3.php'); 

try { 

$ts3_ServerInstance = TeamSpeak3::factory("serverquery://serveradmin:PW@localhost:10011/"); 

$ts3_Server = $ts3_ServerInstance->serverGetById(1); 
$client = $ts3_Server->clientFIND("Blacky"); 

print_r ($client); 

} catch(Exception $e) { 
echo "Fehler!
ErrorID: ". $e->getCode() ."; Error Message: ". $e->getMessage() .";"; 

?>

Gut, dass funzt jetzt. Bin ich online, kommt ein Array zurück. Bin ich offline, ein Fehler. Nun steht ich aber vor dem Problem, dass ich nicht weiß, wie ich das nun abfragen soll. Ich vermute mal, mit "if" oder?

Srry aber ich kann auch nicht wirklich nen klaren Gedanken fassen, da Sehnenscheidenentzündung im Handgelenk (macht aua) und dazu noch, dass rumgenerve meines Hundes.

Keine passende Antwort gefunden?

Fragen Sie die Community

Weitere Fragen mit Antworten