Anzeige:
Anzeige:
Stern inaktivStern inaktivStern inaktivStern inaktivStern inaktiv
 

Abfragen im mIRC

Einige Abfragen haben wir hier schon gesehen im Tutorial, diese wollen wir uns jetzt mal genauer anschauen. Abfragen dienen dazu 1 zu überprüfen oder 2 Werte miteinander zu vergleichen. Dazu benutzt man die verschiedenen Operatoren die mIRC bietet. Doch schauen wir uns erstmal eine einfache Abfrage an.

... if ($chan == #Testraum) {...

Hier geht es uns nur um die Abfrage deshalb hab ich den Code drum herum weggelassen. Also eine Abfrage beginnt immer mit dem Befehl /if. Dann kommt ein Klammernpaar in welchem die Bedingung definiert ist. Eine Bedingung oder auch Ausdruck genannt hat immer einen von zwei Werten nämlich Wahr (TRUE) oder Falsch (FALSE). Ist die Bedingung Wahr werden die Befehle hinter der Abfrage ausgeführt. Andernfalls werden diese Befhle ausgelassen und das Script fährt hinter diesen mit der Ausführung weiter fort. Bei unserem Beispiel ist die Bedingung Wahr wenn der Identifer den Wert #Testraum hat. Würde diese Abfrage also in einem on TEXT Event sein, müsste dieser on TEXT im Channel #Testraum aufgerufen werden damit die Befehle hinter der Abfrage ausgeführt werden. Zu beachten ist, wie fast überall in Programmierung und Scripting, das der Gleichheitsoperator aus 2 Geichheitszeichen besteht, da 1 Gleichheitszeichen ja der Zuweisungsoperator für Variablen ist.

 

Abfragenketten

Sehen wir uns jetzt mal ein Script an das mehr als eine Abfrage enthält, aber immer ein und den selben Wert prüfen soll. Gleichzeitig definieren wir einen sogenannten Defaultzweig (Standardzweig), der zur Ausführung kommt wenn keine der vorherigen Abfragen TRUE ergibt.

on 1:TEXT:!getränk &:#Testraum:{ if ($2 == Cola) { describe $chan gibt $nick eine Cola. } elseif ($2 == Kaffee) { describe $chan gibt $nick einen Kaffee. } elseif ($2 == Tee) { describe $chan gibt $nick einen Tee. } else { msg $chan Sorry, dieses Getränk führen wir nicht! } }

Den on TEXT Remote kennen wir bereits, also schauen wir uns nur die Abfragen an. Die if Bedingung ist TRUE wenn das zweite eingegebene Wort Cola ist, also sehe die gesamte Eingabe so aus: !getränk Cola. Ist die if Bedingung TRUE werden die anderen elseif garnicht mehr geprüft das Script fährt, nach Ausgabe der Meldung, hinter dem else fort. In unserem Fall also würde es beendet werden. Wenn jetzt ein unbekanntes Getränk angegeben wird (z. B. Milch), dann wird der Defaultzweig (else) ausgeführt. Hätten wir jetzt statt der elseif einfache if Abfragen genommen, würde jede Bedingung geprüft werden auch wenn gleich die erste TRUE ergibt. Ausserdem würde immer der Defaultzweig ausgeführt werden, wenn kein Tee bestellt wurde. Gebt das Script mal ein und testet es gut durch, auch mit der nur if Variante.

 

Eine Abfrage zwei Bedingungen

Nun ist es Möglich in einer Abfrage auch mehr als eine Bedingung anzugeben. Allerdings würde ich in der Praxis nie mehr als drei Bedingungen angeben, da das Script sonst unübersichtlich wird. In dem hier gezeigten Beispiel werden zwei Bedingungen geprüft, was in Scripting häufiger vorkommt.

on @1:TEXT:!kick &:#Testraum:{ if (($nick isvoice $chan) && ($2 ison $chan)) { kick $chan $2 } }

Dieses Script dient dazu auch Voice-Op's das kicken in einem Raum zu ermöglichen. In der Abfrage werden zwei Bedingungen geprüft und nur wenn beide TRUE ergeben wird der Kick durchgeführt. Die erste Bedingung prüft ob der User der !kick... eingeben hat ein Voice (Mode +v, meistens + vor dem Nick) hat. In der zweiten Bedingung wird geschaut ob User der als zu kicken angegeben ist, sich überhaupt im Raum aufhält.

 

Vorzeichen statt Abfragen

Im obiegen Beispiel gibt es noch eine Neuerung und zwar ist vor dem Level (1) im Remote ein @. Dieses bewirkt dass das Script nur ausgeführt wenn man selber OP im Raum ist. Somit wird also sichergestellt das man selber zum kicken des Users berechtigt ist. Es gibt noch ein weiteres vorzeichen und zwar das Ausrufungszeichen (!). Damit würde verhindert werden das man selber der Script auslösen kann zum Beispiel in einem on JOIN Event. 
Script_1:

on !1:JOIN:#Testraum:{ msg $chan Hi $nick }

Script_2:

on 1:JOIN:#Testraum:{ if ($nick != $me) { msg $chan Hi $nick } }

Script_1 und Script_2 sind von der Ausführung her völlig identisch, beide begrüssen einen User wenn er den Channel #Testraum betritt. Aber nur dann wenn man nicht selbst der User ist. Ihr seht also das sich durch diese Vorzeichen bestimmt Abfragen ersetzen lassen. Damit schliessen wir auch das Thema Abfragen ab, ich denke das diese jetzt jedem klar sind.