IRC::Async - Asynchronous IRC client
use IRC::Async;
my $channel = "#channel";
my $a = IRC::Async.new(
:host<127.0.0.1>
:channels($channel)
);
# my $stdinput = $*IN.Supply; Workaround for MoarVM/issues/165
my $stdinput = {my $insupplier=Supplier.new;use Readline;start {my $rl = Readline.new;while my $msg = $rl.readline("") {$insupplier.emit($msg);}}; $insupplier.Supply; }();
await $a.connect.then(
{
my $chat = .result;
my $text = $chat.Supply.grep({ $_ ~~ :command("PRIVMSG") });
react {
whenever $text -> $e {
say "{$e<who><nick>}: {$e<params>[1]}";
}
whenever $stdinput -> $e {
if ($e eq "\\quit") {
await $chat.print("QUIT :My job is done\n");
$chat.close;
exit;
};
$chat.privmsg($channel, $e);
}
}
});
Get an IRC client up, and interact to it using a totally asynchronous API inspired from the Socket Async interface.
my $irc = IRC::Async.new;
# Defaults are shown
my $irc = IRC::Async.new(
debug => False,
host => 'localhost',
password => (Str),
port => 6667,
nick => 'EvilBOT',
username => 'EvilBOT',
userreal => 'Evil annoying BOT',
channels => ['#perl6bot'],
);
Creates and returns a new IRC::Async
objects. All arguments are optional
and self-explanatory.
method connect returns Promise;
Takes no arguments. Attempts to connect to the IRC server, returning a
Promise that will either be kept with a connected IRC::Async
or
broken if the connection cannot be made.
method Supply returns Supply
Returns a Supply
which can be tapped to obtain the message read from
the connected IRC::Async
as it arrives. By default the data will be
emitted as an intuitive structured message as parsed by the
IRC::Parser
grammar installed as a dependency to this module.
method print (Str:D $msg) returns Promise
Attempt to send string $msg
on the IRC::Async
that will have been
obtained indirectly via connect, returning a Promise that
will be kept with the number of bytes sent or broken if there was an
error sending. Pay attention: IRC command terminates
with newline "\n"
and print does not add it automagically, this
increase the flexibility; remember to add that character at the end of
every IRC command.
method write (Blob:D $msg) returns Promise
Attempt to send binary blob $msg
on the IRC::Async
that will have
been obtained indirectly via connect, returning a Promise
that will be kept with the number of bytes sent or broken if there was
an error sending.
method close
Close the connection to the server
method privmsg (Str $who, Str $what) returns Promise
Calls the method print
with the following format: "PRIVMSG $who :$what\n"
.
Fork this module on GitHub: https://github.com/scovit/perl6-IRC-Async
To report bugs or request features, please use https://github.com/scovit/perl6-IRC-Async/issues
Vittore F. Scolari (vittore.scolari@pasteur.fr)
The IRC grammar has been copypasted as-is from an old version of Zoffix IRC client https://github.com/zoffixznet/perl6-IRC-Client
You can use and distribute this module under the terms of the
The Artistic License 2.0. See the LICENSE
file included in this
distribution for complete details.