All pastes #463465 Raw Edit

angel

public text v1 · immutable
#463465 ·published 2007-04-28 23:36 UTC
rendered paste body
#!/usr/bin/perl
#Prebot
#Written by angel for chosy ( :* )
 
use IO::Socket;
 
 
# IRC Options
my $Server    = "irc.xchannel.org:6667"     ;
my $Channel   = "#fail-rus"                ;
my $botNick   = "quotebot"                  ;
my $botUser   = "quotebot"                  ;
my $botDesc   = "failrushs quotebot rocks!" ;
my $Socket                                  ;

my @Admins    = ( 'chosy', 'angelmaycr' );

# IRC Functions
sub irc_parseMessage ;
sub irc_sendMessage  ;
sub irc_authenticate ;
sub irc_sendPong     ;
sub irc_joinChannel  ;
 
# Main Act
open( QDB, "<failrush-quotes.db" );
my @QDB = <QDB>;
close(QDB);

my %myServer;
 
if($Server =~ /(.*)\:(.*)/i) # Grep server and port
{
        $myServer{'Server'} = $1;
        $myServer{'Port'}   = $2;
}
else
{
        print "unknown server.\n";
        die;
}
 
print "Connecting to ".$myServer{'Server'}.":".$myServer{'Port'}."\n";
 
$Socket = IO::Socket::INET->new(
        PeerAddr => $myServer{'Server'},
        PeerPort => $myServer{'Port'},
        Proto    => 'tcp'
) or die "Couldn't connect to Server..";
 
irc_authenticate(($myServer{'Server'}));
 
while(<$Socket>)
{
	print $_;
	irc_parseMessage($_);
	if($_ =~ /376/)
	{
			irc_joinChannel($Channel); # Pre Users
	}
	elsif( $_ =~ /PING :(.*)\r\n/ )
	{
		irc_sendPong( $1 );
	}
}
 
sub irc_parseMessage
{
    my $shift  = shift;
    my %ircData       ;
 
	if($shift =~ m/^\:(.*?)\!(.*?)\@(.*?)\sPRIVMSG\s(.*?) :(.*?).?$/)
	{
			# Fill in the Form
			$ircData{'User'}    = $1 ;
			$ircData{'Real'}    = $2 ;
			$ircData{'Host'}    = $3 ;
			$ircData{'To'}      = $4 ;
			$ircData{'Message'} = $5 ;

		@Message = split / /, $ircData{'Message'}; 

		print $ircData{'User'}." sagt:\n\t".$ircData{'Message'}."\n";

		if( $Message[0] =~ /^!quote$/ )
		{
			if( $Message[1] =~ /^add$/ )
			{
				$len      = length($Message[0])+length($Message[1])+1                         ;
				$newEntry = substr($ircData{'Message'}, $len+1, length($ircData{'Message'})-1);
				
				push( @QDB, $newEntry );
				
				open( QDB, ">>failrush-quotes.db" );
				print QDB $newEntry."\n"; 
				close(QDB);
				
				irc_sendMessage( $Channel, @QDB.". Entry added." );
			}
			elsif( $Message[1] =~ /^del$/ )
			{
				$Allowed = 0;
				
				foreach $Admin( @Admins )
				{
					if( $Admin eq $ircData{'Real'} )
					{
						$Allowed = 1; 
						break;
					}
				}
				
				if( $Message[2] =~ /^(\d)$/ && $Allowed eq 1 )
				{
					$quoteID    = 1 ;
					$quoteEntry = "";
					
					foreach $Entry( @QDB )
					{
						if( $quoteID eq $Message[2] )
						{
							$quoteEntry = $Entry;
							break;
						}
						
						++$quoteID;
					}
					
					if( $quoteEntry eq "" )
					{
						irc_sendMessage( $Channel, "Entry ".$Message[2]." not found." );
					}
					elsif( $Allowed eq 1 )
					{
						print $QDB[($quoteID-1)]." / ".$QDB[($quoteID-2)]."\n";
						delete $QDB[($quoteID-1)]         ;
						unlink("failrush-quotes.db")      ;
						open( QDB, ">failrush-quotes.db" );
						foreach $DBEntry( @QDB ){ print QDB $DBEntry; };
						close(QDB);
						
						irc_sendMessage( $Channel, "Entry ".$Message[2]." deleted." );
					}
				}
				else
				{
					delete $QDB[(@QDB-1)]                 ;
					unlink("failrush-quotes.db")      ;
					open( QDB, ">failrush-quotes.db" );
					
					open( QDB, ">failrush-quotes.db" );
					foreach $DBEntry( @QDB ){ print QDB $DBEntry; };
					close(QDB);
					
					irc_sendMessage( $Channel, "Entry ".@QDB." deleted.");
				}
			}
			elsif( $Message[1] =~ /^amount$/ || $Message[1] =~ /^info$/ )
			{
				if( @QDB > 1 )   { irc_sendMessage( $Channel, @QDB." Entry's found." );    }
				elsif( @QDB eq 1){ irc_sendMessage( $Channel, "1 Entry found.");           }
				else             { irc_sendMessage( $Channel, "No Entry's." );             }
			}
			elsif( $Message[1] =~ /^help$/ )
			{
				irc_sendMessage( $ircData{'User'}, "!quote show [ (<num>/random) ] - shows an entry." );
				irc_sendMessage( $ircData{'User'}, "!quote add <text>              - adds an entry." );
				irc_sendMessage( $ircData{'User'}, "!quote del [ <num> ]           - deletes an entry." );
				irc_sendMessage( $ircData{'User'}, "!quote (info/amount)           - shows the amount of entrys inserted." );
				irc_sendMessage( $ircData{'User'}, "!quote help                    - shows this help." );
			}
			elsif( $Message[1] =~ /^show$/ )
			{
				if( $Message[2] =~ /^(\d)$/ )
				{
					$quoteID    = 1 ;
					$quoteEntry = "";
					
					foreach $Entry( @QDB )
					{
						if( $quoteID eq $Message[2] )
						{
							$quoteEntry = $Entry;
							break;
						}
						
						++$quoteID;
					}
					
					if( $quoteEntry eq "" )
					{
						irc_sendMessage( $Channel, "Entry ".$Message[2]." not found." );
					}
					else
					{
						irc_sendMessage( $Channel, "Entry ".$Message[2].": ".$quoteEntry );
					}
				}
				elsif( $Message[2] eq "random" )
				{
					$quoteID     = rand(@QDB)     ;
					$quoteEntry  = $QDB[$quoteID] ;
					
					if( $quoteEntry ne "" )
					{
						irc_sendMessage( $Channel, "Entry ".int($quoteID)+1.": ".$quoteEntry );		
					}
					else
					{
						irc_sendMessage( $Channel, "No Entry's." );
					}
				}
				else
				{
					$quoteID     = @QDB          ;
					$quoteEntry  = $QDB[(@QDB-1)];
					
					if( $quoteEntry ne "" )
					{
						irc_sendMessage( $Channel, "Entry ".$quoteID.": ".$quoteEntry );		
					}
					else
					{
						irc_sendMessage( $Channel, "No Entry's." );
					}
				}
			}
		}
	}
}
 
sub irc_sendMessage
{
	my ($nick, $message) = @_;
	print $Socket ("PRIVMSG ".$nick." :".$message."\r\n");
	#print ("PRIVMSG ".$nick." :".$message."\r\n");
}
 
sub irc_authenticate
{
	$User = "USER ".$botUser." \"localhost\" \"".$_[0]."\" :".$botDesc."\r\n";
	$Nick = "NICK ".$botNick."\r\n";
 
	print $Socket $User;
	print $Socket $Nick;
}
 
sub irc_sendPong
{
	my $ping = shift;
 
	print $Socket "PONG ".$ping."\r\n";
}
 
sub irc_joinChannel
{
	my $Chan = shift;
	print $Socket "JOIN ".$Chan."\r\n";
}