diff options
-rw-r--r-- | lib/Matrix/Client/Room.pm6 | 24 | ||||
-rw-r--r-- | lib/Matrix/Response.pm6 | 6 |
2 files changed, 26 insertions, 4 deletions
diff --git a/lib/Matrix/Client/Room.pm6 b/lib/Matrix/Client/Room.pm6 index 72dfb62..3d6ecaa 100644 --- a/lib/Matrix/Client/Room.pm6 +++ b/lib/Matrix/Client/Room.pm6 @@ -82,15 +82,31 @@ method joined-members { } #| GET - /_matrix/client/r0/rooms/{roomId}/messages -method messages() { - my $res = $.get("/messages"); +method messages( + Str:D :$from!, Str :$to, + Str :$dir where * eq 'f'|'b' = 'f', + Int :$limit = 10, :%filter, + --> Matrix::Response::Messages +) { + my $res = $.get( + "/messages", :$from, :$to, :$dir, :$limit, :%filter + ); my $data = from-json($res.content); - return $data<chunk>.clone; + + my @messages = $data<chunk>.map(-> $ev { + Matrix::Response::RoomEvent.new(|$ev) + }); + + Matrix::Response::Messages.new( + start => $data<start>, + end => $data<end>, + messages => @messages + ) } #| GET - /_matrix/client/r0/rooms/{roomId}/members -method members(:$at, Str :$membership, Str :$not-membership) { +method members(:$at, Str :$membership, Str :$not-membership --> Seq) { my %query; %query<at> = $at with $at; diff --git a/lib/Matrix/Response.pm6 b/lib/Matrix/Response.pm6 index cc9e7a8..a0b2896 100644 --- a/lib/Matrix/Response.pm6 +++ b/lib/Matrix/Response.pm6 @@ -58,6 +58,12 @@ sub gather-events($room-id, $from) { } } +class Matrix::Response::Messages { + has $.start; + has $.end; + has Matrix::Response::RoomEvent @.messages; +} + class Matrix::Response::Sync { has Str $.next-batch; has Matrix::Response::Event @.presence; |