From c194b1d8b3b4e85d5ffd5b36c7deb63a494386fa Mon Sep 17 00:00:00 2001 From: Zoffix Znet Date: Sun, 5 Jun 2016 09:04:21 -0400 Subject: Z --- examples/bot.pl6 | 5 ++++- lib/IRC/Client.pm6 | 54 +++++++++++++++++++++++++++++------------------------- 2 files changed, 33 insertions(+), 26 deletions(-) diff --git a/examples/bot.pl6 b/examples/bot.pl6 index 70dbaa3..d64e9b8 100644 --- a/examples/bot.pl6 +++ b/examples/bot.pl6 @@ -14,6 +14,9 @@ my $irc = IRC::Client.new( :debug<1> # :channels<#zofbot> # :host - :port<5667> + :servers( + inspircd => { :port<6667> } + mine => { :port<5667> } + ) :plugins(MyPlug.new) ).run; diff --git a/lib/IRC/Client.pm6 b/lib/IRC/Client.pm6 index e1fffbf..b591ff2 100644 --- a/lib/IRC/Client.pm6 +++ b/lib/IRC/Client.pm6 @@ -19,8 +19,8 @@ method run { self!prep-servers; for %!servers.kv -> $s-name, $s-conf { - %!servers{ $s-name } = - IO::Socket::Async.connect( $s-conf, $s-conf ).then({ + %!servers{ $s-name } + = IO::Socket::Async.connect( $s-conf, $s-conf ).then({ $s-conf = .result; self!ssay: "PASS $!password", :server($s-name) @@ -39,19 +39,21 @@ method run { $str or $str = $buf.decode: 'latin-1'; $str = $left-overs ~ $str; - (my $events, $left-overs) = self!parse: $str; + (my $events, $left-overs) + = self!parse: $str, :server($s-name); + # say $events, $left-overs; for $events.grep: *.defined -> $e { - CATCH { warn .backtrace } - $!debug and debug-print $e, :in; - self!handle-event: $e; + say $e; + # CATCH { warn .backtrace } + # $!debug and debug-print $e, :in; + # self!handle-event: $e, $s-name; } } } $s-conf.close; }) } - say %!servers.values».; - await %!servers.values».; + await Promise.allof: %!servers.values».; } method send-cmd ($cmd, *@args) { @@ -70,21 +72,21 @@ method !prep-servers { } method !handle-event ($e) { - given $e.command { - when '001' { self!ssay: "JOIN @.channels[]"; } - when 'PING' { $e.reply } - when 'JOIN' { - say "Joined channel $e.channel()" - if $e.nick eq $!nick; - } - } - - my $method = 'irc-' ~ $e.^name.subst('IRC::Client::Message::', '') - .lc.subst: '::', '-', :g; - $!debug >= 2 and debug-print "emitting `$method`", :sys; - for self!plugs-that-can: $method { - last if ."$method"($e).^name eq 'IRC_FLAG_HANDLED'; - } + # given $e.command { + # when '001' { self!ssay: "JOIN @.channels[]", :server($e.server); } + # when 'PING' { $e.reply } + # when 'JOIN' { + # say "Joined channel $e.channel()" + # if $e.nick eq $!nick; + # } + # } + # + # my $method = 'irc-' ~ $e.^name.subst('IRC::Client::Message::', '') + # .lc.subst: '::', '-', :g; + # $!debug >= 2 and debug-print "emitting `$method`", :sys; + # for self!plugs-that-can: $method { + # last if ."$method"($e).^name eq 'IRC_FLAG_HANDLED'; + # } } method !plugs-that-can ($method) { @@ -92,22 +94,24 @@ method !plugs-that-can ($method) { } method !ssay (Str:D $msg, :$server = '*') { + return; $!debug and debug-print $msg, :out; %!servers{ $server }.print("$msg\n"); self; } -method !parse (Str:D $str) { +method !parse (Str:D $str, :$server) { return |IRC::Client::Grammar.parse( $str, actions => IRC::Client::Grammar::Actions.new( irc => self, - server => 'dummy', + server => $server, ), ).made; } sub debug-print (Str(Any) $str, :$in, :$out, :$sys) { + return; state &colored = try { require Terminal::ANSIColor; &colored -- cgit v1.1