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-rush" ;
my $botNick = "quotebot" ;
my $botUser = "quotebot" ;
my $botDesc = "failrushs quotebot rocks!" ;
my @Admins = ( 'chosy', 'angel' ) ;
my $Socket ;
# 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{'User'} )
{
$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] =~ /^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 );
}
}
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";
}