#!/usr/bin/perl # http://webreference.com/perl/tutorial/13/2.html # http://forums.devshed.com/showthread.php?p=243143&mode=threaded use warnings; use Net::AIM; use Switch; my $aim = new Net::AIM; my %users = ( your_username_here => 1, your_friend_here => 1, ); #$aim->debug(1); print "opening connection\n"; $aim->newconn( Screenname => 'USERNAME', Password => 'PASSWORD') or die "Couldn't connect.\n"; my $conn = $aim->getconn(); $conn->set_handler('config', \&on_config); $conn->set_handler('im_in', \&on_im); $conn->set_handler('error', \&on_error); $conn->set_handler('nick', \&on_nick); print "starting main loop\n"; $aim->start; sub on_config { my ($self, $event) = @_; my ($str) = $event->args; print "configurating.\n"; $self->set_config($str); } sub on_error { my ($self, $event) = @_; my $error; my @stuff; ($error, @stuff) = $event->args; my $errstr = $event->trans($error); $errstr =~ s/\$(\d+)/$stuff[$1]/ge; print STDERR "ERROR: $errstr\n"; } sub on_im { my ($self, $event, $from, $to) = @_; my $args = $event->args; my ($nick, $auto_msg, $msg) = @$args; chomp($msg); my $stripped = $msg; $stripped =~ s/<[^>]+>//g; $stripped =~ s/^\s+//g; print "$from: $stripped", "\n"; $nick =~ s/ +//g; $nick =~ tr/[A-Z]/[a-z]/; if($users{$nick}) { my @data = split(/ +/, $stripped); my $op = shift(@data); switch($op) { case 'mail' { # TODO: escape the text... my $recip = shift(@data); system("/bin/echo " . join(' ', @data) . " \|" . "/usr/lib/sendmail $recip\n"); $self->send_im($nick, "Sent to " . $recip); } case 'help' { $self->send_im($nick, "Commands:
" . "help:" . " This text
" . "mail addr msg:" . " Sends message
" . "access [name]:" . " Shows access table," . "or grants access to name.
"); } case 'access' { my $name = shift(@data); if(defined $name) { $name =~ s/ +//g; $name =~ tr/[A-Z]/[a-z]/; if($users{$name}) { $self->send_im($nick, "Access already " . "allowed by " . $name); } else { %users = ( %users, $name => 1, ); $self->send_im($nick, "Access granted " . "until program " . "exit for " . $name); } } else { $self->send_im($nick, "Access is allowed by:
" . join('
', keys %users)); } } else { $self->send_im($nick, "Huh? Try: help"); } } } } sub on_nick { my ($self, $evt, $from, $to) = @_; my $args = $evt->args(); my $nick = $args->[0]; print "*$nick* \n"; }