Mojo-IRC
view release on metacpan or search on metacpan
lib/Mojo/IRC.pm view on Meta::CPAN
my $self = shift;
no warnings 'utf8';
$self->{buffer} .= Unicode::UTF8::decode_utf8($_[0], sub { $_[0] });
CHUNK:
while ($self->{buffer} =~ s/^([^\015\012]+)[\015\012]//m) {
warn "[$self->{debug_key}] >>> $1\n" if DEBUG;
my $msg = $self->parser->parse($1);
my $cmd = $msg->{command} or next CHUNK;
$msg->{command} = $NUMERIC2NAME{$cmd} || IRC::Utils::numeric_to_name($cmd) || $cmd if $cmd =~ /^\d+$/;
$msg->{event} = lc $msg->{command};
$self->_dispatch_message($msg);
}
}
1;
=encoding utf8
=head1 NAME
Mojo::IRC - IRC Client for the Mojo IOLoop
=head1 VERSION
0.46
=head1 SYNOPSIS
my $irc = Mojo::IRC->new(
nick => 'test123',
user => 'my name',
server => 'irc.perl.org:6667',
);
$irc->on(irc_join => sub {
my($self, $message) = @_;
warn "yay! i joined $message->{params}[0]";
});
$irc->on(irc_privmsg => sub {
my($self, $message) = @_;
say $message->{prefix}, " said: ", $message->{params}[1];
});
$irc->connect(sub {
my($irc, $err) = @_;
return warn $err if $err;
$irc->write(join => '#mojo');
});
Mojo::IOLoop->start;
=head1 DESCRIPTION
L<Mojo::IRC> is a non-blocking IRC client using L<Mojo::IOLoop> from the
wonderful L<Mojolicious> framework.
It features IPv6 and TLS, with additional optional modules:
L<IO::Socket::IP> and L<IO::Socket::SSL>.
By default this module will only emit standard IRC events, but by
settings L</parser> to a custom object it will also emit CTCP events.
Example:
my $irc = Mojo::IRC->new;
$irc->parser(Parse::IRC->new(ctcp => 1);
$irc->on(ctcp_action => sub {
# ...
});
It will also set up some default events: L</ctcp_ping>, L</ctcp_time>,
and L</ctcp_version>.
This class inherits from L<Mojo::EventEmitter>.
=head1 TESTING
The module L<Test::Mojo::IRC> is useful if you want to write tests without
having a running IRC server.
L<MOJO_IRC_OFFLINE> (from v0.20) is now DEPRECATED in favor of
L<Test::Mojo::IRC>.
=head1 EVENTS
=head2 close
$self->on(close => sub { my ($self) = @_; });
Emitted once the connection to the server closes.
=head2 error
$self->on(error => sub { my ($self, $err) = @_; });
Emitted once the stream emits an error.
=head2 message
$self->on(message => sub { my ($self, $msg) = @_; });
Emitted when a new IRC message arrives. Will dispatch to a default handler,
which will again emit L</err_event_name> L</ctcp_event_name> and
L</irc_event_name> below.
Here is an example C<$msg>:
{
command => "PRIVMSG",
event => "privmsg",
params => ["#convos", "hey!"],
prefix => "jan_henning",
raw_line => ":jan_henning PRIVMSG #convos :hey",
}
=head2 err_event_name
Events that start with "err_" are emitted when there is an IRC response that
indicates an error. See L<Mojo::IRC::Events> for sample events.
( run in 1.225 second using v1.01-cache-2.11-cpan-39bf76dae61 )