#########################
#    name: decyphile	#
#     author: jasper 	#
# 	 aim_bot 	#
# 	  v3.4	 	#
#########################
use Time::localtime;
use Digest::MD5  qw(md5 md5_hex md5_base64);
use strict;

##########
sub eightball {
	if (open(BALL,"8ball.txt")) {
		my @ball = <BALL>;
		close(BALL);
		my $len = @ball;
		#srand(time); 
		my $number = int(rand($len));
		my $retval = $ball[$number];
		return $retval;
	}
}
##########
sub get_response {
	my $msg = shift;
	my $nick = shift;
		
	open(RES,"responses.txt");
		my @responses = <RES>;
	close(RES);
	
	foreach my $val (@responses) {
   		#srand(time); 
   		my $number=int(rand(9999)+1);
   		my $now = ctime();
   		my ($sec,$min,$hour,$mday,$mon,$year,$wday,$yday) = gmtime(time); $mon++;
   		my $year = sprintf("%02d", $year % 100);
   		
   		my $rndstr = &rndstring(10);
      		$val =~ s/%n/$nick/g;
   		$val =~ s/%r/$number/g;
   		$val =~ s/%t/$hour:$min:$sec/g;
   		$val =~ s/%d/$mon-$mday-$year/g;
   		$val =~ s/%s/$rndstr/g;
		chomp($val);
		my ($trigger,$response) = split(/->/,$val);
		my @triggers = split(/\|/,$trigger);
		
		$msg =~ s/\)/\\)/;
		$msg =~ s/\(/\\(/;
		
		if ($msg =~ /$trigger/i) {
			my @rndresp = split(/\|/,$response);
			if (defined(@rndresp)) {
				#srand(time); 
   				my $rnd = int(rand(@rndresp));
   				my $response = $rndresp[$rnd];
   				if (length($response) != 0) { 
   					return $response;
   				} else {
   					$response = &phrase($nick);
   					return $response;
   				}
			}
		}
	}
}
#############################
#get phrase
sub phrase { 
	my $nick=shift;
	open(M,"phrases.txt");
   		my @ph=();
   		@ph=<M>;
   	my $arlen=@ph;
   	close(M);
   	#srand(time); 
   	my $rnd=int(rand($arlen)+1);
   	my $rnd2=int(rand($rnd)+1);
   	my $arelem=$ph[$rnd2]; #random array element
   	
   	#replace special characters 
   	my $number=int(rand(9999)+1);
   	my ($sec,$min,$hour,$mday,$mon,$year,$wday,$yday) = gmtime(time); $mon++;
   	my $year = sprintf("%02d", $year % 100);
   	
   	my $rndstr = &rndstring(10);
      	$arelem =~ s/%n/$nick/g;
   	$arelem =~ s/%r/$number/g;
   	$arelem =~ s/%t/$hour:$min:$sec/g;
   	$arelem =~ s/%d/$mon-$mday-$year/g;
   	$arelem =~ s/%s/$rndstr/g;
   	chomp($arelem);
   	  	
   	return $arelem;
}
#############################
#check block
sub check_block {
	my $name=shift;
	my @blocks=();
	my ($block,$val,$count);
	if (open (M,"block.txt")) {
		my $block=<M>;
		close(M);
		@blocks = split(/:/,$block);
   	
		foreach $val (@blocks) {
			if ($name eq $val) {
				$count++;
			}
		}
	}
	return $count;
}
#############################
#check warner
sub check_warner {
	my $name=shift;
	my @warners=();
	my ($warn,$val,$count);
	if (open (M,"warners.txt")) {
		my $warner=<M>;
		close(M);
		@warners = split(/:/,$warner);
		$name =~ s/ //;
   	
		foreach $val (@warners) {
			if ($name eq $val) {
				$count++;
			}
		}
	}
	return $count;
}
#############################
#check master
sub check_master {
	my $name=shift;
	my @masters=();
	my $master;
	my ($val, $masters,$count);
	open (M,"masters.txt");
	$master=<M>;
	close(M);
	@masters = split(/:/,$master);  	
	foreach $val (@masters) {
		if ($name eq $val) {
			$count++;
		}
	}	
	return $count;
}
#############################
#get master
sub get_master {
	if (-e "masters.txt") {
		open(M,"masters.txt");
			my @masters = <M>;
		close(M);
		return $masters[0];
	}
}
#############################
#generate md5 hash
sub md5hash {
	my $msg = shift;
 	my $md5 = md5($msg);
 	return $md5;
}
#############################
#generate md5_hex hash
sub md5_hexhash {
	my $dat = shift;
 	my $md5 = md5_hex($dat);
 	return $md5;
}
#############################
#generate md5_base64 hash
sub md5_64hash {
	my $dat = shift;
 	my $md5 = md5_base64($dat);
 	return $md5;
}
#############################
#'leetish' talker *modified on 4/27/02 5:48PM*
sub leet {
	my $nex = $_[0]; 
	$nex =~ s/hacker/hax0r/i;
	$nex =~ s/fuct up/fux0red/i;
	$nex =~ s/sex/sex0r/i;
	$nex =~ s/punk/punx0r/i;
	$nex =~ s/leet/l33t/i;
	$nex =~ s/computer/b0x/i;
	$nex =~ s/rock/r0q/i;
	$nex =~ s/hacked/hax0r'd/i;
	$nex =~ s/hack/hax0r/i;
	$nex =~ s/the/teh/i;
	if($nex =~ m/you/g) {
		$nex =~ s/you/j00/i;
	}
	$nex =~ s/A/4/g;
	$nex =~ s/a/4/g;
	$nex =~ s/E/3/g;
	$nex =~ s/e/3/g;
	$nex =~ s/I/1/g;
	$nex =~ s/i/1/g;
	$nex =~ s/O/0/g;
	$nex =~ s/o/0/g;
	$nex =~ s/S/5/g;
	$nex =~ s/s/5/g;
	$nex =~ s/T/7/g;
	$nex =~ s/t/7/g;
		
	return $nex;
}
#########################
#get parameters from text
sub get_para {
	my $data=shift;
	my @arr=();
	my $cmd_locend = index($data,chr(32));
	my $dat_p1 = substr($data,$cmd_locend+1);
	my @para=();
	@para = split(/,/,$dat_p1);
	foreach my $val (@para) {
		push(@arr,$val);
	}
	return @arr;
}
#############################
#generate random scalar
sub rndstring {
	my $dat = shift;
	my $chars = "abcdefghijklmnopqrstuvwxyzABCDEFGHIJKLMNOPQRSTUVWXYZ0123456789[]_-^{}";
	my $cstrlen=0;
	my ($cpos,$rnds);
	do {
		#srand;
		$cpos = int(rand(length($chars)) + 1);
		$rnds .= substr($chars,$cpos,$cpos+1);
	} until ($cstrlen = $dat);
	return $rnds;
}
######
#help
sub help {
	print "Decyphile Bot v3.4 :ActiveAgent: -- By: Jasper <jasper\@wintermarket.org>\n\n";
	print "Basic AOL IM/Chat bot. Accepts various commands via instant message.\n\n";
	print "For more information please visit:\n";
	print "\thttp://jasper.wintermarket.org\n\thttp://decyphilebot.cjb.net\n\n";
	print "USAGE: perl decyphile.pl [screenname|?] [password] [redirect] [smart response]\n\n";
	print "\tscreenname - AOL/AIM Screenname you want bot to use.\n";
	print "\t\tdecyphile.pl can be edited to have this screenname hardcoded.\n";
	print "\tpassword - Password for the screenname above\n";
	print "\t\tdecyphile.pl can be edited to have this password hardcoded.\n";
	print "\t? - Displays this help ;)\n\nThank You for using Decyphile Bot. Enjoy =)\n";
	print "\tredirect - If true all messages will be redirected to bot master. (1=true,0=false)";
	print "\tsmart response - Have bot respond to non master messages with a 'smart' response (1=true,0=false)";
	exit;
}
1;

