Padgett is an IRC robot written in Groovy, exposing a simple plugin system. Every bit of functionality in Padgett is written as a plugin, and plugins can be deployed or reloaded without restarting the bot.
Padgett - the name
(Middle English) little page; (Middle English) server, helper [ 2 syll. pad-get(t), pa-dge-tt ] Padgett is a form of the English Paget. Padgett is a form of the English Paige, which is itself from the ordinary English word page ('servant, helper'). This word is in turn derived via Old French and Italian from the Greek 'paidion'. In medieval times, pages were male servants to lords, but the modern use of the name is almost exclusively for girls, for reasons that are unclear.
Also, whatever. "Padgett" sounds like "Gadget", so why not.
Done, to document
- plugins are loaded in subfolders,
- name pattern for plugins: *.botplugin - so (hopefully) classes and other utils can stay there - TODO: verify.
- different callbacks is action taken by self
- verify or enforce plugin order (alphabetical?)
- verify plugins can utilize other classes ** Can plugins use Grapes ?
- daemonize: see http://yajsw.sourceforge.net ?
instructions, setup, install
let plugins react on the bot's own messages (i.e sent by other plugins)... this might get verbose but... well...let's try ?
- use a different callback so plugins can react differently->done, see isMe() and its usage
- verify we can't send the bot in a crazy loop (see Echo plugin)
configuration: Should there be one "config" object ? Should each plugin look at the same set of arbitrary properties ? Should each plugin simply have its own configuration ? (should it be embedded in the plugin code, make it non distributable?) Should each plugin register its config items in the shared config object ?
Should plugins "talk" to each other ? (for example they could share one Jira::proxy instance)
plugin name ?
plugin dependencies ? (could be useful, or even needed, for proper reload/restart)
save plugin states ?
ability to schedule jobs (i.e plugins shouldn't block the plugin loop when looking up a url or jira issue for ex)
add help/description in plugins ?
add an help plugin, lists available plugin and their "help" string ?
- Abstracting IRC away if we wanted to support other protocols
- Have a better or more efficient api than pircbot ?
Plugins to write
- meetbot (with +voice)
- jira info
- "shut up" (bot will be silent until his name is said) -- is this still relevant ? every other plugin would need to "check" if they can talk ?? -- perhaps make it a meta plugin that is able to enable/disable other plugins ?
- wait for user (bot will notice you when user join and/or send a message to the user)
DSL to allow messages like
@padgett create room with @greg @fred and @bob @padgett create private room for "foo bar" with ... @padgett create temp room with ... @padgett ...with log? or just auto-log all chans
auto-invite - monitor for people login in/out and invite them to channels where they were previously invited
log, auto-op etc.. includes/excludes ? By default include all, exclude configured chans ?
Build & Run
java -jar build/libs/padgett-ircbot.jar
See the wiki for help on installing clients, building and running from sources, etc.