plugin documentation

  • Hi,


    ich bin dabei mein eigenes Plugin zu schreiben, aber für manche Dinge fehlen mir schlicht die passenden callbacks/befehle.
    Gibt es i-wo eine ausführliche Doku, welcher callback wann ausgelöst wird??

  • Die Callback-Namen sind eigentlich weitgehend "sprechend", daher sollte das meiste durchaus ersichtlich sein.


    Leider ist auch mir keine "ausführliche" Dokumentation bekannt, die über das im SDK-Download enthaltene Material hinaus geht.


    Aber stell doch einfach mal deine Fragen im Detail, vielleicht kann dir hier ja jemand deine Fragen beantworten.

  • Hi,


    ich suche im Speziellen ein Callback für Änderungen in meinem aktuellen Channel (jemand kommt dazu/geht weg). Bisher habe ich nur einen gefunden, der bei jeder Bewegung ausgelöst wird. Außerdem liefert dieser Callback "falsche" Namen, wenn jemand aus dem Channel direkt disconnected.


    Weiterhin bin ich auf der Suche nach einer Funktion, die mir meinen aktuellen Channel Aufenthalt angibt. Habe aber nichts dazu gefunden.


    Mein Workaround soweit:
    - höre auf alle Client move events
    - vergleiche mit meiner eigenen id,
    - wenn ich es selbst bin, speichere meine neue ChannelID
    - wenn ich es nicht bin, vergleiche meine aktuelle ChannelID mit der des move.


    Und ich wäre an einem Beispiel für die settings interessiert. Ich könnte natürlich über ein Hotkey mein eigenes Settingsmenü öffnen, aber ich habe die Hoffnung, dass wenn ich das "Hauseigene" von TS nehme, ich mich nicht um das Speichern der Settings nach dem Beenden der Software kümmern muss.

  • den eigenen Channel herausfinden (Einfach aus meinem Plugin heraus kopiert, daher nur als Beispiel):

    Code
    anyID funcwrapper::getOwnClientID(uint64 connectionHandlerID) {    anyID clientID;    if(this->ts3Functions.getClientID(connectionHandlerID, &clientID) != ERROR_ok) {        clientID = 0;    }    return clientID;}uint64 funcwrapper::getChannelID(uint64 connectionHandlerID, anyID clientID) {    uint64 channelID;    if(this->ts3Functions.getChannelOfClient(connectionHandlerID, clientID, &channelID) != ERROR_ok) {        channelID = 0;    }    return channelID;}


    Hotkeys, welche über die normale Konfiguration gesetzt werden, aber im Plugin genutzt werden:

    Code
    /* Helper function to create a hotkey */static struct PluginHotkey* createHotkey(const char* keyword, const char* description) {    struct PluginHotkey* hotkey = (struct PluginHotkey*)malloc(sizeof(struct PluginHotkey));    _strcpy(hotkey->keyword, PLUGIN_HOTKEY_BUFSZ, keyword);    _strcpy(hotkey->description, PLUGIN_HOTKEY_BUFSZ, description);    return hotkey;}/* Some makros to make the code to create hotkeys a bit more readable */#define BEGIN_CREATE_HOTKEYS(x) const size_t sz = x + 1; size_t n = 0; *hotkeys = (struct PluginHotkey**)malloc(sizeof(struct PluginHotkey*) * sz);#define CREATE_HOTKEY(a, b) (*hotkeys)[n++] = createHotkey(a, b);#define END_CREATE_HOTKEYS (*hotkeys)[n++] = NULL; assert(n == sz);/* * Initialize plugin hotkeys. If your plugin does not use this feature, this function can be omitted. * Hotkeys require ts3plugin_registerPluginID and ts3plugin_freeMemory to be implemented. * This function is automatically called by the client after ts3plugin_init. */void ts3plugin_initHotkeys(struct PluginHotkey*** hotkeys) {    QVariantHash hotkeyEntries = moduleLoader::instance()->getHotkeyEntries();    BEGIN_CREATE_HOTKEYS((hotkeyEntries.keys().count()));    foreach(QString keyword, hotkeyEntries.keys()) {        CREATE_HOTKEY(keyword.toStdString().c_str(), hotkeyEntries.value(keyword).toString().toStdString().c_str());    }    END_CREATE_HOTKEYS;}


    Wobei die Liste in etwa mit dem Code erstellt worden ist:

    Code
    QList<QVariantHash> homeChannel::getHotkeyKeywords() {    QList<QVariantHash> entries;    QVariantHash entry;    entry.insert("keyword", "homechannel.toggle");    entry.insert("name", tr("Toggle Homechannel"));    entries.append(entry);    return entries;}


    Und was die Informationen über den Channel betrifft, so bin auch ich dabei, mir alle Informationen selbst zu speichern, wenn die entsprechenden Events auftreten:


    Als weitere Information. Ich programmiere meine Plugins primär unter Linux mit dem Qt-Framework, welches ebenfalls bei Teamspeak verwendet wird, daher sind die nötigen Libraries bereits vorhanden. Unter Windows ist aber das entsprechende Visual-Studio, bzw. der entsprechende Compiler von Visual-Studio erforderlich, welcher für Teamspeak3 verwendet wird. Dann kann das Plugin ohne weitere "Abhängigkeiten" direkt verwendet werden.

  • Hi,
    vielen Dank für die vielen Beispiele.


    Hast du auch eins für die Settings (ts3plugin_offersConfigure) ??


    Zurzeit crashed mein code leider noch bei disconnect oder deaktivieren des Plugins... Aber habe da schon so ne Ahnung woran es liegt.


    Schön, dass du auch Qt verwendest, vielleicht kannst du mir dann bei meinem anderen Problem auch helfen.
    Ich habe zunächst Qt für VS2015 x64 compiliert und verwende es mit (Oh wunder) VS2015 XD
    Dann hatte ich aber immer Prozedur Fehler bei QTimer::singleshot(...); und die von Qt meinten ich sollte die Version nehmen, die auch TS benutzt. Also nochmal Qt 5.6.1 compiliert und es ging dann auch.
    Nur bei einer Sache konnte mir bisher keiner helfen. Ich möchte, dass meine Labels (die mit einem Widget unterlegt sind, welches ein Splashscreen ist und frameless) auch in Spielen immer als oberstes angezeigt werden.


    Mir wurde dann immer gesagt ich müsse dann ganz kompliziert die d3d10 Datei hacken und da i-was mit direct x inserten. Klingt für mich sehr umständlich und ich habe immer noch die Hoffnung, dass es einfacher geht, oder dass jemand sich die Mühe gemacht hat und eine lib geschrieben hat, über die man seine QWidgets über DirectX games legen kann.


    Kennst du dich damit aus??


    Ach ja meine genaue Implementierung von dem Overlay und welche Windowflags ich bei den labels gesetzt habe findest du hier:
    Files · master · C-Fu / qtTsOverlay · GitLab


    ==EDIT==


    mir ist gerade noch aufgefallen, dass meine Channellist nicht sortiert ist. Weißt du, wie ich die in der selben Reihenfolge bekomme wie im client dargestellt??

    Einmal editiert, zuletzt von GT-Anakin ()

  • Dieses Thema enthält 4 weitere Beiträge, die nur für registrierte Benutzer sichtbar sind, bitte registrieren Sie sich oder melden Sie sich an um diese lesen zu können.