commit - /dev/null
commit + 151b01d1efd1a3ceacd8624d3e898f564c7c11af
blob - /dev/null
blob + 74f2048db939f0e17d33b3c1879963206ae8abb1 (mode 644)
--- /dev/null
+++ lib/Bot/BasicBot/Pluggable/Module/BotnowDB.pm
+package Bot::BasicBot::Pluggable::Module::BotnowDB;
+
+use warnings;
+use strict;
+use base qw(Bot::BasicBot::Pluggable::Module);
+
+# Database modules for botnow.db
+use DBI;
+use DBD::SQLite;
+
+# setup log level constents
+use constant {
+ NONE => 0,
+ ERRORS => 1,
+ WARNINGS => 2,
+ ALL => 3,
+};
+
+our $VERSION = '0.01';
+
+
+sub connectDB {
+ my $self=shift;
+ my $dbpath = $self->{database} || '/var/www/botnow/botnow.db';
+ my $dsn = "dbi:SQLite:dbname=$dbpath";
+ my $user = "";
+ my $password = "";
+ my $dbh = DBI->connect($dsn, $user, $password, {
+ PrintError => 1,
+ RaiseError => 1,
+ AutoCommit => 1,
+ FetchHashKeyName => 'NAME_lc',
+ }) or die "Couldn't connect to database: " . $DBI::errstr;
+ if (!(-s "$dbpath")) {
+ main::debug(ALL, "Cant locate $dbpath");
+ exit 1;
+ }
+ main::debug(ALL, "connected to $dbpath");
+
+ if (!defined($dbh)) {
+ die "failed to connect to $dbpath";
+ }
+ return $dbh;
+}
+
+sub disconnectDB {
+ my $self=shift;
+ my $dbh = shift;
+ $dbh->disconnect();
+}
+
+sub listUsers {
+ my $self=shift;
+ my $dbh=$self->connectDB();
+ my $stmt=qq{SELECT DISTINCT username from bnc};
+ my $reply = join (', ', @{$dbh->selectcol_arrayref($stmt)});
+ $self->disconnectDB($dbh);
+ return $reply;
+}
+
+sub getUser {
+ my $self = shift;
+ my $user = shift;
+
+ my $dbh = $self->connectDB();
+ my $stmt = qq{select username,email from bnc where username is ?};
+ my @userDetails = $dbh->selectrow_array($stmt, undef, $user);
+ my $reply = $userDetails[0] . ": " . $userDetails[1];
+ my $seen = $self->bot->module('seen')->get("seen_$user");
+ if (defined $seen) {
+ $reply .= "\nLast Seen: " . $seen->{time} . " in " . $seen->{channel} . "\n";
+ $reply .= $seen->{what} . ".";
+ }
+ $self->disconnectDB($dbh);
+ return $reply;
+}
+
+
+# my $stmt=qq{select * from bnc join irc on (bnc.ircid = irc.id) where username is ?};
+# my $sth=$dbh->prepare($stmt);
+# $sth->execute($username) or die "execution failed: $dbh->errstr()";
+# while (my $row=$sth->fetchrow_hashref) {
+
+
+
+sub help {
+ return "botnowdb: Database interface for botnow.db";
+}
+
+sub told {
+ my ($self,$message) = @_;
+ # Only act if bot was addressed
+ if($message->{address}) {
+ my $body = $message->{body};
+ my $channel = $message->{channel};
+ if ($channel eq 'msg') { # was a private message so respond in private message
+ $channel = $message->{who};
+ }
+ if($body =~ /^botnow/i) { # Only reply if line begins with botnow
+ my @cmds = split(' ',$body);
+ shift @cmds; #pop botnow off command list
+ my %actions = (
+ users => sub { return $self->listUsers(@_) },
+ user => sub { return $self->getUser( @_ ) },
+
+ );
+ if (!defined($actions{$cmds[0]})) {
+ return $self->help();
+ }
+ my $reply = $actions{$cmds[0]}->(@cmds[1,-1]) ;
+ return $reply;
+ }
+ }
+ return 0;
+}
+
+1;