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 TS3 Server #
;# überwachung #
;# und Configuration #
;# #
;# Version 1.0.1 #
;# #
;# © Tigers-Corporation 2012 - 2013 #
;# #
;# #
;# Besten dank an Chesstiger und Name22 #
;# aus dem Autoit.de Forum #
;########################################
; <==================== 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>
; <==================== 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","")
$TS3server = IniRead("config.ini","Serversettings","Servername","")
$TS3port = IniRead("config.ini","Serversettings","Standartport","")
$TS3admin = IniRead("config.ini","Serversettings","Benutzername","")
$TS3passwort = IniRead("config.ini","Serversettings","Passwort","")
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)
For $i = 1 To $aServerList[0][0]
$aServerList[$i][1] = GUICtrlSetData($ServerList, $aServerList[$i][0])
Next
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
; <==================== 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
func _Read_Server_id($hFile_Serverlist, $i)
$namestring = FileReadLine($hFile_Serverlist, $i)
$idarray = _StringBetween($namestring, "virtualserver_id=", " virtualserver_port")
return $idarray[0]
EndFunc
func _Read_selected_Server_ID($serverdat)
$namestring = $serverdat
$idarray = _StringBetween($serverdat, "ID-", " ")
return $idarray[0]
EndFunc
func _Read_selected_Server($serverdat)
$namestring = $serverdat
$idarray = _StringBetween($serverdat, " ", "")
return $idarray[0]
EndFunc
func _server_list_update($TS3server,$TS3port,$TS3admin,$TS3passwort)
_TS3connect($TS3server)
_TS3login($TS3admin,$TS3passwort)
_TS3serverlist()
_TS3serverlist()
_TS3logout()
_TS3quit()
EndFunc
Func _create_server_info($SelectedServerID,$SelectedServerName)
Local $msg
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()
While 1
$msg = GUIGetMsg()
If $msg = $GUI_EVENT_CLOSE Then ExitLoop
WEnd
GUIDelete()
EndFunc
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
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