--- trunk/bin/irc-logger.pl 2008/03/09 20:13:46 108 +++ trunk/bin/irc-logger.pl 2008/03/09 21:13:15 109 @@ -47,26 +47,37 @@ ## CONFIG +my $irc_config = { + nick => 'irc-logger', + server => 'irc.freenode.net', + port => 6667, + ircname => 'Anna the bot: try /msg irc-logger help', +}; + my $HOSTNAME = `hostname -f`; chomp($HOSTNAME); -my $NICK = 'irc-logger'; -$NICK .= '-dev' if ($HOSTNAME =~ m/llin/); -my $CONNECT = { - Server => 'irc.freenode.net', - Nick => $NICK, - Ircname => "try /msg $NICK help", -}; + my $CHANNEL = '#razmjenavjestina'; -$CHANNEL = '#irc-logger' if ($HOSTNAME =~ m/llin/); -my $IRC_ALIAS = "log"; -if ( $HOSTNAME =~ m/lugarin/ ) { - $CONNECT->{Server} = 'irc.carnet.hr'; +if ( $HOSTNAME =~ m/llin/ ) { + $irc_config->{nick} = 'irc-logger-dev'; +# $irc_config = { +# nick => 'irc-logger-dev', +# server => 'localhost', +# port => 6668, +# }; + $CHANNEL = '#irc-logger'; +} elsif ( $HOSTNAME =~ m/lugarin/ ) { + $irc_config->{server} = 'irc.carnet.hr'; $CHANNEL = '#riss'; } -warn dump( $HOSTNAME, $CONNECT ); +my @channels = ( $CHANNEL ); + +warn "# config = ", dump( $irc_config ), $/; + +my $NICK = $irc_config->{nick} or die "no nick?"; my $DSN = 'DBI:Pg:dbname=' . $NICK; @@ -689,7 +700,7 @@ my ( $type, $to ) = ( 'notice', $args->{channel} ); ( $type, $to ) = ( 'privmsg', $args->{nick} ) if $args->{private}; _log(">> $type $to |", $msg); - $args->{kernel}->post( $IRC_ALIAS => $type => $to, $msg ); + $args->{kernel}->post( irc => $type => $to, $msg ); $updates++; } } @@ -743,18 +754,27 @@ # POE handing part # -my $ping; # ping stats +my $poe_irc = POE::Component::IRC->spawn( %$irc_config ) or + die "can't start ", dump( $irc_config ), ": $!"; -POE::Component::IRC->new($IRC_ALIAS); +my $irc = $poe_irc->session_id(); +_log "session_id $irc"; POE::Session->create( inline_states => { _start => sub { - $_[KERNEL]->post($IRC_ALIAS => register => 'all'); - $_[KERNEL]->post($IRC_ALIAS => connect => $CONNECT); + $_[KERNEL]->post( $irc => register => 'all' ); + $_[KERNEL]->post( $irc => connect => {} ); }, + irc_001 => sub { + my ($kernel,$sender) = @_[KERNEL,SENDER]; + my $poco_object = $sender->get_heap(); + _log "connected to",$poco_object->server_name(); + $kernel->post( $sender => join => $_ ) for @channels; + undef; + }, irc_255 => sub { # server is done blabbing - $_[KERNEL]->post($IRC_ALIAS => join => $CHANNEL); - $_[KERNEL]->post( $IRC_ALIAS => privmsg => 'nickserv', "IDENTIFY $NICK" ); + $_[KERNEL]->post( $irc => join => $CHANNEL); + $_[KERNEL]->post( $irc => privmsg => 'nickserv', "IDENTIFY $NICK" ); }, irc_public => sub { my $kernel = $_[KERNEL]; @@ -786,7 +806,7 @@ }, irc_ping => sub { _log( "pong ", $_[ARG0] ); - $ping->{ $_[ARG0] }++; + $_stat->{ping}->{ $_[ARG0] }++; rss_check_updates( $_[KERNEL] ); }, irc_invite => sub { @@ -796,8 +816,8 @@ _log "invited to $channel by $nick"; - $_[KERNEL]->post( $IRC_ALIAS => privmsg => $nick, "how nice of you to invite me to $channel, I'll be right there..." ); - $_[KERNEL]->post($IRC_ALIAS => join => $channel); + $_[KERNEL]->post( $irc => privmsg => $nick, "how nice of you to invite me to $channel, I'll be right there..." ); + $_[KERNEL]->post( $irc => 'join' => $channel ); }, irc_msg => sub { @@ -818,7 +838,7 @@ } elsif ($msg =~ m/^msg\s+(\S+)\s+(.*)$/i) { _log ">> /msg $1 $2"; - $_[KERNEL]->post( $IRC_ALIAS => privmsg => $1, $2 ); + $_[KERNEL]->post( $irc => privmsg => $1, $2 ); $res = ''; } elsif ($msg =~ m/^stat.*?\s*(\d*)/i) { @@ -848,7 +868,7 @@ foreach my $res (get_from_log( limit => $limit )) { _log "last: $res"; - $_[KERNEL]->post( $IRC_ALIAS => privmsg => $nick, $res ); + $_[KERNEL]->post( $irc => privmsg => $nick, $res ); } $res = ''; @@ -862,7 +882,7 @@ search => $what, )) { _log "search [$what]: $res"; - $_[KERNEL]->post( $IRC_ALIAS => privmsg => $nick, $res ); + $_[KERNEL]->post( $irc => privmsg => $nick, $res ); } $res = ''; @@ -897,10 +917,10 @@ " : " . ( $stat->{vote}->{'-'} || 0 ) . " --" . " from " . ( join(", ", @nicks) || 'nobody' ); - $_[KERNEL]->post( $IRC_ALIAS => notice => $nick, $res ); + $_[KERNEL]->post( $irc => notice => $nick, $res ); } elsif ($msg =~ m/^ping/) { - $res = "ping = " . dump( $ping ); + $res = "ping = " . dump( $_stat->{ping} ); } elsif ($msg =~ m/^conf(?:ig)*\s*(last-size|twitter)*\s*(.*)/) { if ( ! defined( $1 ) ) { my $sth = $dbh->prepare(qq{ select name,value,changed from meta where nick = ? and channel = ? }); @@ -941,7 +961,7 @@ my $sth = $dbh->prepare(qq{ select url,name,last_update,active,channel,nick,private from feeds }); $sth->execute; while (my @row = $sth->fetchrow_array) { - $_[KERNEL]->post( $IRC_ALIAS => privmsg => $nick, join(' | ',@row) ); + $_[KERNEL]->post( $irc => privmsg => $nick, join(' | ',@row) ); } $res = ''; } elsif ($msg =~ m!^rss-(add|remove|stop|start)(?:-(private))?\s+(http://\S+)\s*(.*)!) { @@ -979,7 +999,7 @@ if ($res) { _log ">> [$nick] $res"; - $_[KERNEL]->post( $IRC_ALIAS => privmsg => $nick, $res ); + $_[KERNEL]->post( $irc => privmsg => $nick, $res ); } rss_check_updates( $_[KERNEL] ); @@ -995,39 +1015,44 @@ }, irc_477 => sub { _log "<< irc_477: ",$_[ARG1]; - $_[KERNEL]->post( $IRC_ALIAS => privmsg => 'nickserv', "register $NICK" ); + $_[KERNEL]->post( $irc => privmsg => 'nickserv', "register $NICK" ); }, irc_505 => sub { _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" ); + $_[KERNEL]->post( $irc => privmsg => 'nickserv', "register $NICK" ); +# $_[KERNEL]->post( $irc => privmsg => 'nickserv', "set hide email on" ); +# $_[KERNEL]->post( $irc => privmsg => 'nickserv', "set email dpavlin\@rot13.org" ); }, irc_registered => sub { - _log "## registrated $NICK, /msg nickserv IDENTIFY $NICK"; - $_[KERNEL]->post( $IRC_ALIAS => privmsg => 'nickserv', "IDENTIFY $NICK" ); + _log "<< registered $NICK"; }, irc_disconnected => sub { _log "## disconnected.. sleeping for $sleep_on_error seconds and reconnecting again"; sleep($sleep_on_error); - $_[KERNEL]->post( $IRC_ALIAS => connect => $CONNECT); + $_[KERNEL]->post( $irc => connect => {} ); }, irc_socketerr => sub { _log "## socket error... sleeping for $sleep_on_error seconds and retry"; sleep($sleep_on_error); - $_[KERNEL]->post( $IRC_ALIAS => connect => $CONNECT); + $_[KERNEL]->post( $irc => connect => {} ); }, # irc_433 => sub { # print "# irc_433: ",$_[ARG1], "\n"; # warn "## indetify $NICK\n"; -# $_[KERNEL]->post( $IRC_ALIAS => privmsg => 'nickserv', "IDENTIFY $NICK" ); +# $_[KERNEL]->post( $irc => privmsg => 'nickserv', "IDENTIFY $NICK" ); # }, # irc_451 # please register + irc_notice => sub { + _log "<< notice",$_[ARG0]; + if ( $_[ARG0] =~ m!/msg\s+NickServ\s+IDENTIFY!i ) { + $_[KERNEL]->post( $irc => privmsg => 'nickserv', "IDENTIFY $NICK" ); + } + }, irc_snotice => sub { _log "<< snotice",$_[ARG0]; if ( $_[ARG0] =~ m!/(QUOTE)\s+(PASS\s+\d+)!i ) { warn ">> $1 | $2\n"; - $_[KERNEL]->post( $IRC_ALIAS => lc($1) => $2); + $_[KERNEL]->post( $irc => lc($1) => $2); } }, _child => sub {},