#!/usr/bin/perl use strict; use DBI; # IRC Server stuff use POE; use POE::Component::IRC; my $current_nick = "francoise"; my $channel = '#test'; POE::Component::IRC->new("irc_client"); POE::Session->new ( _start => \&irc_start, irc_join => \&irc_join, irc_part => \&irc_part, irc_nick => \&irc_nick, irc_quit => \&irc_quit, irc_376 => \&irc_connect, #end of motd irc_372 => \&irc_motd, irc_353 => \&irc_names, irc_public => \&irc_pub_msg, irc_msg => \&irc_priv_msg, ); # Database connection stuff my $dbh = DBI->connect("DBI:Pg:dbname='francoise'", 'francoise', 'kiffer') or die "ohoh, datenbank b0rken: $!"; sub irc_start { # KERNEL, HEAP, and SESSION are constants exported by POE my $kernel = $_[KERNEL]; my $heap = $_[HEAP]; my $session = $_[SESSION]; $kernel->refcount_increment( $session->ID(), "my bot"); $kernel->post(irc_client=> register=> "all"); $kernel->post(irc_client=>connect=> { Nick => $current_nick, Username => 'francoise', Ircname => 'francoise', Server => 'irc.kiffer.de', Port => '6667', } ); } sub irc_connect { my $kernel = $_[KERNEL]; $kernel->post(irc_client=>join=>$channel); } sub irc_motd { my $msg = $_[ARG1]; print "MOTD: $msg\n"; } sub irc_names { my $names = (split /:/, $_[ARG1])[1]; my $channel = (split /:/, $_[ARG1])[0]; $channel =~ s/[@|=] (.*?) /$1/; print "#-> Users on $channel [ $names ]\n"; } #nick change sub irc_nick { my $oldnick = (split /!/, $_[ARG0])[0]; my $newnick = $_[ARG1]; print "#-> $oldnick is now known as $newnick\n"; } #user parted sub irc_part { my $nick = (split /!/, $_[ARG0])[0]; my $channel = $_[ARG1]; print "#-> $nick has parted $channel\n"; } #user joined sub irc_join { my $kernel = $_[KERNEL]; my $nick = (split /!/, $_[ARG0])[0]; my $channel = $_[ARG1]; if( $nick eq $current_nick ) { print "I JOIN JOIN JOIN\n"; $kernel->post( 'irc_client', 'privmsg', $channel, 'Hier bin ich!'); } print "#-> $nick has joined $channel\n"; } #user quit sub irc_quit { my $nick = $_[ARG0]; my $reason = $_[ARG1]; print "#-> $nick has quit ($reason)\n"; } sub irc_pub_msg{ my $kernel = $_[KERNEL]; my $nick = (split /!/, $_[ARG0])[0]; my $channel = $_[ARG1]->[0]; my $msg = $_[ARG2]; print "$channel: <$nick> $msg\n"; } sub irc_priv_msg{ my $kernel = $_[KERNEL]; my $nick = (split /!/, $_[ARG0])[0]; my $msg = $_[ARG2]; $kernel->post( 'irc_client', 'privmsg', $nick, 'Ich dich auch!'); $dbh->do( "INSERT INTO strings VALUES ('$nick', '$msg')" ); print "PRIV: [$nick] $msg\n"; } #start everything $poe_kernel->run();