Code du projet Construire un bot IRC, TuxRadar Linux


Chez TuxRadar nous aimons les projets de programmation peu rapides, et nous espérons que vous aussi. Le mot « projets » est important: on ne va pas insister sur la théorie ou Gubbins techniques banales, mais plutôt regarder faire des choses cool - après tout, la programmation est le plus amusant quand vous faites réellement les choses plutôt que de passer des heures l'apprentissage de constructions en boucle fastidieux!







Dans ce tutoriel, nous allons produire un bot IRC écrit en Perl. Si vous êtes un internetter old-school, vous aurez probablement utilisé IRC avant; sinon, voir le Hang on, quel est l'IRC? boîte expliquant les bases overpage. En un mot, l'IRC est en temps réel protocole de chat, couramment utilisé dans les projets open source pour l'interaction entre les développeurs. Il est simple, rapide et facile à comprendre - et le meilleur de tous, il vous permet de créer des participants virtuels dans la conversation.

C'est ce que nous allons faire ici: écrire un « robot » qui se joint à une conversation IRC, et avec lequel vous pouvez parler pour obtenir des informations sur une machine. Disons, par exemple, que vous êtes au travail ou en vacances, et que vous voulez garder un œil sur un système à la maison (ou un serveur colocalisé). Notre bot IRC va rester tranquillement assis dans un canal, vous attend de venir et de lui poser des questions au sujet de son temps de fonctionnement et le niveau de charge.

Il existe une myriade d'outils de surveillance du système là-bas, mais ils ont tendance à être tout ou rien des programmes qui inondent votre boîte de réception avec menus détails inutiles sur une machine. Notre robot rend les choses beaucoup plus simple: si vous voulez savoir comment l'espace disque est laissé sur votre machine, ou si elle est à court de RAM, vous pouvez sauter sur IRC et communiquer avec le bot instantanément (dans les messages privés). Plus important encore, nous bloquons afin que vous seul pouvez obtenir des informations de retour de celui-ci!

Une amorce Perl rapide

En mode C, les déclarations doivent se terminer par des points-virgules (;). Les variables commencent par des signes dollar:

Imprime « Ubuntu » à l'écran. Comme avec beaucoup de langues, le premier élément d'un tableau est donné le numéro 0. Une commande utile pour les tableaux est changement, ce qui supprime le premier élément d'un tableau et le place dans une variable:

Ici, nous avons mis en place un tableau contenant trois chaînes, puis décaler le premier élément dans la variable $ foo. Nous l'imprimer, puis faire un autre changement. Ainsi, la sortie est « Ubuntu » suivi de « Fedora » - et à la fin, le seul élément gauche du tableau est « SUSE ». Une version améliorée d'un tableau est un « dictionnaire » ( « hachage » alias), noté avec un pourcentage (%) signe:

Cela associe une liste de mots avec des valeurs. Par exemple, si vous vouliez imprimer le poids de l'entrée dans le dictionnaire « Nick »:

Ce imprimera « 25 ». si les constructions sont les mêmes que dans la plupart des autres langues:

Donc, ce sont les écrous et boulons de programmation Perl - tout ce que nous devons commencer à écrire notre bot IRC!

Attendez, ce qui est l'IRC?

IRC (Internet Relay Chat) est un temps réel système de discussion texte qui est antérieure à la World Wide Web, ayant été inventé en 1988. IRC est un protocole ouvert, texte brut, et tout le monde peut écrire un programme frontal à la système. discussions IRC ont lieu sur des réseaux séparés; certains sont orientés vers l'open source (irc.freenode.net), tandis que d'autres se concentrent sur les jeux.

Chaque réseau IRC est composé de plusieurs serveurs qui relient entre eux - vous pouvez choisir un serveur géographiquement proche de vous, ou tout simplement choisir une au hasard. De toute façon, vous ferez partie du même réseau. Par exemple, pour commencer à chatter sur le réseau Freenode, obtenir un client IRC (par exemple X-Chat), le feu vers le haut et entrez:

(Commandes IRC commencent par des barres obliques vers l'avant). Vous pouvez ensuite définir votre nom et l'enregistrer avec un mot de passe à l'aide:

Ensuite, vous pouvez vous joindre à un « canal » (comme une salle de chat spécifique) avec:

mise en place

Nous allons utiliser un module add-on spécial pour Perl appelé Net :: IRC. Cela fournit une interface au protocole IRC, ce qui signifie que nous ne devons pas écrire ramettes de code pour mess avec prises et connexions. Au lieu de cela, nous pouvons dire Net :: IRC pour trier toutes les activités de réseautage, nous laissant libres de se concentrer sur faire le robot faire ce que nous voulons.

Extraire le tarball, passer dans le répertoire résultant et entrez:

Vous devrez entrer la dernière commande en tant que root. Cela installera le module Net :: IRC dans votre installation Perl l'ensemble du système, de sorte que le programme que nous allons écrire peut l'utiliser!

Connectez-vous à l'IRC et passer à votre nom d'utilisateur normal. Si vous n'êtes pas inscrit encore, vous aurez envie d'entrer quelque chose comme:

Nous aurons également besoin de mettre en place un nom d'utilisateur enregistré pour notre bientôt à être né bot IRC. Mettez votre nom d'utilisateur et un mot de passe attribuer comme celui-ci:

Bien sûr, vous pouvez définir le pseudonyme et mot de passe pour tout ce que vous voulez, mais rappelez-vous les - nous les utiliserons dans le code Perl du bot! Alors maintenant, nous avons deux noms d'utilisateurs enregistrés: le nôtre et celui du bot.







Montrez-moi le code

Maintenant, nous sommes prêts à lancer le bot. Voici le code: vous ne voulez pas taper dans la main, donc le télécharger ici. Avant de l'exécuter, si, lisez le code et la description suivante.

Nous définissons le serveur IRC auquel notre bot se connecte, et un canal que le robot rejoindra. Ensuite, nous avons mis le nom d'utilisateur du bot (aka surnom), et le mot de passe qu'il utilisera pour s'identifier au serveur IRC. Enfin, nous définissons le surnom de l'utilisateur que le bot parler - donc ce sera votre pseudo IRC normale.

Mais il y a une chose que nous devons faire d'abord: attacher des actions de bot aux messages du serveur IRC. Notre bot ne va pas être complètement silencieux, donc il a besoin de savoir quels messages il doit répondre. Les quatre lignes de add_global_handler traitent cela - ils disent notre bot, « Si vous recevez un message A, sauter au sous-programme B ».

Par exemple, la première ligne dans ce morceau de code dit: « Si nous recevons un message 376, appelez la fonction on_connect ». Un message 376 est un code spécial que le serveur IRC renvoie au cours de la phase de connexion - il indique que le serveur a livré les informations de connexion normale, et est maintenant prêt à accepter les commandes.

Si vous êtes un IRCer régulier, vous saurez que lors de la connexion à un serveur, vous voyez une foule d'informations sur l'état du serveur, les messages de la communauté et ainsi de suite. Le code 376 indique que ont terminé les messages de bienvenue.

Ensuite, nous ajoutons des gestionnaires pour trois messages: déconnexion, coups de pied, et un message privé. Respectivement, ces disent notre bot d'appeler certaines fonctions si elle se déconnecte, ou est expulsé d'un canal, ou reçoit un message privé. bots IRC peuvent répondre à une gamme beaucoup plus large de messages que ceux-ci, mais dans notre cas, nous avons seulement besoin de gérer quelques messages spécifiques.

La prochaine étape, nous avons $ IRC-> commencer; qui débute notre bot en action. Il sait quel serveur et le canal, il va utiliser, et qui subroutines appeler quand il reçoit certains messages. Ainsi, le robot se connecte, et après quelques secondes, il reçoit le message de 376 mentionné précédemment. Cela déclenche la fonction on_connect.

Ainsi, lorsque le robot se connecte, nous envoyons un privmsg (message privé) à nickserv, qui est le gestionnaire de pseudonyme dans la plupart des réseaux IRC. Nous fournissons le mot de passe bot pour authentifier sur le serveur. Ensuite, nous nous associons à notre chaîne spécifiée, et d'envoyer un petit message indiquant que nous allons être calme - pas inonder le canal avec les ordures au hasard!

Avec ce fait, le bot rester assis en silence à moins qu'il soit déconnecté ou coups de pied, auquel cas, il appellera les deux fonctions suivantes et reconnecter ou imprimer un chiot aux yeux « S'il vous plaît ne me frappe pas! » message.

La dernière fonction, on_msg, est ici le plus important. Ceci est appelé lorsque le robot reçoit un message privé - à savoir un message dans une boîte de dialogue séparée, pas quelque chose dans le canal principal. Si le robot reçoit tout type de message, il envoie la sortie de `uptime` à l'utilisateur de botadmin $, ce qui est votre nom normal.

Notez la backtick ( `)` caractères autour uptime`: Perl disent ceux-ci pour exécuter la commande spécifique et retourner la sortie en tant que chaîne. Ainsi, la ligne privmsg envoie un message privé contenant la sortie de disponibilité à notre utilisateur normal. Vous pouvez trouver la clé backtick en dessous de la touche Echap sur la plupart des claviers de PC.

Code du projet Construire un bot IRC, TuxRadar Linux

La première version de notre bot: quand nous parlons, il fournit des informations de disponibilité. Mais il pourrait faire plus.

Continue de courir

Lançons le bot maintenant. Ouvrez bot1.pl et modifier les cinq variables de configuration en haut pour correspondre à votre configuration - à savoir lui donner le surnom de bot et mot de passe que vous avez enregistré plus tôt, et définir le nom de botadmin de $ pour être votre compte utilisateur normal. Maintenant, lancez votre client IRC, identifiez vous au serveur IRC et rejoindre le canal que vous avez spécifié pour le bot. Ensuite, exécutez le robot avec:

Au bout de quelques secondes, le robot se connecter, s'identifier avec le serveur IRC et rejoindre le canal que vous avez spécifié. Vous devriez voir apparaître avec son petit message de bienvenue! Maintenant commencer un dialogue privé (privmsg) avec elle, et tapez ce que vous voulez - le robot répondra à la sortie de disponibilité. Excellent! Vous pouvez maintenant lancer le robot sur une machine que vous choisissez, et de garder trace de ce temps de disponibilité de la machine (et le niveau de charge) simplement en se connectant à l'IRC et de lui parler.

Sauf, bien sûr, il est assez limité à ce stade. Chaque fois que quelqu'un parle au robot dans un message privé, il va envoyer la sortie de disponibilité pour vous. Aussi, il est limité à cette seule commande de disponibilité - assez juste si c'est tout ce que vous voulez surveiller, mais il pourrait le faire beaucoup plus.

Si tout fonctionne bien, vous pouvez étendre la dernière fonction (on_msg) avec plus de fonctionnalités, comme celui-ci (le code complet est disponible ici):

Cette fois-ci, sur la troisième ligne de la fonction (si), nous vérifions qui envoie un message privé au robot. Nous continuons seulement si botadmin de $ parle au bot - autrement dit, si elle nous! Ensuite, nous regardons dans le texte que nous avons envoyé à la boîte. Ceci est prévu dans la event- $> tableau args, qui contient une liste de texte que nous avons envoyé au bot.

Nous roulons dans le texte, et vérifiez si elle correspond à une commande que nous voulons exécuter. C'est ce que si ($ arg =

m / ligne de disponibilité /) fait: il dit: « Si l'une des lignes de texte envoyé au robot contient le temps de fonctionnement de la chaîne, procédez comme suit. » Le m / disponibilité / bit est une expression régulière, vérifier si les correspondances de texte le temps de fonctionnement.

Maintenant, le temps de fonctionnement ne renvoie qu'une seule ligne, il semble donc inutile de faire défiler toutes les lignes possibles de la production. Mais vous remarquerez que le morceau de code suivant vérifie si nous avons envoyé df au bot - et df produit plusieurs lignes de production. Donc, si le bot obtient df dans un message privé de nous, il accumule la sortie et l'envoie en arrière, ligne par ligne.

Vous avez maintenant un bot IRC extensible qui répond à vos commandes, et ne répond qu'à vous; il ne crachent des informations à des inconnus au hasard (à moins qu'ils se connectent avec votre pseudo et connaître votre mot de passe). Bien sûr, vous ne voulez pas donner le pouvoir de bot pour mettre sous tension votre machine, mais vous pouvez l'utiliser pour obtenir beaucoup de commentaires sur une machine.

Cela vous donne des tas de flexibilité: vous pouvez exécuter le bot sur votre serveur web, et si vous pensez que tout est avec la machine, juste sauter sur IRC et un Natter rapide avec le robot. Ou vous pouvez exécuter le robot sur votre ordinateur de bureau à domicile, et de communiquer avec elle au travail, en disant à exécuter / arrêter certains processus en cas de besoin. Les possibilités sont infinies - et tout ce dont vous avez besoin est un accès à l'IRC!

Code du projet Construire un bot IRC, TuxRadar Linux

Bot 2.0 nous permet maintenant de lui donner des commandes spécifiques à exécuter, et il ne laissera personne d'autre lui parler!







Articles Liés