NAME

Parse::IRC - A parser for the IRC protocol.

SYNOPSIS

General usage:

use strict;
use Parse::IRC;

# Functional interface

my $hashref = parse_irc( $irc_string );

# OO interface

my $irc_parser = Parse::IRC->new();

my $hashref = $irc_parser->parse( $irc_string );

Using Parse::IRC in a simple IRC bot:

# A simple IRC bot using Parse::IRC

use strict;
use IO::Socket;
use Parse::IRC;

my $parser = Parse::IRC->new( public => 1 );

my %dispatch = ( 'ping' => \&irc_ping, '001' => \&irc_001, 'public' => \&irc_public );

# The server to connect to and our details.
my $server = "irc.perl.moo";
my $nick = "parseirc$$";
my $login = "simple_bot";

# The channel which the bot will join.
my $channel = "#IRC.pm";

# Connect to the IRC server.
my $sock = new IO::Socket::INET(PeerAddr => $server,
                                PeerPort => 6667,
                                Proto => 'tcp') or
                                  die "Can't connect\n";

# Log on to the server.
print $sock "NICK $nick\r\n";
print $sock "USER $login 8 * :Perl IRC Hacks Robot\r\n";

# Keep reading lines from the server.
while (my $input = <$sock>) {
  $input =~ s/\r\n//g;
  my $hashref = $parser->parse( $input );
  SWITCH: {
        my $type = lc $hashref->{command};
        my @args;
        push @args, $hashref->{prefix} if $hashref->{prefix};
        push @args, @{ $hashref->{params} };
        if ( defined $dispatch{$type} ) {
          $dispatch{$type}->(@args);
          last SWITCH;
        }
        print STDOUT join( ' ', "irc_$type:", @args ), "\n";
  }
}

sub irc_ping {
  my $server = shift;
  print $sock "PONG :$server\r\n";
  return 1;
}

sub irc_001 {
  print STDOUT "Connected to $_[0]\n";
  print $sock "JOIN $channel\r\n";
  return 1;
}

sub irc_public {
  my ($who,$where,$what) = @_;
  print "$who -> $where -> $what\n";
  return 1;
}

DESCRIPTION

Parse::IRC provides a convenient way of parsing lines of text conforming to the IRC protocol ( see RFC1459 or RFC2812 ).

FUNCTION INTERFACE

Using the module automagically imports 'parse_irc' into your namespace.

parse_irc

Takes a string of IRC protcol text. Returns a hashref on success or undef on failure. See below for the format of the hashref returned.

OBJECT INTERFACE

CONSTRUCTOR

new

Creates a new Parse::IRC object. One may specify debug => 1 to enable warnings about non-IRC protcol lines. Specify public => 1 to enable the automatic conversation of privmsgs targeted at channels to 'public' instead of 'privmsg'.

METHODS

parse

Takes a string of IRC protcol text. Returns a hashref on success or undef on failure. The hashref contains the following fields:

prefix
command
params ( this is an arrayref )
raw_line 

For example, if the filter receives the following line, the following hashref is produced:

  LINE: ':moo.server.net 001 lamebot :Welcome to the IRC network lamebot'

  HASHREF: {
	     prefix   => ':moo.server.net',
	     command  => '001',
	     params   => [ 'lamebot', 'Welcome to the IRC network lamebot' ],
	     raw_line => ':moo.server.net 001 lamebot :Welcome to the IRC network lamebot',
	   }

AUTHOR

Chris 'BinGOs' Williams

Based on code originally developed by Jonathan Steinert

LICENSE

Copyright (c) Chris Williams and Jonathan Steinert

This module may be used, modified, and distributed under the same terms as Perl itself. Please see the license that came with your Perl distribution for details.

SEE ALSO

POE::Filter::IRCD

http://www.faqs.org/rfcs/rfc1459.html

http://www.faqs.org/rfcs/rfc2812.html