aboutsummaryrefslogtreecommitdiff
path: root/lib/Matrix/Client.pm6
diff options
context:
space:
mode:
Diffstat (limited to 'lib/Matrix/Client.pm6')
-rw-r--r--lib/Matrix/Client.pm661
1 files changed, 61 insertions, 0 deletions
diff --git a/lib/Matrix/Client.pm6 b/lib/Matrix/Client.pm6
index 6849fe4..8fc9e6a 100644
--- a/lib/Matrix/Client.pm6
+++ b/lib/Matrix/Client.pm6
@@ -92,6 +92,55 @@ method check-res($res) {
}
}
+# User Data
+
+method profile(Str :$user-id?) {
+ my $id = $user-id // $!user-id;
+ my $res = $.get("/profile/" ~ $id);
+ $.check-res($res);
+ $res
+}
+
+method display-name(Str :$user-id?) {
+ my $id = $user-id // $!user-id;
+ my $res = $.get("/profile/" ~ $id ~ "/displayname");
+ $.check-res($res);
+
+ my $data = from-json($res.content);
+
+ $data<displayname> // ""
+}
+
+method change-display-name(Str:D $display-name!) {
+ my $res = $.put("/profile/" ~ $!user-id ~ "/displayname",
+ displayname => $display-name);
+ return $.check-res($res);
+}
+
+method avatar-url(Str :$user-id?) {
+ my $id = $user-id // $!user-id;
+ my $res = $.get("/profile/" ~ $id ~ "/avatar_url");
+ $.check-res($res);
+ my $data = from-json($res.content);
+
+ $data<avatar_url> // ""
+}
+
+method change-avatar(Str:D $avatar!, Bool :$upload) {
+ my $mxc-url;
+ if so $upload {
+ $mxc-url = $.upload($avatar);
+ } else {
+ $mxc-url = $avatar;
+ }
+
+ my $res = $.put("/profile/" ~ $!user-id ~ "/avatar_url",
+ avatar_url => $mxc-url);
+ return $.check-res($res);
+}
+
+# Syncronization
+
multi method sync() {
my $res = $.get("/sync",
timeout => 30000
@@ -116,6 +165,8 @@ multi method sync(:$sync-filter is copy, :$since = "") {
$.sync(sync-filter => to-json($sync-filter), since => $since)
}
+# Rooms
+
method join-room($room-id!) {
$.post("/join/" ~ $room-id)
}
@@ -136,3 +187,13 @@ method send(Str $room-id, Str $body, :$type? = "m.text") {
$Matrix::Client::Common::TXN-ID++;
$.put("/rooms/$room-id/send/m.room.message/{$Matrix::Client::Common::TXN-ID}", msgtype => $type, body => $body)
}
+
+# Media
+
+method upload(Str $path where *.IO.f) {
+ my $buf = slurp $path, :bin;
+ my $res = $.post-bin("/upload", $buf, content-type => "image/png");
+ $.check-res($res);
+ my $data = from-json($res.content);
+ $data<content_uri> // "";
+}