ts3admin.class banner problem

  • Hallo,


    ich habe ein kleines problem mit meinen banner und brauche mal eure hilfe


    Hier der Code

    ich möchte gerne über

    serverGroupClientList

    eine servergruppe ausgeben aber leider funktioniert das nicht so ganz wie ich es mir erhofft habe


    würde sehr dankbar über Hilfe sein

    Einmal editiert, zuletzt von Sebbo () aus folgendem Grund: Formatierung gefixt

    • Offizieller Beitrag

    Guten Abend und herzlich Willkommen im Forum DomGerMen !

    Erstmal: Die ts3admin.class ist glaube ich veraltet und wird nicht mehr unterstützt. Zumindest scheint es so, als ob das Projekt eingestampft wurde, da ich weder die Webseite, noch einen Git Repository oder so gefunden habe. Hätte ich die Datei also selbst nicht mehr rumliegen gehabt, hätte ich es gar nicht mehr gefunden. :D


    par0noid hast du das Projekt ts3admin.class eingestampft?


    Falls es wirklich eingestampft wurde, solltest du z.B. das TS3PHPFramework (github.com/planetteamspeak/ts3phpframework) verwenden, wobei das ebenfalls aussieht, als ob es "tod" wäre - letzte Version von April 2018. In der Zwischenzeit haben sich eine Menge Dinge geändert bzw. wurden hinzugefügt, die in dem Projekt dann vermutlich fehlen oder nicht ordnungsgemäß funktionieren.


    Alternativ gibt es noch die "neue" WebQuery API, die ich persönlich mir allerdings noch garnicht weiter angeschaut habe. Da weis vielleicht jemand anders mehr.


    Nun zu deinem eigentlichen Problem...


    serverGroupClientList($sgid, $names = false) ist eine Funktion. So, wie du das aktuell aber angegeben hast, ist es kein Funktionsaufruf, sondern ein Indexname.

    PHP
    $supp = $sinfo['serverGroupClientList(10)'];

    10 sollte in diesem Fall die ID der Servergruppe sein, dessen Clients du haben möchtest.


    Um die Funktion nun als Funktion statt als Indexname aufzurufen, müsste das ganze so aussehen:

    PHP
    $supp = $ts3->serverGroupClientList(10);

    Das sollte dir dann etwas ähnliches wie nachfolgendes Beispiel zurück liefern:

    PHP
    // echo "<pre>";
    // print_r($supp);
    Array
    {
      [cldbid] => 2017
      [client_nickname] => Par0noid //with -names parameter
      [client_unique_identifier] => nUixbsq/XakrrmbqU8O30R/D8Gc=
    }

    Wenn ich deinen Code aber richtig verstanden habe, hast du vor, einen Counter, statt einem Array zu erhalten, weil du z.B. 3 Supporter auf dem Banner anzeigen möchtest. Richtig?


    In diesem Fall musst du noch zählen, wie viele User im Array zurück geliefert werden. Das sollte so funktionieren (ich habe es nicht getestet):

    Code
    $supp = count($ts3->serverGroupClientList(10));

    Danach solltest du eine Zahl in $supp haben.


    Zur Erklärung:

    1. PHP Skript auf TS3 Instanz verbinden: $connecting = $ts3->connect();
    2. PHP Skript auf der TS3 Instanz authentifizieren: $logging = $ts3->login($ts3config['ts3user'], $ts3config['ts3pass']); (kann man auch wie in deinem Fall nach dem selectServer() machen, aber in der Regel macht man das als zweiten Schritt.
    3. PHP Skript in deinem Fall auf den notwendigen virtuellen TS3 Server verbinden: $select = $ts3->selectServer($ts3config['ts3port'], true);
    4. $select wird in deiner Funktion zurück gegeben; das ist die aktive, authentifizierte Verbindung zu deinem virtuellen TS3 Server, die du dann als $ts3 abspeicherst: $ts3 = tsconnect();
    5. ts3admin.class Funktionen rufst du daher nun in der Regel über $ts3 auf:
      1. $ts3->serverInfo() liefert in dem Fall z.B. Server Informationen vom virtuellen Server - NICHT von der kompletten Instanz.
      2. $ts3->clientList() liefert eine Liste aller Clients zurück, die auf dem TeamSpeak Server online sind.
      3. $ts3->serverGroupClientList(10) liefert alle Mitglieder der Servergruppe mit der ID 10 zurück. Unabhängig davon, ob sie gerade auf TeamSpeak sind oder nicht.

    PS: Ich empfehle dir, deine Variablen sinnvoller zu benennen, damit man direkt erkennt, was diese beinhalten sollten. Beispiel: $servergroup_supporter_member_counter :)

  • Danke für deine Antwort


    Leider habe ich festgestellt das er die Arrays zählt sprich cldbid,client_nickname,client_unique_identifier


    er zeigt immer 3 an egal welche servergruppe ich nehme

    • Offizieller Beitrag

    Die Funktion sollte laut Dokumentation im Code ein Multidimensionales Array zurück liefern, sprich sowas hier:

    In diesem Fall sollte der count() die Anzahl der höchsten Array Elemente zurück geben. In diesem Beispiel also 3 - 0, 1 und 2.


    Wenn du - wie du beschrieben hast - immer nur ein so ein Sub-Array zurück bekommst, also sowas hier:

    PHP
    Array
    (
        [cldbid] => 54103
        [client_nickname] => JemandAnderes //with -names parameter
        [client_unique_identifier] => nUixbsq/XakrElSEO30R/D5Tb=
    )

    ...dann hat diese Servergruppe vermutlich nur dieses eine Mitglied. Hast du in TeamSpeak schon mal geprüft, wie viele Mitglieder diese Gruppe haben sollte? Stelle bitte auch sicher, dass du die richtige ID an serverGroupClientList() übergibst.


    In diesem Fall solltest du vielleicht noch prüfen, ob es ein Multidimensionales Array oder ein einfaches ist:

    Oder in kurz, als Einzeiler (wenn ich mich nicht vertippt habe ^^) :

    PHP
    $servergroup_supporter_member_counter = (count($servergroup_supporter_member_list) == count($servergroup_supporter_member_list, COUNT_RECURSIVE)) ? 1 : count($servergroup_supporter_member_list);
    
    echo "$servergroup_supporter_member_counter Supporter";