#!/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";
}