--- trunk/irc-logger.pl 2006/02/27 12:10:07 5
+++ trunk/irc-logger.pl 2007/02/02 22:27:36 43
@@ -10,6 +10,14 @@
./irc-logger.pl
+=head2 Options
+
+=over 4
+
+=item --import-dircproxy=filename
+
+Import log from C to C database
+
=head1 DESCRIPTION
log all conversation on irc channel
@@ -18,13 +26,17 @@
## CONFIG
+my $HOSTNAME = `hostname`;
+
my $NICK = 'irc-logger';
+$NICK .= '-dev' if ($HOSTNAME =~ m/llin/);
my $CONNECT =
{Server => 'irc.freenode.net',
Nick => $NICK,
- Ircname => 'logger: ask dpavlin@rot13.org'
+ Ircname => "try /msg $NICK help",
};
my $CHANNEL = '#razmjenavjestina';
+$CHANNEL = '#irc-logger' if ($HOSTNAME =~ m/llin/);
my $IRC_ALIAS = "log";
my %FOLLOWS =
@@ -33,25 +45,50 @@
ERROR => "/var/log/apache/error.log",
);
-my $DSN = 'DBI:Pg:dbname=irc-logger';
+my $DSN = 'DBI:Pg:dbname=' . $NICK;
+
+my $ENCODING = 'ISO-8859-2';
+my $TIMESTAMP = '%Y-%m-%d %H:%M:%S';
+
+my $sleep_on_error = 5;
## END CONFIG
-use POE qw(Component::IRC Wheel::FollowTail);
+use POE qw(Component::IRC Wheel::FollowTail Component::Server::HTTP);
+use HTTP::Status;
use DBI;
-
+use Encode qw/from_to is_utf8/;
+use Regexp::Common qw /URI/;
+use CGI::Simple;
+use HTML::TagCloud;
+use POSIX qw/strftime/;
+use HTML::CalendarMonthSimple;
+use Getopt::Long;
+use DateTime;
+use Data::Dump qw/dump/;
+
+my $import_dircproxy;
+GetOptions(
+ 'import-dircproxy:s' => \$import_dircproxy,
+);
my $dbh = DBI->connect($DSN,"","", { RaiseError => 1, AutoCommit => 1 }) || die $DBI::errstr;
-=for SQL schema
+eval {
+ $dbh->do(qq{ select count(*) from log });
+};
+
+if ($@) {
+ warn "creating database table in $DSN\n";
+ $dbh->do(<<'_SQL_SCHEMA_');
-$dbh->do(qq{
create table log (
id serial,
time timestamp default now(),
channel text not null,
+ me boolean default false,
nick text not null,
message text not null,
primary key(id)
@@ -61,60 +98,534 @@
create index log_channel on log(channel);
create index log_nick on log(nick);
-});
-
-=cut
+_SQL_SCHEMA_
+}
my $sth = $dbh->prepare(qq{
insert into log
- (channel, nick, message)
-values (?,?,?)
+ (channel, me, nick, message, time)
+values (?,?,?,?,?)
});
+my $tags;
+my $tag_regex = '\b([\w-_]+)//';
+
+=head2 get_from_log
+
+ my @messages = get_from_log(
+ limit => 42,
+ search => '%what to stuff in ilike%',
+ fmt => {
+ time => '{%s} ',
+ time_channel => '{%s %s} ',
+ nick => '%s: ',
+ me_nick => '***%s ',
+ message => '%s',
+ },
+ filter => {
+ message => sub {
+ # modify message content
+ return shift;
+ }
+ },
+ context => 5,
+ full_rows => 1,
+ );
+
+Order is important. Fields are first passed through C (if available) and
+then throgh C<< sprintf($fmt->{message}, $message >> if available.
+
+C defines number of messages around each search hit for display.
+
+C will return database rows for each result with C, C
+
+ See history of all messages.
+ };
+
+ $response->content( $html );
+ return RC_OK;
+}
+
POE::Kernel->run;