NAME

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

VERSION

version 1.22

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 conversion of privmsgs targeted at channels to public instead of privmsg. Specify ctcp => 1 to enable automatic conversion of privmsgs and notices with CTCP/DCC type encoding to ctcp, ctcpreply and dcc_request.

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',
	   }

KUDOS

Based on code originally developed by Jonathan Steinert and Dennis Taylor

SEE ALSO

POE::Filter::IRCD

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

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

AUTHOR

Chris Williams <chris@bingosnet.co.uk>

COPYRIGHT AND LICENSE

This software is copyright (c) 2016 by Chris Williams, Jonathan Steinert and Dennis Taylor.

This is free software; you can redistribute it and/or modify it under the same terms as the Perl 5 programming language system itself.