From cb0a6cace8871d17c9701edc1ccba26d1e6e0bfe Mon Sep 17 00:00:00 2001 From: Zoffix Znet Date: Sat, 4 Jun 2016 10:32:49 -0400 Subject: Wtf --- lib/IRC/Client/Grammar/Actions.pm6 | 34 +++++++++++++++++++++++++++++----- 1 file changed, 29 insertions(+), 5 deletions(-) (limited to 'lib/IRC/Client/Grammar/Actions.pm6') diff --git a/lib/IRC/Client/Grammar/Actions.pm6 b/lib/IRC/Client/Grammar/Actions.pm6 index 74ae4e8..3e190cd 100644 --- a/lib/IRC/Client/Grammar/Actions.pm6 +++ b/lib/IRC/Client/Grammar/Actions.pm6 @@ -1,22 +1,28 @@ unit class IRC::Client::Grammar::Actions; +use IRC::Client::Message::Numeric; + +has $.irc; +has $.server; + method TOP ($/) { $/.make: ($ยป.made, $) } + method left-overs ($/) { $/.made: $/.defined ?? !$/ !! ''; } method message ($/) { + my %args; my $pref = $/; - my %args = command => ~$/; for qw/nick user host/ { $pref{$_}.defined or next; - %args{$_} = $pref{$_}.Str; + %args{$_} = ~$pref{$_}; } %args = ~$pref if $pref.defined; - my $p = $/; + my $p = $; - for ^100 { # bail out after 100 iterations; we're stuck + loop { if ( $p.defined ) { %args.append: ~$p; } @@ -27,5 +33,23 @@ method message ($/) { $p = $p; } - $/.make: %args; + my %msg-args = + irc => $!irc, + nick => %args, + username => %args, + host => %args, + usermask => "%args!%args@%args", + server => $!server; + + my $msg; + given ~$ { + when /^ ([0..9]**3) $/ { + $msg = IRC::Client::Message::Numeric.new: + :command( $ ), + :args( %args ), + |%msg-args; + } + } + + $/.make: $msg; } -- cgit v1.1