Take the wire to the other side of This Metal Sky...

bast : files

bot.pl simple script to kick off everything - does nothing more than call Bot::new then Bot::run
Bot.pm Main program object, creates IRC connection objects, creates queues, creates threads, initializes all data, runs the main Net::IRC select() loop
IRC.pm IRC routines, main input loop, which passes most data off to a worker thread for processing. Also contains the IRC output queue and processing thread, this does *all* IRC operations
Worker.pm The little bots inside the bot, these do the actual processing of data passed in from the IRC connection objects (via queue), does whatever needs to be done, and returns data to the IRC output queue. Loads/unloads handler objects, maintains it's own data space.
InfoBot.pm Infobot object, manages only information queries and storing, bar menu data and routines, learn, forget, and 'who said that'
Handlers.pm Main parent object for the Handler plugins. This module contains all non-specific handler functions, authentication, regex matching, logging, etc.
Handlers/*.pm Individual handler object modules, which inherit from Handler.pm. Specific operations/data/etc for each command, like 'ascii' or 'boggle'. Handlers contain their own options such as regular expressoin to match the channel, help and description info, and various flags such as wether to act on different types of IRC messages, if the database is required for this handler, and the priority in which this handler is called, in relation all the others. There are three semi-special:
  • BotControl: handles various control ops, channel operations, ignore list maintenace, making the bot say or do something
  • default: called when no other handler matched a privmsg or public IRC message, as a catch-all
  • actions: called when no other handler matched an action, same as 'default'