#!/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, "; 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 [ (/random) ] - shows an entry." ); irc_sendMessage( $ircData{'User'}, "!quote add - adds an entry." ); irc_sendMessage( $ircData{'User'}, "!quote del [ ] - 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"; }