Hi,
so neues Projekt von mir. Diesemal ein TS3-Adminclient zur Verwaltung von vservern eines TS3-Servers. Aktuell braucht man noch einen VOLLEN Serveradminaccount, ein vserver-Account reicht aktuell nicht, kommt aber noch.
Aktuelle Features:
- Anzeige von Server, Uptime und aktuellen Usern auf den Servern
- Starten/Stoppen von Servern
- Löschen von Servern
- Erstellen von Servern
- Log anzeige
Todo:
Alles was möglich ist im TS3, also Channels erstellen, gruppen erstellen, user verschieben, kicken, Template von Channelstruktur speichern um diese schnell zu switchen usw.
Spoiler anzeigen
#include <ts3.au3>
#include <String.au3>
#include <GuiListView.au3>
#include <GuiButton.au3>
#include <WindowsConstants.au3>
#include <ListViewConstants.au3>
#include <EditConstants.au3>
#include <GUIConstantsEx.au3>
#include <MenuConstants.au3>
#include <GuiListBox.au3>
GUIRegisterMsg($WM_SYSCOMMAND, "WM_SYSCOMMAND")
[/autoit] [autoit][/autoit] [autoit][/autoit] [autoit]#region ### START Koda GUI section ### Form=
$loginform = GUICreate("TS3-Admin Login", 272, 149, 192, 124)
$serverinput = GUICtrlCreateInput("", 80, 8, 177, 26)
GUICtrlSetFont(-1, 10, 400, 0, "Arial")
$serverlable = GUICtrlCreateLabel("Server:", 8, 8, 54, 22)
GUICtrlSetFont(-1, 10, 400, 0, "Arial")
$userinput = GUICtrlCreateInput("", 80, 43, 177, 26)
GUICtrlSetFont(-1, 10, 400, 0, "Arial")
$userlable = GUICtrlCreateLabel("User:", 8, 43, 41, 22)
GUICtrlSetFont(-1, 10, 400, 0, "Arial")
$passwortinput = GUICtrlCreateInput("", 82, 77, 177, 26)
GUICtrlSetFont(-1, 10, 400, 0, "Arial")
$passwortlable = GUICtrlCreateLabel("Passwort:", 10, 77, 73, 22)
GUICtrlSetFont(-1, 10, 400, 0, "Arial")
$loginbutton = GUICtrlCreateButton("Login", 80, 112, 75, 25)
GUISetState(@SW_SHOW)
#endregion ### END Koda GUI section ###
#region ### START Koda GUI section ### Form=
$vserverlistform = GUICreate("TS3-Admin Serverliste", 613, 315, 192, 124)
$vserverlistview = GUICtrlCreateListView("ID|Name|Port|Status|Online|Max Clients|Uptime", 8, 8, 594, 262, BitOR($LVS_NOSORTHEADER, $LVS_SINGLESEL, $LVS_SHOWSELALWAYS))
GUICtrlSetFont(-1, 10, 400, 0, "Arial")
$vserverstartstopbutton = GUICtrlCreateButton("Start", 8, 280, 75, 25)
GUICtrlSetFont(-1, 10, 400, 0, "Arial")
$vservereditbutton = GUICtrlCreateButton("Bearbeiten", 88, 280, 75, 25)
GUICtrlSetFont(-1, 10, 400, 0, "Arial")
$vservernewbutton = GUICtrlCreateButton("Neu", 168, 280, 75, 25)
GUICtrlSetFont(-1, 10, 400, 0, "Arial")
$vserverdeletebutton = GUICtrlCreateButton("Löschen", 248, 280, 75, 25)
GUICtrlSetFont(-1, 10, 400, 0, "Arial")
GUISetState(@SW_HIDE)
#endregion ### END Koda GUI section ###
#region ### START Koda GUI section ### Form=c:\users\error\desktop\form1.kxf
$serverneuform = GUICreate("TS3-Admin Server erstellen", 316, 276, 230, 143)
$Servername = GUICtrlCreateLabel("Servername", 8, 8, 72, 20)
GUICtrlSetFont(-1, 10, 400, 0, "Arial")
$servernameedit = GUICtrlCreateInput("", 8, 32, 297, 24)
GUICtrlSetFont(-1, 10, 400, 0, "Arial")
$Willkommensnachricht = GUICtrlCreateLabel("Willkommensnachricht", 8, 64, 136, 20)
GUICtrlSetFont(-1, 10, 400, 0, "Arial")
$willkommenedit = GUICtrlCreateInput("", 8, 88, 297, 24)
GUICtrlSetFont(-1, 10, 400, 0, "Arial")
$maxClient = GUICtrlCreateLabel("maximale Clients", 8, 120, 104, 20)
GUICtrlSetFont(-1, 10, 400, 0, "Arial")
$maxclientsedit = GUICtrlCreateInput("", 8, 150, 297, 24, $ES_NUMBER)
GUICtrlSetFont(-1, 10, 400, 0, "Arial")
$Serverpasswort = GUICtrlCreateLabel("Serverpasswort", 8, 181, 104, 20)
GUICtrlSetFont(-1, 10, 400, 0, "Arial")
$passwortedit = GUICtrlCreateInput("", 8, 206, 297, 24)
GUICtrlSetFont(-1, 10, 400, 0, "Arial")
$servererstellenbutton = GUICtrlCreateButton("erstellen", 8, 240, 75, 25)
GUICtrlSetFont(-1, 10, 400, 0, "Arial")
GUISetState(@SW_HIDE)
#endregion ### END Koda GUI section ###
#region ### START Koda GUI section ### Form=
$logform = GUICreate("TS3 Admin - Log", 760, 236, 204, 549)
$logedit = GUICtrlCreateList("", 8, 8, 737, 217)
GUISetState(@SW_SHOW)
#endregion ### END Koda GUI section ###
Dim $vserverliststate = 0
Dim $vserverlistselected = -1
While 1
$nMsg = GUIGetMsg()
Switch $nMsg
Case $GUI_EVENT_CLOSE
Exit
Case $loginbutton
login()
Case $vserverstartstopbutton
GUISetState(@SW_HIDE, $vserverlistform)
startstop()
GUISetState(@SW_SHOW, $vserverlistform)
Case $vserverdeletebutton
GUISetState(@SW_HIDE, $vserverlistform)
serverloeschen()
GUISetState(@SW_SHOW, $vserverlistform)
Case $vservernewbutton
GUISetState(@SW_HIDE, $vserverlistform)
GUISetState(@SW_SHOW, $serverneuform)
Case $servererstellenbutton
GUISetState(@SW_HIDE, $serverneuform)
If GUICtrlRead($servernameedit) = "" Then
MsgBox(16, "TS3-Admin Servernamen", "Servername nicht angegeben!")
GUISetState(@SW_SHOW, $serverneuform)
Else
serverneu(GUICtrlRead($servernameedit), GUICtrlRead($willkommenedit), GUICtrlRead($maxclientsedit), GUICtrlRead($passwortedit))
GUICtrlSetData($servernameedit, "")
GUICtrlSetData($willkommenedit, "")
GUICtrlSetData($maxclientsedit, "")
GUICtrlSetData($passwortedit, "")
serverliste()
GUISetState(@SW_SHOW, $vserverlistform)
EndIf
EndSwitch
If $vserverliststate = 1 Then
serverlistselect()
EndIf
WEnd
Func logs($text)
$timeaktuell = StringFormat("[%i.%i.%i, %i:%i:%i]", @MDAY, @MON, @YEAR, @HOUR, @MIN, @SEC)
_GUICtrlListBox_InsertString($logedit, $timeaktuell & " " & $text, 0)
EndFunc ;==>logs
Func serverneu($name, $willkomm, $clients, $pass)
logs("Funktion start: serverneu()")
Dim $prop
[/autoit] [autoit][/autoit] [autoit]If $willkomm <> "" Then
$prop = "virtualserver_welcomemessage=" & StringReplace($willkomm, " ", "\s") & " "
EndIf
If $clients > 0 Then
$prop = $prop & "virtualserver_maxclients=" & $clients & " "
Else
$prop = $prop & "virtualserver_maxclients=32" & " "
EndIf
If $pass <> "" Then
$prop = $prop & "virtualserver_password=" & $pass & " "
EndIf
SplashTextOn("TS3-Admin", "Server wird erstellt...", 200, 50)
GUICtrlSetFont(-1, 10, 400, 0, "Arial")
$result = _TS3servercreate($name, $prop)
logs("_TS3servercreate: " & $result)
[/autoit] [autoit][/autoit] [autoit]If StringInStr($result, "token") > 0 Then
$token = _StringBetween($result, "token=", " virtualserver")
$port = _StringBetween($result, "virtualserver_port=", "")
MsgBox(0, "", $token[0] & " + " & $port[0])
Else
SplashOff()
MsgBox(48, "", $result)
$i = 1
EndIf
serverliste()
SplashOff()
logs("Funktion stop: serverneu()")
EndFunc ;==>serverneu
Func serverloeschen()
logs("Funktion start: serverloeschen()")
SplashTextOn("TS3-Admin", "Server wird gelöscht...", 200, 50)
GUICtrlSetFont(-1, 10, 400, 0, "Arial")
$vserverlistarray = _GUICtrlListView_GetItemTextArray($vserverlistview, $vserverlistselected)
$result = _TS3serverstop($vserverlistarray[1])
logs("_TS3serverstop: " & $result)
Sleep(2000)
$result1 = _TS3serverdelete($vserverlistarray[1])
logs("_TS3serverdelete: " & $result1)
Sleep(2000)
serverliste()
SplashOff()
logs("Funktion stop: serverloeschen()")
EndFunc ;==>serverloeschen
Func startstop()
logs("Funktion start: startstop()")
$vserverlistarray = _GUICtrlListView_GetItemTextArray($vserverlistview, $vserverlistselected)
_GUICtrlButton_Enable($vserverstartstopbutton, False)
If GUICtrlRead($vserverstartstopbutton) = "Stop" Then
SplashTextOn("TS3-Admin", "Server wird gestoppt...", 200, 50)
GUICtrlSetFont(-1, 10, 400, 0, "Arial")
$result = _TS3serverstop($vserverlistarray[1])
logs("_TS3serverstop: " & $result)
GUICtrlSetData($vserverstartstopbutton, "Start")
Else
SplashTextOn("TS3-Admin", "Server wird gestartet...", 200, 50)
GUICtrlSetFont(-1, 10, 400, 0, "Arial")
$result = _TS3serverstart($vserverlistarray[1])
logs("_TS3serverstart: " & $result)
GUICtrlSetData($vserverstartstopbutton, "Stop")
EndIf
Sleep(2000)
serverliste()
SplashOff()
_GUICtrlButton_Enable($vserverstartstopbutton, True)
logs("Funktion stop: startstop()")
EndFunc ;==>startstop
Func serverlistselect()
If _GUICtrlListView_GetSelectionMark($vserverlistview) <> -1 Then
If $vserverlistselected <> _GUICtrlListView_GetSelectionMark($vserverlistview) Then
$vserverlistselected = _GUICtrlListView_GetSelectionMark($vserverlistview)
$vserverlistarray = _GUICtrlListView_GetItemTextArray($vserverlistview, $vserverlistselected)
If $vserverlistarray[4] = "online" Then
GUICtrlSetData($vserverstartstopbutton, "Stop")
Else
GUICtrlSetData($vserverstartstopbutton, "Start")
EndIf
EndIf
EndIf
EndFunc ;==>serverlistselect
Func login()
logs("Funktion start: login()")
$connectrueck = _TS3connect(GUICtrlRead($serverinput))
logs("_TS3connect: " & $connectrueck)
If $connectrueck = 0 Then
MsgBox(48, "ERROR", "Server nicht erreichbar")
logs("Funktion stop: login()")
Return
EndIf
If @error Then
If @error = 1 Then
MsgBox(48, "ERROR", "falsche IP")
ElseIf @error = 2 Then
MsgBox(48, "ERROR", "falscher Port")
Else
MsgBox(48, "Windows API WSAGetError", @error)
EndIf
Else
$loginrueck = _TS3login(GUICtrlRead($userinput), GUICtrlRead($passwortinput))
logs("_TS3login: " & $loginrueck)
If $loginrueck > 1 Then
_GUICtrlButton_Enable($loginbutton, False)
For $i = $loginrueck To 0 Step -1
GUICtrlSetData($loginbutton, "Ban: " & $i)
Sleep(1000)
Next
GUICtrlSetData($loginbutton, "Login")
_GUICtrlButton_Enable($loginbutton, True)
ElseIf $loginrueck = 1 Then
serverliste()
GUISetState(@SW_HIDE, $loginform)
$vserverliststate = 1
GUISetState(@SW_SHOW, $vserverlistform)
Else
MsgBox(48, "ERROR", $loginrueck)
EndIf
EndIf
logs("Funktion stop: login()")
EndFunc ;==>login
Func serverliste()
logs("Funktion start: serverliste()")
;~ _GUICtrlListView_BeginUpdate($vserverlistview)
[/autoit] [autoit][/autoit] [autoit]_GUICtrlButton_Enable($vserverstartstopbutton, False)
_GUICtrlButton_Enable($vservereditbutton, False)
_GUICtrlButton_Enable($vservernewbutton, False)
_GUICtrlButton_Enable($vserverdeletebutton, False)
_GUICtrlListView_DeleteAllItems($vserverlistview)
[/autoit] [autoit][/autoit] [autoit]_GUICtrlListView_EnableGroupView($vserverlistview)
_GUICtrlListView_InsertGroup($vserverlistview, -1, 1, "online")
_GUICtrlListView_InsertGroup($vserverlistview, -1, 2, "offline")
$i = 0
$vserverlist = ""
Do
$vserverlist = _TS3serverlist()
logs("_TS3serverlist: " & $vserverlist)
If StringInStr($vserverlist, "virtualserver") > 0 Then
$i = 1
ElseIf StringInStr($vserverlist, "insufficent client permissions") > 0 Then
MsgBox(48,"","Kein Serveradminaccount")
;~ InputBox("Kein Superadminaccount", "Dieser Account ist kein Superadmin. Gib den Port des zu administrierenden Servers an.")
ElseIf StringInStr($vserverlist, "database empty result set") > 0 Then
_GUICtrlButton_Enable($vservernewbutton, True)
Return
EndIf
Until $i = 1
$vserverlist = StringSplit($vserverlist, "|", 2)
$count = 0
For $vserver In $vserverlist
$vserverid = _StringBetween($vserver, "virtualserver_id=", " virtualserver")
$vservername = _StringBetween($vserver, "virtualserver_name=", " virtualserver")
$vservername = StringReplace($vservername[0], "\s", " ")
$vserverport = _StringBetween($vserver, "virtualserver_port=", " virtualserver")
$vserverstatus = _StringBetween($vserver, "virtualserver_status=", " virtualserver")
If $vserverstatus[0] = "online" Then
$vserveronlinearray = _StringBetween($vserver, "virtualserver_clientsonline=", " virtualserver")
$vserveronline = $vserveronlinearray[0]
$vserverclientsarray = _StringBetween($vserver, "virtualserver_maxclients=", " virtualserver")
$vserverclients = $vserverclientsarray[0]
$vserveruptimearray = _StringBetween($vserver, "virtualserver_uptime=", " virtualserver")
$Hour = Int(($vserveruptimearray[0] / 60) / 60)
$Mins = Int(($vserveruptimearray[0] - ($Hour * 60 * 60)) / 60)
$Secs = $vserveruptimearray[0] - ($Mins * 60) - ($Hour * 60 * 60)
$Day = Int((($vserveruptimearray[0] / 60) / 60) / 24)
$Hour = Int((($vserveruptimearray[0] - ((($Day * 24) * 60) * 60)) / 60) / 60)
$Mins = Int(($vserveruptimearray[0] - ((($Day * 24) * 60) * 60) - (($Hour * 60) * 60)) / 60)
$Secs = $vserveruptimearray[0] - ((($Day * 24) * 60) * 60) - (($Hour * 60) * 60) - ($Mins * 60)
$vserveruptime = StringFormat("%i Tage, %02i:%02i:%02i", $Day, $Hour, $Mins, $Secs)
Else
$vserveronline = "NA"
$vserverclients = "NA"
$vserveruptime = "NA"
EndIf
$itemid = GUICtrlCreateListViewItem($vserverid[0] & "|" & $vservername & "|" & $vserverport[0] & "|" & $vserverstatus[0] & "|" & $vserveronline & "|" & $vserverclients & "|" & $vserveruptime, $vserverlistview)
[/autoit] [autoit][/autoit] [autoit]If $vserverstatus[0] = "offline" Then
_GUICtrlListView_SetItemGroupID($vserverlistview, $count, 2)
GUICtrlSetColor($itemid, 0xCC0000)
Else
_GUICtrlListView_SetItemGroupID($vserverlistview, $count, 1)
EndIf
$count = $count + 1
Next
_GUICtrlButton_Enable($vserverstartstopbutton, True)
_GUICtrlButton_Enable($vservereditbutton, True)
_GUICtrlButton_Enable($vservernewbutton, True)
_GUICtrlButton_Enable($vserverdeletebutton, True)
logs("Funktion stop: serverliste()")
EndFunc ;==>serverliste
Func WM_SYSCOMMAND($hGUI, $iMsg, $wParam = 0, $lParam = 0)
If $wParam = $SC_CLOSE Then Exit
Return $GUI_RUNDEFMSG
EndFunc ;==>WM_SYSCOMMAND
Zusätzlich wird noch die neue Version meiner TS3-UDF benötigt. Siehe Link in meiner Sig.