gomatrix

package module
v0.0.0-...-6edcada Latest Latest
Warning

This package is not in the latest version of its module.

Go to latest
Published: Aug 6, 2023 License: Apache-2.0 Imports: 21 Imported by: 0

README

gomatrix

GoDoc

A Golang Matrix client.

THIS IS UNDER ACTIVE DEVELOPMENT: BREAKING CHANGES ARE FREQUENT.

Contributing

All contributions are greatly appreciated!

How to report issues

Please check the current open issues for similar reports in order to avoid duplicates.

Some general guidelines:

  • Include a minimal reproducible example when possible.
  • Describe the expected behaviour and what actually happened including a full trace-back in case of exceptions.
  • Make sure to list details about your environment

Setting up your environment

If you intend to contribute to gomatrix you'll first need Go installed on your machine (version 1.12+ is required). Also, make sure to have golangci-lint properly set up since we use it for pre-commit hooks (for instructions on how to install it, check the official docs).

  • Fork gomatrix to your GitHub account by clicking the Fork button.

  • Clone the main repository (not your fork) to your local machine.

    $ git clone https://github.com/matrix-org/gomatrix
    $ cd gomatrix
    
  • Add your fork as a remote to push your contributions.Replace {username} with your username.

    git remote add fork https://github.com/{username}/gomatrix
    
  • Create a new branch to identify what feature you are working on.

    $ git fetch origin
    $ git checkout -b your-branch-name origin/master
    
  • Make your changes, including tests that cover any code changes you make, and run them as described below.

  • Execute pre-commit hooks by running

    <gomatrix dir>/hooks/pre-commit
    
  • Push your changes to your fork and create a pull request describing your changes.

    $ git push --set-upstream fork your-branch-name
    
  • Finally, create a pull request

How to run tests

You can run the test suite and example code with $ go test -v

Running Coverage

To run coverage, first generate the coverage report using go test

go test -v -cover -coverprofile=coverage.out

You can now show the generated report as a html page with go tool

go tool cover -html=coverage.out

Documentation

Overview

Package gomatrix implements the Matrix Client-Server API.

Specification can be found at http://matrix.org/docs/spec/client_server/r0.2.0.html

Example (CustomInterfaces)
// Custom interfaces must be set prior to calling functions on the client.
cli, _ := NewClient("https://matrix.org", "@example:matrix.org", "MDAefhiuwehfuiwe")

// anything which implements the Storer interface
customStore := NewInMemoryStore()
cli.Store = customStore

// anything which implements the Syncer interface
customSyncer := NewDefaultSyncer("@example:matrix.org", customStore)
cli.Syncer = customSyncer

// any http.Client
cli.Client = http.DefaultClient

// Once you call a function, you can't safely change the interfaces.
_, _ = cli.SendText(ctx, "!foo:bar", "Down the rabbit hole")
Output:

Example (Sync)
cli, _ := NewClient("https://matrix.org", "@example:matrix.org", "MDAefhiuwehfuiwe")
cli.Store.SaveFilterID("@example:matrix.org", "2")                // Optional: if you know it already
cli.Store.SaveNextBatch("@example:matrix.org", "111_222_333_444") // Optional: if you know it already
syncer := cli.Syncer.(*DefaultSyncer)
syncer.OnEventType("m.room.message", func(ev *Event) {
	fmt.Println("Message: ", ev)
})

// Blocking version
if err := cli.Sync(ctx); err != nil {
	fmt.Println("Sync() returned ", err)
}

// Non-blocking version
go func() {
	for {
		if err := cli.Sync(ctx); err != nil {
			fmt.Println("Sync() returned ", err)
		}
		// Optional: Wait a period of time before trying to sync again.
	}
}()
Output:

Index

Examples

Constants

This section is empty.

Variables

This section is empty.

Functions

func DecodeUserLocalpart

func DecodeUserLocalpart(str string) (string, error)

DecodeUserLocalpart decodes the given string back into the original input string. Returns an error if the given string is not a valid user ID localpart encoding. See http://matrix.org/docs/spec/intro.html#mapping-from-other-character-sets

This decodes quoted-printable bytes back into UTF8, and unescapes casing. For example:

_alph=40_bet=5f50up  =>  Alph@Bet_50up

Returns an error if the input string contains characters outside the range "a-z0-9._=-", has an invalid quote-printable byte (e.g. not hex), or has an invalid _ escaped byte (e.g. "_5").

Example
localpart, err := DecodeUserLocalpart("_alph=40_bet__50up")
if err != nil {
	panic(err)
}
fmt.Println(localpart)
Output:

Alph@Bet_50up

func EncodeUserLocalpart

func EncodeUserLocalpart(str string) string

EncodeUserLocalpart encodes the given string into Matrix-compliant user ID localpart form. See http://matrix.org/docs/spec/intro.html#mapping-from-other-character-sets

This returns a string with only the characters "a-z0-9._=-". The uppercase range A-Z are encoded using leading underscores ("_"). Characters outside the aforementioned ranges (including literal underscores ("_") and equals ("=")) are encoded as UTF8 code points (NOT NCRs) and converted to lower-case hex with a leading "=". For example:

Alph@Bet_50up  => _alph=40_bet=5f50up
Example
localpart := EncodeUserLocalpart("Alph@Bet_50up")
fmt.Println(localpart)
Output:

_alph=40_bet__50up

func ExtractUserLocalpart

func ExtractUserLocalpart(userID string) (string, error)

ExtractUserLocalpart extracts the localpart portion of a user ID. See http://matrix.org/docs/spec/intro.html#user-identifiers

Example
localpart, err := ExtractUserLocalpart("@alice:matrix.org")
if err != nil {
	panic(err)
}
fmt.Println(localpart)
Output:

alice

Types

type AudioInfo

type AudioInfo struct {
	Mimetype string `json:"mimetype,omitempty"`
	Size     uint   `json:"size,omitempty"`     //filesize in bytes
	Duration uint   `json:"duration,omitempty"` //audio duration in ms
}

AudioInfo contains info about an file - http://matrix.org/docs/spec/client_server/r0.2.0.html#m-audio

type AudioMessage

type AudioMessage struct {
	MsgType string    `json:"msgtype"`
	Body    string    `json:"body"`
	URL     string    `json:"url"`
	Info    AudioInfo `json:"info,omitempty"`
}

AudioMessage is an m.audio event - http://matrix.org/docs/spec/client_server/r0.2.0.html#m-audio

type ChildrenState

type ChildrenState struct {
	RoomId   string  `json:"room_id"`
	StateKey string  `json:"state_key"`
	Content  Content `json:"content"`
}

type Client

type Client struct {
	HomeserverURL *url.URL     // The base homeserver URL
	Prefix        string       // The API prefix eg '/_matrix/client/r0'
	UserID        string       // The user ID of the client. Used for forming HTTP paths which use the client's user ID.
	AccessToken   string       // The access_token for the client.
	Client        *http.Client // The underlying HTTP client which will be used to make HTTP requests.
	Syncer        Syncer       // The thing which can process /sync responses
	Store         Storer       // The thing which can store rooms/tokens/ids

	// The ?user_id= query parameter for application services. This must be set *prior* to calling a method. If this is empty,
	// no user_id parameter will be sent.
	// See http://matrix.org/docs/spec/application_service/unstable.html#identity-assertion
	AppServiceUserID string

	RandomizeXForwardedFor bool // If true, client will add a random IP as a X-Forwarded-For header. Used to bypass rate limiting in tests. rand.Seed() is not called.
	// contains filtered or unexported fields
}

Client represents a Matrix client.

func NewClient

func NewClient(homeserverURL, userID, accessToken string) (*Client, error)

NewClient creates a new Matrix Client ready for syncing

func (*Client) Account3PidEmailRequestToken

func (cli *Client) Account3PidEmailRequestToken(ctx context.Context, req ReqEmailRequestToken) (resp *RespEmailRequestToken, err error)

EmailRequestToken requests email from homeserver so that it email be bound to existing account after validation. See https://matrix.org/docs/spec/client_server/r0.6.1#post-matrix-client-r0-account-3pid-email-requesttoken

func (*Client) AccountPassword

func (cli *Client) AccountPassword(ctx context.Context, req ReqAccountPassword) (err error)

func (*Client) Available

func (cli *Client) Available(ctx context.Context, username string) (err error)

Available checks to see if a username is available, and valid, for the server. See https://matrix.org/docs/spec/client_server/r0.6.1#get-matrix-client-r0-register-available

func (*Client) BanUser

func (cli *Client) BanUser(ctx context.Context, roomID string, req *ReqBanUser) (resp *RespBanUser, err error)

BanUser bans a user from a room. See http://matrix.org/docs/spec/client_server/r0.2.0.html#post-matrix-client-r0-rooms-roomid-ban

func (*Client) BuildBaseURL

func (cli *Client) BuildBaseURL(urlPath ...string) string

BuildBaseURL builds a URL with the Client's homeserver set already. You must supply the prefix in the path.

Example
userID := "@example:matrix.org"
cli, _ := NewClient("https://matrix.org", userID, "abcdef123456")
out := cli.BuildBaseURL("_matrix", "client", "r0", "directory", "room", "#matrix:matrix.org")
fmt.Println(out)
Output:

https://matrix.org/_matrix/client/r0/directory/room/%23matrix:matrix.org

func (*Client) BuildURL

func (cli *Client) BuildURL(urlPath ...string) string

BuildURL builds a URL with the Client's homeserver/prefix set already.

Example
userID := "@example:matrix.org"
cli, _ := NewClient("https://matrix.org", userID, "abcdef123456")
out := cli.BuildURL("user", userID, "filter")
fmt.Println(out)
Output:

https://matrix.org/_matrix/client/r0/user/@example:matrix.org/filter

func (*Client) BuildURLWithQuery

func (cli *Client) BuildURLWithQuery(urlPath []string, urlQuery map[string]string) string

BuildURLWithQuery builds a URL with query parameters in addition to the Client's homeserver/prefix set already.

Example
cli, _ := NewClient("https://matrix.org", "@example:matrix.org", "abcdef123456")
out := cli.BuildURLWithQuery([]string{"sync"}, map[string]string{
	"filter_id": "5",
})
fmt.Println(out)
Output:

https://matrix.org/_matrix/client/r0/sync?filter_id=5

func (*Client) ClearCredentials

func (cli *Client) ClearCredentials()

ClearCredentials removes the user ID and access token on this client instance.

func (*Client) CreateFilter

func (cli *Client) CreateFilter(ctx context.Context, filter json.RawMessage) (resp *RespCreateFilter, err error)

CreateFilter makes an HTTP request according to http://matrix.org/docs/spec/client_server/r0.2.0.html#post-matrix-client-r0-user-userid-filter

func (*Client) CreateRoom

func (cli *Client) CreateRoom(ctx context.Context, req *ReqCreateRoom) (resp *RespCreateRoom, err error)

CreateRoom creates a new Matrix room. See https://matrix.org/docs/spec/client_server/r0.2.0.html#post-matrix-client-r0-createroom

func (*Client) Deactivate

func (cli *Client) Deactivate(ctx context.Context) (err error)

func (*Client) DeletePushRule

func (cli *Client) DeletePushRule(ctx context.Context, scope string, kind string, ruleID string) error

func (*Client) ForgetRoom

func (cli *Client) ForgetRoom(ctx context.Context, roomID string) (resp *RespForgetRoom, err error)

ForgetRoom forgets a room entirely. See http://matrix.org/docs/spec/client_server/r0.2.0.html#post-matrix-client-r0-rooms-roomid-forget

func (*Client) GetAccountData

func (cli *Client) GetAccountData(ctx context.Context, req ReqGetAccountData) (resp RespAccountData, err error)

GetAccountData gets some account_data for the client. See https://matrix.org/docs/spec/client_server/r0.6.1#get-matrix-client-r0-user-userid-account-data-type

func (*Client) GetAvatarURL

func (cli *Client) GetAvatarURL(ctx context.Context) (string, error)

GetAvatarURL gets the user's avatar URL. See http://matrix.org/docs/spec/client_server/r0.2.0.html#get-matrix-client-r0-profile-userid-avatar-url

func (*Client) GetDevices

func (cli *Client) GetDevices(ctx context.Context) (resp RespGetDevices, err error)

GetDevices gets information about all devices for the current user. See https://matrix.org/docs/spec/client_server/r0.6.1#get-matrix-client-r0-devices

func (*Client) GetDisplayName

func (cli *Client) GetDisplayName(ctx context.Context, mxid string) (resp *RespUserDisplayName, err error)

GetDisplayName returns the display name of the user from the specified MXID. See https://matrix.org/docs/spec/client_server/r0.2.0.html#get-matrix-client-r0-profile-userid-displayname

func (*Client) GetOwnDisplayName

func (cli *Client) GetOwnDisplayName(ctx context.Context) (resp *RespUserDisplayName, err error)

GetOwnDisplayName returns the user's display name. See https://matrix.org/docs/spec/client_server/r0.2.0.html#get-matrix-client-r0-profile-userid-displayname

func (*Client) GetOwnStatus

func (cli *Client) GetOwnStatus(ctx context.Context) (resp *RespUserStatus, err error)

GetOwnStatus returns the user's status. See https://matrix.org/docs/spec/client_server/r0.6.0#get-matrix-client-r0-presence-userid-status

func (*Client) GetStatus

func (cli *Client) GetStatus(ctx context.Context, mxid string) (resp *RespUserStatus, err error)

GetStatus returns the status of the user from the specified MXID. See https://matrix.org/docs/spec/client_server/r0.6.0#get-matrix-client-r0-presence-userid-status

func (*Client) GetThreePID

func (cli *Client) GetThreePID(ctx context.Context) (resp RespGetThreePID, err error)

GetThreePID gets a list of the third party identifiers that the homeserver has associated with the user's account. See https://matrix.org/docs/spec/client_server/r0.6.1#get-matrix-client-r0-account-3pid

func (*Client) Hierarchy

func (cli *Client) Hierarchy(ctx context.Context, req ReqHierarchy) (resp RespHierarchy, err error)

func (*Client) InviteUser

func (cli *Client) InviteUser(ctx context.Context, roomID string, req *ReqInviteUser) (resp *RespInviteUser, err error)

InviteUser invites a user to a room. See http://matrix.org/docs/spec/client_server/r0.2.0.html#post-matrix-client-r0-rooms-roomid-invite

func (*Client) InviteUserByThirdParty

func (cli *Client) InviteUserByThirdParty(ctx context.Context, roomID string, req *ReqInvite3PID) (resp *RespInviteUser, err error)

InviteUserByThirdParty invites a third-party identifier to a room. See http://matrix.org/docs/spec/client_server/r0.2.0.html#invite-by-third-party-id-endpoint

func (*Client) InvitedMembers

func (cli *Client) InvitedMembers(ctx context.Context, roomId string) (resp RespMembers, err error)

func (*Client) JoinRoom

func (cli *Client) JoinRoom(ctx context.Context, roomIDorAlias, serverName string, content interface{}) (resp *RespJoinRoom, err error)

JoinRoom joins the client to a room ID or alias. See http://matrix.org/docs/spec/client_server/r0.2.0.html#post-matrix-client-r0-join-roomidoralias

If serverName is specified, this will be added as a query param to instruct the homeserver to join via that server. If content is specified, it will be JSON encoded and used as the request body.

Example (Alias)

Join a room by alias.

cli, _ := NewClient("http://localhost:8008", "@example:localhost", "abcdef123456")
if resp, err := cli.JoinRoom(ctx, "#test:localhost", "", nil); err != nil {
	panic(err)
} else {
	// Use room ID for something.
	_ = resp.RoomID
}
Output:

Example (Id)

Join a room by ID.

cli, _ := NewClient("http://localhost:8008", "@example:localhost", "abcdef123456")
if _, err := cli.JoinRoom(ctx, "!uOILRrqxnsYgQdUzar:localhost", "", nil); err != nil {
	panic(err)
}
Output:

func (*Client) JoinedMembers

func (cli *Client) JoinedMembers(ctx context.Context, roomID string) (resp *RespJoinedMembers, err error)

JoinedMembers returns a map of joined room members. See TODO-SPEC. https://github.com/matrix-org/synapse/pull/1680

In general, usage of this API is discouraged in favour of /sync, as calling this API can race with incoming membership changes. This API is primarily designed for application services which may want to efficiently look up joined members in a room.

func (*Client) JoinedRooms

func (cli *Client) JoinedRooms(ctx context.Context) (resp *RespJoinedRooms, err error)

JoinedRooms returns a list of rooms which the client is joined to. See TODO-SPEC. https://github.com/matrix-org/synapse/pull/1680

In general, usage of this API is discouraged in favour of /sync, as calling this API can race with incoming membership changes. This API is primarily designed for application services which may want to efficiently look up joined rooms.

func (*Client) KickUser

func (cli *Client) KickUser(ctx context.Context, roomID string, req *ReqKickUser) (resp *RespKickUser, err error)

KickUser kicks a user from a room. See http://matrix.org/docs/spec/client_server/r0.2.0.html#post-matrix-client-r0-rooms-roomid-kick

func (*Client) LeaveRoom

func (cli *Client) LeaveRoom(ctx context.Context, roomID string) (resp *RespLeaveRoom, err error)

LeaveRoom leaves the given room. See http://matrix.org/docs/spec/client_server/r0.2.0.html#post-matrix-client-r0-rooms-roomid-leave

func (*Client) LeftMembers

func (cli *Client) LeftMembers(ctx context.Context, roomId string) (resp RespMembers, err error)

func (*Client) Login

func (cli *Client) Login(ctx context.Context, req *ReqLogin) (resp *RespLogin, err error)

Login a user to the homeserver according to http://matrix.org/docs/spec/client_server/r0.2.0.html#post-matrix-client-r0-login This does not set credentials on this client instance. See SetCredentials() instead.

Example

Login to a local homeserver and set the user ID and access token on success.

cli, _ := NewClient("http://localhost:8008", "", "")
resp, err := cli.Login(ctx, &ReqLogin{
	Type:     "m.login.password",
	User:     "alice",
	Password: "wonderland",
})
if err != nil {
	panic(err)
}
cli.SetCredentials(resp.UserID, resp.AccessToken)
Output:

func (*Client) Logout

func (cli *Client) Logout(ctx context.Context) (resp *RespLogout, err error)

Logout the current user. See http://matrix.org/docs/spec/client_server/r0.6.0.html#post-matrix-client-r0-logout This does not clear the credentials from the client instance. See ClearCredentials() instead.

func (*Client) LogoutAll

func (cli *Client) LogoutAll(ctx context.Context) (resp *RespLogoutAll, err error)

LogoutAll logs the current user out on all devices. See https://matrix.org/docs/spec/client_server/r0.6.0#post-matrix-client-r0-logout-all This does not clear the credentials from the client instance. See ClearCredentails() instead.

func (*Client) MakeRequest

func (cli *Client) MakeRequest(ctx context.Context, method string, httpURL string, reqBody interface{}, resBody interface{}) error

MakeRequest makes a JSON HTTP request to the given URL. The response body will be stream decoded into an interface. This will automatically stop if the response body is nil.

Returns an error if the response is not 2xx along with the HTTP body bytes if it got that far. This error is an HTTPError which includes the returned HTTP status code, byte contents of the response body and possibly a RespError as the WrappedError, if the HTTP body could be decoded as a RespError.

func (*Client) MarkRead

func (cli *Client) MarkRead(ctx context.Context, roomID, eventID string) error

MarkRead marks eventID in roomID as read, signifying the event, and all before it have been read. See https://matrix.org/docs/spec/client_server/r0.6.0#post-matrix-client-r0-rooms-roomid-receipt-receipttype-eventid

func (*Client) Members

func (cli *Client) Members(ctx context.Context, roomId string) (resp RespMembers, err error)

func (*Client) Messages

func (cli *Client) Messages(ctx context.Context, roomID, from, to string, dir rune, limit int) (resp *RespMessages, err error)

Messages returns a list of message and state events for a room. It uses pagination query parameters to paginate history in the room. See https://matrix.org/docs/spec/client_server/r0.2.0.html#get-matrix-client-r0-rooms-roomid-messages

func (*Client) PasswordEmailRequestToken

func (cli *Client) PasswordEmailRequestToken(ctx context.Context, req ReqEmailRequestToken) (resp *RespEmailRequestToken, err error)

func (*Client) PostThreePID

func (cli *Client) PostThreePID(ctx context.Context, req ReqPostThreePID) (err error)

func (*Client) PowerLevels

func (cli *Client) PowerLevels(ctx context.Context, roomID string) (resp PowerLevels, err error)

PowerLevels gets most recent m.room.power_levels event. See https://matrix.org/docs/spec/client_server/r0.6.1#m-room-power-levels

func (*Client) PublicRooms

func (cli *Client) PublicRooms(ctx context.Context, limit int, since string, server string) (resp *RespPublicRooms, err error)

PublicRooms returns the list of public rooms on target server. See https://matrix.org/docs/spec/client_server/r0.6.0#get-matrix-client-unstable-publicrooms

func (*Client) PublicRoomsFiltered

func (cli *Client) PublicRoomsFiltered(ctx context.Context, limit int, since string, server string, filter string) (resp *RespPublicRooms, err error)

PublicRoomsFiltered returns a subset of PublicRooms filtered server side. See https://matrix.org/docs/spec/client_server/r0.6.0#post-matrix-client-unstable-publicrooms

func (*Client) PutAccountData

func (cli *Client) PutAccountData(ctx context.Context, req ReqPutAccountData) (err error)

PutAccountData sets some account_data for the client. See https://matrix.org/docs/spec/client_server/r0.6.1#put-matrix-client-r0-user-userid-account-data-type

func (*Client) PutPushRule

func (cli *Client) PutPushRule(ctx context.Context, scope string, kind string, ruleID string, req *ReqPutPushRule) error

func (*Client) RedactEvent

func (cli *Client) RedactEvent(ctx context.Context, roomID, eventID string, req *ReqRedact) (resp *RespSendEvent, err error)

RedactEvent redacts the given event. See http://matrix.org/docs/spec/client_server/r0.2.0.html#put-matrix-client-r0-rooms-roomid-redact-eventid-txnid

func (*Client) Register

func (cli *Client) Register(ctx context.Context, req *ReqRegister) (*RespRegister, *RespUserInteractive, error)

Register makes an HTTP request according to http://matrix.org/docs/spec/client_server/r0.2.0.html#post-matrix-client-r0-register

Registers with kind=user. For kind=guest, see RegisterGuest.

func (*Client) RegisterDummy

func (cli *Client) RegisterDummy(ctx context.Context, req *ReqRegister) (*RespRegister, error)

RegisterDummy performs m.login.dummy registration according to https://matrix.org/docs/spec/client_server/r0.2.0.html#dummy-auth

Only a username and password need to be provided on the ReqRegister struct. Most local/developer homeservers will allow registration this way. If the homeserver does not, an error is returned.

This does not set credentials on the client instance. See SetCredentials() instead.

	res, err := cli.RegisterDummy(&gomatrix.ReqRegister{
		Username: "alice",
		Password: "wonderland",
	})
 if err != nil {
		panic(err)
	}
	token := res.AccessToken

func (*Client) RegisterEmailRequestToken

func (cli *Client) RegisterEmailRequestToken(ctx context.Context, req ReqEmailRequestToken) (resp *RespEmailRequestToken, err error)

func (*Client) RegisterGuest

func (cli *Client) RegisterGuest(ctx context.Context, req *ReqRegister) (*RespRegister, *RespUserInteractive, error)

RegisterGuest makes an HTTP request according to http://matrix.org/docs/spec/client_server/r0.2.0.html#post-matrix-client-r0-register with kind=guest.

For kind=user, see Register.

func (*Client) RoomAlias

func (cli *Client) RoomAlias(ctx context.Context, roomAlias string) (resp *RespRoomAlias, err error)

RoomAlias requests that the server resolve a room alias to a room ID. See https://matrix.org/docs/spec/client_server/r0.6.1#get-matrix-client-r0-directory-room-roomalias

func (*Client) SendFormattedText

func (cli *Client) SendFormattedText(ctx context.Context, roomID, text, formattedText string) (*RespSendEvent, error)

SendFormattedText sends an m.room.message event into the given room with a msgtype of m.text, supports a subset of HTML for formatting. See https://matrix.org/docs/spec/client_server/r0.6.0#m-text

func (*Client) SendImage

func (cli *Client) SendImage(ctx context.Context, roomID, body, url string) (*RespSendEvent, error)

SendImage sends an m.room.message event into the given room with a msgtype of m.image See https://matrix.org/docs/spec/client_server/r0.2.0.html#m-image

func (*Client) SendMessageEvent

func (cli *Client) SendMessageEvent(ctx context.Context, roomID string, eventType string, contentJSON interface{}) (resp *RespSendEvent, err error)

SendMessageEvent sends a message event into a room. See http://matrix.org/docs/spec/client_server/r0.2.0.html#put-matrix-client-r0-rooms-roomid-send-eventtype-txnid contentJSON should be a pointer to something that can be encoded as JSON using json.Marshal.

func (*Client) SendNotice

func (cli *Client) SendNotice(ctx context.Context, roomID, text string) (*RespSendEvent, error)

SendNotice sends an m.room.message event into the given room with a msgtype of m.notice See http://matrix.org/docs/spec/client_server/r0.2.0.html#m-notice

func (*Client) SendPowerLevels

func (cli *Client) SendPowerLevels(ctx context.Context, roomID string, pl PowerLevels) (*RespSendEvent, error)

SendPowerLevels sends m.room.power_levels event. See https://matrix.org/docs/spec/client_server/r0.6.1#m-room-power-levels

func (*Client) SendStateEvent

func (cli *Client) SendStateEvent(ctx context.Context, roomID, eventType, stateKey string, contentJSON interface{}) (resp *RespSendEvent, err error)

SendStateEvent sends a state event into a room. See http://matrix.org/docs/spec/client_server/r0.2.0.html#put-matrix-client-r0-rooms-roomid-state-eventtype-statekey contentJSON should be a pointer to something that can be encoded as JSON using json.Marshal.

func (*Client) SendText

func (cli *Client) SendText(ctx context.Context, roomID, text string) (*RespSendEvent, error)

SendText sends an m.room.message event into the given room with a msgtype of m.text See http://matrix.org/docs/spec/client_server/r0.2.0.html#m-text

func (*Client) SendVideo

func (cli *Client) SendVideo(ctx context.Context, roomID, body, url string) (*RespSendEvent, error)

SendVideo sends an m.room.message event into the given room with a msgtype of m.video See https://matrix.org/docs/spec/client_server/r0.2.0.html#m-video

func (*Client) SetAvatarURL

func (cli *Client) SetAvatarURL(ctx context.Context, url string) error

SetAvatarURL sets the user's avatar URL. See http://matrix.org/docs/spec/client_server/r0.2.0.html#put-matrix-client-r0-profile-userid-avatar-url

func (*Client) SetCredentials

func (cli *Client) SetCredentials(userID, accessToken string)

SetCredentials sets the user ID and access token on this client instance.

func (*Client) SetDisplayName

func (cli *Client) SetDisplayName(ctx context.Context, displayName string) (err error)

SetDisplayName sets the user's profile display name. See http://matrix.org/docs/spec/client_server/r0.2.0.html#put-matrix-client-r0-profile-userid-displayname

func (*Client) SetStatus

func (cli *Client) SetStatus(ctx context.Context, presence, status string) (err error)

SetStatus sets the user's status. See https://matrix.org/docs/spec/client_server/r0.6.0#put-matrix-client-r0-presence-userid-status

func (*Client) StateEvent

func (cli *Client) StateEvent(ctx context.Context, roomID, eventType, stateKey string, outContent interface{}) (err error)

StateEvent gets a single state event in a room. It will attempt to JSON unmarshal into the given "outContent" struct with the HTTP response body, or return an error. See http://matrix.org/docs/spec/client_server/r0.2.0.html#get-matrix-client-r0-rooms-roomid-state-eventtype-statekey

Example

Retrieve the content of a m.room.name state event.

content := struct {
	Name string `json:"name"`
}{}
cli, _ := NewClient("https://matrix.org", "@example:matrix.org", "abcdef123456")
if err := cli.StateEvent(ctx, "!foo:bar", "m.room.name", "", &content); err != nil {
	panic(err)
}
Output:

func (*Client) StopSync

func (cli *Client) StopSync()

StopSync stops the ongoing sync started by Sync.

func (*Client) Sync

func (cli *Client) Sync(ctx context.Context) error

Sync starts syncing with the provided Homeserver. If Sync() is called twice then the first sync will be stopped and the error will be nil.

This function will block until a fatal /sync error occurs, so it should almost always be started as a new goroutine. Fatal sync errors can be caused by:

  • The failure to create a filter.
  • Client.Syncer.OnFailedSync returning an error in response to a failed sync.
  • Client.Syncer.ProcessResponse returning an error.

If you wish to continue retrying in spite of these fatal errors, call Sync() again.

func (*Client) SyncRequest

func (cli *Client) SyncRequest(ctx context.Context, timeout int, since, filterID string, fullState bool, setPresence string) (resp *RespSync, err error)

SyncRequest makes an HTTP request according to http://matrix.org/docs/spec/client_server/r0.2.0.html#get-matrix-client-r0-sync

func (*Client) TurnServer

func (cli *Client) TurnServer(ctx context.Context) (resp *RespTurnServer, err error)

TurnServer returns turn server details and credentials for the client to use when initiating calls. See http://matrix.org/docs/spec/client_server/r0.2.0.html#get-matrix-client-r0-voip-turnserver

func (*Client) UnbanUser

func (cli *Client) UnbanUser(ctx context.Context, roomID string, req *ReqUnbanUser) (resp *RespUnbanUser, err error)

UnbanUser unbans a user from a room. See http://matrix.org/docs/spec/client_server/r0.2.0.html#post-matrix-client-r0-rooms-roomid-unban

func (cli *Client) UploadLink(ctx context.Context, link string) (*RespMediaUpload, error)

UploadLink uploads an HTTP URL and then returns an MXC URI.

func (*Client) UploadToContentRepo

func (cli *Client) UploadToContentRepo(ctx context.Context, content io.Reader, contentType string, contentLength int64) (*RespMediaUpload, error)

UploadToContentRepo uploads the given bytes to the content repository and returns an MXC URI. See http://matrix.org/docs/spec/client_server/r0.2.0.html#post-matrix-media-r0-upload

func (*Client) UserDirectorySearch

func (cli *Client) UserDirectorySearch(ctx context.Context, req *ReqUserDirectorySearch) (resp RespUserDirectorySearch, err error)

func (*Client) UserTyping

func (cli *Client) UserTyping(ctx context.Context, roomID string, typing bool, timeout int64) (resp *RespTyping, err error)

UserTyping sets the typing status of the user. See https://matrix.org/docs/spec/client_server/r0.2.0.html#put-matrix-client-r0-rooms-roomid-typing-userid

func (*Client) Versions

func (cli *Client) Versions(ctx context.Context) (resp *RespVersions, err error)

Versions returns the list of supported Matrix versions on this homeserver. See http://matrix.org/docs/spec/client_server/r0.2.0.html#get-matrix-client-versions

func (*Client) WhoAmI

func (cli *Client) WhoAmI(ctx context.Context) (resp *RespWhoAmI, err error)

WhoAmI Gets information about the owner of a given access token. See https://matrix.org/docs/spec/client_server/r0.6.1#get-matrix-client-r0-account-whoami

type Content

type Content struct {
	Order string `json:"order"`
}

Order "a" for primary public room, "aaa" default.

type DefaultSyncer

type DefaultSyncer struct {
	UserID string
	Store  Storer

	MultiRoomListener func(userId, mrType string, content interface{}, timestamp int64)
	// contains filtered or unexported fields
}

DefaultSyncer is the default syncing implementation. You can either write your own syncer, or selectively replace parts of this default syncer (e.g. the ProcessResponse method). The default syncer uses the observer pattern to notify callers about incoming events. See DefaultSyncer.OnEventType for more information.

func NewDefaultSyncer

func NewDefaultSyncer(userID string, store Storer) *DefaultSyncer

NewDefaultSyncer returns an instantiated DefaultSyncer

func (*DefaultSyncer) GetFilterJSON

func (s *DefaultSyncer) GetFilterJSON(userID string) json.RawMessage

GetFilterJSON returns a filter with a timeline limit of 50.

func (*DefaultSyncer) OnEventType

func (s *DefaultSyncer) OnEventType(eventType string, callback OnEventListener)

OnEventType allows callers to be notified when there are new events for the given event type. There are no duplicate checks.

func (*DefaultSyncer) OnFailedSync

func (s *DefaultSyncer) OnFailedSync(res *RespSync, err error) (time.Duration, error)

OnFailedSync always returns a 10 second wait period between failed /syncs, never a fatal error.

func (*DefaultSyncer) ProcessResponse

func (s *DefaultSyncer) ProcessResponse(res *RespSync, since string) (err error)

ProcessResponse processes the /sync response in a way suitable for bots. "Suitable for bots" means a stream of unrepeating events. Returns a fatal error if a listener panics.

type Device

type Device struct {
	DeviceId    string `json:"device_id" example:"l4kRnv3u"`
	DisplayName string `json:"display_name" example:"web"`
	LastSeenIP  string `json:"last_seen_ip" example:"1.2.3.4"`
	LastSeenTs  int    `json:"last_seen_ts" example:"1620644706232"`
}

type DiscoveryInformation

type DiscoveryInformation struct {
	Homeserver struct {
		BaseURL string `json:"base_url"`
	} `json:"m.homeserver"`
	IdentityServer struct {
		BaseURL string `json:"base_url"`
	} `json:"m.identitiy_server"`
}

DiscoveryInformation is the JSON Response for https://matrix.org/docs/spec/client_server/r0.6.0#get-well-known-matrix-client and a part of the JSON Response for https://matrix.org/docs/spec/client_server/r0.6.0#post-matrix-client-r0-login

type Event

type Event struct {
	StateKey    *string                `json:"state_key,omitempty"`    // The state key for the event. Only present on State Events.
	Sender      string                 `json:"sender"`                 // The user ID of the sender of the event
	Type        string                 `json:"type"`                   // The event type
	Timestamp   int64                  `json:"origin_server_ts"`       // The unix timestamp when this message was sent by the origin server
	ID          string                 `json:"event_id"`               // The unique ID of this event
	RoomID      string                 `json:"room_id"`                // The room the event was sent to. May be nil (e.g. for presence)
	Redacts     string                 `json:"redacts,omitempty"`      // The event ID that was redacted if a m.room.redaction event
	Unsigned    map[string]interface{} `json:"unsigned"`               // The unsigned portions of the event, such as age and prev_content
	Content     map[string]interface{} `json:"content"`                // The JSON content of the event.
	PrevContent map[string]interface{} `json:"prev_content,omitempty"` // The JSON prev_content of the event.
}

Event represents a single Matrix event.

func (*Event) Body

func (event *Event) Body() (body string, ok bool)

Body returns the value of the "body" key in the event content if it is present and is a string.

func (*Event) MessageType

func (event *Event) MessageType() (msgtype string, ok bool)

MessageType returns the value of the "msgtype" key in the event content if it is present and is a string.

type FileInfo

type FileInfo struct {
	Mimetype string `json:"mimetype,omitempty"`
	Size     uint   `json:"size,omitempty"` //filesize in bytes
}

FileInfo contains info about an file - http://matrix.org/docs/spec/client_server/r0.2.0.html#m-file

type FileMessage

type FileMessage struct {
	MsgType       string    `json:"msgtype"`
	Body          string    `json:"body"`
	URL           string    `json:"url"`
	Filename      string    `json:"filename"`
	Info          FileInfo  `json:"info,omitempty"`
	ThumbnailURL  string    `json:"thumbnail_url,omitempty"`
	ThumbnailInfo ImageInfo `json:"thumbnail_info,omitempty"`
}

FileMessage is an m.file event - http://matrix.org/docs/spec/client_server/r0.2.0.html#m-file

type Filter

type Filter struct {
	AccountData FilterPart `json:"account_data,omitempty"`
	EventFields []string   `json:"event_fields,omitempty"`
	EventFormat string     `json:"event_format,omitempty"`
	Presence    FilterPart `json:"presence,omitempty"`
	Room        RoomFilter `json:"room,omitempty"`
}

Filter is used by clients to specify how the server should filter responses to e.g. sync requests Specified by: https://matrix.org/docs/spec/client_server/r0.2.0.html#filtering

func DefaultFilter

func DefaultFilter() Filter

DefaultFilter returns the default filter used by the Matrix server if no filter is provided in the request

func (*Filter) Validate

func (filter *Filter) Validate() error

Validate checks if the filter contains valid property values

type FilterPart

type FilterPart struct {
	NotRooms    []string `json:"not_rooms,omitempty"`
	Rooms       []string `json:"rooms,omitempty"`
	Limit       int      `json:"limit,omitempty"`
	NotSenders  []string `json:"not_senders,omitempty"`
	NotTypes    []string `json:"not_types,omitempty"`
	Senders     []string `json:"senders,omitempty"`
	Types       []string `json:"types,omitempty"`
	ContainsURL *bool    `json:"contains_url,omitempty"`
}

FilterPart is used to define filtering rules for specific categories of events

func DefaultFilterPart

func DefaultFilterPart() FilterPart

DefaultFilterPart returns the default filter part used by the Matrix server if no filter is provided in the request

type HTMLMessage

type HTMLMessage struct {
	Body          string `json:"body"`
	MsgType       string `json:"msgtype"`
	Format        string `json:"format"`
	FormattedBody string `json:"formatted_body"`
}

An HTMLMessage is the contents of a Matrix HTML formated message event.

func GetHTMLMessage

func GetHTMLMessage(msgtype, htmlText string) HTMLMessage

GetHTMLMessage returns an HTMLMessage with the body set to a stripped version of the provided HTML, in addition to the provided HTML.

type HTTPError

type HTTPError struct {
	Contents     []byte
	WrappedError error
	MatrixError  RespError
	Code         int
	Path         string
	Method       string
}

HTTPError An HTTP Error response, which may wrap an underlying native Go Error.

func (HTTPError) Error

func (e HTTPError) Error() string

type HierarchyRoom

type HierarchyRoom struct {
	ChildrenState []ChildrenState `json:"children_state"`
	RoomId        string          `json:"room_id"`
	RoomName      string          `json:"name"`
}

type Identifier

type Identifier interface {
	// Returns the identifier type
	// https://matrix.org/docs/spec/client_server/r0.6.0#identifier-types
	Type() string
}

Identifier is the interface for https://matrix.org/docs/spec/client_server/r0.6.0#identifier-types

type ImageInfo

type ImageInfo struct {
	Height        uint          `json:"h,omitempty"`
	Width         uint          `json:"w,omitempty"`
	Mimetype      string        `json:"mimetype,omitempty"`
	Size          uint          `json:"size,omitempty"`
	ThumbnailInfo ThumbnailInfo `json:"thumbnail_info,omitempty"`
	ThumbnailURL  string        `json:"thumbnail_url,omitempty"`
}

ImageInfo contains info about an image - http://matrix.org/docs/spec/client_server/r0.2.0.html#m-image

type ImageMessage

type ImageMessage struct {
	MsgType string    `json:"msgtype"`
	Body    string    `json:"body"`
	URL     string    `json:"url"`
	Info    ImageInfo `json:"info"`
}

ImageMessage is an m.image event

type InMemoryStore

type InMemoryStore struct {
	Filters   map[string]string
	NextBatch map[string]string
	Rooms     map[string]*Room
}

InMemoryStore implements the Storer interface.

Everything is persisted in-memory as maps. It is not safe to load/save filter IDs or next batch tokens on any goroutine other than the syncing goroutine: the one which called Client.Sync().

func NewInMemoryStore

func NewInMemoryStore() *InMemoryStore

NewInMemoryStore constructs a new InMemoryStore.

func (*InMemoryStore) LoadFilterID

func (s *InMemoryStore) LoadFilterID(userID string) string

LoadFilterID from memory.

func (*InMemoryStore) LoadNextBatch

func (s *InMemoryStore) LoadNextBatch(userID string) string

LoadNextBatch from memory.

func (*InMemoryStore) LoadRoom

func (s *InMemoryStore) LoadRoom(roomID string) *Room

LoadRoom from memory.

func (*InMemoryStore) SaveFilterID

func (s *InMemoryStore) SaveFilterID(userID, filterID string)

SaveFilterID to memory.

func (*InMemoryStore) SaveNextBatch

func (s *InMemoryStore) SaveNextBatch(userID, nextBatchToken string)

SaveNextBatch to memory.

func (*InMemoryStore) SaveRoom

func (s *InMemoryStore) SaveRoom(room *Room)

SaveRoom to memory.

type LocationMessage

type LocationMessage struct {
	MsgType       string    `json:"msgtype"`
	Body          string    `json:"body"`
	GeoURI        string    `json:"geo_uri"`
	ThumbnailURL  string    `json:"thumbnail_url,omitempty"`
	ThumbnailInfo ImageInfo `json:"thumbnail_info,omitempty"`
}

LocationMessage is an m.location event - http://matrix.org/docs/spec/client_server/r0.2.0.html#m-location

type NotificationPowerLevels

type NotificationPowerLevels struct {
	Room int `json:"room"`
}

type OnEventListener

type OnEventListener func(*Event)

OnEventListener can be used with DefaultSyncer.OnEventType to be informed of incoming events.

type PhoneIdentifier

type PhoneIdentifier struct {
	IDType  string `json:"type"` // Set by NewPhoneIdentifier
	Country string `json:"country"`
	Phone   string `json:"phone"`
}

PhoneIdentifier is the Identifier for https://matrix.org/docs/spec/client_server/r0.6.0#phone-number

func NewPhoneIdentifier

func NewPhoneIdentifier(country, phone string) PhoneIdentifier

NewPhoneIdentifier creates a new UserIdentifier with IDType set to "m.id.user"

func (PhoneIdentifier) Type

func (i PhoneIdentifier) Type() string

Type implements the Identifier interface

type PowerLevels

type PowerLevels struct {
	Ban           int                     `json:"ban"`
	Invite        int                     `json:"invite"`
	Kick          int                     `json:"kick"`
	Redact        int                     `json:"redact"`
	Events        map[string]int          `json:"events"`
	Users         map[string]int          `json:"users"`
	Notifications NotificationPowerLevels `json:"notifications"`
	EventsDefault int                     `json:"events_default"`
	StateDefault  int                     `json:"state_default"`
	UsersDefault  int                     `json:"users_default"`
}

PowerLevels is and m.room.power_levels event - https://matrix.org/docs/spec/client_server/r0.6.1#m-room-power-levels

type PublicRoom

type PublicRoom struct {
	CanonicalAlias   string   `json:"canonical_alias"`
	Name             string   `json:"name"`
	WorldReadable    bool     `json:"world_readable"`
	Topic            string   `json:"topic"`
	NumJoinedMembers int      `json:"num_joined_members"`
	AvatarURL        string   `json:"avatar_url"`
	RoomID           string   `json:"room_id"`
	GuestCanJoin     bool     `json:"guest_can_join"`
	Aliases          []string `json:"aliases"`
}

PublicRoom represents the information about a public room obtainable from the room directory

type PushActionType

type PushActionType string

PushActionType is the type of a PushAction

const (
	ActionNotify     PushActionType = "notify"
	ActionDontNotify PushActionType = "dont_notify"
	ActionCoalesce   PushActionType = "coalesce"
	ActionSetTweak   PushActionType = "set_tweak"
)

The allowed push action types as specified in spec section 11.12.1.4.1.

type PushCondKind

type PushCondKind string

PushCondKind is the type of a push condition.

const (
	KindEventMatch            PushCondKind = "event_match"
	KindContainsDisplayName   PushCondKind = "contains_display_name"
	KindRoomMemberCount       PushCondKind = "room_member_count"
	KindEventPropertyIs       PushCondKind = "event_property_is"
	KindEventPropertyContains PushCondKind = "event_property_contains"

	KindRelatedEventMatch         PushCondKind = "related_event_match"
	KindUnstableRelatedEventMatch PushCondKind = "im.nheko.msc3664.related_event_match"
)

The allowed push condition kinds as specified in https://spec.matrix.org/v1.2/client-server-api/#conditions-1

type PushCondition

type PushCondition struct {
	// The type of the condition.
	Kind PushCondKind `json:"kind"`
	// The dot-separated field of the event to match. Only applicable if kind is EventMatch.
	Key string `json:"key,omitempty"`
	// The glob-style pattern to match the field against. Only applicable if kind is EventMatch.
	Pattern string `json:"pattern,omitempty"`
	// The exact value to match the field against. Only applicable if kind is EventPropertyIs or EventPropertyContains.
	Value any `json:"value,omitempty"`
	// The condition that needs to be fulfilled for RoomMemberCount-type conditions.
	// A decimal integer optionally prefixed by ==, <, >, >= or <=. Prefix "==" is assumed if no prefix found.
	MemberCountCondition string `json:"is,omitempty"`

	// The relation type for related_event_match from MSC3664
	RelType RelationType `json:"rel_type,omitempty"`
}

PushCondition wraps a condition that is required for a specific PushRule to be used.

type PushRuleType

type PushRuleType string
const (
	OverrideRule  PushRuleType = "override"
	ContentRule   PushRuleType = "content"
	RoomRule      PushRuleType = "room"
	SenderRule    PushRuleType = "sender"
	UnderrideRule PushRuleType = "underride"
)

type RelationType

type RelationType string
const (
	RelReplace    RelationType = "m.replace"
	RelReference  RelationType = "m.reference"
	RelAnnotation RelationType = "m.annotation"
	RelThread     RelationType = "m.thread"
)

type ReqAccountPassword

type ReqAccountPassword struct {
	LogoutDevices bool        `json:"logout_devices"`
	NewPassword   string      `json:"new_password"`
	Auth          interface{} `json:"auth"`
}

type ReqBanUser

type ReqBanUser struct {
	Reason string `json:"reason,omitempty"`
	UserID string `json:"user_id"`
}

ReqBanUser is the JSON request for http://matrix.org/docs/spec/client_server/r0.2.0.html#post-matrix-client-r0-rooms-roomid-ban

type ReqCreateRoom

type ReqCreateRoom struct {
	Visibility      string                 `json:"visibility,omitempty"`
	RoomAliasName   string                 `json:"room_alias_name,omitempty"`
	Name            string                 `json:"name,omitempty"`
	Topic           string                 `json:"topic,omitempty"`
	Invite          []string               `json:"invite,omitempty"`
	Invite3PID      []ReqInvite3PID        `json:"invite_3pid,omitempty"`
	CreationContent map[string]interface{} `json:"creation_content,omitempty"`
	InitialState    []Event                `json:"initial_state,omitempty"`
	Preset          string                 `json:"preset,omitempty"`
	IsDirect        bool                   `json:"is_direct,omitempty"`
	RoomVersion     string                 `json:"room_version,omitempty"`
}

ReqCreateRoom is the JSON request for https://matrix.org/docs/spec/client_server/r0.2.0.html#post-matrix-client-r0-createroom

type ReqEmailRequestToken

type ReqEmailRequestToken struct {
	IdServer      string `json:"id_server,omitempty"`
	IdAccessToken string `json:"id_access_token,omitempty"`
	Secret        string `json:"client_secret"`
	Email         string `json:"email"`
	SendAttempt   int    `json:"send_attempt"`
	NextLink      string `json:"next_link,omitempty"`
}

ReqEmailRequestToken is the JSON request for

https://matrix.org/docs/spec/client_server/r0.6.1#post-matrix-client-r0-register-email-requesttoken
https://matrix.org/docs/spec/client_server/r0.6.1#post-matrix-client-r0-account-password-email-requesttoken
https://matrix.org/docs/spec/client_server/r0.6.1#post-matrix-client-r0-account-3pid-email-requesttoken

type ReqGetAccountData

type ReqGetAccountData struct {
	Type string
}

ReqGetAccountData is the JSON request for https://matrix.org/docs/spec/client_server/r0.6.1#get-matrix-client-r0-user-userid-account-data-type

type ReqHierarchy

type ReqHierarchy struct {
	RoomId        string
	SuggestedOnly bool
	Limit         int
}

type ReqInvite3PID

type ReqInvite3PID struct {
	IDServer string `json:"id_server"`
	Medium   string `json:"medium"`
	Address  string `json:"address"`
}

ReqInvite3PID is the JSON request for https://matrix.org/docs/spec/client_server/r0.2.0.html#id57 It is also a JSON object used in https://matrix.org/docs/spec/client_server/r0.2.0.html#post-matrix-client-r0-createroom

type ReqInviteUser

type ReqInviteUser struct {
	UserID string `json:"user_id"`
	Reason string `json:"reason"`
}

ReqInviteUser is the JSON request for http://matrix.org/docs/spec/client_server/r0.2.0.html#post-matrix-client-r0-rooms-roomid-invite

type ReqKickUser

type ReqKickUser struct {
	Reason string `json:"reason,omitempty"`
	UserID string `json:"user_id"`
}

ReqKickUser is the JSON request for http://matrix.org/docs/spec/client_server/r0.2.0.html#post-matrix-client-r0-rooms-roomid-kick

type ReqLogin

type ReqLogin struct {
	Type                     string     `json:"type"`
	Identifier               Identifier `json:"identifier,omitempty"`
	Password                 string     `json:"password,omitempty"`
	Medium                   string     `json:"medium,omitempty"`
	User                     string     `json:"user,omitempty"`
	Address                  string     `json:"address,omitempty"`
	Token                    string     `json:"token,omitempty"`
	DeviceID                 string     `json:"device_id,omitempty"`
	InitialDeviceDisplayName string     `json:"initial_device_display_name,omitempty"`
	InhibitDevice            bool       `json:"inhibit_device"`
	TotpSid                  string     `json:"totp_sid"`
	Passcode                 string     `json:"passcode"`
	Sid                      string     `json:"sid,omitempty"`
}

ReqLogin is the JSON request for http://matrix.org/docs/spec/client_server/r0.6.0.html#post-matrix-client-r0-login

type ReqPostThreePID

type ReqPostThreePID struct {
	ThreePIDCredes ThreePIDCreds `json:"three_pid_creds"`
}

type ReqPutAccountData

type ReqPutAccountData struct {
	ReqGetAccountData
	Data map[string]interface{}
}

ReqPutAccountData is the JSON request for https://matrix.org/docs/spec/client_server/r0.6.1#put-matrix-client-r0-user-userid-account-data-type

type ReqPutPushRule

type ReqPutPushRule struct {
	Before string `json:"-"`
	After  string `json:"-"`

	Actions    []PushActionType `json:"actions"`
	Conditions []PushCondition  `json:"conditions"`
	Pattern    string           `json:"pattern"`
}

type ReqRedact

type ReqRedact struct {
	Reason string `json:"reason,omitempty"`
}

ReqRedact is the JSON request for http://matrix.org/docs/spec/client_server/r0.2.0.html#put-matrix-client-r0-rooms-roomid-redact-eventid-txnid

type ReqRegister

type ReqRegister struct {
	Username                 string      `json:"username,omitempty"`
	BindEmail                bool        `json:"bind_email,omitempty"`
	Password                 string      `json:"password,omitempty"`
	DeviceID                 string      `json:"device_id,omitempty"`
	InitialDeviceDisplayName string      `json:"initial_device_display_name"`
	InhibitLogin             bool        `json:"inhibit_login"`
	Auth                     interface{} `json:"auth,omitempty"`
}

ReqRegister is the JSON request for http://matrix.org/docs/spec/client_server/r0.2.0.html#post-matrix-client-r0-register

type ReqTyping

type ReqTyping struct {
	Typing  bool  `json:"typing"`
	Timeout int64 `json:"timeout"`
}

ReqTyping is the JSON request for https://matrix.org/docs/spec/client_server/r0.2.0.html#put-matrix-client-r0-rooms-roomid-typing-userid

type ReqUnbanUser

type ReqUnbanUser struct {
	UserID string `json:"user_id"`
}

ReqUnbanUser is the JSON request for http://matrix.org/docs/spec/client_server/r0.2.0.html#post-matrix-client-r0-rooms-roomid-unban

type ReqUserDirectorySearch

type ReqUserDirectorySearch struct {
	Limit      int32  `json:"limit"`
	SearchTerm string `json:"search_term"`
}

type RespAccountData

type RespAccountData map[string]interface{}

RespAccountData is JSON response for https://matrix.org/docs/spec/client_server/r0.6.1#get-matrix-client-r0-user-userid-account-data-type

type RespBanUser

type RespBanUser struct{}

RespBanUser is the JSON response for http://matrix.org/docs/spec/client_server/r0.2.0.html#post-matrix-client-r0-rooms-roomid-ban

type RespCreateFilter

type RespCreateFilter struct {
	FilterID string `json:"filter_id"`
}

RespCreateFilter is the JSON response for http://matrix.org/docs/spec/client_server/r0.2.0.html#post-matrix-client-r0-user-userid-filter

type RespCreateRoom

type RespCreateRoom struct {
	RoomID string `json:"room_id"`
}

RespCreateRoom is the JSON response for https://matrix.org/docs/spec/client_server/r0.2.0.html#post-matrix-client-r0-createroom

type RespEmailRequestToken

type RespEmailRequestToken struct {
	Sid       string `json:"sid"`
	SumbitURL string `json:"submit_url"`
}

RespEmailRequestToken is JSON response for

https://matrix.org/docs/spec/client_server/r0.6.1#post-matrix-client-r0-register-email-requesttoken
https://matrix.org/docs/spec/client_server/r0.6.1#post-matrix-client-r0-account-password-email-requesttoken
https://matrix.org/docs/spec/client_server/r0.6.1#post-matrix-client-r0-account-3pid-email-requesttoken

type RespError

type RespError struct {
	ErrCode      string `json:"errcode"`
	Err          string `json:"error"`
	RetryAfterMs int    `json:"retry_after_ms"`
}

RespError is the standard JSON error response from Homeservers. It also implements the Golang "error" interface. See http://matrix.org/docs/spec/client_server/r0.2.0.html#api-standards

func (RespError) Error

func (e RespError) Error() string

Error returns the errcode and error message.

type RespForgetRoom

type RespForgetRoom struct{}

RespForgetRoom is the JSON response for http://matrix.org/docs/spec/client_server/r0.2.0.html#post-matrix-client-r0-rooms-roomid-forget

type RespGetDevices

type RespGetDevices struct {
	Devices []Device `json:"devices"`
}

RespGetDevices is JSON response for https://matrix.org/docs/spec/client_server/r0.6.1#get-matrix-client-r0-devices

type RespGetThreePID

type RespGetThreePID struct {
	ThreePIDs []ThreePID `json:"threepids"`
}

RespGetThreePID is JSON response for https://matrix.org/docs/spec/client_server/r0.6.1#get-matrix-client-r0-account-3pid

type RespHierarchy

type RespHierarchy struct {
	Rooms []HierarchyRoom `json:"rooms"`
}

type RespInviteUser

type RespInviteUser struct{}

RespInviteUser is the JSON response for http://matrix.org/docs/spec/client_server/r0.2.0.html#post-matrix-client-r0-rooms-roomid-invite

type RespJoinRoom

type RespJoinRoom struct {
	RoomID string `json:"room_id"`
}

RespJoinRoom is the JSON response for http://matrix.org/docs/spec/client_server/r0.2.0.html#post-matrix-client-r0-rooms-roomid-join

type RespJoinedMembers

type RespJoinedMembers struct {
	Joined map[string]struct {
		DisplayName *string `json:"display_name"`
		AvatarURL   *string `json:"avatar_url"`
	} `json:"joined"`
}

RespJoinedMembers is the JSON response for TODO-SPEC https://github.com/matrix-org/synapse/pull/1680

type RespJoinedRooms

type RespJoinedRooms struct {
	JoinedRooms []string `json:"joined_rooms"`
}

RespJoinedRooms is the JSON response for TODO-SPEC https://github.com/matrix-org/synapse/pull/1680

type RespKickUser

type RespKickUser struct{}

RespKickUser is the JSON response for http://matrix.org/docs/spec/client_server/r0.2.0.html#post-matrix-client-r0-rooms-roomid-kick

type RespLeaveRoom

type RespLeaveRoom struct{}

RespLeaveRoom is the JSON response for http://matrix.org/docs/spec/client_server/r0.2.0.html#post-matrix-client-r0-rooms-roomid-leave

type RespLogin

type RespLogin struct {
	AccessToken string               `json:"access_token"`
	DeviceID    string               `json:"device_id"`
	HomeServer  string               `json:"home_server"`
	UserID      string               `json:"user_id"`
	WellKnown   DiscoveryInformation `json:"well_known"`
	TotpSid     string               `json:"totp_sid"`
}

RespLogin is the JSON response for http://matrix.org/docs/spec/client_server/r0.6.0.html#post-matrix-client-r0-login

type RespLogout

type RespLogout struct{}

RespLogout is the JSON response for http://matrix.org/docs/spec/client_server/r0.6.0.html#post-matrix-client-r0-logout

type RespLogoutAll

type RespLogoutAll struct{}

RespLogoutAll is the JSON response for https://matrix.org/docs/spec/client_server/r0.6.0#post-matrix-client-r0-logout-all

type RespMediaUpload

type RespMediaUpload struct {
	ContentURI string `json:"content_uri"`
}

RespMediaUpload is the JSON response for http://matrix.org/docs/spec/client_server/r0.2.0.html#post-matrix-media-r0-upload

type RespMembers

type RespMembers struct {
	Chunk []Event `json:"chunk"`
}

type RespMessages

type RespMessages struct {
	Start string  `json:"start"`
	Chunk []Event `json:"chunk"`
	End   string  `json:"end"`
}

RespMessages is the JSON response for https://matrix.org/docs/spec/client_server/r0.2.0.html#get-matrix-client-r0-rooms-roomid-messages

type RespPublicRooms

type RespPublicRooms struct {
	TotalRoomCountEstimate int          `json:"total_room_count_estimate"`
	PrevBatch              string       `json:"prev_batch"`
	NextBatch              string       `json:"next_batch"`
	Chunk                  []PublicRoom `json:"chunk"`
}

RespPublicRooms is the JSON response for http://matrix.org/speculator/spec/HEAD/client_server/unstable.html#get-matrix-client-unstable-publicrooms

type RespRegister

type RespRegister struct {
	AccessToken  string `json:"access_token"`
	DeviceID     string `json:"device_id"`
	HomeServer   string `json:"home_server"`
	RefreshToken string `json:"refresh_token"`
	UserID       string `json:"user_id"`
}

RespRegister is the JSON response for http://matrix.org/docs/spec/client_server/r0.2.0.html#post-matrix-client-r0-register

type RespRoomAlias

type RespRoomAlias struct {
	RoomID  string   `json:"room_id"`
	Servers []string `json:"servers"`
}

RespRoomAlias is JSON response for https://matrix.org/docs/spec/client_server/r0.6.1#get-matrix-client-r0-directory-room-roomalias

type RespSendEvent

type RespSendEvent struct {
	EventID string `json:"event_id"`
}

RespSendEvent is the JSON response for http://matrix.org/docs/spec/client_server/r0.2.0.html#put-matrix-client-r0-rooms-roomid-send-eventtype-txnid

type RespSync

type RespSync struct {
	NextBatch   string `json:"next_batch"`
	AccountData struct {
		Events []Event `json:"events"`
	} `json:"account_data"`
	Presence struct {
		Events []Event `json:"events"`
	} `json:"presence"`
	Rooms struct {
		Leave map[string]struct {
			State struct {
				Events []Event `json:"events"`
			} `json:"state"`
			Timeline struct {
				Events    []Event `json:"events"`
				Limited   bool    `json:"limited"`
				PrevBatch string  `json:"prev_batch"`
			} `json:"timeline"`
		} `json:"leave"`
		Join map[string]struct {
			State struct {
				Events []Event `json:"events"`
			} `json:"state"`
			Timeline struct {
				Events    []Event `json:"events"`
				Limited   bool    `json:"limited"`
				PrevBatch string  `json:"prev_batch"`
			} `json:"timeline"`
			Ephemeral struct {
				Events []Event `json:"events"`
			} `json:"ephemeral"`
		} `json:"join"`
		Invite map[string]struct {
			State struct {
				Events []Event
			} `json:"invite_state"`
		} `json:"invite"`
	} `json:"rooms"`
	Multiroom map[string]map[string]struct {
		Content   interface{} `json:"content"`
		Timestamp int64       `json:"timestamp"`
	} `json:"multiroom"`
}

RespSync is the JSON response for http://matrix.org/docs/spec/client_server/r0.2.0.html#get-matrix-client-r0-sync

type RespTurnServer

type RespTurnServer struct {
	Username string   `json:"username"`
	Password string   `json:"password"`
	TTL      int      `json:"ttl"`
	URIs     []string `json:"uris"`
}

RespTurnServer is the JSON response from a Turn Server

type RespUnbanUser

type RespUnbanUser struct{}

RespUnbanUser is the JSON response for http://matrix.org/docs/spec/client_server/r0.2.0.html#post-matrix-client-r0-rooms-roomid-unban

type RespUserDirectorySearch

type RespUserDirectorySearch struct {
	Limited bool     `json:"limited"`
	Results []Result `json:"results"`
}

type RespUserDisplayName

type RespUserDisplayName struct {
	DisplayName string `json:"displayname"`
}

RespUserDisplayName is the JSON response for https://matrix.org/docs/spec/client_server/r0.2.0.html#get-matrix-client-r0-profile-userid-displayname

type RespUserInteractive

type RespUserInteractive struct {
	Flows []struct {
		Stages []string `json:"stages"`
	} `json:"flows"`
	Params    map[string]interface{} `json:"params"`
	Session   string                 `json:"session"`
	Completed []string               `json:"completed"`
	ErrCode   string                 `json:"errcode"`
	Error     string                 `json:"error"`
}

RespUserInteractive is the JSON response for https://matrix.org/docs/spec/client_server/r0.2.0.html#user-interactive-authentication-api

func (RespUserInteractive) HasSingleStageFlow

func (r RespUserInteractive) HasSingleStageFlow(stageName string) bool

HasSingleStageFlow returns true if there exists at least 1 Flow with a single stage of stageName.

type RespUserStatus

type RespUserStatus struct {
	Presence        string `json:"presence"`
	StatusMsg       string `json:"status_msg"`
	LastActiveAgo   int    `json:"last_active_ago"`
	CurrentlyActive bool   `json:"currently_active"`
}

RespUserStatus is the JSON response for https://matrix.org/docs/spec/client_server/r0.6.0#get-matrix-client-r0-presence-userid-status

type RespVersions

type RespVersions struct {
	Versions []string `json:"versions"`
}

RespVersions is the JSON response for http://matrix.org/docs/spec/client_server/r0.2.0.html#get-matrix-client-versions

type RespWhoAmI

type RespWhoAmI struct {
	UserId   string `json:"user_id"`
	DeviceId string `json:"device_id"`
}

RespWhoAmI is JSON response for https://matrix.org/docs/spec/client_server/r0.6.1#get-matrix-client-r0-account-whoami

type Result

type Result struct {
	AvatarUrl   string `json:"avatar_url"`
	DisplayName string `json:"display_name"`
	UserId      string `json:"user_id"`
	Status      int32  `json:"status"`
}

type Room

type Room struct {
	ID    string
	State map[string]map[string]*Event
}

Room represents a single Matrix room.

func NewRoom

func NewRoom(roomID string) *Room

NewRoom creates a new Room with the given ID

func (Room) GetMembershipState

func (room Room) GetMembershipState(userID string) string

GetMembershipState returns the membership state of the given user ID in this room. If there is no entry for this member, 'leave' is returned for consistency with left users.

func (Room) GetStateEvent

func (room Room) GetStateEvent(eventType string, stateKey string) *Event

GetStateEvent returns the state event for the given type/state_key combo, or nil.

func (Room) UpdateState

func (room Room) UpdateState(event *Event)

UpdateState updates the room's current state with the given Event. This will clobber events based on the type/state_key combination.

type RoomFilter

type RoomFilter struct {
	AccountData  FilterPart `json:"account_data,omitempty"`
	Ephemeral    FilterPart `json:"ephemeral,omitempty"`
	IncludeLeave bool       `json:"include_leave,omitempty"`
	NotRooms     []string   `json:"not_rooms,omitempty"`
	Rooms        []string   `json:"rooms,omitempty"`
	State        FilterPart `json:"state,omitempty"`
	Timeline     FilterPart `json:"timeline,omitempty"`
}

RoomFilter is used to define filtering rules for room events

type Storer

type Storer interface {
	SaveFilterID(userID, filterID string)
	LoadFilterID(userID string) string
	SaveNextBatch(userID, nextBatchToken string)
	LoadNextBatch(userID string) string
	SaveRoom(room *Room)
	LoadRoom(roomID string) *Room
}

Storer is an interface which must be satisfied to store client data.

You can either write a struct which persists this data to disk, or you can use the provided "InMemoryStore" which just keeps data around in-memory which is lost on restarts.

type Syncer

type Syncer interface {
	// Process the /sync response. The since parameter is the since= value that was used to produce the response.
	// This is useful for detecting the very first sync (since=""). If an error is return, Syncing will be stopped
	// permanently.
	ProcessResponse(resp *RespSync, since string) error
	// OnFailedSync returns either the time to wait before retrying or an error to stop syncing permanently.
	OnFailedSync(res *RespSync, err error) (time.Duration, error)
	// GetFilterJSON for the given user ID. NOT the filter ID.
	GetFilterJSON(userID string) json.RawMessage
}

Syncer represents an interface that must be satisfied in order to do /sync requests on a client.

type TagContent

type TagContent struct {
	Tags map[string]TagProperties `json:"tags"`
}

TagContent contains the data for an m.tag message type https://matrix.org/docs/spec/client_server/r0.4.0.html#m-tag

type TagProperties

type TagProperties struct {
	Order float32 `json:"order,omitempty"` // Empty values must be neglected
}

TagProperties contains the properties of a Tag

type TextMessage

type TextMessage struct {
	MsgType       string `json:"msgtype"`
	Body          string `json:"body"`
	FormattedBody string `json:"formatted_body"`
	Format        string `json:"format"`
}

TextMessage is the contents of a Matrix formated message event.

type ThirdpartyIdentifier

type ThirdpartyIdentifier struct {
	IDType  string `json:"type"` // Set by NewThirdpartyIdentifier
	Medium  string `json:"medium"`
	Address string `json:"address"`
}

ThirdpartyIdentifier is the Identifier for https://matrix.org/docs/spec/client_server/r0.6.0#third-party-id

func NewThirdpartyIdentifier

func NewThirdpartyIdentifier(medium, address string) ThirdpartyIdentifier

NewThirdpartyIdentifier creates a new UserIdentifier with IDType set to "m.id.user"

func (ThirdpartyIdentifier) Type

func (i ThirdpartyIdentifier) Type() string

Type implements the Identifier interface

type ThreePID

type ThreePID struct {
	AddedAt     int    `json:"added_at"`
	Address     string `json:"address"`
	Medium      string `json:"medium"`
	ValidatedAt int    `json:"validated_at"`
}

type ThreePIDCreds

type ThreePIDCreds struct {
	ClientSecret  string `json:"client_secret"`
	IdAccessToken string `json:"id_access_token,omitempty"`
	IdServer      string `json:"id_server"`
	Sid           string `json:"sid"`
}

type ThumbnailInfo

type ThumbnailInfo struct {
	Height   uint   `json:"h,omitempty"`
	Width    uint   `json:"w,omitempty"`
	Mimetype string `json:"mimetype,omitempty"`
	Size     uint   `json:"size,omitempty"`
}

ThumbnailInfo contains info about an thumbnail image - http://matrix.org/docs/spec/client_server/r0.2.0.html#m-image

type UserIdentifier

type UserIdentifier struct {
	IDType string `json:"type"` // Set by NewUserIdentifer
	User   string `json:"user"`
}

UserIdentifier is the Identifier for https://matrix.org/docs/spec/client_server/r0.6.0#matrix-user-id

func NewUserIdentifier

func NewUserIdentifier(user string) UserIdentifier

NewUserIdentifier creates a new UserIdentifier with IDType set to "m.id.user"

func (UserIdentifier) Type

func (i UserIdentifier) Type() string

Type implements the Identifier interface

type VideoInfo

type VideoInfo struct {
	Mimetype      string        `json:"mimetype,omitempty"`
	ThumbnailInfo ThumbnailInfo `json:"thumbnail_info"`
	ThumbnailURL  string        `json:"thumbnail_url,omitempty"`
	Height        uint          `json:"h,omitempty"`
	Width         uint          `json:"w,omitempty"`
	Duration      uint          `json:"duration,omitempty"`
	Size          uint          `json:"size,omitempty"`
}

VideoInfo contains info about a video - http://matrix.org/docs/spec/client_server/r0.2.0.html#m-video

type VideoMessage

type VideoMessage struct {
	MsgType string    `json:"msgtype"`
	Body    string    `json:"body"`
	URL     string    `json:"url"`
	Info    VideoInfo `json:"info"`
}

VideoMessage is an m.video - http://matrix.org/docs/spec/client_server/r0.2.0.html#m-video

Jump to

Keyboard shortcuts

? : This menu
/ : Search site
f or F : Jump to
y or Y : Canonical URL