{Update] Teamspeak3 ATHP Control

  • Hallo Liebe Forum User und Leser,

    ich wollte euch heute mal ein kleines Project von mir vorstellen an dem ich zzt. Arbeite.
    Gleich vorweg es ist noch im Alpha Stadion und ja ich weis es gibt ein Webinterface, das sehr gut ist, allerdings für einen Hoster ungeeignet und nicht immer sicher.

    Als TS3-Hoster hat man es nicht immer einfach, viele Virtuelle Server und alle lassen sich nur über die Telnet Console steuern.
    Also brauch man etwas um sich das ganze zu vereinfache, so das man die am meisten benötigten Grundfunktionen direkt ausführen lassen kann.
    Daher Kahm mir die Idee dieses Scriptes.

    Funktionen:

    • direkte Server Überwachung auf online/offline Status über Port
    • Virtuelle Server Konfigurieren (Max-Users, Port, Server-name)
    • User Befördern/bannen/kicken
    • Kommandozeile für eigene befehle
    • Virtuellen Server Erstellen/Löschen
    • erweiterte befehle

    Soviel zur vorerst erstellten Funktionsliste nun zum Script
    So ich hoffe es ist ausführlich beschrieben was das Programm am ende können soll und jeder kann verstehen was ich meine/machen will.
    die Gui ist zzt. noch recht klein, wird aber mit jedem Update vergrößert bis es die Endgröße erreicht hat.

    Und nein ich verwende keinen GUI-Creator wie Koda, ich schreibe das GUI komplett selber.

    Spoiler anzeigen
    [autoit][/autoit] [autoit][/autoit] [autoit]

    ;########################################
    ;# #
    ;# Autoit TS3 Server #
    ;# überwachung #
    ;# und Configuration #
    ;# #
    ;# Version 1.0.1 #
    ;# #
    ;# © Tigers-Corporation 2012 - 2013 #
    ;# #
    ;# #
    ;# Besten dank an Chesstiger und Name22 #
    ;# aus dem Autoit.de Forum #
    ;########################################

    [/autoit] [autoit][/autoit] [autoit]

    ; <==================== Icludes und Wrapperbefehle ====================>

    [/autoit] [autoit][/autoit] [autoit]

    #include <array.au3>
    #include <string.au3>
    #include <ts3.au3>
    #include <file.au3>
    #include <GUIConstants.au3>
    #include <GuiListView.au3>

    [/autoit] [autoit][/autoit] [autoit]

    ; <==================== variablen declaration und Gui erstellung ====================>

    [/autoit] [autoit][/autoit] [autoit]

    $version = IniRead("config.ini","Software Information","Version","")
    $breite = IniRead("config.ini","Gui Control Settings","Breite","")
    $hoehe = IniRead("config.ini","Gui Control Settings","Höhe","")

    [/autoit] [autoit][/autoit] [autoit]

    $TS3server = IniRead("config.ini","Serversettings","Servername","")
    $TS3port = IniRead("config.ini","Serversettings","Standartport","")
    $TS3admin = IniRead("config.ini","Serversettings","Benutzername","")
    $TS3passwort = IniRead("config.ini","Serversettings","Passwort","")

    [/autoit] [autoit][/autoit] [autoit]

    Global Const $iServerCount = _FileCountLines(@ScriptDir & '\serverliste.txt')

    [/autoit] [autoit][/autoit] [autoit][/autoit] [autoit]

    Global $aServerList[$iServerCount + 1][3] = [[$iServerCount]]
    Global $hFile_Serverlist = FileOpen(@ScriptDir & "\serverliste.txt")
    For $i = 1 To $aServerList[0][0]
    $aServerList[$i][0] = "ID-" & _Read_Server_id($hFile_Serverlist, $i) & " " & _Read_Server_Name($hFile_Serverlist, $i)
    Next
    FileClose($hFile_Serverlist)

    $hWnd_Server = guicreate("Teamspeak3 ATHP Control " & $version,$breite,$hoehe,500,250)
    $Btn_Update_Server = GUICtrlCreateButton("Update Server", 5, $hoehe - 45, 230, 20)
    $Btn_new_Gui = GUICtrlCreateButton("new gui", 5, $hoehe - 65, 230, 20)
    $ServerList = GUICtrlCreateList("", 10, 10, 200, 150)

    [/autoit] [autoit][/autoit] [autoit]

    For $i = 1 To $aServerList[0][0]
    $aServerList[$i][1] = GUICtrlSetData($ServerList, $aServerList[$i][0])
    Next

    [/autoit] [autoit][/autoit] [autoit]

    GUISetState()

    [/autoit] [autoit][/autoit] [autoit][/autoit] [autoit]

    ; <==================== Hauptschleife ====================>

    [/autoit] [autoit][/autoit] [autoit]

    While True
    Switch GUIGetMsg()
    Case $GUI_EVENT_CLOSE
    Exit
    Case $Btn_Update_Server
    If FileExists("serverliste.txt") Then FileDelete("serverliste.txt")
    _server_list_update($TS3server,$TS3port,$TS3admin,$TS3passwort)
    shellexecute("Teamspeak3 ATHP Control.exe")
    Exit
    Case $Btn_new_Gui
    $SelectedServer = GUICtrlRead($ServerList)
    if $SelectedServer > "" Then
    $SelectedServerID = _Read_selected_Server_ID($SelectedServer)
    $SelectedServerName = _Read_selected_Server($SelectedServer)
    _create_server_info($SelectedServerID,$SelectedServerName)
    EndIf
    EndSwitch
    WEnd

    [/autoit] [autoit][/autoit] [autoit][/autoit] [autoit][/autoit] [autoit][/autoit] [autoit][/autoit] [autoit]

    ; <==================== Funktionen ====================>

    [/autoit] [autoit][/autoit] [autoit]

    func _Read_Server_Name($hFile_Serverlist, $i)
    $namestring = FileReadLine($hFile_Serverlist, $i)
    $namearray = _StringBetween($namestring, "virtualserver_name=", " virtualserver_autostart")
    return $namearray[0]
    EndFunc

    [/autoit] [autoit][/autoit] [autoit]

    func _Read_Server_id($hFile_Serverlist, $i)
    $namestring = FileReadLine($hFile_Serverlist, $i)
    $idarray = _StringBetween($namestring, "virtualserver_id=", " virtualserver_port")
    return $idarray[0]
    EndFunc

    [/autoit] [autoit][/autoit] [autoit]

    func _Read_selected_Server_ID($serverdat)
    $namestring = $serverdat
    $idarray = _StringBetween($serverdat, "ID-", " ")
    return $idarray[0]
    EndFunc

    [/autoit] [autoit][/autoit] [autoit]

    func _Read_selected_Server($serverdat)
    $namestring = $serverdat
    $idarray = _StringBetween($serverdat, " ", "")
    return $idarray[0]
    EndFunc

    [/autoit] [autoit][/autoit] [autoit]

    func _server_list_update($TS3server,$TS3port,$TS3admin,$TS3passwort)
    _TS3connect($TS3server)
    _TS3login($TS3admin,$TS3passwort)
    _TS3serverlist()
    _TS3serverlist()
    _TS3logout()
    _TS3quit()
    EndFunc

    [/autoit] [autoit][/autoit] [autoit]

    Func _create_server_info($SelectedServerID,$SelectedServerName)
    Local $msg

    [/autoit] [autoit][/autoit] [autoit][/autoit] [autoit]

    guicreate($SelectedServerID & " " & $SelectedServerName,$breite,$hoehe,500,250)
    GUICtrlCreateLabel("Servername:",10,10,80,15)
    GUICtrlCreateLabel("Server ID:",10,25,80,15)
    GUICtrlCreateLabel("Max Users:",10,40,80,15)
    GUICtrlCreateLabel("test:",10,55,80,15)
    GUICtrlCreateLabel("Server Status:",10,70,80,15)

    Guictrlcreatelabel( $SelectedServerName,95,10,150,15)
    Guictrlcreatelabel( $SelectedServerID,95,25,150,15)
    Guictrlcreatelabel( "",95,40,150,15)
    Guictrlcreatelabel( "",95,55,150,15)
    Guictrlcreatelabel( "",95,70,150,15)

    GUISetState()

    [/autoit] [autoit][/autoit] [autoit]


    While 1
    $msg = GUIGetMsg()

    [/autoit] [autoit][/autoit] [autoit]

    If $msg = $GUI_EVENT_CLOSE Then ExitLoop
    WEnd
    GUIDelete()
    EndFunc

    [/autoit] [autoit][/autoit] [autoit][/autoit] [autoit][/autoit]

    Todo-Liste

    • Labels in Array ausgliedern - Check
    • Funktion für die Erstellung von Labels einfügen - Check
    • Lables anhand des Server namens erstellen - Check
    • Labels mit Server ID erweitern - Check
    • Button für Servliste Aktualisieren Implementieren und Aktivieren - Check
    • GUI Größenanpassung automatisieren
    • GUI Grafisch aufwerten, ggf. mit einer Listview - Check

    Edit 12.11.2012: Danke an Cheestiger, die include der Ping-Funktion wurde entfernt und die Funktion direkt in das Script Implementiert.
    Edit 13.11.2012: Danke an name22, komplette GUI wird nun per Array erstellt (hatte deinen code erst nicht verstanden, allerdings dank dem Array tut wusste ich nun was dein script genauer macht)

    • Server werden aus der "server.txt" geladen, anzahl der vorhandenen Server ergeben die anzahl der Labels.
    • Gui wurde vergrößert damit mehr Server platz haben.
    • Statusanzeigen werden korrekt gesetzt (Pending, Online, Offline)
    • Funktion Ping wurde ersetzt durch Funktion _UpdateServerList(ByRef $aList)
    • Button "Check Server" wird Disabeld während die Server Überprüft werden.


    Aktuelles Problem, wenn ich den Button "Check Server" drücke, dauert es meiner Meinung nach zulange bis er den Status "Disable" bekommt
    Kann mir da einer Helfen und sagen warum das so lange dauert??

    Edit 15.11.2012: Danke an Chip, seine ts3.au3 ist perfekt.

    • Server werden aus der "serverliste.txt" geladen, anzahl der vorhandenen Server ergeben die anzahl der Labels (wird durch Chip's ts.au3
      erstellt.
    • Labels werden mit dem Server Namen beschriftet. Server Name wird aus der serverliste.txt ausgelesen


    Zwar nicht viel geschafft heute, aber dafür das ich grade dinge tu von denen ich keine ahnung habe, finde ich ist es nicht schlecht gelaufen. Wie meinte Chesstiger doch so schön, Learning by Doing :D

    Edit 16.11.2012: Danke an Chesstiger, änderungen wurden weitgehenst bereits vorgenommen.

    • Labels entfernt, Server werden nun in einer Liste Aufgelistet die Selektiert werden kann
    • Selektierte Server lassen sich auf ID und Name getrennt aufzeigen
    • Bei Selektiertem Server wird bei Klick auf den Button New Gui ein neues Gui erstellt mit dem Namen und der ID des Servers
    • Auf anraten von Chesstiger wurden einige variablen umgeändert, bzw ihre Bezeichnung dahingehend abgeändert das sie nun verständlicher sind.


    Edit 18.11.2012: Einige Variablen umgeschrieben, eine Konfigurationsdatei eingefügt, Server Liste Aktualisierung geändert, zwar mehr oder weniger stümperhaft durch einen neustart des Programms, aber anders habe ich es nicht hinbekommen bisher.

    • Konfig Datei erstellt und eingefügt.
    • Server liste wird nun Aktualisiert und neu angezeigt

    Dateien

    „Für sein Volk zu sterben, ist ein großes Opfer.

    Doch es ist weit schwerer, für sein Volk zu leben.“

    9 Mal editiert, zuletzt von Icetiger (18. November 2012 um 14:42) aus folgendem Grund: Update des Quellcodes

  • Super danke dir, damit komme ich schon mal ein ganze stück weiter. Werde erst,al mein script mit deinen funktionen versehen und anpassen.

    „Für sein Volk zu sterben, ist ein großes Opfer.

    Doch es ist weit schwerer, für sein Volk zu leben.“

  • Kleines für die meisten unbedeutendes update eingefügt. Für mich eine Heidenarbeit aber es funktioniert schon mal.
    Danke an Chip für den Hinweis auf seine UDF.

    „Für sein Volk zu sterben, ist ein großes Opfer.

    Doch es ist weit schwerer, für sein Volk zu leben.“

  • So wieder ein neues Update, langsam fange ich an AutoIt zu mögen und es zu verstehen :D

    „Für sein Volk zu sterben, ist ein großes Opfer.

    Doch es ist weit schwerer, für sein Volk zu leben.“

  • So einige Funktionen geändert, habe das Script als exe inclusive der config Datei und der Server liste hochgeladen, sollte jemand das Script komplett testen wollen, muss er in der config nur den Server Name sowie Benutzername und Passwort ändern, da noch mein Interner TS-Server eingetragen ist.

    „Für sein Volk zu sterben, ist ein großes Opfer.

    Doch es ist weit schwerer, für sein Volk zu leben.“