The Command Line of the Future Part 2: Expanding ChatBot's Repertoireby DJ Adams, author of Programming Jabber
Editor's Note--In an earlier article, Is Jabber's Chatbot the Command Line of the Future?, we took an introductory look at ChatBot, the Jabber bot written in Perl and a regular occupant in the "jdev" conference room on conference.jabber.org. Having presented ChatBot's standard features, which exist as plug-ins, in this article we will discuss adding a new feature by writing our own plug-in for ChatBot.
Adding a New Feature to ChatBot
Now we know how to get ChatBot up and running, let's look at how we might expand its repertoire of features. Rather than write a silly function that doesn't do much more than say "Hello World," let's look at giving ChatBot a facility that has some use beyond this article. Despite the arrival of the Euro currency in Europe, currency conversion still has its uses, especially for those countries (like my homeland) that have not yet taken the plunge. Another use of currency conversion is it allows for discussion of prices of items essential for everyday life, such as MP3 hardware, between the U.K. and the U.S.
So, let's add a currency conversion feature to ChatBot.
Hey, wait a minute! Currency conversion is useful! So it's likely that it's been done before. Rummaging around in the dark recesses of my brain, and those of Usenet, I remember that infobot, another Perl bot mentioned in the previous article, has this facility. Taking a quick look at infobot's home page, and the CVS repository, I find a script called exchange.pl, written by Bobby Billingsley. (See the "Resources" section later in this article for details.) Hmmm, this looks promising. Looking inside the script (hurrah for open source!) and at infobot's release notes at http://www.infobot.org/guide-0.43.x.html, it seems that this is exactly what we're looking for.
The script provides currency-exchange facilities by calling a Web service that does the actual currency conversions. The Web service is at http://www.xe.net, and the script uses the LWP::UserAgent and HTTP::Request::Common modules to make the HTTP calls.
Now, every scripter worth his or her salt knows that laziness, impatience, and hubris are three excellent qualities to have when it comes to coding. Putting all three of these qualities into practice, it turns out that it's easy to get this script to work for us in a ChatBot environment instead of in its native environment, infobot.
Let's go through the steps required to add a plug-in to ChatBot, as described in the PLUGIN_API.txt file in the chatbot/ directory.