TeamSpeak Bot - Erweiterbar durch Plugins

  • Hallo liebe Community,

    ich habe mich mal wieder etwas mit der Bot Programmierung beschäftigt und dieses coole Projekt gefunden: https://github.com/Murgeye/teamspeak3-python-bot


    Dieses Projekt wollte ich euch einfach mal vorstellen, denn das verdient einfach Aufmerksamkeit. Es ist schon etwas älter, aber es funktioniert noch heute problemlos.


    Ich habe das Projekt geforkt, ein paar Dinge umgebaut, optimiert und den Funktionsumfang ausgebaut. Außerdem habe ich ein paar Versionen released, damit ihr eine bestimmte Version nutzen und testen könnt: https://github.com/Sebi94nbg/teamspeak3-python-bot


    Was macht den Bot besonders?

    • Funktioniert mit TeamSpeak 3 und 5 Servern (letzteres ist Stand heute noch immer in der Beta Phase, aber die aktuellen Funktionalitäten sollten weiterhin funktionieren)
    • Der Quellcode basiert auf Python
    • Der Bot unterstützt Threading
      • Dadurch läuft der Bot insgesamt schneller, vor allem desto mehr CPUs der Server hat
      • Die einzelnen Plugins können dadurch parallel laufen und blockieren sich nicht gegenseitig
      • Effiziente Nutzung der Hardware Ressourcen (z.B. CPU und RAM)
    • Der Bot unterstützt die (Text/Channel/Server) Events vom TeamSpeak Server
      • Plugins können dadurch z.B. sofort auf TeamSpeak Server Events reagieren und müssen nicht auf einen Schleifendurchlauf warten, der beispielweise "nur" jede Sekunde oder alle paar Sekunden ausgeführt wird.
      • Man kann z.B. sofort einen Channel erstellen, wenn ein Client einen bestimmten Channel betritt. Man erspart sich dadurch die Schleife (while true), welche alle X Sekunden prüft, ob jemand in einem Raum ist. Dadurch hat man keinen bzw. deutlich weniger Verzögerung in der Funktionalität des Bots.

    Ich habe das ganze zu Test-Zwecken lokal in einem Docker Container installiert, konfiguriert und getestet.


    Der Docker Container hat folgende Specs:

    Code
    $ cat /etc/debian_version
    11.5
    Code
    $ lscpu | grep -E "^(Model name|CPU\(s\)|CPU MHz)"
    CPU(s):                          16
    Model name:                      Intel(R) Core(TM) i9-9900KF CPU @ 3.60GHz
    CPU MHz:                         3600.010
    Code
    $ lsmem
    RANGE                                  SIZE  STATE REMOVABLE  BLOCK
    0x0000000000000000-0x00000000f7ffffff  3.9G online       yes   0-30
    0x0000000100000000-0x0000000407ffffff 12.1G online       yes 32-128
    
    Memory block size:       128M
    Total online memory:      16G
    Total offline memory:      0B
    Code
    $ python3 --version
    Python 3.11.0

    Während der Tests hatte der verbundene TeamSpeak Server folgende Eckdaten:

    • Server Version 3.13.7 (auf Linux)
    • Verbundene Clients: 9
    • Anzahl vorhandener Channels: 48

    Folgende Plugins waren für den Bot aktiviert und konfiguriert:

    Code
    [Plugins]
    UtilCommand: utils
    AfkMover: afk_mover.main
    IdleMover: idle_mover.main
    KickInactiveClients: kick_inactive_clients.main
    BadNickname: bad_nickname.main
    TwitchLive: twitch_live.main
    PrivateChannelManager: private_channel_manager.main

    Der Bot nutzte während der Tests folgende Hardware Ressourcen:

    Code
    $ docker stats thirsty_pare
    CONTAINER ID   NAME           CPU %     MEM USAGE / LIMIT     MEM %     NET I/O          BLOCK I/O   PIDS
    8e0e600e883e   thirsty_pare   0.83%     95.97MiB / 15.59GiB   0.60%     197MB / 28.3MB   0B / 0B     11

    Pi-mal-Daumen sollte man also mit ca. 20 MB pro geladenes Plugin für den Arbeitsspeicher rechnen.


    Mich persönlich würde interessieren, wie die Statistiken / Werte aussehen, wenn man den Bot auf einem größeren TeamSpeak Server mit z.B. +50 Clients und 100 Channels verwendet. Falls ihr also ein paar Werte hierzu habt: Gerne her damit. Teilt eure Erfahrungen. :S


    Der Bot selbst läuft an sich super. Konnte keine Probleme feststellen. Und da die Funktionalitäten auf Plugins aufbauen, ist er auch jederzeit einfach und recht schnell erweiterbar, wenn man etwas Python versteht. :)


    Falls ihr Interesse habt, könnt ihr euch den Bot gerne selbst einmal installieren, einrichten/konfigurieren und testen:

    Falls ihr Bugs oder Feature Requests habt, würde ich euch bitten, diese im entsprechend Github Projekt als Issue zu melden.


    Allgemeine Fragen hierzu beantworte ich euch gerne hier im Forum, soweit ich das kann. :)

    Viele Grüße,
    Sebbo

    ---

    DevOps Engineer <3

  • Sebbo

    Approved the thread.
  • Es gibt inzwischen wieder ein paar neue Funktionen (Plugins):

    PluginBeschreibung
    switch_supporter_channel_statusSchließe und öffne einen Supporter Channel automatisch, je nachdem ob Supporter online und anwesend sind oder nicht.
    inform_team_about_newbieInformiere das Team per Poke Nachricht, sobald neue Clients auf dem Server sind.
    channel_managerErstelle automatisch neue Channels, um z.B. immer einen freien "Talk" Channel zu haben. Gibt es zu viele leere Channel, werden diese automatisch wieder aufgeräumt (gelöscht).

    Viele Grüße,
    Sebbo

    ---

    DevOps Engineer <3

  • Die neue Version 1.5.0 erlaubt es jetzt auch, bestimmte Channels beim AFK und IDLE Mover auszuschließen, sodass diese nicht mehr in den AFK Channel verschoben werden. Zusätzlich habe ich noch ein paar kleinere Performance Optimierungen an den beiden Plugins vorgenommen.


    Der "Private Channel Manager" heißt jetzt "Channel Requester" und unterstützt die Konfiguration mehrerer solcher Channels - nicht nur einen, wie bisher. Ebenso kann man jetzt alle offiziellen Channel Properties individuell einstellen.

    Viele Grüße,
    Sebbo

    ---

    DevOps Engineer <3

  • Nach weiteren Tests und durch den produktiven Einsatz bei den ersten Communitys, gibt es inzwischen ein paar neuere Versionen.


    Wie immer findet ihr die Release Notes hier: https://github.com/Sebi94nbg/teamspeak3-python-bot/releases


    v1.5.1:

    • Die README wurde optimiert und weiter ausgebaut, damit es noch einfacher ist, den Bot einzurichten, zu bedienen und zu aktualisieren
    • Das inform_team_about_newbie Plugin loggt jetzt initial mit, welche Servergruppen für die definierten Teams gefunden wurden, damit man sicherstellen kann, dass alle entsprechend gepoket werden
    • Kleinere Bugfixes und Optimierungen

    v1.5.2:

    • Die Plugins channel_manager und channel_requester unterstützen zusätzlich das setzen aller offiziellen Channel Rechte (z.B. Benötigte Betreten Power)
    • Das channel_requester Plugin unterstützt jetzt das konfigurieren von eigenen Channel Namen mit Variablen

    v1.5.3:

    • Das inform_team_about_newbie Plugin unterstützt jetzt Variablen in den Poke Nachrichten
    • Das inform_team_about_newbie Plugin unterstützt jetzt eine optionale Verzögerung beim verschieben des Clients, damit diese z.B. die Ansagen eines "Willkommen-Bot" erst zu Ende anhören können

    Übrigens: Wenn du den Bot auch nutzen willst, aber nicht weist, wie du ihn einrichten und konfigurieren kannst / musst, kann ich dir gerne dabei helfen und dir einmal alles zeigen. Melde dich hierzu einfach kurz per private Nachricht bei mir. :)

    Viele Grüße,
    Sebbo

    ---

    DevOps Engineer <3