Häufig gestellte Fragen (FAQ) über mIRC
Home

Neueste Nachrichten
Download mIRC
Wie man installiert
Übersetzungen
Message Board

Einführung in IRC
IRC FAQ

Einführung in mIRC
mIRC FAQ
Befehls Liste

Wie man registriert

Mailing Listen
IRC Netzwerke
Chat Links
Mehr Info (Links)

Dies ist Abschnitt 7 der mIRC FAQ mit Hilfe über das Programmieren von mIRC's Aliases, Popups und Remotes.

Die ersten Anschnitte (Sektionen 1 - 5) dieser Datei geben Ihnen eine Einführung in IRC und mIRC. Die Sektion 6 sind die eigentlichen FAQ. Dieser letzte Abschnitt 7 enthält einen Lehrgang oder Referenz Handbuch über mIRC's "Programmierung". Wenn Sie das "Was und Wie" der Erzeugung von Aliases, Popups und Remote Kommandos und Events in mIRC lernen wollen, lesen Sie bitte den letzten Abschnit. Ich kann Ihnen diese Sektionen nur empfehlen!


Inhaltsverzeichnis

  • Abschnitt 1: Was ist mIRC?
  • Abschnitt 2: Neueste Nachrichten über mIRC.
  • Abschnitt 3: Was brauche ich, um mIRC benutzen zu können? Wo bekomme ich es? Wie registriere ich es?
  • Abschnitt 4: Eine kurze Einführung in den IRC.
  • Abschnitt 5: Einige kleine Anmerkungen und Tips zu mIRC.
  • Abschnitt 6: Features, Tips und Antworten auf Fragen.
  • Abschnitt 7: Ein Kurs über "Programmieren" in mIRC.
    7 EINIGE ANMERKUNGEN ÜBER DAS 'PROGRAMMIEREN' IN mIRC (Tutorial?).

    mIRC bietet unter Tools drei Oberflächen, die auf bestimmte Weise "programmiert" werden können. Die Aliases, die PopUps und die Remotes. In den Remotes können User, Variablen und Scripts definiert werden. Scripts steuern mIRC's Reaktionen auf IRC-spezifische Ereignisse oder CTCP-Befehle.

    Am besten lernt man die Funktionalität dieser Programmieroberflächen, wenn man die Kapitel in Reihenfolge durcharbeitet. Wirklich! Versuchen Sie nicht, einen Sprung zu den Remotes zu machen, wenn Sie die PopUps und Aliases nicht wirklich verstanden haben. Die Lektionen bauen aufeinander auf.

    (Für die, die schon mit ircii gearbeitet haben: Die Syntax der Aliases in mIRC ist der von ircii ähnlich allerdings nicht völlig gleich. Auch die Command- und Remote-Sektion erlauben ungefähr die selben Features, aber auch hier ist die Syntax ein bißchen anders.)

    Rückkehr zum Inhaltsverzeichnis.


    7-1 Die Aliases-Sektion.

    Wählen Sie den Menüpunkt Tools/Aliases.
    Der mIRC Editor wird dann mit der geöffneten Alias-Sektion starten.
    Bitte ignorieren Sie erst mal die PopUps, User und Variablen.
    Der mIRC Editor ist eine kompakte, einheitliche Schnittstelle zu fast allen programmierbaren Oberflächen. Mit dem eingebauten File-Menüpunkt können Alias-Dateien geladen und gespeichert werden. Das Edit-Menü bietet copy/paste- (Kopieren und Einfüge-) Funktionen sowie Suchroutinen. 'View' bietet einen Überblick über alle vorhandenen Alias-Dateien und 'Alias' zeigt ein Inhaltsverzeichnis der geöffneten Alias-Datei.

    In der Alias-Sektion können unter anderem Abkürzungen für häufig verwendete Befehle wie JOIN, PART, QUIT, Ops geben und Ops entziehen definiert werden. Standartsätze müssen nicht mehr getippt werden, sondern können ebenfalls als Alias abgelegt werden. Im allgemeinen können sämtliche Befehle, die aus der Editbox heraus funktionieren auch in den Aliases verwendet werden. Aliase können auch dazu dienen, mehrere Befehle hintereinander auszuführen. Sie können mit Hilfe der Aliases sogar Befehle auf die Funktionstasten F1-F12 legen...(endlich bekommen diese nutzlosen Tasten einen Sinn). Aliase können ebenfalls von innerhalb der PopUps, der Remotes und sogar in anderen Aliases aufgerufen werden. In der neuen mIRC-Version können mehrere Alias-Dateien verwendet werden. Eine ist im Lieferumfang (alias.ini) enthalten - man kann sie beliebig erweitern oder eine eigene einsetzen. Es ist alles sehr einfach!

    7-1-1 Aliases erstellen.

    Okay, wir beginnen einfach mit einem simplen Beispiel. Um einen Channel zu betreten, muß man normalerweise

    /join #name

    tippen... wobei #name der Channelname ist. Da dieser Befehl sehr häufig verwendet wird, wäre es schön, wenn man so wenig tippen muß wie möglich, oder?
    Also machen wir das ganze etwas kürzer und machen ein Alias für "/join_/index.html".

    Anstatt '/join_/index.html' zu tippen, richten wir es so ein, daß /j #name den selben Effekt erzielt.

    In diesem Fall würde der entsprechende Eintrag so aussehen:

    /j /join $1

    (Was dies exakt für mIRC bedeutet, brauchen Sie an dieser Stelle noch nicht zu verstehen. Zu der genauen Definition der Syntax kommen wir in Kürze.)

    Versuchen Sie es einfach, indem Sie diese Zeile in die Liste in die Liste unter Tools/Aliases/ setzen (wenn sie nicht sogar schon vorhanden ist). Dann versuchen Sie es aus der Editbox heraus (die Eingabezeile, in der Sie normalerweise tippen) mit einem einfachen Befehl wie:

    /j #test

    Sie werden feststellen, daß dies dasselbe bewirkt wie '/join_/index.html' - es bringt Sie in den Channel #test. Diese Konstruktion einer Abkürzung ist nun ein Alias.

    Alias Syntax.

    Aliases verwenden das folgende Format:"/{Aliasname} /{Befehl}"

    Es wird also zuerst der Name der Abkürzung festgelegt (wie z.B. '/j/index.html' im obenstehenden Beispiel), dann ein Leerzeichen und dann der eigentliche Befehl, auf den die Abkürzung verweisen soll (im oberen Beispiel '/join_1/index.html').

    Aber das is noch nicht alles. Aliases verwenden eine Reihe von speziellen Strings (Strings sind Standartvariablen, die veränderbare Werte enthalten können - hier aber nicht mit den mIRC-internen Variablen zu verwechseln) und Identifiers (ebenfalls Variablen, die aber mIRC-intern bestimmte Werte enthalten - wie z.B. IP-Adressen, die aktuelle Seite des Webbrowsers, usw. Später mehr dazu). Es gibt mehrere Strings wie z.B. $1, $1-3, $$1, $?, $!, #$1, #$$1 und #$?. Strings können jeglichen denkbaren Wert enthalten, der angegeben wird, wenn das Alias aufgerufen wird. Sie sind sehr flexibel einzusetzen. Identifiers funktionieren ähnlich, enthalten aber immer einen bestimmten Wert. Die wichtigsten Identifiers sind #, $me, $url, $fulldate, $time und $day.

    Keine Sorge, wir gehen später auf dieses Thema noch sehr viel genauer ein.

    Laßt uns jetzt erst mal auf $1, den oben verwendeten String konzentrieren:

    /j /join $1

    $1 bezeichnet "das erste Wort, das nach dem Alias - wie immer es auch aussieht - eingegeben wurde". Wenn Sie also /j #test eingeben, dann erkennt mIRC, daß es eine Abkürzung für "/join_/index.html" ist.

    Beispiel: Mehrere Befehle in einem Alias

    Nehmen wir nun an, man möchte mehrere Channels gleichzeitig betreten. Auch hierfür kann man ein Alias erstellen. Trennen Sie nur die verschiedenen Befehle mit dem | Zeichen (auf den meisten deutschen Tastaturen ist das die AltGr+Größer als/Kleiner als-Taste neben dem Y) Das | Zeichen wird Pipe genannt.

    Gehen wir von einem Alias aus, bei dem man nur "/j3/index.html" tippen muß, danach die Namen von drei Channels und man würde sie zugleich betreten. Das entsprechende Alias würde so aussehen:

    /j3 /join $1 | /join $2 | /join $3

    Nachdem man diese Zeile in die Liste unter Tools/Aliases eingegeben hat, braucht man nur noch

    /j3 #test1 #test2 #test3 einzugeben

    und mIRC betritt einen Channel nach dem anderen.

    In diesem Fall bedeutet $1 das erste Wort, $2 und $3 sind das zweite und dritte Worte nach dem Aliasnamen.

    Nun erwartet mIRC allerdings logischerweise drei Worte - die Channelnamen. Was würde also passieren, wenn man nur "/j3_/index.html" eingibt? mIRC würde über die fehlenden Parameter stolpern, da es drei Eingaben erwartet. Für dieses Problem gibt es eine Lösung: den $$1 String (den behandeln wir etwas später).

    Beispiel: /say

    Angenommen, es gibt einen Satz oder einen Kommentar, den Sie in Channels immer wieder brauchen, wie z.B. Ihre Homepage-Adresse, eine Begrüßung oder was auch immer.

    Schauen sie sich mal diese Beispiele für Aliase an, die den /say-Befehl verwenden. /say schreibt einfach nur Text in das aktuelle Channel- oder Privatfenster.

    (In einigen Systemen müssen Sie eventuell den Fensterinhalt nach rechts rollen, um den kompletten Text zu sehen.)

    /hallo /say Hallo Ihr!

    /www /say Die deutsche mIRC-Page ist auf http://www.mirc-help.de

    /Zeilen /say Erste Zeile | /say Zweite Zeile | /say Die ist die Dritte und letzte Zeile

    /hello /say Hello to all of you...

    Das letzte Beispiel zeigt, wie man mehrere Textzeilen in einem Alias zusammenfaßt. Die Befehle müssen lediglich mit | voneinander abgegrenzt werden. Man sieht hier, daß nicht zwangsläufig in jedem Alias ein String vorkommen muß.

    Beispiel: /me

    Tätigkeiten beschreiben in einem Alias...

    /lustig /me findet das lustig
    /umarm /me umarmt $1 feste!!

    Das zweite Beispiel verwendet einen String - $1. Wenn man nun "/umarm_alle/index.html" eingibt, ist das Ergebnis dasselbe wie bei "/me_umarmt_alle_feste/index.html".

    Beispiel: Von mehreren Befehlen verwendete Strings

    Verschiedene Befehle können innerhalb eines Alias ein und den selben String verwenden.

    /jtest /join $1 | /topic $1 Nur zum testen

    In diesem Alias wird das Parameter $1 zweimal verwendet. Die Eingabe von "/jtest_/index.html" würde darin resultieren, daß mIRC erst #test betritt und dann das Topic in "Nur zum testen" ändert.

    Ein ähnlicher Fall wäre:

    /mag /say Ich mag $1 ! | Ich mag $1 wirklich gerne!!

    Bei "/mag_alle/index.html" wäre das Ergebnis "/say_Ich_mag_alle_/index.html" und dann "/say_Ich_mag_alle_wirklich_gerne/index.html"

    Beispiel: Channel-Modus-Änderungen (Ops geben, etc.):

    Um oft gebrauchte Channel-Modus-Änderungen in die Aliases zu setzen, muß man zuerst die übliche Struktur der Modus-Befehle kennen. Jemanden auf dem IRC Ops zu geben funktioniert normalerweise so:

    /mode #channelname +ooo nick1 nick2 nick3

    Bis zu 3 Nicks können aufgeführt werden.

    Das entsprechende Alias sieht folgendermaßen aus:

    /op /mode # +ooo $1 $2 $3

    Um nun Hinz, Kunz und Otto Ops zu geben gibt man einfach "/op_Hinz_Kunz_Otto/index.html" ein.

    Das # in diesem Alias zeigt die Verwendung eines der vordefinierten Strings (# und $!). Das # ist ein Identifier und und bezeichnet immer den #Channelnamen des Channels, auf dem das Alias ausgelöst wurde.

    Auf dieselbe Art und Weise kann man andere Aliase zur Änderungen der Channel-Modi entwickeln:

    /deop /mode # -ooo $1 $2 $3
    /ban /mode # +b $1
    /kick /kick # $1
    /dbk /mode # -o $1 | /kick # $1 | /mode # +b $1

    WICHTIG: Das korrekte Setzen von Leerzeichen!

    Dies ist sehr wichtig! Man MUSS zwischen Strings und dem restlichen Text Freizeichen lassen! Zum Beispiel:

    /mag /say Ich mag $1!!!

    ...wird NICHT funktionieren! Es muß zwischen "$1" und "!!!" ein Leerzeichen gelassen werden. (Das kann den Text manchmal komisch aussehen lassen, also achten Sie darauf, wie Sie die Sätze aufbauen)

    /mag /say ich mag $1 !!!

    ...wird funktionieren.

    Dies gilt für alle Strings. Um eine Funktion zu vereinfachen wurden ein paar Strings erstellt, die den erfaßten Parametern automatisch ein # voranstellen. Dies gilt für #$1, #$$1, und #$?. Details hierzu werden später behandelt.

    In EINIGEN Fällen funktioniert: /gut /say Mir gefällt $1's Topic
    Aber wie gesagt - NICHT IMMER! Sie müssen das für jeden Fall testen.

    Wo kann man Aliase benutzen?

    Aliase können von der Editbox (die Zeile, in die man normalerweise Text und Befehle eingibt) aus, aber auch aus den PopUps und Remotes aufgerufen werden. Darauf wird in den folgenden Abschnitten noch eingegangen. Die von der durch die Funktionstasten aufgerufenen Aliase können auch auf in der Nicknamenliste ausgewählte Nicks bzw. den Namen des Privatfensters (Query-Fensters) bezogen werden... abhängig von der Aliasdefinition. Es ist sogar möglich, ein Alias durch ein anderes aufzurufen oder daß Aliase sich selbst rekursiv aufrufen! Als Schtzmaßnahme gegen Endlosschleifen, ist dioe maximale Rekursionstiefe auf 5 gesetzt. Dies kann durch den /maxdepth Befehl geändert werden. Die minimale Tiefe beträgt 1 (Aliase können keine anderen Aliase aufrufen) und die maximale Tiefe beträgt 100. Ein Alias, das ein anderes aufruft braucht allerdings eine Menge Speicher. Es kann also Probleme geben, wenn zu wenig Arbeitsspeicher zur Verfügung steht. Wenn eine solche Operation in einer Endlosschleife endet, kann man jedoch immer noch die Tastenkombination Strg+Pause (CTRL-Break) verwenden, um den Prozeß abzubrechen.

    Spezielle Alias-Definitionen: Die Funktionstasten.

    Spezielle Alias-Bezeichnungen machen es möglich, Aliase über die Funktionstasten aufzurufen. Definieren Sie einige der folgenden Aliase:
    /f1 /say Hallihallo
    /f2 /topic # This is a new topic

    Man kann nun "/f1/index.html" eingeben, um auf einem Channel "Hallihallo" zu sagen, aber es reicht auch, die F1-Taste zu drücken. Andere Beispiele:
    /f5 /me sendet Dir gerne das neue mIRC
    /f6 /join #mIRC
    /f9 /dcc send $1 c:\serve\mfaq50hp.zip
    /f10 /dcc send $1 c:\serve\mirc601.exe
    /f11 /dcc send $1

    Die F9-Taste wird die mIRC-Datei der in der Nicknamen-List ausgewählten Person senden. Vergessen Sie nicht, vorher einen Nick auszuwählen, oder es werden merkwürdige aber logische Dinge passieren. Die F9-Taste kann auch in einem Privat- oder DCC Chat-Fenster verwendet werden. Bei Betätigung der F11-Taste wird zuerst nach einem Nick gefragt, dem die Datei gesendet werden soll.
    Ebenfalls ist es möglich, die Strg- und Umschalttaste mit einzubeziehen:
    /f1 /say Dies ist die F1-Taste
    /sf1 /say Dies ist Umschalttaste-F1
    /cf1 /say Dies ist Strg-F1

    Die Verwendung von Klammern

    Man kann in Aliases auch [ und ] Klammern verwenden um die Reihenfolge der Bearbeitung von Identifiers festzulegen - wie auch in PopUps und Remotes. Identifiers, die in Klammern stehen werden zuerst bearbeitet, und zwar von links nach rechts. Man kann Klammern auch einbetten um bestimmte Bearbeitungsreihenfolgen festzulegen. Die Klammern erscheinen nicht im resultierenden Text. Beispiele:

    /note /notice $1 " $+ [ $read [ -s + [ $2 ] ] c:\text\note.txt ] $+ "
    /sayvar /say % [ $+ [ $1 ] ]

    Definitionen ohne Klammern werden wie üblich behandelt.

    Aliase in Scripts.

    Man kann zu den existierenden Alias-Dateien ohne Probleme erweiternde hinzufügen, indem man im Alias-Editor (Tools/Aliases) 'File/Load' wählt. Man kann nun auf einfache Art und Weise eine Datei auswählen. Mit 'View' kann man sich alle geladenen Dateien anschauen. So kann man auf einfache Weise Aliase von Freunden ausprobieren oder die eigenen zur Verfügung stellen. Aliases können sogar mit Remote Commands und Events in eine Datei zusammengefaßt werden und als komplette Script-Datei in Umlauf gebracht werden. Wir gehen später darauf ein.

    Rückkehr zum Inhaltsverzeichnis.

    7-1-2 String Definitionen.

    Mittlerweile sollten Sie einen Eindruck gewonnen haben, wie Aliase funktionieren. Hier kommt nun eine Liste aller Strings und Identifiers, die Sie in den Aliases - und später auch in den PopUps und Remotes - verwenden können. Die nächsten zwei Abschnitte erläutern sie alle. Von dieser Stelle aus probieren die Beispiele bitte aus, bis Sie sie verstanden haben.

    $N

      Der einfachste String. Er enthält ein Wort. $1 z.B. enthält das erste Wort nach dem Aliasnamen. $2 enthält also das zweite, $3 das dritte u.s.w. Beispiel:
      /op /mode $1 +o $2 $3
      Wenn man hier "/op_/index.html" eingibt, dann wird Hinz und Kunz auf #mIRC Ops gegeben.
      /slap /me haut $1 eins mit $2- über die Rübe
      Geben Sie "/slap_Doofmann_Sardellen/index.html" ein, um Doofmann ein bißchen nach Fisch stinken zu lassen ;o)

    $N-M

      Dieser String enthält eine Wortauswahl. Versuchen Sie mal dies:
      /drei /say Die ersten drei Worte waren $1-3
      Die Eingabe von "/drei_eins_zwei_drei_vier/index.html" ergibt "Die ersten drei Worte waren eins zwei drei". "vier" wird ignoriert.
      Anmerkung: $N-M ersetzt die alte Form *N-M.

    $N-

      Dieser String kann eine Menge Worte enthalten. $1- enthält das erst Wort und alle nachfolgenden. Beispiel:
      /allen /say Ich möchte Euch allen etwas sagen - $1-
      Die Eingabe von "/allen_mIRC_ist_echt_ein_gutes_Programm/index.html" ergibt dann "Ich möchte Euch allen etwas sagen - mIRC ist echt ein gutes Programm". $2- enthält das zweite Wort und alles nachfolgende, $3- das dritte und... etc.
      Versuchen Sie auch mal:
      /note /notice $1 $2-
      ..und geben Sie "/note_Nickname_Nachrichtentext/index.html" ein.
      Oder:
      /mess /msg $1 $2-
      und tippen dann "/mess_Nickname_Nachrichtentext/index.html".
      (Diese Beispiel-Aliase hätten natürlich in der Form"/note_/notice_1_/index.html" und "/mess_/message_1_/index.html" auch funktioniert).
      Anmerkung: $N- ersetzt das alte *N.

    $$1

      Ein Alias, daß diesen String enthält, wird nur ausgeführt, wenn ein Parameter gegeben ist, andernfalls wird dessen Aufruf ignoriert.
      Wenn Sie zum Beispiel mal folgendes Alias festlegen:
      /j /join $$1
      und dann "/j/index.html" (anstatt /j #Channelname) eingebt, wird mIRC dies ignorieren, weil kein Channelname angegeben wurde. Ansonsten funktioniert es genauso wie $1 - es enthält das erste Wort, $$2 das zweite, $$3 das dritte usw.

    $?

      Das hier ist ein praktischer String!
      Wenn ein Alias diesen String enthält, dann kann es gestartet werden, ohne daß ein Parameter angegeben wird. mIRC öffnet dann eine Parameterabfragebox, in die dann Text, ein Nickname oder was auch immer eingegeben werden kann.
      Probieren Sie mal diese Beispiele aus:
      /j /join $?
      /umarm /me umarmt $? mal kräftig

    $?="text"

      Dies ist eine spezielle Version des $?-Strings. mIRC öffnet wieder die Parameterabfragebox, fragt aber diesmal nach einer speziellen Eingabe, wie z.B. hier:
      /j /join $?="Welchen Channel betreten?"
      /umarm /me umarmt $?="Wen umarmen?" mal kräftig

    $!

      Dieser String wird nur in Zusammenhang mit $? verwendet. Wenn Sie vorher in einem Alias den $?-String gesetzt haben, dann können Sie $! dazu benutzen, um das bei $? eingegebene Parameter später noch mal zu verwenden:
      /j /join $?="Welchen Channel betreten?" | /say $! ist wirklich ein schöner Channel.
      Bei der Eingabe von "/j/index.html" wird mIRC erst die Parameterabfragebox öffnen, in die man dann einen Channelnamen - z.B. #test eingibt. mIRC wird dann zuerst #test betreten, und dann im Channel "#test ist wirklich ein schöner Channel" sagen.
      Versuchen Sie auch:
      /freund /say $? ist mein Freund | /say ich mag $! wirklich sehr!

    #$1 und #$$1 und #$?

      Dies sind spezielle Versionen der Strings $1, $$1 und $?. Sie werden nur in Verbindung mit Channelnamen verwendet. Sie stellen jedem eingegebenen Parameter das #-Zeichen voran:
      Versuchen Sie:
      /j /join #$1
      Hiermit kann man "/j_test/index.html" anstatt "/j_/index.html" eingeben.
      Versuchen Sie auch:
      /j /join #$?="Channelnamen eingeben (Ohne #)"

    Rückkehr zum Inhaltsverzeichnis.

    7-1-3 Identifiers.

    Eine spezielle Form des Strings ist der sogenannte Identifier. Der Inhalt eines gewöhnlichen Strings ergibt sich immer daraus, auf welche Weise er in den Aliases, PopUps oder Remotes aufgerufen wird. Ein Identifier hingegen enthält immer fest definierte Werte.

    #

      Dieser enorm wichtige Identifier enthält immer den Namen des Channels, in dem das Alias ausgeführt wird. Das ist daher wesentlich, da viele Befehle, wie z.B. der /mode-Befehl immer den Channelnamen erfordern.
      Beispiel:
      /op /mode # +o $1
      Bei der Eingabe von "/op_Cindy/index.html" wird die Person mit dem Nicknamen Cindy in dem Channel geopt, in dem Ihr das Alias aufruft.

    $me

      Dieser Identifier enthält immer Ihren aktuellen Nicknamen. Man kann ihn in den verschiedensten Situationen verwenden.
      Beispiele:
      /schön /me findet, $me ist ein schöner Nickname - oder -
      /mirc /me bietet allen die neue mIRC Version 6.01 an. Tippt "/CTCP_me_xdcc_send_/index.html" um sie zu bekommen. - oder -
      /away /me ist jetzt mal eben weg ( $1-) | /away $1- | /say Nachrichten an $me werden gespeichert.
      Probieren Sie auch mal folgendes aus:
      /nick /Ich finde $1 besser als $me | /nick $1
      und dann ändern Sie Ihren Nickname mit /nick Neuer_Nickname

    $read(filename,[ntsw],[matchtext],[N])

      Das hier ist ein praktischer Identifier. Es nimmt nach dem Zufallsprinzip eine Zeile aus einer spezifizierten Datei heraus, und setzt sie in das Alias. Diese Zeile kann normalen Text enthalten, aber auch Befehle! $!read funktioniert im Prinzip genauso, wie $read, außer daß es beim ersten Durchlauf der Alias-Routine nicht bearbeitet wird. Dies ermöglicht seine Verwendung in Zusammenhang mit /timer-Befehlen, in denen $read jedes mal neu bearbeitet werden soll. Das -n Parameter verhindert die Bewertung einer Zeile komplett. Sie wird dann als normaler Text behandelt.
      Beispiele:
      /fun /say $read(c:\mirc\funlines.txt)
      /kick /kick # $1 $read(c:\mirc\funkicks.txt)
      /silly /say $read(silly.txt,5)

    $readini(filename, [n], section, item)

      Im Gegensatz zu $read, das aus jeder Art von Textdatei lesen kann, liest $readini NUR Zeilen aus einer .ini-Datei. Es wurde im Zusammenhang mit dem /writeini-Befehl erstellt. Beide verwenden die Standartroutinen von Windows, um aus einer .ini-Datei zu lesen, bzw. in ihr zu schreiben. Wir denken, $readini und writeini vereinfachen die Möglichkeit, automatische Abläufe in mIRC zu programmieren. Das 'n' Parameter verhindert, daß eine Zeile ausgewertet wird.

    $url

      Dieser Identifier enthält immer die www-Seite, die Ihr Webbrowser (z.B. Netscape) gerade zeigt.
      Beispiel:
      /show /say Hey Leute, ich habe eine tolle Webseite gefunden! Seht euch mal $url an!
      /mu /me hat diese URL gefunden: $url

    Weitere Identifier:
    $ip Ihre IP-Adresse
    $server Der Server, den Sie gerade verwenden
    $active Der Name des aktiven Fensters in mIRC
    $time Die Uhrzeit auf Ihrem PC
    $away Sagt Ihnen, ob Sie gerade als abwesend registriert sind, oder nicht
    $ticks Die Anzahl der Ticks seit dem Start des Betriebssystems.
    $idle Rückgabe der Zeitspanne, die Sie schon untätig (idle) sind.
    $online Rückgabe der Anzahl der Sekunden auf Ihrem Online-Timer
    $version Rückgabe der mIRC's Versionsnummer
    $ctime Die Anzahl der Sekunden seit 00:00:00 GMT, 1.1.1970
    $asctime(/N/index.html) Rückgabe des ctime-Wertes im Text-Datumsformat
    $day Der gegenwärtige Tag
    $date Das gegenwärtige Datum in europäischer Reihenfolge (JA!! mIRC ist kein amerikanisches Programm!! :o) Man kann alternativ auch $adate (amerikanisch), $fulldate oder $day verwenden.
    $duration(Sekunden) Übersetzt Zahlen wie 123456 in 1Day 10hrs 17mins 36 secs.
    $logdir, $getdir, $wavedir, Rückgabe der entsprechenden Verzeichnisnamen
    $mircdir, $mididir,
    $script und $scriptdir
    $mircini Rückgabe des Verzeichnis- und Dateinamen der ini-Datei, die verwendet wird, zurück
    $nopath(Dateiname) Rückgabe des Dateinamens ohne Pfad
    $nofile(Dateiname) Rückgabe des Pfadnamens ohne Datei
    $exists(Dateiname) Überprüft, ob die entsprechende Datei existiert (Erwidert $true oder $false)
    $findfile(Verzeichn.,Dateiname,N) Durchsucht das angegebene Verzeichnis nach der Nten spezifizierten Datei
    $ddename Der DDE-Servicename, den mIRC verwendet

    $abs(/N/index.html) Rückgabe des absoluten Wertes der Zahl N
    $chr(/N/index.html) Rückgabe des Zeichen mit dem ASCII-Wert N
    $asc(C) Rückgabe des ASCII-Wertes für das Zeichen C
    $len(text) Rückgabe der Länge von "text"
    $upper(text) Rückgabe von "text" in Großbuchstaben
    $lower(text) Rückgabe von "text" in Kleinbuchstaben
    $left(text,N) Rückgabe des Nten Zeichens von links aus "text"
    $right(text,N) Rückgabe des Nten Zeichens von rechts aus "text"
    $mid(text,S,N) Rückgabe von N Zeichen aus "text" beginnend ab S
    $pos(String, Unterstring) Rückgabe der Position von Unterstring in String:

      /pos /say $pos(mIRC-Help,Help)
      "/pos/index.html" würde in diesem Falle 6 ergeben, da "Help" ab der sechsten Position beginnt

    $replace(String, Unterstring, Austauschtext) Ersetzt einen Unterstring in einem String:
      /ersetz /say $replace(mIRC-Help,Help,Hilfe)
      "/ersetz/index.html" ergibt hier mIRC-Hilfe, da Help durch Hilfe ersetzt wird.
      (Nur zur Erklärung der Begriffe String und Unterstring in diesem Abschnitt)
    $remove(String, Unterstring) Entfernt Unterstring aus String
    $strip(text) Entfernt alle Kontrollzeichen für Fett, Unterstrichen und Farbe aus Text
    $count(String1,String2) Zählt, wie oft String2 in String1 vorkommt
    $str(Text,N) Rückgabe von Text N mal wiederholt
    $rand(X,Y) Rückgabe einer Zufallszahl zwischen X und Y
    $lines(Datei) Rückgabe der Anzahl der Zeilen in Datei

    $usermode Rückgabe Ihres gegenwärtigen Usermodus
    $topic(#) Rükgabe des Topics von Channel #

    $nick(#,N) Rückgabe des Nten Nicknamen auf Channel #
    $snick(#,N) Rückgabe des Nten ausgewählten Nicknamen auf Channel #
    $opnick(#,N) Rückgabe des Nten Op Nickname auf Channel #
    $nopnick(#,N) Rückgabe des Nten nicht geopten Nickname auf Channel #
    $vnick(#,N) Rückgabe des Nten Nickname mit Sprecherlaubnis (voiced) auf Channel #
    $nvnick(#,N) Rückgabe des Nten nicht geopten Nickname ohne Sprecherlaubnis (non voiced) auf Channel #
    $comchan(Nick,N) Zeigt die Channels, auf denen Ihr und "Nick" gleichzeitig seid.
    $query(N|Nick) Rückgabe dens Namens des Nten offenen Privatchat-Fensters
    $chat(/N/index.html) Rückgabe des Namens des Nten offenen DCC-Chat-Fensters
    $notify(/N/index.html) Rückgabe des Namens des Nten Nick aus der Notify-Liste, der gerade online ist
    $token(N,C,text) Rückgabe des Nten Zeichen in text getrennt durch C (C ist die Ascii-Nummer eines Zeichens)
    $addtok(text,Zeichen,C) Fügt ein Zeichen an das Ende des Textes an, sofern dieses im Text noch nicht vorhanden ist.
    $findtok(text,Zeichen,C) Rückgabe der Nten Position eines Zeichens im Text
    $gettok(text,N,C) Rückgabe des Nten Zeichens im Text
    $instok(text,Zeichen,N,C) Fügt ein Zeichen in Nte Position im Text ein, wenn diesen im Text nicht schon vorhanden ist.
    $remtok(text,Zeichen,C) Entfernt ein übereinstimmendes Zeichen im Text
    $reptok(text,Zeichen,Neu,C) Ersetzt ein übereinstimmendes Zeichen im Text

    Für die obenstehenden Identifiers kann man N gleich Null setzen, um die gesamte Anzahl an Nicknamen/Channels/Zeichen zu bekommen.

    $snotify Rückgabe des Nicknamens, der gegenwärtig in der Notify-Liste ausgewählt ist
    $address Rückgabe der vollen Adresse des Users, der einen Remote-Eintrag auslöst
    $address(Nickname,Typ) Durchsucht die Interne Adressenliste und erwidert die volle Adresse eines Usern, sofern dieser gefunden wird.
    $maddress Rückgabe der passenden Adresse aus der Userliste, die das Event ausgelöst hat.
    $maddress(address) Rückgabe einer passendn Adresse aus der Remote Userliste.
    $level(Adresse) Sucht die passende Adresse in der Remote Users Liste und erwidert deren Level
    $ulevel Rückgabe des passenden Remote-Userlevel des ausgelösten Events
    $clevel Rückgabe des passenden Remote-Commandlevel für ein bestimmtes Event
    $dlevel Rückgabe des Standart-Userlevels (Default-Userlevel)
    $mask(Adresse,Typ) Rückgabe der Adresse anhand eines bestimmten "mask-Typs"

    Identifier und Variables können in Klammer plaziert werden:
    Beispiel: /echo $right(3,$left($len(goats),ToMooOrNotToMoo)) gibt 'Moo' zurück

    Identifiers mit anhängenden Parametern

    Einige Identifiers können mit bestimmten anhängenden Eigenschaften (properties) verwendet werden. Dies vereinfacht die Syntax und hilft bei der Erstellung von Scripts. Die Syntax lautet:
    $identifier(N|#|nick).property

    $server(N|Nick) Erlaubt den Zugriff auf die Server Liste unter File/Setup/IRC-Servers.
    $server(/N/index.html) für die Adresse, .desc für die Beschreibung, .port für den Port, .group für die Gruppe (z.B. DALNet, EFNet, oder Undernet)
    $ial(mask,N,N|Nick) Erlaubt den Zugriff auf die interne Adressenliste.
    $ial(mask,N) für die volle Adresse, .nick für den Nicknamen, .user für den User, .host für den Host, .addr für die Adresse.
    $url Erlaubt den Zugriff auf die URL-Liste.
    $url(/N/index.html) für die Adresse, .desc für die Beschreibung und .group für das Protokoll (z.B. http://).
    $chan(N,#) Rückgabe einiger Channel-Einstellungen.
    $chan(N,#) Rückgabe des Namens, ferner gibt es .topic, .mode, .key, .limit
    $chat(N|Nick) Nickname, .ip, .status (enthält active, waiting oder inactive)
    $fserv(N|Nick) Nickname, .ip, .status, .cd (aktuelles Verzeichnis)
    $get(N|Nick) Nickname, .ip, .status, .file (Dateiname), .size (Größe), .rcvd (empfangen), .cps (Übertragungsrate), .pc
    $send(N|Nick) Nickname, .ip, .status, .file (Dateiname), .size (Größe), .sent (gesendet), .Ira, .cps (Übertragungsrate), .pc $timer(/N/index.html) Erwidert die Timer die aktiv sind.
    $timer(/N/index.html) für die id, .com, .time, .reps, .delay, .type
    $group(/N/index.html).status Rückgabe, ob die Gruppe aktiv oder inaktiv ist. $group(/N/index.html).fname Rückgabe des Namens der Scriptdatei, in welcher diese Gruppe $group(3).name Rückgabe des Namens der dritten Gruppe

    Benutzerdefinierte Identifier.
    (Dieser Abschnitt wurde ursprünglich von LiOnheart geschrieben)

    Wie gerade gesehen gibt es in mIRC eine Vielzahl von eingebauten Identifiers, die man in den Remotes- und Alias-Sektionen verwenden kann. Man kann allerdings auch eigene Identifiers erstellen, und sie so konfigurieren, daß sie im Prinzip alles tun, was man will. Diese benutzerdefinierten Identifiers werden in den Aliases erstellt, und sehen fast gleich aus, mit dem einzigen Unterschied, daß das Ende aus einem /return X besteht. Der Identifier gibt also zurück, was man möchte. Zum Beispiel bildet $sum(X,Y) die Summe der Zahlen X und Y:

    /sum {
      return $calc($1 + $2)
    }
    

    Jetzt kann der Identifier $sum überall in den Aliases, PopUps und Remotes verwendet werden. Als Beispiel einen Menüpunkt in den PopUps:
    Summe:/say Die Summe von 45 und und 78 ist $sum(45,78)
    Oder in den Aliases:
    /summe /say Die Summe von $1 und $2 ist $sum($1,$2)
    (Eine Befehlseingabe wie /sum ... macht keinen Sinn. Es funktioniert nicht.)

    Alle Parameter für einen Identifier werden durch Kommata getrennt. Man kann ebenfalls sämtliche gängigen If-Then-Else Strukturen in der Definition von Identifiers verwenden. Man kann zum Beispiel erst überprüfen, ob alle für den Identifier erforderlichen Parameter vorhanden sind, und sonst eine Fehlermeldung ausgeben lassen. Zum Beispiel berechnet $perc(X,Y) den Prozentanteil X von Y:

    /perc {
      if (($1 == $null) || ($2 == $null)) { return Error not enough parameters }
      if ($2 != 1) { %half = $2 / 2 } | else { %half = 1 }
      %dummy = $1 * 100
      %perc = %dummy / $2
      %remainder = %dummy % $2  
      if (%perc == 0) { goto return }
      elseif (%remainder >= %half) { inc %perc }
      :return
      return %perc
    }
    

    Die erste Zeile stellt sicher, daß alle erforderlichen Parameter vorhanden sind. Der Rest ist die Berechnung der Prozentzahl, wobei ein Teil sicherstellt, daß das ganze auf 100% aufgeht. Man könnte diesen Identifier jetzt z.B. mit $perc(56,100) aufrufen. Daraus würden sich dann 56% ergeben.

    Zahlen sind allerdings nicht das einzige, was Identifiers enthalten können. Man kann sie auch Text oder Kombinationen aus Text und Zahlen wiedergeben lassen, wie z.B. das amerikanische Zeitformat (7:52pm):

    /atime {
      set %hr $token(1,58,$time)
      set %min $token(2,58,$time)
      if (%hr == 0) { set %hr 12 | set %sub am }
      elseif (%hr < 12) { set %sub am }
      elseif (%hr == 12) { set %sub pm }
      else { %hr = %hr - 12 | set %sub pm }
      return %hr $+ : $+ %min $+ %sub
    }
    

    Mit ein bißchen Kreativität können Sie praktisch für alles Identifier entwickeln, wie z.B. rückwärts Sprechen oder jeden zweiten Buchstaben aufleuchten lassen. Viel Spaß dabei!

    Rückkehr zum Inhaltsverzeichnis.


    7-2 Die PopUps-Sektion (Kontextmenüs).

    Popups sind Kontextmenüs, die aufspringen, wenn man die rechte Maustaste klickt. Sollten Sie diese praktische Funktion noch nicht gefunden haben, dann probieren Sie sie jetzt mal aus. Einige Popups sind in der mitgelieferten Datei 'popups.ini' vorgegeben, aber man kann sie unter Tools/Popups völlig verändern und den persönlichen Bedürfnissen anpassen.

    Der mIRC Editor wird mit geöffneten Popups starten. Bitte ignorieren Sie im Moment noch die Remotes- und Variablensektion. Der mIRC Editor ist eine einfache und kompakte Schnittstelle zu fast allen programmierbaren Sektionen von mIRC. Der Menüpunkt 'File' in der Popups-Sektion können Sie Ihr Popup laden (load), entladen (unload) und speichern (Save). Das Menü 'Edit* beinhaltet ausschneiden, kopieren und einfügen (cut, copy, paste) und eine Suchfunktion. 'Popup' zeigt eine Übersicht über die gerade geöffnete Popup-Datei.

    Im Menü 'View' kann man auswählen, welche Popups man gerade bearbeiten will. Es gibt verschiedene Kontextmenüs je nach Art des Fensters. In einem Channelfenster stehen einem andere Popus zur Verfügung, als in einem Privatfenster (Query). Man kann individuelle Kontextmenüs für das Status-, die Channel- und Privat/DCC-Fenster sowie für die Nicknamenliste und ein speziellen Punkt in der Menüleiste erstellen. (Alles das wird später noch erklärt)

    Wenn Ihr mIRC über keine vorgegebenen Popups zu verfügen scheint (die Popups-Sektion ist dann leer) , dann liegt das vielleicht daran, daß die mitgelieferten .ini-Dateien von der Installationsdatei nicht korrekt in das mIRC-Verzeichnis kopiert worden sind oder das Verzeichnis, wo die Datei popups.ini sich befindet, in mIRC nicht korrekt eingetragen wurde. Dieses Problem läßt sich aber leicht durch den Menüpunkt File/Load im Popupseditor beheben.

    Die Popups-Befehle arbeiten fast genauso wie die der Aliases. Alle Strings, die in Sektion 7.1 behandelt worden sind, können auch hier verwendet werden. Wenn Sie die Sektion 7.1 noch nicht gelesen haben, dann tun Sie das bitte jetzt. Sie brauchen die dort behandelten Informationen, bevor Sie fortfahren können.

    Lesen Sie auch unbedingt die Erklärung der Popups in der Hilfedatei und sehen sie sich die vorgegebenen Popups an. Je mehr sie herumprobiert, desto besser werden Sie es verstehen.

    Beispiel: /join

    Nehmen wir an, es gibt einen Channel, den Sie häufig betreten - #test.

    Anstatt nun immer /join #test zu tippen, wäre es doch besser, einfach auf die rechte Maustaste zu klicken, und dort mit Hilfe einer automatischen Funktion den Channel zu betreten.

    Das folgende Popup wird genau das tun. Tragen Sie es einfach in Tools/Popups ein. Achten Sie darauf, daß im Menü 'View' der Punkt 'Status Window' ausgewählt ist (nicht Query/Chat, Nicknames List oder Menubar!)
    Den Testchannel betreten:/join #test

    Klicken Sie jetzt einfach im Statusfenster auf die rechte Maustaste, und mIRC wird den Channel #test betreten.

    Beispiel: /away

    Dies ist ein Beispiel von Popups für "away" und "back". Man gibt den Grund für die Abwesenheit in eine Parameterabfragebox ein, und sendet ihn an alle Channels, in denen Sie gerade sind. (/ame führt ein /me in allen Channels aus, in denen man sich gerade befindet.)

    Abwesend....:/ame ist mal gerade weg ($?="Grund eingeben") | /away Bitte später versuchen ($1) !!
    Zurück:/ame ist zurück | /away

    Bitte beachten Sie, daß "Abwesend..." mehrere Kommandos verwendet.

    Untermenüs

    Wenn man ein paar solcher Popups einfügen würde, dann wäre der Schirm allerdings bei jedem Klick auf die rechte Maustaste völlig überfüllt. Man kann die Popups also in Untermenü-Hierarchien organisieren.

    Fügen Sie mal alle nachstehenden Popups ein:

    Sage etwas
    .Hallo:/say Hallo Leute
    .Tschüs:/say Tschüs Leute
    .Umarmen:/me umarmt $? feste!
    
    Hier wird festgelegt, daß sich die letzten drei Befehle unter "Sage etwas" befinden, in dem man sie 1) nach "Sage etwas" in der gewünschten Reihenfolge einfügt, und 2) einen "." (Punkt) voranstellt.

    Wenn Sie jetzt rechts klicken, dann sehen Sie den Menüpunkt "Kommentare". Wenn Sie diesen anwählen, dann tauchen "Hallo", "Tschüs" und "Umarmen" auf. Klicken Sie nun auf einen der Unterpunkte, um die oben festgelegte Aktion auszuführen.

    Wenn man es richtig kompliziert machen will, dann kann man diese die Untermenüs in sich auch nocheinmal abstufen. Versuchen sie zum Beispiel mal:

    Kommentare über Leute
    .Komplimente
    ..Nett heute:/say Wow, $? -- du bist ja heute richtig nett!
    ..Hilfreich:/say Danke für deine Hilfe, $? 
    ..Freund:/say Ich bin froh, daß $? mein Freund ist!
    .Beleidigungen
    ..Flasche:/say Hau ab, du Flasche!
    ..Idiot:/me fragt sich, warum sich $? manchmal wie ein Idiot benimmt!
    ..Feind:/say Ich bin froh, $? zu meinen Feinden zu zählen!!
    
    ...und so weiter! Man muß sie nur mit Hilfe der Punkte vernünftig sortieren. (Wenn durch die Darstellung oben der Groschen noch nicht so recht fällt, dann probieren Sie es unbedingt aus. Fügen Sie den oberen Abschnitt unter Tools/Popups ein. Es wird sofort klar, wenn man sieht, wie es arbeitet).

    Alle Popup Menüs können auch einer Funktionstaste zugeordnet werden. Dies ist meist dann sinnvoll, als Ersatz für oft verwendete Popups. (Stellen Sie aber sicher, daß sie die korrekte Systax verwenden und diese Definitionen (die Funktionstastenzuweisungen) in der Alias Sektion einrichten)

    Rückkehr zum Inhaltsverzeichnis.


    7-3 Die Remote Sektion.

    Die Remote-Sektion befindet sich unter Tools/Remote... und ist zweifelsohne der am weitesten entwickelte Teil von mIRC. Mit den Fähigkeiten dieses Features, kann man mIRC auf eine Weise reagieren lassen, wie es sonst nur fortgeschrittenes Scripting oder spezielle Bot-Software fertig bringt.

    Dinge wie: Dateien zum Download anbieten (eine XDCC-Liste), reagieren auf bestimmten Text im Channel oder in privaten Gesprächen, benutzerdefinierte Antworten auf CTCP-Anfragen, bequem zu konfigurierende Benutzer-Level für Freunde und programmierbare Reaktionen auf fast alle Ereignisse die auf dem IRC auftreten können... ferner können für die Reaktionen fast alle mIRC-Befehle verwendet werden.

    Die Syntax der Remotes kann zum Teil etwas kompliziert aussehen, ist im Prinzip aber einfach eine Erweiterung der Befehle, die schon im Zuge der Aliases und Popups erklärt worden sind. Wenn diese Abschnitte - und ganz wichtig, die Erläuterung der Strings und Identifiers - verstanden worden sind, dann ist auch dieses Kapitel leicht zu verstehen. Wenn nicht, dann kehren Sie noch einmal zu den Abschnitten 7.1 und 7.2 zurück. Die dort enthaltenden Informationen sind absolut wichtig, um Reaktionen auf IRC-Ereignisse zu programmieren.

    Ebenfalls ist es wichtig, was der Begriff "Remote" bedeutet (deutsch: Fernbedienung). Die Remote-Sektion wurde erstellt, um mIRC auf Aktionen von anderen Usern reagieren zu lassen - es reagiert auf bestimmte Ereignisse auf dem IRC und kann von anderen Usern praktisch ferngesteuert werden. Natürlich nur entsprechend der Parameter, die Sie einbauen! Viele hier beschriebene Funktionen kann man nicht einfach selber testen, indem man den erforderlichen Text einfach selber eingibt. Man braucht die Unterstützung von anderen Usern oder muß schlicht und ergreifend abwarten, bis gewisse IRC-Ereignisse eintreten.

    Die Remotes arbeiten Hand in Hand mit der Users-Sektion. In der Remotes-Sektion werden Scripts, d.h. Programmabläufe für bestimmte User erstellt. Jedem User in der Users List können ein oder mehrere Levels zugeordnet werden. Diese Levels bestimmen, wie mIRC auf ein Ereignis eines bestimmten Users reagiert, bzw. auf welche Ereignisse ein User Zugriff nehmen kann. In der Remote (Scripts)-Sektion können die Programmabläufe programmiert werden, in denen festgelegt wird, wie mIRC auf bestimmte Ereignisse, CTCP-Befehle und (RAW) Ereignisse auf dem IRC reagiert. Der mIRC-Standarteinstellung nach werden User List, Variablen und Remotes in der Datei 'remote.ini' gespeichert.

    Rückkehr zum Inhaltsverzeichnis.

    7-3-1 Die Remote User-Liste.

    (Bitte lesen Sie dazu auch Sektion 6-7.)

    Wählen sie den Punkt Tools/Remote, um den mIRC-Editor zu öffnen. Überprüfen Sie, ob "Users" als Box aktiv ist. Hier können nun unterschiedliche Userlevels festgelegt werden. Sie können Levels für Ihre Freunde und auch für Ihre "Feinde" einstellen und eine sogenannte "Blacklist" erstellen (User, die in einer Blacklist erfaßt sind, werden gekickt, sobald sie einen Channel betreten).

    Wozu ist das alles notwendig? Nehmen wir an, Sie haben ein Remotescript verfaßt, daß jemanden für die Benutzung des Wortes "Nonsens" aus dem Channel kickt (denken Sie sich einfach irgendein Schimpfwort stattdessen aus) Wir erklären später in Abschnitt 7.3.3 noch genauer, wie das funktioniert. Jetzt ist erst mal nur die Idee wichtig.

    Okay, vielleicht will man aber nur die üblichen User für die Benutzung von "Nonsens" kicken. Häufiger gesehene Leute sollen nur gewarnt werden und von den engen Freunden wird es ignoriert. Und völlig unbekannte User sollen direkt gekickt und gebannt (ausgeschlossen) werden.

    Um unterschiedliche Antworten für verschiedene User zu ermöglichen, muß eine User List aufgesetzt werden. Jedem User wird ein Nickname und/oder eine Adresse, so wie das Userlevel zugeordnet, daß Sie ihm geben möchteen.

    Hier ist ein Beispiel für eine gültige User List:

    1:nick1
    1:nick2
    2:[email protected]
    2:*[email protected]
    3:*!*@machine.subnet.edu
    4:*!*@*subnet.edu
    5:*[email protected]*.subnet.edu
    10:[email protected]

    Die Zahlen für das Userlevel sind völlig Ihnen überlassen. Wie Sie in den nächsten zwei Abschnitten sehen, können Sie entscheiden, was ein bestimmter User mit einem speziellen Level tun kann oder nicht. Standardmäßig ordnet mIRC jedem, der in der User List noch nicht erfaßt ist, das Level 1 zu, Sie können aber auch dieses unter Tools/Remote/Options/"Default User Level" ändern.

    Wenn Sie verschiedenen User unterschiedliche Levels zugeordnet haben, dann sind natürlich auch darauf zugeschnittene Reaktionen erforderlich, die den entsprechenden User erlauben, auf sein Level zuzugreifen. Das wird aber später noch erläutert.

    Wie Sie sehen können, sind sowohl Nicknamen als auch Adressen in der User List zugelassen. Auch Wildcards (* Sternchen) sind erlaubt. In einigen Fällen möchten Sie die User vielleicht per Nickname und Adresse spezifizieren. Diese Fälle (mit den OP, DEOP, SERVEROP,... und NOTIFY Events) werden in Abschnitt 7.3.3 erklärt.

    Man muß die User List nicht komplett per Hand erstellen... man kann auch mIRC's Editbox oder die Befehle /auser, /guser und /ruser verwenden.

    /auser Befehl: /auser Level Nickname|Adresse

      "Auser" (Add User) fügt den spezifizierten Nicknamen oder Adresse in die User List ein, und zwar mit dem festgelegten Level. Die Gültigkeit der Adresse wird nicht überprüft, d.h. so exakt aus den Befehlsparametern übernommen.

    /guser Befehl: /guser Level Nick [Typ]

      "Guser" (Get User) fügt den spezifizierten Nicknamen mit Adresse in die User List ein. Um das zu bewerkstelligen, führt mIRC einen /whois auf den angegebenen Nicknamen aus und setzt die empfangene Adresse in die User List. Das bedeutet natürlich auch, daß der hinzuzufügende Nickname gerade auf dem IRC sein muß, damit der /guser-Befehl funktioniert. Wenn man einen speziellen Typ festlegt, dann verwendet mIRC besondere Wildcards (* Sternchen) in der Adresse (Anmerkung d. Übersetzers: Wildcards dienen als Platzhalter für a) * = eine beliebige Anzahl von Zeichen und/oder b) ? = für ein einziges beliebiges Zeichen. Dies ist zum Beispiel für User sinvoll, deren Adresse sich jedesmal durch die zufällige IP-Adressenvergabe bei der Modem-Einwahl ergibt). Diese Typen sind dieselben, die auch beim /ban-Befehl verwendet werden. Die möglichen Parameter reichen von 0 bis 9 (siehe unten).

    /ruser Befehl: /ruser Nick oder Nick! oder Adresse oder Nick [Typ]

      "Ruser" (Remove User) entfernt einen Nicknamen oder eine Adresse von der User List. Sie müssen genau wissen, wie der Nick oder die Adresse in der User List verzeichnet ist, damit der Befehl arbeitet.
      Wenn jemand z.B. so eingetragen ist: [email protected] dann kann man ihn auch mit '/ruser_nick/index.html' entfernen. Beachten Sie das Ausrufezeichen, damit die gesamte Zeile gelöscht wird.
      In mIRC 3.5 wurde ein verbesserter /ruser-Befehl eigeführt, der so arbeiten kann, wie /ban oder /guser. '/ruser_nick_Typ/index.html': Wenn kein Typ festgelegt wird, dann entfernt mIRC ganz normal den Nicknamen von der User List. Wenn aber ein Typ angegeben wird, dann wird die Adresse des Nicks festgestellt, und diese dann von der User List gelöscht.

    Anmerkung: Die Verwendung von verschiedenen Adresstypen erlaubt die Spezifizierung eines Users, oder gleich einer gesamten Gruppe von Leuten, je nach Verwendung von mehr oder weniger Wildcards. Hier sind einige Resultate (wird KEIN Typ angegeben, dann die standardmäßig Type 6 verwendet):

    Eine letzte Anmerkung: Als Userlevel kann jetzt sogar ein Wort festgelegt werden, z.B. so: mircop:*!*@mardam.demon.co.uk
    Das kann man nun zum Beispiel so mit einem Event verknüpfen:
    on mircop:JOIN:#mirc:/mode $chan +o $nick

    mIRC besitzt eine interne Datenbank der Leute, die sich gerade mit Ihnen auf demselben Channels befinden. Diese Datenbank wird verwendet, um die Befehle /ban, /guser und /ruser erheblich zu beschleunigen. Diese Befehle führen einen /whois auf die entsprechende Person aus. Die Interne Adressenliste (IAL) speichert diese Information im Format [email protected] für alle User, die auf demselben Channels wie Sie sind. Wenn nun ein /ban, /guser, /ruser, /ignore, /dns oder /finger ausgeführt wird, dann wird zuerst diese Liste durchsucht. Erst wenn hier keine Übereinstimmung gefunden wird, startet mIRC das übliche /whois-Zeug. Das wird Ihre Bans erheblich beschleunigen, besonders, wenn Ihre Verbindung gerade etwas schleppt (Im IRC-Slang: to be lagged). Die interne Adressenliste aktiviert Ihr unter Tools/Remote/Options. Schalten Sie sie EIN!

    Rückkehr zum Inhaltsverzeichnis.

    7-3-2 Remote Scripts - CTCP Befehle.

    Wählen Sie in mIRC den Menüpunkt Tools/Remote um den mIRC-Editor zu öffnen. Hier kann man definieren, wie mIRC auf die "Umwelt" des IRC reagiert. Zwei getrennte Gruppen von Reaktionen sind möglich: Reaktionen auf CTCP-Befehle und auf Ereignisses (Events). In diesem Abschnitt werden die CTCP-Befehle besprochen.

    Einführung - Remote Commands reagieren auf eine sehr spezifische Befehlsform, den CTCP-Befehl. CTCP ist eine Abkürzung und steht für "Client To Client Protokoll". Die Remote-CTCP-Befehls-Sektion kann eine Sache - und nur eine - durchführen. Sie kann auf CTCP-Befehle reagieren - in der Weise, wie Sie es wünschen.

    Es gibt einige schon anhand der IRC RFC vordefinierte CTCP Kommandos. Die üblichen sind version, ping, time, userinfo, clientinfo und finger. Jeder IRC-Client wird einer standardisierten Art und Weise auf diese Befehle reagieren. Diese CTCP-Befehle werden einem in diesem Format gesendet:

      /ctcp {ihrnick} {Befehle mit Parametern, wenn welche existieren}
    Nehmen wir das Beispiel des Pings. Der andere User würde in diesem Fall folgendes tippen:
      /ctcp ihrnick ping
    Man kann sich auch selber einen Ping-Befehl schicken. Versuchen Sie mal: /ctcp ihrnick ping
    Unter normalen Umständen sendet mIRC einen Standart Ping Reply (Antwort) [ctcp seinnick pong]. Aber mit den Remote-CTCP's können Sie die Standartantwort des Programms auf einen Ping verändern. Es kann fast alles tun, was Sie wollen, wenn es einen Ping erhält. Es kann standartmäßig reagieren, oder auch nicht. Es liegt an Ihnen.
    Es gibt EINE aus Ausnahme: Sie können NICHT Ihren mIRC-Versions-Reply unterbinden... Wir mögen diese Werbung...

    Sie können auch selbst neue CTCP-Befehle und Antworten darauf entwerfen. So funktionieren zum Beispiel Features wie Dateien-Angebot (XDCC, LIST und SEND).

    Zunächst aber zurück zu unserem PING Bespiel.

    Beispiel: Benutzerdefinierte Ping-Antwort

    Öffnen Sie Tools/Remote und schauen Sie unter 'View', ob schon ein Script namens commands.ini oder ctcp.ini schon existiert. Wenn ja, wählen Sie die Datei aus, und fügen die Zeilen hinzu und änderen sie. Wenn nicht, dann gehen Sie unter den Menüpunkt 'File' und wählen 'New', um eine neue Datei zu erstellen. Versichern Sie sich, daß unter 'Listening' der Punkt ctcp ausgewählt ist! (Wenn nicht, dann werden Remotebefehler z.b. CTCP-Befehle ignoriert).

    Jetzt setzen Sie die folgende Zeile in die existierende oder neue Script-Datei ein:

      ctcp 1:ping:/notice $nick ping? Hmmmm.... PANG PANG PANG!!
    Wenn Sie nun jemand pingt, dann bekommt er als Antwort " ping? Hmmmm.... PANG PANG PANG!!" in Form einer Notice (Benachrichtigung). Hinzu kommt noch die Standardantwort 'pong'. Sie können das durch '/ctcp_ihrnick_ping/index.html' testen. Wenn es nicht funktioniert, dann überprüfen Sie, ob mIRC wirklich auf CTCP-Befehle reagiert. Aktiviern Sie die Funktion mit '/remote_on/index.html' und/oder '/ctcps_on/index.html'.
    Wenn Sie wollen, daß mIRC die Standardantwort unterdrückt, dann könnn Sie die weitere Bearbeitung mit dem Befehl /halt unterdrücken. Verwenden Sie ihn wie folgt:
      ctcp 1:ping: /notice $nick ping? Hmmmm.... PANG PANG PANG!! | /halt
    Dies wird das selbe tun, wie vorher, nur daß es die Standardantwort nicht absetzt.
    Wie schon gesagt, testen Sie es aus und beachten Sie den Unterschied.

    Die Syntax der Remote Befehle.

    Remote-Befehle bestehen (bis auf ein paar spezielle Fälle) immer aus drei Abschnitten, die von einander mit Doppelpunkten abgegrenzt sind. Die generelle Syntax sieht so aus:

    ctcp {Befehls-Level}:{CTCP-Befehl}:{Ausgelöste(r) Befehl(e) mit Parameter(n)}

    Wir schauen uns die Anschnitte einmal einzeln an:

    ctcp

      Dies sagt mIRC, daß die Definition für eine Reaktion auf einen CTCP-Befehl folgt.
    {Befehls-Level}
      Dieser Befehl wird Usern antworten, deren Userlevel gleich hoch ist, wie das Befehlslevel oder größer, es sei denn für deren (höheren) Level ist ein anderer Befehl definiert.
    {CTCP-Befehl}
      Der CTCP-Befehl kann ein freiwählbarer Name sein. Es kann ein Standart-CTCP-Befehl wie Ping oder Version sein, aber auch eine Eigenkreation.
    {Ausgelöste(r) Befehl(e) mit Parameter(n)}
      Hier werden die auszulösenden Befehle definiert. Das Format und die Verwendung von Mehrzeilenbefehlen funktioniert genauso wie in den Aliases und Popups. Die Strings werden in dieser Sektion automatisch von mIRC belegt. Sie müssen nur sichergehen, daß die von Ihnen eingesetzten Strings auch alle definiert werden, d.h. in den Remote Commands Sinn machen. (z.B. $chan wird in den Remote Commands NICHT definiert!!!)
    Schauen wir noch mal nach unserem Ping-Beispiel und nehmen wir es auseinander:
      ctcp 1:ping:/notice $nick Hmmmm.... PANG PANG PANG!!

    Die Voranstellung von ctcp teilt mIRC mit, daß die Definition eines Remote Befehls folgt. Im selben Script können auch noch Aliases, Events und Antworten auf numerische Server-Ereignisse (Raw Definitions) festgelegt werden. Aber dazu später.

    1 ist das Befehlslevel. Alle User mit dem Userlevel 1 oder höher können diesen Befehl auslösen.

    Ping ist der CTCP-Befehl, auf den der Remote-Befehl reagieren wird.

    Der ausgelöste Befehl ist eine /notice, die an $nick übermittelt wird und die gesamte Zeile "Hmmmm.... PANG PANG PANG!!" enthält. $nick ist der Identifier, der den Nicknamen der Person enthält, die Ihnen den CTCP-Befehl übermittelt hat. In diesem Fall hat er SIE angepingt. (Wir gehen auf vordefinierte Parameter später ein.)

    Fassen wir zusammen: der Effekt des Befehls "/ctcp {ihrnick} {ping}" ist "/notice {nick} Hmmmm.... PANG PANG PANG!!. Er wird ausgeführt, sobald ein CTCP Ping empfangen wird.

    Sie können auch multiple Kommandos verwenden, die durch das '|'-Zeichen voneinander getrennt werden, wie bei den Aliases oder Popups. Auf diesem Weg könnet eine einzelner Remote Befehl meherer Befehlszeilen aktivieren. Die Art und Weise, wie dies passiert, wird später erläutert. Das '|'-Zeichen fügt also zwei Remotebefehel zusammen.

    Unterschiedliche Reaktionen auf Leute mit verschiedenen Userlevels

    Sie können die Reaktionen auf CTCP-Befehle sehr fein abstufen, indem Sie ihnen verschiedene Levels zuordneen. mIRC antwortet immer mit dem passenden Befehl, der am dichtesten an die Höhe des Userlevels der Person heranreicht, die den Befehl gegeben hat. Analysieren wir mal die folgenden Zeilen...

    ctcp 1:ping:/notice $nick ping? Hmmmm your levels are tooooo low... | /halt
    ctcp 2:ping:/notice $nick ping? Hmmm! ...pang pang .... Quite dead !!
    ctcp 3:ping:/notice $nick ping? ...pang !! Hmmm... missed..
    ctcp 6:ping:/notice $nick ping? Hmmm! ...Well I like you .. you're allowed to ping me..

    ctcp 1:ping:/notice $nick ping? Hmmmm Dein Level ist zuuu niedrig!!... | /halt
    ctcp 2:ping:/notice $nick ping? Hmmm! ...pang pang .... Fast tot !!
    ctcp 3:ping:/notice $nick ping? ...pang !! Hmmm... daneben...
    ctcp 6:ping:/notice $nick ping? Hmmm! ...Na gut.. ich mag dich, du darfst mir einen Ping senden...

    Ein Level 1-User wird keinen Ping-Reply bekommen, dafür aber ein nettes " Hmmmm Dein Level ist zuuu niedrig!!..."
    Ein Level 2-User (2:[email protected]) wird es kaum "überleben", wenn er Sie pingt :o) Er wird folgendes sehen:" Hmmm! ...pang pang .... Fast tot !!"
    Ein Level 3-User (3:*!*@machine.subnet.edu) bekommt:" ...pang !! Hmmm... daneben...".
    Level 4 und 5 ist keine spezifische Reaktion zugeordnet, sie bekommen also die Reaktion, die am höchsten an Ihr Userlevel heranreicht. Das ist in diesem Falle Level 3 also bekommen sie auch alle die Level 3-Antwort.
    Level 6-User und User mit höherem Level bekommen alle die Level 6-Antwort.

    Diese Einstufung funktioniert bei allen Remote Commands und Events (Befehlen und Ereignissen)...
    Überprüfen Sie, ob Sie diesen Abschnitt verstanden haben. Villeicht lesen Sie ihn nocheinmal nach??

    Spezielle Identifiers für Remote/Befehlszeilen.

    $nick, $address, $site, $level, etc. sind alles Identifiers, die speziell für die Verwendung in der Remote-Sektion erstellt wurden. Alle üblichen Strings können aber auch verwendet werden. Sie können sie überall in den Befehlszeilen einsetzen, die durch Remote-Befehle ausgelöst werden.

    $nick: Der Nickname der Person, die den CTCP-Befehl gesendet, oder ein spezielles Ereignis (Event) ausgelöst hat.
    $address: Die volle Adresse der Person, die den CTCP-Befehl gesendet, oder ein spezielles Ereignis (Event) ausgelöst hat.
    $site: Erwidert die Adresse des Users, der das Event ausgelöst hat im Format adresse.de
    $wildsite: Erwidert die Adresse des Auslösers im Format *!*@host.domain
    $level: Das Userlevel der Person, die den CTCP-Befehl gesendet, oder ein spezielles Ereignis (Event) ausgelöst hat.

    Anmerkung: Der Identifier $chan ist normalerweise in den Remote Commands NICHT IMMER definiert... $chan enthält den Namen des Channels, auf dem ein bestimmtes Ereignis ausgelöst wurde. CTCP-Befehle werden nicht immer über Channels an Sie gesendet, oder aber die Person, die den Befehl sendet, kann auf mehreren Channels sein. Sehen Sie den Sinn?? Vielleicht hilft Ihnen $active weiter? Oder $target?

    Hier ist ein Beispiel, daß den vordefinierten Identifier $address enthält:

      ctcp 1:adresse:/notice $nick Ihre Adresse lautet: $address
    Wenn Ihnen ein User nun den Befehl '/ctcp {ihrnick} adresse' übermittelt, dann antworten Sie mit einer Notice welche "Ihre Adresse lautet: {was immer seine oder ihre Adresse ist}" enthält.

    Beispiel:Freunden auf Anfrage Operator Status geben (Unter Verwendung von $2)

    Wenn Sie sich noch nicht im Klaren sind, wie all dies prinzipiell funktioniert, dann machen Sie sicch keine Gedanken. Folgen Sie einfach den Beispielen bis der Groschen fällt. Wenn nötig, lesen Sie die vorhergehenden Passagen noch einmal. Versuchen Sie aber noch nicht, Ihre eigenen Remote Commands zu schreiben oder zur nächsten Passage weiterzublättern, bis Sie alle Konzepte verstanden haben.

    ctcp 1:opmich:/notice $nick Sorry, Sie werden auf $2 kein Op Status bekommen. Ihr Level reicht nicht aus...
    ctcp 5:opme:/mode $2 +o $nick

    Wenn ein Freund mit Userlevel 5 Ihnen nun einen '/ctcp_opme_/index.html' sendet, dann wird ihnen der Remote-Befehl Ops auf dem angegebenen Channel geben. Level 1 User werden keinen Ops bekommen, was immer sie auch versuchen. Das Parameter $2 bezieht sich auf das zweite Wort im CTCP-Befehl. In diesem Fall ist es der Channelname. ($1 wäre das Wort 'opme')

    $N- kann verwendet werden, um lange Zeilen zu verarbeiten, die ein Remote-User in einem CTCP-Befehl übermittelt (wobei N eine Ziffer representiert).

    ctcp 5:return:/notice $nick $2-

    Dieser Befehl wird jeden Satz, den ein Remote-User sendet, an Ihn zurückübermitteln. Die gesamte Zeile nach dem CTCP-Befehlsnamen befindet sich in dem String $2-, welche an den User gesendet wird.
    Ein an Sie gerichteter Befehl '/ctcp_ihrnick_Bla_Fasel_Schwtz_Sabbel/index.html' läßt mIRC den folgenden Befehl ausführen: '/notice_Freund_Bla_Fasel_Schwtz_Sabbel/index.html'.

    Mehrzeilenbefehle.

    Ein empfangener CTCP-Befehl kann durchaus auch mehrere Befehle auslösen...

    ctcp 5:opme:/mode $2 +o $nick | /notice Freund Sie haben jetzt Operator Status auf Channel $2

    Wenn Ihr Level 5-Freund den Befehl '/ctcp_ihrnick_opme_/index.html' sendet.

    Was also passiert?
    In der Tat werden zwei Aktionen durch den CTCP-OPME-Befehl ausgelöst.
    Erstens: /mode #Channelname +o Freund
    Zweitens: /notice Freund Sie haben jetzt Operator Status auf Channel #Channelname

    Noch ein CTCP-Befehl, der einen Mehrzeilenbefehl auslöst:

    ctcp 10:part:/part $2 | /notice $nick Ich habe den Channel $2 verlassen

    Wenn nun von einem Level 10-User der Befehl '/ctcp_ihrnick_part_/index.html' eingeht, dann wird mIRC erst den Channel verlassen, und dem Sender des Befehls dann eine Bestätigung senden.

    $2 enthält den zu verlassenden Channel
    $nick ist der Nickname der Person, die angefragt hat

    Andere Beispiele.

    ctcp 1:ping:/notice $nick Bitte sende mir keine Pings!
    ...würde mit '/notice_seinnick_Bitte_sende_mir_keine_Pings/index.html' antworten.

    ctcp 5:time:/notice $nick Zeit sich eine Uhr zu kaufen!
    ...würde mit '/notice_nick_Zeit_sich_eine_Uhr_zu_kaufen/index.html' antworten.

    ctcp 10:/notice $nick Ich bin der, der ich sage | /notice $nick Und ich sage, ich bin DU!!
    ...würde antworten: "/notice $nick Ich bin der, der ich sage ich bin"
    gefolgt von
    "/notice $nick Und ich sage, ich bin DU!!"

    Rückkehr zum Inhaltsverzeichnis.

    7-3-3 Remote Scripts - Ereignisse (Events).

    Wählen Sie den Punkt Tools/Remote, um den mIRC-Editor zu öffnen, dann aktivieren Sie unter 'View' die Datei events.ini. Wenn kein Event-Script verfügbar ist, dann laden Sie die mitgelieferte Script-Datei oder erstellen eine neue mit File/New. Eine neu angelegte Datei wird standardmäßig script1.ini genannt.

    Wie Sie gesehen haben, befassen sich Remote-CTCP-Scripts nur mit CTCP-Befehlen. Die Remote Ereignisse (mIRC-intern Events genannt) befassen sich mit den anderen Dingen, die auf dem IRC passieren können. Das klingt vielleicht gewaltig, aber keine Sorge. Wie schon erklärt, bauen die Lektionen auf einander auf. Wenn Sie die Remote Commands begriffen haben, dann werden die Remote Events ein Kinderspiel. Die schwierigen Dinge haben sie im letzten Teil schon gelernt.

    Warnung: Üblicherweise reagiert mIRC ziemlich sensibel auf fehlerhafte Remote-Events-Syntax. Wenn in den Scripts Fehler gemacht werden, dann kann das durchaus in einem GPF enden. (GPF ist die Abkürzung für General Protection Fault. In der deutschen Windows-Version wohl bekannt als Adressenschutzverletzung). Wenn also plötzlich Stabilitätsprobleme auftreten, wo vorher keine waren, dann schauen Sie mal zuerst hier nach.

    Remote Event Syntax. Folgende Remote Events gibt es: TEXT, INPUT, JOIN, PART, KICK, OP, DEOP, BAN, UNBAN, INVITE, NICK, QUIT, TOPIC, SERVEROP, NOTIFY, UNOTIFY, MODE, USERMODE, SERVERMODE und SMODE. Neben dem TEXT Event sind die ähnlich arbeitenden ACTION, NOTICE, NOTICE, CHAT, SERV und WALLOPS verfügbar. Neu hinzugekommen sind FILESENT, FILERCVD und NOSOUND sowie CHATOPEN, CHATCLOSE, SERVOPEN und das SERVCLOSE Event. (ich hoffe, ich habe keine vergessen!) CONNECT, DISCONNECT, MIDIEND,....

    Folgende Remote Events gibt es: TEXT, JOIN, PART, KICK, OP, DEOP, INVITE, NICK, QUIT, TOPIC, SERVEROP, NOTIFY, MODE, SERVERMODE und SMODE. Neben TEXT sind ähnliche Evenst wie the similar ACTION, NOTICE, SNOTICE, CHAT, SERV und WALLOPS für mehr testbasierend Anwendungen. Neu sind die FILESENT und FILERCVD Events, sowie CHATOPEN, CHATCLOSE, SERVOPEN, SERVCLOSE und einige mehr.

    Was genau sie tun und wie man sie benutzt, besprechen wir in Kürze. Erstmal schauen wir uns ein paar kurze Beispiele an, um die Syntax zu verstehen. Sie sieht im Prinzip genau wie die der Remote Commands aus. Hier ein Beispiel für ein Remote Event, daß auf Text reagiert:

    on 1:TEXT:hallo:#:/msg $nick Hallo auch!

    Schauen Sie mal in Tools/Remote nach, ob da schon ein Script namens events.ini vorhanden ist. Wenn nicht, dann erstellt unter File/New eine neue Datei. Schauen Sie unter "Listening" nach, ob der Punkt "Events" aktiviert ist. (Wenn diese Funktion nicht aktiviert ist, wird mIRC auf die definierten Ereignisse nicht reagieren). Übertragen Sie nun die obenstehende Zeile in eine neue oder vorhandene Datei ein.

    Dieses Remote-Ereignis wird ausgelöst, wenn in einem aktiven Channel das Wort "hallo" gefunden wird. mIRC's Antwort besteht in einer privaten Nachricht mit dem Inhalt "Hallo auch!".

    Hier ist noch ein anderes Beispiel, diesmal mit JOIN:

    on 1:JOIN:#:/notice $nick Herzlich Willkommen auf Channel $chan

    Dieses Remote-Ereignis reagiert immer dann, wenn ein User einen Channel betritt, auf dem Sie sich auch gerade befinden. Es wird eine private Nachricht mit dem Inhalt "Herzlich Willkommen auf Channel #Channelname" gesendet.

    Wenn Sie es bis hier geschafft und die Remote Commands verstanden haben, dann sollte Ihnen der Rest sehr leicht fallen. Remote-Ereignisse bestehen normalerweise aus 3,4 oder 5 Teilen, getrennt durch Doppelpunkte. Die meisetn Events haben 4 Teile. Ausnahmen sind die Events TEXT, welches sich aus 6 Teilen zusammensetzt und QUIT und NICK, welche nur aus 3 Teilen bestehen.

    Alle Events bis auf TEXT, QUIT und NICK sehen von Ihrer Struktur so aus:

    ON Event-Level:Event:WO:{ Befehl(e) mit Parameter(n) }

    ON

      Dieses Präfix signalisiert mIRC, daß ein Event folgen wird

    Event-Level
      Dieses Event reagiert nur auf Ereignisse der User mit diesem Level oder höherem, wenn für ihr Level nicht ein eigenes Event definiert wurde.
    Event
      Der Name des Events, auf das reagiert werden soll, wie z.B. JOIN, OP, etc...
    Wo
      #, #Name. Wo soll auf das Erscheinen dieses Events geachtet werden? Entweder # für jeden Channel, oder #Name für einen bestimmten Channel (wie #test).
      Man kann das Event auch so definieren, daß es auf mehreren bestimmten Channels ausgelöst wird: on 1:TEXT:hallo*:#chat,#help,#mirc:/msg $nick Hallo auch!
      Ausnahme: Dies gilt nicht für NICK und QUIT!
    Befehl(e) mit Parameter(n)
      Die auszulösenden Befehle. Es funktioniert genauso wie in den Remote-Commands, nur halt mit anderen vorangestellten Parametern.

    ...und die großen Ausnahmen sind die Events TEXT und ACTION, welche so funktionieren:

    ON Event-Level:Event:Text:Wo:{ Befehl(e) mit Parameter(n) }

    ON

      Siehe oben
    Event-Level
      Siehe oben
    Event
      TEXT oder ACTION
    Text
      Welches Wort, oder welcher Text soll das Event auslösen? Wie z.B. "hallo" im Beispiel oben
    Wo
      #, #name, ?, * Genau wie oben kann man dem TEXT Event vorschreiben, wo es nach bestimmtem Text suchen soll. Auf allen Channels (#), auf einem oder mehreren bestimmten Channels (#Name), in privaten Unterhaltungen (?), oder überall (*). Die Events TEXT und ACTION reagieren allerdings nicht auf Text in DCC Chats oder DCC Server-Fenstern. NOTICE reagiert auf Text in Notices, CHAT auf Text in DCC Chats und SERV auf Text in einem DCC Server-Fenster.
    Befehl(e) mit Parameter(n)
      Siehe oben

    Die Events

    Nun folgt die Beschreibung der verschiedenen Events, auf die mIRC reagieren kann...


    TEXT Event

      Reagiert, wenn ein definierter Text im Channel oder in einer privaten Unterhaltung auftaucht. ACTION und NOTICE funktionieren genauso.

    Beispiel:
    on 1:TEXT:nonsens:#:/kick $chan $nick Kein Nonsens!!
    Dieses Event achtet in allen Channels auf das Wort "Nonsens", und kickt den User, der es gesagt hat.

    Beispiel:
    on 1:TEXT:nonsens:#test:/kick $chan $nick | /notice $nick Hallo $nick ! Du hast Nonsens gesagt, das ist auf Channel #test nicht erlaubt...

    Wenn das Wort "Nonsens" in #test gesagt wird, dann wird der entsprechende User gekickt (natürlich nur, wenn man auf #test auch Op ist) und er erhält eine Notice mit dem Inhalt "Hallo {Nickname} Du hast Nonsens gesagt, das ist auf Channel #test nicht erlaubt..."

    Beispiel:
    on 5:TEXT:hilfe:?:/notice $nick Ich wünschte, ich könnte Dir helfen. Aber ich kann nicht.
    Dieses Event reagiert, wenn das Wort Hilfe alleinstehend in einer privaten Unterhaltung gefunden wird. Man kann Wildcards (* Sternchen) in den Text einbauen, auf den mIRC reagieren soll:
    *

      Reagiert auf jeden Text
    wort*
      Wenn ein User einen Satz mit diesem Wort startet, dann wird das Event ausgelöst.
    *wort
      Wenn ein User einen Satz mit diesem Wort beendet, dann wird das Event ausgelöst.
    *wort*
      Wenn ein User dieses Wort irgendwo im Satz benutzt, dann wird das Event ausgelöst.
    wort
      Eine exakte Übereinstimmung wird benötigt, um das Event auszulösen.

    Wie schon gesagt, reagiert das letzte Beispiel nur, wenn eine exakte Übereinstimmung vorliegt, d.h. ein User einzig das Wort "Hilfe" sendet und nicht, wenn es nur irgendwo in einem Satz auftaucht.

    Beispiel:
    on 5:TEXT:hallo*:?:/notice $nick Hallo auch!
    Dieses Beispiel reagiert nur, wenn ein anderer User eine private Nachricht schickt, die mit "Hallo" beginnt. (Anmerkung des Übersetzers: Die korrekte Groß- und Kleinschreibung ist in der Definition des Textes nicht wichtig)

    ACTION Event Siehe TEXT Event .... Es funktioniert genauso....

    NOTICE Event Siehe TEXT Event .... Es funktioniert genauso....

    CHAT Event Siehe TEXT aber reagiert auf DCC Chat Text.

    Beispiel:
    on 1:CHAT:blabla:/msg $me $nick sagte $1- zu Ihnen in einem DCC Chat.

    SERV Event Siehe CHAT Event aber reagiert auf DCC Fileserver Text.

    Beispiel:
    on 1:SERV:get mirc:/echo server 6 To $nick the mIRC zip is sent.

    JOIN Event Dieses Event spricht an, wenn ein User einen Channel betritt.

    Beispiel:
    on 1:JOIN:#Test:/notice $nick Willkommen im #Test Channel!
    Sendet eine Notiz mit dem Inhalt " Willkommen im #Test Channel!" an jeden, der den Channel #test betritt.

    Beispiel:
    on 25:JOIN:#cool:/kick $chan $nick Sie sind hier nicht willkommen!!
    Kickt jeden Level 25 User bei betreten des Channels mit der Nachricht "Sie sind hier nicht willkommen!!"

    PART Event Dieses Event reagiert, wenn ein User einen Channel verläßt.

    Beispiel:
    on 10:PART:#:/notice $nick Hey, danke, daß Sie im Channel $chan vorbeigeschaut haben!
    Sendet eine Notiz mit dem Inhalt " Hey, danke, daß Sie im Channel $chan vorbeigeschaut haben!" an jeden Level 10 User, der den Channel verläßt.

    Beispiel:
    on 90:PART:#:/msg $chan Yuppieeehh!!! $nick ist weg!!
    Sendet eine Nachricht an den Channel, wenn ihn ein Level 90 User verläßt.

    CONNECT Event Das CONNECT Event tut im Prinzip dasselbe, wie die Sektion "Perform" unter File/Options. Es wird immer dann ausgelöst, wenn sich mIRC mit einem IRC-Server verbunden hat, und die MOTD fertig gescrollt ist.

    Beispiel:
    on 1:CONNECT:/echo Erfolgreich mit $server verbunden!

    DISCONNECT Event Wird ausgelöst, wenn mIRC die Verbindung zum IRC-Server verliert.

    Beispiel:
    on 1:DISCONNECT:/echo Huch! Verbindung verloren!

    KICK Event Wird ausgelöst, wenn ein User von einem Channel gekickt wird.

    Beispiel:
    on 100:KICK:#:/kick $chan $nick | /invite $knick $chan | /notice $nick Diese Person ist mein Freund!
    Wenn ein Level 100 User aus einem Channel gekickt wird, dann kickt mIRC denjenigen, der den Kick getätigt hat. Anschließend wird der gekickte Freund eingeladen, den Channel wieder zu betreten (invite) und der "Kicker" bekommt eine Notiz mit dem Inhalt "Diese Person ist mein Freund".
    Anmerkung: $knick ist der Identifier für den Nicknamen des Users, der gekickt worden ist. Beachtet auch, daß es sich hier um einen Mehrzeilenbefehl handelt. Es funktioniert wie in den Remote Commands.

    OP Event Wird ausgelöst, wenn ein User Operator Status bekommt (geopt wird).

    Beispiel:
    on 1:OP:#test:/notice $opnick Sie haben von $nick Operator Status bekommen.
    Wenn jemand auf #test geopt wird, dann wird diesem User eine Notiz mit dem Inhalt "Sie haben von {dem User, der ihn geopt hat} Operator Status bekommen." geschickt.
    Anmerkung: $opnick ist in diesem Event der Nickname desjenigen, der Operator Status bekommen hat.

    DEOP Event Wird ausgelöst, wenn ein User Operator Status entzogen wird (deopt wird).

    Beispiel:
    on 1:DEOP:#:/msg $opnick Pech gehabt! Sie wurden von $nick deopt!
    Wenn jemand deopt wird, dann wird ihm eine Nachricht mit dem Inhalt " Pech gehabt! Sie wurden von (der Person, die ihn deopt hat) deopt!
    Anmerkung: $opnick ist der Nickname des deopten Users in diesem Fall.

    Rückkehr zum Inhaltsverzeichnis.


    Wichtig:
    Bei der Erklärung der Events OP, DEOP, SERVEROP und NOTIFY muß eine wichtige Anmerkung gemacht werden. Aufgrund der Tatsache, daß der Server beim Open, Deopen oder Sichten auf einem Channel oder dem IRC nur die Nicknamen der User übermittelt (nicht die vollen Adressen), müssen die User, auf die sich diese Events auswirken sollen auch per Nickname in der Remote-Userliste verzeichnet sein. Die volle Adresse ([email protected]) reicht nicht. mIRC kann aus so einem Eintrag den Nick nicht herausfiltern. Die Ausnahme ist natürlich, wenn das Zugangslevel für dieses Event auf 1 gesetzt wird, d.h. alle potentiellen User betroffen sind. In diesem Fall müssen die User nicht aufgeführt sein. Wenn Sie Leuten ein Userlevel zuordnen wollen, mit dem Sie auch die Events OP, DEOP, SERVEROP und NOTIFY ansprechen können, dann tun Sie das am besten so:

    3:freundA
    5:freundB
    5:freundC
    10:[email protected]

    Die Notwendigkeit dieser Art von Spezifizierung kann die doppelte Aufführung eines Users in der Liste sinnvoll machen und zwar einmal nur per Nickname und einmal per voller Adresse. Dies verhindert, daß jeder User der zufällig (oder auch absichtlich) den Nick freundB verwendet, vollen Zugriff auf die höheren Event- und Command-Level erhält und sie nutzen kann.


    BAN Event
    UNBAN Event Mit diesem Event kann man auf einfache Art und Weise Freunde vom Channel-Ban befreien (unbannen).

    Beispiel:
    on 5:BAN:#tree:/mode $chan -b $banmask
    Der Identifier $banmask enthält die gesamte Adresse, die auf die Ban-Liste des Channels gesetzt wird. Toll nicht? Der $bnick-Identifier enthält den Nicknamen der Person, die gebant wird - er ist allerdings nicht immer definiert, da für einen Channel-Ban nicht notwendigerweise ein Nick erforderlich ist (z.B. bei einem Siteban: *!*@modem*.adresse.de). UNBAN funktioniert genauso

    INVITE event Wird ausgelöst, wenn man in einen Channel eingeladen wird.

    Beispiel:
    on 5:INVITE:#test:/join $chan | /describe $chan dankt für die Einladung!
    Wenn Sie nach #test eingeladen werden, dann betritt mIRC den Channel und sendet eine Aktion mit dem Inhalt "dankt für die Einladung!".

    NICK Event Wird ausgelöst, wenn ein User seinen Nicknamen ändert.

    Beispiel:
    on 1:NICK:/notice $newnick Mir hat $nick besser gefallen als $newnick !
    Immer wenn ein User seinen Nicknamen ändert, bekommt er die Notiz "Mit hat {alternick} besser gefallen als {neuernick} !"
    Anmerkung: $nick enthält den alten Nicknamen, $newnick (na was wohl?) den neuen Nicknamen.
    Anmerkung: Der :Wo:-Teil wird in ON NICK nicht verwendet.

    QUIT Event Wird ausgelöst, wenn ein User den IRC verläßt.

    Beispiel:
    on 2:QUIT:/notice $me Partytime!!! $nick hat gerade IRC verlassen!
    Wann immer ein Level 2 User den IRC verläßt, schickt mIRC eine Notiz mit Inhalt "Partytime!!! {Nickname} hat gerade IRC verlassen!" an sich selbst.
    Anmerkung: Der :Wo:-Teil wird in ON QUIT nicht verwendet.

    TOPIC event Wird ausgelöst, wenn das Topic in einem Channel geändert wird.

    Beispiel:
    on 1:TOPIC:#:/msg $chan Toll! Ich liebe das neue Topic!
    Wann immer das Topic in einem Channel geändert wird, wird die Nachricht " Toll! Ich liebe das neue Topic!" in den Channel geschickt.

    SERVEROP event Wird ausgelöst, wenn der IRC-Server einem User Operator Status zurückgibt.
    Anmerkung: Für dieses Event muß der User per Nickname in der Remote-Userliste aufgeführt werden

    Beispiel:
    on 1:SERVEROP:#mirc:/mode $chan -o $nick | /notice $opnick Tut mir leid, aber auf Channel $chan sind keine Serverops erlaubt!
    Wenn ein User auf Channel #mIRC von einem Server geopt wird, dann wird Ihm der Ops sofort wieder entzogen und er bekommt die Notiz "Tut mir leid, aber auf Channel #mIRC sind keine Serverops erlaubt!". Wenn ein Server vom IRC-Netzwerk abgespalten wird (Netsplit) und sich dann wieder mit ihm verbindet (Netjoin), tauscht dieser mit dem Netzwerk sämtliche Channelmodi - unter anderem die Operators - aus und gleicht sie an. In diesem speziellen Fall kann es zu Serverops kommen. (Anmerkung des Übersetzers: Das obenstehende Beispiel macht Sinn, da Netsplits von den bösen Jungs auf dem IRC gerne dazu benutzt werden, um illegal Ops auf einem Channel zu erlangen und diesen dann zu übernehmen. Dieses Verfahren nennt sich im IRC-Slang "Channeltakeover". Also ist es sinnvoll, Serverops von vornherein zu unterbinden. Wenn der Deop einen Freund trifft, kann man ihm immer noch "von Hand" den Ops zurückgeben. Alles eine Frage der Sicherheit.

    NOTIFY Event
    UNOTIFY Event Wird ausgelöst, wenn ein in der Notify-List aufgeführter Nickname den IRC betritt.
    Anmerkung: Für dieses Event muß der User per Nickname in der Remote-Userliste aufgeführt werden

    Man kann dieses Event z.B. dazu verwenden, einen /whois auszuführen, sobald ein Nick gesichtet wird, um zu überprüfen, ob es auch tatsächlich der korrekte User ist. Denken Sie aber daran, daß der User per Nickname in der Remote-Userlist aufgeführt sein muß (wie bei OP, DEOP und SERVEROP). Das liegt an den IRC-Protokollen, die nicht die Adresse der gesichteten Person übermittelt, sondern nur den Nicknamen. Sie müssen den Nicknamen in die Liste unter File/Options/Notify List einfügen und sobald mIRC die Person auf dem IRC sichtet, wird das Event ausgelöst. Das UNOTIFY Event wird ausgelöst, sobald mIRC registriert, daß der User den IRC verlassen hat, oder seinen Nicknamen geändert hat.

    Beispiele:
    on 1:NOTIFY:/notice $nick Wenn du tatsächlich $nick bist, dann komm nach #test!
    on 1:UNOTIFY:/echo $active $nick hat den IRC verlassen
    on 3:NOTIFY:/whois $nick
    on 5:NOTIFY:/beep 10 50 | /whois $nick

    MODE Event
    SERVERMODE Event Dieses Event reagiert auf Änderungen an den gegebenen Channelmodi. Die MODE-Syntax hat sich geändert! Es werden keine Channelmodi mehr vorgeschrieben. $1- wird nun mit den Änderungen an den Modi belegt.

    Beispiele: Syntax und Beispiel:
    on 1!:MODE:#name:/echo 6 Modusänderung von $nick auf Channel $chan!
    on 1!:SERVERMODE:#name:/echo 6 Der Server änderte den Modus zu $1-

    Bitte bedenken Sie, wenn Sie einem User mit einem höheren Level die Modi zu ändern, ohne daß Sie einschreiten, dann können User mit niedrigerem Level dies ausnutzen. So wie sie (oder der Server) den Modus ändern, dann wird dies sofort umgesetzt. mIRC weiß nicht, daß ein Mode-Anteil von einem User höheren Levels gesetzt wurde.
    Schützen Sie sich aber vor Endlosschleifen, wenn User unzulässige Modi erzwingen (Status-Flood)!

    USERMODE event This event triggers when you change usermode.
    When your usermode changes (to +i for instance) this event will detect it and you can automatically react to it.

    VOICE event
    DEVOICE eventThese events react to people getting or loosing voice on channels. Examples:
    on 1:VOICE:/notice $nick Welcome in the speaking world!
    on 1:DEVOICE:/notice $vnick Hey, $nick is allowed to speak here!

    SNOTICE event This event listens for server notices. Server notices tell you all kind of things happening at and with the IRC server you use. To recieve them you have to set your user mode to +s (/mode #nickname +s). Most people don't need this setting... It is mostly meant for IRCOps and server maintainers. With this event you can filter the server notices send to you and you can filter them ie. prevent them from being displayed or automatically react to them. The event syntax is very much like the TEXT event...
    on 1:SNOTICE:servers_text:/echo 6 status The server noticed you about $1-

    FILESENT event This event will react to all successful DCC Send file transers. You can use it to send you or the reciever a small message...
    on 1:FILESENT:*.txt,*.ini:/echo Sent $filename to $nick ( $+ $address $+ )
    on 1:FILESENT:mirc50s.exe:/notice $nick Have fun with the 16 bit mIRC
    on 1:FILESENT:mirc50t.exe:/notice $nick Have fun with the 32 bit mIRC

    FILERCVD event This event will react to all successful DCC Get file transers. It will trigger as soon as a file is succesfully retrieved to your harddisk. You can use it to send you or the sender a small message, or to start a helper application to view the recieved picture, play a sound file or read the text.
    on 1:FILERCVD:*.txt,*.ini:/run notepad.exe $filename
    on 1:FILERCVD:*.wav:/wavplay $filename
    on 1:FILERCVD:*.gif:/run c:\windows\wingif\wingif.exe $filename
    on 1:FILERCVD:*.jpg:/run c:\windows\lview\lviewp19.exe $filename
    on 1:FILERCVD:*.mid,*.voc:/run wplany.exe $filename
    on 1:FILERCVD:*.*:/notice $nick Thanks for the file!

    SENDFAIL event
    GETFAIL event These events trigger when a DCC transfer fails due to a lost connection or transfer time-out. Examples:
    on 1:SENDFAIL:*.txt:/echo failed to send $filename to $nick
    on 1:GETFAIL:*.txt:/echo failed to get $filename from $nick

    CTCPREPLY event Listen for replies to ctcps. eg.:
    on 1:CTCPREPLY:PING*:/echo $active Got ping reply from $nick
    on 1:CTCPREPLY:*mirc*:/echo $active Wow $nick uses mIRC too!

    MIDIEND event This event triggers when a midi finishes playing (but not if you stop it by playing another midi or using /splay stop). Example:
    on 1:MIDIEND:/echo mIRC finished playing midi file!

    INPUT event This event is triggered when you enter whatever text message into an editbox and press enter. You can process the line with a script or whatever you like then! /halt prevents the standard processing of the text. Example:
    on 1:INPUT:/echo you entered $1-

    LOAD event Triggers when mIRC is started and scripts are loaded.
    START event Triggers as soon as your (new) script is ready to go.
    on 1:LOAD:/echo script succesfully loaded
    on 1:START:/echo script succesfully started

    With the LOAD event you can give commands when mIRC loads the scripts. To give initialization commands which are run whenever mIRC is first run (and loads scripts automatically) use the START event. The START section also runs after the LOAD section when a script is first loaded. If a script is loaded from within the remote dialog, auto-run commands are not executed until the dialog is closed.

    Special identifiers for Remote/Events/ lines.

    $nick, $address, $site etc. are all identifiers specially created tobe used in remote lines. You can use them whereever you want in the lines triggered by remote events...

    $nick The nick of the person who sent the command or activated the event.
    $address The full address of the person who sent the command.
    $site The site of the person who sent the command.
    $level Represents the users remote level.
    $chan The channel on which some event triggered a Remote/Events line.

    Rückkehr zum Inhaltsverzeichnis.

    7-3-4 Various flags you can use in front of CTCP or Event lines in Remote.

    Finally some remarks have to be made about the various flags you can use in the Remote section. (With Commands and/or Events) The various flags you can use require you to experiment a little.... see what they do and when. See if they do what you expected and test a lot !

    *** The ! flag. (Events only)

    This flag causes events not to be triggered by things you do yourselves.... .... mIRC will not react to things said or done from clients with your address. (A similar flag is the 'me' flag..which makes sure things wont be triggered by the IRC client -you- use. ie. it will react to any other IRC clients you may be running simultaneously)

    Beispiel:
    on 1!:JOIN:#mine:/notice $nick Welcome here.
    This will not react to you joining #mine ....everybody else will get the Welcome message..

    *** The = flag. (Events only)

    This flag is used to prevent anything from happening.... you can use it to not bother higher level people with events meant for lower level people.

    Beispiel:
    on 1:JOIN:#mine:/ctcp $nick VERSION
    on 3:JOIN:#mine:=
    Level 1 and 2 users will be versioned while level 3 and higher users will not see anything at all,... nor you. (In version 3.2 you had to set up an harmless event to do this.)

    Beispiel:
    on 1:JOIN:#test1:/notice $nick Welcome to #test1
    on 1:JOIN:#test2:/notice $nick Welcome to #test2
    on 3:JOIN:=
    Level 3 and higher users won't be noticed Welcome.... lower level users only on #test1 and #test2.

    *** The + flag.

    This flag makes a certain command available ONLY to users with the EXACT level of the command... Higher (and of course lower) level users can't use/access it !

    Beispiel:
    on 1:JOIN:#mine:/ctcp $nick VERSION
    on +3:JOIN:#mine:/notice $nick Welcome here.
    All users EXCEPT level 3 users will be versioned on channel 'mine' ... Level 3 users will be welcomed...

    Beispiel:
    on +5:JOIN:#mirc:/msg $nick Welcome level 5 user!

    *** The ; and REM flag.

    These flags can be used to switch off commands or events temporarily by 'commenting them out'.
    Example:
    ;on 1:JOIN:#mine:/notice $nick Welcome here.
    REM on 1:JOIN:#mine:/notice $nick Welcome here.

    *** The * and @ flags.
    Thise flags makes mIRC to execute an event or command ONLY if you're operator on the channel the event or commands if used on.
    on *1:JOIN:#mine:/notice $nick Welcome here.

    *** The me flag.
    This flag is designed to make sure you can make events only work if somebody with exactly the same address as you use does something. This other person normally would be your 2nd instance of mIRC running from the same PC. Keep in mind that with proper leveling of your users in the Remote/users section you never (?) need this flag.

    In mIRC version 3.7 some additional flags for the EVENTS were introduced. With these flags you can make mIRC to take into account the level of the person that started an EVENT.
    These flags can only be used with the OP, DEOP and KICK events since these are the only events that deal with somebody doing something to somebody else.
    The three flags you can add are >, < and =. But you can make mathematical combinations of them leading to a set of 6 flags: <, >, <=, >=, <> and =.

    These flags will make the event only be triggered if FIRST the level of the event fits the Opped, Deopped or Kicked guy (m/f) and then SECOND the level of the activator meets the
    expression {level-activator} [flag (mathematical expression)] {level-of-event}

    You look like you need some examples ....

    Assume you being the GUARD with a Friend at level 2 and an Activator who can have several different levels.... Then imagine these simple EVENTS :

    on <2:DEOP:#test123:/msg $chan the < triggered
    on >=2:DEOP:#test123:/msg $chan the >= triggered

    With the activator at level 1.
    *** Activator sets mode: -o Friend
    <GUARD> the < triggered
    Your Friend has level 2, the Activator has level 1, 1<2 is valid (one is smaller than 2), the first level 2 DEOP event is triggered...

    With the activator at level 2.
    *** Activator sets mode: -o Friend
    <GUARD> the >= triggered
    Your Friend has level 2, the Activator has level 2, 2<2 is invalid, 2>=2 is valid (2 is larger than or equal to 2), the second level 2 DEOP event is triggered...

    With the activator at level 3.
    *** Activator sets mode: -o Friend
    <GUARD> the >= triggered
    Your Friend has level 2, the Activator has level 3, 3<2 is invalid, 3>=2 is valid (3 is larger than or equal to 2), the second level 2 DEOP event is triggered...

    As you can see its pretty straight forward once you got the idea .... read this over till the coin drops... More examples :

    on <2:DEOP:#test123:/msg $chan the < triggered
    on >2:DEOP:#test123:/msg $chan the > triggered

    With the activator at level 1.
    *** Activator sets mode: -o Friend
    <GUARD> the < triggered

    With the activator at level 2.
    *** Activator sets mode: -o Friend

    With the activator at level 3.
    *** Activator sets mode: -o Friend
    <GUARD> the > triggered

    on =2:DEOP:#test123:/msg $chan the = triggered

    With the activator at level 1.
    *** Activator sets mode: -o Friend

    With the activator at level 2.
    *** Activator sets mode: -o Friend
    <GUARD> the = triggered

    With the activator at level 3.
    *** Activator sets mode: -o Friend

    Rückkehr zum Inhaltsverzeichnis.

    7-3-5 Variables

    Select the Tools/Remote/ menu, and goto the "Variables" section ... In this part of Remote you can setup your own variables. Variables can contain numbers, words or even lines of text. On variables containing numbers you can apply mathematical manipulations to increase, decrease, add and subtract variables with given values to or from each other. Variables always start with a % and can have names of any length. The variables are stored between sessions in a variable file in the mIRC directory.

    Available commands are : (q=quiet; no status report of the operation is given)

    /set [-q] <%var> [value] To create a variable
    /unset [-q] <%var> [%var2] ... [%varN] To delete a variable
    /unsetall To delete all variables
    /inc [-q] <%var> [value] To increase a variable by a value (number or variable)
    /dec [-q] <%var> [value] To decrease a variable by a value (number or variable)

    With the aid of these commands you can make all kinds of handy aliases and remote lines!

    Let me give a bunch of examples :

    Remote commands (see later) :
    ctcp 2:xdcc send #1:/dcc send $nick c:\temp\serve\mirc40.zip | /inc %mirc 1
    ctcp 2:xdcc send #2:/dcc send $nick c:\temp\serve\mircfq24.zip | /inc %faq 1
    ctcp 1:stats:/notice $nick Sending stats: mIRC= %mirc and FAQ= %faq

    Remote events (see later) :
    on 2:TEXT:xdcc send #1*:?:/dcc send $nick c:\temp\serve\mirc392.zip | /inc %mirc 1
    on2:TEXT:xdcc send #2*:?:/dcc send $nick c:\temp\serve\mircfq23.zip | /inc %faq 1

    Alias :
    /stats /echo 6 mIRC: %mirc and FAQ: %faq

    With these lines I made a small download counter.... not perfect but working !

    You can even add some alias like the next one to keep partial statistics :
    /reset /set %date $day $date | /inc %mirctot %mirc | /inc %faqtot %faq | /set %mirc 0 | /set %faq 0
    /stats /echo 6 Stats mIRC: %mirc ( %mirctot ) and FAQ: %faq ( %faqtot ) (Set on %date )

    When you increase or decrease a non-existant variable it will be created automatically and set to the value you expect it to be. ie :
    /inc %test1 6 will set %test1 to 6 if it didn't exist before
    /dec %test2 7 will set %test2 to -7 if it didn't exist before

    Note : You have to make sure you always include the % ! This is made to prevent a lot of small possible problems in mIRC's command parsing. This does not limit the ways the variables can be used in at all since you can always use constructions like :
    ctcp 1:upme:/inc % $+ $site 1
    ctcp 2:xdcc send #1:/dcc send $nick c:\temp\serve\mirc40.zip | /inc % $+ $nick 1
    ctcp 2:xdcc send #2:/dcc send $nick c:\temp\serve\mircfq24.zip | /inc % $+ $nick 1
    ctcp 2:xdcc stats:/notice $nick You downloaded %nick files already since %date

    Rückkehr zum Inhaltsverzeichnis.

    7-3-6 Remote Raw processing.

    In the Tools/Remote Scripts mIRC also offers you the possibility to process all server <> client (mIRC) processes directly and in any way you want/like. It works exactly like the Remote Events except mIRC listens to the NUMERIC events. These server numerics are described in the IRC RFC1459 (http://ds.internic.net/rfc/rfc1459.txt). More mIRC specific info is available on http://www.ircworks.com/ You better use Raw Script lines -only- if you exactly know what you do and only if absolutely needed. Wrong use of Raw Script lines can mess-up mIRC totally. It can over-rule all routines hardcoded into mIRC. Example:
    322:*mirc*:/echo 2 $1-

    This would print all lines which have the word "mirc" in them when you do a channels /list (this is a pretty intensive test).

    To echo a concise 2 line summary of the /whois return in your active window, place the following lines in your Raw section (listening on):
    raw 311:*:echo 5 $active *** $2-
    raw 319:*:echo 5 $active *** $2-

    This will display the user and channels lines. The numerics for the other /whois replies are: 312, server; 313, ircop; 301, away; 317, idle; and 318, end. For a full /whois echo, simply duplicate the above lines using these numbers.

    To find out the numerics the servers use you could use the new $numeric identifier that refers to the number of the (raw) event that was triggered. In the IRC RFC1459, Section 6; Numeric replies, you can look up all numerics, given with their number, name and reply string.

    Rückkehr zum Inhaltsverzeichnis.


    7-4 Advanced use of commands; Multi-line commands.

    In mIRC you can use commands and create aliases, popups and remote scrips with conditional statements, loops and other tricky things. To explain it all to you would would take another complete FAQ I fear, but I'll try to get you on the road in a short section with some examples. I think its best to start right off the bat .....

    First mIRC now allows multiline alias, popup, and remote definitions. This allows you to write statements in a nice and structured way like:

    {prefix definition} {
    /command1 ...
    /command2 ...
    /command3 ...
    }

    Example:
    /away /ame is AWAY ( $+ $?="Reason" $+ ) | /away Set away at $time { $+ $! $+ }
    /back /ame is back,.. what did I miss ? | /away

    These aliases could also be defined as

    /away {
    /ame is AWAY ( $+ $?="Reason" $+ )
    /away Set away at $time { $+ $! $+ }
    }

    /back {
    /ame is back,.. what did I miss ?
    /away
    }

    I agree that doesnt really help -here-, but while you're writing and testing the new possibilities in mIRC's conditional commands you might like this structure? Btw, the { } brackets are needed around all commands that use the new possibilitie of conditional looping etc. Now we're at it, you could leave out all / command prefixes if you wanted to... They are no longer needed.

    A /goto command is added which can be used in { } definitions.
    Example:
    /greet {
    /set %x 0
    :retry
    /inc %x
    /goto %x
    :2
    /echo line2
    /halt
    :1
    /echo line1
    /goto retry
    }

    This alias will echo the lines "line1" and "line2" to your screen.
    Test it by giving this totally equivalent command in some editbox:
    /set %x 0 | :retry | inc %x | goto %x | :2 | echo line2 | halt | :1 | echo line1 | goto retry

    It will show you exactly what happens. ;-) You can also use a variable as a goto name, eg. :%jumppoint

    If you "/set_jumppoint_5/index.html" then you can do "/goto_5/index.html" and mIRC will evaluate %jumppoint to 5 and jump to it. In the above example the jumppoints were fixed to '1' and '2'. Try these 3 commands and see what happens now.
    /set %jump1 1
    /set %jump2 2
    /set %x 0 | :retry | inc %x | goto %x | :%jump2 | echo line2 | halt | :%jump1 | echo line1 | goto retry

    You can use the /return command to finish processing a command and to allow any default processing to continue. eg.
    on 1:JOIN:#mIRC {
    /echo 3 #mirc [Joins $nick]
    /return
    /echo 3 #mirc I'm not printed!
    }

    This will result is messages like:
    [Joins henk]
    *** henk ([email protected]) has joined #mIRC

    Take care...!

    Take care not to get lost in incomplete bracket definitions. When opening brackets '{' are not closed '}' mIRC might start to behave in strange ways!! Work with care! A special check button in added to the Alias, Popups and Remote editor dialog to check if the brackets count in the current script is correct. It is the button with the "{}" picture on it.

    /if /elseif /else

    Now I think you're ready for the real stuff ?? In mIRC a simple /if statement is available.
    /if v1 operator v2 { ... } | /elseif v1 operator v2 { ... } | /else { ... }

    Example:
    Make this alias and start it like "/test_4/index.html";
    /test { set %i 0 | :start | inc %i | if %i > $1 halt | echo $active %i | goto start }

    If/elseif/else can all be nested inside each other. You should use () and {} brackets to make sure that you're terms are evaluated correctly (in the correct order), though you don't *have* to use them. Using brackets also speeds up processing quite a bit since mIRC then knows exactly what it has to evaluate.

    Available comparisons and operators:
    == equal to
    != not equal to
    < less than
    > larger than
    >= larger than or equal to
    <= smaller than or equal to
    // is a multiple of
    \\ is not a multiple of

    isin string v1 is in string v2
    iswm wildcard string v1 matches string v2
    ison nickname v1 is on channel v2
    isop nickname v1 is an op on channel v2
    isvo to check if user v1 has voice on channel v2 isnum number v1 is a number in the range v2 which is in the form n1-n2 (v2 optional)
    ischan if v1 is a channel which you are on.
    isauto if v1 is a user in your auto-op list for channel v2 (v2 optional)
    isignore if v1 is a user in your ignore list with the ignore switch v2 (v2 optional)
    isprotect if v1 is a user in your protect list for channel v2 (v2 optional)
    isnotify if v1 is a user in your notify list.

    To negate the above you can prefix them with an ! exclamation mark.

    Example:
    /massinvite { echo 4 * Mass-inviting # | set %i $nick(0,#) | :next | if $nick(%i,#) != $me invite $nick(%i,#) $1 | dec %i | if %i > 1 goto next | echo 4 * Mass-invite # done }

    Use this example alias like "/massinvite_/index.html". (btw massinvites are very impolite!)

    Example:
    /randnopkick { :begin | set %kicknick $nick($r(1,$nick(0,#)),#) | if %kicknick isop # goto begin | /echo 6 %kicknick }

    If you're an op on some channel you might like this random-non-op-kick. It kicks a random person from your channel, but never an op. Mind you.... if only ops are available you've a problem ;-)

    Example:
    /line { %line = "" | if $asc($1) < $asc($2) { set %i $asc($1) | :add | %line = %line $chr(%i) | inc %i | if %i <= $asc($2) { goto add } | if (%line == "") { halt } | else { echo # %line | halt } } else echo # sorry not valid }

    Start this alias example by typing "/line_d_k/index.html" to see what it does. It will print a line like 'd e f g h i j k'. Nothing much and barely useful but it shows the strength of the if/elseif/else pretty well.

    Example:
    /printnum1 { if $len($1) = 1 { if $1 !isin 1234567890 { echo 6 $1 is not a number | goto end } } | elseif $len($1) = 2 { if $mid(1,1,$1) !isin 1234567890 { echo 6 $mid(1,1,$1) is not a number | goto end } | elseif $mid(2,1,$1) !isin 1234567890 { echo 6 $mid(2,1,$1) is not a number | goto end } } | elseif $len($1) > 2 { echo 6 $1 has too many chars | goto end } | { set %x 1 | :begin | echo 6 %x | if %x >= $1 { goto end } | else { inc %x | goto begin } | :end } }

    /printnum2 { if $1 !isnum { echo 6 $1 is not a number | goto end } | elseif $1 !isnum 0-99 { echo 6 $1 is a too large number | goto end } | { set %x 1 | :begin | echo 6 %x | if %x >= $1 { goto end } | else { inc %x | goto begin } | :end } }

    These equivalent aliases will both print a list of numbers upto the value you give. Try it with "/printnum1_14/index.html" or something similar .... The second alias shows how smart use of identifiers can reduce the length of the alias a lot.

    Empty or invalid identifiers

    Variables or identifiers that don't evaluate to a value now return the value $null so they can be used in the if statement for checking etc.

    Example:
    /listops { echo 4 * Listing Ops on # | set %i 1 | :next | set %nick $nick(%i,#) | if %nick == $null { goto done } | if %nick isop # { echo 3 %nick is an Op on # } | inc %i | goto next | :done | echo 4 * End of Ops list }

    This alias will list all ops on the channel you're on.
    Or in a remote event:
    on 1:CTCPREPLY:PING* {
    if ($2 == $null) echo [ $+ $nick PING reply]
    else {
    %pt = $ctime - $2
    if (%pt < 0) set %pt 0
    echo [ $+ $nick PING reply] %pt seconds
    }
    halt
    }

    More popup examples:

    GiveOps { %i = 0 | %nicks = "" | :nextnick | inc %i | if ($snick(%i,#) == $null) { if ($len(%nicks) > 0) mode # +oooo %nicks | halt } | %nicks = %nicks $snick(%i,#) | if (4 // %i) { mode # +oooo %nicks | %nicks = "" } | goto nextnick }

    This popup menu item will op all selected people on a channel where you're operator.

    Selkick:/kick # $token($r(1,$snick(0,#)),44,$snicks)

    This popup will kick one random person out of the people you selected on a channel.

    RandNopkick:/kick # $nopnick($r(1,$nopnick(0,#)),#)

    This popup will kick a random non-operator from the channel you're on.

    RandNopkick { :begin | /set %kicknick $nick($r(1,$nick(0,#)),#) | if %kicknick isop # goto begin | /kick # %kicknick }

    This popup will also kick a random non-operator from the channel you're on.

    Randkick:/kick # $nick($r(1,$nick(0,#)),#)

    Arent kicks fun ???? Another one ... randomly kicking just anybody .... might be -you- !

    RandOpkick:/kick # $opnick($r(1,$opnick(0,#)),#)

    Randomly kicking an op .... they at least can defend themselves !

    Endless loops.

    With all these conditional statements I foresee you ending up in some endless loop. A simple example is creating something like:

    /loop { :start | echo 6 # test loop | goto start }

    I case one of your aliases or remotes got into such a loop use the CTRL+Break key combination to stop the process. It will take you home safely.

    Custom Windows.

    In mIRC 5.0 a new tool is added that allows you to create your own custom windows. This window creation/manipulation tool can for instance be used to create a window in which you can keep track of what your script does. A custom window is created with the /window command. It can handle a lot of parameters to define the sort of window that mIRC creates, the state of the window and to control its content.
    /window [-abcdelnorsx] @name [x y [w h]] [/command] [popup.txt] [font [size]]

    Switches (options):
    a = activate window
    b = update horizontal scrollbar width for listbox
    c = close window
    d = open as desktop window
    e = editbox
    l = listbox
    n = minimize window
    o = if opened on desktop, place ontop
    r = restore window
    s = use a sorted list
    x = maximize window
    @name = window name (must prefix with a @)
    x,y,w,h = left top width height
    popup.txt = popup filename, loaded when needed
    /command = default command
    font/size = font name and size (defaults to status window font)

    You can also use /window to manipulate some of the above settings for an existing custom window. You can use the following commands to manipulate lines:
    /aline [-cN] @name text add line to list
    /dline @name N delete Nth line
    /iline [-cN] @name N text insert line at Nth line
    /rline [-cN] @name N text replace Nth line
    /sline @name N selects Nth line
    Where -cN allows you to specify the line color.

    You can use the $window(N/@name) identifer to access the following custom window information:
    $window(/N/index.html).x left
    $window(/N/index.html).y top
    $window(/N/index.html).w width
    $window(/N/index.html).h height
    $window(/N/index.html).state minimized/maximized/normal

    To access the lines in a custom window you can use:
    $line(@name,N) returns Nth line
    $sline(@name,N) returns Nth selected line (listbox only)
    $sline(@name,N).ln to return line number of selected item.

    This new tool offers a lot of usefull and creative uses but needs some experimenting to have it behave exactly as you want it to. Have fun!

    Rückkehr zum Inhaltsverzeichnis.

    Copyrights - You are allowed to provide and distribute the mIRC FAQ -as is- by or on any medium as long as you make it available for free. You are not allowed to change anything in the file or charge any amount of money for your services. If you want to copy only certain parts for whatever use, make sure to mention my name and the FAQ as the source of information with every single quote whenever you publish it. © copyright 1995-2002 Tjerk Vonck [email protected]