diff options
author | Matias Linares <matiaslina@gmail.com> | 2021-01-11 22:20:09 -0300 |
---|---|---|
committer | Matias Linares <matiaslina@gmail.com> | 2021-01-11 22:20:09 -0300 |
commit | 7be9fa68bef82a7576344a6e8cc1e51154c6b3bf (patch) | |
tree | d60908a75c60b55d4ea90f6079c2459f9cf56be9 /lib/Matrix/Client/Room.pm6 | |
parent | 9da9134f0b28c0e4c69537b54fd96dca3a66aaed (diff) | |
download | perl6-matrix-client-7be9fa68bef82a7576344a6e8cc1e51154c6b3bf.tar.gz |
Response & Exception refactor
Diffstat (limited to 'lib/Matrix/Client/Room.pm6')
-rw-r--r-- | lib/Matrix/Client/Room.pm6 | 190 |
1 files changed, 0 insertions, 190 deletions
diff --git a/lib/Matrix/Client/Room.pm6 b/lib/Matrix/Client/Room.pm6 deleted file mode 100644 index 3d6ecaa..0000000 --- a/lib/Matrix/Client/Room.pm6 +++ /dev/null @@ -1,190 +0,0 @@ -use JSON::Fast; -use Matrix::Client::Common; -use Matrix::Client::Requester; -use Matrix::Response; - -unit class Matrix::Client::Room does Matrix::Client::Requester; - -has $!name; -has $.id; - -submethod TWEAK { - $!url-prefix = "/rooms/$!id"; -} - -method !get-name() { - CATCH { - when X::Matrix::Response { - .code ~~ /M_NOT_FOUND/ - ?? ($!name = '') - !! fail - } - default { fail } - } - my $data = $.state('m.room.name'); - $!name = $data<name>; -} - -method name(--> Str) { - self!get-name; - $!name -} - -method fallback-name(--> Str) { - my @members = $.joined-members.kv.map( - -> $k, %v { - %v<display_name> // $k - } - ); - - $!name = do given @members.elems { - when 1 { @members.first } - when 2 { @members[0] ~ " and " ~ @members[1] } - when * > 2 { @members.first ~ " and {@members.elems - 1} others" } - default { "Empty room" } - }; -} - -#| GET - /_matrix/client/r0/rooms/{roomId}/aliases -method aliases(--> List) { - my %data = from-json($.get('/aliases').content); - %data<aliases>.List -} - -# Events - -## Getting events for a room - -#| GET - /_matrix/client/r0/rooms/{roomId}/event/{eventId} -method event(Str $event-id --> Matrix::Response::RoomEvent) { - my %data = from-json($.get("/event/$event-id").content); - Matrix::Response::RoomEvent.new(|%data) -} - -#| GET - /_matrix/client/r0/rooms/{roomId}/state -multi method state(--> Seq) { - my $data = from-json($.get('/state').content); - - gather for $data.List -> $event { - take Matrix::Response::StateEvent.new(:room-id($.id), |$event) - } -} - -#| GET - /_matrix/client/r0/rooms/{roomId}/state/{eventType}/{stateKey} -multi method state(Str $event-type, Str $state-key = "") { - from-json($.get("/state/$event-type/$state-key").content) -} - -#| GET - /_matrix/client/r0/rooms/{roomId}/joined_members -method joined-members { - my %data = from-json($.get("/joined_members").content); - %data<joined> -} - -#| GET - /_matrix/client/r0/rooms/{roomId}/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); - - - 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 --> Seq) { - my %query; - - %query<at> = $at with $at; - %query<membership> = $membership with $membership; - %query<not_membership> = $not-membership with $not-membership; - - my %data = from-json($.get('/members', |%query).content); - - gather for %data<chunk>.List -> $ev { - take Matrix::Response::MemberEvent.new(|$ev) - } -} - -## Sending events to a room - -#| PUT - /_matrix/client/r0/rooms/{roomId}/send/{eventType}/{txnId} -method send(Str $body!, Str :$type? = "m.text") { - $Matrix::Client::Common::TXN-ID++; - my $res = $.put( - "/send/m.room.message/{$Matrix::Client::Common::TXN-ID}", - msgtype => $type, body => $body - ); - - from-json($res.content)<event_id> -} - -#| PUT - /_matrix/client/r0/rooms/{roomId}/state/{eventType}/{stateKey} -method send-state(Str:D $event-type, :$state-key = "", *%args --> Str) { - my $res = $.put( - "/state/$event-type/$state-key", - |%args - ); - from-json($res.content)<event_id> -} - -# Room membership! - -## Joining rooms - -#| POST - /_matrix/client/r0/rooms/{roomId}/invite -method invite(Str $user-id) { - $.post('/invite', :$user-id) -} - -#| POST - /_matrix/client/r0/rooms/{roomId}/join -method join { - $.post('/join') -} - -## Leaving rooms - -#| POST - /_matrix/client/r0/rooms/{roomId}/leave -method leave { - $.post('/leave') -} - -#| POST - /_matrix/client/r0/rooms/{roomId}/forget -method forget { - $.post('/forget') -} - -#| POST - /_matrix/client/r0/rooms/{roomId}/kick -method kick(Str $user-id, Str $reason = "") { - $.post('/kick', :$user-id, :$reason) -} - -## Banning users - -#| POST - /_matrix/client/r0/rooms/{roomId}/ban -method ban(Str $user-id, $reason = "") { - $.post('/ban', :$user-id, :$reason) -} - -#| POST - /_matrix/client/r0/rooms/{roomId}/unban -method unban(Str $user-id) { - $.post('/unban', :$user-id) -} - -method Str(--> Str) { - "Room<id: {self.id}>" -} |