Eggdrop

Aus netcup Wiki
Version vom 1. April 2013, 12:59 Uhr von M.gebhardt (Diskussion | Beiträge) (Initialisierung)
(Unterschied) ← Nächstältere Version | Aktuelle Version (Unterschied) | Nächstjüngere Version → (Unterschied)
Zur Navigation springen Zur Suche springen



Einleitung

Die Entwicklung vom Eggdrop Startete im Jahr 1993 von Robey Pointer.

Der Eggdrop ist einer der ersten IRC-Bots der dauerhaft einen Channel betreuen konnte. Mit speziellen Skripts kann man den Eggdrop nach belieben erweitern.

Heute umfasst das Entwickler-Team mehr als 40 Personen und eine Vielzahl von Helfern die Patches beitragen.

In seinen ersten Versionen basierte Eggdrop auf der SKriptsprache TCL (tool command language), deshalb ist seine Schnittstelle heute noch TCL. Der Bot selbst ist heute in C++ geschrieben, das ist notwendig um ihn in Linux und Windows separat zu kompilieren. Die Skript-Schnittstelle ermöglicht eine Vielzahl von Plugins für den Eggdrop. Dies hat ihn zu den populärsten IRC-Bots Weltweit gemacht. Häufige Anwendungen sind das Auslesen einer Website bis hin zu Spielen für einen IRC-Channel.



Installation

Es ist unüblich einen Eggdrop mit root zu Installieren. Noch gefährlicher ist es ihn mit root rechten zu Starten! Es ist daher empfehlenswert einen neuen Benutzer für den Bot anzulegen.

Diese Wiki-Seite bezieht sich komplett auf Eggdrop in der Version 1.6.21.

Download

wget http://www.geteggdrop.com
tar xfvz eggdrop$VERSION.tar.gz
cd eggdrop1.6.21


Configure

Standard:

./configure
make config

Will man selbst entscheiden welche Module installiert werden, nutzt man:

make iconfig

Darauf folgend wir der Quellcode in Binärcode konvertiert:

make

Möchte man ein spezielles Verzeichnis für die Installation verwenden benutzt man:

make install DEST=/home/user/botdir 

Gibt ihr kein Verzeichnis an wird Eggdrop automatisch in das Verzeichnis /home/$USER/eggdrop Installiert:

Abschluss der Installation:

make install


Eggdrop starten

Eggdrop ist nun auf den System installiert, nun wechselt man in das Verzeichnis in das er installiert wurde und geht wie folgt weiter vor:

./eggdrop -m eggdrop.conf

Das -m ist beim ersten Start von Eggdrop notwendig, dabei werden alle relevanten Dateien angelegt (Userfile, Channelfile und Pidfile).

Ist dies erfolgt, kann man den Eggdrop im auszuführenden Modus starten:

./eggdrop eggdrop.conf

Sollte der Bot nicht starten, benutzt man die Option -m. Diese zeigt alle Nachrichten die zum Eggdrop gesendet werden mit Hilfe dessen man Fehler aufspüren und beheben kann.

./eggdrop -n eggdrop.conf

Konfiguration

In Der Eggdrop Config werden alle relevanten Variablen und Einstellungen für den Eggdrop gesetzt. Es Werden Globale Einstellungen für alle Channels gesetzt sowie eigene Scripte geladen.

Vor den ersten Start des Eggdrop Bots ist die Config zu bearbeiten.


Beispiel Konfiguration

Es folgt eine Beispiel-Konfiguration für den Eggdrop Bot. Diese ist funktionstüchtig, darf jedoch nur als Anlehnung für die eigenen Konfiguration gesehen werden.

Es ist zwingend erforderlich diese an die eigene Umgebung und Bedürfnisse anzupassen.

In der Konfiguration befindet sich zusätzlich ein Auth-Skript für den Bot Q im Quakenet.

##### CONFIG #####
##################
set nick                     "botnick";
set altnick                  "botnick?";
set botnet-nick              "botnet-nick";
set username                 "username";
set realname                 "Eggdrop realname";
set keep-nick                "1";
set owner                    "Bot-Owner";
set admin                    "Eure E-Mail";
set timezone                 "CET";
set offset                   "-1";
set env(TZ)                  "$timezone$offset";
set ctcp-mode                "2";
set lowercase-ctcp           "0";
set require-p                "1";
set protect-telnet           "1";
set stealth-telnets          "1";
set telnet-flood             "3:25";
set must-be-owner            "2";
set learn-users              "0";
set default-flags            "-";
set sort-users               "1";
set use-info                 "1";
set ignore-time              "15";
set NULL                     "\0";

##### FILES AND DIRECTORIES #####
#################################

set filename            "Filename"
if {![file exists $::filename]} {exec mkdir $::filename}
if {![file exists tmp]} {exec mkdir tmp}
set chanfile                 "$::filename/$::filename.chan";
set userfile                 "$::filename/$::filename.user";
set userfile-perm            "0600";
set pidfile                  "$::filename/$::filename.pid";
set help-path                "help/";
set mod-path                 "modules/";
set script-path {
        "scripts/"
};
set text-path                "text/";
set temp-path                "tmp/";
set motd                     "text/motd";
set telnet-banner            "text/banner";

##### MODULES #####
###################
if {![info exists initmodules]} {set initmodules "1"}
loadmodule blowfish
loadmodule console
loadmodule dns
loadmodule transfer
loadmodule share
loadmodule irc
loadmodule server
loadmodule channels
loadmodule ctcp

##### CONSOLE #####
###################
set console                  "mobs";

##### LOG FILES #####
#####################
set max-logs                 "50";
set max-logsize              "0";
set quick-logs               "1";
set log-time                 "1";
set keep-all-logs            "1";
set keep-all-logs            "0";
set switch-logfiles-at       "2500";
set logfile-suffix           ".%Y-%m-%d";
set quiet-save               "1";

##### NET CFG #####
###################
set my-hostname              "Hostname";
set my-ip                    "IP";
listen 1501                  "all";
putlog                       "IP: [expr [myip]>>24].[expr ([myip]>>16)&255].[expr ([myip]>>8)&255].[expr [myip]&255]";

##### SERVER #####
##################
set net-type                 "5";
set nick-len                 "15";
set max-bans                 "45";
set opchars                  "@";
set use-354                  "1";
set modes-per-line           "6";
set include-lk               "1";
set strict-host              "1";
set wait-split               "1";
set flood-msg                "4:20";
set flood-ctcp               "3:30";
set never-give-up            "1";
set check-stoned             "1";
set double-mode              "1";
set double-server            "1";
set double-help              "1";
set bounce-bans              "0";
set bounce-modes             "0";
set use-silence              "1";
set allow-desync             "1";
set optimize-kicks           "2";
set default-port             "6667";
set servers {
        "IRC Server"
	  "IRC Server2"
};

##### DCC SETUP #####
#####################
set max-dcc                  "50";
set copy-to-tmp              "0";
set xfer-timeout             "300";
set connect-timeout          "0";
set dcc-block                "0";
set max-dloads               "3";

##### CHANNEL CONFIG #####
##########################
set global-flood-chan        "0:0";
set global-flood-deop        "0:0";
set global-flood-kick        "0:0";
set global-flood-join        "0:0";
set global-flood-ctcp        "0:0";
set global-flood-nick        "0:0";
set global-aop-delay         "0:0";
set global-chanmode          "+nt";
set global-stopnethack-mode  "0";
set global-revenge-mode      "0";
set global-ban-time          "0";
set global-exempt-time       "0";
set global-invite-time       "0";
set global-chanset {
        "-autovoice"
        "-autohalfop"
        "-autoop"
        "-protecthalfops"
        "-protectfriends"
        "-protectops"
        "-bitch"
        "-dontkickops"
        "-enforcebans"
        "-greet"
        "-inactive"
        "-nodesynch"
        "-revenge"
        "-revengebot"
        "-secret"
        "-seen"
        "-statuslog"
        "+cycle"
        "+shared"
        "+dynamicbans"
        "+dynamicexempts"
        "+dynamicinvites"
        "+userbans"
        "+userexempts"
        "+userinvites"
};

##### CHANNELS #####
####################
channel add                  "#eggdrop-channel";

##### AUTH #####
################
set authname          "authname";
set password          "auth-pass";
set modes             "+xi";



bind evnt -|- init-server    evnt:init_server
proc evnt:init_server { type } {
        global botnick authname password modes
        putserv "MODE $botnick $modes"
        putquick "PRIVMSG Q@CServe.quakenet.org :AUTH $authname $password"
}

##### SCRIPTS #####
###################
source scripts/alltools.tcl
source scripts/action.fix.tcl

Eigene Skripte

Durch die Möglichkeit eigene TCL Skripte mit dem Eggdrop zu verwenden ist dieser sehr flexibel, dies ist ein Hauptkriterium für seine große Verbreitung. Anhand eines 'Hello World' Skripts möchten wir Ihnen ein Beispiel geben.


Beispiel TCL Script

In diesem Beispiel lautet der Name der Datei world.tcl, diese muss erstellt werden.


Initialisierung

BIND setzten: Es gibt eine viele mögliche binds worauf Eggdrop reagiert. In diesem Beispiel wird ein BIND PUB genutzt, dieser Reagiert auf einen Public Command im Channel.

bind PUB -|- !world hello:world

Das PUB bezeichnet worauf der Eggdrop Reagieren soll. Die Zeichen "-|-" geben die Eggdrop-Flags an, die der User haben muss um diesen Command auszuführen. Bei unserem Beispiel darf es jeder machen.

Wenn nur ein Global Owner vom Bot diesem Command ausführen darf nimmt man: "n|-", für Channel Owner: "-|n"

Als nächstes wird das Präfix festgelegt:

!world 

Und es folgt der Proc-Name

proc hello:world { nick host hand chan arg }

Die Anzahl der Parameter: "nick host hand chan arg" sind vom BIND festgelegt, man kann diese nach belieben Umbenennen, nicht jedoch vertauschen.

Das Skript

In diesem Beispiel Senden wir eine Nachricht in den Channel zurück:

{
putserv "PRIVMSG $chan :Hello World"
}

Das putserv bezeichnet eins der 3 vorhanden Queue Systeme vom Eggdrop.

Unwichtig: puthelp
Wichtig: putserv
Sehr Wichtig: putquick

Folgende Modi stehen zur Verfügung:

PRIVMSG: Direkte Nachricht an den Channel/User NOTICE: Eine Notice Nachricht an den Channel/user

$chan Legt fest wohin die Nachricht gesendet werden soll. An dieser Stelle könnte man auch die Variable $nick verwenden.

Am Ende steht der eigentliche Inhalt welcher gesendet werden soll.

Abschluss

Ist alles definiert, kann man Proc wieder schließen.

Das Skript sieht nun wie folgt aus:

Script:
bind PUB -|- !world hello:world
proc hello:world { nick host hand chan arg } {
putserv "PRIVMSG $chan :Hello World!"
}

Zum Abschluss muss man in der Eggdrop Config auf das Skript verweisen:

source scripts/world.tcl

Eingesandt von Robin S. Überarbeitet durch den netcup Support