Table des matières

Limnoria

Limnoria est un logiciel de bot IRC, comme Eggdrop. C'est la reprise de Supybot ; les deux partagent donc la même documentation, mais Limnoria est la version actuellement maintenue à jour.

On peut utiliser des “bots” sur IRC pour diverses utilisations. Nous avons sur le canal #khanat un bot qui enregistre les conversations, ramène les dernières infos de certains flux RSS et est parfois animé de sa propre vie : Pendorid. Ce bot est mis en place grâce au logiciel Limnoria.

Cet article détaille comment gérer un bot avec Limnoria. Il vaut mieux installer Limnoria 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 !

Installation

Installer les paquets python nécessaires :

apt-get install python3 python3-dev python3-pip python-twisted python3-sqlalchemy python3-setuptools python3-feedparser
  • Il faut la version supérieure à 17.0 pour python-setuptools, donc au moins Jessie sur Debian.
  • Sans python3, certains flux rss ne sont pas récupérés.

Pour que python3 soit utilisé par défaut, en root :

rm /usr/bin/python
ln -s /usr/bin/python3 /usr/bin/python

Créer un dossier pour le bot, se mettre dedans

mkdir botfile
cd botfile

Télécharger et dézipper limnoria

wget https://github.com/ProgVal/Limnoria/archive/master.zip
unzip master.zip
cd Limnoria-master/

Installer sans être root.

pip3 install -r requirements.txt --user
python setup.py install --user

Ensuite, faire des raccourcis pour la suite

echo 'PATH="$HOME/.local/bin:$PATH"' >> ~/.$(echo $SHELL|cut -d/ -f3)rc
source ~/.$(echo $SHELL|cut -d/ -f3)rc

Créez le dossier où sera stocké la configuration des bots, mettez-vous dedans et lancez l'assistant d'installation :

cd ../
mkdir config
cd config
supybot-wizard

Diverses questions vont être posées (en anglais), il suffit de suivre tranquillement.

Pour lancer le bot :

supybot bot.conf

En daemon :

supybot --daemon bot.conf

Lancer automatiquement les bots via cron

Créer un fichier pid du nom du bot dans le dossier config :

touch bot.pid

Ajouter une ligne de ce genre dans cron (via crontab -e) :

*/10 * * * * /home/user/.local/bin/supybot-botchk --supybot=/home/user/.local/bin/supybot --botdir=/home/user/supybot/config/ --pidfile=/home/user/supybot/config/bot.pid --conffile=/home/user/supybot/config/bot.conf

*/10 indique que la commande sera lancée toutes les 10 minutes.

Liens et ressources

La doc est assez complète sur ces différentes ressources, ainsi que les tutos pour la prise en main basique du bot.

Pense-bête

Ce qui suit est un résumé des principales commandes et actions ; mieux vaut lire la doc officielle auparavant.

Pour lister les commandes des plugins :

config list supybot.plugins.NomDuPlugin
config list supybot.plugins.NomDuPlugin.Dossier1

Pour avoir des informations sur les options des plugins :

config help supybot.plugins.NomDuPlugin.Dossier1.option1

S'il y a un arobase (@) devant ce qui est listé par la première commande, il faut répéter list avec le paramètre en arobase. Sinon, il faut utiliser help.

<Zatalyz> config list supybot.plugins.RSS
-pendorid- #announce, #announceFormat, #defaultNumberOfHeadlines, #format, #headlineSeparator, #initialAnnounceHeadlines, #keywordBlacklist, #keywordWhitelist, #notice, @feeds, public, sortFeedItems, and waitPeriod
<Zatalyz> config list supybot.plugins.RSS.feeds
-pendorid- @blog, @forum, @mediateki, @taf, @um1, and @wikhan
<Zatalyz> config help supybot.plugins.RSS.announce
-pendorid- Determines which RSS feeds should be announced in the channel; valid input is a list of strings (either registered RSS feeds or RSS feed URLs) separated by spaces.  (Current value:  )

Plugin en anglais

Il se peut que le bot parle en anglais, alors qu'on avait bien configuré le français en langue principale. Dans ce cas, s'assurer que c'est bien le français qui est la langue de base, puis décharger et recharger le plugin (via le chat, en causant direct au bot) :

config language fr
unload Games
load Games

Alias

La commande Alias permet de créer des commandes personnalisées pour le bot, ce qui est tout simplement génial.

Bien que les développeurs conseillent à présent d'utiliser le plugin Aka (mêmes fonctionnalités), mon expérience personnelle me fait préférer Alias, qui se contente de marcher…

Alias utiles :

Commande Résultat
alias add !me do #canal $1 Lorsqu'on écrira !me blabla au bot, il dira “bot blabla” sur le #canal.

RSS

Ajouter les divers flux propres à Khaganat :

rss add forum https://khaganat.net/forum/index.php?action=.xml;type=rss
rss add mediateki https://khaganat.net/mediateki/feed.php
rss add taf https://khaganat.net/taf/feed.php
rss add wikhan https://khaganat.net/wikhan/feed.php
rss add um1 https://khaganat.net/um1/feed.php
rss add blog https://khaganat.net/blog/feed.php
rss add GitKhaganat https://git.khaganat.net/dashboard/projects.atom

Enlever les divers flux

rss remove forum
rss remove mediateki
rss remove taf
rss remove wikhan
rss remove um1
rss remove blog
rss remove GitKhaganat

Modifier le nombre de lignes à afficher lors des mises à jour des flux :

config supybot.plugins.rss.initialAnnounceHeadlines 1

Ajouter les annonces sur le canal lorsqu'il y a du nouveau :

rss announce add #khanat forum blog um1 taf mediateki wikhan
rss announce add #krypte GitKhaganat

Lister les flux sur un canal :

rss announce list #khanat

S'identifier et faire des bêtises

Effet Commande Exemple de commande
S'enregistrer auprès d'un bot, afin de lui faire faire certaines commandes user register <nom> <mot-de-passe> user register Dupont branaz
Changer le mot de passe user set password <utilisateur> <ancien mot de passe> <nouveau mot de passe> user set password Dupont branaz pendo
S'identifier auprès du bot pour pouvoir utiliser plus de commandes identify <pseudo> <mot-de-passe> identify Dupont branaz
Savoir si on est enregistré et qui on est whoami whoami

Renommer le bot en direct (une fois identifié) :

admin nick <nouveaupseudo> 

Le bot prend aussi des commandes classiques d'irc, comme part, join

Effet Commande Exemple de commande
Rejoindre un canal join <nom du canal> join #khanat
Quitter un canal part <nom du canal> part #khanat

Pour en savoir plus sur une commande, demandez help au bot.

Réinitialiser son mot de passe admin

Si vous êtes owner et que vous avez changé votre mot de passe puis oublié ce dernier, ça va être un peu compliqué de reprendre les droits sur votre bot.

Première chose : regardez dans vos logs IRC en local si vous retrouvez la discussion avec le bot où vous avez changé de mot de passe, parce que ce sera écrit en clair dans vos propres logs. Si vous utilisez plusieurs appareils pour vous connecter à IRC, regardez les logs sur chacun de ces appareils.

Si cela ne suffit pas :

Le point délicat est que le bot garde des choses en cache (probablement dans config/backup, ou alors c'était un coup de chance), ce qui demande de l'éteindre et de faire du ménage.

Scripts utiles

Ranger les logs

Limnoria trie les logs par canal, mais au bout de quelque mois, c'est assez plein. Voici un script qui va ranger ces logs dans des dossiers suivant le canal, l'année et le mois, qui peut être lancé tous les jours.

archiverlog.sh
#!/bin/bash
 
# Variable pour l'endroit où sont stockés les fichiers. Ne pas mettre de / à la fin de la chaine !
dirlog=/home/khaganat/supybot/config/logs/ChannelLogger/freenode
dirarch=/home/khaganat/archivelog/freenode
 
# On liste les divers canaux logués 
liste="khanat ryzomforge ryzomdev ryzomatys ryzomsupport ryzomgraphic ryzomlinux ryzommac krypte"
for chan in $liste; do
	# On vérifie que ça existe  ( -d pour dossier)
	if [ -d $dirlog/\#$chan ]; then
	#d'abord on va dans chacun des dossiers de log de channel
	cd $dirlog/\#$chan/
	# puis on récupère le nom des logs en variable 
		# On récupère la date, en formattant comme pour les logs
		for f in *.log
		do
		  year=${f: -14:4}
		  month=${f: -9:2}
		  day=${f: -6:2}
		# On se fait une jolie variable qui imite la partie datée du nom des fichiers de log
		log=$year-$month-$day
 
 
	# On vérifie que les fichiers de log existent ( -e pour existe)
	if [ -e $dirlog/#$chan/#$chan.$log.log ]; then
 
	# on créé le dossier de chaque mois dans les archives s'il n'existe pas
	mkdir -p "$dirarch/$chan/$year/$month/"
	# on déplace ces logs dans leur archive, à condition qu'ils soit plus âgés que 7 jours.
	find $dirlog/#$chan/#$chan.$log.log -type f -mtime +7 -exec /bin/mv {} $dirarch/$chan/$year/$month/$chan.$log.log \;
 
	fi
	done
	fi
done

Voir le log du jour en direct

À venir, grâce au script de Nuts.

Laisser quelques archives accessibles

Comme on peut le voir sur la page irc/log.php, il est possible de présenter joliment les logs aux visiteurs et aux absents.

Doc en cours, vu que je remanie la façon de faire.