Beiträge von master_d

    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.

    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.

    Ich sehe schon im späteren Verlauf Hoster mit "zertifizierten Administratoren" werben ;)


    Und ja, man sollte sich genau überlegen, welchen Aufbau man bei einem solchen System bevorzugt.
    Aus meiner Sicht würde hier auf jeden Fall eine Virtualisierung Sinn machen, wenn auch eigenhändig kontrolliert.
    Man miete einen "Dedizierten Server", und nutze eine gut funktionierende Container-Virtualisierung, einfach um eine entsprechende Ressourcentrennung zu haben.
    Man trenne zwischen:
    Webserver
    DB-Server (MariaDB) für Web/TS3
    X TS3-Instanzen (Schadensbegrenzung)


    Vor allem verbessert es die Wartungsmöglichkeiten der Systeme. Aber ebenso kann man die Ressourcen der einzelnen Container einschränken, und so zumindest Teile der Infrastruktur am Leben erhalten.

    Selbige Funktion wurde auch bereits im offiziellen Forum diskutiert und soll nach dortiger Aussage "derzeit nicht/niemals" eingebaut werden.


    Es gibt nur die Möglichkeit mit Whisper-Listen zu arbeiten.


    Sollte dieses Feature allerdings essentiell sein, wäre vielleicht ein Umstieg zu Mumble eine Möglichkeit, denn dort gibt es die hier genannte Funktion des "Channel-Linkings" durchaus.

    Zitat

    Laden Sie das Webinterface von dieser Seite, etwas weiter untern,
    herunter. Nachdem Sie das Webinterface heruntergeladen haben laden sie
    es auf Ihren Webspace hoch und geben
    den Order "install" 777 Zugriffsrechte.


    Also jetzt mal ehrlich, soll das wirklich ernst sein??
    "chmod 777" ist der meistgenutzte Befehl von Personen ohne Ahnung vom Berechtigungssystem, und nur im Notfall zu verwenden.


    Hier bitte mal nachprüfen, ob das wirklich nötig ist, und dann bitte anpassen.

    Die Frage ist hier, ob dieses Backup ausreichend ist, oder ggf. der Inhalt der SQLite-DB nochmals extra gesichert werden sollte.
    Dann müsste man noch ein paar Befehle per Telnet versenden, um die entsprechenden Ausgaben zu erhalten.


    Aber ansonsten durchaus funktional.

    Die einfache Variante wäre ein Webinterface, welches die Konfiguration bietet, und eine Änderung nur in gewissen Regeln durchführen kann.
    Dazu wäre dann einfach eine Änderung der entsprechenden Einstellungen per Client zu verbieten.


    Damit wäre es deinen Nutzern noch immer möglich, die Slot-Anzahl anpassen zu können, aber dabei auch die von dir gesetzten Grenzen beachten zu müssen.

    Das schöne am OpenSource-Gedanken ist der Gedanke selbst.
    Alles andere ist leider niemals in den Köpfen der Menschen angekommen.


    Auch ich bin bereits öfters über das Problem gestolpert, und bin dabei als Mitglied der lokalen Hacker-/Basterszene durchaus dem OpenSource näher als so manch anderer hier. Aber auch ich mache mir des öfteren Gedanken, ob ich gewisse Sachen direkt zur Verfügung stellen möchte.
    Bei meinem Webprojekten nutze ich mittlerweile ein eigenes Framework, welches mir mein Arbeiten weitgehend erleichtert, bei dem ich sage, es soll auch anderen Personen helfen.
    Die Applikationen selbst jedoch sind mir zumindest derzeit zu wichtig, um sie einfach jedem in den Hals stopfen zu müssen. So lange die Nutzer nicht den entsprechenden Respekt gegenüber denen an den Tag legen, die mit ihrer Zeit entsprechende Systeme überhaupt möglich machen, wird der OpenSource-Gedanke immer ein Schattendasein fristen.

    Die Frage ist eher, wie da eine Funktion sein kann, wenn kein Traffic erkennbar ist.
    Kann aber auch ein Caching-Problem sein, dass ich das einfach nicht mitbekommen habe.


    Was die Position der PHP.ini angeht, so stellt sich die Frage, welcher Webserver (Software) eingesetzt wird, und wie dieser Konfiguriert ist.


    Pfad ist: "/etc/php5/<methode>/php.ini"

    Zumindest in der aktuellsten "Beta" kann ich nichts finden, was auch eine "Blacklist-Funktion" hindeutet.


    Daher gehe ich eher von einem anderen Problem aus.
    Da die meisten Systeme entsprechende Fehlermeldungen nicht anzeigen, um keine Probleme / Bugs zu offenbaren, solltest du einmal die Einstellungen für PHP anpassen.


    Die Einstellungen in der PHP.ini sollten dafür in etwa so angepasst werden:
    log_errors = On
    error_log = <Pfad zur Log-Datei>


    Danach sollten eventuelle Fehler der Applikation in der unter "error_log" definierten Text-Datei erkennbar sein.

    Dann empfehle ich allgemeine Dokumentationen zur gewählten Programmiersprache.


    Ich möchte mit meinen Aussagen niemanden im speziellen vorführen, aber aufgrund meiner Erfahrungen muss ich sagen, dass man zumindest über Grundkenntnisse der Programmierung verfügen sollte, oder aber sich jemanden zu suchen, der das gewünschte Projekt umsetzen kann.
    Es gibt bereits genug "Bastelware", welche jemand irgendwann einmal auf solche Art "zusammengewürfelt" hat.


    Aber als weiterer Hinweis möchte ich auf folgende Informationsseiten verweisen:
    VB.Net - TextBox Control
    VB.Net - Button Control


    Darin wird sowohl die Benutzung von Buttons, als auch Textboxen erläutert. Dort einfach bei dem Button auf das "onClick"-Event achten, und danach per "Textbox.Text" den entsprechenden Textwert setzen.

    "telnet localhost 25639"


    Dann einfach die entsprechenden Befehle rein senden.
    "clientlist", um alle Informationen zu den Clients im aktuellen Channel zu erhalten.


    Weitere Befehle können mit "help" angezeigt werden, und können auch direkt getestet werden.


    Was die Übergabe an das Formular angeht, so muss einfach ein "externer Prozess" gestartet werden, der die Telnet-Verbindung darstellt, und dann die entsprechenden Ausgaben verarbeitet.
    Beispiel für den Quellcode könnte man unter folgendem Link finden:
    Text aus VB Programm an TeamSpeak Server senden

    Das Problem ist, dass du mit den Servergruppen nur eine Hierarchie abbilden kannst, daher können alle Personen mit entsprechenden Rechten in alle Channel, die entsprechend niedrigere Rechte erfordern.


    Der einzige mir bekannte Ansatz, um Gruppen vollständig zu trennen, wäre der Einsatz von Channelgruppen.
    [Multi-Group] Rechtestrukturen im Einsatz
    Darin einmal genauer erläutert, wie so etwas funktioniert.

    Es ist immer besser, sie nicht im "sichtbaren" Webroot zu lagern, da diese dann angezeigt werden können.
    Es erwächst daraus aber keine explizite Gefahr, wenn in den Scripten keine Zugangsdaten sichtbar sind, die potentiell missbraucht werden könnten.


    Everything within here can be configured within sysctl.conf


    You have to change the syntax to something like this:

    Code
    net.ipv4.route.max_size = 18192


    Also i have to mention something, that most administrators does not really understand.

    Code
    # Block ICMP-Requests is only a way to frustrate yourself, because you can not check easily, if your server is alive. Persons, who want to check or invade your server will only check the services, but no ICMP. So:
    net.ipv4.icmp_echo_ignore_all = 0
    # Ignore Broadcasts is not a problem, but as mentioned above, it is not really a security-feature.
    net.ipv4.icmp_echo_ignore_broadcasts = 0


    If you want to restrict the ICMP-Messages, use iptables to restrict it to the parts you really need, but not block them globally.
    This is only my own point of view, other persons may think other ways round.

    Bei den meisten unter Windows gebräuchlichen Dekompressionsprogrammen ist kein Problem mit GZip festzustellen.


    Und daher nochmal, es soll kein "Archiv" erstellt werden, sondern die einzelne Log-Datei komprimiert werden.


    Dies wäre ein Beispielablauf, wie er unter Linux mit Logrotate durchgeführt wird.

    Zitat

    bot.log -> bot.log.1 -> bot.log.2.gz -> bot.log.3.gz -> etc.
    client.log -> client.log.1 -> client.log.2.gz -> client.log.3.gz -> etc.
    system.log -> system.log.1 -> system.log.2.gz -> system.log.3.gz -> etc.


    Dabei wird dann einfach ab der Zahl x das entsprechende Log entfernt, statt umbenannt.


    Nur so als Information:
    PHP: gzencode - Manual