--- trunk/irc-logger.pl 2007/02/02 22:27:36 43 +++ trunk/irc-logger.pl 2007/02/03 12:18:04 45 @@ -18,6 +18,12 @@ Import log from C to C database +=item --log=irc-logger.log + +Name of log file + +=back + =head1 DESCRIPTION log all conversation on irc channel @@ -70,10 +76,18 @@ use Data::Dump qw/dump/; my $import_dircproxy; +my $log_path; GetOptions( 'import-dircproxy:s' => \$import_dircproxy, + 'log:s' => \$log_path, ); +open(STDOUT, '>', $log_path) || warn "can't redirect log to $log_path: $!"; + +sub _log { + print strftime($TIMESTAMP,localtime()), ' ', join(" ",@_), $/; +} + my $dbh = DBI->connect($DSN,"","", { RaiseError => 1, AutoCommit => 1 }) || die $DBI::errstr; eval { @@ -186,13 +200,13 @@ $search =~ s/^\s+//; $search =~ s/\s+$//; $sth->execute( ( '%' . $search . '%' ) x 2 ); - warn "search for '$search' returned ", $sth->rows, " results ", $context || '', "\n"; + _log "search for '$search' returned ", $sth->rows, " results ", $context || ''; } elsif (my $tag = $args->{tag}) { $sth->execute(); - warn "tag '$tag' returned ", $sth->rows, " results ", $context || '', "\n"; + _log "tag '$tag' returned ", $sth->rows, " results ", $context || ''; } elsif (my $date = $args->{date}) { $sth->execute($date); - warn "found ", $sth->rows, " messages for date $date ", $context || '', "\n"; + _log "found ", $sth->rows, " messages for date $date ", $context || ''; } else { $sth->execute(); } @@ -379,11 +393,10 @@ $a->{me} ||= 0; $a->{time} ||= strftime($TIMESTAMP,localtime()); - print - $a->{time}, " ", + _log $a->{channel}, " ", $a->{me} ? "***" . $a->{nick} : "<" . $a->{nick} . ">", - " " . $a->{msg} . "\n"; + " " . $a->{msg}; from_to($a->{msg}, 'UTF-8', $ENCODING); @@ -418,7 +431,7 @@ ) if ($nick !~ m/^-/); } else { - warn "can't parse: $_\n"; + _log "can't parse: $_"; } } close($l); @@ -490,7 +503,7 @@ my $res = "unknown command '$msg', try /msg $NICK help!"; my @out; - print "<< $msg\n"; + _log "<< $msg"; if ($msg =~ m/^help/i) { @@ -498,7 +511,7 @@ } elsif ($msg =~ m/^msg\s+(\S+)\s+(.*)$/i) { - print ">> /msg $1 $2\n"; + _log ">> /msg $1 $2"; $_[KERNEL]->post( $IRC_ALIAS => privmsg => $1, $2 ); $res = ''; @@ -526,7 +539,7 @@ } elsif ($msg =~ m/^last.*?\s*(\d*)/i) { foreach my $res (get_from_log( limit => ($1 || 100) )) { - print "last: $res\n"; + _log "last: $res"; from_to($res, $ENCODING, 'UTF-8'); $_[KERNEL]->post( $IRC_ALIAS => privmsg => $nick, $res ); } @@ -541,7 +554,7 @@ limit => 20, search => $what, )) { - print "search [$what]: $res\n"; + _log "search [$what]: $res"; from_to($res, $ENCODING, 'UTF-8'); $_[KERNEL]->post( $IRC_ALIAS => privmsg => $nick, $res ); } @@ -585,32 +598,32 @@ } if ($res) { - print ">> [$nick] $res\n"; + _log ">> [$nick] $res"; from_to($res, $ENCODING, 'UTF-8'); $_[KERNEL]->post( $IRC_ALIAS => privmsg => $nick, $res ); } }, irc_477 => sub { - print "# irc_477: ",$_[ARG1], "\n"; + _log "# irc_477: ",$_[ARG1]; $_[KERNEL]->post( $IRC_ALIAS => privmsg => 'nickserv', "register $NICK" ); }, irc_505 => sub { - print "# irc_505: ",$_[ARG1], "\n"; + _log "# irc_505: ",$_[ARG1]; $_[KERNEL]->post( $IRC_ALIAS => privmsg => 'nickserv', "register $NICK" ); # $_[KERNEL]->post( $IRC_ALIAS => privmsg => 'nickserv', "set hide email on" ); # $_[KERNEL]->post( $IRC_ALIAS => privmsg => 'nickserv', "set email dpavlin\@rot13.org" ); }, irc_registered => sub { - warn "## indetify $NICK\n"; + _log "## registrated $NICK"; $_[KERNEL]->post( $IRC_ALIAS => privmsg => 'nickserv', "IDENTIFY $NICK" ); }, irc_disconnected => sub { - warn "## disconnected, reconnecting again\n"; + _log "## disconnected, reconnecting again"; $_[KERNEL]->post($IRC_ALIAS => connect => $CONNECT); }, irc_socketerr => sub { - warn "## socket error... sleeping for $sleep_on_error seconds and retry"; + _log "## socket error... sleeping for $sleep_on_error seconds and retry"; sleep($sleep_on_error); $_[KERNEL]->post($IRC_ALIAS => connect => $CONNECT); }, @@ -621,8 +634,8 @@ # }, _child => sub {}, _default => sub { - printf "%s #%s %s %s\n", - strftime($TIMESTAMP,localtime()), $_[SESSION]->ID, $_[ARG0], + _log sprintf "sID:%s %s %s", + $_[SESSION]->ID, $_[ARG0], ref($_[ARG1]) eq "ARRAY" ? join(",", map { ref($_) eq "ARRAY" ? join(";", @{$_}) : $_ } @{ $_[ARG1] }) : $_[ARG1] ? $_[ARG1] : "";