Warning: Undefined array key "HTTP_REFERER" in /var/www/html/blogg/include/common.php on line 149

Warning: Undefined array key "HTTP_ACCEPT_LANGUAGE" in /var/www/html/blogg/include/common.php on line 149

Warning: Undefined array key "module_gallery_main_page" in /var/www/html/blogg/modules/gallery/init.php on line 6
root@circe.se

Boten anna - the source


Warning: Undefined array key "votes" in /var/www/html/blogg/index.php on line 63


Warning: Undefined array key 1 in /var/www/html/blogg/include/parser.php on line 314
Nu var det faktiskt truncate_url("index.php?pid=148", "någon") som efterfrågade sourcen till min enkla bot. Efter lite redigeringar av den så tror jag att den ska fungera. Jag har dock bara testat den under Linux (Debian Sarge och Gentoo), ingen support kommer att ges på andra OS än Debian :) Men jag tror inte att det är så mycket som ska strula.

code:

#!/usr/bin/perl

#Written and maintained by dr slizer

use Socket;

#Some bot settings
$BotName = \'Anna\';
$BotDescription = \'Jag är en bot!\';
$BotPassword = \'\';
$debug = 1; #Show debug messages (all incomming and outgoing traffic) in STDOUT
$ShowPMs = 1; #Show PMs in STDOUT if the come from an OP

#Some hub settings
$hostname = \'\';
$port = 411;

#----Beginning of script----#

$Name = \'Boten anna\';
$Version = \'0.1\';

@OpList = ();


$tcpProtocolNumber = getprotobyname(\'tcp\') || 6;
socket(SOCKET, PF_INET(), SOCK_STREAM(), $tcpProtocolNumber) || die(\"** Socket: $!\");

$address = (gethostbyname($hostname))[4];
$internetPackedAddress = pack(\'Sna4x8\', AF_INET(), $port, $address);

print(\"** Connecting to $hostname:$port...\\n\");

connect(SOCKET, $internetPackedAddress) or die (\"** Connect: $!\");

print(\"** Connected\\n\");

$input_buffer = \'\';
$buffer = \'\';

$active = 1;

while ($active)
{
	#Clearing the buffer
	$buffer = \'\';

	$get_data=1;
	
	#This loop read on \"protocol line\" from the socket
	while($get_data)
	{
		#Reading one byte from the buffer
		recv(SOCKET, $input_buffer, 1, 0);
		
		#print \"$input_buffer\\n\";
		
		#If the buffer doesn\'t contain any data the connection was reset by the server
		#and we will exit this loop and shutdown the bot
		if($input_buffer eq \'\')
 		{
 			$active=0;
			$get_data=0;
			print(\"** Disconnected\\n\");
 		}
		
		#If the buffer contatins |, we exit the loop because the line is complete
		#If not we append the read byte to $buffer
		if($input_buffer eq \'|\')
		{
			$get_data=0;
		}
		else
		{
			$buffer=$buffer.$input_buffer;
		}
	}
	
	#Some debugging of incoming data
	if($debug && $active){ print \'>> \'.$buffer.\"\\n\";}
	
	@current = split(/ /, $buffer);
	
	#The first entry in the array is the command
	if(@current[0] eq \'$Lock\')
	{
		#We got lock, we\'re sending $Key and $ValidateNick
		send_data(\'$Key \'.Lock2Key(@current[1], 0x05).\'|\');
		send_data(\'$ValidateNick \'.$BotName.\'|\');
	}
	elsif(@current[0] eq \'$GetPass\')
	{
		print(\"** Sending password...\\n\");
		send_data(\'$MyPass \'.$BotPassword.\'|\');
	}
	elsif(@current[0] eq \'$ValidateDenide\')
	{
		#Something\'s wrong with our nick, shutting down the script
		print(\"** Invalid nickname\\n\");
		$active=0;
	}
	elsif(@current[0] eq \'$BadPass\')
	{
		#Wrong password, shutting down the script
		print(\"** Invalid password\\n\");
		$active=0;
	}
	elsif(@current[0] eq \'$HubIsFull\')
	{
		#The hub is full, shutting down the script
		print(\"** The hub is full\\n\");
		$active=0;
	}
	elsif(@current[0] eq \'$Hello\')
	{
		if(@current[1] eq $BotName)
		{
			#Wieeeeee, we are welcome in the hub :)
			send_data(\'$Version 1,0091|\');
			send_data(\'$GetNickList|\');
			send_data(\'$MyINFO $ALL \'.$BotName.\' \'.$BotDescription.\'$ $BOT1$BOT$0$|\');
		}
	}
	elsif(@current[0] eq \'$OpList\')
	{
		my(@new_Ops) = split(/\\$\\$/, @current[1]);
		my($index) = scalar @OpList;
		
		foreach $cur_op (@new_Ops)
		{
			if(!in_array($cur_op, @OpList))
			{
				@OpList[$index] = $cur_op;
				$index++;
			}
		}
	}
	elsif(@current[0] eq \'$Quit\')
	{
		if(in_array(@current[1], @OpList))
		{
			my(@new_OpList) = ();
			my($index) = 0;
			foreach $cur_op (@OpList)
			{
				if($cur_op ne @current[1])
				{
					@new_OpList[$index]=$cur_op;
					$index++;
				}
			}
			@OpList = @new_OpList;
		}
	}
	elsif(@current[0] eq \'$To:\')
	{
		#Checking if the message really is to the bot, it should be but you never know ;)
		if(@current[1] eq $BotName)
		{
			#Merging all arguments to the command into one string 
			my($arg) = \'\';
			my($i) = 6;
			while ($i<@current)
			{
				if($arg ne \'\')
				{
					$arg=$arg.\' \';
				}
				$arg=$arg.@current[$i];
				$i++
			}
			
			if($ShowPMs && !$debug && in_array(@current[3], @OpList))
			{
				print($current.\"\\n\");
			}
			
			#We let the command sub take care of the message
			command(@current[3], @current[5], $arg);
		}
	}
    else
    {   
        my($first) = substr(@current[0], 0, 1);
        if($first ne \'$\')
        {   
            #Main chat message
            if(@current[0] ne \'<Anna>\')
            {
                #Very quick and dirty matching ;)
                if($buffer =~ \' anna \' or $buffer =~ \' Anna \' or $buffer =~ \' Basshunter \' or $buffer =~ \' basshunter \')
                {
                    send_data(\'<\'.$BotName.\'> Jag är en bot!|\');
                }
            }
        }
    }
}

close(SOCKET);

sub command
{
	my($user, $command, $arg) = @_;
	#Removing new line char from $arg
 	$arg =~ s/\\n//ig;
	
	##Administrator functions
	if($command eq \'+shutdown\' && in_array($user, @OpList))
	{
		print(\"** $user ordered me to shutdown\\n\");
		$active = 0;
	}
	if($command eq \'+ops\')
	{
		send_data(\'$To: \'.$user.\' From: \'.$BotName.\' $<\'.$BotName.\'> I\\\'m aware of these operators:|\');
		foreach $cur_op (@OpList)
		{
 			send_data(\'$To: \'.$user.\' From: \'.$BotName.\' $<\'.$BotName.\'> \'.$cur_op.\'|\');
		}
	}
}

sub in_array
{
	my($value) = shift;
	my(@array) = @_;
	
	for(@array)
	{
		return 1 if $_ eq $value;
	}
	return 0;
}

sub send_data
{
	my($data) = @_;
	if($debug){print(\"<< $data\\n\");}
	send(SOCKET, $data, 0) or die(\"** Failed sending data: $!\");
}

sub Lock2Key
{
        @_ == 2 or die \"** Usage: convertLockToKey( lock , xorkey )\";
        my @lock = split( // , shift );
        my $xor_key = scalar( shift );
        my $i;
        my @key = ();

        # convert to ordinal
        foreach( @lock ) {
                $_ = ord;
        }
        # calc key[0] with some xor-ing magic
        push( @key , ( $lock[0] ^ $lock[ $#lock - 1 ] ^ $lock[ $#lock ] ^ $xor_key ) );
        # calc rest of key with some other xor-ing magic
        for( $i = 1 ; $i < @lock ; $i++ ) {
                push( @key , ( $lock[$i] ^ $lock[$i - 1] ) );
        }
        # nibble swapping
        for( $i = 0 ; $i < @key ; $i++ ) {
                $key[$i] = ( ( $key[$i] << 4 ) & 0xF0 ) | ( ( $key[$i] >> 4 ) & 0x0F );
        }
        # escape some
        foreach( @key ) {
                if ( $_ == 0 || $_ == 5 || $_ == 36 || $_ == 96 || $_ == 124 || $_ == 126 ) {
                        $_ = sprintf( \'/%%DCN%03i%%/\' , $_ );
                } else {
                        $_ = chr;
                }
        }
        # done
        return join( \'\' , @key );
}

No comments.

New comment

Name:

Homepage:

E-Mail:

Skriv ordet katt för att bevisa att du inte är en bot:

Message:

  • 1