Hachjaaa…
Was gibt es schöneres als den ersten Beitrag den man nach längere Zeit schreibt, über den TS3 Bot zu widmen.
Wo fange ich den am besten einmal an. Mhm~ Erläutere ich zu beginn einmal warum ich es mein “Legacy” Projekt nenne. Evtl. hatte ich dies schon einmal, aber da ich nun etwas mehr an diesem geschrieben habe, sind viele weitere Dinge dazu gekommen.

Die Program.cs besteht aus ca. 5000 Zeilen pure Logik die an die erstelle Form Daten übergeben. Allein 100 Zeilen sind eine Art Try-Catch EVERYTHING, welches nicht einmal funktioniert.
Weiterhin befindet sich in den Zeilen viel Code aus früheren alten Projekten wie z.B. das umrechnen eines Geburtstages als Datums string (z.B. 12.06.1974) zu einem Alter. Leider hab ich den original Schnipsel nicht mehr, jedoch kann ich gleich sagen DateTime ist was feines und ich hätte das damals mal schon benutzen sollen. Immerhin konnte ich damals sagen, ja für Programmieren braucht man Mathematik! In diesen 5000 Zeilen waren viele solcher Patzer versteckt. Es ist ein misch aus was originellen und wirklich alten Code.

Aber wie weit ist der Bot nun jetzt?TS3 New Bot neuer output
Nun zuletzt war grade so die MySQL Verbindung fertig. Der Output der Konsole sah entsprechend ermüdend aus.
Um einen besseren Überblick zu bekommen, nehmen wir uns auch direkt mal den neuen Output.

Das erste was einem auffallen dürfte, Farbe! Wobei so etwas eher nebensächlich ist, finde ich dies für eine schnellere Übersicht in einer Konsolenanwendung sehr wichtig.

Ebenfalls wird jetzt jeder Output mit einem Prefix des “Callers” versehen. Durch das Threading und aufspalten der Logik in einzelne Klassen dient dies für mich dazu, zu überblicken welcher Bereich was meldet. Folgende Bereiche sind vorhanden.

Bereich Aufgabe
Console Alle von der Konsolen ausgeführten Aktionen. Der Bereich führt nicht mehr aus als das erstellen aller Bereiche so wie Speichern / Laden von Daten auf der Festplatte.
MySQL Ist für die Verbindung zum MySQL Server zuständig und logt Aktionen und Probleme. Vermieden werden einfache Selects / Inserts / Updates.
TS3 Der TS3 Bereich ist für die Query Verbindung zum TS3 Server zuständig. Die Query Verbindung wird dann zurück gegeben.
Bot Der Bot ist für die gesamte Bot Logik verantwortlich. Dieser hat Zugriff auf den MySQL Bereich für entsprechende Befehle.

Die komplette Kommunikation wird weiterhin von “TS3QueryLib.Net” übernommen. Beim Starten bewegt sich der Bot direkt in den in der Config hinterlegten Channel und benennt sich ebenfalls zu dem angegeben Namen um. Ab diesem Punkt zählt der Bot als bereit und registriert alle benötigten Events der TS3QuerLib. Sobald diese registriert sind, zählt dieser als vollständig initialisiert.

Nun werden alle bereits vorhanden User gecached und deren Daten sowohl vom TS3 Server als auch aus der DB abgefragt. Sollte in der DB noch kein Eintrag vorhanden sein, wird dieser erstellt.
Sollte in der Zeit jemand Joinen oder Leaven wird dies mit berücksichtigt. Ob das 100% funktioniert ist sehr schwer zu sagen. Da ich bisher noch keinen Fall erzeugen konnte wo viele User gleichzeitig gecached werden und Leaven / Joinen. Daher muss ich blind auf meine Lösung vertrauen… bei Threading… ohje,,

Die DB Struktur ist noch immer stark am variieren wieso ich erstmal nicht auf die eingehen werde.
Mit der derzeitigen Umstellung, Problemkindern, GUI etc. einbezogen, jedoch nicht die Ausgaben berücksichtigt, ist der Bot von ~7500 Zeilen auf 468 Zeilen geschrumpft. Natürlich ist eine gute Menge auch GUI kram, jedoch schon ein arger Unterschied für die Basis Implementierung.

Etwas womit ich derzeit noch gar nicht zufrieden bin, ist die Haltung der Client Daten. Client Daten werden in einer Klasse gespeichert die 2 Sub-Klassen hat. Diese halten einmal den TS Response und einmal der DB Response. Gearbeitet wird jedoch immer mit der DB Response. Der TS Response stellt nur ne Basis Information dar. Jedoch hatte ich bisher noch keine bessere Lösung da ich Basis Informationen früher oder später sehr häufig brauchen werde.

Soviel erstmal dazu. Ich hoffe ich komme demnächst dazu etwas mehr zu schreiben. Ansonsten viel Spaß weiterhin und schaut doch mal auf mein GitHub Account vorbei. 🙂