Zum Inhalt springen

WorkShop-tcl-eggdrop

TCL Workshop

Tutorial TCL Workshop by TheNoxier 

Anmerkung:
Dieser TCL-WorkShop wurde von einem GastAutor erstellt, weiteres unten. 
Er wurde unzensiert und unbehandelt auf IRC-Mania.de aufgenommen !

Sollte ein hier präsentierter WorkShop extrem viele Fehler aufweisen, bitte ich um eine Benachrichtigung WorkShopKritik@IRC-Mania.de

Autor: TheNoxier
URL: www.sf-web-creations.de
Partner: www.net-xperts.org (Erstveröffentlichung von neuen Tutorials und Scripten)
Email: tcl@sf-web-creations.de

TCL für Eggdrops 
Gruppe: Anfänger Workshop.

Erstveröffentlichung auf irc-mania.de

Titel: Mein ersten Schritte mit TCL.

Ziel: Grundkenntnisse in TCL, um selber kleine Scripte zu schreiben.

Voraussetzung ist, ihr habt den Eggdrop eingerichtet und das man in den letzten Zeilen von der eggdrop.conf (oder wie ihr sie auch immer genannt habt) den Pfad, relativ zum Programmverzeichnis hinzufügen könnt
In der Regel packt man die Scripts einfach in /Scripts Unterverzeichnis und schreib man

source scripts/meinscript.tcl

Wenn ihr schon Scripts installiert habt, dann wisst ihr ja wie es geht. Und nach dem Hochladen immer schon den Bot rehashen oder restarten ;-).

Das Coden:
Alle Zeilen, die mit # (Raute) anfangen, sind Kommentare und werden nicht ausgeführt.
z.b.
# Ich bin ein Kommentar, damit ich dem Leser des Scripts etwas mitteilen kann.

Das erste Script:

# Nun folgt mein 1. Script
bind pub – .testemich meinefunktion

proc meinefunktion { nick uhost hand chan args } {
putserv „PRIVMSG $chan : Hallo Welt!“
}

(Das in einer Text-Datei abspeichern unter der Erweiterung .tcl und vergehen wie oben und in der Eggdrop Hilfe beschrieben. 
Dann könnt ihr im Channel, in dem der Bot läuft, einfach mal nur .testemich eintippen und schauen was kommt.

Erklärung:
bind pub – .testemich meinefunktion

Das ist der Befehl um einer Zeichenfolge/Wort/Buchstabe an eine „Funktion“ oder wie es wohl in TCL heißt „Prozedur“ (proc) zu binden. Ich bin leider das Wort Funktion von PHP gewöhnt.

Grobe Syntax:
bind ORT FLAGS ZEICHENFOLGE FUNKTION

„bind“ kann man sich ganz einfach mit „Bindung“ merken. Ich bin etwas zusammen.

Danach kommt der Ort wo der Bot nach der Zeichenfolge ausschau halten soll.
In dem Fall „pub“ für Public, also öffentlich im Channel wo der Bot läuft.
Es gäbe noch z.b.:
Dcc Für das Abhören in der Partyline
Msg Für das Abhören in einem Query zum Bot.

Als Nächstes folgt „FLAGS“. 
Hier kann man angeben, welche Flags, als „status“ der User haben muss, damit er abgehört wird. Wenn man – macht ist es egal welche FLAG er hat:
Es gibt unter anderem:
o für Operator
v für Personen mit Voice
Im Prinzip alle Flags die man auch einem User geben kann.

Danach Folgt die Zeichenfolge.
Damit man nicht ohne es zu wollen eine Befehl erwischt, schreibt man am besten irgend ein Zeichen wie . oder ! oder ? davor, so wird der Befehl eindeutiger.

Danach folgt der Funktionsname. In unserem Fall: meinefunktion 
Welche die Funktionen schon woanders her kennen werden sich vielleicht wundern, warum man keine Parameter übergibt, obwohl welche verlangt werden. Ganz einfach, bei „bind“ werden automatisch einige Parameter mit übertragen: nick uhost hand chan args

So kommen wir auch gleich zu der Funktion meinefunktion.
Eine Funktion ist nichts andere als eine Script, das erst dann aufgerufen wird, wenn man es braucht, in dem Fall mit .testemich.

In der Funktion sind ganz Befehle die ausgeführt werden sollen. 
(für Profis: Variablen, die außerhalb deklariert sind, nicht automatisch innerhalb verfügbar und umgekehrt. Hierzu gibt es den Befehle global )

In dem Fall beinhaltet unsere Funktion nur einen Befehl, den in dem Channel wo wir sind, den Text „Halle Welt!“ auszuspucken.

proc meinefunktion { nick uhost hand chan args } {
putserv „PRIVMSG $chan : Hallo Welt!“
}

proc leitet die Funktion ein. Danach kommt der Namen den sie haben, soll und dann geschweiften Klammern die einzelnen Variablen die übergeben werden. In dem Fall sind es
nick uhost hand chan args. Diese kommen wie oben schon erwähnt durch die Verwendung von dem Befehl bind. Der hat schon eine Platte wichtiger Variablen aus dem Channel mit sich dabei.

putserv „PRIVMSG $chan : Hallo Welt!“

Mit diesem Befehl „putserv“ schickt ihr eine Nachricht an den Server. 
PRIVMSG steht für „Private Nachricht“. Egal ob Query oder in den Channel, bei beiden ist es PRIVMSG.
Dann folgt der Empfänger in dem Fall der Inhalt der Variable $chan.
$chan beinhaltet den Channelnamen, in dem die Zeichenfolge von bind ausgeführt wird. 
Würde man an dieser Stelle einen Nickname eintragen käme es als Query an.
Dann ein Leerzeichen, ein Doppelpunkt und dann der Text. Hier gibt es keinen Zeilenumbruch. Das ganze endet mit wieder mit einem „.

Anmerkung:
nick = Nickname des Users der die Zeichenfolge eingetippt hat
uhost = Sein Host-Adresse (und noch ein wenig mehr ;-))
hand = sein „handle“ entweder sein Nickname oder ein *
chan = der Channel in dem sich der Users befindet , der die Zeichenfolge eingetippt hat
args = Alle Zeichen die nach dem gebindeten Wort kommen.

TIPP: ich hab bemerkt, dass es eher Schwierigkeiten macht, wenn man mehrere der Variablen weg lässt, also immer schon alle 5 hinschreiben. 😉

Das sind eigentlich die Beiden meist benutzen Sachen, wenn man mit dem User interagieren will.

@2003 TheNoxier www.sf-web-creations.de for IRC-Mania .de
Mehr Tutorials (bald) auf www.net-xperts.org oder auch auf www.irc-mania.de