Mojo::IRC - IRC Client for the Mojo IOLoop
0.46
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;
Mojo::IRC is a non-blocking IRC client using Mojo::IOLoop from the wonderful Mojolicious framework.
It features IPv6 and TLS, with additional optional modules: IO::Socket::IP and IO::Socket::SSL.
By default this module will only emit standard IRC events, but by settings "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: "ctcp_ping", "ctcp_time", and "ctcp_version".
This class inherits from Mojo::EventEmitter.
The module Test::Mojo::IRC is useful if you want to write tests without having a running IRC server.
MOJO_IRC_OFFLINE (from v0.20) is now DEPRECATED in favor of Test::Mojo::IRC.
$self->on(close => sub { my ($self) = @_; });
Emitted once the connection to the server closes.
$self->on(error => sub { my ($self, $err) = @_; });
Emitted once the stream emits an error.
$self->on(message => sub { my ($self, $msg) = @_; });
Emitted when a new IRC message arrives. Will dispatch to a default handler, which will again emit "err_event_name" "ctcp_event_name" and "irc_event_name" below.
Here is an example $msg
:
{
command => "PRIVMSG",
event => "privmsg",
params => ["#convos", "hey!"],
prefix => "jan_henning",
raw_line => ":jan_henning PRIVMSG #convos :hey",
}
Events that start with "err_" are emitted when there is an IRC response that indicates an error. See Mojo::IRC::Events for sample events.
Events that start with "ctcp_" are emitted if the "parser" can understand CTCP messages, and there is a CTCP response.
$self->parser(Parse::IRC->new(ctcp => 1);
See Mojo::IRC::Events for sample events.
Events that start with "irc_" are emitted when there is a normal IRC response. See Mojo::IRC::Events for sample events.
$int = $self->connect_timeout;
$self = $self->connect_timeout(60);
Maximum amount of time in seconds establishing a connection may take before getting canceled, defaults to the value of the MOJO_IRC_CONNECT_TIMEOUT
environment variable or 30.
Holds an instance of Mojo::IOLoop.
$str = $self->local_address;
$self = $self->local_address("10.20.30.40");
Local address to bind to. See "local_address" in Mojo::IOLoop::Client.
The name of this IRC client. Defaults to "Mojo IRC".
IRC nick name accessor. Default to "user".
$self = $self->parser($obj);
$self = $self->parser(Parse::IRC->new(ctcp => 1));
$obj = $self->parser;
Holds a Parse::IRC object by default.
Password for authentication
Will be set by "irc_rpl_welcome". Holds the actual hostname of the IRC server that we are connected to.
Server name and, optionally, a port to connect to. Changing this while connected to the IRC server will issue a reconnect.
$hash = $self->server_settings;
Holds information about the server. See https://github.com/jhthorsen/mojo-irc/blob/master/t/ua-channel-users.t for example data structure.
Note that this attribute is EXPERIMENTAL and the structure of the values it holds.
IRC username. Defaults to current logged in user or falls back to "anonymous".
$self->tls(undef) # disable (default)
$self->tls({}) # enable
Default is "undef" which disables TLS. Setting this to an empty hash will enable TLS and this module will load in default certs. It is also possible to set custom cert/key:
$self->tls({ cert => "/path/to/client.crt", key => ... })
This can be generated using
# certtool --generate-privkey --outfile client.key
# certtool --generate-self-signed --load-privkey client.key --outfile client.crt
To disable the verification of server certificates, the "insecure" option can be set:
$self->tls({insecure => 1});
$self = $self->connect(\&callback);
Will log in to the IRC "server" and call &callback
. The &callback
will be called once connected or if connect fails. The second argument will be an error message or empty string on success.
$str = $self->ctcp(@str);
This message will quote CTCP messages. Example:
$self->write(PRIVMSG => nickname => $self->ctcp(TIME => time));
The code above will write this message to IRC server:
PRIVMSG nickname :\001TIME 1393006707\001
$self->disconnect(\&callback);
Will disconnect form the server and run the callback once it is done.
$self = Mojo::IRC->new(%attrs);
Object constructor.
$self->register_default_event_handlers;
This method sets up the default "DEFAULT EVENT HANDLERS" unless someone has already subscribed to the event.
$self->write(@str, \&callback);
This method writes a message to the IRC server. @str
will be concatenated with " " and "\r\n" will be appended. &callback
is called once the message is delivered over the stream. The second argument to the callback will be an error message: Empty string on success and a description on error.
$promise = $self->write_p(@str);
Like "write", but returns a Mojo::Promise instead of taking a callback. The promise will be resolved on success, or rejected with the error message on error.
Will respond to the sender with the difference in time.
Ping reply from $sender: 0.53 second(s)
Will respond to the sender with the current localtime. Example:
TIME Fri Feb 21 18:56:50 2014
NOTE! The localtime format may change.
Will respond to the sender with:
VERSION Mojo-IRC $VERSION
NOTE! Additional information may be added later on.
Used to update the "nick" attribute when the nick has changed.
Responds to the server with "QUOTE PASS ..." if the notice contains "Ident broken...QUOTE PASS...".
Responds to the server with "PONG ...".
Used to populate "server_settings" with information about the server.
Used to get the hostname of the server. Will also set up automatic PING requests to prevent timeout and update the "nick" attribute.
This handler will add "_" to the failed nick before trying to register again.
This program is free software, you can redistribute it and/or modify it under the terms of the Artistic License version 2.0.
Marcus Ramberg - mramberg@cpan.org
Jan Henning Thorsen - jhthorsen@cpan.org