NAME

Bot::BasicBot::Pluggable::Module::SimpleBlog - A simple URL collector for Bot::BasicBot::Pluggable.

SYNOPSIS

use Bot::BasicBot::Pluggable;
use Bot::BasicBot::Pluggable::Module::SimpleBlog::Store::SQLite;

my $bot = Bot::BasicBot::Pluggable->new( ... );
$bot->load( "SimpleBlog" );

my $blog_handler = $bot->handler( "SimpleBlog" );

$blog_handler->set_store(
  Bot::BasicBot::Pluggable::Module::SimpleBlog::Store::SQLite
     ->new( "/home/bot/brane.db" )
);

$blog_handler->set_blogurl( "http://example.com/simpleblog.cgi" );

$bot->run;

DESCRIPTION

A plugin module for Bot::BasicBot::Pluggable to grab, store and output URLs from IRC channels. It is intentionally simplistic - see Bot::BasicBot::Pluggable::Module::Blog for a more complicated chump-like thing.

METHODS

set_store
my $blog_store =
  Bot::BasicBot::Pluggable::Module::SimpleBlog::Store::SQLite->new(
    "/home/bot/brane.db" );
$blog_handler->set_store( $blog_store );

Supply a Bot::BasicBot::Pluggable::Module::SimpleBlog::Store::* object.

set_blogurl
$blog_handler->set_blogurl( "http://example.com/simpleblog.cgi" );

Supply the URL for your CGI script to view the stored URLs.

EXAMPLES

use strict;
use warnings;
use Bot::BasicBot::Pluggable;

my $bot = Bot::BasicBot::Pluggable->new( channels => [ "#test" ],
                                         server   => "irc.example.com",
                                         port     => "6667",
                                         nick     => "bot",
                                         username => "bot",
                                         name     => "bot",
                                       );
$bot->load( "SimpleBlog" );

my $blog_handler = $bot->handler( "SimpleBlog" );

$blog_handler->set_store(
  Bot::BasicBot::Pluggable::Module::SimpleBlog::Store::SQLite
     ->new( "/home/bot/brane.db" )
);

$blog_handler->set_blogurl( "http://example.com/simpleblog.cgi" );

$bot->run;

Yes, this is your entire program.

The file supplied as an argument to the constructor of Bot::BasicBot::Pluggable::Module::SimpleBlog::Store::SQLite need not already exist; it will be created and the correct database schema set up as necessary.

Talk to the bot on IRC for help:

17:37 <nou> kakebot: help SimpleBlog
<kakebot> nou: Simple URL collector for Bot::BasicBot::Pluggable.
    Requires direct addressing.  Usage:
    'http://foo.com/ # the foo website'.  The URLs can be viewed at
    http://example.com/simpleblog.cgi

Get stuff out of the database in your favoured fashion, for example:

use strict;
use warnings;
use CGI;
use DBI;

my $sqlite_db = "/home/bot/brane.db";
my $q = CGI->new;
my $dbh = DBI->connect("dbi:SQLite:dbname=$sqlite_db", "", "")
  or die DBI->errstr;

print $q->header;
print <<EOF;

<html>
<head><title>simpleblogbot</title></head>
<body><h1 align="center">simpleblogbot</h1>

EOF

my $sql = "SELECT timestamp, name, chan, url, comment FROM blogged
           ORDER BY timestamp DESC";
my $sth = $dbh->prepare($sql) or die $dbh->errstr;
$sth->execute;
my ($timestamp, $name, $chan, $url, $comment);

while ( ($timestamp, $name, $chan, $url, $comment)
                                        = $sth->fetchrow_array ) {
    print "<br><i>$timestamp</i>: <b>$name/$chan</b>: ";
    print "<a href=\"$url\">$url</a> " if $url;
    print $q->escapeHTML($comment) if $comment;
}

print "</body></html>\n";

(This will just print everything ever; being more discriminating and adding prettiness is left as an exercise for people who don't hate writing CGI scripts.)

At some point there will be Bot::BasicBot::Pluggable::Module::Store::* methods for retrieving as well as storing the data. Probably.

WARNING

Unstable API - Bot::BasicBot::Pluggable is liable to change and hence so is this.

BUGS

There are no tests!

SEE ALSO

AUTHOR

Kake Pugh (kake@earth.li).

COPYRIGHT

Copyright (C) 2003 Kake Pugh.  All Rights Reserved.

This module is free software; you can redistribute it and/or modify it under the same terms as Perl itself.

CREDITS

Tom Insam, author of Bot::BasicBot::Pluggable, answered my dumb questions on how to get it working. Mark Fowler fixed my bad SQL, and told me off until I agreed to abstract out the storage and retrieval bits.

1 POD Error

The following errors were encountered while parsing the POD:

Around line 125:

You forgot a '=back' before '=head1'