====== Errbot ====== Errbot est un logiciel de bot multiplateforme, dont XMPP et IRC, (là où Eggdrop et Limnoria fonctionnent avant tout sur IRC). On peut utiliser des “bots” sur les canaux de discussions pour divers usages. Nous avons sur nos canaux un bot qui 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 ''Errbot''. Cet article détaille comment gérer un bot avec Errbot. Il vaut mieux installer Errbot sur un serveur afin que le bot soit présent en permanence ensuite. Errbot répondait difficilement à certains de nos besoins tout en consommant un peu trop de mémoire à notre goût pour le peu qu'il faisait, nous ne l'avons pas gardé pour Khaganat, préférant une solution maison : [[fr:botlogmauve]]. ===== Installation ===== Il faut faire ce qui suit avec python3. Sous Debian stable, python est encore par défaut à une vieiiiiiille version, alors que python3 est pourtant présent. Donc, changeons ça : rm /usr/bin/python ln -s /usr/bin/python3 /usr/bin/python Si vous avez des erreurs sur python lors d'une mise à jour du système, remettez le lien symbolique sur python2 le temps de faire la mise à jour. Note : ce n'est pas bien de faire ça comme ça. Mais ça marche. ==== Via Pipenv ==== Pipenv est probablement la façon la plus propre de gérer les choses. L'installation sous Debian est cependant un peu baroque. sudo apt install python3-pip python3-requests Puis installez ''pipenv'', avec l'utilisateur (pas en root !) afin de ne pas casser le système : python -m pip install pip --upgrade --user python -m pip install pipenv --user Source : http://sametmax.com/pipenv-solution-moderne-pour-remplacer-pip-et-virtualenv/ Note : avec Debian, il faudra remplacer la simple commande ''pipenv'' par ''python -m pipenv''. Pourquoi faire simple ? On créé un dossier où errbot sera installé et on installe ses dépendances : mkdir -p "~/errbot" ‎cd "~/errbot" python -m pip install sleekxmpp pyasn1 pyasn1-modules --user ‎python -m pipenv install errbot Si vous avez des erreurs à ce stade, lisez bien ce qui est indiqué. Par exemple, sleekxmpp a un [[https://github.com/fritzy/SleekXMPP/issues/462|bug]], il faut installer une version précédente. Un problème de compatibilité a également été constaté avec les deux autres dépendances. La commande pour installer ces dépendances dans une version antérieure devient donc python -m pipenv install sleekxmpp==1.3.1 pyasn1==0.3.7 pyasn1-modules==0.1.4 J'ai aussi eu droit à quelque chose qui se terminait de cette façon : You can use $ pipenv install --skip-lock to bypass this mechanism, then run $ pipenv graph to inspect the situation.Hint: try $ pipenv lock --pre if it is a pre-release dependency Could not find a version that matches pygments-markdown-lexer>=0.1.0.dev39 Tried: 0.1.0.dev39 There are incompatible versions in the resolved dependencies. Résolu en faisant ce qui était écrit : python -m pipenv install --skip-lock python -m pipenv graph On peut enfin initialiser le premier lancement du bot : ‎python -m pipenv run errbot --init ==== Alternative sans pipenv ==== virtualenv --python $(which python3) ~/.errbot-ve source .errbot-ve/bin/activate ~/.errbot-ve/bin/pip install errbot mkdir ~/errbot cd ~/errbot errbot --init ''source .errbot-ve/bin/activate'' met dans un environnement virtuel, pour en sortir il suffit de faire ''deactivate'', et relancer la commande ''source .errbot-ve/bin/activate'' pour y revenir. Pour XMPP, il faut installer des trucs en plus : pip install sleekxmpp pyasn1 pyasn1-modules Si jamais ça coince dans le virtualenv, on doit sortir afin d'installer certains paquets, puis les réimporter dans le virtual-env : deactivate pip install sleekxmpp pyasn1 pyasn1-modules source .errbot-ve/bin/activate cd ~/errbot pip install sleekxmpp pyasn1 pyasn1-modules errbot ==== Config.py ==== Le fichier ~/errbot/config.py contient la configuration du bot ; les exemples de ce qu'on peut y mettre sont dans [[http://errbot.io/en/latest/_downloads/config-template.py]]. Voici ce qu'il contient chez nous (à un mot de passe près) : import logging # This is a minimal configuration to get you started with the Text mode. # If you want to connect Errbot to chat services, checkout # the options in the more complete config-template.py from here: # https://raw.githubusercontent.com/errbotio/errbot/master/errbot/config-template.py #Config de base BOT_DATA_DIR = '/home/lapinou/erbaut/data' BOT_EXTRA_PLUGIN_DIR = '/home/lapinou/erbaut/plugins' BOT_LOG_FILE = '/home/lapinou/erbaut/errbot.log' BOT_LOG_LEVEL = logging.INFO #IPV6 pour voir si ça passe XMPP_USE_IPV6 = True # Liste des admins autorisées à modifier le bot en ligne BOT_ADMINS = ('moi@xmppserver.com', ) #Install auto des dépendances des plugins AUTOINSTALL_DEPS = True ## XMPP BACKEND = 'XMPP' BOT_IDENTITY = { # XMPP 'username': 'bot@xmppserver.com', # The JID of the user you have created for the bot 'password': 'ACHANGER', } CHATROOM_PRESENCE = ('salon1@chat.xmppserver.com','salon2@chat.xmppserver.com',) # "nick" of the bot in the room CHATROOM_FN = 'Erbaut' ## Prefix configuration # autre nom auquel le bot répond (même si c'est dans une phrase ?) BOT_ALT_PREFIXES = ('pendorid',) # Evite que la casse change quelque chose BOT_ALT_PREFIX_CASEINSENSITIVE = True ## Contrôles d'accès et droits ACCESS_CONTROLS_DEFAULT = {} ACCESS_CONTROLS = { 'say': { 'allowrooms': ('salon1@chat.xmppserver.com','salon2@chat.xmppserver.com',), 'denyusers':('toi@xmppserver.com',) }, } HIDE_RESTRICTED_COMMANDS = True === Contrôle des ACL === La partie des contrôles d'accès est importante. Par défaut, tout le monde a les accès : ACCESS_CONTROLS_DEFAULT = {} Mais en réalité, c'est les admins qui ont ces accès ouverts, hein... On va ensuite définir des utilisateurs, des salons qui ont des accès, et définir qui peut faire quoi avec quels plugins * ''allowusers'' et ''denyusers'' : autorise ou interdit les commandes à ces utilisateurs seulement. * ''allowrooms'' et ''denyrooms'' : autorise ou interdit ces commandes uniquement dans ces salons. * ''allowprivate'': autorise ces commandes depuis un message direct avec le bot. * ''allowmuc'': autorise ces commandes à l'intérieur des salons. ACCESS_CONTROLS_DEFAULT = {} # autoriser l'accès à tout le monde par défaut ACCESS_CONTROLS = {'status': {'allowrooms': ('someroom@conference.localhost',)}, 'about': {'denyusers': ('*@evilhost',), 'allowrooms': ('room1@conference.localhost', 'room2@conference.localhost')}, 'uptime': {'allowusers': BOT_ADMINS}, 'help': {'allowmuc': False}, 'ChatRoom:*': {'allowusers': BOT_ADMINS}, } On peut définir les noms explicitement (par exemple ''user@jabber.fr''), mais aussi par groupe dans le style unix : ''user@localhost'' ou même ''*@localhost''. Le groupe d'utilisateur ''BOT_ADMINS'' est aussi autorisé (incluant tout ce qui a été déclaré admin du bot). ==== Passer le bot en démon ==== La [[http://errbot.io/en/latest/user_guide/setup.html#starting-the-daemon|documentation officielle]] donne, pour lancer errbot en démon : errbot --daemon Je ne sais pas comment "marche" cette commande : si le serveur a un souci, est-ce qu'elle se relance au démarrage ? Ça parait incertain. Cependant, sous la plupart des systèmes Linux, la bonne pratique consiste maintenant à passer par systemd. Nous allons donc créer un service presque proprement. === Lancement automatique avec systemd === == Version Tycho Brahe == C'est probablement presque la bonne façon de faire, sauf que ça ne marche pas pour moi avec pipenv... --- //[[user:zatalyz|zatalyz]] 2018/04/29 11:01// Afin de lancer le bot automatiquement à chaque redémarrage de la machine, il est possible de créer un service systemd. Et afin d'avoir plusieurs instances, on décide d'un répertoire qui contiendra le dossier de chaque instance. Créons donc ''/etc/systemd/system/errbot@.service'' : [Unit] Description=Chat bot After=network.target network-online.target [Service] Type=simple User=khaganat Group=khaganat ExecStart=/path/to/.errbot-ve/bin/errbot --config=/path/to/config/%I/config.py [Install] WantedBy=multi-user.target Il est alors possible d'activer une instance : # systemctl enable errbot@monbot # systemctl start errbot@monbot Avec l'exemple ci-dessus, la configuration utilisée sera ''/path/to/config/monbot/config.py'' == Version Zatalyz == Créer plutôt ''/etc/systemd/system/errbot.service'' parce qu'avec le @ j'arrivais pas à faire ''enable''... [Unit] Description=Chat bot Errbot After=network.target network-online.target [Service] Type=simple User=khaganat Group=khaganat WorkingDirectory=/home/khaganat/chatbot/errbot/ ExecStart=/usr/bin/python -m pipenv run errbot Restart=always KillSignal=SIGINT [Install] WantedBy=multi-user.target Contrairement à la version de Tycho, ça ne sera pas multi-bot, mais à ce stade, je m'en fous. ===== Administrer le bot ===== Après pas mal d'errance, voici comment administrer le bot depuis xmpp lui-même. Renseigner son identifiant jabber dans config.py BOT_ADMINS = ('*@localhost','moi@xmppserver.com',) Puis ajouter le bot à ses contacts, et initier la conversation depuis les contacts, pas depuis le salon, sinon il croit qu'on est le salon ! Pour vérifier comment il nous voit, il suffit de lui envoyer la commande "!whoami". C'est peut-etre lié au client jabber. ==== Commandes de base utiles ==== Pour avoir la liste des commandes de base !help Pour vérifier s'il sait qui on est : !whoami Pour voir les dernières infos du log du bot (pas le log des canaux hein, mais ce qui est passé en info au bot) !log tail Par défaut c'est assez long, on peut mettre un chiffre en paramètre pour limiter le nombre de lignes : !log tail 10 ===== Pages ===== La doc d'errbot est assez mal fichue, trouver les bonnes pages c'est la misère... * http://errbot.io/en/latest/user_guide/administration.html ===== Plugins ===== Pour installer des plugins, il faudra que git soit présent sur le serveur où le bot fonctionne. sudo apt install git Installer un plugin !repos install nomgithub/nomplugin Désinstaller un plugin !repos uninstall nomgithub/nomplugin ==== SayBot ==== https://github.com/log0ymxm/err-say est un plugin qui permet de faire causer le bot et il marche. Pour l'installer : !repos install log0ymxm/err-say Il faut configurer les acl sinon elle n'a pas le droit de causer, par défaut. Dans config.py, on renseigne pour la commande say : ACCESS_CONTROLS = { 'say': { 'allowrooms': ('salon1@chat.xmppserver.com','salon2@chat.xmppserver.com',), }, } Voir la configuration des ACL pour plus de détail. La commande pour le faire causer : !say salon:message Par exemple : !say salon1@chat.xmppserver.com:hello !say salon2@chat.xmppserver.com:/me n'aime pas causer Moralité, va falloir un plugin d'alias... Car c'est vraiment long à écrire. Autre point de détail : par défaut le plugin est configuré pour que seules les administratrices puissent utiliser "say". Il faut modifier le fichier du plugin, dans votre dossier d'installation d'errbot (probablement ''errbot/data/plugins/log0ymxm/err-say/saybot.py'' et passer ''admin_only=True'' à ''admin_only=False''. Configurez alors bien les ACL en autorisant explicitement certaines utilisatrices à faire causer le bot : ACCESS_CONTROLS = { 'say': { 'allowrooms': ('salon1@chat.xmppserver.com','salon2@chat.xmppserver.com',), 'allowusers': ('georgette@xmppserver.com','marcel@xmppserver.com',), }, } ==== Alias ==== https://github.com/rroemhild/err-alias Pour l'installer : !repos install rroemhild/err-alias Créer un alias !alias add raccourci commande Enlever un alias !alias remove raccourci Alias à créer !alias add y say salon1@chat.xmppserver.com: !alias add s say salon2@chat.xmppserver.com: Appel !y message !s message ==== RSSReader ==== https://github.com/errbotters/err-rssreader/ Pour l'installer : !repos install https://github.com/errbotters/err-rssreader Pour lister les commandes et une explication de chacune : !help rssreader RSSReader Get newest content from your favorite RSS feeds via your Errbot. • !rssreader add - Add URL(s) of feed(s) to be checked for updates. • !rssreader feeds - Show all feeds that are checked for updates by RSSReader. • !rssreader rm - Remove feed(s) from the update loop. • !rssreader subs - Show channels which will receive new content from specific feeds. • !rssreader subscribe - Make a feed send updates to given channel(s). • !rssreader subscriptions - Show channels which will receive new content from specific feeds. • !rssreader unsubscribe - Unsubscribe channels/rooms from a specific feed. Ajouter un flux RSS !rssreader add addresse_du_flux Cela va associer une ID au flux (feed). === Pour Pendorid === !rssreader add https://khaganat.net/blog/feed.php !rssreader add https://khaganat.net/taf/feed.php !rssreader add https://khaganat.net/um1/feed.php !rssreader add https://khaganat.net/wikhan/feed.php !rssreader add https://khaganat.net/mediateki/feed.php !rssreader add https://khaganat.net/forum/index.php?action=.xml;type=rss;limit=10 !rssreader add https://git.khaganat.net/khaganat.atom Puis ''!rssreader feeds'' pour lister les flux et leur id. Ensuite, on souscrit sur les canaux aux flux qui nous intéressent : !rssreader subscribe f0c0f2 salon1@chat.xmppserver.com Pour voir les abonnements de chaque canaux aux flux : !rssreader subscriptions ===== Loguer les salons (ressource externe) ===== Linkmauve nous a créé de quoi loguer les canaux, mais c'est un autre bot, voir [[fr:botlogmauve]]. {{tag> Tutoriel Bot Serveur IRC XMPP}}