Ich möchte euch zeigen, wie ihr eine simple Update Funktion für eure Bots erstellt. Seid nicht zu hart zu mir, weil das mein erstes Tutorial ist
Als bevor wir mit den Code anfangen, werde ich euch das Prinzip erklären:
- Es gibt ein kleines Programm, welches das Update durchführt. Dieses könnt ihr einfach via Run() mit euren Bot mitstarten lassen. Dies wird benötigt, da sich nicht so leicht eine laufendes Programm überschreiben lässt.
- Das Update Programm läd dann eine *.txt Datei von einem FTP Server runter.
- Dieser Datei wird dann mit der Version des Bots abgeglichen.
- Wenn diese sich unterscheiden sollten, wird nachgefragt, ob der User ein Update möchte.
- Wenn der User dies möchte, wird Bot geschlossen und es wird die neuere Version runtergeladen und überschrieben.
- Wenn alles fertig ist, wird der Bot neu gestartet.
So, nun kommen wir zur "Schritt für Schritt" Anleitung.
PHP Code:
#notrayicon
sleep(1500)
FileDelete(@TempDir & "\update.txt")
InetGet("ftp://dein-ftp-server.de/Dein-Bot-Verzeichnis/update.txt",@TempDir & "\update.txt", 1, 0)
Dann überprüfen wir, ob im Temp Verzeichnis eine update.txt liegt und löschen sie.
Jetzt wird die neue update.txt heruntergeladen.
PHP Code:
$file = FileOpen(@TempDir & "\update.txt", 0)
$ver_server = FileReadLine($file, 1)
$ver_pc = IniRead("Settings.ini", "Info", "Version","")
If $ver_server = $ver_pc or $ver_server = "" Then
FileClose($file)
FileDelete(@TempDir & "\update.txt")
Else
"$ver_pc" muss die Version den Bots enthalten. Ich speichere diese immer in die Settings.ini Datei meines Bots.
In der If abfrage wird überprüft, ob die Server Version mit der des Bots übereintstimmt.
PHP Code:
$msgbox = MsgBox(36, "Update!", "Es ist ein neues Update verfügbar! Wollen sie es runterladen?")
If $msgbox = 6 Then
Tooltip("Update wird runtergeladen... bitte warten :-)")
ProcessClose ("Dein Bot.exe")
InetGet("ftp://dein-ftp-server.de/Dein-Bot-Verzeichnis/Dein Bot.exe",@scriptDir&"\" & "Dein Bot", 1, 0)
IniWrite("Settings.ini", "Info", "Version", $ver_server)
FileClose($file)
FileDelete(@ScriptDir & "\update.txt")
Tooltip("")
Der Bot wird dann einfach über ProcessClose() geschlossen.
Dann kann die neuere Version des Bots in das Script Verzeichnis heruntergeladen werden.
Da ich meine Version immer in der Settings speichere, schreibe ich nun in die Settings.ini die neue Version des Bots.
PHP Code:
$mb = @InetGetBytesRead
$mb = $mb / 1000000
$mb = StringLeft ($mb, 4)
msgbox(0,"Update", "Das Programm wurde aktualisiert ;)" & @LF & "Es wurden " & $mb & " mb empfangen.")
run("Dein Bot.exe")
EndIf
EndIf
In einer Message Box zeigen wir nun, dass das Update fertig ist und wie viel Mb empfangen wurden.
Zum guten Schluss wird noch der neue Bot automatisch gestartet
Unser Script ist nun fertig und sieht so aus:
PHP Code:
#notrayicon
sleep(1500)
FileDelete(@TempDir & "\update.txt")
InetGet("ftp://dein-ftp-server.de/Dein-Bot-Verzeichnis/update.txt",@TempDir & "\update.txt", 1, 0)
$file = FileOpen(@TempDir & "\update.txt", 0)
$ver_server = FileReadLine($file, 1)
$ver_pc = IniRead("Settings.ini", "Info", "Version","")
If $ver_server = $ver_pc or $ver_server = "" Then
FileClose($file)
FileDelete(@TempDir & "\update.txt")
Else
$msgbox = MsgBox(36, "Update!", "Es ist ein neues Update verfügbar! Wollen sie es runterladen?")
If $msgbox = 6 Then
Tooltip("Update wird runtergeladen... bitte warten :-)")
ProcessClose ("Dein Bot.exe")
InetGet("ftp://dein-ftp-server.de/Dein-Bot-Verzeichnis/Dein Bot.exe",@scriptDir&"\" & "Dein Bot", 1, 0)
IniWrite("Settings.ini", "Info", "Version", $ver_server)
FileClose($file)
FileDelete(@ScriptDir & "\update.txt")
Tooltip("")
$mb = @InetGetBytesRead
$mb = $mb / 1000000
$mb = StringLeft ($mb, 4)
msgbox(0,"Update", "Das Programm wurde aktualisiert ;)" & @LF & "Es wurden " & $mb & " mb empfangen.")
run("Dein Bot.exe")
EndIf
EndIf
Ich weiß, dass man den Script an manchen Stellen kürzer schreiben könnte, aber so finde ich ihn übersichtlicher
Ich hoffe ich könnt etwas anfangen.
Wer keinen FTP Server hat, kann einfach einen auf seinem PC laufen lassen, oder auf sich kostenlosen Webspace auf Kilu o.ä. holen.
lg Chris






