From 3f65d48264430428a2165f6a9f5a4e16f823f6b8 Mon Sep 17 00:00:00 2001 From: Zoffix Znet Date: Thu, 19 May 2016 19:49:39 -0400 Subject: Start new design docs --- lib/IRC/Client/Plugin.pm6 | 3 --- lib/IRC/Client/Plugin/Debugger.pm6 | 8 -------- lib/IRC/Client/Plugin/PingPong.pm6 | 2 -- 3 files changed, 13 deletions(-) delete mode 100644 lib/IRC/Client/Plugin.pm6 delete mode 100644 lib/IRC/Client/Plugin/Debugger.pm6 delete mode 100644 lib/IRC/Client/Plugin/PingPong.pm6 (limited to 'lib/IRC/Client') diff --git a/lib/IRC/Client/Plugin.pm6 b/lib/IRC/Client/Plugin.pm6 deleted file mode 100644 index d73d7bd..0000000 --- a/lib/IRC/Client/Plugin.pm6 +++ /dev/null @@ -1,3 +0,0 @@ -constant IRC_HANDLED = "irc plugin handled \x1"; -constant IRC_NOT_HANDLED = "irc plugin not-handled \x2"; -unit class IRC::Client::Plugin; diff --git a/lib/IRC/Client/Plugin/Debugger.pm6 b/lib/IRC/Client/Plugin/Debugger.pm6 deleted file mode 100644 index 13b1461..0000000 --- a/lib/IRC/Client/Plugin/Debugger.pm6 +++ /dev/null @@ -1,8 +0,0 @@ -use Data::Dump; -use IRC::Client::Plugin; -unit class IRC::Client::Plugin::Debugger is IRC::Client::Plugin; - -method irc-all-events ($irc, $e) { - say Dump $e, :indent(4); - return IRC_NOT_HANDLED; -} diff --git a/lib/IRC/Client/Plugin/PingPong.pm6 b/lib/IRC/Client/Plugin/PingPong.pm6 deleted file mode 100644 index 2651fd6..0000000 --- a/lib/IRC/Client/Plugin/PingPong.pm6 +++ /dev/null @@ -1,2 +0,0 @@ -unit class IRC::Client::Plugin::PingPong; -method irc-ping ($irc, $e) { $irc.ssay("PONG {$irc.nick} $e[0]") } -- cgit v1.1 From 0daa494480f7abe37a6e593c6238811009b7b914 Mon Sep 17 00:00:00 2001 From: Zoffix Znet Date: Fri, 3 Jun 2016 07:01:14 -0400 Subject: Start rewrite --- lib/IRC/Client/Grammar.pm6 | 21 +++++++++++++++++++++ lib/IRC/Client/Grammar/Actions.pm6 | 31 +++++++++++++++++++++++++++++++ 2 files changed, 52 insertions(+) create mode 100644 lib/IRC/Client/Grammar.pm6 create mode 100644 lib/IRC/Client/Grammar/Actions.pm6 (limited to 'lib/IRC/Client') diff --git a/lib/IRC/Client/Grammar.pm6 b/lib/IRC/Client/Grammar.pm6 new file mode 100644 index 0000000..255528a --- /dev/null +++ b/lib/IRC/Client/Grammar.pm6 @@ -0,0 +1,21 @@ +unit grammar IRC::Client::Grammar; +token TOP { + } +token leftovers { \N* } +token SPACE { ' '+ } +token message { [':' ]? \n } + token prefix { + [ || ['!' ]? ['@' ]? ] + > + } + token servername { } + token nick { [ | | ]* } + token user { <-[\ \x0\r\n]>+? | '@']>} + token host { <-[\s!@]>+ } + token command { + | **3 } + token params { * [ ':' | ]? } + token middle { <-[:\ \x0\r\n]> <-[\ \x0\r\n]>* } + token trailing { <-[\x0\r\n]>* } + + token letter { <[a..zA..Z]> } + token number { <[0..9]> } + token special { <[-_\[\]\\`^{}]> } diff --git a/lib/IRC/Client/Grammar/Actions.pm6 b/lib/IRC/Client/Grammar/Actions.pm6 new file mode 100644 index 0000000..74ae4e8 --- /dev/null +++ b/lib/IRC/Client/Grammar/Actions.pm6 @@ -0,0 +1,31 @@ +unit class IRC::Client::Grammar::Actions; + +method TOP ($/) { $/.make: ($».made, $) } +method left-overs ($/) { + $/.made: $/.defined ?? !$/ !! ''; +} + +method message ($/) { + my $pref = $/; + my %args = command => ~$/; + for qw/nick user host/ { + $pref{$_}.defined or next; + %args{$_} = $pref{$_}.Str; + } + %args = ~$pref if $pref.defined; + + my $p = $/; + + for ^100 { # bail out after 100 iterations; we're stuck + if ( $p.defined ) { + %args.append: ~$p; + } + if ( $p.defined ) { + %args.append: ~$p; + last; + } + $p = $p; + } + + $/.make: %args; +} -- cgit v1.1 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.pm6 | 6 +++--- lib/IRC/Client/Grammar/Actions.pm6 | 34 +++++++++++++++++++++++++++++----- lib/IRC/Client/Message.pm6 | 9 +++++++++ lib/IRC/Client/Message/Numeric.pm6 | 4 ++++ 4 files changed, 45 insertions(+), 8 deletions(-) create mode 100644 lib/IRC/Client/Message.pm6 create mode 100644 lib/IRC/Client/Message/Numeric.pm6 (limited to 'lib/IRC/Client') diff --git a/lib/IRC/Client/Grammar.pm6 b/lib/IRC/Client/Grammar.pm6 index 255528a..a258e56 100644 --- a/lib/IRC/Client/Grammar.pm6 +++ b/lib/IRC/Client/Grammar.pm6 @@ -9,12 +9,12 @@ token message { [':' ]? \n } } token servername { } token nick { [ | | ]* } - token user { <-[\ \x0\r\n]>+? | '@']>} + token user { <-[\ \x[0]\r\n]>+? | '@']>} token host { <-[\s!@]>+ } token command { + | **3 } token params { * [ ':' | ]? } - token middle { <-[:\ \x0\r\n]> <-[\ \x0\r\n]>* } - token trailing { <-[\x0\r\n]>* } + token middle { <-[:\ \x[0]\r\n]> <-[\ \x[0]\r\n]>* } + token trailing { <-[\x[0]\r\n]>* } token letter { <[a..zA..Z]> } token number { <[0..9]> } 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; } diff --git a/lib/IRC/Client/Message.pm6 b/lib/IRC/Client/Message.pm6 new file mode 100644 index 0000000..6670baa --- /dev/null +++ b/lib/IRC/Client/Message.pm6 @@ -0,0 +1,9 @@ +unit role IRC::Client::Message; + +has $.irc; +has $.nick; +has $.username; +has $.host; +has $.usermask; +has $.server; +has $.command; diff --git a/lib/IRC/Client/Message/Numeric.pm6 b/lib/IRC/Client/Message/Numeric.pm6 new file mode 100644 index 0000000..c57c3c2 --- /dev/null +++ b/lib/IRC/Client/Message/Numeric.pm6 @@ -0,0 +1,4 @@ +use IRC::Client::Message; +unit role IRC::Client::Message::Numeric does IRC::Client::Message; + +has @.args; -- cgit v1.1 From 791d7981cff0cd3a85fdd504f410a7c9833272dc Mon Sep 17 00:00:00 2001 From: Zoffix Znet Date: Sat, 4 Jun 2016 15:16:43 -0400 Subject: More stuff --- lib/IRC/Client/Grammar/Actions.pm6 | 33 +++++++++++++++++---------------- lib/IRC/Client/Message.pm6 | 14 +++++++------- lib/IRC/Client/Message/Numeric.pm6 | 2 ++ 3 files changed, 26 insertions(+), 23 deletions(-) (limited to 'lib/IRC/Client') diff --git a/lib/IRC/Client/Grammar/Actions.pm6 b/lib/IRC/Client/Grammar/Actions.pm6 index 3e190cd..54943bd 100644 --- a/lib/IRC/Client/Grammar/Actions.pm6 +++ b/lib/IRC/Client/Grammar/Actions.pm6 @@ -5,23 +5,23 @@ use IRC::Client::Message::Numeric; has $.irc; has $.server; -method TOP ($/) { $/.make: ($».made, $) } - -method left-overs ($/) { - $/.made: $/.defined ?? !$/ !! ''; +method TOP ($/) { + $/.make: ( + $».made, + ~( $ // '' ), + ); } -method message ($/) { +method message ($match) { my %args; - my $pref = $/; + my $pref = $match; for qw/nick user host/ { $pref{$_}.defined or next; %args{$_} = ~$pref{$_}; } %args = ~$pref if $pref.defined; - my $p = $; - + my $p = $match; loop { if ( $p.defined ) { %args.append: ~$p; @@ -30,26 +30,27 @@ method message ($/) { %args.append: ~$p; last; } + last unless $p.defined; $p = $p; } my %msg-args = irc => $!irc, - nick => %args, - username => %args, - host => %args, - usermask => "%args!%args@%args", + nick => %args//'', + username => %args//'', + host => %args//'', server => $!server; + . = . ~ '!' ~ . ~ '@' ~ . given %msg-args; my $msg; - given ~$ { - when /^ ([0..9]**3) $/ { + given ~$match { + when /^ $=(<[0..9]>**3) $/ { $msg = IRC::Client::Message::Numeric.new: - :command( $ ), + :command( ~$ ), :args( %args ), |%msg-args; } } - $/.make: $msg; + $match.make: $msg; } diff --git a/lib/IRC/Client/Message.pm6 b/lib/IRC/Client/Message.pm6 index 6670baa..69e7c82 100644 --- a/lib/IRC/Client/Message.pm6 +++ b/lib/IRC/Client/Message.pm6 @@ -1,9 +1,9 @@ unit role IRC::Client::Message; -has $.irc; -has $.nick; -has $.username; -has $.host; -has $.usermask; -has $.server; -has $.command; +has $.irc is required; +has Str:D $.nick is required; +has Str:D $.username is required; +has Str:D $.host is required; +has Str:D $.usermask is required; +has Str:D $.command is required; +has Str:D $.server is required; diff --git a/lib/IRC/Client/Message/Numeric.pm6 b/lib/IRC/Client/Message/Numeric.pm6 index c57c3c2..38e9a26 100644 --- a/lib/IRC/Client/Message/Numeric.pm6 +++ b/lib/IRC/Client/Message/Numeric.pm6 @@ -2,3 +2,5 @@ use IRC::Client::Message; unit role IRC::Client::Message::Numeric does IRC::Client::Message; has @.args; + +method Str { "$.command @.args[]" } -- cgit v1.1 From 5a2196b2c8f2ac2eacb3ddaf40b3e75b9c38bb62 Mon Sep 17 00:00:00 2001 From: Zoffix Znet Date: Sat, 4 Jun 2016 19:18:31 -0400 Subject: Stuff --- lib/IRC/Client/Grammar/Actions.pm6 | 74 +++++++++++++++++++++++++----- lib/IRC/Client/Message.pm6 | 42 +++++++++++++---- lib/IRC/Client/Message/Numeric.pm6 | 4 -- lib/IRC/Client/Message/Privmsg.pm6 | 4 ++ lib/IRC/Client/Message/Privmsg/Channel.pm6 | 5 ++ lib/IRC/Client/Message/Privmsg/Me.pm6 | 2 + lib/IRC/Client/Message/Unknown.pm6 | 4 ++ 7 files changed, 111 insertions(+), 24 deletions(-) create mode 100644 lib/IRC/Client/Message/Privmsg.pm6 create mode 100644 lib/IRC/Client/Message/Privmsg/Channel.pm6 create mode 100644 lib/IRC/Client/Message/Privmsg/Me.pm6 create mode 100644 lib/IRC/Client/Message/Unknown.pm6 (limited to 'lib/IRC/Client') diff --git a/lib/IRC/Client/Grammar/Actions.pm6 b/lib/IRC/Client/Grammar/Actions.pm6 index 54943bd..6ebe33d 100644 --- a/lib/IRC/Client/Grammar/Actions.pm6 +++ b/lib/IRC/Client/Grammar/Actions.pm6 @@ -1,6 +1,6 @@ unit class IRC::Client::Grammar::Actions; -use IRC::Client::Message::Numeric; +use IRC::Client::Message; has $.irc; has $.server; @@ -23,9 +23,8 @@ method message ($match) { my $p = $match; loop { - if ( $p.defined ) { - %args.append: ~$p; - } + %args.append: ~$p if $p.defined; + if ( $p.defined ) { %args.append: ~$p; last; @@ -35,22 +34,75 @@ method message ($match) { } my %msg-args = + command => $match.uc, + args => %args, + host => %args//'', irc => $!irc, nick => %args//'', - username => %args//'', - host => %args//'', - server => $!server; + server => $!server, + username => %args//''; . = . ~ '!' ~ . ~ '@' ~ . given %msg-args; my $msg; - given ~$match { + given %msg-args { when /^ $=(<[0..9]>**3) $/ { - $msg = IRC::Client::Message::Numeric.new: - :command( ~$ ), - :args( %args ), + $msg = IRC::Client::Message::Numeric.new: |%msg-args; + } + when 'JOIN' { + $msg = IRC::Client::Message::Join.new: + :channel( %args[0] ), |%msg-args; } + when 'NOTICE' { $msg = msg-notice %args, %msg-args } + when 'MODE' { $msg = msg-mode %args, %msg-args } + when 'PING' { $msg = IRC::Client::Message::Ping.new: |%msg-args; } + when 'PRIVMSG' { $msg = msg-privmsg %args, %msg-args } + default { $msg = IRC::Client::Message::Unknown.new: |%msg-args } } $match.make: $msg; } + +sub msg-privmsg (%args, %msg-args) { + %args[0] ~~ /^<[#&]>/ + and return IRC::Client::Message::Privmsg::Channel.new: + :channel( %args[0] ), + :text( %args[1] ), + |%msg-args; + + return IRC::Client::Message::Privmsg::Me.new: + :text( %args[1] ), + |%msg-args; +} + +sub msg-notice (%args, %msg-args) { + %args[0] ~~ /^<[#&]>/ + and return IRC::Client::Message::Notice::Channel.new: + :channel( %args[0] ), + :text( %args[1] ), + |%msg-args; + + return IRC::Client::Message::Notice::Me.new: + :text( %args[1] ), + |%msg-args; +} + +sub msg-mode (%args, %msg-args) { + if %args[0] ~~ /^<[#&]>/ { + my @modes; + for %args[1..*-1].join.comb: /\S/ { + state $sign; + /<[+-]>/ and $sign = $_ and next; + @modes.push: $sign => $_; + }; + return IRC::Client::Message::Mode::Channel.new: + :channel( %args[0] ), + :modes( @modes ), + |%msg-args; + } + else { + return IRC::Client::Message::Mode::Me.new: + :modes( %args[1..*-1].join.comb: /<[a..zA..Z]>/ ), + |%msg-args; + } +} diff --git a/lib/IRC/Client/Message.pm6 b/lib/IRC/Client/Message.pm6 index 69e7c82..4abb718 100644 --- a/lib/IRC/Client/Message.pm6 +++ b/lib/IRC/Client/Message.pm6 @@ -1,9 +1,33 @@ -unit role IRC::Client::Message; - -has $.irc is required; -has Str:D $.nick is required; -has Str:D $.username is required; -has Str:D $.host is required; -has Str:D $.usermask is required; -has Str:D $.command is required; -has Str:D $.server is required; +unit package IRC::Client::Message; + +role IRC::Client::Message { + has $.irc is required; + has Str:D $.nick is required; + has Str:D $.username is required; + has Str:D $.host is required; + has Str:D $.usermask is required; + has Str:D $.command is required; + has Str:D $.server is required; + has @.args is required; + + method Str { "$.command @.args[]" } +} + +constant M = IRC::Client::Message; + +role Join does M { has $.channel; } +role Notice does M { has $.text; } +role Notice::Channel does Notice { has $.channel; } +role Notice::Me does Notice { } +role Mode does M { has @.modes; } +role Mode::Channel does Mode { has $.channel; } +role Mode::Me does Mode { } +role Numeric does M { } +role Privmsg does M { has $.text; } +role Privmsg::Channel does Privmsg { has $.channel; } +role Privmsg::Me does Privmsg { } +role Unknown does M { method Str { "❚⚠❚ $.command @.args[]" } } + +role Ping does M { + method reply { $.irc.send-cmd: 'PONG', @.args; } +} diff --git a/lib/IRC/Client/Message/Numeric.pm6 b/lib/IRC/Client/Message/Numeric.pm6 index 38e9a26..c059eb4 100644 --- a/lib/IRC/Client/Message/Numeric.pm6 +++ b/lib/IRC/Client/Message/Numeric.pm6 @@ -1,6 +1,2 @@ use IRC::Client::Message; unit role IRC::Client::Message::Numeric does IRC::Client::Message; - -has @.args; - -method Str { "$.command @.args[]" } diff --git a/lib/IRC/Client/Message/Privmsg.pm6 b/lib/IRC/Client/Message/Privmsg.pm6 new file mode 100644 index 0000000..31efdea --- /dev/null +++ b/lib/IRC/Client/Message/Privmsg.pm6 @@ -0,0 +1,4 @@ +use IRC::Client::Message; +unit role IRC::Client::Message::Privmsg does IRC::Client::Message; + +has $.what; diff --git a/lib/IRC/Client/Message/Privmsg/Channel.pm6 b/lib/IRC/Client/Message/Privmsg/Channel.pm6 new file mode 100644 index 0000000..36cf3d6 --- /dev/null +++ b/lib/IRC/Client/Message/Privmsg/Channel.pm6 @@ -0,0 +1,5 @@ +use IRC::Client::Message::Privmsg; +unit role IRC::Client::Message::Privmsg::Channel + does IRC::Client::Message::Privmsg; + +has $.channel; diff --git a/lib/IRC/Client/Message/Privmsg/Me.pm6 b/lib/IRC/Client/Message/Privmsg/Me.pm6 new file mode 100644 index 0000000..1ff31ba --- /dev/null +++ b/lib/IRC/Client/Message/Privmsg/Me.pm6 @@ -0,0 +1,2 @@ +use IRC::Client::Message::Privmsg; +unit role IRC::Client::Message::Privmsg::Me does IRC::Client::Message::Privmsg; diff --git a/lib/IRC/Client/Message/Unknown.pm6 b/lib/IRC/Client/Message/Unknown.pm6 new file mode 100644 index 0000000..91baa79 --- /dev/null +++ b/lib/IRC/Client/Message/Unknown.pm6 @@ -0,0 +1,4 @@ +use IRC::Client::Message; +unit role IRC::Client::Message::Unknown does IRC::Client::Message; + +method Str { "❚⚠❚ $.command @.args[]" } -- cgit v1.1 From c56f8b4359f2730bb9e8bccd40bf2c9fa840f433 Mon Sep 17 00:00:00 2001 From: Zoffix Znet Date: Sat, 4 Jun 2016 23:20:01 -0400 Subject: First working rewrite --- lib/IRC/Client/Grammar.pm6 | 4 ++-- lib/IRC/Client/Grammar/Actions.pm6 | 18 ++++++++++++------ lib/IRC/Client/Message.pm6 | 25 ++++++++++++++++++++----- lib/IRC/Client/Plugin.pm6 | 4 ++++ 4 files changed, 38 insertions(+), 13 deletions(-) create mode 100644 lib/IRC/Client/Plugin.pm6 (limited to 'lib/IRC/Client') diff --git a/lib/IRC/Client/Grammar.pm6 b/lib/IRC/Client/Grammar.pm6 index a258e56..feec9fd 100644 --- a/lib/IRC/Client/Grammar.pm6 +++ b/lib/IRC/Client/Grammar.pm6 @@ -1,6 +1,6 @@ unit grammar IRC::Client::Grammar; -token TOP { + } -token leftovers { \N* } +token TOP { + } +token left-overs { \N* } token SPACE { ' '+ } token message { [':' ]? \n } token prefix { diff --git a/lib/IRC/Client/Grammar/Actions.pm6 b/lib/IRC/Client/Grammar/Actions.pm6 index 6ebe33d..cf702f8 100644 --- a/lib/IRC/Client/Grammar/Actions.pm6 +++ b/lib/IRC/Client/Grammar/Actions.pm6 @@ -40,8 +40,8 @@ method message ($match) { irc => $!irc, nick => %args//'', server => $!server, + usermask => ~($match//''), username => %args//''; - . = . ~ '!' ~ . ~ '@' ~ . given %msg-args; my $msg; given %msg-args { @@ -53,11 +53,17 @@ method message ($match) { :channel( %args[0] ), |%msg-args; } - when 'NOTICE' { $msg = msg-notice %args, %msg-args } - when 'MODE' { $msg = msg-mode %args, %msg-args } - when 'PING' { $msg = IRC::Client::Message::Ping.new: |%msg-args; } - when 'PRIVMSG' { $msg = msg-privmsg %args, %msg-args } - default { $msg = IRC::Client::Message::Unknown.new: |%msg-args } + when 'PART' { + $msg = IRC::Client::Message::Part.new: + :channel( %args[0] ), + |%msg-args; + } + when 'NOTICE' { $msg = msg-notice %args, %msg-args } + when 'MODE' { $msg = msg-mode %args, %msg-args } + when 'PING' { $msg = IRC::Client::Message::Ping.new: |%msg-args } + when 'PRIVMSG' { $msg = msg-privmsg %args, %msg-args } + when 'QUIT' { $msg = IRC::Client::Message::Quit.new: |%msg-args } + default { $msg = IRC::Client::Message::Unknown.new: |%msg-args } } $match.make: $msg; diff --git a/lib/IRC/Client/Message.pm6 b/lib/IRC/Client/Message.pm6 index 4abb718..1b38d23 100644 --- a/lib/IRC/Client/Message.pm6 +++ b/lib/IRC/Client/Message.pm6 @@ -10,7 +10,7 @@ role IRC::Client::Message { has Str:D $.server is required; has @.args is required; - method Str { "$.command @.args[]" } + method Str { ":$!usermask $!command @!args[]" } } constant M = IRC::Client::Message; @@ -23,11 +23,26 @@ role Mode does M { has @.modes; } role Mode::Channel does Mode { has $.channel; } role Mode::Me does Mode { } role Numeric does M { } -role Privmsg does M { has $.text; } -role Privmsg::Channel does Privmsg { has $.channel; } -role Privmsg::Me does Privmsg { } -role Unknown does M { method Str { "❚⚠❚ $.command @.args[]" } } +role Part does M { has $.channel; } +role Quit does M { } +role Unknown does M { + method Str { "❚⚠❚ :$.usermask $.command @.args[]" } +} role Ping does M { method reply { $.irc.send-cmd: 'PONG', @.args; } } + +role Privmsg does M { has $.text; } +role Privmsg::Channel does Privmsg { + has $.channel; + method reply ($text, :$where) { + $.irc.send-cmd: 'PRIVMSG', $where // $.channel, $text; + } +} +role Privmsg::Me does Privmsg { + method reply ($text, :$where) { + $where //= $.nick; + $.irc.send-cmd: 'PRIVMSG', $where, $text; + } +} diff --git a/lib/IRC/Client/Plugin.pm6 b/lib/IRC/Client/Plugin.pm6 new file mode 100644 index 0000000..2493c3f --- /dev/null +++ b/lib/IRC/Client/Plugin.pm6 @@ -0,0 +1,4 @@ +unit role IRC::Client::Plugin; + +has $.IRC_HANDLED = my class IRC_FLAG_HANDLED {}; +has $.IRC_NOT_HANDLED = my class IRC_FLAG_NOT_HANDLED {}; -- cgit v1.1 From 6f3f00300a122e33ca1050fdb42cccda39fe9ba4 Mon Sep 17 00:00:00 2001 From: Zoffix Znet Date: Sun, 5 Jun 2016 10:14:38 -0400 Subject: Z --- lib/IRC/Client/Message.pm6 | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) (limited to 'lib/IRC/Client') diff --git a/lib/IRC/Client/Message.pm6 b/lib/IRC/Client/Message.pm6 index 1b38d23..e7478de 100644 --- a/lib/IRC/Client/Message.pm6 +++ b/lib/IRC/Client/Message.pm6 @@ -37,12 +37,12 @@ role Privmsg does M { has $.text; } role Privmsg::Channel does Privmsg { has $.channel; method reply ($text, :$where) { - $.irc.send-cmd: 'PRIVMSG', $where // $.channel, $text; + $.irc.send-cmd: 'PRIVMSG', $where // $.channel, $text, :$.server; } } role Privmsg::Me does Privmsg { method reply ($text, :$where) { $where //= $.nick; - $.irc.send-cmd: 'PRIVMSG', $where, $text; + $.irc.send-cmd: 'PRIVMSG', $where, $text, :$.server; } } -- cgit v1.1 From 16056e8af837a4d982d23728adf24b4cc406576c Mon Sep 17 00:00:00 2001 From: Zoffix Znet Date: Sun, 5 Jun 2016 11:17:15 -0400 Subject: Bug commit --- lib/IRC/Client/Message.pm6 | 8 ++++---- 1 file changed, 4 insertions(+), 4 deletions(-) (limited to 'lib/IRC/Client') diff --git a/lib/IRC/Client/Message.pm6 b/lib/IRC/Client/Message.pm6 index e7478de..9a51803 100644 --- a/lib/IRC/Client/Message.pm6 +++ b/lib/IRC/Client/Message.pm6 @@ -8,9 +8,9 @@ role IRC::Client::Message { has Str:D $.usermask is required; has Str:D $.command is required; has Str:D $.server is required; - has @.args is required; + has $.args is required; - method Str { ":$!usermask $!command @!args[]" } + method Str { ":$!usermask $!command $!args[]" } } constant M = IRC::Client::Message; @@ -26,11 +26,11 @@ role Numeric does M { } role Part does M { has $.channel; } role Quit does M { } role Unknown does M { - method Str { "❚⚠❚ :$.usermask $.command @.args[]" } + method Str { "❚⚠❚ :$.usermask $.command $.args[]" } } role Ping does M { - method reply { $.irc.send-cmd: 'PONG', @.args; } + method reply { $.irc.send-cmd: 'PONG', $.args, :$.server; } } role Privmsg does M { has $.text; } -- cgit v1.1 From 140959e4f170d732d990e69b9a0ca129b89e3ac4 Mon Sep 17 00:00:00 2001 From: Zoffix Znet Date: Sun, 5 Jun 2016 21:39:47 -0400 Subject: First working test --- lib/IRC/Client/Grammar/Actions.pm6 | 5 +++++ lib/IRC/Client/Message.pm6 | 1 + lib/IRC/Client/Message/Numeric.pm6 | 2 -- lib/IRC/Client/Message/Privmsg.pm6 | 4 ---- lib/IRC/Client/Message/Privmsg/Channel.pm6 | 5 ----- lib/IRC/Client/Message/Privmsg/Me.pm6 | 2 -- lib/IRC/Client/Message/Unknown.pm6 | 4 ---- 7 files changed, 6 insertions(+), 17 deletions(-) delete mode 100644 lib/IRC/Client/Message/Numeric.pm6 delete mode 100644 lib/IRC/Client/Message/Privmsg.pm6 delete mode 100644 lib/IRC/Client/Message/Privmsg/Channel.pm6 delete mode 100644 lib/IRC/Client/Message/Privmsg/Me.pm6 delete mode 100644 lib/IRC/Client/Message/Unknown.pm6 (limited to 'lib/IRC/Client') diff --git a/lib/IRC/Client/Grammar/Actions.pm6 b/lib/IRC/Client/Grammar/Actions.pm6 index cf702f8..7c16227 100644 --- a/lib/IRC/Client/Grammar/Actions.pm6 +++ b/lib/IRC/Client/Grammar/Actions.pm6 @@ -58,6 +58,11 @@ method message ($match) { :channel( %args[0] ), |%msg-args; } + when 'NICK' { + $msg = IRC::Client::Message::Nick.new: + :new-nick( %args[0] ), + |%msg-args; + } when 'NOTICE' { $msg = msg-notice %args, %msg-args } when 'MODE' { $msg = msg-mode %args, %msg-args } when 'PING' { $msg = IRC::Client::Message::Ping.new: |%msg-args } diff --git a/lib/IRC/Client/Message.pm6 b/lib/IRC/Client/Message.pm6 index 9a51803..74261c9 100644 --- a/lib/IRC/Client/Message.pm6 +++ b/lib/IRC/Client/Message.pm6 @@ -22,6 +22,7 @@ role Notice::Me does Notice { } role Mode does M { has @.modes; } role Mode::Channel does Mode { has $.channel; } role Mode::Me does Mode { } +role Nick does M { has $.new-nick; } role Numeric does M { } role Part does M { has $.channel; } role Quit does M { } diff --git a/lib/IRC/Client/Message/Numeric.pm6 b/lib/IRC/Client/Message/Numeric.pm6 deleted file mode 100644 index c059eb4..0000000 --- a/lib/IRC/Client/Message/Numeric.pm6 +++ /dev/null @@ -1,2 +0,0 @@ -use IRC::Client::Message; -unit role IRC::Client::Message::Numeric does IRC::Client::Message; diff --git a/lib/IRC/Client/Message/Privmsg.pm6 b/lib/IRC/Client/Message/Privmsg.pm6 deleted file mode 100644 index 31efdea..0000000 --- a/lib/IRC/Client/Message/Privmsg.pm6 +++ /dev/null @@ -1,4 +0,0 @@ -use IRC::Client::Message; -unit role IRC::Client::Message::Privmsg does IRC::Client::Message; - -has $.what; diff --git a/lib/IRC/Client/Message/Privmsg/Channel.pm6 b/lib/IRC/Client/Message/Privmsg/Channel.pm6 deleted file mode 100644 index 36cf3d6..0000000 --- a/lib/IRC/Client/Message/Privmsg/Channel.pm6 +++ /dev/null @@ -1,5 +0,0 @@ -use IRC::Client::Message::Privmsg; -unit role IRC::Client::Message::Privmsg::Channel - does IRC::Client::Message::Privmsg; - -has $.channel; diff --git a/lib/IRC/Client/Message/Privmsg/Me.pm6 b/lib/IRC/Client/Message/Privmsg/Me.pm6 deleted file mode 100644 index 1ff31ba..0000000 --- a/lib/IRC/Client/Message/Privmsg/Me.pm6 +++ /dev/null @@ -1,2 +0,0 @@ -use IRC::Client::Message::Privmsg; -unit role IRC::Client::Message::Privmsg::Me does IRC::Client::Message::Privmsg; diff --git a/lib/IRC/Client/Message/Unknown.pm6 b/lib/IRC/Client/Message/Unknown.pm6 deleted file mode 100644 index 91baa79..0000000 --- a/lib/IRC/Client/Message/Unknown.pm6 +++ /dev/null @@ -1,4 +0,0 @@ -use IRC::Client::Message; -unit role IRC::Client::Message::Unknown does IRC::Client::Message; - -method Str { "❚⚠❚ $.command @.args[]" } -- cgit v1.1 From 18615cc9bb33801fbde2716513071e7b32af2ab2 Mon Sep 17 00:00:00 2001 From: Zoffix Znet Date: Sun, 24 Jul 2016 16:20:12 -0400 Subject: moar work --- lib/IRC/Client/Grammar/Actions.pm6 | 2 +- lib/IRC/Client/Message.pm6 | 35 ++++++++++++++++++++++++++++------- lib/IRC/Client/Plugin.pm6 | 4 ---- 3 files changed, 29 insertions(+), 12 deletions(-) delete mode 100644 lib/IRC/Client/Plugin.pm6 (limited to 'lib/IRC/Client') diff --git a/lib/IRC/Client/Grammar/Actions.pm6 b/lib/IRC/Client/Grammar/Actions.pm6 index 7c16227..b1fcc53 100644 --- a/lib/IRC/Client/Grammar/Actions.pm6 +++ b/lib/IRC/Client/Grammar/Actions.pm6 @@ -45,7 +45,7 @@ method message ($match) { my $msg; given %msg-args { - when /^ $=(<[0..9]>**3) $/ { + when /^ <[0..9]>**3 $/ { $msg = IRC::Client::Message::Numeric.new: |%msg-args; } when 'JOIN' { diff --git a/lib/IRC/Client/Message.pm6 b/lib/IRC/Client/Message.pm6 index 74261c9..84eba2c 100644 --- a/lib/IRC/Client/Message.pm6 +++ b/lib/IRC/Client/Message.pm6 @@ -16,9 +16,6 @@ role IRC::Client::Message { constant M = IRC::Client::Message; role Join does M { has $.channel; } -role Notice does M { has $.text; } -role Notice::Channel does Notice { has $.channel; } -role Notice::Me does Notice { } role Mode does M { has @.modes; } role Mode::Channel does Mode { has $.channel; } role Mode::Me does Mode { } @@ -34,16 +31,40 @@ role Ping does M { method reply { $.irc.send-cmd: 'PONG', $.args, :$.server; } } -role Privmsg does M { has $.text; } +role Privmsg does M { + has $.text is rw; + has Bool $.replied is rw = False; + method Str { $.text } +} role Privmsg::Channel does Privmsg { has $.channel; method reply ($text, :$where) { - $.irc.send-cmd: 'PRIVMSG', $where // $.channel, $text, :$.server; + $.irc.send-cmd: 'PRIVMSG', $where // $.channel, "$.nick, $text", + :$.server; } } role Privmsg::Me does Privmsg { method reply ($text, :$where) { - $where //= $.nick; - $.irc.send-cmd: 'PRIVMSG', $where, $text, :$.server; + $.irc.send-cmd: 'PRIVMSG', $where // $.nick, $text, :$.server; + } +} + +role Notice does M { + has $.text is rw; + has Bool $.replied is rw = False; + method Str { $.text } +} +role Notice::Channel does Notice { + has $.channel; + method reply ($text, :$where) { + $.irc.send-cmd: 'NOTICE', $where // $.channel, "$.nick, $text", + :$.server; + $.replied = True; + } +} +role Notice::Me does Notice { + method reply ($text, :$where) { + $.irc.send-cmd: 'NOTICE', $where // $.nick, $text, :$.server; + $.replied = True; } } diff --git a/lib/IRC/Client/Plugin.pm6 b/lib/IRC/Client/Plugin.pm6 deleted file mode 100644 index 2493c3f..0000000 --- a/lib/IRC/Client/Plugin.pm6 +++ /dev/null @@ -1,4 +0,0 @@ -unit role IRC::Client::Plugin; - -has $.IRC_HANDLED = my class IRC_FLAG_HANDLED {}; -has $.IRC_NOT_HANDLED = my class IRC_FLAG_NOT_HANDLED {}; -- cgit v1.1 From 226a5ccd074b8840ca83d50376f8b26b9d9ffd97 Mon Sep 17 00:00:00 2001 From: Zoffix Znet Date: Tue, 26 Jul 2016 08:53:29 -0400 Subject: More stuff --- lib/IRC/Client/Message.pm6 | 8 ++++---- 1 file changed, 4 insertions(+), 4 deletions(-) (limited to 'lib/IRC/Client') diff --git a/lib/IRC/Client/Message.pm6 b/lib/IRC/Client/Message.pm6 index 84eba2c..9559fd1 100644 --- a/lib/IRC/Client/Message.pm6 +++ b/lib/IRC/Client/Message.pm6 @@ -39,8 +39,8 @@ role Privmsg does M { role Privmsg::Channel does Privmsg { has $.channel; method reply ($text, :$where) { - $.irc.send-cmd: 'PRIVMSG', $where // $.channel, "$.nick, $text", - :$.server; + $.irc.send-cmd: 'PRIVMSG', $where // $.channel, $text, + :$.server, :prefix("$.nick, "); } } role Privmsg::Me does Privmsg { @@ -57,8 +57,8 @@ role Notice does M { role Notice::Channel does Notice { has $.channel; method reply ($text, :$where) { - $.irc.send-cmd: 'NOTICE', $where // $.channel, "$.nick, $text", - :$.server; + $.irc.send-cmd: 'NOTICE', $where // $.channel, $text, + :$.server, :prefix("$.nick, "); $.replied = True; } } -- cgit v1.1