TeamSpeak 3 / PHP Script ist User online?

2 Antworten

Vom Beitragsersteller als hilfreich ausgezeichnet

https://docs.planetteamspeak.com/ts3/php/framework/class_team_speak3___node___server.html#ac42ed34f0e7faeea2f5c8a56196f2eef

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?

Woher ich das weiß:Studium / Ausbildung – Systemadministrator und Softwareentwickler

Assassins89 
Beitragsersteller
 20.04.2016, 19:12

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.

0
Assassins89 
Beitragsersteller
 20.04.2016, 19:41

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

0
dannyotti  20.04.2016, 19:50
@Assassins89

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

1
Assassins89 
Beitragsersteller
 20.04.2016, 20:06
@dannyotti

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.

0
dannyotti  20.04.2016, 20:34
@Assassins89
$ts3_ServerInstance = TeamSpeak3::factory("serverquery://serveradmin:pw@host:10011/");

$ts3_Server = $ts3_ServerInstance->serverGetById(sid);
$cient = ts3_Server->clientFIND("Name");
1
Assassins89 
Beitragsersteller
 20.04.2016, 20:42
@dannyotti

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

0
dannyotti  20.04.2016, 20:44
@dannyotti

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

1
Assassins89 
Beitragsersteller
 20.04.2016, 20:59
@dannyotti

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() .";";
}
?>

0
Assassins89 
Beitragsersteller
 20.04.2016, 21:36
@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.

0
dannyotti  21.04.2016, 01:33
@Assassins89

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";
}
1
Assassins89 
Beitragsersteller
 21.04.2016, 07:29
@dannyotti

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. 

0
Assassins89 
Beitragsersteller
 21.04.2016, 07:41
@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...

0

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


Assassins89 
Beitragsersteller
 20.04.2016, 19:14

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

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

0
Malemeister  20.04.2016, 19:18
@Assassins89

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).

0
Assassins89 
Beitragsersteller
 20.04.2016, 19:43
@Malemeister

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.

0
Malemeister  20.04.2016, 20:05
@Assassins89

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

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

0
Assassins89 
Beitragsersteller
 20.04.2016, 21:37
@Malemeister

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.

0