JABBER-QUERYBOT(1p)

๐Ÿ“ฆ
version 0.1.0+git20160217.1338677 ยท 3 versions
, in ubuntu stonking

๐Ÿ’– JABBER-QUERYBOT ๐Ÿ’–

okay bestie, grab a strawberry ๐Ÿ“ โ€” this is the Perl User Contributed documentation for jabber-querybot(1p) and it's literally the blueprint for building your own lil modular Perl Jabber bot. no cap, it's giving "small bot, one job, done beautifully". โœจ


๐ŸŒธ NAME ๐ŸŒธ

jabber-querybot โ€” a modular perl jabber bot ๐Ÿ‘‘

๐ŸŽ€ DESCRIPTION ๐ŸŽ€

So here's the vibe: jabber-querybot connects a jabber account and justโ€ฆ waits for messages. ๐Ÿ‘€ When a message comes in, it forwards it to your very own self-programmed modul. Then whatever string your module returns? jabber-querybot sends it right back to the jabber sender. Iconic behavior, honestly.

It's 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. fr fr. ๐Ÿ’…

  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

โœจ OPTIONS โœจ

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. ๐Ÿงš

๐Ÿ‘‘ EXAMPLES ๐Ÿ‘‘

/usr/share/doc/jabber-querybot/examples/Testbot.pm

๐ŸŽ€ FILES ๐ŸŽ€

/etc/jabber-querybot/Querymodule.pm

/usr/bin/jabber-querybot

โญ RESOURCES โญ

http://github.com/micressor/jabber-querybot/

๐Ÿ’… METHODS ๐Ÿ’…

๐ŸŒธ 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 with 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 messages and reject if it is. Two times that's ok so 2:1 because while in main.

Bot admin got every time an answer.

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 (C) 2009-2012 Marco Balmer <marco@balmer.name>

The Debian packaging is licensed under the GPL, see /usr/share/common-licenses/GPL-3'.


and that's the whole page bestie, you ate that ๐Ÿซถ this was perl v5.40.1, dated 2026-05-08 โ€” go build ur lil bot, mwah ๐Ÿ’‹โœจ

๐Ÿ“ฆ where this page comes from