aboutsummaryrefslogtreecommitdiff
path: root/lib/Matrix/Client/Room.pm6
diff options
context:
space:
mode:
authorMatias Linares <matiaslina@gmail.com>2021-01-11 22:20:09 -0300
committerMatias Linares <matiaslina@gmail.com>2021-01-11 22:20:09 -0300
commit7be9fa68bef82a7576344a6e8cc1e51154c6b3bf (patch)
treed60908a75c60b55d4ea90f6079c2459f9cf56be9 /lib/Matrix/Client/Room.pm6
parent9da9134f0b28c0e4c69537b54fd96dca3a66aaed (diff)
downloadperl6-matrix-client-7be9fa68bef82a7576344a6e8cc1e51154c6b3bf.tar.gz
Response & Exception refactor
Diffstat (limited to 'lib/Matrix/Client/Room.pm6')
-rw-r--r--lib/Matrix/Client/Room.pm6190
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}>"
-}