| Remote Scripts - CTCP Befehle
Wählt 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 besprechen
wir die CTCP-Befehle.
Einführung - Remote Commands reagieren auf eine sehr
speziefische 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. Sie kann auf CTCP-Befehle reagieren - in der Weise,
wie Ihr es wünscht.
Es gibt einige schon anhand der IRC RFC vordefinierte CTCPs.
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 {euernick} {Befehle mit Parametern, wenn welche existieren}
Nehmen wir das Beispiel des Pings. Der andere User würde
in diesem Fall folgendes tippen:
/ctcp {euernick} ping
Man kann sich auch selber einen Ping-Befehl schicken. Versucht
es mal: /ctcp {euernick} ping
Unter normalen Umständen sendet mIRC einen Standart
Ping Reply (Antwort) [ctcp seinnick pong]. Aber mit den Remote-CTCPs
könnt Ihr die Standartantwort des Programms auf einen
Ping verändern. Es kann fast alles tun, was Ihr wollt,
wenn es einen Ping erhält. Es kann standartmäßig
reagieren, oder auch nicht. Es liegt an euch. Es gibt EINE
aus Ausnahme: Ihr könnt NICHT euren mIRC-Version-Reply
unterbinden... Wir lieben Werbung, wißt ihr...
Ihr könnt auch 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
Öffnet Tools/Remote und schaut unter 'View', ob schon
ein Script namens commands.ini oder ctcp.ini schon existiert.
Wenn ja, wählt die Datei aus, und fügt die Zeilen
hinzu und ändert sie. Wenn nicht, dann geht unter den
Menüpunkt 'File' und wählt 'New' um eine neue Datei
zu erstellen. Versichert Euch, daß unter 'Listening'
der Punkt ctcp ausgewählt ist! (Wenn nicht, dann werden
CTCP-Befehle ignoriert).
Jetzt setzt die folgende Zeile in die existierende oder neue
Script-Datei.
ctcp 1:ping:/notice $nick ping? Hmmmm.... PANG PANG PANG!!
Wenn Euch nun jemand pingt, dann bekommt er als Antwort "
ping? Hmmmm.... PANG PANG PANG!!" in Form einer Notice
(Benachrichtigung). Hinzu kommt noch die Standardantwort 'pong'.
Ihr könnt das durch /ctcp {euernick} ping testen. Wenn
es nicht funktioniert, dann überprüft, ob mIRC gerade
auf CTCP-Befehle reagiert. Aktiviert die Funktion mit /remote
on und/oder /ctcps on.
Wenn Ihr wollt, daß mIRC die Standardantwort unterdrückt,
dann könnt Ihr die weitere Bearbeitung mit dem Befehl
/halt unterdrücken. Verwendet ihr 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, testet es und seht den Unterschied.
Die Syntax der Remote CTCP-Befehle
Remote-Befehle bestehen bis auf ein paar speziellen Fällen
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 Ihr (größeres) Level ist ein
anderer Befehl definiert.
{CTCP-Befehl} Der CTCP-Befehl kann heißen wie Ihr wollt.
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. Ihr müßt nur sichergehen,
daß die von Euch 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 Euch den CTCP-Befehl
übermittelt hat.
Fassen wir zusammen: der Effekt des Befehls "/ctcp {euernick}
{ping}" ist "/notice {nick} Hmmmm.... PANG PANG
PANG!!. Er wird ausgeführt, sobald ein CTCP Ping empfangen
wird.
Unterschiedliche Reaktionen auf Leute mit verschiedenen
Userlevels
Ihr könnt die Reaktionen auf CTCP-Befehle sehr fein
abstufen, indem Ihr ihnen verschiedene Levels zuordnet. 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 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:nick3!account3@machine.subnet.net) wird
es kaum überleben, wenn er Euch 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üft, ob Ihr diesen Abschnitt verstanden habt.
Sonst lest Ihn nocheinmal durch??
Spezielle Identifiers für Remote/Commands
$nick, $address, $site, $level, etc. sind alles Identifiers,
die speziell für die Verwendung in der Remote-Sektion
erstellt wurden. Alle üblichen Strings (Abs. 7.1.2) können
aber auch verwendet werden. Ihr könnt sie überall
in den Befehlszeilen einsetzen, die durch CTCP-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.
$chan Der Channel, in dem ein Event ausgelöst wurde
$target Das Ziel des Events
Anmerkung: Der Identifier $chan ist normalerweise in den Remote
Commands nicht definiert... $chan enthält den Namen des
Channels, auf dem ein bestimmtes Ereignis ausgelöst wurde.
CTCP-Befehle werden nicht immer über Channels an euch
gesendet, oder die Person, die den Befehl sendet, kann auf
mehreren Channels sein. Seht Ihr den Sinn?? Vielleicht hilft
euch $active weiter? Oder $target?
Beispiel: Hier ist ein Beispiel, daß den vordefinierten
Identifier $address enthält:
ctcp 1:adresse:/notice $nick Deine Adresse lautet: $address
Wenn Euch ein User nun den Befehl '/ctcp {euernick} adresse'
übermittelt, dann antwortet Ihr mit einer Notice welche
"Deine Adresse lautet: {was immer seine oder ihre Adresse
ist}" enthält.
(Anmerkung d. Übersetzers: Vergeßt nicht, daß
"address" im englischen mit zwei "d" geschrieben
wird, im Deutschen aber mit einem! Das hat mir zu Anfang viel
Kopfzerbrechen bereitet, da man es durch Flüchtigkeit
leicht übersehen kann)
Beispiel: Freunden auf Anfrage Operator Status geben
Wenn Euch noch nicht klar ist, wie all dies prinzipiell funktioniert,
dann macht Euch keine Gedanken. Folgt einfach den Beispielen
bis der Groschen fällt. Wenn nötig, lest die vorhergehenden
Passagen noch einmal. Versucht aber noch nicht, Eure eigenen
Remote Commands zu schreiben oder zur nächsten Passage
weiterzublättern, bis der Groschen gefallen ist.
ctcp 1:opmich:/notice $nick Sorry, du wirst auf $2 kein Ops
bekommen. Dein Level reicht nicht aus...
ctcp 5:opmich:/mode $2 +o $nick
Wenn ein Freund mit Userlevel 5 Euch nun einen '/ctcp opmich
{#channelname} 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
'opmich')
Der String $2- kann verwendet werden, um lange Zeilen zu
verarbeiten, die ein Remote-User in einem CTCP-Befehl übermittelt.
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-.
Ein an Euch gerichteter Befehl '/ctcp {euernick} Bla Fasel
Schwätz Sabbel' läßt mIRC den folgenden Befehl
ausführen: '/notice Freund Bla Fasel Schwätz Sabbel'.
Mehrzeilenbefehle
Ein empfangener CTCP-Befehl kann durchaus auch mehrere Befehle
auslösen...
ctcp 5:opmich:/mode $2 +o $nick | /notice Du hast jetzt Operator
Status auf Channel $2
Wenn Euer Level 5-Freund den Befehl '/ctcp {euernick} opmich
#Channelname' sendet.
Was also passiert?
In der Tat werden zwei Aktionen durch den CTCP-OPMICH-Befehl
ausgelöst.
erstens: /mode #Channelname +o Freund
zweitens: /notice Freund Du hast 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 {euernick}
part #Channelname' 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 {nick} Bitte sende mir keine Pings!'
antworten.
ctcp 5:time:/notice $nick Zeit sich eine Uhr zu kaufen!
...würde mit '/notice $nick Zeit sich eine Uhr zu kaufen!'
antworten.
ctcp 10:/notice $nick Ich bin der, der ich sage | /notice
$nick Und ich sage, ich bin DU!!
...würde antworten: 1) "/notice $nick Ich bin der,
der ich sage", 2) "/notice $nick Und ich sage, ich
bin DU!!"
|