#!/usr/local/bin/perl $debug = 0; $connect_retries = 5; $nick = 'lnks'; $server = 'irc.boldt.us'; $port = 6667; $username = 'lnks'; $ircname = 'lnks.us bot'; #$nickserv = 'x@channels.undernet.org'; #$nickregister = "register lnks rczaV8aS"; $umode = "$nick -iw"; @channels = ('#channel1','#channel2'); #@channels = ('#munky_test1', '#munky_test2'); ################################################# # END CONFIG use POE::Component::IRC; use POE::Kernel; use POE::Session; #use DBI; use LWP::UserAgent; open(PID,">$nick.pid"); print PID $$; close(PID); $c = 0; sub _start { my($kernel, $session, $heap) = @_[KERNEL, SESSION, HEAP]; $kernel->post('lnks', 'register', qw(all)); $kernel->post('lnks', 'connect', { Nick => $nick, Server => $server, Port => $port, Username => $username, Ircname => $ircname } ); } sub irc_433 { my($kernel, $session, $heap) = @_[KERNEL, SESSION, HEAP]; $nick_addon .= "_"; $kernel->post('lnks', 'connect', { Nick => $nick . $nick_addon, Server => $server, Port => $port, Username => $username, Ircname => $ircname } ); } sub irc_disconnected { if($c < $connect_retries) { $kernel->post('lnks', 'connect', { Nick => $nick, Server => $server, Port => $port, Username => $username, Ircname => $ircname } ); $c += 1; return; } exit; } sub irc_socketerr { exit; } sub irc_001 { my($kernel, $session, $heap) = @_[KERNEL, SESSION, HEAP]; foreach(@channels) { $kernel->post('lnks', 'join', $_); } $kernel->post('lnks', 'privmsg', $nickserv, $nickregister) if($nickserv); $kernel->post('lnks', 'mode', $umode); } sub get_lnks { my ($url) = @_; my ($ua) = LWP::UserAgent->new; my(%form); $url =~ s/'/%27/g; $url =~ s/"/%22/g; $url =~ s/;/%3B/g; if( $url =~ /^(http:\/\/)?(www.)?lnks.us\/\??([A-Z0-9]*)/i ) { $hash = $3; print "get_lnks: hash=$hash\n" if($debug); $response = $ua->get("http://lnks.us/$hash"); $url =~ /(not found)/; $response->content =~ /going to post("http://lnks.us", \%form); $response->content =~ /Your link is: post('lnks', 'privmsg', $nick, $reply); } return; } sub irc_public { my($kernel, $session, $heap) = @_[KERNEL, SESSION, HEAP]; my($nickhost, $target, $msgtxt) = @_[ARG0, ARG1, ARG2]; $channel = $target->[0]; my($url) =~ /()/; $msgtxt =~ /(http:\/\/[^\s]+)/; print "irc_public: msgtxt=$msgtxt\n" if($debug); $url = $1; print "irc_public: url=$url\n" if($debug); if($url ne '' && length($url) > 50){ $reply = &get_lnks($url) || return "error getting lnks for $msgtxt"; $kernel->post('lnks', 'privmsg', $channel, $reply); } return; } sub _default { my ( $event, $args ) = @_[ ARG0, ARG1 ]; $args ||= []; # Prevents uninitialized-value warnings. print "default: $event (@$args)\n" if($debug); return 0; } POE::Component::IRC->new('lnks') or die "poop!! $!"; POE::Session->new('main' => [qw(_start irc_disconnected irc_001 irc_msg irc_public irc_socketerr irc_433 _default)] ); $poe_kernel->run(); exit 0;