use Net::AIM; use LWP::Simple; use File::stat; print "Initializing...\n"; $debug = 1; # Tells whether debug messages are printed $screenname = ""; # The AIM screenname to login with $password = ""; # The password to the screenname if (-e "nmap_bot" ne 1) { mkdir "nmap_bot"; } if (-e "nmap_bot/logs" ne 1) { mkdir "nmap_bot/logs"; } if (-e "nmap_bot/logs/$screenname" ne 1) { mkdir "nmap_bot/logs/$screenname"; } if (-e "nmap_bot/logs/$screenname/temp" ne 1) { mkdir "nmap_bot/logs/$screenname/temp"; } if (-e "nmap_bot/logs/$screenname/saidtemp" ne 1) { mkdir "nmap_bot/logs/$screenname/saidtemp"; } $aim = new Net::AIM; $aim->newconn( Screenname => $screenname, Password => $password ) or die "NMAP Bot: Can't connect to AIM server.\n"; my $conn = $aim->getconn(); $conn->set_handler('config', \&on_config); $conn->set_handler('im_in', \&on_im); $conn->set_handler('eviled', \&on_evil); $aim->start; sub on_evil { my $reply; my ($self, $event) = @_; my ($victim, $friend, $msg) = @{$event->args()}; $victim = $event->from; $victim = lc($victim); $victim =~ s/\s//g; if ($temp ne "") { $victim = "$temp"; } if ($victim eq "") { } else { if ($victim ne "") { $aim->evil($victim, 0); sleep(4); $aim->evil($victim, 0); $aim->add_deny(1, "buddies", $victim); } if (-e "logs/$screenname/shitlist.html") { open (DATA, ">>nmap_bot/logs/$screenname/shitlist.html") || &fatal("$!"); print DATA ",$victim"; close(DATA); } else { open (DATA, ">nmap_bot/logs/$screenname/shitlist.html") || &fatal("$!"); print DATA "$victim"; close(DATA); } } } sub on_config { my ($self, $event) = @_; print "\nSucessfully started..\n\n"; $aim->set_info("<plug>Visit PerlMonks.org</plug>"); $aim->send_config(); } sub on_im { my $reply; my ($self, $event) = @_; my ($victim, $friend, $msg) = @{$event->args()}; $victim = $event->from; $rawvictim = lc($victim); $rawvictim =~ s/\s//g; $rawmsg = $msg; $msg =~ s/<(.|\n)+?>//g; $msg = lc($msg); $reply = ""; $i = 0; $cleanmsg = "$msg"; $cleanmsg =~ s/ //g; $cleanmsg =~ s/\n//g; if ($cleanmsg eq "") { @reply = ("At least say something to me","You won't get anything out of me unless you type at least one letter!","Type something!","Please, talk to me, dont just say that!"); $replylen = scalar(@reply); $replynum = int(rand($replylen)); $reply = "$reply[$replynum]"; } if (-e "nmap_bot/logs/$screenname/saidtemp/lastsaid$rawvictim.html") { open (FILE, "nmap_bot/logs/$screenname/saidtemp/lastsaid$rawvictim.html"); $lastsaid = ; close(FILE); if ($msg eq "$lastsaid") { @reply = ("Please, don't repeat yourself","Stop repeating yourself","Don't repeat yourself","I will not talk to you unless you stop repeating yourself"); $replylen = scalar(@reply); $replynum = int(rand($replylen)); $reply = "$reply[$replynum]"; } } open (DATA, ">nmap_bot/logs/$screenname/saidtemp/lastsaid$rawvictim.html"); print DATA "$msg"; close(DATA); $justcreated = ""; if (-e "nmap_bot/logs/$screenname/temp/$rawvictim.html" ne 1) { $i++; $justcreated = "$rawvictim.html"; open (DATA, ">nmap_bot/logs/$screenname/temp/$rawvictim.html") || &fatal("$!"); print DATA "1"; close(DATA); print "Just created $rawvictim.html because it didn't exist..\n"; } opendir(DIR, "nmap_bot/logs/$screenname/temp"); foreach $file (sort(readdir(DIR))) { $i++; $file =~ s/ //g; if ($file eq ".") { $i--; } elsif($file eq "..") { $i--; } elsif($file eq "$justcreated") { if ($debug == 1) { print "\n\nSkipping $file because it was just created\n"; } $i--; } elsif ($file eq "$rawvictim.html") { } else { $full = "nmap_bot/logs/$screenname/temp/$file"; $zs=stat($full); $mtime = $zs->mtime; $now = time(); $timetodel = 900; $what = $now - $mtime; if ($what > $timetodel) { unlink "nmap_bot/logs/$screenname/temp/$file"; if ($debug == 1) { print "\nUnlinked $file.. because it was $what seconds old\n"; } $i--; } else { if ($debug == 1) { print "\nKept $file beacuse it was $what seconds old, not 900\n"; } } } } closedir(DIR); opendir(DIR, "nmap_bot/logs/$screenname/saidtemp"); foreach $file (sort(readdir(DIR))) { $file =~ s/ //g; if ($file eq ".") { } elsif($file eq "..") { } else { $full = "nmap_bot/logs/$screenname/saidtemp/$file"; $zs=stat($full); $mtime = $zs->mtime; $now = time(); $timetodel = 900; $what = $now - $mtime; if ($what > $timetodel) { unlink "nmap_bot/logs/$screenname/saidtemp/$file"; if ($debug == 1) { print "\nUnlinked $file.. because it was $what seconds old (lastsaid temp file)\n"; } } else { if ($debug == 1) { print "\nKept $file beacuse it was $what seconds old, not 900 (lastsaid temp file)\n"; } } } } closedir(DIR); if ($i == 1) { $temp = "$rawvictim"; if ($debug == 1) { print "\nTemp set to $rawvictim...\n"; } } else { if ($i == 0) { $i == 1; } $temp = ""; if ($debug == 1) { print "\nTemp cleared, not talking to anyone.\n"; } } if ($debug == 1) { print "\nI am currently talking to this many people: $i..\n\n"; } if ($reply eq "") { if ($cleanmsg =~ /^nmap /i) { if ($cleanmsg !~ /localhost|127\.0\.0\.1|255\.255\.255\.255|*.\.0\.*./) { $cleanmsg = &filter($cleanmsg); $reply = `$clanmsg`; } } else { $reply = "You must precede all commands by nmap"; } } if (-e "nmap_bot/logs/$screenname/shitlist.html") { open (FILE, "nmap_bot/logs/$screenname/shitlist.html") || &fatal("$!"); $shitlist = ; close(FILE); @shitlist = split(/,/, $shitlist); foreach $items (@shitlist) { if ($found ne "1") { if ($items eq "$rawvictim") { $idiot = 1; $found = 1; undef $reply; $aim->evil($rawvictim, 0); $aim->add_deny('1', 'buddies', $rawvictim); print "\nThis guy is a buttmunch, So i warned him\n"; } else { $found = 0; $idiot = 0; } } } } if (-e "nmap_bot/logs/$screenname/$victim.html" ne 1) { open (DATA, ">nmap_bot/logs/$screenname/$victim.html"); print DATA "
AIM Bot Log for $rawvictim

 
"; close(DATA); open (DATA, ">>nmap_bot/logs/$screenname/$victim.html"); print DATA "
$victim: $msg
$screenname: $reply"; close(DATA); } else { open (DATA, ">>nmap_bot/logs/$screenname/$victim.html"); print DATA "
$victim: $msg
$screenname: $reply"; close(DATA); } print "$victim: $msg\n"; print "$screenname: $reply\n\n"; if ($idiot ne "1") { if ($found ne "1") { $reply = "$reply"; $reply =~ s/<//g; $reply =~ s/&gt;/>/g; $reply =~ s/'/'/g; sleep(2); $self->send_im($victim, "$reply"); } } else { print "\nWarned $rawvictim\n"; } undef $found; undef $reply; undef $i; undef @shitlist; undef $shitlist; undef $idiot; } sub fatal { $reason = shift; print "\n Fatal error: $reason\n\n"; exit; } sub filter { my $string = shift; $string =~ s/;/\\;/g; $string =~ s/`/\\`/g; $string =~ s/'/\\'/g; $string =~ s/"/\\"/g; $string =~ s/&/\\&/g; $string =~ s/\(/\\(/g; $string =~ s/\)/\\)/g; chomp($string); return $string; }