Eggdrop est un logiciel permettant d'utiliser un bot sur IRC. Nous utilisions Eggdrop pour pendorid, avant de passer au logiciel Limnoria.
Cet article détaille comment gérer un bot avec Eggdrop. Il est plus simple d'installer Eggdrop sur un serveur afin que le bot soit toujours présent ensuite.
Ne mettez pas un bot sur un canal IRC sans l'accord des propriétaire, c'est assez mal vu !
Sous Debian, installer tcl8.5, tcllib et tcl-dev :
sudo apt-get update sudo apt-get install tcl8.5 tcl8.5-dev tcllib tcl-dev
Télécharger la dernière version stable d'Eggdrop et la décompresser, (ne pas renommer, l'installation créera ensuite un dossier “eggdrop”) :
wget ftp://ftp.eggheads.org/pub/eggdrop/source/1.6/eggdrop1.6.21.tar.gz tar zxvf eggdrop1.6.21.tar.gz cd eggdrop1.6.21
Prérequis pour la compilation :
sudo apt-get install gcc make
Prérequis pour le support SSL (flux rss) :
sudo apt-get install openssl libssl-dev tcl-tls
Compiler eggdrop :
./configure make config make make install
Se rendre dans le nouveau dossier eggdrop :
cd rm -R eggdrop1.6.21 cd ../eggdrop
On peut alors supprimer les fichiers de compilation, ils ne sont plus nécessaires.
Documentation complémentaire sur http://www.ircz.fr/guides.php?act=lire&cle=84 et http://wiki.eggdrop.fr/Installation_d%27un_eggdrop_1.8
Il y a deux scripts actuellement utilisés par eggdrop sur #khanat. Le premier permet à pendorid de rapporter un flux rss (nouvelles sur le forum, entre autre), le second de la faire parler. Ce dernier est un script maison. S'il vous intéresse, contactez un administrateur sur #khanat1).
Copier les fichiers utiles des scripts dans eggdrop/script
.
Le script RSS est celui qu'on trouve sur https://github.com/eggtcl/rss-synd où on trouve sa documentation complète. Il en existe plusieurs sur le web, assez similaires. Il faut créer et configurer un fichier pour stocker les databases des flux rss, par exemple eggdrop/script/feed
, et indiquer le chemin de ce fichier dans la configuration du script, dans le fichier rss-synd-settings.tcl
(ligne “database”).
Le script de base est très sérieux, et anglais. Nous l'avons personnalisé pour que pendorid soit plus “vivante”, en modifiant rss-synd.tcl
⇒ Pour changer le message quand on demande au bot la liste des flux :
Après
if {[info exists list_feeds]} { if {[llength $list_feeds] == 0} { lappend list_feeds "None" }
Modifiez :
lappend list_msgs "Available feeds: [join $list_feeds ", "]."
en :
lappend list_msgs "attends que vous choississiez votre radio : [join $list_feeds ", "]."
⇒Pour que le bot parle sur le canal comme s'il avait fait un /me et pas juste en récitant son texte, après :
proc ::rss-synd::feed_msg {type msgs targets {nick ""}} { # check if our target is a nick if {(($nick != "") && \ ($targets == "")) || \ ([regexp -- {[23]} $type])} { set targets $nick }
Modifiez :
foreach msg $msgs { foreach chan $targets { if {([catch {botonchan $chan}] == 0) || \ ([regexp -- {^[#&]} $chan] == 0)} { foreach line [split $msg "\n"] { if {($type == 1) || ($type == 3)} { putserv "NOTICE $chan :$line" } else { putserv "PRIVMSG $chan :$line" } }
En :
#modif : ajout de \001ACTION en début et fin pour faire un /me foreach msg $msgs { foreach chan $targets { if {([catch {botonchan $chan}] == 0) || \ ([regexp -- {^[#&]} $chan] == 0)} { foreach line [split $msg "\n"] { if {($type == 1) || ($type == 3)} { putserv "NOTICE $chan :pendorid $line" } else { putserv "PRIVMSG $chan :\001ACTION $line \001" } }
Notez que nous avons utilisé le mot “pendorid”… mettez le nom de votre bot !
Il est possible qu'il y ait un souci pour lire un flux https. Vérifiez que tous les paquets à l'étape “installer Eggdrop” sont bien présents. Si le problème perdure, cela peut être lié à la façon dont le serveur du bot est configuré (ports, etc). Dans ce cas, en lançant le bot avec la commande ./eggdrop -n bot.conf
, on obtient une erreur de “time out”. Trouver un endroit où installer le bot qui soit plus accessible… Ou comprendre comment les ports s'ouvrent.
Au 19/04/2015 des problèmes sur la lecture du flux RSS sont réapparu (lié au certificat ?). Mais on peut aussi accéder aux flux en http, donc… c'est ceux-là qui sont renseignés dans le fichier de configuration.
Si les flux ramenés sont mal encodés (accents bizarres), il faut ajouter cette ligne dans les options par défaut, dans le fichier rss-synd-settings.tcl
:
"feedencoding" "utf-8"
Cela indique quel est l'encodage du flux. On peut voir quel encodage est utilisé en allant sur le flux en question, en regardant le code source et ce qui est indiqué à la section <?xml
. Par exemple pour l'utf-8:
<?xml version="1.0" encoding="UTF-8"?>
Chaque bot a plusieurs fichiers à son nom :
*.conf
*.botchk
*.chan
*.user
Le fichier .conf est le premier à bidouiller. Il contient les diverses infos de base. Copiez le fichier d'exemple eggdrop.conf
en le renommant du nom de votre bot, par exemple pendorid.conf
, puis prenez le temps de bien le lire et de comprendre chaque option et personnalisez-le.
En cas de doute sur les options, allez lire les infos sur les sites suivants : http://www.ircz.fr/guides.php?act=lire&cle=84 et http://wiki.eggdrop.fr/Installation_d%27un_eggdrop_1.8
Le fichier .botchk sera utilisé pour relancer le bot automatiquement en cas d'arrêt. Copiez le fichier par défaut et changez les informations nécessaires.
Les deux autres seront créés automatiquement, ainsi qu'un fichier pid.bot
suivant ce que vous avez renseigné dans le bot.conf
.
Pour le premier lancement, taper la commande :
./eggdrop -m BOT.conf
Cela permet de le configurer et créé automatiquement les autres fichiers. On peut par la suite lancer le robot manuellement avec la commande
./eggdrop BOT.conf
Sur les deux commandes précédentes, remplacez BOT par le nom du fichier.
Puis via IRC, dites bonjour à votre bot, en anglais.
/msg nikbot hello
Cela vous transforme en propriétaire du bot, et vous permet de créer un mot de passe (notez-le !) afin de le gérer via IRC. Cependant, pour utiliser les commandes via IRC, il faut aussi le permettre dans le fichier de conf.
Ajoutez au crontab cette ligne pour relancer le bot en cas d'arrêt (en mettant le bon chemin et nom du bot) :
0,10,20,30,40,50 * * * * /home/user/eggdrop/BOT.botchk >/dev/null 2>&1