Provided by: jabber-querybot_0.1.0-1_all
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 $querystatus = [ 0 | 1 ] · 0 = Bot will not proceed any incoming jabber messages. · 1 = Bot will proceed incoming messages. penalty_status 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.
InMessage() 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 overloaded. · 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. connect_server() 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. Stop() Shutdown jabber connection and exit main program disconnect_server() Only disconnect from the jabber-server. reconnect_server() Reconnect and create a log entry. InIQ() We do not proceed any iq (information query), this is only for statisic. InPresence() · 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 sendPresence() Send presence information to user systemcommands() · 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 get_barejid() Remove resource id from a jabber id. calcualte_stats() Calculate message statistics jabber_set_presence() Set new presence if we have another presence status or we have set the force flag (for transport presence). jabber_send_message() This function send all jabber messages which are outgoing from the jabber-querybot. set_wakeup_mode() Set jabber presence via jabber_set_presence() penalty_handler() 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. jabber_add_footer() Add footer to the processed message. calcualte_elapsed_time() Calculate elapsed worktime for a query sendError() sendError($message, $from, $to, 404, "text"); system_load_check() · Calculate system load · If load is too high shutdown bot. · If load is ok, starting up bot connect_bot() Connect bot and initialize all timers. check_before_start() Check configuration variables in Querybotmodule.pm and give answer if anything does not match or is missing.
COPYRIGHT AND LICENSE
Copyright (C) 2009-2012 Marco Balmer <firstname.lastname@example.org> The Debian packaging is licensed under the GPL, see `/usr/share/common-licenses/GPL-3'.