[development] Druplicon is dead! Long live Druplicon!

Morbus Iff morbus at disobey.com
Thu Jun 28 01:31:04 UTC 2007

I started running Druplicon as a Perl bot in 2005.

In late 2006, I started a proof of concept called bot.module.

Today, bot_module has officially slayed the Perl beast Druplicon and 
taken its rightful name: Druplicon, the bot, is now a Drupal module.


Along with this are some evolutionary features. Here are the help docs:

   <Morbus> Druplicon: help Factoids
   <Druplicon> Set factoids with "BOTNAME: cats are furry",
     "BOTNAME: Drupal is great.", "No, BOTNAME, Morbus is awesome.",
     "BOTNAME: Drupal is also powerful.", "BOTNAME: cheer is
     <action>cheers!", or "BOTNAME: ping is <reply>WHAT?!". Retrieve
     factoids with: "Drupal?" or "BOTNAME: cheer!" Forget factoids with
     "BOTNAME: forget ping". Factoids can be browsed online at

   <Morbus> Druplicon: help Function Lookups
   <Druplicon> If api.module is installed, the bot can provide function
     lookups, triggered by "<function>?", based on the host's installed
     branches (which must have "short names" that match api.drupal.org).
     Branches besides the default (currently "5") can be specified with

Besides the factoids being browseable on:


(which makes it very easy to find crappy factoids to "forget", hint, 
hint), there is now direct integration with api.module, as originally 
provided via code from Bdragon. By default, function requests work 
against the latest release:

   <Morbus> l?
   <Druplicon> l: Format an internal Drupal link. => l($text, $path,
     $attributes = array(), $query = NULL, $fragment = NULL, $absolute =
     FALSE, $html = FALSE) => http://api.drupal.org/api/5/function/l

You'll note that there's now a summary (provided by Doxygen), and that 
there's no longer a restriction on length (so no more "api-l?"). You'll 
also note the URL is keyed toward DRUPAL-5.

But, consider:

   <Morbus> l:HEAD?
   <Druplicon> l: Format an internal Drupal link. => l($text, $path,
     $options = array()) => http://api.drupal.org/api/HEAD/function/l

By specifying "<function>:<branch>", you can get the results of a 
particular branch. I am currently providing DRUPAL-5 and HEAD, updated 
daily. DRUPAL-5 is the default (so "l:5?" is the same as "l?"). I will 
contain to provide (starting with DRUPAL-5), the last two releases and 
the current HEAD. The default will always be the latest release. I am 
also pulling from contrib/docs/developer too.

Because factoids/infobot and the API lookups are now two different 
modules, we can annotate particular functions with useful information 
(assuming we use the default/no-branch version). Consider:

   <Morbus> t?
   <Druplicon> t: Translate strings to the current locale. => t($string,
     $args = 0) => http://api.drupal.org/api/5/function/t
   <Druplicon> Please be very careful about using !... if you
     don't want italics, use @ instead!

   <Morbus> url?
   <Druplicon> url: Generate a URL from a Drupal menu path. Will also
     pass-through existing URLs. => url($path = NULL, $query = NULL,
     $fragment = NULL, $absolute = FALSE) =>
   <Druplicon> It will do path aliasing automatically;
     always use the "real" Drupal URL, not the path alias!

Finally, the bot is happy to complain about errors in our Doxygen:

   <Morbus> drupal_render?
   <Druplicon> drupal_render: [Doxygen summary is not one line. This
     is a bug. File core patch.] => drupal_render(&$elements) =>

Please don't hesitate to file bugs at
or bug me about it in IRC. Thanks!

Morbus Iff ( sleep breeds sanity )
Technical: http://www.oreillynet.com/pub/au/779
Culture: http://www.disobey.com/ and http://www.gamegrene.com/
aim: akaMorbus / skype: morbusiff / icq: 2927491 / jabber.org: morbus

More information about the development mailing list