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.
$sock
"NICK $nick\r\n"
;
$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;
}
STDOUT
join
(
' '
,
"irc_$type:"
,
@args
),
"\n"
;
}
}
sub
irc_ping {
my
$server
=
shift
;
$sock
"PONG :$server\r\n"
;
return
1;
}
sub
irc_001 {
STDOUT
"Connected to $_[0]\n"
;
$sock
"JOIN $channel\r\n"
;
return
1;
}
sub
irc_public {
my
(
$who
,
$where
,
$what
) =
@_
;
"$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. Specifypublic => 1
to enable the automatic conversion of privmsgs targeted at channels topublic
instead ofprivmsg
. Specifyctcp => 1
to enable automatic conversion of privmsgs and notices with CTCP/DCC type encoding toctcp
,ctcpreply
anddcc_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
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.