Webprogrammierung für Teamspeak mit der ts3admin.class

  • Hallo,


    einige von euch kennen sicher mein Projekt "ts3admin.class". Das ist eine Funktions-Bibliothek für PHP die euch alle Funktionen bietet die ihr braucht wenn ihr über eine Website mit PHP kommunizieren wollt.
    Dadurch lassen sich z.B. ganz einfach Channel oder Server erstellen, User bearbeiten, Bilder hochladen usw.


    Projektwebsite und Download findet ihr auf: http://ts3admin.info


    Wie fängt man jetzt damit an fragt ihr euch sicher.
    Folgende Voraussetzungen sollten erfüllt werden:

    • Ein Webspace oder ein lokaler Apacheserver sollte vorhanden sein
    • PHP-Kenntnisse
    • Ein Teamspeakserver bei dem ihr die Logindaten zum Serveradmin-Zugang habt


    Ist dies alles vorhanden wäre es wahrscheinlich noch am besten wenn ihr die IP eures Webspaces in die Whitelist von Teamspeak eintragt, damit ihr nicht bei zu vielen Querys über die Website gebannt werdet (das geht sehr schnell!).


    Sind bis jetzt alle Vorkehrungen getroffen, die PHP-Klasse "ts3admin.class.php" gedownloaded und ihr seid startklar, so kann nun begonnen werden.


    Wir erzeugen also eine Test-PHP Datei, test.php und legen sie auf das Website. Im selben Verzeichnis platzieren wir nun die "ts3admin.class.php".
    Jetzt muss die test.php bearbeitet werden.


    Schritt 1: Laden der ts3admin.class.php


    PHP
    1. <?PHPrequire_once("ts3admin.class.php");?>


    Schritt 2: Erzeugen eines ts3admin-Objekts:


    PHP
    1. <?PHPrequire_once("ts3admin.class.php");$ts = new ts3admin("<IP DES TS-SERVERS>", "<QUERY-PORT (Standard 10011)>");?>


    Schritt 3: Überprüfen ob die Verbindung aufgebaut werden kann:



    PHP
    1. <?PHPrequire_once("ts3admin.class.php");$ts = new ts3admin("<IP DES TS-SERVERS>", "<QUERY-PORT (Standard 10011)>");$ergebnis = $ts->connect();echo $ergebnis['success'] ? 'Verbindung hergestellt' : 'Verbindung konnte nicht hergestellt werden';if(count($ts->getDebugLog()) > 0) { foreach($ts->getDebugLog() as $logEntry) { echo $logEntry.'<br>'; }}?>


    Das Script gibt "Verbindung hergestellt" aus wenn alles geklappt hat, wenn nicht dann gibt es "Verbindung konnte nicht hergestellt werden" und die entsprechenden Fehlermeldungen aus.
    $ergebnis['success'] spreche ich an, weil die Rückgaben von Funktionsaufrufen immer das gleiche Muster haben bei der ts3admin.class:


    Code
    1. Array ( ['success'] => true/false (je nach dem ob die Ausführung erfolgreich war) ['errors'] => entweder leer wenn kein Fehler aufgetreten ist oder ein Array mit Fehlermeldungen: Array ( [0] => 'Falscher Port' [1] => 'PHP-Script ist schwanger und kann deshalb nicht ausgeführt werden' ) ['data'] => Liefert als Array oder Plaintext die Informationen die angefordert wurden zurück (siehe Doku für beispiele))



    $ts->getDebugLog() ruft den globalen Fehlerspeicher der ts3admin.class ab, somit erhalte ich alle Fehler die aufgetreten sind beim Ausführen des kompletten PHP-Scripts.


    Das errors Element der entsprechenden Funktionsrückgabe gibt nämlich nur Fehler innerhalb des Funktionsaufrufes zurück.


    Theoretisch können nun beliebig Abfragen an den Server gesendet werden, welche Funktionen es dazu gibt bitte immer aus der DOKU entnehmen.


    Hier mal ein Beispielscript um eine Liste der aktiven Clients auszugeben:



    Weitere Beispielscripts folgen diesen Thread in naher Zukunft.

    Einmal editiert, zuletzt von NoobsLost () aus folgendem Grund: Rechtschreibung - Überschrift

  • Hier ein Beispielscript wie man Clients kicken kann, dabei ist auch der serveradmin-Zugang nötig!


    Nennt die Datei im falle eines copy-paste des Scripts bitte clientkick.php um die Funktion zu gewährleisten.


  • Super Projekt!


    Ich kann es nur empfehlen. Super Dokumentation und es gibt alle Funktionen die man braucht um einen Server zu Administrieren.

  • Kann man hier eigentlich auch die Instanz-Einstellungen wie "DoS-Protection" mit "instanceEdit(array $data)" setzen/ändern?


    Oder Fragen wir anders: Sind die 'setting' gleichnamig zur offiziellen TeamSpeak 3 Manual Dokumentation?

  • Kann man hier eigentlich auch die Instanz-Einstellungen wie "DoS-Protection" mit "instanceEdit(array $data)" setzen/ändern?


    Oder Fragen wir anders: Sind die 'setting' gleichnamig zur offiziellen TeamSpeak 3 Manual Dokumentation?


    Die Namen der Permissions sind die selben, wie die im Manual und auch identisch mit denen die man in Teamspeak sehen kann wenn man im Rechtemenu den Modus wechselt. Ob das mit dem DOS-Protection möglich ist weiß ich nicht, mit der Option "DOS-Protection" hab ich mich noch nicht befasst

  • Kann man hier eigentlich auch die Instanz-Einstellungen wie "DoS-Protection" mit "instanceEdit(array $data)" setzen/ändern?


    Ja, das ist möglich und zwar verwendet man hierzu die Funktion "instanceEdit" wie bereits erwähnt:


    Ansonsten kann man das auch noch wie folgt aktivieren:

  • Mal ne Frage zur Methode "clientList()":


    Ist die Auflistung der Clients immer revers?


    Mir ist nämlich aufgefallen, wenn mehrere User in einem Channel sind, ist die Anordnung anders als im Client (wird ja mit Gruppe gegliedert und dann nach Namen).
    Möchte diesen "Schönheitsfehler" ausbügeln, wenn die Liste jedoch nur revers ist, muss ich sie ja nur rückwärts durchlaufen, ansonsten hab ich mir grad nen MergeSort-Algo dafür gebastet.


    Mfg

  • wenn mehrere User in einem Channel sind, ist die Anordnung anders als im Client


    Die Clientliste ist ja keine Liste der online Clients aus einem bestimmten Channel. Es ist eine Liste aller Clients, die zur Zeit auf dem Server online sind.


    Das Array hat wahrscheinlich diesen Style, oder?


    In dem Fall wird das Array nach den Indexes 0, 1, 2 und so weiter aufsteigend sortiert. Wie er sich das Array mit den Client-Datensätzen zusammen baut, weis ich nicht. Ich denke aber, dass es 1:1 so aus der Reihenfolge übernommen wird, wie es der ServerQuery Befehl "clientlist" zurück liefert. Der gibt die Liste nämlich aufsteigend sortiert nach "clid" zurück. Ist also kein Schönheitsfehler oder irgendeine Art von Reverse-Sortierung. ;)

  • Der gibt die Liste nämlich aufsteigend sortiert nach "clid" zurück.


    Das ist mir bis dato nicht aufgefallen. Danke.


    Der rest war mir schon klar, war wohl dann eher ein Zufall, dass die Clients, die grad in einem Channel zusammen waren, immer reverse zu der Rückgabeliste von der Query waren (UserID abfallend angeordnet im Client).

  • Kann es sein, dass der Server die clid so vergibt, wie die Leute auf den TS kommen?
    Dachte bislang, dass es genauso abläuft wie mit einer UserID die in einer DB eingetragen ist, dass sie einmalig einem Clienten zugeordnet ist.


    So hab mir jetzt meine MergeSort Klasse gebastet (hat sich schwieriger dargestellt, als ich dachte), die sortiert jetzt nach einem Array-Attribute (wie Servergruppe, wenn man es bei Aufruf der Methode angibt) und kann auch bei Gleichheit auf ein 2. Attribute sortieren.


    Mfg

  • Kann es sein, dass der Server die clid so vergibt, wie die Leute auf den TS kommen?


    Genau. Jeder Client der joint, kriegt eine neue clid. Wenn er disconnected und wieder drauf geht, kann's sein, dass er die selbe oder eine andere clid erhält. Ist abhängig von dern Usern, die vorher und nachher auf dem TS waren. ;)

  • Hallo,


    da ich ein totaler Noob in php bin, wäre es nett, wenn mir jemand sagen könnte, wie das Script aussehen muss, damit mir die Server Information wie Packetlost / Übertragene Daten angezeigt wird.


    Danke im Voraus.
    LG Pascal

  • Um ein solches Script zu entwickeln, wird durchaus etwas Zeit benötigt.
    Bist du auch bereit, diese Zeit zu bezahlen?


    Ich bin gerne bereit, entsprechende Scripte zu entwickeln. Bei Interesse sende mir bitte detailliert, was du gerne hättest. Dann kann ich auch genau sagen, was das ggf. kostet.