NAME
POE::Component::IRC::Qnet - A fully event-driven IRC client module for Quakenet
SYNOPSIS
use
strict;
use
warnings;
my
$nickname
=
'Flibble'
. $$;
my
$ircname
=
'Flibble the Sailor Bot'
;
my
$port
= 6667;
my
$qauth
=
'FlibbleBOT'
;
my
$qpass
=
'fubar'
;
my
@channels
= (
'#Blah'
,
'#Foo'
,
'#Bar'
);
# We create a new PoCo-IRC object and component.
my
$irc
= POE::Component::IRC::Qnet->spawn(
nick
=>
$nickname
,
port
=>
$port
,
ircname
=>
$ircname
,
) or
die
"Oh noooo! $!"
;
POE::Session->create(
package_states
=> [
main
=> [
qw(_default _start irc_001 irc_public)
],
],
heap
=> {
irc
=>
$irc
},
);
$poe_kernel
->run();
sub
_start {
my
(
$kernel
,
$heap
) =
@_
[KERNEL, HEAP];
# We get the session ID of the component from the object
# and register and connect to the specified server.
my
$irc_session
=
$heap
->{irc}->session_id();
$kernel
->post(
$irc_session
=>
register
=>
'all'
);
$kernel
->post(
$irc_session
=>
connect
=> { } );
return
;
}
sub
irc_001 {
my
(
$kernel
,
$sender
) =
@_
[KERNEL, SENDER];
# Get the component's object at any time by accessing the heap of
# the SENDER
my
$poco_object
=
$sender
->get_heap();
"Connected to "
,
$poco_object
->server_name(),
"\n"
;
# Lets authenticate with Quakenet's Q bot
$kernel
->post(
$sender
=>
qbot_auth
=>
$qauth
=>
$qpass
);
return
;
}
sub
irc_public {
my
(
$kernel
,
$sender
,
$who
,
$where
,
$what
) =
@_
[KERNEL, SENDER, ARG0 .. ARG2];
my
$nick
= (
split
/!/,
$who
)[0];
my
$channel
=
$where
->[0];
if
(
my
(
$rot13
) =
$what
=~ /^rot13 (.+)/ ) {
$rot13
=~
tr
[a-zA-Z][n-za-mN-ZA-M];
$kernel
->post(
$sender
=>
privmsg
=>
$channel
=>
"$nick: $rot13"
);
}
return
;
}
# We registered for all events, this will produce some debug info.
sub
_default {
my
(
$event
,
$args
) =
@_
[ARG0 ..
$#_
];
my
@output
= (
"$event: "
);
for
my
$arg
(
@$args
) {
if
(
ref
$arg
eq
'ARRAY'
) {
push
(
@output
,
'['
.
join
(
', '
,
@$arg
) .
']'
);
}
else
{
push
(
@output
,
"'$arg'"
);
}
}
join
' '
,
@output
,
"\n"
;
return
0;
}
DESCRIPTION
POE::Component::IRC::Qnet is an extension to POE::Component::IRC specifically for use on Quakenet http://www.quakenet.org/. See the documentation for POE::Component::IRC for general usage. This document covers the extensions.
The module provides a number of additional commands for communicating with the Quakenet service bot Q.
METHODS
service_bots
The component will query Q its default name on Quakenet. If you wish to override these settings, use this method to configure them.
$irc
->service_bots(
QBOT
=>
'W@blah.network.net'
);
In most cases you shouldn't need to mess with these >;o)
INPUT
The Quakenet service bots accept input as PRIVMSG. This module provides a wrapper around the POE::Component::IRC "privmsg" command.
qbot_*
Send commands to the Q bot. Pass additional command parameters as arguments to the event.
$kernel
->post (
'my client'
=>
qbot_auth
=>
$q_user
=>
$q_pass
);
OUTPUT
All output from the Quakenet service bots is sent as NOTICEs. Use irc_notice
to trap these.
irc_whois
Has all the same hash keys in ARG1
as POE::Component::IRC, with the addition of 'account', which contains the name of their Q auth account, if they have authed, or a false value if they haven't.
BUGS
A few have turned up in the past and they are sure to again. Please use http://rt.cpan.org/ to report any. Alternatively, email the current maintainer.
AUTHOR
Chris 'BinGOs' Williams <chris@bingosnet.co.uk>
Based on the original POE::Component::IRC by:
Dennis Taylor, <dennis@funkplanet.com>