aboutsummaryrefslogtreecommitdiff
path: root/lib/IRC/Client/Message.pm6
diff options
context:
space:
mode:
authorZoffix Znet <zoffixznet@users.noreply.github.com>2016-07-26 08:50:02 -0400
committerGitHub <noreply@github.com>2016-07-26 08:50:02 -0400
commite0478c07e2096d85e20764c08c83a3d16c002e94 (patch)
tree592510005886adaadb49848d289c5c712279ecee /lib/IRC/Client/Message.pm6
parente997c1b0b5ad796425abfc9f81b91947357172ce (diff)
parentcc19189ff6b74bea5211d521a59dbff0c71a0749 (diff)
Merge Rewrite 2.0 version into master
Old version should not be used anymore and 2.0 is ready to go, sans some bugs
Diffstat (limited to 'lib/IRC/Client/Message.pm6')
-rw-r--r--lib/IRC/Client/Message.pm670
1 files changed, 70 insertions, 0 deletions
diff --git a/lib/IRC/Client/Message.pm6 b/lib/IRC/Client/Message.pm6
new file mode 100644
index 0000000..9559fd1
--- /dev/null
+++ b/lib/IRC/Client/Message.pm6
@@ -0,0 +1,70 @@
+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 { ":$!usermask $!command $!args[]" }
+}
+
+constant M = IRC::Client::Message;
+
+role Join does M { has $.channel; }
+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 { }
+role Unknown does M {
+ method Str { "❚⚠❚ :$.usermask $.command $.args[]" }
+}
+
+role Ping does M {
+ method reply { $.irc.send-cmd: 'PONG', $.args, :$.server; }
+}
+
+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, :prefix("$.nick, ");
+ }
+}
+role Privmsg::Me does Privmsg {
+ method reply ($text, :$where) {
+ $.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, $text,
+ :$.server, :prefix("$.nick, ");
+ $.replied = True;
+ }
+}
+role Notice::Me does Notice {
+ method reply ($text, :$where) {
+ $.irc.send-cmd: 'NOTICE', $where // $.nick, $text, :$.server;
+ $.replied = True;
+ }
+}