TCL-Scripting

Und hier zeig ich dir wie man selber TCL-Scripts macht. Ich zeige dir aber nur die einfachsten Befehle. Du solltest vielleicht ein bisschen Ahnung vom programmieren um einige Begriffe zu verstehen. Also, fangen wir gleich an!

Ein einfaches Script welches auf Wörter reagiert

Zuerst musst du einen Editor öffnen um eine Datei schreiben zu können. Tippe danach folgenden Text ein:

bind pub - !hallo begruessung
proc begruessung {nick host hand chan rest} {
  puthelp "privmsg $chan :Hallo $nick!"
}

Speichere nun die Datei unter: eggdropverzeichnis/scripts/hallo.tcl
Danach öffnest du das Config-File und fügst das neue Script hinzu (source scripts/hallo.tcl). Anschliessend tippst du im Bot .rehash ein. Das Script sollte nun geladen sein. Wenn der Bot Fehlermeldungen ausgibt und sich danach beendet, dann hast du etwas falsch eingetippt. Prüfe es nochmal nach und starte den Bot erneut. Tippe nun auf einem beliebigen Channel wo der Bot ist !hallo ein. Der Bot sollte dir antworten:
<tester> !hallo
<botnick> Hallo tester!
Nun, wie funktioniert das Script? Ich werde jetzt mal alles genau erklären.

bind pub - !hallo begruessung
bind ist ein Befehl. Dieser Befehl bindet ein bestimmtes Ereignis an eine Prozedur.
pub - !hallo ist das Ereignis. pub bedeuted das es ein /msg auf dem Channel ist. - sind die Flags, welche man haben muss, damit die Prozedur ausgeführt wird. !hallo muss das erste Wort vom /msg sein. Dann wird die Prozedur ausgeführt :-).
begruessung ist der Name der Prozedur, welche ausgeführt wird.

proc begruessung {nick host hand chan rest} {
proc ist ein Befehl, welcher eine Prozedur andeutet.
begruessung ist der Name der Prozedur.
{nick host hand chan rest} sind die Variablen , welche man in dieser Prozedur verwenden kann. Beim Ereignis pub hat man 5 Variablen. Andere Ereignise haben meistens weniger oder mehr Variablen. Es ist eigentlich egal wie die Variablen heissen. Hauptsache sie sind in den Klammern { und }.
{ deutet den Anfang der Prozedur an.

  puthelp "privmsg $chan :Hallo $nick!"
puthelp ist ein Befehl, welcher Informationen zum Server sendet (wie /quote).
" ist ein wichtiges Anführungszeichen.
privmsg $chan :Hallo $nick! ist der Befehl welcher sozusagen mit /quote gesendet wird. $chan und $nick sind Variablen. Wenn wir die Variablen anders bennenen würden, zB.: a, b, c, d, e und f, dann müsste die Zeile etwa so lauten: puthelp "privmsg $d :Hallo $a!". Alles klar? Oki, weiter gehts...
" - Das abschliessende Anführungszeichen.

}
} ist das Zeichen welches die Prozedur abschliest.

Nun... das wäre alles zur Erklärung des Scripts. Kommst du nicht draus, weil du nicht weisst was Variablen, Prozeduren und Ereignise sind? Wie gesagt solltest du ein bisschen Erfahrung mit Programmiersprachen haben. Du bist wohl zu dem noch nicht gewachsen? :-)

Ein Voice-Script

Erstelle jetzt folgendes Script mit dem Namen voice.tcl:

bind pub - !voice gibvoice
proc gibvoice {nick host hand chan rest} {
  if {[matchattr $hand v|v $chan]} {
    pushmode $chan +v $nick
    return 0
  }
  puthelp "privmsg $chan :Nein $nick! Du hast KEIN Voice-Recht!"
}

Und hier die Erklärung:

bind pub - !voice gibvoice

proc gibvoice {nick host hand chan rest} {

  if {[matchattr $hand v|v $chan]} {
if ist der Befehl, welcher prüft ob eine Bedingung stimmt
{ - Die wichtige Klammer
[matchattr $hand v|v $chan] ist die Bedingung. matchattr ist ein Befehl, welcher prüft, ob ein Handle die bestimmten Flags hat. In der Variable $hand, wird das Handle vom User schon automatisch angezeigt. Die Funktion prüft also ob ein User ein +v Flag entweder Global, oder dann auf dem Channel hat.

    pushmode $chan +v $nick ist auch ein Befehl, welcher Modes zum Server sendet.

    return 0 - Und dieser Befehl beendet die Prozedur.

  } ist die abschliessende Klammer vom if.

  puthelp "privmsg $chan :Nein $nick! Du hast KEIN Voice-Recht!"

}

Das !gib Script

Erstelle ein neues Script mit dem namen gib.tcl und lade es im Bot:

bind pub - !gib gibetwas
proc gibetwas {nick host hand chan rest} {
  if {![matchattr $hand v|v $chan]} {
    return 0
  }
  set $wem [lindex $rest 0]
  set $was [lrange $rest 1 end]
  if {$restliche == 0} {
    puthelp "notice $nick :Bedienung - !gib "
    return 0
  }
  puthelp "privmsg $chan:\001ACTION gibt $wem $was\001"
}

Erklärung:

bind pub - !gib gibetwas

proc gibetwas {nick host hand chan rest} {

  if {![matchattr $hand v|v $chan]} {

    return 0

  }

  set $wem [lindex $rest 0]
set setzt eine Variable
$wem ist der Name der Variable.
lindex liest aus einer Variable ein Wort aus. Das erste Wort beginnt aber bei 0. In diesem Beispiel liest es also das erste Wort von der Variable rest aus.

  set $was [lrange $rest 1 end]
lrange liest mehrere Wörter aus einer Variable aus. end ist das letzte Wort. Es liest hier also von der Variable rest alles ab dem zweiten Wort.

  if {$restliche == 0} {

    puthelp "notice $nick :Bedienung - !gib "

    return 0

  }

  puthelp "privmsg $chan:\001ACTION gibt $wem $was\001"

}