The Perl Toolchain Summit needs more sponsors. If your company depends on Perl, please support this very important event.

NAME

Net::Async::Matrix - use Matrix with IO::Async

SYNOPSIS

 TODO

DESCRIPTION

This module allows an program to interact with a Matrix homeserver as a connected user client.

EVENTS

The following events are invoked, either using subclass methods or CODE references in parameters:

on_log $message

A request to write a debugging log message. This is provided temporarily for development and debugging purposes, but will at some point be removed when the code has reached a certain level of stability.

on_presence $user, %changes

Invoked on receipt of a user presence change event from the homeserver. %changes will map user state field names to 2-element ARRAY references, each containing the old and new values of that field.

on_room_add $room

Invoked when a new room has completed its initial sync, either because of the client's initial sync, or because it was just created or joined. Note that if default on_room_* event handlers are defined, these may have already been invoked before on_room_add.

Passed an instance of Net::Async::Matrix::Room.

on_room_del $room

Invoked when the user has now left a room.

PARAMETERS

The following named parameters may be passed to new or configure. In addition, CODE references for event handlers using the event names listed above can also be given.

user_id => STRING

access_token => STRING

Optional login details to use for logging in as an existing user if an access token is already known. For registering a new user, see instead the register method.

server => STRING

Hostname and port number to contact the homeserver at. Given in the form

 $hostname:$port

This string will be interpolated directly into HTTP request URLs.

on_room_member, on_room_message => CODE

Optional. Sets default event handlers on new room objects.

METHODS

The following methods documented with a trailing call to ->get return Future instances.

$f = $matrix->start

Performs the initial IMSync on the server, and starts the event stream to begin receiving events.

While this method does return a Future it is not required that the caller keep track of this; the object itself will store it. It will complete when the initial IMSync has fininshed, and the event stream has started.

If the initial sync has already been requested, this method simply returns the future it returned the last time, ensuring that you can await the client starting up simply by calling it; it will not start a second time.

$matrix->stop

Stops the event stream. After calling this you will need to use start again to continue receiving events.

$user = $matrix->myself

Returns the user object representing the connected user.

( $user_id, $access_token ) = $matrix->register( $localpart )->get

Sends a user account registration request to the Matrix homeserver to create a new account. On successful completion, the returned user ID and token are stored by the object itself and the event stream is started.

$name = $matrix->get_displayname->get

$matrix->set_displayname( $name )->get

Accessor and mutator for the user account's "display name" profile field.

( $state, $msg ) = $matrix->get_presence->get

$matrix->set_presence( $state, $msg )->get

Accessor and mutator for the user's current presence state and optional status message string.

( $room, $room_alias ) = $matrix->create_room( $alias_localpart )->get

Requests the creation of a new room and associates a new alias with the given localpart on the server. The returned Future will return an instance of Net::Async::Matrix::Room and a string containing the full alias that was created.

$matrix->join_room( $room_alias_or_id )->get

Requests to join an existing room with the given alias name or plain room ID.

$syncdata = $matrix->initial_sync->get( %args )

Performs an IMSync operation, fetching the set of rooms the user is a member of, their current state, and an optional snapshot of the latest messages there.

Takes the following named arguments:

limit => INT

Optional number of messages per room to return. Defaults to zero; fetching only the list of rooms and their state, without any message snapshots.

USER STRUCTURES

Parameters documented as $user receive a user struct, which supports the following methods:

$user_id = $user->user_id

User ID of the user.

$displayname = $user->displayname

Profile displayname of the user.

$state = $user->state

Presence state. One of offline, unavailable or online.

$presence_mtime = $user->presence_mtime

Epoch time that the presence state last changed.

AUTHOR

Paul Evans <leonerd@leonerd.org.uk>