JABBER-QUERYBOT(1p)   User Contributed Perl Documentation  JABBER-QUERYBOT(1p)

       jabber-querybot - a modular perl jabber bot

       jabber-querybot connects a jabber account and wait for messages. If a
       message comes in, it forward it to your self programmend modul. The
       return string of your module, jabber-querybot send it back to the
       jabber sender.

       It is designed to be re-usable and to make it easy to write small
       Jabber bots that do one thing and do it well. A simple concept with a
       lot of examples and experiences are implemented.

       1. Create a jabber account on a jabber-server around

       2. Create a bot application:

        cd examples
        cp Querymodule.pm /etc/jabber-querybot/Mybot.pm
        cd /etc/jabber-querybot
        ln -s Mybot.pm Querymodule.pm

       Modify login parameters to your jabber-bot-account

       vim Mybot.pm

         our $hostname        = "swissjabber.ch";
         our $user            = "";
         our $password        = "";
         our $ident           = "Testbot";
         our $bot_admin       = "\@swissjabber.ch";
         our $port            = "5222";
         our $timeout         = "5";
         our $service_name    = "$user\@$hostname";
         our $bot_description = "Bot help title
         Bot description";

       For each jabber message, jabber-querybot will execute sub run_query,
       that you can write here your application.

       You can control how your jabber response will be:

       •   error = error message stanza

       •   presence = error as presence stanza

       •   ignore = ignore message

       jabber-querybot has a lot of variables which you can easy modify for
       what you need:

       $querystatus = [ 0 | 1 ]

       •   0 = Bot will not proceed any incoming jabber messages.

       •   1 = Bot will proceed incoming messages.

       If the bot has too much workload, it goes to penalty status and wait
       some time until his status change back to normal.

       $timer_reconnect_default = 21600

       Every 21600 seconds (6 hours) the bot will shutdown automatically, wait
       10 seconds and starting up again.

       $timer_auto_query = 0

       If you set in your module this variable to 60, the bot will every 60
       seconds call the function run_auto_query() which you may use for
       several things.

   System load
       If your systems load is >=6, this bot will shutdown the jabber
       connection and check every 10 seconds systems load. If load <=2, bot
       will start over.





       An incoming jabber message to the bot will hook this function.

       • Read parameters of incoming stanza

       • Decode utf8 string

       • increment timer overload and do not process message if bot is

       • Ignore message if it is from myself

       • Be sure, that it is not a message from another transport

       • Check any systemcommands for the bot

       • If the bot has sleeping status, change it to work

       • We process only normal text or chat type jabber messages

       • And now we give the real text string which was incoming to the bot
         via run_query().

       • If run_query() say us 'ignore` we do a log entry and do not answer
         via jabber to the user.

       • If run_query() says 'error` we send a jabber error stanza wiht the
         status message from run_query() back to the user.

       • If there was no error, we update the statistic vars and send the
         answer from run_query() back to the jabber user.

       This function connects to the jabber server with the given credentials
       from Querymodule.pm.

       Set the call back functions. This functions will be executed if a
       message of the types <message/> <iq/> or <presence/> are incoming.

       Shutdown jabber connection and exit main program

       Only disconnect from the jabber-server.

       Reconnect and create a log entry.

       We do not proceed any iq (information query), this is only for

       • Increment timer overload

       • Do not process message if we are overloaded penalty_handler().

       We have a problem in Net::Jabber. An incoming message with a ` in
       resource blocks the bot. We will hotfix that for the moment.

       A subscription type `subscribe` is incoming. Send `subscribed` tho the
       user and say hello ;)

       • Send presence to user

       • Remove subscription if a user remove this bot from his roster

       Send presence information to user

       • If user type '!help` send a help instruction to the user

       • Send statistic information to the user if he types '!status`

       • Is it a bot command?

       • Is the bot command from the bot admin? If not, send "not allowed"

       • '!shutdown` will shutdown your bot via jabber invoke.

       • '!query off` turn off queries

       • '!query on` turn on queries

       Remove resource id from a jabber id.

       Calculate message statistics

       Set new presence if we have another presence status or we have set the
       force flag (for transport presence).

       This function send all jabber messages which are outgoing from the

       Set jabber presence via jabber_set_presence()

       This function checks if the bot is overloaded with incoming mesages and
       reject if it is. Two times that's ok so 2:1 because while in main.

       Bot admin got everytime an answer.

       Add footer to the processed message.

       Calculate elapsed worktime for a query

       sendError($message, $from, $to, 404, "text");

       • Calculate system load

       • If load is too high shutdown bot.

       • If load is ok, starting up bot

       Connect bot and initialize all timers.

       Check configuration variables in Querybotmodule.pm and give answer if
       anything does not match or is missing.

       Copyright (C) 2009-2012 Marco Balmer <marco@balmer.name>

       The Debian packaging is licensed under the GPL, see

perl v5.14.2                      2012-02-03               JABBER-QUERYBOT(1p)